Repository: dcloudio/mui Branch: master Commit: e216655901e5 Files: 281 Total size: 3.9 MB Directory structure: gitextract_066cprrn/ ├── .gitignore ├── Gruntfile.js ├── LICENSE ├── README.md ├── dist/ │ ├── css/ │ │ └── mui.css │ └── js/ │ └── mui.js ├── examples/ │ ├── hello-mui/ │ │ ├── .project │ │ ├── css/ │ │ │ ├── app.css │ │ │ ├── feedback.css │ │ │ ├── icons-extra.css │ │ │ ├── mui.dtpicker.css │ │ │ ├── mui.imageviewer.css │ │ │ ├── mui.indexedlist.css │ │ │ ├── mui.listpicker.css │ │ │ ├── mui.picker.all.css │ │ │ ├── mui.picker.css │ │ │ └── mui.poppicker.css │ │ ├── examples/ │ │ │ ├── accordion.html │ │ │ ├── actionsheet-plus.html │ │ │ ├── actionsheet.html │ │ │ ├── ad.html │ │ │ ├── ajax.html │ │ │ ├── badges.html │ │ │ ├── best-practices/ │ │ │ │ └── list-to-detail/ │ │ │ │ ├── detail.html │ │ │ │ ├── list-to-detail.css │ │ │ │ └── listview.html │ │ │ ├── buttons-with-badges.html │ │ │ ├── buttons-with-block.html │ │ │ ├── buttons-with-icons.html │ │ │ ├── buttons-with-loading.html │ │ │ ├── buttons.html │ │ │ ├── card.html │ │ │ ├── checkbox.html │ │ │ ├── date.html │ │ │ ├── dialog.html │ │ │ ├── dtpicker.html │ │ │ ├── echarts.html │ │ │ ├── feedback.html │ │ │ ├── grid-default.html │ │ │ ├── grid-pagination.html │ │ │ ├── guide.html │ │ │ ├── icons-extra.html │ │ │ ├── icons.html │ │ │ ├── im-chat.html │ │ │ ├── imageviewer-native.html │ │ │ ├── imageviewer.html │ │ │ ├── indexed-list-select.html │ │ │ ├── indexed-list.html │ │ │ ├── info.html │ │ │ ├── input.html │ │ │ ├── lazyload-image.html │ │ │ ├── list-triplex-row.html │ │ │ ├── list-with-input.html │ │ │ ├── locker-dom.html │ │ │ ├── login.html │ │ │ ├── media-list.html │ │ │ ├── message-bottom.html │ │ │ ├── modals.html │ │ │ ├── nav-nativeObj.html │ │ │ ├── nav.html │ │ │ ├── nav_transparent.html │ │ │ ├── nav_transparent_native.html │ │ │ ├── numbox.html │ │ │ ├── offcanvas-drag-down.html │ │ │ ├── offcanvas-drag-left-plus-main.html │ │ │ ├── offcanvas-drag-left-plus-menu.html │ │ │ ├── offcanvas-drag-left.html │ │ │ ├── offcanvas-drag-right-plus-main.html │ │ │ ├── offcanvas-drag-right-plus-menu.html │ │ │ ├── offcanvas-drag-right.html │ │ │ ├── pagination.html │ │ │ ├── picker.html │ │ │ ├── popovers.html │ │ │ ├── progressbar.html │ │ │ ├── pullrefresh.html │ │ │ ├── pullrefresh_main.html │ │ │ ├── pullrefresh_sub.html │ │ │ ├── pullrefresh_with_tab.html │ │ │ ├── radio.html │ │ │ ├── range.html │ │ │ ├── setting.html │ │ │ ├── slider-default.html │ │ │ ├── slider-native.html │ │ │ ├── slider-table-default.html │ │ │ ├── slider-table-pagination.html │ │ │ ├── slider-with-title.html │ │ │ ├── switches.html │ │ │ ├── tab-top-subpage-1.html │ │ │ ├── tab-top-subpage-2.html │ │ │ ├── tab-top-subpage-3.html │ │ │ ├── tab-top-subpage-4.html │ │ │ ├── tab-top-subpage-5.html │ │ │ ├── tab-top-webview-main.html │ │ │ ├── tab-vertical-scroll.html │ │ │ ├── tab-webview-main.html │ │ │ ├── tab-webview-subpage-about.html │ │ │ ├── tab-webview-subpage-chat.html │ │ │ ├── tab-webview-subpage-contact.html │ │ │ ├── tab-webview-subpage-setting.html │ │ │ ├── tab-with-segmented-control-vertical.html │ │ │ ├── tab-with-segmented-control.html │ │ │ ├── tab-with-viewpagerindicator.html │ │ │ ├── tabbar-labels-only.html │ │ │ ├── tabbar-with-submenus.html │ │ │ ├── tabbar.html │ │ │ ├── tableviews-with-badges.html │ │ │ ├── tableviews-with-collapses.html │ │ │ ├── tableviews-with-swipe.html │ │ │ ├── tableviews.html │ │ │ └── typography.html │ │ ├── index-menu.html │ │ ├── index.html │ │ ├── js/ │ │ │ ├── 95516.js │ │ │ ├── arttmpl.js │ │ │ ├── beecloud.js │ │ │ ├── city.data-3.js │ │ │ ├── city.data.js │ │ │ ├── feedback.js │ │ │ ├── mui.dtpicker.js │ │ │ ├── mui.imageViewer.js │ │ │ ├── mui.indexedlist.js │ │ │ ├── mui.js │ │ │ ├── mui.lazyload.img.js │ │ │ ├── mui.lazyload.js │ │ │ ├── mui.listpicker.js │ │ │ ├── mui.locker.js │ │ │ ├── mui.picker.all.js │ │ │ ├── mui.picker.js │ │ │ ├── mui.poppicker.js │ │ │ ├── mui.previewimage.js │ │ │ ├── mui.pullToRefresh.js │ │ │ ├── mui.pullToRefresh.material.js │ │ │ ├── mui.view.js │ │ │ ├── mui.zoom.js │ │ │ ├── update.js │ │ │ └── webviewGroup.js │ │ ├── libs/ │ │ │ └── echarts-all.js │ │ └── manifest.json │ ├── login/ │ │ ├── .project │ │ ├── README.md │ │ ├── css/ │ │ │ ├── feedback-page.css │ │ │ └── style.css │ │ ├── forget_password.html │ │ ├── js/ │ │ │ ├── app.js │ │ │ ├── feedback-page.js │ │ │ ├── feedback.js │ │ │ ├── mui.enterfocus.js │ │ │ ├── mui.locker.js │ │ │ └── mui.view.js │ │ ├── libs/ │ │ │ └── easymob-webim-sdk/ │ │ │ ├── easemob.im-1.0.5.js │ │ │ ├── jquery-1.11.1.js │ │ │ ├── json2.js │ │ │ ├── quickstart.md │ │ │ └── strophe-custom-2.0.0.js │ │ ├── login.html │ │ ├── main.html │ │ ├── manifest.json │ │ ├── reg.html │ │ ├── setting.html │ │ └── unlock.html │ └── nativeTab/ │ ├── README.md │ ├── css/ │ │ └── mui.css │ ├── html/ │ │ ├── new-webview.html │ │ ├── tab-webview-subpage-chat.html │ │ └── tab-webview-subpage-contact.html │ ├── index.html │ ├── js/ │ │ ├── mui.js │ │ └── util.js │ ├── manifest.json │ └── unpackage/ │ ├── .confirmed_dependencies │ └── .dependencies ├── grunt/ │ └── mui-namespace-generator.js ├── js/ │ ├── actions.js │ ├── ajax.plugin.js │ ├── input.plugin.js │ ├── modals.js │ ├── mui.active.js │ ├── mui.ajax.5+.js │ ├── mui.ajax.js │ ├── mui.animation.js │ ├── mui.animationframe.js │ ├── mui.back.5+.js │ ├── mui.back.js │ ├── mui.button.js │ ├── mui.class.js │ ├── mui.class.scroll.js │ ├── mui.class.scroll.pullrefresh.js │ ├── mui.class.scroll.slider.js │ ├── mui.detect.5+.js │ ├── mui.detect.js │ ├── mui.dialog.alert.js │ ├── mui.dialog.confirm.js │ ├── mui.dialog.prompt.js │ ├── mui.dialog.toast.js │ ├── mui.event.js │ ├── mui.fixed.animation.js │ ├── mui.fixed.bind.js │ ├── mui.fixed.classlist.js │ ├── mui.fixed.fastclick.js │ ├── mui.fixed.js │ ├── mui.fixed.keyboard.js │ ├── mui.gestures.drag.js │ ├── mui.gestures.flick.js │ ├── mui.gestures.hold.js │ ├── mui.gestures.js │ ├── mui.gestures.longtap.js │ ├── mui.gestures.pinch.js │ ├── mui.gestures.swipe.js │ ├── mui.gestures.tap.js │ ├── mui.init.5+.js │ ├── mui.init.js │ ├── mui.init.pullrefresh.js │ ├── mui.js │ ├── mui.jsonp.js │ ├── mui.layout.js │ ├── mui.namespace.js │ ├── mui.number.js │ ├── mui.offcanvas.js │ ├── mui.popup.js │ ├── mui.progressbar.js │ ├── mui.pullrefresh.5+.js │ ├── mui.pullrefresh.js │ ├── mui.target.js │ ├── mui.transparent.js │ ├── popovers.js │ ├── segmented-controllers.js │ ├── sliders.js │ ├── switches.js │ └── tableviews.js ├── mui_snippets.rb ├── package.json ├── plugin/ │ ├── picker/ │ │ ├── css/ │ │ │ ├── mui.dtpicker.css │ │ │ ├── mui.picker.css │ │ │ └── mui.poppicker.css │ │ ├── dist/ │ │ │ ├── css/ │ │ │ │ └── mui.picker.all.css │ │ │ └── js/ │ │ │ └── mui.picker.all.js │ │ ├── gulpfile.js │ │ ├── js/ │ │ │ ├── mui.dtpicker.js │ │ │ ├── mui.picker.js │ │ │ └── mui.poppicker.js │ │ └── package.json │ └── share/ │ └── plusShare.js ├── sass/ │ ├── badges.scss │ ├── bars.scss │ ├── base.scss │ ├── buttons.scss │ ├── cards.scss │ ├── forms.scss │ ├── fullscreen.scss │ ├── grid.scss │ ├── hack.scss │ ├── icon.scss │ ├── iframe.scss │ ├── iscroll.scss │ ├── loadings.scss │ ├── mixins.scss │ ├── modals.scss │ ├── mui.scss │ ├── normalize.scss │ ├── number.scss │ ├── off-canvas.scss │ ├── os.scss │ ├── pagination.scss │ ├── popovers.scss │ ├── popup.scss │ ├── progressbar.scss │ ├── pullrefreshs.scss │ ├── push.scss │ ├── scroll.scss │ ├── segmented-controls.scss │ ├── slider-cell.scss │ ├── sliders.scss │ ├── switches.scss │ ├── table-views.scss │ ├── toast.scss │ ├── type.scss │ └── variables.scss └── template/ └── feedback/ ├── css/ │ └── feedback.css ├── feedback.html ├── js/ │ └── feedback.js └── readme.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .sass-cache node_modules sass/.csscomb.json sass/.csslintrc js/.jscsrc js/.jshintrc ================================================ FILE: Gruntfile.js ================================================ /*! * Mui's Gruntfile */ /* jshint node: true */ module.exports = function(grunt) { 'use strict'; // Force use of Unix newlines grunt.util.linefeed = '\n'; RegExp.quote = function(string) { return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); }; var generateNamespace = require('./grunt/mui-namespace-generator.js'); // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), // Metadata. meta: { libPath: 'lib/', distPath: 'dist/', jsPath: 'js/', sassPath: 'sass/', examplesPath: 'examples/hello-mui/' }, banner: '/*!\n' + ' * =====================================================\n' + ' * Mui v<%= pkg.version %> (<%= pkg.homepage %>)\n' + ' * =====================================================\n' + ' */\n', clean: { all: ['<%= meta.distPath %>'], sourceMap: ['<%= meta.distPath %>css/*.map'] }, concat: { mui: { options: { banner: '<%= banner %>' }, src: [ 'js/mui.js', 'js/mui.detect.js', 'js/mui.detect.5+.js', 'js/mui.event.js', 'js/mui.target.js', 'js/mui.fixed.js', 'js/mui.fixed.bind.js', 'js/mui.fixed.classlist.js', 'js/mui.fixed.animation.js', 'js/mui.fixed.fastclick.js', 'js/mui.fixed.keyboard.js', 'js/mui.namespace.js', 'js/mui.gestures.js', 'js/mui.gestures.flick.js', 'js/mui.gestures.swipe.js', 'js/mui.gestures.drag.js', 'js/mui.gestures.tap.js', 'js/mui.gestures.longtap.js', 'js/mui.gestures.hold.js', 'js/mui.gestures.pinch.js', 'js/mui.init.js', 'js/mui.init.5+.js', 'js/mui.back.js', 'js/mui.back.5+.js', 'js/mui.init.pullrefresh.js', 'js/mui.ajax.js', 'js/mui.ajax.5+.js', 'js/mui.layout.js', 'js/mui.animation.js', 'js/mui.class.js', 'js/mui.pullrefresh.js', 'js/mui.class.scroll.js', 'js/mui.class.scroll.pullrefresh.js', 'js/mui.class.scroll.slider.js', 'js/mui.pullrefresh.5+.js', 'js/mui.offcanvas.js', 'js/actions.js', 'js/modals.js', 'js/popovers.js', 'js/segmented-controllers.js', 'js/switches.js', 'js/tableviews.js', 'js/mui.dialog.alert.js', 'js/mui.dialog.confirm.js', 'js/mui.dialog.prompt.js', 'js/mui.dialog.toast.js', 'js/mui.popup.js', 'js/mui.progressbar.js', 'js/input.plugin.js', 'js/mui.transparent.js', 'js/mui.number.js', 'js/mui.button.js' ], dest: '<%= meta.distPath %>js/<%= pkg.name %>.js', } }, sass: { options: { banner: '<%= banner %>', style: 'expanded', unixNewlines: true }, dist: { files: { '<%= meta.distPath %>css/<%= pkg.name %>.css': 'sass/mui.scss', } } }, csscomb: { options: { config: 'sass/.csscomb.json' }, dist: { files: { '<%= meta.distPath %>/css/<%= pkg.name %>.css': '<%= meta.distPath %>/css/<%= pkg.name %>.css' } }, }, copy: { fonts: { expand: true, src: 'fonts/mui*.ttf', dest: '<%= meta.distPath %>/' }, examples: { expand: true, cwd: '<%= meta.distPath %>', src: ['**/mui*'], dest: '<%= meta.examplesPath %>' } }, cssmin: { options: { banner: '', // set to empty; see bellow keepSpecialComments: '*', // set to '*' because we already add the banner in sass sourceMap: false }, mui: { src: '<%= meta.distPath %>css/<%= pkg.name %>.css', dest: '<%= meta.distPath %>css/<%= pkg.name %>.min.css' } }, uglify: { options: { banner: '<%= banner %>', compress: {}, mangle: true, preserveComments: false }, mui: { src: '<%= concat.mui.dest %>', dest: '<%= meta.distPath %>js/<%= pkg.name %>.min.js' } }, watch: { options: { dateFormat: function(time) { grunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString()); grunt.log.writeln('Waiting for more changes...'); }, livereload: true }, scripts: { files: [ '<%= meta.sassPath %>/**/*.scss', '<%= meta.jsPath %>/**/*.js', ], tasks: 'dist' } }, jshint: { options: { jshintrc: 'js/.jshintrc' }, grunt: { src: ['Gruntfile.js', 'grunt/*.js'] }, src: { src: 'js/*.js' } }, jscs: { options: { config: 'js/.jscsrc' }, grunt: { src: '<%= jshint.grunt.src %>' }, src: { src: '<%= jshint.src.src %>' }, docs: { src: '<%= jshint.docs.src %>' } }, csslint: { options: { csslintrc: 'sass/.csslintrc' }, src: [ '<%= meta.distPath %>/css/<%= pkg.name %>.css', ] }, sed: { versionNumber: { pattern: (function() { var old = grunt.option('oldver'); return old ? RegExp.quote(old) : old; })(), replacement: grunt.option('newver'), recursive: true } } }); // Load the plugins require('load-grunt-tasks')(grunt, { scope: 'devDependencies' }); require('time-grunt')(grunt); // Default task(s). grunt.registerTask('cleanAll', ['clean']); grunt.registerTask('dist-css', ['sass', 'csscomb', 'cssmin', 'clean:sourceMap']); grunt.registerTask('dist-js', ['concat', 'build-namespace', 'uglify']); grunt.registerTask('dist', ['clean:all', 'dist-css', 'dist-js', 'copy']); grunt.registerTask('build', ['dist']); grunt.registerTask('default', ['dist']); grunt.registerTask('build-namespace', generateNamespace); grunt.registerTask('server', ['dist','watch']); // Version numbering task. // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z // This can be overzealous, so its changes should always be manually reviewed! grunt.registerTask('change-version-number', 'sed'); grunt.event.on('watch', function(action, filepath, target) { grunt.log.writeln(target + ': ' + filepath + ' has ' + action); }); }; ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 connors and other contributors 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 ================================================ mui === 性能和体验的差距,一直是mobile app开发者放弃HTML5的首要原因。 浏览器天生的切页白屏、不忍直视的转页动画、浮动元素的抖动、无法流畅下拉刷新等问题,这些都让HTML5开发者倍感挫败,尤其拿到Android低端机运行,摔手机的心都有; 另一方面,浏览器默认控件样式又少又丑,制作一个漂亮的控件非常麻烦,也有一些制作简单的ui框架但性能低下。 mui框架有效的解决了这些问题,这是一个可以方便开发出高性能App的框架,也是目前最接近原生App效果的框架。 赞助我们 ------ 一个手艺人需要3万个粉丝养活,希望你能成为其中之一,[前往赞助](https://dev.dcloud.net.cn/sponsor/?channel=mui) 参考文档 ------ [mui官网](http://dev.dcloud.net.cn/mui/)文档使用[Jekyll](http://jekyllrb.com) 构建,[立即查看](http://dev.dcloud.net.cn/mui/)。 快速体验 -------- [在线下载](http://www.dcloud.io/hellomui)或扫描如下二维码下载Hello MUI,可在手机上体验MUI的控件UI及能力展示; 在线交流 -------- 若你在使用过程中有任何经验、想法、疑惑,都可以在[问答社区](http://ask.dcloud.net.cn/topic/mui) 发起文章,和其它mui用户一起交流; License ------- mui遵循MIT License; 开发工具 ------- mui组件已被封装成[HBuilder](http://www.dcloud.io)代码块,只需要简单几个字符,就可以快速生成各个组件对应的HTML代码,因此和[Hbuilder](http://www.dcloud.io)两个一起用,效果会更好; ================================================ FILE: dist/css/mui.css ================================================ /*! * ===================================================== * Mui v3.7.3 (http://dev.dcloud.net.cn/mui) * ===================================================== */ /*! normalize.css v3.0.1 | MIT License | git.io/normalize */ html { font-family: sans-serif; -webkit-text-size-adjust: 100%; } body { margin: 0; } body::after { position: fixed; top: -1000px; left: -1000px; content: ''; -webkit-animation: shadow-preload .1s; animation: shadow-preload .1s; -webkit-animation-delay: 3s; animation-delay: 3s; } @-webkit-keyframes shadow-preload { 0% { background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png); } 100% { background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png); } } @keyframes shadow-preload { 0% { background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png); } 100% { background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png); } } article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } audio, canvas, progress, video { display: inline-block; vertical-align: baseline; } audio:not([controls]) { display: none; height: 0; } [hidden], template { display: none; } a { background: transparent; } a:active, a:hover { outline: 0; } abbr[title] { border-bottom: 1px dotted; } b, strong { font-weight: bold; } dfn { font-style: italic; } h1 { font-size: 2em; margin: .67em 0; } mark { color: #000; background: #ff0; } small { font-size: 80%; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sup { top: -.5em; } sub { bottom: -.25em; } img { border: 0; } svg:not(:root) { overflow: hidden; } figure { margin: 1em 40px; } hr { box-sizing: content-box; height: 0; } pre { overflow: auto; } code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } button, input, optgroup, select, textarea { font: inherit; margin: 0; color: inherit; } button { overflow: visible; } button, select { text-transform: none; } button, html input[type='button'], input[type='reset'], input[type='submit'] { cursor: pointer; -webkit-appearance: button; } button[disabled], html input[disabled] { cursor: default; } 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-box-sizing: content-box; box-sizing: content-box; -webkit-appearance: textfield; } input[type='search']::-webkit-search-cancel-button, input[type='search']::-webkit-search-decoration { -webkit-appearance: none; } fieldset { margin: 0 2px; padding: .35em .625em .75em; border: 1px solid #c0c0c0; } legend { padding: 0; border: 0; } textarea { overflow: auto; } optgroup { font-weight: bold; } table { border-spacing: 0; border-collapse: collapse; } td, th { padding: 0; } * { -webkit-box-sizing: border-box; box-sizing: border-box; -webkit-user-select: none; outline: none; -webkit-tap-highlight-color: transparent; -webkit-tap-highlight-color: transparent; } body { font-family: 'Helvetica Neue', Helvetica, sans-serif; font-size: 17px; line-height: 21px; color: #000; background-color: #efeff4; -webkit-overflow-scrolling: touch; } a { text-decoration: none; color: #007aff; } a:active { color: #0062cc; } .mui-content { background-color: #efeff4; -webkit-overflow-scrolling: touch; } .mui-bar-nav ~ .mui-content { padding-top: 44px; } .mui-bar-nav ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical { top: 44px; } .mui-bar-header-secondary ~ .mui-content { padding-top: 88px; } .mui-bar-header-secondary ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical { top: 88px; } .mui-bar-footer ~ .mui-content { padding-bottom: 44px; } .mui-bar-footer ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical { bottom: 44px; } .mui-bar-footer-secondary ~ .mui-content { padding-bottom: 88px; } .mui-bar-footer-secondary ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical { bottom: 88px; } .mui-bar-tab ~ .mui-content { padding-bottom: 50px; } .mui-bar-tab ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical { bottom: 50px; } .mui-bar-footer-secondary-tab ~ .mui-content { padding-bottom: 94px; } .mui-bar-footer-secondary-tab ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical { bottom: 94px; } .mui-content-padded { margin: 10px; } .mui-inline { display: inline-block; vertical-align: top; } .mui-block { display: block !important; } .mui-visibility { visibility: visible !important; } .mui-hidden { display: none !important; } .mui-ellipsis { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .mui-ellipsis-2 { display: -webkit-box; overflow: hidden; white-space: normal !important; text-overflow: ellipsis; word-wrap: break-word; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .mui-table { display: table; width: 100%; table-layout: fixed; } .mui-table-cell { position: relative; display: table-cell; } .mui-text-left { text-align: left !important; } .mui-text-center { text-align: center !important; } .mui-text-justify { text-align: justify !important; } .mui-text-right { text-align: right !important; } .mui-pull-left { float: left; } .mui-pull-right { float: right; } .mui-list-unstyled { padding-left: 0; list-style: none; } .mui-list-inline { margin-left: -5px; padding-left: 0; list-style: none; } .mui-list-inline > li { display: inline-block; padding-right: 5px; padding-left: 5px; } .mui-clearfix:before, .mui-clearfix:after { display: table; content: ' '; } .mui-clearfix:after { clear: both; } .mui-bg-primary { background-color: #007aff; } .mui-bg-positive { background-color: #4cd964; } .mui-bg-negative { background-color: #dd524d; } .mui-error { margin: 88px 35px; padding: 10px; border-radius: 6px; background-color: #bbb; } .mui-subtitle { font-size: 15px; } h1, h2, h3, h4, h5, h6 { line-height: 1; margin-top: 5px; margin-bottom: 5px; } h1, .mui-h1 { font-size: 36px; } h2, .mui-h2 { font-size: 30px; } h3, .mui-h3 { font-size: 24px; } h4, .mui-h4 { font-size: 18px; } h5, .mui-h5 { font-size: 14px; font-weight: normal; color: #8f8f94; } h6, .mui-h6 { font-size: 12px; font-weight: normal; color: #8f8f94; } p { font-size: 14px; margin-top: 0; margin-bottom: 10px; color: #8f8f94; } .mui-row:before, .mui-row:after { display: table; content: ' '; } .mui-row:after { clear: both; } .mui-col-xs-1, .mui-col-sm-1, .mui-col-xs-2, .mui-col-sm-2, .mui-col-xs-3, .mui-col-sm-3, .mui-col-xs-4, .mui-col-sm-4, .mui-col-xs-5, .mui-col-sm-5, .mui-col-xs-6, .mui-col-sm-6, .mui-col-xs-7, .mui-col-sm-7, .mui-col-xs-8, .mui-col-sm-8, .mui-col-xs-9, .mui-col-sm-9, .mui-col-xs-10, .mui-col-sm-10, .mui-col-xs-11, .mui-col-sm-11, .mui-col-xs-12, .mui-col-sm-12 { position: relative; min-height: 1px; } .mui-row > [class*='mui-col-'] { float: left; } .mui-col-xs-12 { width: 100%; } .mui-col-xs-11 { width: 91.66666667%; } .mui-col-xs-10 { width: 83.33333333%; } .mui-col-xs-9 { width: 75%; } .mui-col-xs-8 { width: 66.66666667%; } .mui-col-xs-7 { width: 58.33333333%; } .mui-col-xs-6 { width: 50%; } .mui-col-xs-5 { width: 41.66666667%; } .mui-col-xs-4 { width: 33.33333333%; } .mui-col-xs-3 { width: 25%; } .mui-col-xs-2 { width: 16.66666667%; } .mui-col-xs-1 { width: 8.33333333%; } @media (min-width: 400px) { .mui-col-sm-12 { width: 100%; } .mui-col-sm-11 { width: 91.66666667%; } .mui-col-sm-10 { width: 83.33333333%; } .mui-col-sm-9 { width: 75%; } .mui-col-sm-8 { width: 66.66666667%; } .mui-col-sm-7 { width: 58.33333333%; } .mui-col-sm-6 { width: 50%; } .mui-col-sm-5 { width: 41.66666667%; } .mui-col-sm-4 { width: 33.33333333%; } .mui-col-sm-3 { width: 25%; } .mui-col-sm-2 { width: 16.66666667%; } .mui-col-sm-1 { width: 8.33333333%; } } .mui-scroll-wrapper { position: absolute; z-index: 2; top: 0; bottom: 0; left: 0; overflow: hidden; width: 100%; } .mui-scroll { position: absolute; z-index: 1; width: 100%; } .mui-scrollbar { position: absolute; z-index: 9998; overflow: hidden; -webkit-transition: 500ms; transition: 500ms; transform: translateZ(0px); pointer-events: none; opacity: 0; } .mui-scrollbar-vertical { top: 0; right: 1px; bottom: 2px; width: 4px; } .mui-scrollbar-vertical .mui-scrollbar-indicator { width: 100%; } .mui-scrollbar-horizontal { right: 2px; bottom: 0; left: 2px; height: 4px; } .mui-scrollbar-horizontal .mui-scrollbar-indicator { height: 100%; } .mui-scrollbar-indicator { position: absolute; display: block; box-sizing: border-box; -webkit-transition: .01s cubic-bezier(.1, .57, .1, 1); transition: .01s cubic-bezier(.1, .57, .1, 1); transform: translate(0px, 0px) translateZ(0px); border: 1px solid rgba(255, 255, 255, .80196); border-radius: 2px; background: rgba(0, 0, 0, .39804); } .mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll-wrapper, .mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll-wrapper { position: absolute; top: 0; bottom: 0; left: 0; overflow: hidden; width: 100%; } .mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll, .mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll { position: absolute; width: 100%; } .mui-plus-pullrefresh .mui-scroll-wrapper, .mui-plus-pullrefresh .mui-slider-group { position: static; top: auto; bottom: auto; left: auto; overflow: auto; width: auto; } .mui-plus-pullrefresh .mui-slider-group { overflow: visible; } .mui-plus-pullrefresh .mui-scroll { position: static; width: auto; } .mui-off-canvas-wrap .mui-bar { position: absolute !important; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); -webkit-box-shadow: none; box-shadow: none; } .mui-off-canvas-wrap { position: relative; z-index: 1; overflow: hidden; width: 100%; height: 100%; } .mui-off-canvas-wrap .mui-inner-wrap { position: relative; z-index: 1; width: 100%; height: 100%; } .mui-off-canvas-wrap .mui-inner-wrap.mui-transitioning { -webkit-transition: -webkit-transform 350ms; transition: transform 350ms cubic-bezier(.165, .84, .44, 1); } .mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-left { -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } .mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-right { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } .mui-off-canvas-wrap.mui-active { overflow: hidden; height: 100%; } .mui-off-canvas-wrap.mui-active .mui-off-canvas-backdrop { position: absolute; z-index: 998; top: 0; right: 0; bottom: 0; left: 0; display: block; transition: background 350ms cubic-bezier(.165, .84, .44, 1); background: rgba(0, 0, 0, .4); box-shadow: -4px 0 4px rgba(0, 0, 0, .5), 4px 0 4px rgba(0, 0, 0, .5); -webkit-tap-highlight-color: transparent; } .mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-right { z-index: 10000 !important; -webkit-transform: translate3d(100%, 0px, 0px); } .mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-left { z-index: 10000 !important; -webkit-transform: translate3d(-100%, 0px, 0px); } .mui-off-canvas-left, .mui-off-canvas-right { position: absolute; z-index: -1; top: 0; bottom: 0; visibility: hidden; box-sizing: content-box; width: 70%; min-height: 100%; background: #333; -webkit-overflow-scrolling: touch; } .mui-off-canvas-left.mui-transitioning, .mui-off-canvas-right.mui-transitioning { -webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1); transition: transform 350ms cubic-bezier(.165, .84, .44, 1); } .mui-off-canvas-left { left: 0; } .mui-off-canvas-right { right: 0; } .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable { background-color: #333; } .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-left, .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-right { width: 80%; -webkit-transform: scale(.8); transform: scale(.8); opacity: .1; } .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-left.mui-transitioning, .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-right.mui-transitioning { -webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1); transition: transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1); } .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-left { -webkit-transform-origin: -100%; transform-origin: -100%; } .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-right { -webkit-transform-origin: 200%; transform-origin: 200%; } .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active > .mui-inner-wrap { -webkit-transform: scale(.8); transform: scale(.8); } .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active > .mui-off-canvas-left, .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active > .mui-off-canvas-right { -webkit-transform: scale(1); transform: scale(1); opacity: 1; } .mui-loading .mui-spinner { display: block; margin: 0 auto; } .mui-spinner { display: inline-block; width: 24px; height: 24px; -webkit-transform-origin: 50%; transform-origin: 50%; -webkit-animation: spinner-spin 1s step-end infinite; animation: spinner-spin 1s step-end infinite; } .mui-spinner:after { display: block; width: 100%; height: 100%; content: ''; background-image: url('data:image/svg+xml;charset=utf-8,'); background-repeat: no-repeat; background-position: 50%; background-size: 100%; } .mui-spinner-white:after { background-image: url('data:image/svg+xml;charset=utf-8,'); } @-webkit-keyframes spinner-spin { 0% { -webkit-transform: rotate(0deg); } 8.33333333% { -webkit-transform: rotate(30deg); } 16.66666667% { -webkit-transform: rotate(60deg); } 25% { -webkit-transform: rotate(90deg); } 33.33333333% { -webkit-transform: rotate(120deg); } 41.66666667% { -webkit-transform: rotate(150deg); } 50% { -webkit-transform: rotate(180deg); } 58.33333333% { -webkit-transform: rotate(210deg); } 66.66666667% { -webkit-transform: rotate(240deg); } 75% { -webkit-transform: rotate(270deg); } 83.33333333% { -webkit-transform: rotate(300deg); } 91.66666667% { -webkit-transform: rotate(330deg); } 100% { -webkit-transform: rotate(360deg); } } @keyframes spinner-spin { 0% { transform: rotate(0deg); } 8.33333333% { transform: rotate(30deg); } 16.66666667% { transform: rotate(60deg); } 25% { transform: rotate(90deg); } 33.33333333% { transform: rotate(120deg); } 41.66666667% { transform: rotate(150deg); } 50% { transform: rotate(180deg); } 58.33333333% { transform: rotate(210deg); } 66.66666667% { transform: rotate(240deg); } 75% { transform: rotate(270deg); } 83.33333333% { transform: rotate(300deg); } 91.66666667% { transform: rotate(330deg); } 100% { transform: rotate(360deg); } } input[type='button'], input[type='submit'], input[type='reset'], button, .mui-btn { font-size: 14px; font-weight: 400; line-height: 1.42; position: relative; display: inline-block; margin-bottom: 0; padding: 6px 12px; cursor: pointer; -webkit-transition: all; transition: all; -webkit-transition-timing-function: linear; transition-timing-function: linear; -webkit-transition-duration: .2s; transition-duration: .2s; text-align: center; vertical-align: top; white-space: nowrap; color: #333; border: 1px solid #ccc; border-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: #fff; background-clip: padding-box; } input[type='button']:enabled:active, input[type='button'].mui-active:enabled, input[type='submit']:enabled:active, input[type='submit'].mui-active:enabled, input[type='reset']:enabled:active, input[type='reset'].mui-active:enabled, button:enabled:active, button.mui-active:enabled, .mui-btn:enabled:active, .mui-btn.mui-active:enabled { color: #fff; background-color: #929292; } input[type='button']:disabled, input[type='button'].mui-disabled, input[type='submit']:disabled, input[type='submit'].mui-disabled, input[type='reset']:disabled, input[type='reset'].mui-disabled, button:disabled, button.mui-disabled, .mui-btn:disabled, .mui-btn.mui-disabled { opacity: .6; } input[type='submit'], .mui-btn-primary, .mui-btn-blue { color: #fff; border: 1px solid #007aff; background-color: #007aff; } input[type='submit']:enabled:active, input[type='submit'].mui-active:enabled, .mui-btn-primary:enabled:active, .mui-btn-primary.mui-active:enabled, .mui-btn-blue:enabled:active, .mui-btn-blue.mui-active:enabled { color: #fff; border: 1px solid #0062cc; background-color: #0062cc; } .mui-btn-positive, .mui-btn-success, .mui-btn-green { color: #fff; border: 1px solid #4cd964; background-color: #4cd964; } .mui-btn-positive:enabled:active, .mui-btn-positive.mui-active:enabled, .mui-btn-success:enabled:active, .mui-btn-success.mui-active:enabled, .mui-btn-green:enabled:active, .mui-btn-green.mui-active:enabled { color: #fff; border: 1px solid #2ac845; background-color: #2ac845; } .mui-btn-warning, .mui-btn-yellow { color: #fff; border: 1px solid #f0ad4e; background-color: #f0ad4e; } .mui-btn-warning:enabled:active, .mui-btn-warning.mui-active:enabled, .mui-btn-yellow:enabled:active, .mui-btn-yellow.mui-active:enabled { color: #fff; border: 1px solid #ec971f; background-color: #ec971f; } .mui-btn-negative, .mui-btn-danger, .mui-btn-red { color: #fff; border: 1px solid #dd524d; background-color: #dd524d; } .mui-btn-negative:enabled:active, .mui-btn-negative.mui-active:enabled, .mui-btn-danger:enabled:active, .mui-btn-danger.mui-active:enabled, .mui-btn-red:enabled:active, .mui-btn-red.mui-active:enabled { color: #fff; border: 1px solid #cf2d28; background-color: #cf2d28; } .mui-btn-royal, .mui-btn-purple { color: #fff; border: 1px solid #8a6de9; background-color: #8a6de9; } .mui-btn-royal:enabled:active, .mui-btn-royal.mui-active:enabled, .mui-btn-purple:enabled:active, .mui-btn-purple.mui-active:enabled { color: #fff; border: 1px solid #6641e2; background-color: #6641e2; } .mui-btn-grey { color: #fff; border: 1px solid #c7c7cc; background-color: #c7c7cc; } .mui-btn-grey:enabled:active, .mui-btn-grey.mui-active:enabled { color: #fff; border: 1px solid #acacb4; background-color: #acacb4; } .mui-btn-outlined { background-color: transparent; } .mui-btn-outlined.mui-btn-primary, .mui-btn-outlined.mui-btn-blue { color: #007aff; } .mui-btn-outlined.mui-btn-positive, .mui-btn-outlined.mui-btn-success, .mui-btn-outlined.mui-btn-green { color: #4cd964; } .mui-btn-outlined.mui-btn-warning, .mui-btn-outlined.mui-btn-yellow { color: #f0ad4e; } .mui-btn-outlined.mui-btn-negative, .mui-btn-outlined.mui-btn-danger, .mui-btn-outlined.mui-btn-red { color: #dd524d; } .mui-btn-outlined.mui-btn-royal, .mui-btn-outlined.mui-btn-purple { color: #8a6de9; } .mui-btn-outlined.mui-btn-primary:enabled:active, .mui-btn-outlined.mui-btn-blue:enabled:active, .mui-btn-outlined.mui-btn-positive:enabled:active, .mui-btn-outlined.mui-btn-success:enabled:active, .mui-btn-outlined.mui-btn-green:enabled:active, .mui-btn-outlined.mui-btn-warning:enabled:active, .mui-btn-outlined.mui-btn-yellow:enabled:active, .mui-btn-outlined.mui-btn-negative:enabled:active, .mui-btn-outlined.mui-btn-danger:enabled:active, .mui-btn-outlined.mui-btn-red:enabled:active, .mui-btn-outlined.mui-btn-royal:enabled:active, .mui-btn-outlined.mui-btn-purple:enabled:active { color: #fff; } .mui-btn-link { padding-top: 6px; padding-bottom: 6px; color: #007aff; border: 0; background-color: transparent; } .mui-btn-link:enabled:active, .mui-btn-link.mui-active:enabled { color: #0062cc; background-color: transparent; } .mui-btn-block { font-size: 18px; display: block; width: 100%; margin-bottom: 10px; padding: 15px 0; } .mui-btn .mui-badge { font-size: 14px; margin: -2px -4px -2px 4px; background-color: rgba(0, 0, 0, .15); } .mui-btn .mui-badge-inverted, .mui-btn:enabled:active .mui-badge-inverted { background-color: transparent; } .mui-btn-primary:enabled:active .mui-badge-inverted, .mui-btn-positive:enabled:active .mui-badge-inverted, .mui-btn-negative:enabled:active .mui-badge-inverted { color: #fff; } .mui-btn-block .mui-badge { position: absolute; right: 0; margin-right: 10px; } .mui-btn .mui-icon { font-size: inherit; } .mui-btn.mui-icon { font-size: 14px; line-height: 1.42; } .mui-btn.mui-fab { width: 56px; height: 56px; padding: 16px; border-radius: 50%; outline: none; } .mui-btn.mui-fab.mui-btn-mini { width: 40px; height: 40px; padding: 8px; } .mui-btn.mui-fab .mui-icon { font-size: 24px; line-height: 24px; width: 24px; height: 24px; } .mui-btn .mui-spinner { width: 14px; height: 14px; vertical-align: text-bottom; } .mui-btn-block .mui-spinner { width: 22px; height: 22px; } .mui-bar { position: fixed; z-index: 10; right: 0; left: 0; height: 44px; padding-right: 10px; padding-left: 10px; border-bottom: 0; background-color: #f7f7f7; -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, .85); box-shadow: 0 0 1px rgba(0, 0, 0, .85); -webkit-backface-visibility: hidden; backface-visibility: hidden; } .mui-bar .mui-title { right: 40px; left: 40px; display: inline-block; overflow: hidden; width: auto; margin: 0; text-overflow: ellipsis; } .mui-bar .mui-backdrop { background: none; } .mui-bar-header-secondary { top: 44px; } .mui-bar-footer { bottom: 0; } .mui-bar-footer-secondary { bottom: 44px; } .mui-bar-footer-secondary-tab { bottom: 50px; } .mui-bar-footer, .mui-bar-footer-secondary, .mui-bar-footer-secondary-tab { border-top: 0; } .mui-bar-transparent { top: 0; background-color: rgba(247, 247, 247, 0); -webkit-box-shadow: none; box-shadow: none; } .mui-bar-nav { top: 0; -webkit-box-shadow: 0 1px 6px #ccc; box-shadow: 0 1px 6px #ccc; } .mui-bar-nav ~ .mui-content .mui-anchor { display: block; visibility: hidden; height: 45px; margin-top: -45px; } .mui-bar-nav.mui-bar .mui-icon { margin-right: -10px; margin-left: -10px; padding-right: 10px; padding-left: 10px; } .mui-title { font-size: 17px; font-weight: 500; line-height: 44px; position: absolute; display: block; width: 100%; margin: 0 -10px; padding: 0; text-align: center; white-space: nowrap; color: #000; } .mui-title a { color: inherit; } .mui-bar-tab { bottom: 0; display: table; width: 100%; height: 50px; padding: 0; table-layout: fixed; border-top: 0; border-bottom: 0; -webkit-touch-callout: none; } .mui-bar-tab .mui-tab-item { display: table-cell; overflow: hidden; width: 1%; height: 50px; text-align: center; vertical-align: middle; white-space: nowrap; text-overflow: ellipsis; color: #929292; } .mui-bar-tab .mui-tab-item.mui-active { color: #007aff; } .mui-bar-tab .mui-tab-item .mui-icon { top: 3px; width: 24px; height: 24px; padding-top: 0; padding-bottom: 0; } .mui-bar-tab .mui-tab-item .mui-icon ~ .mui-tab-label { font-size: 11px; display: block; overflow: hidden; text-overflow: ellipsis; } .mui-bar-tab .mui-tab-item .mui-icon:active { background: none; } .mui-focusin > .mui-bar-nav, .mui-focusin > .mui-bar-header-secondary { position: absolute; } .mui-focusin > .mui-bar ~ .mui-content { padding-bottom: 0; } .mui-bar .mui-btn { font-weight: 400; position: relative; z-index: 20; top: 7px; margin-top: 0; padding: 6px 12px 7px; } .mui-bar .mui-btn.mui-pull-right { margin-left: 10px; } .mui-bar .mui-btn.mui-pull-left { margin-right: 10px; } .mui-bar .mui-btn-link { font-size: 16px; line-height: 44px; top: 0; padding: 0; color: #007aff; border: 0; } .mui-bar .mui-btn-link:active, .mui-bar .mui-btn-link.mui-active { color: #0062cc; } .mui-bar .mui-btn-block { font-size: 16px; top: 6px; margin-bottom: 0; padding: 5px 0; } .mui-bar .mui-btn-nav.mui-pull-left { margin-left: -5px; } .mui-bar .mui-btn-nav.mui-pull-left .mui-icon-left-nav { margin-right: -3px; } .mui-bar .mui-btn-nav.mui-pull-right { margin-right: -5px; } .mui-bar .mui-btn-nav.mui-pull-right .mui-icon-right-nav { margin-left: -3px; } .mui-bar .mui-btn-nav:active { opacity: .3; } .mui-bar .mui-icon { font-size: 24px; position: relative; z-index: 20; padding-top: 10px; padding-bottom: 10px; } .mui-bar .mui-icon:active { opacity: .3; } .mui-bar .mui-btn .mui-icon { top: 1px; margin: 0; padding: 0; } .mui-bar .mui-title .mui-icon { margin: 0; padding: 0; } .mui-bar .mui-title .mui-icon.mui-icon-caret { top: 4px; margin-left: -5px; } .mui-bar input[type='search'] { height: 29px; margin: 6px 0; } .mui-bar .mui-input-row .mui-btn { padding: 12px 10px; } .mui-bar .mui-search:before { margin-top: -10px; } .mui-bar .mui-input-row .mui-input-clear ~ .mui-icon-clear, .mui-bar .mui-input-row .mui-input-speech ~ .mui-icon-speech { top: 0; right: 12px; } .mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-clear ~ .mui-icon-clear, .mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-speech ~ .mui-icon-speech { top: 0; right: 0; } .mui-bar .mui-segmented-control { top: 7px; width: auto; margin: 0 auto; } .mui-bar.mui-bar-header-secondary .mui-segmented-control { top: 0; } .mui-badge { font-size: 12px; line-height: 1; display: inline-block; padding: 3px 6px; color: #333; border-radius: 100px; background-color: rgba(0, 0, 0, .15); } .mui-badge.mui-badge-inverted { padding: 0 5px 0 0; color: #929292; background-color: transparent; } .mui-badge-primary, .mui-badge-blue { color: #fff; background-color: #007aff; } .mui-badge-primary.mui-badge-inverted, .mui-badge-blue.mui-badge-inverted { color: #007aff; background-color: transparent; } .mui-badge-success, .mui-badge-green { color: #fff; background-color: #4cd964; } .mui-badge-success.mui-badge-inverted, .mui-badge-green.mui-badge-inverted { color: #4cd964; background-color: transparent; } .mui-badge-warning, .mui-badge-yellow { color: #fff; background-color: #f0ad4e; } .mui-badge-warning.mui-badge-inverted, .mui-badge-yellow.mui-badge-inverted { color: #f0ad4e; background-color: transparent; } .mui-badge-danger, .mui-badge-red { color: #fff; background-color: #dd524d; } .mui-badge-danger.mui-badge-inverted, .mui-badge-red.mui-badge-inverted { color: #dd524d; background-color: transparent; } .mui-badge-royal, .mui-badge-purple { color: #fff; background-color: #8a6de9; } .mui-badge-royal.mui-badge-inverted, .mui-badge-purple.mui-badge-inverted { color: #8a6de9; background-color: transparent; } .mui-icon .mui-badge { font-size: 10px; line-height: 1.4; position: absolute; top: -2px; left: 100%; margin-left: -10px; padding: 1px 5px; color: white; background: red; } .mui-card { font-size: 14px; position: relative; overflow: hidden; margin: 10px; border-radius: 2px; background-color: white; background-clip: padding-box; box-shadow: 0 1px 2px rgba(0, 0, 0, .3); } .mui-content > .mui-card:first-child { margin-top: 15px; } .mui-card .mui-input-group:before, .mui-card .mui-input-group:after { height: 0; } .mui-card .mui-input-group .mui-input-row:last-child:before, .mui-card .mui-input-group .mui-input-row:last-child:after { height: 0; } .mui-card .mui-table-view { margin-bottom: 0; border-top: 0; border-bottom: 0; border-radius: 6px; } .mui-card .mui-table-view .mui-table-view-divider:first-child, .mui-card .mui-table-view .mui-table-view-cell:first-child { top: 0; border-top-left-radius: 6px; border-top-right-radius: 6px; } .mui-card .mui-table-view .mui-table-view-divider:last-child, .mui-card .mui-table-view .mui-table-view-cell:last-child { border-bottom-right-radius: 6px; border-bottom-left-radius: 6px; } .mui-card .mui-table-view:before, .mui-card .mui-table-view:after { height: 0; } .mui-card > .mui-table-view > .mui-table-view-cell:last-child:before, .mui-card > .mui-table-view > .mui-table-view-cell:last-child:after { height: 0; } .mui-card-header, .mui-card-footer { position: relative; display: -webkit-box; display: -webkit-flex; display: flex; min-height: 44px; padding: 10px 15px; -webkit-box-pack: justify; -webkit-justify-content: space-between; justify-content: space-between; -webkit-box-align: center; -webkit-align-items: center; align-items: center; } .mui-card-header .mui-card-link, .mui-card-footer .mui-card-link { line-height: 44px; position: relative; display: -webkit-box; display: -webkit-flex; display: flex; height: 44px; margin-top: -10px; margin-bottom: -10px; -webkit-transition-duration: .3s; transition-duration: .3s; text-decoration: none; -webkit-box-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -webkit-box-align: center; -webkit-align-items: center; align-items: center; } .mui-card-header:after, .mui-card-footer:before { position: absolute; top: 0; right: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-card-header { font-size: 17px; border-radius: 2px 2px 0 0; } .mui-card-header:after { top: auto; bottom: 0; } .mui-card-header > img:first-child { font-size: 0; line-height: 0; float: left; width: 34px; height: 34px; } .mui-card-footer { color: #6d6d72; border-radius: 0 0 2px 2px; } .mui-card-content { font-size: 14px; position: relative; } .mui-card-content-inner { position: relative; padding: 15px; } .mui-card-media { vertical-align: bottom; color: #fff; background-position: center; background-size: cover; } .mui-card-header.mui-card-media { display: block; padding: 10px; } .mui-card-header.mui-card-media .mui-media-body { font-size: 14px; font-weight: 500; line-height: 17px; margin-bottom: 0; margin-left: 44px; color: #333; } .mui-card-header.mui-card-media .mui-media-body p { font-size: 13px; margin-bottom: 0; } .mui-table-view { position: relative; margin-top: 0; margin-bottom: 0; padding-left: 0; list-style: none; background-color: #fff; } .mui-table-view:after { position: absolute; right: 0; bottom: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-table-view:before { position: absolute; top: 0; right: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-table-view:before { top: -1px; } .mui-table-view-icon .mui-table-view-cell .mui-navigate-right .mui-icon { font-size: 20px; margin-top: -1px; margin-right: 5px; margin-left: -5px; } .mui-table-view-icon .mui-table-view-cell:after { left: 40px; } .mui-table-view-chevron .mui-table-view-cell { padding-right: 65px; } .mui-table-view-chevron .mui-table-view-cell > a:not(.mui-btn) { margin-right: -65px; } .mui-table-view-radio .mui-table-view-cell { padding-right: 65px; } .mui-table-view-radio .mui-table-view-cell > a:not(.mui-btn) { margin-right: -65px; } .mui-table-view-radio .mui-table-view-cell .mui-navigate-right:after { font-size: 30px; font-weight: 600; right: 9px; content: ''; color: #007aff; } .mui-table-view-radio .mui-table-view-cell.mui-selected .mui-navigate-right:after { content: '\e472'; } .mui-table-view-inverted { color: #fff; background: #333; } .mui-table-view-inverted:after { position: absolute; right: 0; bottom: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #222; } .mui-table-view-inverted:before { position: absolute; top: 0; right: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #222; } .mui-table-view-inverted .mui-table-view-cell:after { position: absolute; right: 0; bottom: 0; left: 15px; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #222; } .mui-table-view-inverted .mui-table-view-cell.mui-active { background-color: #242424; } .mui-table-view-inverted .mui-table-view-cell > a:not(.mui-btn).mui-active { background-color: #242424; } .mui-table-view-cell { position: relative; overflow: hidden; padding: 11px 15px; -webkit-touch-callout: none; } .mui-table-view-cell:after { position: absolute; right: 0; bottom: 0; left: 15px; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-table-view-cell.mui-radio input[type=radio], .mui-table-view-cell.mui-checkbox input[type=checkbox] { top: 8px; } .mui-table-view-cell.mui-radio.mui-left, .mui-table-view-cell.mui-checkbox.mui-left { padding-left: 58px; } .mui-table-view-cell.mui-active { background-color: #eee; } .mui-table-view-cell:last-child:before, .mui-table-view-cell:last-child:after { height: 0; } .mui-table-view-cell > a:not(.mui-btn) { position: relative; display: block; overflow: hidden; margin: -11px -15px; padding: inherit; white-space: nowrap; text-overflow: ellipsis; color: inherit; /*&:active { background-color: #eee; }*/ } .mui-table-view-cell > a:not(.mui-btn).mui-active { background-color: #eee; } .mui-table-view-cell p { margin-bottom: 0; } .mui-table-view-cell.mui-transitioning > .mui-slider-handle, .mui-table-view-cell.mui-transitioning > .mui-slider-left .mui-btn, .mui-table-view-cell.mui-transitioning > .mui-slider-right .mui-btn { -webkit-transition: -webkit-transform 300ms ease; transition: transform 300ms ease; } .mui-table-view-cell.mui-active > .mui-slider-handle { background-color: #eee; } .mui-table-view-cell > .mui-slider-handle { position: relative; background-color: #fff; } .mui-table-view-cell > .mui-slider-handle.mui-navigate-right:after, .mui-table-view-cell > .mui-slider-handle .mui-navigate-right:after { right: 0; } .mui-table-view-cell > .mui-slider-handle, .mui-table-view-cell > .mui-slider-left .mui-btn, .mui-table-view-cell > .mui-slider-right .mui-btn { -webkit-transition: -webkit-transform 0ms ease; transition: transform 0ms ease; } .mui-table-view-cell > .mui-slider-left, .mui-table-view-cell > .mui-slider-right { position: absolute; top: 0; display: -webkit-box; display: -webkit-flex; display: flex; height: 100%; } .mui-table-view-cell > .mui-slider-left > .mui-btn, .mui-table-view-cell > .mui-slider-right > .mui-btn { position: relative; left: 0; display: -webkit-box; display: -webkit-flex; display: flex; padding: 0 30px; color: #fff; border: 0; border-radius: 0; -webkit-box-align: center; -webkit-align-items: center; align-items: center; } .mui-table-view-cell > .mui-slider-left > .mui-btn:after, .mui-table-view-cell > .mui-slider-right > .mui-btn:after { position: absolute; z-index: -1; top: 0; width: 600%; height: 100%; content: ''; background: inherit; } .mui-table-view-cell > .mui-slider-left > .mui-btn.mui-icon, .mui-table-view-cell > .mui-slider-right > .mui-btn.mui-icon { font-size: 30px; } .mui-table-view-cell > .mui-slider-right { right: 0; -webkit-transition: -webkit-transform 0ms ease; transition: transform 0ms ease; -webkit-transform: translateX(100%); transform: translateX(100%); } .mui-table-view-cell > .mui-slider-left { left: 0; -webkit-transition: -webkit-transform 0ms ease; transition: transform 0ms ease; -webkit-transform: translateX(-100%); transform: translateX(-100%); } .mui-table-view-cell > .mui-slider-left > .mui-btn:after { right: 100%; margin-right: -1px; } .mui-table-view-divider { font-weight: 500; position: relative; margin-top: -1px; margin-left: 0; padding-top: 6px; padding-bottom: 6px; padding-left: 15px; color: #999; background-color: #fafafa; } .mui-table-view-divider:after { position: absolute; right: 0; bottom: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-table-view-divider:before { position: absolute; top: 0; right: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-table-view .mui-media, .mui-table-view .mui-media-body { overflow: hidden; } .mui-table-view .mui-media-large .mui-media-object { line-height: 80px; max-width: 80px; height: 80px; } .mui-table-view .mui-media .mui-subtitle { color: #000; } .mui-table-view .mui-media-object { line-height: 42px; max-width: 42px; height: 42px; } .mui-table-view .mui-media-object.mui-pull-left { margin-right: 10px; } .mui-table-view .mui-media-object.mui-pull-right { margin-left: 10px; } .mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object { line-height: 29px; max-width: 29px; height: 29px; margin: -4px 0; } .mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object img { line-height: 29px; max-width: 29px; height: 29px; } .mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object.mui-pull-left { margin-right: 10px; } .mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object .mui-icon { font-size: 29px; } .mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-body:after { position: absolute; right: 0; bottom: 0; left: 55px; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-table-view .mui-table-view-cell.mui-media-icon:after { height: 0 !important; } .mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view { display: block; } .mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view:before, .mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view:after { height: 0 !important; } .mui-table-view.mui-unfold .mui-table-view-cell.mui-media-icon.mui-collapse .mui-media-body:after { position: absolute; right: 0; bottom: 0; left: 70px; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-table-view-cell > .mui-btn, .mui-table-view-cell > .mui-badge, .mui-table-view-cell > .mui-switch, .mui-table-view-cell > a > .mui-btn, .mui-table-view-cell > a > .mui-badge, .mui-table-view-cell > a > .mui-switch { position: absolute; top: 50%; right: 15px; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .mui-table-view-cell .mui-navigate-right > .mui-btn, .mui-table-view-cell .mui-navigate-right > .mui-badge, .mui-table-view-cell .mui-navigate-right > .mui-switch, .mui-table-view-cell .mui-push-left > .mui-btn, .mui-table-view-cell .mui-push-left > .mui-badge, .mui-table-view-cell .mui-push-left > .mui-switch, .mui-table-view-cell .mui-push-right > .mui-btn, .mui-table-view-cell .mui-push-right > .mui-badge, .mui-table-view-cell .mui-push-right > .mui-switch, .mui-table-view-cell > a .mui-navigate-right > .mui-btn, .mui-table-view-cell > a .mui-navigate-right > .mui-badge, .mui-table-view-cell > a .mui-navigate-right > .mui-switch, .mui-table-view-cell > a .mui-push-left > .mui-btn, .mui-table-view-cell > a .mui-push-left > .mui-badge, .mui-table-view-cell > a .mui-push-left > .mui-switch, .mui-table-view-cell > a .mui-push-right > .mui-btn, .mui-table-view-cell > a .mui-push-right > .mui-badge, .mui-table-view-cell > a .mui-push-right > .mui-switch { right: 35px; } .mui-content > .mui-table-view:first-child { margin-top: 15px; } .mui-table-view-cell.mui-collapse .mui-table-view:before, .mui-table-view-cell.mui-collapse .mui-table-view:after { height: 0; } .mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:last-child:after { height: 0; } .mui-table-view-cell.mui-collapse > .mui-navigate-right:after, .mui-table-view-cell.mui-collapse > .mui-push-right:after { content: '\e581'; } .mui-table-view-cell.mui-collapse.mui-active { margin-top: -1px; } .mui-table-view-cell.mui-collapse.mui-active .mui-table-view, .mui-table-view-cell.mui-collapse.mui-active .mui-collapse-content { display: block; } .mui-table-view-cell.mui-collapse.mui-active > .mui-navigate-right:after, .mui-table-view-cell.mui-collapse.mui-active > .mui-push-right:after { content: '\e580'; } .mui-table-view-cell.mui-collapse.mui-active .mui-table-view-cell > a:not(.mui-btn).mui-active { margin-left: -31px; padding-left: 47px; } .mui-table-view-cell.mui-collapse .mui-collapse-content { position: relative; display: none; overflow: hidden; margin: 11px -15px -11px; padding: 8px 15px; -webkit-transition: height .35s ease; -o-transition: height .35s ease; transition: height .35s ease; background: white; } .mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-input-group, .mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-slider { width: auto; height: auto; margin: -8px -15px; } .mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-slider { margin: -8px -16px; } .mui-table-view-cell.mui-collapse .mui-table-view { display: none; margin-top: 11px; margin-right: -15px; margin-bottom: -11px; margin-left: -15px; border: 0; } .mui-table-view-cell.mui-collapse .mui-table-view.mui-table-view-chevron { margin-right: -65px; } .mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell { padding-left: 31px; background-position: 31px 100%; } .mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after { position: absolute; right: 0; bottom: 0; left: 30px; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-table-view.mui-grid-view { font-size: 0; display: block; width: 100%; padding: 0 10px 10px 0; white-space: normal; } .mui-table-view.mui-grid-view .mui-table-view-cell { font-size: 17px; display: inline-block; margin-right: -4px; padding: 10px 0 0 14px; text-align: center; vertical-align: middle; background: none; } .mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-object { width: 100%; max-width: 100%; height: auto; } .mui-table-view.mui-grid-view .mui-table-view-cell > a:not(.mui-btn) { margin: -10px 0 0 -14px; } .mui-table-view.mui-grid-view .mui-table-view-cell > a:not(.mui-btn):active, .mui-table-view.mui-grid-view .mui-table-view-cell > a:not(.mui-btn).mui-active { background: none; } .mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-body { font-size: 15px; line-height: 15px; display: block; width: 100%; height: 15px; margin-top: 8px; text-overflow: ellipsis; color: #333; } .mui-table-view.mui-grid-view .mui-table-view-cell:before, .mui-table-view.mui-grid-view .mui-table-view-cell:after { height: 0; } .mui-grid-view.mui-grid-9 { margin: 0; padding: 0; border-top: 1px solid #eee; border-left: 1px solid #eee; background-color: #f2f2f2; } .mui-grid-view.mui-grid-9:before, .mui-grid-view.mui-grid-9:after { display: table; content: ' '; } .mui-grid-view.mui-grid-9:after { clear: both; } .mui-grid-view.mui-grid-9:after { position: static; } .mui-grid-view.mui-grid-9 .mui-table-view-cell { margin: 0; padding: 11px 15px; vertical-align: top; border-right: 1px solid #eee; border-bottom: 1px solid #eee; } .mui-grid-view.mui-grid-9 .mui-table-view-cell.mui-active { background-color: #eee; } .mui-grid-view.mui-grid-9 .mui-table-view-cell > a:not(.mui-btn) { margin: 0; padding: 10px 0; } .mui-grid-view.mui-grid-9:before { height: 0; } .mui-grid-view.mui-grid-9 .mui-media { color: #797979; } .mui-grid-view.mui-grid-9 .mui-media .mui-icon { font-size: 2.4em; position: relative; } .mui-slider-cell { position: relative; } .mui-slider-cell > .mui-slider-handle { z-index: 1; } .mui-slider-cell > .mui-slider-left, .mui-slider-cell > .mui-slider-right { position: absolute; z-index: 0; top: 0; bottom: 0; } .mui-slider-cell > .mui-slider-left { left: 0; } .mui-slider-cell > .mui-slider-right { right: 0; } input, textarea, select { font-family: 'Helvetica Neue', Helvetica, sans-serif; font-size: 17px; -webkit-tap-highlight-color: transparent; -webkit-tap-highlight-color: transparent; } input:focus, textarea:focus, select:focus { -webkit-tap-highlight-color: transparent; -webkit-tap-highlight-color: transparent; -webkit-user-modify: read-write-plaintext-only; } select, textarea, input[type='text'], input[type='search'], input[type='password'], input[type='datetime'], input[type='datetime-local'], input[type='date'], input[type='month'], input[type='time'], input[type='week'], input[type='number'], input[type='email'], input[type='url'], input[type='tel'], input[type='color'] { line-height: 21px; width: 100%; height: 40px; margin-bottom: 15px; padding: 10px 15px; -webkit-user-select: text; border: 1px solid rgba(0, 0, 0, .2); border-radius: 3px; outline: none; background-color: #fff; -webkit-appearance: none; } input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { margin: 0; -webkit-appearance: none; } input[type='search'] { font-size: 16px; -webkit-box-sizing: border-box; box-sizing: border-box; height: 34px; text-align: center; border: 0; border-radius: 6px; background-color: rgba(0, 0, 0, .1); } input[type='search']:focus { text-align: left; } textarea { height: auto; resize: none; } select { font-size: 14px; height: auto; margin-top: 1px; border: 0 !important; background-color: #fff; } select:focus { -webkit-user-modify: read-only; } .mui-input-group { position: relative; padding: 0; border: 0; background-color: #fff; } .mui-input-group:after { position: absolute; right: 0; bottom: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-input-group:before { position: absolute; top: 0; right: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-input-group input, .mui-input-group textarea { margin-bottom: 0; border: 0; border-radius: 0; background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } .mui-input-group input[type='search'] { background: none; } .mui-input-group input:last-child { background-image: none; } .mui-input-row { clear: left; overflow: hidden; } .mui-input-row select { font-size: 17px; height: 37px; padding: 0; } .mui-input-row:last-child, .mui-input-row label + input, .mui-input-row .mui-btn + input { background: none; } .mui-input-group .mui-input-row { height: 40px; } .mui-input-group .mui-input-row:after { position: absolute; right: 0; bottom: 0; left: 15px; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-input-row label { font-family: 'Helvetica Neue', Helvetica, sans-serif; line-height: 1.1; float: left; width: 35%; padding: 11px 15px; } .mui-input-row label ~ input, .mui-input-row label ~ select, .mui-input-row label ~ textarea { float: right; width: 65%; margin-bottom: 0; padding-left: 0; border: 0; } .mui-input-row .mui-btn { line-height: 1.1; float: right; width: 15%; padding: 10px 15px; } .mui-input-row .mui-btn ~ input, .mui-input-row .mui-btn ~ select, .mui-input-row .mui-btn ~ textarea { float: left; width: 85%; margin-bottom: 0; padding-left: 0; border: 0; } .mui-button-row { position: relative; padding-top: 5px; text-align: center; } .mui-input-group .mui-button-row { height: 45px; } .mui-input-row { position: relative; } .mui-input-row.mui-input-range { overflow: visible; padding-right: 20px; } .mui-input-row .mui-inline { padding: 8px 0; } .mui-input-row .mui-input-clear ~ .mui-icon-clear, .mui-input-row .mui-input-speech ~ .mui-icon-speech, .mui-input-row .mui-input-password ~ .mui-icon-eye { font-size: 20px; position: absolute; z-index: 1; top: 10px; right: 0; width: 38px; height: 38px; text-align: center; color: #999; } .mui-input-row .mui-input-clear ~ .mui-icon-clear.mui-active, .mui-input-row .mui-input-speech ~ .mui-icon-speech.mui-active, .mui-input-row .mui-input-password ~ .mui-icon-eye.mui-active { color: #007aff; } .mui-input-row .mui-input-speech ~ .mui-icon-speech { font-size: 24px; top: 8px; } .mui-input-row .mui-input-clear ~ .mui-icon-clear ~ .mui-icon-speech { display: none; } .mui-input-row .mui-input-clear ~ .mui-icon-clear.mui-hidden ~ .mui-icon-speech { display: inline-block; } .mui-input-row .mui-icon-speech ~ .mui-placeholder { right: 38px; } .mui-input-row.mui-search .mui-icon-clear { top: 7px; } .mui-input-row.mui-search .mui-icon-speech { top: 5px; } .mui-radio, .mui-checkbox { position: relative; } .mui-radio label, .mui-checkbox label { display: inline-block; float: none; width: 100%; padding-right: 58px; } .mui-radio.mui-left input[type='radio'], .mui-checkbox.mui-left input[type='checkbox'] { left: 20px; } .mui-radio.mui-left label, .mui-checkbox.mui-left label { padding-right: 15px; padding-left: 58px; } .mui-radio input[type='radio'], .mui-checkbox input[type='checkbox'] { position: absolute; top: 4px; right: 20px; display: inline-block; width: 28px; height: 26px; border: 0; outline: 0 !important; background-color: transparent; -webkit-appearance: none; } .mui-radio input[type='radio'][disabled]:before, .mui-checkbox input[type='checkbox'][disabled]:before { opacity: .3; } .mui-radio input[type='radio']:before, .mui-checkbox input[type='checkbox']:before { font-family: Muiicons; font-size: 28px; font-weight: normal; line-height: 1; text-decoration: none; color: #aaa; border-radius: 0; background: none; -webkit-font-smoothing: antialiased; } .mui-radio input[type='radio']:checked:before, .mui-checkbox input[type='checkbox']:checked:before { color: #007aff; } .mui-radio.mui-disabled label, .mui-radio label.mui-disabled, .mui-checkbox.mui-disabled label, .mui-checkbox label.mui-disabled { opacity: .4; } .mui-radio input[type='radio']:before { content: '\e411'; } .mui-radio input[type='radio']:checked:before { content: '\e441'; } .mui-checkbox input[type='checkbox']:before { content: '\e411'; } .mui-checkbox input[type='checkbox']:checked:before { content: '\e442'; } .mui-select { position: relative; } .mui-select:before { font-family: Muiicons; position: absolute; top: 8px; right: 21px; content: '\e581'; color: rgba(170, 170, 170, .6); } .mui-input-row .mui-switch { float: right; margin-top: 5px; margin-right: 20px; } .mui-input-range { /*input[type="range"] { -webkit-appearance: none; background: #999; height: 36px; border-radius: 1px; overflow: hidden; margin-top: 2px; margin-bottom: 2px; outline:none; position:relative; width:100%; }*/ /*input[type='range']::-webkit-slider-thumb { -webkit-appearance: none!important; opacity: 0.5; height:28px; width:28px; border-radius: 50%; background:#00b7fb; position: relative; pointer-events: none; -webkit-box-sizing: border-box; box-sizing: border-box; &:before{ position: absolute; top: 13px; left: -2000px; width: 2000px; height: 2px; background: #00b7fb; content:' '; } }*/ } .mui-input-range input[type='range'] { position: relative; width: 100%; height: 2px; margin: 17px 0; padding: 0; cursor: pointer; border: 0; border-radius: 3px; outline: none; background-color: #999; -webkit-appearance: none !important; } .mui-input-range input[type='range']::-webkit-slider-thumb { width: 28px; height: 28px; border-color: #0062cc; border-radius: 50%; background-color: #007aff; background-clip: padding-box; -webkit-appearance: none !important; } .mui-input-range label ~ input[type='range'] { width: 65%; } .mui-input-range .mui-tooltip { font-size: 36px; line-height: 64px; position: absolute; z-index: 1; top: -70px; width: 64px; height: 64px; text-align: center; opacity: .8; color: #333; border: 1px solid #ddd; border-radius: 6px; background-color: #fff; text-shadow: 0 1px 0 #f3f3f3; } .mui-search { position: relative; } .mui-search input[type='search'] { padding-left: 30px; } .mui-search .mui-placeholder { font-size: 16px; line-height: 34px; position: absolute; z-index: 1; top: 0; right: 0; bottom: 0; left: 0; display: inline-block; height: 34px; text-align: center; color: #999; border: 0; border-radius: 6px; background: none; } .mui-search .mui-placeholder .mui-icon { font-size: 20px; color: #333; } .mui-search:before { font-family: Muiicons; font-size: 20px; font-weight: normal; position: absolute; top: 50%; right: 50%; display: none; margin-top: -18px; margin-right: 31px; content: '\e466'; } .mui-search.mui-active:before { font-size: 20px; right: auto; left: 5px; display: block; margin-right: 0; } .mui-search.mui-active input[type='search'] { text-align: left; } .mui-search.mui-active .mui-placeholder { display: none; } .mui-segmented-control { font-size: 15px; font-weight: 400; position: relative; display: table; overflow: hidden; width: 100%; table-layout: fixed; border: 1px solid #007aff; border-radius: 3px; background-color: transparent; -webkit-touch-callout: none; } .mui-segmented-control.mui-segmented-control-vertical { border-collapse: collapse; border-width: 0; border-radius: 0; } .mui-segmented-control.mui-segmented-control-vertical .mui-control-item { display: block; border-bottom: 1px solid #c8c7cc; border-left-width: 0; } .mui-segmented-control.mui-scroll-wrapper { height: 38px; } .mui-segmented-control.mui-scroll-wrapper .mui-scroll { width: auto; height: 40px; white-space: nowrap; } .mui-segmented-control.mui-scroll-wrapper .mui-control-item { display: inline-block; width: auto; padding: 0 20px; border: 0; } .mui-segmented-control .mui-control-item { line-height: 38px; display: table-cell; overflow: hidden; width: 1%; -webkit-transition: background-color .1s linear; transition: background-color .1s linear; text-align: center; white-space: nowrap; text-overflow: ellipsis; color: #007aff; border-color: #007aff; border-left: 1px solid #007aff; } .mui-segmented-control .mui-control-item:first-child { border-left-width: 0; } .mui-segmented-control .mui-control-item.mui-active { color: #fff; background-color: #007aff; } .mui-segmented-control.mui-segmented-control-inverted { width: 100%; border: 0; border-radius: 0; } .mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item { border-bottom: 1px solid #c8c7cc; } .mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item.mui-active { border-bottom: 1px solid #c8c7cc; } .mui-segmented-control.mui-segmented-control-inverted .mui-control-item { color: inherit; border: 0; } .mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active { color: #007aff; border-bottom: 2px solid #007aff; background: none; } .mui-segmented-control.mui-segmented-control-inverted ~ .mui-slider-progress-bar { background-color: #007aff; } .mui-segmented-control-positive { border: 1px solid #4cd964; } .mui-segmented-control-positive .mui-control-item { color: #4cd964; border-color: inherit; } .mui-segmented-control-positive .mui-control-item.mui-active { color: #fff; background-color: #4cd964; } .mui-segmented-control-positive.mui-segmented-control-inverted .mui-control-item.mui-active { color: #4cd964; border-bottom: 2px solid #4cd964; background: none; } .mui-segmented-control-positive.mui-segmented-control-inverted ~ .mui-slider-progress-bar { background-color: #4cd964; } .mui-segmented-control-negative { border: 1px solid #dd524d; } .mui-segmented-control-negative .mui-control-item { color: #dd524d; border-color: inherit; } .mui-segmented-control-negative .mui-control-item.mui-active { color: #fff; background-color: #dd524d; } .mui-segmented-control-negative.mui-segmented-control-inverted .mui-control-item.mui-active { color: #dd524d; border-bottom: 2px solid #dd524d; background: none; } .mui-segmented-control-negative.mui-segmented-control-inverted ~ .mui-slider-progress-bar { background-color: #dd524d; } .mui-control-content { position: relative; display: none; } .mui-control-content.mui-active { display: block; } .mui-popover { position: absolute; z-index: 999; display: none; width: 280px; -webkit-transition: opacity .3s; transition: opacity .3s; -webkit-transition-property: opacity; transition-property: opacity; -webkit-transform: none; transform: none; opacity: 0; border-radius: 7px; background-color: #f7f7f7; -webkit-box-shadow: 0 0 15px rgba(0, 0, 0, .1); box-shadow: 0 0 15px rgba(0, 0, 0, .1); } .mui-popover .mui-popover-arrow { position: absolute; z-index: 1000; top: -25px; left: 0; overflow: hidden; width: 26px; height: 26px; } .mui-popover .mui-popover-arrow:after { position: absolute; top: 19px; left: 0; width: 26px; height: 26px; content: ' '; -webkit-transform: rotate(45deg); transform: rotate(45deg); border-radius: 3px; background: #f7f7f7; } .mui-popover .mui-popover-arrow.mui-bottom { top: 100%; left: -26px; margin-top: -1px; } .mui-popover .mui-popover-arrow.mui-bottom:after { top: -19px; left: 0; } .mui-popover.mui-popover-action { bottom: 0; width: 100%; -webkit-transition: -webkit-transform .3s, opacity .3s; transition: transform .3s, opacity .3s; -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); border-radius: 0; background: none; -webkit-box-shadow: none; box-shadow: none; } .mui-popover.mui-popover-action .mui-popover-arrow { display: none; } .mui-popover.mui-popover-action.mui-popover-bottom { position: fixed; } .mui-popover.mui-popover-action.mui-active { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } .mui-popover.mui-popover-action .mui-table-view { margin: 8px; text-align: center; color: #007aff; border-radius: 4px; } .mui-popover.mui-popover-action .mui-table-view .mui-table-view-cell:after { position: absolute; right: 0; bottom: 0; left: 0; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; } .mui-popover.mui-popover-action .mui-table-view small { font-weight: 400; line-height: 1.3; display: block; } .mui-popover.mui-active { display: block; opacity: 1; } .mui-popover .mui-bar ~ .mui-table-view { padding-top: 44px; } .mui-backdrop { position: fixed; z-index: 998; top: 0; right: 0; bottom: 0; left: 0; background-color: rgba(0, 0, 0, .3); } .mui-bar-backdrop.mui-backdrop { bottom: 50px; background: none; } .mui-backdrop-action.mui-backdrop { background-color: rgba(0, 0, 0, .3); } .mui-bar-backdrop.mui-backdrop, .mui-backdrop-action.mui-backdrop { opacity: 0; } .mui-bar-backdrop.mui-backdrop.mui-active, .mui-backdrop-action.mui-backdrop.mui-active { -webkit-transition: all .4s ease; transition: all .4s ease; opacity: 1; } .mui-popover .mui-btn-block { margin-bottom: 5px; } .mui-popover .mui-btn-block:last-child { margin-bottom: 0; } .mui-popover .mui-bar { -webkit-box-shadow: none; box-shadow: none; } .mui-popover .mui-bar-nav { border-bottom: 1px solid rgba(0, 0, 0, .15); border-top-left-radius: 12px; border-top-right-radius: 12px; -webkit-box-shadow: none; box-shadow: none; } .mui-popover .mui-scroll-wrapper { margin: 7px 0; border-radius: 7px; background-clip: padding-box; } .mui-popover .mui-scroll .mui-table-view { max-height: none; } .mui-popover .mui-table-view { overflow: auto; max-height: 300px; margin-bottom: 0; border-radius: 7px; background-color: #f7f7f7; background-image: none; -webkit-overflow-scrolling: touch; } .mui-popover .mui-table-view:before, .mui-popover .mui-table-view:after { height: 0; } .mui-popover .mui-table-view .mui-table-view-cell:first-child, .mui-popover .mui-table-view .mui-table-view-cell:first-child > a:not(.mui-btn) { border-top-left-radius: 12px; border-top-right-radius: 12px; } .mui-popover .mui-table-view .mui-table-view-cell:last-child, .mui-popover .mui-table-view .mui-table-view-cell:last-child > a:not(.mui-btn) { border-bottom-right-radius: 12px; border-bottom-left-radius: 12px; } .mui-popover.mui-bar-popover .mui-table-view { width: 106px; } .mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell { padding: 11px 15px 11px 15px; background-position: 0 100%; } .mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell > a:not(.mui-btn) { margin: -11px -15px -11px -15px; } .mui-popup-backdrop { position: fixed; z-index: 998; top: 0; right: 0; bottom: 0; left: 0; -webkit-transition-duration: 400ms; transition-duration: 400ms; opacity: 0; background: rgba(0, 0, 0, .4); } .mui-popup-backdrop.mui-active { opacity: 1; } .mui-popup { position: fixed; z-index: 10000; top: 50%; left: 50%; display: none; overflow: hidden; width: 270px; -webkit-transition-property: -webkit-transform,opacity; transition-property: transform,opacity; -webkit-transform: translate3d(-50%, -50%, 0) scale(1.185); transform: translate3d(-50%, -50%, 0) scale(1.185); text-align: center; opacity: 0; color: #000; border-radius: 13px; } .mui-popup.mui-popup-in { display: block; -webkit-transition-duration: 400ms; transition-duration: 400ms; -webkit-transform: translate3d(-50%, -50%, 0) scale(1); transform: translate3d(-50%, -50%, 0) scale(1); opacity: 1; } .mui-popup.mui-popup-out { -webkit-transition-duration: 400ms; transition-duration: 400ms; -webkit-transform: translate3d(-50%, -50%, 0) scale(1); transform: translate3d(-50%, -50%, 0) scale(1); opacity: 0; } .mui-popup-inner { position: relative; padding: 15px; border-radius: 13px 13px 0 0; background: rgba(255, 255, 255, .95); } .mui-popup-inner:after { position: absolute; z-index: 15; top: auto; right: auto; bottom: 0; left: 0; display: block; width: 100%; height: 1px; content: ''; -webkit-transform: scaleY(.5); transform: scaleY(.5); -webkit-transform-origin: 50% 100%; transform-origin: 50% 100%; background-color: rgba(0, 0, 0, .2); } .mui-popup-title { font-size: 18px; font-weight: 500; text-align: center; } .mui-popup-title + .mui-popup-text { font-family: inherit; font-size: 14px; margin: 5px 0 0; } .mui-popup-buttons { position: relative; display: -webkit-box; display: -webkit-flex; display: flex; height: 44px; -webkit-box-pack: center; -webkit-justify-content: center; justify-content: center; } .mui-popup-button { font-size: 17px; line-height: 44px; position: relative; display: block; overflow: hidden; box-sizing: border-box; width: 100%; height: 44px; padding: 0 5px; cursor: pointer; text-align: center; white-space: nowrap; text-overflow: ellipsis; color: #007aff; background: rgba(255, 255, 255, .95); -webkit-box-flex: 1; } .mui-popup-button:after { position: absolute; z-index: 15; top: 0; right: 0; bottom: auto; left: auto; display: block; width: 1px; height: 100%; content: ''; -webkit-transform: scaleX(.5); transform: scaleX(.5); -webkit-transform-origin: 100% 50%; transform-origin: 100% 50%; background-color: rgba(0, 0, 0, .2); } .mui-popup-button:first-child { border-radius: 0 0 0 13px; } .mui-popup-button:first-child:last-child { border-radius: 0 0 13px 13px; } .mui-popup-button:last-child { border-radius: 0 0 13px 0; } .mui-popup-button:last-child:after { display: none; } .mui-popup-button.mui-popup-button-bold { font-weight: 600; } .mui-popup-input input { font-size: 14px; width: 100%; height: 26px; margin: 15px 0 0; padding: 0 5px; border: 1px solid rgba(0, 0, 0, .3); border-radius: 0; background: #fff; } .mui-plus.mui-android .mui-popup-backdrop { -webkit-transition-duration: 1ms; transition-duration: 1ms; } .mui-plus.mui-android .mui-popup { -webkit-transition-duration: 1ms; transition-duration: 1ms; -webkit-transform: translate3d(-50%, -50%, 0) scale(1); transform: translate3d(-50%, -50%, 0) scale(1); } /* === Progress Bar === */ .mui-progressbar { position: relative; display: block; overflow: hidden; width: 100%; height: 2px; -webkit-transform-origin: center top; transform-origin: center top; vertical-align: middle; border-radius: 2px; background: #b6b6b6; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; } .mui-progressbar span { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-transition: 150ms; transition: 150ms; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); background: #007aff; } .mui-progressbar.mui-progressbar-infinite:before { position: absolute; top: 0; left: 0; width: 100%; height: 100%; content: ''; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); -webkit-transform-origin: left center; transform-origin: left center; -webkit-animation: mui-progressbar-infinite 1s linear infinite; animation: mui-progressbar-infinite 1s linear infinite; background: #007aff; } body > .mui-progressbar { position: absolute; z-index: 10000; top: 44px; left: 0; border-radius: 0; } .mui-progressbar-in { -webkit-animation: mui-progressbar-in 300ms forwards; animation: mui-progressbar-in 300ms forwards; } .mui-progressbar-out { -webkit-animation: mui-progressbar-out 300ms forwards; animation: mui-progressbar-out 300ms forwards; } @-webkit-keyframes mui-progressbar-in { from { -webkit-transform: scaleY(0); opacity: 0; } to { -webkit-transform: scaleY(1); opacity: 1; } } @keyframes mui-progressbar-in { from { transform: scaleY(0); opacity: 0; } to { transform: scaleY(1); opacity: 1; } } @-webkit-keyframes mui-progressbar-out { from { -webkit-transform: scaleY(1); opacity: 1; } to { -webkit-transform: scaleY(0); opacity: 0; } } @keyframes mui-progressbar-out { from { transform: scaleY(1); opacity: 1; } to { transform: scaleY(0); opacity: 0; } } @-webkit-keyframes mui-progressbar-infinite { 0% { -webkit-transform: translate3d(-50%, 0, 0) scaleX(.5); } 100% { -webkit-transform: translate3d(100%, 0, 0) scaleX(.5); } } @keyframes mui-progressbar-infinite { 0% { transform: translate3d(-50%, 0, 0) scaleX(.5); } 100% { transform: translate3d(100%, 0, 0) scaleX(.5); } } .mui-pagination { display: inline-block; margin: 0 auto; padding-left: 0; border-radius: 6px; } .mui-pagination > li { display: inline; } .mui-pagination > li > a, .mui-pagination > li > span { line-height: 1.428571429; position: relative; float: left; margin-left: -1px; padding: 6px 12px; text-decoration: none; color: #007aff; border: 1px solid #ddd; background-color: #fff; } .mui-pagination > li:first-child > a, .mui-pagination > li:first-child > span { margin-left: 0; border-top-left-radius: 6px; border-bottom-left-radius: 6px; background-clip: padding-box; } .mui-pagination > li:last-child > a, .mui-pagination > li:last-child > span { border-top-right-radius: 6px; border-bottom-right-radius: 6px; background-clip: padding-box; } .mui-pagination > li:active > a, .mui-pagination > li:active > a:active, .mui-pagination > li:active > span, .mui-pagination > li:active > span:active, .mui-pagination > li.mui-active > a, .mui-pagination > li.mui-active > a:active, .mui-pagination > li.mui-active > span, .mui-pagination > li.mui-active > span:active { z-index: 2; cursor: default; color: #fff; border-color: #007aff; background-color: #007aff; } .mui-pagination > li.mui-disabled > span, .mui-pagination > li.mui-disabled > span:active, .mui-pagination > li.mui-disabled > a, .mui-pagination > li.mui-disabled > a:active { opacity: .6; color: #777; border: 1px solid #ddd; background-color: #fff; } .mui-pagination-lg > li > a, .mui-pagination-lg > li > span { font-size: 18px; padding: 10px 16px; } .mui-pagination-sm > li > a, .mui-pagination-sm > li > span { font-size: 12px; padding: 5px 10px; } .mui-pager { padding-left: 0; list-style: none; text-align: center; } .mui-pager:before, .mui-pager:after { display: table; content: ' '; } .mui-pager:after { clear: both; } .mui-pager li { display: inline; } .mui-pager li > a, .mui-pager li > span { display: inline-block; padding: 5px 14px; border: 1px solid #ddd; border-radius: 6px; background-color: #fff; background-clip: padding-box; } .mui-pager li:active > a, .mui-pager li:active > span, .mui-pager li.mui-active > a, .mui-pager li.mui-active > span { cursor: default; text-decoration: none; color: #fff; border-color: #007aff; background-color: #007aff; } .mui-pager .mui-next > a, .mui-pager .mui-next > span { float: right; } .mui-pager .mui-previous > a, .mui-pager .mui-previous > span { float: left; } .mui-pager .mui-disabled > a, .mui-pager .mui-disabled > a:active, .mui-pager .mui-disabled > span, .mui-pager .mui-disabled > span:active { opacity: .6; color: #777; border: 1px solid #ddd; background-color: #fff; } .mui-modal { position: fixed; z-index: 999; top: 0; overflow: hidden; width: 100%; min-height: 100%; -webkit-transition: -webkit-transform .25s, opacity 1ms .25s; transition: transform .25s, opacity 1ms .25s; -webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1); transition-timing-function: cubic-bezier(.1, .5, .1, 1); -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); opacity: 0; background-color: #fff; } .mui-modal.mui-active { height: 100%; -webkit-transition: -webkit-transform .25s; transition: transform .25s; -webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1); transition-timing-function: cubic-bezier(.1, .5, .1, 1); -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1; } .mui-android .mui-modal .mui-bar { position: static; } .mui-android .mui-modal .mui-bar-nav ~ .mui-content { padding-top: 0; } .mui-slider { position: relative; z-index: 1; overflow: hidden; width: 100%; } .mui-slider .mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active { border-bottom: 0; } .mui-slider .mui-segmented-control.mui-segmented-control-inverted ~ .mui-slider-group .mui-slider-item { border-top: 1px solid #c8c7cc; border-bottom: 1px solid #c8c7cc; } .mui-slider .mui-slider-group { font-size: 0; position: relative; -webkit-transition: all 0s linear; transition: all 0s linear; white-space: nowrap; } .mui-slider .mui-slider-group .mui-slider-item { font-size: 14px; position: relative; display: inline-block; width: 100%; height: 100%; vertical-align: top; white-space: normal; } .mui-slider .mui-slider-group .mui-slider-item > a:not(.mui-control-item) { line-height: 0; position: relative; display: block; } .mui-slider .mui-slider-group .mui-slider-item img { width: 100%; } .mui-slider .mui-slider-group .mui-slider-item .mui-table-view:before, .mui-slider .mui-slider-group .mui-slider-item .mui-table-view:after { height: 0; } .mui-slider .mui-slider-group.mui-slider-loop { -webkit-transform: translate(-100%, 0px); transform: translate(-100%, 0px); } .mui-slider-title { line-height: 30px; position: absolute; bottom: 0; left: 0; width: 100%; height: 30px; margin: 0; text-align: left; text-indent: 12px; opacity: .8; background-color: #000; } .mui-slider-indicator { position: absolute; bottom: 8px; width: 100%; text-align: center; background: none; } .mui-slider-indicator.mui-segmented-control { position: relative; bottom: auto; } .mui-slider-indicator .mui-indicator { display: inline-block; width: 6px; height: 6px; margin: 1px 6px; cursor: pointer; border-radius: 50%; background: #aaa; -webkit-box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7); box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7); } .mui-slider-indicator .mui-active.mui-indicator { background: #fff; } .mui-slider-indicator .mui-icon { font-size: 20px; line-height: 30px; width: 40px; height: 30px; margin: 3px; text-align: center; border: 1px solid #ddd; } .mui-slider-indicator .mui-number { line-height: 32px; display: inline-block; width: 58px; } .mui-slider-indicator .mui-number span { color: #ff5053; } .mui-slider-progress-bar { z-index: 1; height: 2px; -webkit-transform: translateZ(0); transform: translateZ(0); } .mui-switch { position: relative; display: block; width: 74px; height: 30px; -webkit-transition-timing-function: ease-in-out; transition-timing-function: ease-in-out; -webkit-transition-duration: .2s; transition-duration: .2s; -webkit-transition-property: background-color, border; transition-property: background-color, border; border: 2px solid #ddd; border-radius: 20px; background-color: #fff; background-clip: padding-box; } .mui-switch.mui-disabled { opacity: .3; } .mui-switch .mui-switch-handle { position: absolute; z-index: 1; top: -1px; left: -1px; width: 28px; height: 28px; -webkit-transition: .2s ease-in-out; transition: .2s ease-in-out; -webkit-transition-property: -webkit-transform, width,left; transition-property: transform, width,left; border-radius: 16px; background-color: #fff; background-clip: padding-box; -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .4); box-shadow: 0 2px 5px rgba(0, 0, 0, .4); } .mui-switch:before { font-size: 13px; position: absolute; top: 3px; right: 11px; content: 'Off'; text-transform: uppercase; color: #999; } .mui-switch.mui-dragging { border-color: #f7f7f7; background-color: #f7f7f7; } .mui-switch.mui-dragging .mui-switch-handle { width: 38px; } .mui-switch.mui-dragging.mui-active .mui-switch-handle { left: -11px; width: 38px; } .mui-switch.mui-active { border-color: #4cd964; background-color: #4cd964; } .mui-switch.mui-active .mui-switch-handle { -webkit-transform: translate(43px, 0); transform: translate(43px, 0); } .mui-switch.mui-active:before { right: auto; left: 15px; content: 'On'; color: #fff; } .mui-switch input[type='checkbox'] { display: none; } .mui-switch-mini { width: 47px; } .mui-switch-mini:before { display: none; } .mui-switch-mini.mui-active .mui-switch-handle { -webkit-transform: translate(16px, 0); transform: translate(16px, 0); } .mui-switch-blue.mui-active { border: 2px solid #007aff; background-color: #007aff; } .mui-content.mui-fade { left: 0; opacity: 0; } .mui-content.mui-fade.mui-in { opacity: 1; } .mui-content.mui-sliding { z-index: 2; -webkit-transition: -webkit-transform .4s; transition: transform .4s; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } .mui-content.mui-sliding.mui-left { z-index: 1; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } .mui-content.mui-sliding.mui-right { z-index: 3; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } .mui-navigate-right:after, .mui-push-left:after, .mui-push-right:after { font-family: Muiicons; font-size: inherit; line-height: 1; position: absolute; top: 50%; display: inline-block; -webkit-transform: translateY(-50%); transform: translateY(-50%); text-decoration: none; color: #bbb; -webkit-font-smoothing: antialiased; } .mui-push-left:after { left: 15px; content: '\e582'; } .mui-navigate-right:after, .mui-push-right:after { right: 15px; content: '\e583'; } .mui-pull-top-pocket, .mui-pull-bottom-pocket { position: absolute; left: 0; display: block; visibility: hidden; overflow: hidden; width: 100%; height: 50px; } .mui-plus-pullrefresh .mui-pull-top-pocket, .mui-plus-pullrefresh .mui-pull-bottom-pocket { display: none; visibility: visible; } .mui-pull-top-pocket { top: 0; } .mui-bar-nav ~ .mui-content .mui-pull-top-pocket { top: 44px; } .mui-bar-nav ~ .mui-bar-header-secondary ~ .mui-content .mui-pull-top-pocket { top: 88px; } .mui-pull-bottom-pocket { position: relative; bottom: 0; height: 40px; } .mui-pull-bottom-pocket .mui-pull-loading { visibility: hidden; } .mui-pull-bottom-pocket .mui-pull-loading.mui-in { display: inline-block; } .mui-pull { font-weight: bold; position: absolute; right: 0; bottom: 10px; left: 0; text-align: center; color: #777; } .mui-pull-loading { margin-right: 10px; -webkit-transition: -webkit-transform .4s; transition: transform .4s; -webkit-transition-duration: 400ms; transition-duration: 400ms; vertical-align: middle; } .mui-pull-loading.mui-reverse { -webkit-transform: rotate(180deg) translateZ(0); transform: rotate(180deg) translateZ(0); } .mui-pull-caption { font-size: 15px; line-height: 24px; position: relative; display: inline-block; overflow: visible; margin-top: 0; vertical-align: middle; } .mui-pull-caption span { display: none; } .mui-pull-caption span.mui-in { display: inline; } .mui-toast-container { line-height: 17px; position: fixed; z-index: 9999; bottom: 50px; left: 50%; -webkit-transition: opacity .3s; transition: opacity .3s; -webkit-transform: translate(-50%, 0); transform: translate(-50%, 0); opacity: 0; } .mui-toast-container.mui-active { opacity: .9; } .mui-toast-message { font-size: 14px; padding: 10px 25px; text-align: center; color: #fff; border-radius: 6px; background-color: #323232; } .mui-numbox { position: relative; display: inline-block; overflow: hidden; width: 120px; height: 35px; padding: 0 40px 0 40px; vertical-align: top; vertical-align: middle; border: solid 1px #bbb; border-radius: 3px; background-color: #efeff4; } .mui-numbox [class*=numbox-btn], .mui-numbox [class*=btn-numbox] { font-size: 18px; font-weight: normal; line-height: 100%; position: absolute; top: 0; overflow: hidden; width: 40px; height: 100%; padding: 0; color: #555; border: none; border-radius: 0; background-color: #f9f9f9; } .mui-numbox [class*=numbox-btn]:active, .mui-numbox [class*=btn-numbox]:active { background-color: #ccc; } .mui-numbox [class*=numbox-btn][disabled], .mui-numbox [class*=btn-numbox][disabled] { color: #c0c0c0; } .mui-numbox .mui-numbox-btn-plus, .mui-numbox .mui-btn-numbox-plus { right: 0; border-top-right-radius: 3px; border-bottom-right-radius: 3px; } .mui-numbox .mui-numbox-btn-minus, .mui-numbox .mui-btn-numbox-minus { left: 0; border-top-left-radius: 3px; border-bottom-left-radius: 3px; } .mui-numbox .mui-numbox-input, .mui-numbox .mui-input-numbox { display: inline-block; overflow: hidden; width: 100% !important; height: 100%; margin: 0; padding: 0 3px !important; text-align: center; text-overflow: ellipsis; word-break: normal; border: none !important; border-right: solid 1px #ccc !important; border-left: solid 1px #ccc !important; border-radius: 0 !important; } .mui-input-row .mui-numbox { float: right; margin: 2px 8px; } @font-face { font-family: Muiicons; font-weight: normal; font-style: normal; src: url('../fonts/mui.ttf') format('truetype'); } .mui-icon { font-family: Muiicons; font-size: 24px; font-weight: normal; font-style: normal; line-height: 1; display: inline-block; text-decoration: none; -webkit-font-smoothing: antialiased; } .mui-icon.mui-active { color: #007aff; } .mui-icon.mui-right:before { float: right; padding-left: .2em; } .mui-icon-contact:before { content: '\e100'; } .mui-icon-person:before { content: '\e101'; } .mui-icon-personadd:before { content: '\e102'; } .mui-icon-contact-filled:before { content: '\e130'; } .mui-icon-person-filled:before { content: '\e131'; } .mui-icon-personadd-filled:before { content: '\e132'; } .mui-icon-phone:before { content: '\e200'; } .mui-icon-email:before { content: '\e201'; } .mui-icon-chatbubble:before { content: '\e202'; } .mui-icon-chatboxes:before { content: '\e203'; } .mui-icon-phone-filled:before { content: '\e230'; } .mui-icon-email-filled:before { content: '\e231'; } .mui-icon-chatbubble-filled:before { content: '\e232'; } .mui-icon-chatboxes-filled:before { content: '\e233'; } .mui-icon-weibo:before { content: '\e260'; } .mui-icon-weixin:before { content: '\e261'; } .mui-icon-pengyouquan:before { content: '\e262'; } .mui-icon-chat:before { content: '\e263'; } .mui-icon-qq:before { content: '\e264'; } .mui-icon-videocam:before { content: '\e300'; } .mui-icon-camera:before { content: '\e301'; } .mui-icon-mic:before { content: '\e302'; } .mui-icon-location:before { content: '\e303'; } .mui-icon-mic-filled:before, .mui-icon-speech:before { content: '\e332'; } .mui-icon-location-filled:before { content: '\e333'; } .mui-icon-micoff:before { content: '\e360'; } .mui-icon-image:before { content: '\e363'; } .mui-icon-map:before { content: '\e364'; } .mui-icon-compose:before { content: '\e400'; } .mui-icon-trash:before { content: '\e401'; } .mui-icon-upload:before { content: '\e402'; } .mui-icon-download:before { content: '\e403'; } .mui-icon-close:before { content: '\e404'; } .mui-icon-redo:before { content: '\e405'; } .mui-icon-undo:before { content: '\e406'; } .mui-icon-refresh:before { content: '\e407'; } .mui-icon-star:before { content: '\e408'; } .mui-icon-plus:before { content: '\e409'; } .mui-icon-minus:before { content: '\e410'; } .mui-icon-circle:before, .mui-icon-checkbox:before { content: '\e411'; } .mui-icon-close-filled:before, .mui-icon-clear:before { content: '\e434'; } .mui-icon-refresh-filled:before { content: '\e437'; } .mui-icon-star-filled:before { content: '\e438'; } .mui-icon-plus-filled:before { content: '\e439'; } .mui-icon-minus-filled:before { content: '\e440'; } .mui-icon-circle-filled:before { content: '\e441'; } .mui-icon-checkbox-filled:before { content: '\e442'; } .mui-icon-closeempty:before { content: '\e460'; } .mui-icon-refreshempty:before { content: '\e461'; } .mui-icon-reload:before { content: '\e462'; } .mui-icon-starhalf:before { content: '\e463'; } .mui-icon-spinner:before { content: '\e464'; } .mui-icon-spinner-cycle:before { content: '\e465'; } .mui-icon-search:before { content: '\e466'; } .mui-icon-plusempty:before { content: '\e468'; } .mui-icon-forward:before { content: '\e470'; } .mui-icon-back:before, .mui-icon-left-nav:before { content: '\e471'; } .mui-icon-checkmarkempty:before { content: '\e472'; } .mui-icon-home:before { content: '\e500'; } .mui-icon-navigate:before { content: '\e501'; } .mui-icon-gear:before { content: '\e502'; } .mui-icon-paperplane:before { content: '\e503'; } .mui-icon-info:before { content: '\e504'; } .mui-icon-help:before { content: '\e505'; } .mui-icon-locked:before { content: '\e506'; } .mui-icon-more:before { content: '\e507'; } .mui-icon-flag:before { content: '\e508'; } .mui-icon-home-filled:before { content: '\e530'; } .mui-icon-gear-filled:before { content: '\e532'; } .mui-icon-info-filled:before { content: '\e534'; } .mui-icon-help-filled:before { content: '\e535'; } .mui-icon-more-filled:before { content: '\e537'; } .mui-icon-settings:before { content: '\e560'; } .mui-icon-list:before { content: '\e562'; } .mui-icon-bars:before { content: '\e563'; } .mui-icon-loop:before { content: '\e565'; } .mui-icon-paperclip:before { content: '\e567'; } .mui-icon-eye:before { content: '\e568'; } .mui-icon-arrowup:before { content: '\e580'; } .mui-icon-arrowdown:before { content: '\e581'; } .mui-icon-arrowleft:before { content: '\e582'; } .mui-icon-arrowright:before { content: '\e583'; } .mui-icon-arrowthinup:before { content: '\e584'; } .mui-icon-arrowthindown:before { content: '\e585'; } .mui-icon-arrowthinleft:before { content: '\e586'; } .mui-icon-arrowthinright:before { content: '\e587'; } .mui-icon-pulldown:before { content: '\e588'; } .mui-fullscreen { position: absolute; top: 0; right: 0; bottom: 0; left: 0; } .mui-fullscreen.mui-slider .mui-slider-group { height: 100%; } .mui-fullscreen .mui-segmented-control ~ .mui-slider-group { position: absolute; top: 40px; bottom: 0; width: 100%; height: auto; } .mui-fullscreen.mui-slider .mui-slider-item > a { top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .mui-fullscreen .mui-off-canvas-wrap .mui-slider-item > a { top: auto; -webkit-transform: none; transform: none; } .mui-bar-nav ~ .mui-content .mui-slider.mui-fullscreen { top: 44px; } .mui-bar-tab ~ .mui-content .mui-slider.mui-fullscreen .mui-segmented-control ~ .mui-slider-group { bottom: 50px; } .mui-android.mui-android-4-0 input:focus, .mui-android.mui-android-4-0 textarea:focus { -webkit-user-modify: inherit; } .mui-android.mui-android-4-2 input, .mui-android.mui-android-4-2 textarea, .mui-android.mui-android-4-3 input, .mui-android.mui-android-4-3 textarea { -webkit-user-select: text; } .mui-ios .mui-table-view-cell { -webkit-transform-style: preserve-3d; transform-style: preserve-3d; } .mui-plus-visible, .mui-wechat-visible { display: none !important; } .mui-plus-hidden, .mui-wechat-hidden { display: block !important; } .mui-tab-item.mui-plus-hidden, .mui-tab-item.mui-wechat-hidden { display: table-cell !important; } .mui-plus .mui-plus-visible, .mui-wechat .mui-wechat-visible { display: block !important; } .mui-plus .mui-tab-item.mui-plus-visible, .mui-wechat .mui-tab-item.mui-wechat-visible { display: table-cell !important; } .mui-plus .mui-plus-hidden, .mui-wechat .mui-wechat-hidden { display: none !important; } .mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav { height: 64px; padding-top: 20px; } .mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav ~ .mui-content { padding-top: 64px; } .mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav ~ .mui-content .mui-pull-top-pocket { top: 64px; } .mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary { top: 64px; } .mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary ~ .mui-content { padding-top: 94px; } .mui-iframe-wrapper { position: absolute; right: 0; left: 0; -webkit-overflow-scrolling: touch; } .mui-iframe-wrapper iframe { width: 100%; height: 100%; border: 0; } ================================================ FILE: dist/js/mui.js ================================================ /*! * ===================================================== * Mui v3.7.3 (http://dev.dcloud.net.cn/mui) * ===================================================== */ /** * MUI核心JS * @type _L4.$|Function */ var mui = (function(document, undefined) { var readyRE = /complete|loaded|interactive/; var idSelectorRE = /^#([\w-]+)$/; var classSelectorRE = /^\.([\w-]+)$/; var tagSelectorRE = /^[\w-]+$/; var translateRE = /translate(?:3d)?\((.+?)\)/; var translateMatrixRE = /matrix(3d)?\((.+?)\)/; var $ = function(selector, context) { context = context || document; if (!selector) return wrap(); if (typeof selector === 'object') if ($.isArrayLike(selector)) { return wrap($.slice.call(selector), null); } else { return wrap([selector], null); } if (typeof selector === 'function') return $.ready(selector); if (typeof selector === 'string') { try { selector = selector.trim(); if (idSelectorRE.test(selector)) { var found = document.getElementById(RegExp.$1); return wrap(found ? [found] : []); } return wrap($.qsa(selector, context), selector); } catch (e) {} } return wrap(); }; var wrap = function(dom, selector) { dom = dom || []; Object.setPrototypeOf(dom, $.fn); dom.selector = selector || ''; return dom; }; $.uuid = 0; $.data = {}; /** * extend(simple) * @param {type} target * @param {type} source * @param {type} deep * @returns {unresolved} */ $.extend = function() { //from jquery2 var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; if (typeof target === "boolean") { deep = target; target = arguments[i] || {}; i++; } if (typeof target !== "object" && !$.isFunction(target)) { target = {}; } if (i === length) { target = this; i--; } for (; i < length; i++) { if ((options = arguments[i]) != null) { for (name in options) { src = target[name]; copy = options[name]; if (target === copy) { continue; } if (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && $.isArray(src) ? src : []; } else { clone = src && $.isPlainObject(src) ? src : {}; } target[name] = $.extend(deep, clone, copy); } else if (copy !== undefined) { target[name] = copy; } } } } return target; }; /** * mui noop(function) */ $.noop = function() {}; /** * mui slice(array) */ $.slice = [].slice; /** * mui filter(array) */ $.filter = [].filter; $.type = function(obj) { return obj == null ? String(obj) : class2type[{}.toString.call(obj)] || "object"; }; /** * mui isArray */ $.isArray = Array.isArray || function(object) { return object instanceof Array; }; /** * mui isArrayLike * @param {Object} obj */ $.isArrayLike = function(obj) { var length = !!obj && "length" in obj && obj.length; var type = $.type(obj); if (type === "function" || $.isWindow(obj)) { return false; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj; }; /** * mui isWindow(需考虑obj为undefined的情况) */ $.isWindow = function(obj) { return obj != null && obj === obj.window; }; /** * mui isObject */ $.isObject = function(obj) { return $.type(obj) === "object"; }; /** * mui isPlainObject */ $.isPlainObject = function(obj) { return $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype; }; /** * mui isEmptyObject * @param {Object} o */ $.isEmptyObject = function(o) { for (var p in o) { if (p !== undefined) { return false; } } return true; }; /** * mui isFunction */ $.isFunction = function(value) { return $.type(value) === "function"; }; /** * mui querySelectorAll * @param {type} selector * @param {type} context * @returns {Array} */ $.qsa = function(selector, context) { context = context || document; return $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector)); }; /** * ready(DOMContentLoaded) * @param {type} callback * @returns {_L6.$} */ $.ready = function(callback) { if (readyRE.test(document.readyState)) { callback($); } else { document.addEventListener('DOMContentLoaded', function() { callback($); }, false); } return this; }; /** * 将 fn 缓存一段时间后, 再被调用执行 * 此方法为了避免在 ms 段时间内, 执行 fn 多次. 常用于 resize , scroll , mousemove 等连续性事件中; * 当 ms 设置为 -1, 表示立即执行 fn, 即和直接调用 fn 一样; * 调用返回函数的 stop 停止最后一次的 buffer 效果 * @param {Object} fn * @param {Object} ms * @param {Object} context */ $.buffer = function(fn, ms, context) { var timer; var lastStart = 0; var lastEnd = 0; var ms = ms || 150; function run() { if (timer) { timer.cancel(); timer = 0; } lastStart = $.now(); fn.apply(context || this, arguments); lastEnd = $.now(); } return $.extend(function() { if ( (!lastStart) || // 从未运行过 (lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒 (lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成,后8*ms毫秒 ) { run.apply(this, arguments); } else { if (timer) { timer.cancel(); } timer = $.later(run, ms, null, $.slice.call(arguments)); } }, { stop: function() { if (timer) { timer.cancel(); timer = 0; } } }); }; /** * each * @param {type} elements * @param {type} callback * @returns {_L8.$} */ $.each = function(elements, callback, hasOwnProperty) { if (!elements) { return this; } if (typeof elements.length === 'number') { [].every.call(elements, function(el, idx) { return callback.call(el, idx, el) !== false; }); } else { for (var key in elements) { if (hasOwnProperty) { if (elements.hasOwnProperty(key)) { if (callback.call(elements[key], key, elements[key]) === false) return elements; } } else { if (callback.call(elements[key], key, elements[key]) === false) return elements; } } } return this; }; $.focus = function(element) { if ($.os.ios) { setTimeout(function() { element.focus(); }, 10); } else { element.focus(); } }; /** * trigger event * @param {type} element * @param {type} eventType * @param {type} eventData * @returns {_L8.$} */ $.trigger = function(element, eventType, eventData) { element.dispatchEvent(new CustomEvent(eventType, { detail: eventData, bubbles: true, cancelable: true })); return this; }; /** * getStyles * @param {type} element * @param {type} property * @returns {styles} */ $.getStyles = function(element, property) { var styles = element.ownerDocument.defaultView.getComputedStyle(element, null); if (property) { return styles.getPropertyValue(property) || styles[property]; } return styles; }; /** * parseTranslate * @param {type} translateString * @param {type} position * @returns {Object} */ $.parseTranslate = function(translateString, position) { var result = translateString.match(translateRE || ''); if (!result || !result[1]) { result = ['', '0,0,0']; } result = result[1].split(","); result = { x: parseFloat(result[0]), y: parseFloat(result[1]), z: parseFloat(result[2]) }; if (position && result.hasOwnProperty(position)) { return result[position]; } return result; }; /** * parseTranslateMatrix * @param {type} translateString * @param {type} position * @returns {Object} */ $.parseTranslateMatrix = function(translateString, position) { var matrix = translateString.match(translateMatrixRE); var is3D = matrix && matrix[1]; if (matrix) { matrix = matrix[2].split(","); if (is3D === "3d") matrix = matrix.slice(12, 15); else { matrix.push(0); matrix = matrix.slice(4, 7); } } else { matrix = [0, 0, 0]; } var result = { x: parseFloat(matrix[0]), y: parseFloat(matrix[1]), z: parseFloat(matrix[2]) }; if (position && result.hasOwnProperty(position)) { return result[position]; } return result; }; $.hooks = {}; $.addAction = function(type, hook) { var hooks = $.hooks[type]; if (!hooks) { hooks = []; } hook.index = hook.index || 1000; hooks.push(hook); hooks.sort(function(a, b) { return a.index - b.index; }); $.hooks[type] = hooks; return $.hooks[type]; }; $.doAction = function(type, callback) { if ($.isFunction(callback)) { //指定了callback $.each($.hooks[type], callback); } else { //未指定callback,直接执行 $.each($.hooks[type], function(index, hook) { return !hook.handle(); }); } }; /** * setTimeout封装 * @param {Object} fn * @param {Object} when * @param {Object} context * @param {Object} data */ $.later = function(fn, when, context, data) { when = when || 0; var m = fn; var d = data; var f; var r; if (typeof fn === 'string') { m = context[fn]; } f = function() { m.apply(context, $.isArray(d) ? d : [d]); }; r = setTimeout(f, when); return { id: r, cancel: function() { clearTimeout(r); } }; }; $.now = Date.now || function() { return +new Date(); }; var class2type = {}; $.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) { class2type["[object " + name + "]"] = name.toLowerCase(); }); if (window.JSON) { $.parseJSON = JSON.parse; } /** * $.fn */ $.fn = { each: function(callback) { [].every.call(this, function(el, idx) { return callback.call(el, idx, el) !== false; }); return this; } }; /** * 兼容 AMD 模块 **/ if (typeof define === 'function' && define.amd) { define('mui', [], function() { return $; }); } return $; })(document); //window.mui = mui; //'$' in window || (window.$ = mui); /** * $.os * @param {type} $ * @returns {undefined} */ (function($, window) { function detect(ua) { this.os = {}; var funcs = [ function() { //wechat var wechat = ua.match(/(MicroMessenger)\/([\d\.]+)/i); if (wechat) { //wechat this.os.wechat = { version: wechat[2].replace(/_/g, '.') }; } return false; }, function() { //android var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); if (android) { this.os.android = true; this.os.version = android[2]; this.os.isBadAndroid = !(/Chrome\/\d/.test(window.navigator.appVersion)); } return this.os.android === true; }, function() { //ios var iphone = ua.match(/(iPhone\sOS)\s([\d_]+)/); if (iphone) { //iphone this.os.ios = this.os.iphone = true; this.os.version = iphone[2].replace(/_/g, '.'); } else { var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); if (ipad) { //ipad this.os.ios = this.os.ipad = true; this.os.version = ipad[2].replace(/_/g, '.'); } } return this.os.ios === true; } ]; [].every.call(funcs, function(func) { return !func.call($); }); } detect.call($, navigator.userAgent); })(mui, window); /** * $.os.plus * @param {type} $ * @returns {undefined} */ (function($, document) { function detect(ua) { this.os = this.os || {}; var plus = ua.match(/Html5Plus/i); //TODO 5\+Browser? if (plus) { this.os.plus = true; $(function() { document.body.classList.add('mui-plus'); }); if (ua.match(/StreamApp/i)) { //TODO 最好有流应用自己的标识 this.os.stream = true; $(function() { document.body.classList.add('mui-plus-stream'); }); } } } detect.call($, navigator.userAgent); })(mui, document); /** * 仅提供简单的on,off(仅支持事件委托,不支持当前元素绑定,当前元素绑定请直接使用addEventListener,removeEventListener) * @param {Object} $ */ (function($) { if ('ontouchstart' in window) { $.isTouchable = true; $.EVENT_START = 'touchstart'; $.EVENT_MOVE = 'touchmove'; $.EVENT_END = 'touchend'; } else { $.isTouchable = false; $.EVENT_START = 'mousedown'; $.EVENT_MOVE = 'mousemove'; $.EVENT_END = 'mouseup'; } $.EVENT_CANCEL = 'touchcancel'; $.EVENT_CLICK = 'click'; var _mid = 1; var delegates = {}; //需要wrap的函数 var eventMethods = { preventDefault: 'isDefaultPrevented', stopImmediatePropagation: 'isImmediatePropagationStopped', stopPropagation: 'isPropagationStopped' }; //默认true返回函数 var returnTrue = function() { return true }; //默认false返回函数 var returnFalse = function() { return false }; //wrap浏览器事件 var compatible = function(event, target) { if (!event.detail) { event.detail = { currentTarget: target }; } else { event.detail.currentTarget = target; } $.each(eventMethods, function(name, predicate) { var sourceMethod = event[name]; event[name] = function() { this[predicate] = returnTrue; return sourceMethod && sourceMethod.apply(event, arguments) } event[predicate] = returnFalse; }, true); return event; }; //简单的wrap对象_mid var mid = function(obj) { return obj && (obj._mid || (obj._mid = _mid++)); }; //事件委托对象绑定的事件回调列表 var delegateFns = {}; //返回事件委托的wrap事件回调 var delegateFn = function(element, event, selector, callback) { return function(e) { //same event var callbackObjs = delegates[element._mid][event]; var handlerQueue = []; var target = e.target; var selectorAlls = {}; for (; target && target !== document; target = target.parentNode) { if (target === element) { break; } if (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) { break; } var matches = {}; $.each(callbackObjs, function(selector, callbacks) { //same selector selectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element)); if (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) { if (!matches[selector]) { matches[selector] = callbacks; } } }, true); if (!$.isEmptyObject(matches)) { handlerQueue.push({ element: target, handlers: matches }); } } selectorAlls = null; e = compatible(e); //compatible event $.each(handlerQueue, function(index, handler) { target = handler.element; var tagName = target.tagName; if (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) { e.preventDefault(); e.detail && e.detail.gesture && e.detail.gesture.preventDefault(); } $.each(handler.handlers, function(index, handler) { $.each(handler, function(index, callback) { if (callback.call(target, e) === false) { e.preventDefault(); e.stopPropagation(); } }, true); }, true) if (e.isPropagationStopped()) { return false; } }, true); }; }; var findDelegateFn = function(element, event) { var delegateCallbacks = delegateFns[mid(element)]; var result = []; if (delegateCallbacks) { result = []; if (event) { var filterFn = function(fn) { return fn.type === event; } return delegateCallbacks.filter(filterFn); } else { result = delegateCallbacks; } } return result; }; var preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/; /** * mui delegate events * @param {type} event * @param {type} selector * @param {type} callback * @returns {undefined} */ $.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用,类似mouse,focus之类暂不封装支持 return this.each(function() { var element = this; mid(element); mid(callback); var isAddEventListener = false; var delegateEvents = delegates[element._mid] || (delegates[element._mid] = {}); var delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {})); if ($.isEmptyObject(delegateCallbackObjs)) { isAddEventListener = true; } var delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []); delegateCallbacks.push(callback); if (isAddEventListener) { var delegateFnArray = delegateFns[mid(element)]; if (!delegateFnArray) { delegateFnArray = []; } var delegateCallback = delegateFn(element, event, selector, callback); delegateFnArray.push(delegateCallback); delegateCallback.i = delegateFnArray.length - 1; delegateCallback.type = event; delegateFns[mid(element)] = delegateFnArray; element.addEventListener(event, delegateCallback); if (event === 'tap') { //TODO 需要找个更好的解决方案 element.addEventListener('click', function(e) { if (e.target) { var tagName = e.target.tagName; if (!preventDefaultException.test(tagName)) { if (tagName === 'A') { var href = e.target.href; if (!(href && ~href.indexOf('tel:'))) { e.preventDefault(); } } else { e.preventDefault(); } } } }); } } }); }; $.fn.off = function(event, selector, callback) { return this.each(function() { var _mid = mid(this); if (!event) { //mui(selector).off(); delegates[_mid] && delete delegates[_mid]; } else if (!selector) { //mui(selector).off(event); delegates[_mid] && delete delegates[_mid][event]; } else if (!callback) { //mui(selector).off(event,selector); delegates[_mid] && delegates[_mid][event] && delete delegates[_mid][event][selector]; } else { //mui(selector).off(event,selector,callback); var delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector]; $.each(delegateCallbacks, function(index, delegateCallback) { if (mid(delegateCallback) === mid(callback)) { delegateCallbacks.splice(index, 1); return false; } }, true); } if (delegates[_mid]) { //如果off掉了所有当前element的指定的event事件,则remove掉当前element的delegate回调 if ((!delegates[_mid][event] || $.isEmptyObject(delegates[_mid][event]))) { findDelegateFn(this, event).forEach(function(fn) { this.removeEventListener(fn.type, fn); delete delegateFns[_mid][fn.i]; }.bind(this)); } } else { //如果delegates[_mid]已不存在,删除所有 findDelegateFn(this).forEach(function(fn) { this.removeEventListener(fn.type, fn); delete delegateFns[_mid][fn.i]; }.bind(this)); } }); }; })(mui); /** * mui target(action>popover>modal>tab>toggle) */ (function($, window, document) { /** * targets */ $.targets = {}; /** * target handles */ $.targetHandles = []; /** * register target * @param {type} target * @returns {$.targets} */ $.registerTarget = function(target) { target.index = target.index || 1000; $.targetHandles.push(target); $.targetHandles.sort(function(a, b) { return a.index - b.index; }); return $.targetHandles; }; window.addEventListener($.EVENT_START, function(event) { var target = event.target; var founds = {}; for (; target && target !== document; target = target.parentNode) { var isFound = false; $.each($.targetHandles, function(index, targetHandle) { var name = targetHandle.name; if (!isFound && !founds[name] && targetHandle.hasOwnProperty('handle')) { $.targets[name] = targetHandle.handle(event, target); if ($.targets[name]) { founds[name] = true; if (targetHandle.isContinue !== true) { isFound = true; } } } else { if (!founds[name]) { if (targetHandle.isReset !== false) $.targets[name] = false; } } }); if (isFound) { break; } } }); window.addEventListener('click', function(event) { //解决touch与click的target不一致的问题(比如链接边缘点击时,touch的target为html,而click的target为A) var target = event.target; var isFound = false; for (; target && target !== document; target = target.parentNode) { if (target.tagName === 'A') { $.each($.targetHandles, function(index, targetHandle) { var name = targetHandle.name; if (targetHandle.hasOwnProperty('handle')) { if (targetHandle.handle(event, target)) { isFound = true; event.preventDefault(); return false; } } }); if (isFound) { break; } } } }); })(mui, window, document); /** * fixed trim * @param {type} undefined * @returns {undefined} */ (function(undefined) { if (String.prototype.trim === undefined) { // fix for iOS 3.2 String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }; } Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) { obj['__proto__'] = proto; return obj; }; })(); /** * fixed CustomEvent */ (function() { if (typeof window.CustomEvent === 'undefined') { function CustomEvent(event, params) { params = params || { bubbles: false, cancelable: false, detail: undefined }; var evt = document.createEvent('Events'); var bubbles = true; for (var name in params) { (name === 'bubbles') ? (bubbles = !!params[name]) : (evt[name] = params[name]); } evt.initEvent(event, bubbles, true); return evt; }; CustomEvent.prototype = window.Event.prototype; window.CustomEvent = CustomEvent; } })(); /* A shim for non ES5 supporting browsers. Adds function bind to Function prototype, so that you can do partial application. Works even with the nasty thing, where the first word is the opposite of extranet, the second one is the profession of Columbus, and the version number is 9, flipped 180 degrees. */ Function.prototype.bind = Function.prototype.bind || function(to) { // Make an array of our arguments, starting from second argument var partial = Array.prototype.splice.call(arguments, 1), // We'll need the original function. fn = this; var bound = function() { // Join the already applied arguments to the now called ones (after converting to an array again). var args = partial.concat(Array.prototype.splice.call(arguments, 0)); // If not being called as a constructor if (!(this instanceof bound)) { // return the result of the function called bound to target and partially applied. return fn.apply(to, args); } // If being called as a constructor, apply the function bound to self. fn.apply(this, args); } // Attach the prototype of the function to our newly created function. bound.prototype = fn.prototype; return bound; }; /** * mui fixed classList * @param {type} document * @returns {undefined} */ (function(document) { if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') { Object.defineProperty(HTMLElement.prototype, 'classList', { get: function() { var self = this; function update(fn) { return function(value) { var classes = self.className.split(/\s+/), index = classes.indexOf(value); fn(classes, index, value); self.className = classes.join(" "); }; } var ret = { add: update(function(classes, index, value) { ~index || classes.push(value); }), remove: update(function(classes, index) { ~index && classes.splice(index, 1); }), toggle: update(function(classes, index, value) { ~index ? classes.splice(index, 1) : classes.push(value); }), contains: function(value) { return !!~self.className.split(/\s+/).indexOf(value); }, item: function(i) { return self.className.split(/\s+/)[i] || null; } }; Object.defineProperty(ret, 'length', { get: function() { return self.className.split(/\s+/).length; } }); return ret; } }); } })(document); /** * mui fixed requestAnimationFrame * @param {type} window * @returns {undefined} */ (function(window) { if (!window.requestAnimationFrame) { var lastTime = 0; window.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16.7 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; window.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) { clearTimeout(id); }; }; }(window)); /** * fastclick(only for radio,checkbox) */ (function($, window, name) { if (!$.os.android && !$.os.ios) { //目前仅识别android和ios return; } if (window.FastClick) { return; } var handle = function(event, target) { if (target.tagName === 'LABEL') { if (target.parentNode) { target = target.parentNode.querySelector('input'); } } if (target && (target.type === 'radio' || target.type === 'checkbox')) { if (!target.disabled) { //disabled return target; } } return false; }; $.registerTarget({ name: name, index: 40, handle: handle, target: false }); var dispatchEvent = function(event) { var targetElement = $.targets.click; if (targetElement) { var clickEvent, touch; // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect if (document.activeElement && document.activeElement !== targetElement) { document.activeElement.blur(); } touch = event.detail.gesture.changedTouches[0]; // Synthesise a click event, with an extra attribute so it can be tracked clickEvent = document.createEvent('MouseEvents'); clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); clickEvent.forwardedTouchEvent = true; targetElement.dispatchEvent(clickEvent); event.detail && event.detail.gesture.preventDefault(); } }; window.addEventListener('tap', dispatchEvent); window.addEventListener('doubletap', dispatchEvent); //捕获 window.addEventListener('click', function(event) { if ($.targets.click) { if (!event.forwardedTouchEvent) { //stop click if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } else { // Part of the hack for browsers that don't support Event#stopImmediatePropagation event.propagationStopped = true; } event.stopPropagation(); event.preventDefault(); return false; } } }, true); })(mui, window, 'click'); (function($, document) { $(function() { if (!$.os.ios) { return; } var CLASS_FOCUSIN = 'mui-focusin'; var CLASS_BAR_TAB = 'mui-bar-tab'; var CLASS_BAR_FOOTER = 'mui-bar-footer'; var CLASS_BAR_FOOTER_SECONDARY = 'mui-bar-footer-secondary'; var CLASS_BAR_FOOTER_SECONDARY_TAB = 'mui-bar-footer-secondary-tab'; // var content = document.querySelector('.' + CLASS_CONTENT); // if (content) { // document.body.insertBefore(content, document.body.firstElementChild); // } document.addEventListener('focusin', function(e) { if ($.os.plus) { //在父webview里边不fix if (window.plus) { if (plus.webview.currentWebview().children().length > 0) { return; } } } var target = e.target; //TODO 需考虑所有键盘弹起的情况 if (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) { if (target.disabled || target.readOnly) { return; } document.body.classList.add(CLASS_FOCUSIN); var isFooter = false; for (; target && target !== document; target = target.parentNode) { var classList = target.classList; if (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) { isFooter = true; break; } } if (isFooter) { var scrollTop = document.body.scrollHeight; var scrollLeft = document.body.scrollLeft; setTimeout(function() { window.scrollTo(scrollLeft, scrollTop); }, 20); } } }); document.addEventListener('focusout', function(e) { var classList = document.body.classList; if (classList.contains(CLASS_FOCUSIN)) { classList.remove(CLASS_FOCUSIN); setTimeout(function() { window.scrollTo(document.body.scrollLeft, document.body.scrollTop); }, 20); } }); }); })(mui, document); /** * mui namespace(optimization) * @param {type} $ * @returns {undefined} */ (function($) { $.namespace = 'mui'; $.classNamePrefix = $.namespace + '-'; $.classSelectorPrefix = '.' + $.classNamePrefix; /** * 返回正确的className * @param {type} className * @returns {String} */ $.className = function(className) { return $.classNamePrefix + className; }; /** * 返回正确的classSelector * @param {type} classSelector * @returns {String} */ $.classSelector = function(classSelector) { return classSelector.replace(/\./g, $.classSelectorPrefix); }; /** * 返回正确的eventName * @param {type} event * @param {type} module * @returns {String} */ $.eventName = function(event, module) { return event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : ''); }; })(mui); /** * mui gestures * @param {type} $ * @param {type} window * @returns {undefined} */ (function($, window) { $.gestures = { session: {} }; /** * Gesture preventDefault * @param {type} e * @returns {undefined} */ $.preventDefault = function(e) { e.preventDefault(); }; /** * Gesture stopPropagation * @param {type} e * @returns {undefined} */ $.stopPropagation = function(e) { e.stopPropagation(); }; /** * register gesture * @param {type} gesture * @returns {$.gestures} */ $.addGesture = function(gesture) { return $.addAction('gestures', gesture); }; var round = Math.round; var abs = Math.abs; var sqrt = Math.sqrt; var atan = Math.atan; var atan2 = Math.atan2; /** * distance * @param {type} p1 * @param {type} p2 * @returns {Number} */ var getDistance = function(p1, p2, props) { if(!props) { props = ['x', 'y']; } var x = p2[props[0]] - p1[props[0]]; var y = p2[props[1]] - p1[props[1]]; return sqrt((x * x) + (y * y)); }; /** * scale * @param {Object} starts * @param {Object} moves */ var getScale = function(starts, moves) { if(starts.length >= 2 && moves.length >= 2) { var props = ['pageX', 'pageY']; return getDistance(moves[1], moves[0], props) / getDistance(starts[1], starts[0], props); } return 1; }; /** * angle * @param {type} p1 * @param {type} p2 * @returns {Number} */ var getAngle = function(p1, p2, props) { if(!props) { props = ['x', 'y']; } var x = p2[props[0]] - p1[props[0]]; var y = p2[props[1]] - p1[props[1]]; return atan2(y, x) * 180 / Math.PI; }; /** * direction * @param {Object} x * @param {Object} y */ var getDirection = function(x, y) { if(x === y) { return ''; } if(abs(x) >= abs(y)) { return x > 0 ? 'left' : 'right'; } return y > 0 ? 'up' : 'down'; }; /** * rotation * @param {Object} start * @param {Object} end */ var getRotation = function(start, end) { var props = ['pageX', 'pageY']; return getAngle(end[1], end[0], props) - getAngle(start[1], start[0], props); }; /** * px per ms * @param {Object} deltaTime * @param {Object} x * @param {Object} y */ var getVelocity = function(deltaTime, x, y) { return { x: x / deltaTime || 0, y: y / deltaTime || 0 }; }; /** * detect gestures * @param {type} event * @param {type} touch * @returns {undefined} */ var detect = function(event, touch) { if($.gestures.stoped) { return; } $.doAction('gestures', function(index, gesture) { if(!$.gestures.stoped) { if($.options.gestureConfig[gesture.name] !== false) { gesture.handle(event, touch); } } }); }; /** * 暂时无用 * @param {Object} node * @param {Object} parent */ var hasParent = function(node, parent) { while(node) { if(node == parent) { return true; } node = node.parentNode; } return false; }; var uniqueArray = function(src, key, sort) { var results = []; var values = []; var i = 0; while(i < src.length) { var val = key ? src[i][key] : src[i]; if(values.indexOf(val) < 0) { results.push(src[i]); } values[i] = val; i++; } if(sort) { if(!key) { results = results.sort(); } else { results = results.sort(function sortUniqueArray(a, b) { return a[key] > b[key]; }); } } return results; }; var getMultiCenter = function(touches) { var touchesLength = touches.length; if(touchesLength === 1) { return { x: round(touches[0].pageX), y: round(touches[0].pageY) }; } var x = 0; var y = 0; var i = 0; while(i < touchesLength) { x += touches[i].pageX; y += touches[i].pageY; i++; } return { x: round(x / touchesLength), y: round(y / touchesLength) }; }; var multiTouch = function() { return $.options.gestureConfig.pinch; }; var copySimpleTouchData = function(touch) { var touches = []; var i = 0; while(i < touch.touches.length) { touches[i] = { pageX: round(touch.touches[i].pageX), pageY: round(touch.touches[i].pageY) }; i++; } return { timestamp: $.now(), gesture: touch.gesture, touches: touches, center: getMultiCenter(touch.touches), deltaX: touch.deltaX, deltaY: touch.deltaY }; }; var calDelta = function(touch) { var session = $.gestures.session; var center = touch.center; var offset = session.offsetDelta || {}; var prevDelta = session.prevDelta || {}; var prevTouch = session.prevTouch || {}; if(touch.gesture.type === $.EVENT_START || touch.gesture.type === $.EVENT_END) { prevDelta = session.prevDelta = { x: prevTouch.deltaX || 0, y: prevTouch.deltaY || 0 }; offset = session.offsetDelta = { x: center.x, y: center.y }; } touch.deltaX = prevDelta.x + (center.x - offset.x); touch.deltaY = prevDelta.y + (center.y - offset.y); }; var calTouchData = function(touch) { var session = $.gestures.session; var touches = touch.touches; var touchesLength = touches.length; if(!session.firstTouch) { session.firstTouch = copySimpleTouchData(touch); } if(multiTouch() && touchesLength > 1 && !session.firstMultiTouch) { session.firstMultiTouch = copySimpleTouchData(touch); } else if(touchesLength === 1) { session.firstMultiTouch = false; } var firstTouch = session.firstTouch; var firstMultiTouch = session.firstMultiTouch; var offsetCenter = firstMultiTouch ? firstMultiTouch.center : firstTouch.center; var center = touch.center = getMultiCenter(touches); touch.timestamp = $.now(); touch.deltaTime = touch.timestamp - firstTouch.timestamp; touch.angle = getAngle(offsetCenter, center); touch.distance = getDistance(offsetCenter, center); calDelta(touch); touch.offsetDirection = getDirection(touch.deltaX, touch.deltaY); touch.scale = firstMultiTouch ? getScale(firstMultiTouch.touches, touches) : 1; touch.rotation = firstMultiTouch ? getRotation(firstMultiTouch.touches, touches) : 0; calIntervalTouchData(touch); }; var CAL_INTERVAL = 25; var calIntervalTouchData = function(touch) { var session = $.gestures.session; var last = session.lastInterval || touch; var deltaTime = touch.timestamp - last.timestamp; var velocity; var velocityX; var velocityY; var direction; if(touch.gesture.type != $.EVENT_CANCEL && (deltaTime > CAL_INTERVAL || last.velocity === undefined)) { var deltaX = last.deltaX - touch.deltaX; var deltaY = last.deltaY - touch.deltaY; var v = getVelocity(deltaTime, deltaX, deltaY); velocityX = v.x; velocityY = v.y; velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y; direction = getDirection(deltaX, deltaY) || last.direction; session.lastInterval = touch; } else { velocity = last.velocity; velocityX = last.velocityX; velocityY = last.velocityY; direction = last.direction; } touch.velocity = velocity; touch.velocityX = velocityX; touch.velocityY = velocityY; touch.direction = direction; }; var targetIds = {}; var convertTouches = function(touches) { for(var i = 0; i < touches.length; i++) { !touches['identifier'] && (touches['identifier'] = 0); } return touches; }; var getTouches = function(event, touch) { var allTouches = convertTouches($.slice.call(event.touches || [event])); var type = event.type; var targetTouches = []; var changedTargetTouches = []; //当touchstart或touchmove且touches长度为1,直接获得all和changed if((type === $.EVENT_START || type === $.EVENT_MOVE) && allTouches.length === 1) { targetIds[allTouches[0].identifier] = true; targetTouches = allTouches; changedTargetTouches = allTouches; touch.target = event.target; } else { var i = 0; var targetTouches = []; var changedTargetTouches = []; var changedTouches = convertTouches($.slice.call(event.changedTouches || [event])); touch.target = event.target; var sessionTarget = $.gestures.session.target || event.target; targetTouches = allTouches.filter(function(touch) { return hasParent(touch.target, sessionTarget); }); if(type === $.EVENT_START) { i = 0; while(i < targetTouches.length) { targetIds[targetTouches[i].identifier] = true; i++; } } i = 0; while(i < changedTouches.length) { if(targetIds[changedTouches[i].identifier]) { changedTargetTouches.push(changedTouches[i]); } if(type === $.EVENT_END || type === $.EVENT_CANCEL) { delete targetIds[changedTouches[i].identifier]; } i++; } if(!changedTargetTouches.length) { return false; } } targetTouches = uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true); var touchesLength = targetTouches.length; var changedTouchesLength = changedTargetTouches.length; if(type === $.EVENT_START && touchesLength - changedTouchesLength === 0) { //first touch.isFirst = true; $.gestures.touch = $.gestures.session = { target: event.target }; } touch.isFinal = ((type === $.EVENT_END || type === $.EVENT_CANCEL) && (touchesLength - changedTouchesLength === 0)); touch.touches = targetTouches; touch.changedTouches = changedTargetTouches; return true; }; var handleTouchEvent = function(event) { var touch = { gesture: event }; var touches = getTouches(event, touch); if(!touches) { return; } calTouchData(touch); detect(event, touch); $.gestures.session.prevTouch = touch; if(event.type === $.EVENT_END && !$.isTouchable) { $.gestures.touch = $.gestures.session = {}; } }; var supportsPassive = (function checkPassiveListener() { var supportsPassive = false; try { var opts = Object.defineProperty({}, 'passive', { get: function get() { supportsPassive = true; }, }); window.addEventListener('testPassiveListener', null, opts); } catch(e) { // No support } return supportsPassive; }()) window.addEventListener($.EVENT_START, handleTouchEvent); window.addEventListener($.EVENT_MOVE, handleTouchEvent, supportsPassive ? { passive: false, capture: false } : false); window.addEventListener($.EVENT_END, handleTouchEvent); window.addEventListener($.EVENT_CANCEL, handleTouchEvent); //fixed hashchange(android) window.addEventListener($.EVENT_CLICK, function(e) { //TODO 应该判断当前target是不是在targets.popover内部,而不是非要相等 if(($.os.android || $.os.ios) && (($.targets.popover && e.target === $.targets.popover) || ($.targets.tab) || $.targets.offcanvas || $.targets.modal)) { e.preventDefault(); } }, true); //增加原生滚动识别 $.isScrolling = false; var scrollingTimeout = null; window.addEventListener('scroll', function() { $.isScrolling = true; scrollingTimeout && clearTimeout(scrollingTimeout); scrollingTimeout = setTimeout(function() { $.isScrolling = false; }, 250); }); })(mui, window); /** * mui gesture flick[left|right|up|down] * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var flickStartTime = 0; var handle = function(event, touch) { var session = $.gestures.session; var options = this.options; var now = $.now(); switch (event.type) { case $.EVENT_MOVE: if (now - flickStartTime > 300) { flickStartTime = now; session.flickStart = touch.center; } break; case $.EVENT_END: case $.EVENT_CANCEL: touch.flick = false; if (session.flickStart && options.flickMaxTime > (now - flickStartTime) && touch.distance > options.flickMinDistince) { touch.flick = true; touch.flickTime = now - flickStartTime; touch.flickDistanceX = touch.center.x - session.flickStart.x; touch.flickDistanceY = touch.center.y - session.flickStart.y; $.trigger(session.target, name, touch); $.trigger(session.target, name + touch.direction, touch); } break; } }; /** * mui gesture flick */ $.addGesture({ name: name, index: 5, handle: handle, options: { flickMaxTime: 200, flickMinDistince: 10 } }); })(mui, 'flick'); /** * mui gesture swipe[left|right|up|down] * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var handle = function(event, touch) { var session = $.gestures.session; if (event.type === $.EVENT_END || event.type === $.EVENT_CANCEL) { var options = this.options; touch.swipe = false; //TODO 后续根据velocity计算 if (touch.direction && options.swipeMaxTime > touch.deltaTime && touch.distance > options.swipeMinDistince) { touch.swipe = true; $.trigger(session.target, name, touch); $.trigger(session.target, name + touch.direction, touch); } } }; /** * mui gesture swipe */ $.addGesture({ name: name, index: 10, handle: handle, options: { swipeMaxTime: 300, swipeMinDistince: 18 } }); })(mui, 'swipe'); /** * mui gesture drag[start|left|right|up|down|end] * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var handle = function(event, touch) { var session = $.gestures.session; switch (event.type) { case $.EVENT_START: break; case $.EVENT_MOVE: if (!touch.direction || !session.target) { return; } //修正direction,可在session期间自行锁定拖拽方向,方便开发scroll类不同方向拖拽插件嵌套 if (session.lockDirection && session.startDirection) { if (session.startDirection && session.startDirection !== touch.direction) { if (session.startDirection === 'up' || session.startDirection === 'down') { touch.direction = touch.deltaY < 0 ? 'up' : 'down'; } else { touch.direction = touch.deltaX < 0 ? 'left' : 'right'; } } } if (!session.drag) { session.drag = true; $.trigger(session.target, name + 'start', touch); } $.trigger(session.target, name, touch); $.trigger(session.target, name + touch.direction, touch); break; case $.EVENT_END: case $.EVENT_CANCEL: if (session.drag && touch.isFinal) { $.trigger(session.target, name + 'end', touch); } break; } }; /** * mui gesture drag */ $.addGesture({ name: name, index: 20, handle: handle, options: { fingers: 1 } }); })(mui, 'drag'); /** * mui gesture tap and doubleTap * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var lastTarget; var lastTapTime; var handle = function(event, touch) { var session = $.gestures.session; var options = this.options; switch (event.type) { case $.EVENT_END: if (!touch.isFinal) { return; } var target = session.target; if (!target || (target.disabled || (target.classList && target.classList.contains('mui-disabled')))) { return; } if (touch.distance < options.tapMaxDistance && touch.deltaTime < options.tapMaxTime) { if ($.options.gestureConfig.doubletap && lastTarget && (lastTarget === target)) { //same target if (lastTapTime && (touch.timestamp - lastTapTime) < options.tapMaxInterval) { $.trigger(target, 'doubletap', touch); lastTapTime = $.now(); lastTarget = target; return; } } $.trigger(target, name, touch); lastTapTime = $.now(); lastTarget = target; } break; } }; /** * mui gesture tap */ $.addGesture({ name: name, index: 30, handle: handle, options: { fingers: 1, tapMaxInterval: 300, tapMaxDistance: 5, tapMaxTime: 250 } }); })(mui, 'tap'); /** * mui gesture longtap * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var timer; var handle = function(event, touch) { var session = $.gestures.session; var options = this.options; switch (event.type) { case $.EVENT_START: clearTimeout(timer); timer = setTimeout(function() { $.trigger(session.target, name, touch); }, options.holdTimeout); break; case $.EVENT_MOVE: if (touch.distance > options.holdThreshold) { clearTimeout(timer); } break; case $.EVENT_END: case $.EVENT_CANCEL: clearTimeout(timer); break; } }; /** * mui gesture longtap */ $.addGesture({ name: name, index: 10, handle: handle, options: { fingers: 1, holdTimeout: 500, holdThreshold: 2 } }); })(mui, 'longtap'); /** * mui gesture hold * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var timer; var handle = function(event, touch) { var session = $.gestures.session; var options = this.options; switch (event.type) { case $.EVENT_START: if ($.options.gestureConfig.hold) { timer && clearTimeout(timer); timer = setTimeout(function() { touch.hold = true; $.trigger(session.target, name, touch); }, options.holdTimeout); } break; case $.EVENT_MOVE: break; case $.EVENT_END: case $.EVENT_CANCEL: if (timer) { clearTimeout(timer) && (timer = null); $.trigger(session.target, 'release', touch); } break; } }; /** * mui gesture hold */ $.addGesture({ name: name, index: 10, handle: handle, options: { fingers: 1, holdTimeout: 0 } }); })(mui, 'hold'); /** * mui gesture pinch * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var handle = function(event, touch) { var options = this.options; var session = $.gestures.session; switch (event.type) { case $.EVENT_START: break; case $.EVENT_MOVE: if ($.options.gestureConfig.pinch) { if (touch.touches.length < 2) { return; } if (!session.pinch) { //start session.pinch = true; $.trigger(session.target, name + 'start', touch); } $.trigger(session.target, name, touch); var scale = touch.scale; var rotation = touch.rotation; var lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale; var scaleDiff = 0.000000000001; //防止scale与lastScale相等,不触发事件的情况。 if (scale > lastScale) { //out lastScale = scale - scaleDiff; $.trigger(session.target, name + 'out', touch); } //in else if (scale < lastScale) { lastScale = scale + scaleDiff; $.trigger(session.target, name + 'in', touch); } if (Math.abs(rotation) > options.minRotationAngle) { $.trigger(session.target, 'rotate', touch); } } break; case $.EVENT_END: case $.EVENT_CANCEL: if ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) { session.pinch = false; $.trigger(session.target, name + 'end', touch); } break; } }; /** * mui gesture pinch */ $.addGesture({ name: name, index: 10, handle: handle, options: { minRotationAngle: 0 } }); })(mui, 'pinch'); /** * mui.init * @param {type} $ * @returns {undefined} */ (function($) { $.global = $.options = { gestureConfig: { tap: true, doubletap: false, longtap: false, hold: false, flick: true, swipe: true, drag: true, pinch: false } }; /** * * @param {type} options * @returns {undefined} */ $.initGlobal = function(options) { $.options = $.extend(true, $.global, options); return this; }; var inits = {}; /** * 单页配置 初始化 * @param {object} options */ $.init = function(options) { $.options = $.extend(true, $.global, options || {}); $.ready(function() { $.doAction('inits', function(index, init) { var isInit = !!(!inits[init.name] || init.repeat); if (isInit) { init.handle.call($); inits[init.name] = true; } }); }); return this; }; /** * 增加初始化执行流程 * @param {function} init */ $.addInit = function(init) { return $.addAction('inits', init); }; /** * 处理html5版本subpages */ $.addInit({ name: 'iframe', index: 100, handle: function() { var options = $.options; var subpages = options.subpages || []; if (!$.os.plus && subpages.length) { //暂时只处理单个subpage。后续可以考虑支持多个subpage createIframe(subpages[0]); } } }); var createIframe = function(options) { var wrapper = document.createElement('div'); wrapper.className = 'mui-iframe-wrapper'; var styles = options.styles || {}; if (typeof styles.top !== 'string') { styles.top = '0px'; } if (typeof styles.bottom !== 'string') { styles.bottom = '0px'; } wrapper.style.top = styles.top; wrapper.style.bottom = styles.bottom; var iframe = document.createElement('iframe'); iframe.src = options.url; iframe.id = options.id || options.url; iframe.name = iframe.id; wrapper.appendChild(iframe); document.body.appendChild(wrapper); //目前仅处理微信 $.os.wechat && handleScroll(wrapper, iframe); }; function handleScroll(wrapper, iframe) { var key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src; var scrollTop = (parseFloat(localStorage.getItem(key)) || 0); if (scrollTop) { (function(y) { iframe.onload = function() { window.scrollTo(0, y); }; })(scrollTop); } setInterval(function() { var _scrollTop = window.scrollY; if (scrollTop !== _scrollTop) { localStorage.setItem(key, _scrollTop + ''); scrollTop = _scrollTop; } }, 100); }; $(function() { var classList = document.body.classList; var os = []; if ($.os.ios) { os.push({ os: 'ios', version: $.os.version }); classList.add('mui-ios'); } else if ($.os.android) { os.push({ os: 'android', version: $.os.version }); classList.add('mui-android'); } if ($.os.wechat) { os.push({ os: 'wechat', version: $.os.wechat.version }); classList.add('mui-wechat'); } if (os.length) { $.each(os, function(index, osObj) { var version = ''; var classArray = []; if (osObj.version) { $.each(osObj.version.split('.'), function(i, v) { version = version + (version ? '-' : '') + v; classList.add($.className(osObj.os + '-' + version)); }); } }); } }); })(mui); /** * mui.init 5+ * @param {type} $ * @returns {undefined} */ (function($) { var defaultOptions = { swipeBack: false, preloadPages: [], //5+ lazyLoad webview preloadLimit: 10, //预加载窗口的数量限制(一旦超出,先进先出) keyEventBind: { backbutton: true, menubutton: true }, titleConfig: { height: "44px", backgroundColor: "#f7f7f7", //导航栏背景色 bottomBorderColor: "#cccccc", //底部边线颜色 title: { //标题配置 text: "", //标题文字 position: { top: 0, left: 0, width: "100%", height: "100%" }, styles: { color: "#000000", align: "center", family: "'Helvetica Neue',Helvetica,sans-serif", size: "17px", style: "normal", weight: "normal", fontSrc: "" } }, back: { image: { base64Data: '', imgSrc: '', sprite: { top: '0px', left: '0px', width: '100%', height: '100%' }, position: { top: "10px", left: "10px", width: "24px", height: "24px" } } } } }; //默认页面动画 var defaultShow = { event:"titleUpdate", autoShow: true, duration: 300, aniShow: 'slide-in-right', extras:{} }; //若执行了显示动画初始化操作,则要覆盖默认配置 if($.options.show) { defaultShow = $.extend(true, defaultShow, $.options.show); } $.currentWebview = null; $.extend(true, $.global, defaultOptions); $.extend(true, $.options, defaultOptions); /** * 等待动画配置 * @param {type} options * @returns {Object} */ $.waitingOptions = function(options) { return $.extend(true, {}, { autoShow: true, title: '', modal: false }, options); }; /** * 窗口显示配置 * @param {type} options * @returns {Object} */ $.showOptions = function(options) { return $.extend(true, {}, defaultShow, options); }; /** * 窗口默认配置 * @param {type} options * @returns {Object} */ $.windowOptions = function(options) { return $.extend({ scalable: false, bounce: "" //vertical }, options); }; /** * plusReady * @param {type} callback * @returns {_L6.$} */ $.plusReady = function(callback) { if(window.plus) { setTimeout(function() { //解决callback与plusready事件的执行时机问题(典型案例:showWaiting,closeWaiting) callback(); }, 0); } else { document.addEventListener("plusready", function() { callback(); }, false); } return this; }; /** * 5+ event(5+没提供之前我自己实现) * @param {type} webview * @param {type} eventType * @param {type} data * @returns {undefined} */ $.fire = function(webview, eventType, data) { if(webview) { if(typeof data === 'undefined') { data = ''; } else if(typeof data === 'boolean' || typeof data === 'number') { webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "'," + data + ")"); return; } else if($.isPlainObject(data) || $.isArray(data)) { data = JSON.stringify(data || {}).replace(/\'/g, "\\u0027").replace(/\\/g, "\\u005c"); } webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "','" + data + "')"); } }; /** * 5+ event(5+没提供之前我自己实现) * @param {type} eventType * @param {type} data * @returns {undefined} */ $.receive = function(eventType, data) { if(eventType) { try { if(data && typeof data === 'string') { data = JSON.parse(data); } } catch(e) {} $.trigger(document, eventType, data); } }; var triggerPreload = function(webview) { if(!webview.preloaded) { //保证仅触发一次 $.fire(webview, 'preload'); var list = webview.children(); for(var i = 0; i < list.length; i++) { $.fire(list[i], 'preload'); } webview.preloaded = true; } }; var trigger = function(webview, eventType, timeChecked) { if(timeChecked) { if(!webview[eventType + 'ed']) { $.fire(webview, eventType); var list = webview.children(); for(var i = 0; i < list.length; i++) { $.fire(list[i], eventType); } webview[eventType + 'ed'] = true; } } else { $.fire(webview, eventType); var list = webview.children(); for(var i = 0; i < list.length; i++) { $.fire(list[i], eventType); } } }; /** * 打开新窗口 * @param {string} url 要打开的页面地址 * @param {string} id 指定页面ID * @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}} */ $.openWindow = function(url, id, options) { if(typeof url === 'object') { options = url; url = options.url; id = options.id || url; } else { if(typeof id === 'object') { options = id; id = options.id || url; } else { id = id || url; } } if(!$.os.plus) { //TODO 先临时这么处理:手机上顶层跳,PC上parent跳 if($.os.ios || $.os.android) { window.top.location.href = url; } else { window.parent.location.href = url; } return; } if(!window.plus) { return; } options = options || {}; var params = options.params || {}; var webview = null, webviewCache = null, nShow, nWaiting; if($.webviews[id]) { webviewCache = $.webviews[id]; //webview真实存在,才能获取 if(plus.webview.getWebviewById(id)) { webview = webviewCache.webview; } } else if(options.createNew !== true) { webview = plus.webview.getWebviewById(id); } if(webview) { //已缓存 //每次show都需要传递动画参数; //预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置; nShow = webviewCache ? webviewCache.show : defaultShow; nShow = options.show ? $.extend(nShow, options.show) : nShow; nShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() { triggerPreload(webview); trigger(webview, 'pagebeforeshow', false); }); if(webviewCache) { webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')'); } return webview; } else { //新窗口 if(!url) { throw new Error('webview[' + id + '] does not exist'); } //显示waiting var waitingConfig = $.waitingOptions(options.waiting); if(waitingConfig.autoShow) { nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options); } //创建页面 options = $.extend(options, { id: id, url: url }); webview = $.createWindow(options); //显示 nShow = $.showOptions(options.show); if(nShow.autoShow) { var showWebview = function() { //关闭等待框 if(nWaiting) { nWaiting.close(); } //显示页面 webview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras); options.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')'); }; //titleUpdate触发时机早于loaded,更换为titleUpdate后,可以更早的显示webview webview.addEventListener(nShow.event, showWebview, false); //loaded事件发生后,触发预加载和pagebeforeshow事件 webview.addEventListener("loaded", function() { triggerPreload(webview); trigger(webview, 'pagebeforeshow', false); }, false); } } return webview; }; $.openWindowWithTitle = function(options, titleConfig) { options = options || {}; var url = options.url; var id = options.id || url; if(!$.os.plus) { //TODO 先临时这么处理:手机上顶层跳,PC上parent跳 if($.os.ios || $.os.android) { window.top.location.href = url; } else { window.parent.location.href = url; } return; } if(!window.plus) { return; } var params = options.params || {}; var webview = null, webviewCache = null, nShow, nWaiting; if($.webviews[id]) { webviewCache = $.webviews[id]; //webview真实存在,才能获取 if(plus.webview.getWebviewById(id)) { webview = webviewCache.webview; } } else if(options.createNew !== true) { webview = plus.webview.getWebviewById(id); } if(webview) { //已缓存 //每次show都需要传递动画参数; //预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置; nShow = webviewCache ? webviewCache.show : defaultShow; nShow = options.show ? $.extend(nShow, options.show) : nShow; nShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() { triggerPreload(webview); trigger(webview, 'pagebeforeshow', false); }); if(webviewCache) { webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')'); } return webview; } else { //新窗口 if(!url) { throw new Error('webview[' + id + '] does not exist'); } //显示waiting var waitingConfig = $.waitingOptions(options.waiting); if(waitingConfig.autoShow) { nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options); } //创建页面 options = $.extend(options, { id: id, url: url }); webview = $.createWindow(options); if(titleConfig) { //处理原生头 $.extend(true, $.options.titleConfig, titleConfig); var tid = $.options.titleConfig.id ? $.options.titleConfig.id : id + "_title"; var view = new plus.nativeObj.View(tid, { top: 0, height: $.options.titleConfig.height, width: "100%", dock: "top", position: "dock" }); view.drawRect($.options.titleConfig.backgroundColor); //绘制背景色 var _b = parseInt($.options.titleConfig.height) - 1; view.drawRect($.options.titleConfig.bottomBorderColor, { top: _b + "px", left: "0px" }); //绘制底部边线 //绘制文字 if($.options.titleConfig.title.text){ var _title = $.options.titleConfig.title; view.drawText(_title.text,_title.position , _title.styles); } //返回图标绘制 var _back = $.options.titleConfig.back; var backClick = null; //优先字体 //其次是图片 var _backImage = _back.image; if(_backImage.base64Data || _backImage.imgSrc) { //TODO 此处需要处理百分比的情况 backClick = { left:parseInt(_backImage.position.left), right:parseInt(_backImage.position.left) + parseInt(_backImage.position.width) }; var bitmap = new plus.nativeObj.Bitmap(id + "_back"); if(_backImage.base64Data) { //优先base64编码字符串 bitmap.loadBase64Data(_backImage.base64Data); } else { //其次加载图片文件 bitmap.load(_backImage.imgSrc); } view.drawBitmap(bitmap,_backImage.sprite , _backImage.position); } //处理点击事件 view.setTouchEventRect({ top: "0px", left: "0px", width: "100%", height: "100%" }); view.interceptTouchEvent(true); view.addEventListener("click", function(e) { var x = e.clientX; //返回按钮点击 if(backClick&& x > backClick.left && x < backClick.right){ if( _back.click && $.isFunction(_back.click)){ _back.click(); }else{ webview.evalJS("window.mui&&mui.back();"); } } }, false); webview.append(view); } //显示 nShow = $.showOptions(options.show); if(nShow.autoShow) { //titleUpdate触发时机早于loaded,更换为titleUpdate后,可以更早的显示webview webview.addEventListener(nShow.event, function () { //关闭等待框 if(nWaiting) { nWaiting.close(); } //显示页面 webview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras); }, false); } } return webview; }; /** * 根据配置信息创建一个webview * @param {type} options * @param {type} isCreate * @returns {webview} */ $.createWindow = function(options, isCreate) { if(!window.plus) { return; } var id = options.id || options.url; var webview; if(options.preload) { if($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache webview = $.webviews[id].webview; } else { //新增预加载窗口 //判断是否携带createNew参数,默认为false if(options.createNew !== true) { webview = plus.webview.getWebviewById(id); } //之前没有,那就新创建 if(!webview) { webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({ preload: true }, options.extras)); if(options.subpages) { $.each(options.subpages, function(index, subpage) { var subpageId = subpage.id || subpage.url; if(subpageId) { //过滤空对象 var subWebview = plus.webview.getWebviewById(subpageId); if(!subWebview) { //如果该webview不存在,则创建 subWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), $.extend({ preload: true }, subpage.extras)); } webview.append(subWebview); } }); } } } //TODO 理论上,子webview也应该计算到预加载队列中,但这样就麻烦了,要退必须退整体,否则可能出现问题; $.webviews[id] = { webview: webview, //目前仅preload的缓存webview preload: true, show: $.showOptions(options.show), afterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯 }; //索引该预加载窗口 var preloads = $.data.preloads; var index = preloads.indexOf(id); if(~index) { //删除已存在的(变相调整插入位置) preloads.splice(index, 1); } preloads.push(id); if(preloads.length > $.options.preloadLimit) { //先进先出 var first = $.data.preloads.shift(); var webviewCache = $.webviews[first]; if(webviewCache && webviewCache.webview) { //需要将自己打开的所有页面,全部close; //关闭该预加载webview $.closeAll(webviewCache.webview); } //删除缓存 delete $.webviews[first]; } } else { if(isCreate !== false) { //直接创建非预加载窗口 webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras); if(options.subpages) { $.each(options.subpages, function(index, subpage) { var subpageId = subpage.id || subpage.url; var subWebview = plus.webview.getWebviewById(subpageId); if(!subWebview) { subWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), subpage.extras); } webview.append(subWebview); }); } } } return webview; }; /** * 预加载 */ $.preload = function(options) { //调用预加载函数,不管是否传递preload参数,强制变为true if(!options.preload) { options.preload = true; } return $.createWindow(options); }; /** *关闭当前webview打开的所有webview; */ $.closeOpened = function(webview) { var opened = webview.opened(); if(opened) { for(var i = 0, len = opened.length; i < len; i++) { var openedWebview = opened[i]; var open_open = openedWebview.opened(); if(open_open && open_open.length > 0) { //关闭打开的webview $.closeOpened(openedWebview); //关闭自己 openedWebview.close("none"); } else { //如果直接孩子节点,就不用关闭了,因为父关闭的时候,会自动关闭子; if(openedWebview.parent() !== webview) { openedWebview.close('none'); } } } } }; $.closeAll = function(webview, aniShow) { $.closeOpened(webview); if(aniShow) { webview.close(aniShow); } else { webview.close(); } }; /** * 批量创建webview * @param {type} options * @returns {undefined} */ $.createWindows = function(options) { $.each(options, function(index, option) { //初始化预加载窗口(创建)和非预加载窗口(仅配置,不创建) $.createWindow(option, false); }); }; /** * 创建当前页面的子webview * @param {type} options * @returns {webview} */ $.appendWebview = function(options) { if(!window.plus) { return; } var id = options.id || options.url; var webview; if(!$.webviews[id]) { //保证执行一遍 //TODO 这里也有隐患,比如某个webview不是作为subpage创建的,而是作为target webview的话; if(!plus.webview.getWebviewById(id)) { webview = plus.webview.create(options.url, id, options.styles, options.extras); } //之前的实现方案:子窗口loaded之后再append到父窗口中; //问题:部分子窗口loaded事件发生较晚,此时执行父窗口的children方法会返回空,导致父子通讯失败; // 比如父页面执行完preload事件后,需触发子页面的preload事件,此时未append的话,就无法触发; //修改方式:不再监控loaded事件,直接append //by chb@20150521 // webview.addEventListener('loaded', function() { plus.webview.currentWebview().append(webview); // }); $.webviews[id] = options; } return webview; }; //全局webviews $.webviews = {}; //预加载窗口索引 $.data.preloads = []; //$.currentWebview $.plusReady(function() { $.currentWebview = plus.webview.currentWebview(); }); $.addInit({ name: '5+', index: 100, handle: function() { var options = $.options; var subpages = options.subpages || []; if($.os.plus) { $.plusReady(function() { //TODO 这里需要判断一下,最好等子窗口加载完毕后,再调用主窗口的show方法; //或者:在openwindow方法中,监听实现; $.each(subpages, function(index, subpage) { $.appendWebview(subpage); }); //判断是否首页 if(plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) { //首页需要自己激活预加载; //timeout因为子页面loaded之后才append的,防止子页面尚未append、从而导致其preload未触发的问题; setTimeout(function() { triggerPreload(plus.webview.currentWebview()); }, 300); } //设置ios顶部状态栏颜色; if($.os.ios && $.options.statusBarBackground) { plus.navigator.setStatusBarBackground($.options.statusBarBackground); } if($.os.android && parseFloat($.os.version) < 4.4) { //解决Android平台4.4版本以下,resume后,父窗体标题延迟渲染的问题; if(plus.webview.currentWebview().parent() == null) { document.addEventListener("resume", function() { var body = document.body; body.style.display = 'none'; setTimeout(function() { body.style.display = ''; }, 10); }); } } }); } else { //已支持iframe嵌入 // if (subpages.length > 0) { // var err = document.createElement('div'); // err.className = 'mui-error'; // //文字描述 // var span = document.createElement('span'); // span.innerHTML = '在该浏览器下,不支持创建子页面,具体参考'; // err.appendChild(span); // var a = document.createElement('a'); // a.innerHTML = '"mui框架适用场景"'; // a.href = 'http://ask.dcloud.net.cn/article/113'; // err.appendChild(a); // document.body.appendChild(err); // console.log('在该浏览器下,不支持创建子页面'); // } } } }); window.addEventListener('preload', function() { //处理预加载部分 var webviews = $.options.preloadPages || []; $.plusReady(function() { $.each(webviews, function(index, webview) { $.createWindow($.extend(webview, { preload: true })); }); }); }); $.supportStatusbarOffset = function() { return $.os.plus && $.os.ios && parseFloat($.os.version) >= 7; }; $.ready(function() { //标识当前环境支持statusbar if($.supportStatusbarOffset()) { document.body.classList.add('mui-statusbar'); } }); })(mui); /** * mui back * @param {type} $ * @param {type} window * @returns {undefined} */ (function($, window) { /** * register back * @param {type} back * @returns {$.gestures} */ $.addBack = function(back) { return $.addAction('backs', back); }; /** * default */ $.addBack({ name: 'browser', index: 100, handle: function() { if (window.history.length > 1) { window.history.back(); return true; } return false; } }); /** * 后退 */ $.back = function() { if (typeof $.options.beforeback === 'function') { if ($.options.beforeback() === false) { return; } } $.doAction('backs'); }; window.addEventListener('tap', function(e) { var action = $.targets.action; if (action && action.classList.contains('mui-action-back')) { $.back(); $.targets.action = false; } }); window.addEventListener('swiperight', function(e) { var detail = e.detail; if ($.options.swipeBack === true && Math.abs(detail.angle) < 3) { $.back(); } }); })(mui, window); /** * mui back 5+ * @param {type} $ * @param {type} window * @returns {undefined} */ (function($, window) { if ($.os.plus && $.os.android) { $.addBack({ name: 'mui', index: 5, handle: function() { //后续重新设计此处,将back放到各个空间内部实现 //popover if ($.targets._popover && $.targets._popover.classList.contains('mui-active')) { $($.targets._popover).popover('hide'); return true; } //offcanvas var offCanvas = document.querySelector('.mui-off-canvas-wrap.mui-active'); if (offCanvas) { $(offCanvas).offCanvas('close'); return true; } var previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage(); if (previewImage && previewImage.isShown()) { previewImage.close(); return true; } //popup return $.closePopup(); } }); } //首次按下back按键的时间 $.__back__first = null; /** * 5+ back */ $.addBack({ name: '5+', index: 10, handle: function() { if (!window.plus) { return false; } var wobj = plus.webview.currentWebview(); var parent = wobj.parent(); if (parent) { parent.evalJS('mui&&mui.back();'); } else { wobj.canBack(function(e) { //by chb 暂时注释,在碰到类似popover之类的锚点的时候,需多次点击才能返回; if (e.canBack) { //webview history back window.history.back(); } else { //webview close or hide //fixed by fxy 此处不应该用opener判断,因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了,导致不能执行close if (wobj.id === plus.runtime.appid) { //首页 //首页不存在opener的情况下,后退实际上应该是退出应用; //首次按键,提示‘再按一次退出应用’ if (!$.__back__first) { $.__back__first = new Date().getTime(); mui.toast('再按一次退出应用'); setTimeout(function() { $.__back__first = null; }, 2000); } else { if (new Date().getTime() - $.__back__first < 2000) { plus.runtime.quit(); } } } else { //其他页面, if (wobj.preload) { wobj.hide("auto"); } else { //关闭页面时,需要将其打开的所有子页面全部关闭; $.closeAll(wobj); } } } }); } return true; } }); $.menu = function() { var menu = document.querySelector('.mui-action-menu'); if (menu) { $.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话,找不到当前targets的问题 $.trigger(menu, 'tap'); } else { //执行父窗口的menu if (window.plus) { var wobj = $.currentWebview; var parent = wobj.parent(); if (parent) { //又得evalJS parent.evalJS('mui&&mui.menu();'); } } } }; var __back = function() { $.back(); }; var __menu = function() { $.menu(); }; //默认监听 $.plusReady(function() { if ($.options.keyEventBind.backbutton) { plus.key.addEventListener('backbutton', __back, false); } if ($.options.keyEventBind.menubutton) { plus.key.addEventListener('menubutton', __menu, false); } }); //处理按键监听事件 $.addInit({ name: 'keyEventBind', index: 1000, handle: function() { $.plusReady(function() { //如果不为true,则移除默认监听 if (!$.options.keyEventBind.backbutton) { plus.key.removeEventListener('backbutton', __back); } if (!$.options.keyEventBind.menubutton) { plus.key.removeEventListener('menubutton', __menu); } }); } }); })(mui, window); /** * mui.init pulldownRefresh * @param {type} $ * @returns {undefined} */ (function($) { $.addInit({ name: 'pullrefresh', index: 1000, handle: function() { var options = $.options; var pullRefreshOptions = options.pullRefresh || {}; var hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback'); var hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback'); if(hasPulldown || hasPullup) { var container = pullRefreshOptions.container; if(container) { var $container = $(container); if($container.length === 1) { if($.os.plus) { //5+环境 if(hasPulldown && pullRefreshOptions.down.style == "circle") { //原生转圈 $.plusReady(function() { //这里改写$.fn.pullRefresh $.fn.pullRefresh = $.fn.pullRefresh_native; $container.pullRefresh(pullRefreshOptions); }); } else if($.os.android) { //非原生转圈,但是Android环境 $.plusReady(function() { //这里改写$.fn.pullRefresh $.fn.pullRefresh = $.fn.pullRefresh_native var webview = plus.webview.currentWebview(); if(window.__NWin_Enable__ === false) { //不支持多webview $container.pullRefresh(pullRefreshOptions); } else { if(hasPullup) { //当前页面初始化pullup var upOptions = {}; upOptions.up = pullRefreshOptions.up; upOptions.webviewId = webview.id || webview.getURL(); $container.pullRefresh(upOptions); } if(hasPulldown) { var parent = webview.parent(); var id = webview.id || webview.getURL(); if(parent) { if(!hasPullup) { //如果没有上拉加载,需要手动初始化一个默认的pullRefresh,以便当前页面容器可以调用endPulldownToRefresh等方法 $container.pullRefresh({ webviewId: id }); } var downOptions = { webviewId: id//子页面id }; downOptions.down = $.extend({}, pullRefreshOptions.down); downOptions.down.callback = '_CALLBACK'; //改写父页面的$.fn.pullRefresh parent.evalJS("mui.fn.pullRefresh=mui.fn.pullRefresh_native"); //父页面初始化pulldown parent.evalJS("mui&&mui(document.querySelector('.mui-content')).pullRefresh('" + JSON.stringify(downOptions) + "')"); } } } }); } else { //非原生转圈,iOS环境 $container.pullRefresh(pullRefreshOptions); } } else { $container.pullRefresh(pullRefreshOptions); } } } } } }); })(mui); /** * mui ajax * @param {type} $ * @returns {undefined} */ (function($, window, undefined) { var jsonType = 'application/json'; var htmlType = 'text/html'; var rscript = /)<[^<]*)*<\/script>/gi; var scriptTypeRE = /^(?:text|application)\/javascript/i; var xmlTypeRE = /^(?:text|application)\/xml/i; var blankRE = /^\s*$/; $.ajaxSettings = { type: 'GET', beforeSend: $.noop, success: $.noop, error: $.noop, complete: $.noop, context: null, xhr: function(protocol) { return new window.XMLHttpRequest(); }, accepts: { script: 'text/javascript, application/javascript, application/x-javascript', json: jsonType, xml: 'application/xml, text/xml', html: htmlType, text: 'text/plain' }, timeout: 0, processData: true, cache: true }; var ajaxBeforeSend = function(xhr, settings) { var context = settings.context if(settings.beforeSend.call(context, xhr, settings) === false) { return false; } }; var ajaxSuccess = function(data, xhr, settings) { settings.success.call(settings.context, data, 'success', xhr); ajaxComplete('success', xhr, settings); }; // type: "timeout", "error", "abort", "parsererror" var ajaxError = function(error, type, xhr, settings) { settings.error.call(settings.context, xhr, type, error); ajaxComplete(type, xhr, settings); }; // status: "success", "notmodified", "error", "timeout", "abort", "parsererror" var ajaxComplete = function(status, xhr, settings) { settings.complete.call(settings.context, xhr, status); }; var serialize = function(params, obj, traditional, scope) { var type, array = $.isArray(obj), hash = $.isPlainObject(obj); $.each(obj, function(key, value) { type = $.type(value); if(scope) { key = traditional ? scope : scope + '[' + (hash || type === 'object' || type === 'array' ? key : '') + ']'; } // handle data in serializeArray() format if(!scope && array) { params.add(value.name, value.value); } // recurse into nested objects else if(type === "array" || (!traditional && type === "object")) { serialize(params, value, traditional, key); } else { params.add(key, value); } }); }; var serializeData = function(options) { if(options.processData && options.data && typeof options.data !== "string") { var contentType = options.contentType; if(!contentType && options.headers) { contentType = options.headers['Content-Type']; } if(contentType && ~contentType.indexOf(jsonType)) { //application/json options.data = JSON.stringify(options.data); } else { options.data = $.param(options.data, options.traditional); } } if(options.data && (!options.type || options.type.toUpperCase() === 'GET')) { options.url = appendQuery(options.url, options.data); options.data = undefined; } }; var appendQuery = function(url, query) { if(query === '') { return url; } return(url + '&' + query).replace(/[&?]{1,2}/, '?'); }; var mimeToDataType = function(mime) { if(mime) { mime = mime.split(';', 2)[0]; } return mime && (mime === htmlType ? 'html' : mime === jsonType ? 'json' : scriptTypeRE.test(mime) ? 'script' : xmlTypeRE.test(mime) && 'xml') || 'text'; }; var parseArguments = function(url, data, success, dataType) { if($.isFunction(data)) { dataType = success, success = data, data = undefined; } if(!$.isFunction(success)) { dataType = success, success = undefined; } return { url: url, data: data, success: success, dataType: dataType }; }; $.ajax = function(url, options) { if(typeof url === "object") { options = url; url = undefined; } var settings = options || {}; settings.url = url || settings.url; for(var key in $.ajaxSettings) { if(settings[key] === undefined) { settings[key] = $.ajaxSettings[key]; } } serializeData(settings); var dataType = settings.dataType; if(settings.cache === false || ((!options || options.cache !== true) && ('script' === dataType))) { settings.url = appendQuery(settings.url, '_=' + $.now()); } var mime = settings.accepts[dataType && dataType.toLowerCase()]; var headers = {}; var setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value]; }; var protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol; var xhr = settings.xhr(settings); if(location.protocol === 'file:' && $.os.ios && window.webkit && window.webkit.messageHandlers && !(xhr instanceof plus.net.XMLHttpRequest)){ console.error("当前运行环境为WKWebview,需在plusReady事件触发后再调用mui.ajax,否则可能会执行失败或报Script error的错误") } var nativeSetHeader = xhr.setRequestHeader; var abortTimeout; setHeader('X-Requested-With', 'XMLHttpRequest'); setHeader('Accept', mime || '*/*'); if(!!(mime = settings.mimeType || mime)) { if(mime.indexOf(',') > -1) { mime = mime.split(',', 2)[0]; } xhr.overrideMimeType && xhr.overrideMimeType(mime); } if(settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() !== 'GET')) { setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded'); } if(settings.headers) { for(var name in settings.headers) setHeader(name, settings.headers[name]); } xhr.setRequestHeader = setHeader; xhr.onreadystatechange = function() { if(xhr.readyState === 4) { xhr.onreadystatechange = $.noop; clearTimeout(abortTimeout); var result, error = false; var isLocal = protocol === 'file:'; if((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || (xhr.status === 0 && isLocal && xhr.responseText)) { dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type')); result = xhr.responseText; try { // http://perfectionkills.com/global-eval-what-are-the-options/ if(dataType === 'script') { (1, eval)(result); } else if(dataType === 'xml') { result = xhr.responseXML; } else if(dataType === 'json') { result = blankRE.test(result) ? null : $.parseJSON(result); } } catch(e) { error = e; } if(error) { ajaxError(error, 'parsererror', xhr, settings); } else { ajaxSuccess(result, xhr, settings); } } else { var status = xhr.status ? 'error' : 'abort'; var statusText = xhr.statusText || null; if(isLocal) { status = 'error'; statusText = '404'; } ajaxError(statusText, status, xhr, settings); } } }; if(ajaxBeforeSend(xhr, settings) === false) { xhr.abort(); ajaxError(null, 'abort', xhr, settings); return xhr; } if(settings.xhrFields) { for(var name in settings.xhrFields) { xhr[name] = settings.xhrFields[name]; } } var async = 'async' in settings ? settings.async : true; xhr.open(settings.type.toUpperCase(), settings.url, async, settings.username, settings.password); for(var name in headers) { if(headers.hasOwnProperty(name)) { nativeSetHeader.apply(xhr, headers[name]); } } if(settings.timeout > 0) { abortTimeout = setTimeout(function() { xhr.onreadystatechange = $.noop; xhr.abort(); ajaxError(null, 'timeout', xhr, settings); }, settings.timeout); } xhr.send(settings.data ? settings.data : null); return xhr; }; $.param = function(obj, traditional) { var params = []; params.add = function(k, v) { this.push(encodeURIComponent(k) + '=' + encodeURIComponent(v)); }; serialize(params, obj, traditional); return params.join('&').replace(/%20/g, '+'); }; $.get = function( /* url, data, success, dataType */ ) { return $.ajax(parseArguments.apply(null, arguments)); }; $.post = function( /* url, data, success, dataType */ ) { var options = parseArguments.apply(null, arguments); options.type = 'POST'; return $.ajax(options); }; $.getJSON = function( /* url, data, success */ ) { var options = parseArguments.apply(null, arguments); options.dataType = 'json'; return $.ajax(options); }; $.fn.load = function(url, data, success) { if(!this.length) return this; var self = this, parts = url.split(/\s/), selector, options = parseArguments(url, data, success), callback = options.success; if(parts.length > 1) options.url = parts[0], selector = parts[1]; options.success = function(response) { if(selector) { var div = document.createElement('div'); div.innerHTML = response.replace(rscript, ""); var selectorDiv = document.createElement('div'); var childs = div.querySelectorAll(selector); if(childs && childs.length > 0) { for(var i = 0, len = childs.length; i < len; i++) { selectorDiv.appendChild(childs[i]); } } self[0].innerHTML = selectorDiv.innerHTML; } else { self[0].innerHTML = response; } callback && callback.apply(self, arguments); }; $.ajax(options); return this; }; })(mui, window); /** * 5+ ajax */ (function($) { var originAnchor = document.createElement('a'); originAnchor.href = window.location.href; $.plusReady(function() { $.ajaxSettings = $.extend($.ajaxSettings, { xhr: function(settings) { if (settings.crossDomain) { //强制使用plus跨域 return new plus.net.XMLHttpRequest(); } //仅在webview的url为远程文件,且ajax请求的资源不同源下使用plus.net.XMLHttpRequest if (originAnchor.protocol !== 'file:') { var urlAnchor = document.createElement('a'); urlAnchor.href = settings.url; urlAnchor.href = urlAnchor.href; settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host); if (settings.crossDomain) { return new plus.net.XMLHttpRequest(); } } if ($.os.ios && window.webkit && window.webkit.messageHandlers) { //wkwebview下同样使用5+ xhr return new plus.net.XMLHttpRequest(); } return new window.XMLHttpRequest(); } }); }); })(mui); /** * mui layout(offset[,position,width,height...]) * @param {type} $ * @param {type} window * @param {type} undefined * @returns {undefined} */ (function($, window, undefined) { $.offset = function(element) { var box = { top : 0, left : 0 }; if ( typeof element.getBoundingClientRect !== undefined) { box = element.getBoundingClientRect(); } return { top : box.top + window.pageYOffset - element.clientTop, left : box.left + window.pageXOffset - element.clientLeft }; }; })(mui, window); /** * mui animation */ (function($, window) { /** * scrollTo */ $.scrollTo = function(scrollTop, duration, callback) { duration = duration || 1000; var scroll = function(duration) { if (duration <= 0) { window.scrollTo(0, scrollTop); callback && callback(); return; } var distaince = scrollTop - window.scrollY; setTimeout(function() { window.scrollTo(0, window.scrollY + distaince / duration * 10); scroll(duration - 10); }, 16.7); }; scroll(duration); }; $.animationFrame = function(cb) { var args, isQueued, context; return function() { args = arguments; context = this; if (!isQueued) { isQueued = true; requestAnimationFrame(function() { cb.apply(context, args); isQueued = false; }); } }; }; })(mui, window); (function($) { var initializing = false, fnTest = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/; var Class = function() {}; Class.extend = function(prop) { var _super = this.prototype; initializing = true; var prototype = new this(); initializing = false; for (var name in prop) { prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn) { return function() { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; } function Class() { if (!initializing && this.init) this.init.apply(this, arguments); } Class.prototype = prototype; Class.prototype.constructor = Class; Class.extend = arguments.callee; return Class; }; $.Class = Class; })(mui); (function($, document, undefined) { var CLASS_PULL_TOP_POCKET = 'mui-pull-top-pocket'; var CLASS_PULL_BOTTOM_POCKET = 'mui-pull-bottom-pocket'; var CLASS_PULL = 'mui-pull'; var CLASS_PULL_LOADING = 'mui-pull-loading'; var CLASS_PULL_CAPTION = 'mui-pull-caption'; var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down'; var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh'; var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore'; var CLASS_ICON = 'mui-icon'; var CLASS_SPINNER = 'mui-spinner'; var CLASS_ICON_PULLDOWN = 'mui-icon-pulldown'; var CLASS_BLOCK = 'mui-block'; var CLASS_HIDDEN = 'mui-hidden'; var CLASS_VISIBILITY = 'mui-visibility'; var CLASS_LOADING_UP = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN; var CLASS_LOADING_DOWN = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN; var CLASS_LOADING = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_SPINNER; var pocketHtml = ['
', '
', '
{contentrefresh}
', '
'].join(''); var PullRefresh = { init: function(element, options) { this._super(element, $.extend(true, { scrollY: true, scrollX: false, indicators: true, deceleration: 0.003, down: { height: 50, contentinit: '下拉可以刷新', contentdown: '下拉可以刷新', contentover: '释放立即刷新', contentrefresh: '正在刷新...' }, up: { height: 50, auto: false, contentinit: '上拉显示更多', contentdown: '上拉显示更多', contentrefresh: '正在加载...', contentnomore: '没有更多数据了', duration: 300 } }, options)); }, _init: function() { this._super(); this._initPocket(); }, _initPulldownRefresh: function() { this.pulldown = true; if (this.topPocket) { this.pullPocket = this.topPocket; this.pullPocket.classList.add(CLASS_BLOCK); this.pullPocket.classList.add(CLASS_VISIBILITY); this.pullCaption = this.topCaption; this.pullLoading = this.topLoading; } }, _initPullupRefresh: function() { this.pulldown = false; if (this.bottomPocket) { this.pullPocket = this.bottomPocket; this.pullPocket.classList.add(CLASS_BLOCK); this.pullPocket.classList.add(CLASS_VISIBILITY); this.pullCaption = this.bottomCaption; this.pullLoading = this.bottomLoading; } }, _initPocket: function() { var options = this.options; if (options.down && options.down.hasOwnProperty('callback')) { this.topPocket = this.scroller.querySelector('.' + CLASS_PULL_TOP_POCKET); if (!this.topPocket) { this.topPocket = this._createPocket(CLASS_PULL_TOP_POCKET, options.down, CLASS_LOADING_DOWN); this.wrapper.insertBefore(this.topPocket, this.wrapper.firstChild); } this.topLoading = this.topPocket.querySelector('.' + CLASS_PULL_LOADING); this.topCaption = this.topPocket.querySelector('.' + CLASS_PULL_CAPTION); } if (options.up && options.up.hasOwnProperty('callback')) { this.bottomPocket = this.scroller.querySelector('.' + CLASS_PULL_BOTTOM_POCKET); if (!this.bottomPocket) { this.bottomPocket = this._createPocket(CLASS_PULL_BOTTOM_POCKET, options.up, CLASS_LOADING); this.scroller.appendChild(this.bottomPocket); } this.bottomLoading = this.bottomPocket.querySelector('.' + CLASS_PULL_LOADING); this.bottomCaption = this.bottomPocket.querySelector('.' + CLASS_PULL_CAPTION); //TODO only for h5 this.wrapper.addEventListener('scrollbottom', this); } }, _createPocket: function(clazz, options, iconClass) { var pocket = document.createElement('div'); pocket.className = clazz; pocket.innerHTML = pocketHtml.replace('{contentrefresh}', options.contentinit).replace('{icon}', iconClass); return pocket; }, _resetPullDownLoading: function() { var loading = this.pullLoading; if (loading) { this.pullCaption.innerHTML = this.options.down.contentdown; loading.style.webkitTransition = ""; loading.style.webkitTransform = ""; loading.style.webkitAnimation = ""; loading.className = CLASS_LOADING_DOWN; } }, _setCaptionClass: function(isPulldown, caption, title) { if (!isPulldown) { switch (title) { case this.options.up.contentdown: caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN; break; case this.options.up.contentrefresh: caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH break; case this.options.up.contentnomore: caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE; break; } } }, _setCaption: function(title, reset) { if (this.loading) { return; } var options = this.options; var pocket = this.pullPocket; var caption = this.pullCaption; var loading = this.pullLoading; var isPulldown = this.pulldown; var self = this; if (pocket) { if (reset) { setTimeout(function() { caption.innerHTML = self.lastTitle = title; if (isPulldown) { loading.className = CLASS_LOADING_DOWN; } else { self._setCaptionClass(false, caption, title); loading.className = CLASS_LOADING; } loading.style.webkitAnimation = ""; loading.style.webkitTransition = ""; loading.style.webkitTransform = ""; }, 100); } else { if (title !== this.lastTitle) { caption.innerHTML = title; if (isPulldown) { if (title === options.down.contentrefresh) { loading.className = CLASS_LOADING; loading.style.webkitAnimation = "spinner-spin 1s step-end infinite"; } else if (title === options.down.contentover) { loading.className = CLASS_LOADING_UP; loading.style.webkitTransition = "-webkit-transform 0.3s ease-in"; loading.style.webkitTransform = "rotate(180deg)"; } else if (title === options.down.contentdown) { loading.className = CLASS_LOADING_DOWN; loading.style.webkitTransition = "-webkit-transform 0.3s ease-in"; loading.style.webkitTransform = "rotate(0deg)"; } } else { if (title === options.up.contentrefresh) { loading.className = CLASS_LOADING + ' ' + CLASS_VISIBILITY; } else { loading.className = CLASS_LOADING + ' ' + CLASS_HIDDEN; } self._setCaptionClass(false, caption, title); } this.lastTitle = title; } } } } }; $.PullRefresh = PullRefresh; })(mui, document); (function($, window, document, undefined) { var CLASS_SCROLL = 'mui-scroll'; var CLASS_SCROLLBAR = 'mui-scrollbar'; var CLASS_INDICATOR = 'mui-scrollbar-indicator'; var CLASS_SCROLLBAR_VERTICAL = CLASS_SCROLLBAR + '-vertical'; var CLASS_SCROLLBAR_HORIZONTAL = CLASS_SCROLLBAR + '-horizontal'; var CLASS_ACTIVE = 'mui-active'; var ease = { quadratic: { style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)', fn: function(k) { return k * (2 - k); } }, circular: { style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', fn: function(k) { return Math.sqrt(1 - (--k * k)); } }, outCirc: { style: 'cubic-bezier(0.075, 0.82, 0.165, 1)' }, outCubic: { style: 'cubic-bezier(0.165, 0.84, 0.44, 1)' } } var Scroll = $.Class.extend({ init: function(element, options) { this.wrapper = this.element = element; this.scroller = this.wrapper.children[0]; this.scrollerStyle = this.scroller && this.scroller.style; this.stopped = false; this.options = $.extend(true, { scrollY: true, //是否竖向滚动 scrollX: false, //是否横向滚动 startX: 0, //初始化时滚动至x startY: 0, //初始化时滚动至y indicators: true, //是否显示滚动条 stopPropagation: false, hardwareAccelerated: true, fixedBadAndorid: false, preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/ }, momentum: true, snapX: 0.5, //横向切换距离(以当前容器宽度为基准) snap: false, //图片轮播,拖拽式选项卡 bounce: true, //是否启用回弹 bounceTime: 500, //回弹动画时间 bounceEasing: ease.outCirc, //回弹动画曲线 scrollTime: 500, scrollEasing: ease.outCubic, //轮播动画曲线 directionLockThreshold: 5, parallaxElement: false, //视差元素 parallaxRatio: 0.5 }, options); this.x = 0; this.y = 0; this.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : ''; this._init(); if (this.scroller) { this.refresh(); // if (this.options.startX !== 0 || this.options.startY !== 0) { //需要判断吗?后续根据实际情况再看看 this.scrollTo(this.options.startX, this.options.startY); // } } }, _init: function() { this._initParallax(); this._initIndicators(); this._initEvent(); }, _initParallax: function() { if (this.options.parallaxElement) { this.parallaxElement = document.querySelector(this.options.parallaxElement); this.parallaxStyle = this.parallaxElement.style; this.parallaxHeight = this.parallaxElement.offsetHeight; this.parallaxImgStyle = this.parallaxElement.querySelector('img').style; } }, _initIndicators: function() { var self = this; self.indicators = []; if (!this.options.indicators) { return; } var indicators = [], indicator; // Vertical scrollbar if (self.options.scrollY) { indicator = { el: this._createScrollBar(CLASS_SCROLLBAR_VERTICAL), listenX: false }; this.wrapper.appendChild(indicator.el); indicators.push(indicator); } // Horizontal scrollbar if (this.options.scrollX) { indicator = { el: this._createScrollBar(CLASS_SCROLLBAR_HORIZONTAL), listenY: false }; this.wrapper.appendChild(indicator.el); indicators.push(indicator); } for (var i = indicators.length; i--;) { this.indicators.push(new Indicator(this, indicators[i])); } }, _initSnap: function() { this.currentPage = {}; this.pages = []; var snaps = this.snaps; var length = snaps.length; var m = 0; var n = -1; var x = 0; var leftX = 0; var rightX = 0; var snapX = 0; for (var i = 0; i < length; i++) { var snap = snaps[i]; var offsetLeft = snap.offsetLeft; var offsetWidth = snap.offsetWidth; if (i === 0 || offsetLeft <= snaps[i - 1].offsetLeft) { m = 0; n++; } if (!this.pages[m]) { this.pages[m] = []; } x = this._getSnapX(offsetLeft); snapX = Math.round((offsetWidth) * this.options.snapX); leftX = x - snapX; rightX = x - offsetWidth + snapX; this.pages[m][n] = { x: x, leftX: leftX, rightX: rightX, pageX: m, element: snap } if (snap.classList.contains(CLASS_ACTIVE)) { this.currentPage = this.pages[m][0]; } if (x >= this.maxScrollX) { m++; } } this.options.startX = this.currentPage.x || 0; }, _getSnapX: function(offsetLeft) { return Math.max(Math.min(0, -offsetLeft + (this.wrapperWidth / 2)), this.maxScrollX); }, _gotoPage: function(index) { this.currentPage = this.pages[Math.min(index, this.pages.length - 1)][0]; for (var i = 0, len = this.snaps.length; i < len; i++) { if (i === index) { this.snaps[i].classList.add(CLASS_ACTIVE); } else { this.snaps[i].classList.remove(CLASS_ACTIVE); } } this.scrollTo(this.currentPage.x, 0, this.options.scrollTime); }, _nearestSnap: function(x) { if (!this.pages.length) { return { x: 0, pageX: 0 }; } var i = 0; var length = this.pages.length; if (x > 0) { x = 0; } else if (x < this.maxScrollX) { x = this.maxScrollX; } for (; i < length; i++) { var nearestX = this.direction === 'left' ? this.pages[i][0].leftX : this.pages[i][0].rightX; if (x >= nearestX) { return this.pages[i][0]; } } return { x: 0, pageX: 0 }; }, _initEvent: function(detach) { var action = detach ? 'removeEventListener' : 'addEventListener'; window[action]('orientationchange', this); window[action]('resize', this); this.scroller[action]('webkitTransitionEnd', this); this.wrapper[action]($.EVENT_START, this); this.wrapper[action]($.EVENT_CANCEL, this); this.wrapper[action]($.EVENT_END, this); this.wrapper[action]('drag', this); this.wrapper[action]('dragend', this); this.wrapper[action]('flick', this); this.wrapper[action]('scrollend', this); if (this.options.scrollX) { this.wrapper[action]('swiperight', this); } var segmentedControl = this.wrapper.querySelector('.mui-segmented-control'); if (segmentedControl) { //靠,这个bug排查了一下午,阻止hash跳转,一旦hash跳转会导致可拖拽选项卡的tab不见 mui(segmentedControl)[detach ? 'off' : 'on']('click', 'a', $.preventDefault); } this.wrapper[action]('scrollstart', this); this.wrapper[action]('refresh', this); }, _handleIndicatorScrollend: function() { this.indicators.map(function(indicator) { indicator.fade(); }); }, _handleIndicatorScrollstart: function() { this.indicators.map(function(indicator) { indicator.fade(1); }); }, _handleIndicatorRefresh: function() { this.indicators.map(function(indicator) { indicator.refresh(); }); }, handleEvent: function(e) { if (this.stopped) { this.resetPosition(); return; } switch (e.type) { case $.EVENT_START: this._start(e); break; case 'drag': this.options.stopPropagation && e.stopPropagation(); this._drag(e); break; case 'dragend': case 'flick': this.options.stopPropagation && e.stopPropagation(); this._flick(e); break; case $.EVENT_CANCEL: case $.EVENT_END: this._end(e); break; case 'webkitTransitionEnd': this.transitionTimer && this.transitionTimer.cancel(); this._transitionEnd(e); break; case 'scrollstart': this._handleIndicatorScrollstart(e); break; case 'scrollend': this._handleIndicatorScrollend(e); this._scrollend(e); e.stopPropagation(); break; case 'orientationchange': case 'resize': this._resize(); break; case 'swiperight': e.stopPropagation(); break; case 'refresh': this._handleIndicatorRefresh(e); break; } }, _start: function(e) { this.moved = this.needReset = false; this._transitionTime(); if (this.isInTransition) { this.needReset = true; this.isInTransition = false; var pos = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform')); this.setTranslate(Math.round(pos.x), Math.round(pos.y)); // this.resetPosition(); //reset $.trigger(this.scroller, 'scrollend', this); // e.stopPropagation(); e.preventDefault(); } this.reLayout(); $.trigger(this.scroller, 'beforescrollstart', this); }, _getDirectionByAngle: function(angle) { if (angle < -80 && angle > -100) { return 'up'; } else if (angle >= 80 && angle < 100) { return 'down'; } else if (angle >= 170 || angle <= -170) { return 'left'; } else if (angle >= -35 && angle <= 10) { return 'right'; } return null; }, _drag: function(e) { // if (this.needReset) { // e.stopPropagation(); //disable parent drag(nested scroller) // return; // } var detail = e.detail; if (this.options.scrollY || detail.direction === 'up' || detail.direction === 'down') { //如果是竖向滚动或手势方向是上或下 //ios8 hack if ($.os.ios && parseFloat($.os.version) >= 8) { //多webview时,离开当前webview会导致后续touch事件不触发 var clientY = detail.gesture.touches[0].clientY; //下拉刷新 or 上拉加载 if ((clientY + 10) > window.innerHeight || clientY < 10) { this.resetPosition(this.options.bounceTime); return; } } } var isPreventDefault = isReturn = false; var direction = this._getDirectionByAngle(detail.angle); if (detail.direction === 'left' || detail.direction === 'right') { if (this.options.scrollX) { isPreventDefault = true; if (!this.moved) { //识别角度(该角度导致轮播不灵敏) // if (direction !== 'left' && direction !== 'right') { // isReturn = true; // } else { $.gestures.session.lockDirection = true; //锁定方向 $.gestures.session.startDirection = detail.direction; // } } } else if (this.options.scrollY && !this.moved) { isReturn = true; } } else if (detail.direction === 'up' || detail.direction === 'down') { if (this.options.scrollY) { isPreventDefault = true; // if (!this.moved) { //识别角度,竖向滚动似乎没必要进行小角度验证 // if (direction !== 'up' && direction !== 'down') { // isReturn = true; // } // } if (!this.moved) { $.gestures.session.lockDirection = true; //锁定方向 $.gestures.session.startDirection = detail.direction; } } else if (this.options.scrollX && !this.moved) { isReturn = true; } } else { isReturn = true; } if (this.moved || isPreventDefault) { e.stopPropagation(); //阻止冒泡(scroll类嵌套) detail.gesture && detail.gesture.preventDefault(); } if (isReturn) { //禁止非法方向滚动 return; } if (!this.moved) { $.trigger(this.scroller, 'scrollstart', this); } else { e.stopPropagation(); //move期间阻止冒泡(scroll嵌套) } var deltaX = 0; var deltaY = 0; if (!this.moved) { //start deltaX = detail.deltaX; deltaY = detail.deltaY; } else { //move deltaX = detail.deltaX - $.gestures.session.prevTouch.deltaX; deltaY = detail.deltaY - $.gestures.session.prevTouch.deltaY; } var absDeltaX = Math.abs(detail.deltaX); var absDeltaY = Math.abs(detail.deltaY); if (absDeltaX > absDeltaY + this.options.directionLockThreshold) { deltaY = 0; } else if (absDeltaY >= absDeltaX + this.options.directionLockThreshold) { deltaX = 0; } deltaX = this.hasHorizontalScroll ? deltaX : 0; deltaY = this.hasVerticalScroll ? deltaY : 0; var newX = this.x + deltaX; var newY = this.y + deltaY; // Slow down if outside of the boundaries if (newX > 0 || newX < this.maxScrollX) { newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX; } if (newY > 0 || newY < this.maxScrollY) { newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY; } if (!this.requestAnimationFrame) { this._updateTranslate(); } this.direction = detail.deltaX > 0 ? 'right' : 'left'; this.moved = true; this.x = newX; this.y = newY; $.trigger(this.scroller, 'scroll', this); }, _flick: function(e) { // if (!this.moved || this.needReset) { // return; // } if (!this.moved) { return; } e.stopPropagation(); var detail = e.detail; this._clearRequestAnimationFrame(); if (e.type === 'dragend' && detail.flick) { //dragend return; } var newX = Math.round(this.x); var newY = Math.round(this.y); this.isInTransition = false; // reset if we are outside of the boundaries if (this.resetPosition(this.options.bounceTime)) { return; } this.scrollTo(newX, newY); // ensures that the last position is rounded if (e.type === 'dragend') { //dragend $.trigger(this.scroller, 'scrollend', this); return; } var time = 0; var easing = ''; // start momentum animation if needed if (this.options.momentum && detail.flickTime < 300) { momentumX = this.hasHorizontalScroll ? this._momentum(this.x, detail.flickDistanceX, detail.flickTime, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 }; momentumY = this.hasVerticalScroll ? this._momentum(this.y, detail.flickDistanceY, detail.flickTime, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 }; newX = momentumX.destination; newY = momentumY.destination; time = Math.max(momentumX.duration, momentumY.duration); this.isInTransition = true; } if (newX != this.x || newY != this.y) { if (newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY) { easing = ease.quadratic; } this.scrollTo(newX, newY, time, easing); return; } $.trigger(this.scroller, 'scrollend', this); // e.stopPropagation(); }, _end: function(e) { this.needReset = false; if ((!this.moved && this.needReset) || e.type === $.EVENT_CANCEL) { this.resetPosition(); } }, _transitionEnd: function(e) { if (e.target != this.scroller || !this.isInTransition) { return; } this._transitionTime(); if (!this.resetPosition(this.options.bounceTime)) { this.isInTransition = false; $.trigger(this.scroller, 'scrollend', this); } }, _scrollend: function(e) { if ((this.y === 0 && this.maxScrollY === 0) || (Math.abs(this.y) > 0 && this.y <= this.maxScrollY)) { $.trigger(this.scroller, 'scrollbottom', this); } }, _resize: function() { var that = this; clearTimeout(that.resizeTimeout); that.resizeTimeout = setTimeout(function() { that.refresh(); }, that.options.resizePolling); }, _transitionTime: function(time) { time = time || 0; this.scrollerStyle['webkitTransitionDuration'] = time + 'ms'; if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果 this.parallaxStyle['webkitTransitionDuration'] = time + 'ms'; } if (this.options.fixedBadAndorid && !time && $.os.isBadAndroid) { this.scrollerStyle['webkitTransitionDuration'] = '0.001s'; if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果 this.parallaxStyle['webkitTransitionDuration'] = '0.001s'; } } if (this.indicators) { for (var i = this.indicators.length; i--;) { this.indicators[i].transitionTime(time); } } if (time) { //自定义timer,保证webkitTransitionEnd始终触发 this.transitionTimer && this.transitionTimer.cancel(); this.transitionTimer = $.later(function() { $.trigger(this.scroller, 'webkitTransitionEnd'); }, time + 100, this); } }, _transitionTimingFunction: function(easing) { this.scrollerStyle['webkitTransitionTimingFunction'] = easing; if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果 this.parallaxStyle['webkitTransitionDuration'] = easing; } if (this.indicators) { for (var i = this.indicators.length; i--;) { this.indicators[i].transitionTimingFunction(easing); } } }, _translate: function(x, y) { this.x = x; this.y = y; }, _clearRequestAnimationFrame: function() { if (this.requestAnimationFrame) { cancelAnimationFrame(this.requestAnimationFrame); this.requestAnimationFrame = null; } }, _updateTranslate: function() { var self = this; if (self.x !== self.lastX || self.y !== self.lastY) { self.setTranslate(self.x, self.y); } self.requestAnimationFrame = requestAnimationFrame(function() { self._updateTranslate(); }); }, _createScrollBar: function(clazz) { var scrollbar = document.createElement('div'); var indicator = document.createElement('div'); scrollbar.className = CLASS_SCROLLBAR + ' ' + clazz; indicator.className = CLASS_INDICATOR; scrollbar.appendChild(indicator); if (clazz === CLASS_SCROLLBAR_VERTICAL) { this.scrollbarY = scrollbar; this.scrollbarIndicatorY = indicator; } else if (clazz === CLASS_SCROLLBAR_HORIZONTAL) { this.scrollbarX = scrollbar; this.scrollbarIndicatorX = indicator; } this.wrapper.appendChild(scrollbar); return scrollbar; }, _preventDefaultException: function(el, exceptions) { for (var i in exceptions) { if (exceptions[i].test(el[i])) { return true; } } return false; }, _reLayout: function() { if (!this.hasHorizontalScroll) { this.maxScrollX = 0; this.scrollerWidth = this.wrapperWidth; } if (!this.hasVerticalScroll) { this.maxScrollY = 0; this.scrollerHeight = this.wrapperHeight; } this.indicators.map(function(indicator) { indicator.refresh(); }); //以防slider类嵌套使用 if (this.options.snap && typeof this.options.snap === 'string') { var items = this.scroller.querySelectorAll(this.options.snap); this.itemLength = 0; this.snaps = []; for (var i = 0, len = items.length; i < len; i++) { var item = items[i]; if (item.parentNode === this.scroller) { this.itemLength++; this.snaps.push(item); } } this._initSnap(); //需要每次都_initSnap么。其实init的时候执行一次,后续resize的时候执行一次就行了吧.先这么做吧,如果影响性能,再调整 } }, _momentum: function(current, distance, time, lowerMargin, wrapperSize, deceleration) { var speed = parseFloat(Math.abs(distance) / time), destination, duration; deceleration = deceleration === undefined ? 0.0006 : deceleration; destination = current + (speed * speed) / (2 * deceleration) * (distance < 0 ? -1 : 1); duration = speed / deceleration; if (destination < lowerMargin) { destination = wrapperSize ? lowerMargin - (wrapperSize / 2.5 * (speed / 8)) : lowerMargin; distance = Math.abs(destination - current); duration = distance / speed; } else if (destination > 0) { destination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0; distance = Math.abs(current) + destination; duration = distance / speed; } return { destination: Math.round(destination), duration: duration }; }, _getTranslateStr: function(x, y) { if (this.options.hardwareAccelerated) { return 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ; } return 'translate(' + x + 'px,' + y + 'px) '; }, //API setStopped: function(stopped) { // this.stopped = !!stopped; // fixed ios双webview模式下拉刷新 if(stopped) { this.disablePullupToRefresh(); this.disablePulldownToRefresh(); } else { this.enablePullupToRefresh(); this.enablePulldownToRefresh(); } }, setTranslate: function(x, y) { this.x = x; this.y = y; this.scrollerStyle['webkitTransform'] = this._getTranslateStr(x, y); if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果 var parallaxY = y * this.options.parallaxRatio; var scale = 1 + parallaxY / ((this.parallaxHeight - parallaxY) / 2); if (scale > 1) { this.parallaxImgStyle['opacity'] = 1 - parallaxY / 100 * this.options.parallaxRatio; this.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -parallaxY) + ' scale(' + scale + ',' + scale + ')'; } else { this.parallaxImgStyle['opacity'] = 1; this.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -1) + ' scale(1,1)'; } } if (this.indicators) { for (var i = this.indicators.length; i--;) { this.indicators[i].updatePosition(); } } this.lastX = this.x; this.lastY = this.y; $.trigger(this.scroller, 'scroll', this); }, reLayout: function() { this.wrapper.offsetHeight; var paddingLeft = parseFloat($.getStyles(this.wrapper, 'padding-left')) || 0; var paddingRight = parseFloat($.getStyles(this.wrapper, 'padding-right')) || 0; var paddingTop = parseFloat($.getStyles(this.wrapper, 'padding-top')) || 0; var paddingBottom = parseFloat($.getStyles(this.wrapper, 'padding-bottom')) || 0; var clientWidth = this.wrapper.clientWidth; var clientHeight = this.wrapper.clientHeight; this.scrollerWidth = this.scroller.offsetWidth; this.scrollerHeight = this.scroller.offsetHeight; this.wrapperWidth = clientWidth - paddingLeft - paddingRight; this.wrapperHeight = clientHeight - paddingTop - paddingBottom; this.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0); this.maxScrollY = Math.min(this.wrapperHeight - this.scrollerHeight, 0); this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0; this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0; this._reLayout(); }, resetPosition: function(time) { var x = this.x, y = this.y; time = time || 0; if (!this.hasHorizontalScroll || this.x > 0) { x = 0; } else if (this.x < this.maxScrollX) { x = this.maxScrollX; } if (!this.hasVerticalScroll || this.y > 0) { y = 0; } else if (this.y < this.maxScrollY) { y = this.maxScrollY; } if (x == this.x && y == this.y) { return false; } this.scrollTo(x, y, time, this.options.scrollEasing); return true; }, _reInit: function() { var groups = this.wrapper.querySelectorAll('.' + CLASS_SCROLL); for (var i = 0, len = groups.length; i < len; i++) { if (groups[i].parentNode === this.wrapper) { this.scroller = groups[i]; break; } } this.scrollerStyle = this.scroller && this.scroller.style; }, refresh: function() { this._reInit(); this.reLayout(); $.trigger(this.scroller, 'refresh', this); this.resetPosition(); }, scrollTo: function(x, y, time, easing) { var easing = easing || ease.circular; // this.isInTransition = time > 0 && (this.lastX != x || this.lastY != y); //暂不严格判断x,y,否则会导致部分版本上不正常触发轮播 this.isInTransition = time > 0; if (this.isInTransition) { this._clearRequestAnimationFrame(); this._transitionTimingFunction(easing.style); this._transitionTime(time); this.setTranslate(x, y); } else { this.setTranslate(x, y); } }, scrollToBottom: function(time, easing) { time = time || this.options.scrollTime; this.scrollTo(0, this.maxScrollY, time, easing); }, gotoPage: function(index) { this._gotoPage(index); }, destroy: function() { this._initEvent(true); //detach delete $.data[this.wrapper.getAttribute('data-scroll')]; this.wrapper.setAttribute('data-scroll', ''); } }); //Indicator var Indicator = function(scroller, options) { this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el; this.wrapperStyle = this.wrapper.style; this.indicator = this.wrapper.children[0]; this.indicatorStyle = this.indicator.style; this.scroller = scroller; this.options = $.extend({ listenX: true, listenY: true, fade: false, speedRatioX: 0, speedRatioY: 0 }, options); this.sizeRatioX = 1; this.sizeRatioY = 1; this.maxPosX = 0; this.maxPosY = 0; if (this.options.fade) { this.wrapperStyle['webkitTransform'] = this.scroller.translateZ; this.wrapperStyle['webkitTransitionDuration'] = this.options.fixedBadAndorid && $.os.isBadAndroid ? '0.001s' : '0ms'; this.wrapperStyle.opacity = '0'; } } Indicator.prototype = { handleEvent: function(e) { }, transitionTime: function(time) { time = time || 0; this.indicatorStyle['webkitTransitionDuration'] = time + 'ms'; if (this.scroller.options.fixedBadAndorid && !time && $.os.isBadAndroid) { this.indicatorStyle['webkitTransitionDuration'] = '0.001s'; } }, transitionTimingFunction: function(easing) { this.indicatorStyle['webkitTransitionTimingFunction'] = easing; }, refresh: function() { this.transitionTime(); if (this.options.listenX && !this.options.listenY) { this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none'; } else if (this.options.listenY && !this.options.listenX) { this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none'; } else { this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none'; } this.wrapper.offsetHeight; // force refresh if (this.options.listenX) { this.wrapperWidth = this.wrapper.clientWidth; this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8); this.indicatorStyle.width = this.indicatorWidth + 'px'; this.maxPosX = this.wrapperWidth - this.indicatorWidth; this.minBoundaryX = 0; this.maxBoundaryX = this.maxPosX; this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX)); } if (this.options.listenY) { this.wrapperHeight = this.wrapper.clientHeight; this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8); this.indicatorStyle.height = this.indicatorHeight + 'px'; this.maxPosY = this.wrapperHeight - this.indicatorHeight; this.minBoundaryY = 0; this.maxBoundaryY = this.maxPosY; this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY)); } this.updatePosition(); }, updatePosition: function() { var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0, y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0; if (x < this.minBoundaryX) { this.width = Math.max(this.indicatorWidth + x, 8); this.indicatorStyle.width = this.width + 'px'; x = this.minBoundaryX; } else if (x > this.maxBoundaryX) { this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8); this.indicatorStyle.width = this.width + 'px'; x = this.maxPosX + this.indicatorWidth - this.width; } else if (this.width != this.indicatorWidth) { this.width = this.indicatorWidth; this.indicatorStyle.width = this.width + 'px'; } if (y < this.minBoundaryY) { this.height = Math.max(this.indicatorHeight + y * 3, 8); this.indicatorStyle.height = this.height + 'px'; y = this.minBoundaryY; } else if (y > this.maxBoundaryY) { this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8); this.indicatorStyle.height = this.height + 'px'; y = this.maxPosY + this.indicatorHeight - this.height; } else if (this.height != this.indicatorHeight) { this.height = this.indicatorHeight; this.indicatorStyle.height = this.height + 'px'; } this.x = x; this.y = y; this.indicatorStyle['webkitTransform'] = this.scroller._getTranslateStr(x, y); }, fade: function(val, hold) { if (hold && !this.visible) { return; } clearTimeout(this.fadeTimeout); this.fadeTimeout = null; var time = val ? 250 : 500, delay = val ? 0 : 300; val = val ? '1' : '0'; this.wrapperStyle['webkitTransitionDuration'] = time + 'ms'; this.fadeTimeout = setTimeout((function(val) { this.wrapperStyle.opacity = val; this.visible = +val; }).bind(this, val), delay); } }; $.Scroll = Scroll; $.fn.scroll = function(options) { var scrollApis = []; this.each(function() { var scrollApi = null; var self = this; var id = self.getAttribute('data-scroll'); if (!id) { id = ++$.uuid; var _options = $.extend({}, options); if (self.classList.contains('mui-segmented-control')) { _options = $.extend(_options, { scrollY: false, scrollX: true, indicators: false, snap: '.mui-control-item' }); } $.data[id] = scrollApi = new Scroll(self, _options); self.setAttribute('data-scroll', id); } else { scrollApi = $.data[id]; } scrollApis.push(scrollApi); }); return scrollApis.length === 1 ? scrollApis[0] : scrollApis; }; })(mui, window, document); (function($, window, document, undefined) { var CLASS_VISIBILITY = 'mui-visibility'; var CLASS_HIDDEN = 'mui-hidden'; var PullRefresh = $.Scroll.extend($.extend({ handleEvent: function(e) { this._super(e); if (e.type === 'scrollbottom') { if (e.target === this.scroller) { this._scrollbottom(); } } }, _scrollbottom: function() { if (!this.pulldown && !this.loading) { this.pulldown = false; this._initPullupRefresh(); this.pullupLoading(); } }, _start: function(e) { //仅下拉刷新在start阻止默认事件 if (e.touches && e.touches.length && e.touches[0].clientX > 30) { e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault(); } if (!this.loading) { this.pulldown = this.pullPocket = this.pullCaption = this.pullLoading = false } this._super(e); }, _drag: function(e) { if (this.y >= 0 && this.disablePulldown && e.detail.direction === 'down') { //禁用下拉刷新 return; } this._super(e); if (!this.pulldown && !this.loading && this.topPocket && e.detail.direction === 'down' && this.y >= 0) { this._initPulldownRefresh(); } if (this.pulldown) { this._setCaption(this.y > this.options.down.height ? this.options.down.contentover : this.options.down.contentdown); } }, _reLayout: function() { this.hasVerticalScroll = true; this._super(); }, //API resetPosition: function(time) { if (this.pulldown && !this.disablePulldown) { if (this.y >= this.options.down.height) { this.pulldownLoading(undefined, time || 0); return true; } else { !this.loading && this.topPocket.classList.remove(CLASS_VISIBILITY); } } return this._super(time); }, pulldownLoading: function(y, time) { typeof y === 'undefined' && (y = this.options.down.height); //默认高度 this.scrollTo(0, y, time, this.options.bounceEasing); if (this.loading) { return; } // if (!this.pulldown) { this._initPulldownRefresh(); // } this._setCaption(this.options.down.contentrefresh); this.loading = true; this.indicators.map(function(indicator) { indicator.fade(0); }); var callback = this.options.down.callback; callback && callback.call(this); }, endPulldownToRefresh: function() { var self = this; if (self.topPocket && self.loading && this.pulldown) { self.scrollTo(0, 0, self.options.bounceTime, self.options.bounceEasing); self.loading = false; self._setCaption(self.options.down.contentdown, true); setTimeout(function() { self.loading || self.topPocket.classList.remove(CLASS_VISIBILITY); }, 350); } }, pullupLoading: function(callback, x, time) { x = x || 0; this.scrollTo(x, this.maxScrollY, time, this.options.bounceEasing); if (this.loading) { return; } this._initPullupRefresh(); this._setCaption(this.options.up.contentrefresh); this.indicators.map(function(indicator) { indicator.fade(0); }); this.loading = true; callback = callback || this.options.up.callback; callback && callback.call(this); }, endPullupToRefresh: function(finished) { var self = this; if (self.bottomPocket) { // && self.loading && !this.pulldown self.loading = false; if (finished) { this.finished = true; self._setCaption(self.options.up.contentnomore); // self.bottomPocket.classList.remove(CLASS_VISIBILITY); // self.bottomPocket.classList.add(CLASS_HIDDEN); self.wrapper.removeEventListener('scrollbottom', self); } else { self._setCaption(self.options.up.contentdown); // setTimeout(function() { self.loading || self.bottomPocket.classList.remove(CLASS_VISIBILITY); // }, 300); } } }, disablePullupToRefresh: function() { this._initPullupRefresh(); this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN; this.wrapper.removeEventListener('scrollbottom', this); }, disablePulldownToRefresh: function() { this._initPulldownRefresh(); this.topPocket.className = 'mui-pull-top-pocket' + ' ' + CLASS_HIDDEN; this.disablePulldown = true; }, enablePulldownToRefresh: function() { this._initPulldownRefresh(); this.topPocket.classList.remove(CLASS_HIDDEN); this._setCaption(this.options.down.contentdown); this.disablePulldown = false; }, enablePullupToRefresh: function() { this._initPullupRefresh(); this.bottomPocket.classList.remove(CLASS_HIDDEN); this._setCaption(this.options.up.contentdown); this.wrapper.addEventListener('scrollbottom', this); }, refresh: function(isReset) { if (isReset && this.finished) { this.enablePullupToRefresh(); this.finished = false; } this._super(); }, }, $.PullRefresh)); $.fn.pullRefresh = function(options) { if (this.length === 1) { var self = this[0]; var pullRefreshApi = null; var id = self.getAttribute('data-pullrefresh'); if (!id && typeof options === 'undefined') { return false; } options = options || {}; if (!id) { id = ++$.uuid; $.data[id] = pullRefreshApi = new PullRefresh(self, options); self.setAttribute('data-pullrefresh', id); } else { pullRefreshApi = $.data[id]; } if (options.down && options.down.auto) { //如果设置了auto,则自动下拉一次 pullRefreshApi.pulldownLoading(options.down.autoY); } else if (options.up && options.up.auto) { //如果设置了auto,则自动上拉一次 pullRefreshApi.pullupLoading(); } //暂不提供这种调用方式吧 // if (typeof options === 'string') { // var methodValue = pullRefreshApi[options].apply(pullRefreshApi, $.slice.call(arguments, 1)); // if (methodValue !== undefined) { // return methodValue; // } // } return pullRefreshApi; } }; })(mui, window, document); /** * snap 重构 * @param {Object} $ * @param {Object} window */ (function($, window) { var CLASS_SLIDER = 'mui-slider'; var CLASS_SLIDER_GROUP = 'mui-slider-group'; var CLASS_SLIDER_LOOP = 'mui-slider-loop'; var CLASS_SLIDER_INDICATOR = 'mui-slider-indicator'; var CLASS_ACTION_PREVIOUS = 'mui-action-previous'; var CLASS_ACTION_NEXT = 'mui-action-next'; var CLASS_SLIDER_ITEM = 'mui-slider-item'; var CLASS_ACTIVE = 'mui-active'; var SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM; var SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR; var SELECTOR_SLIDER_PROGRESS_BAR = '.mui-slider-progress-bar'; var Slider = $.Slider = $.Scroll.extend({ init: function(element, options) { this._super(element, $.extend(true, { fingers: 1, interval: 0, //设置为0,则不定时轮播 scrollY: false, scrollX: true, indicators: false, scrollTime: 1000, startX: false, slideTime: 0, //滑动动画时间 snap: SELECTOR_SLIDER_ITEM }, options)); if (this.options.startX) { // $.trigger(this.wrapper, 'scrollend', this); } }, _init: function() { this._reInit(); if (this.scroller) { this.scrollerStyle = this.scroller.style; this.progressBar = this.wrapper.querySelector(SELECTOR_SLIDER_PROGRESS_BAR); if (this.progressBar) { this.progressBarWidth = this.progressBar.offsetWidth; this.progressBarStyle = this.progressBar.style; } //忘记这个代码是干什么的了? // this.x = this._getScroll(); // if (this.options.startX === false) { // this.options.startX = this.x; // } //根据active修正startX this._super(); this._initTimer(); } }, _triggerSlide: function() { var self = this; self.isInTransition = false; var page = self.currentPage; self.slideNumber = self._fixedSlideNumber(); if (self.loop) { if (self.slideNumber === 0) { self.setTranslate(self.pages[1][0].x, 0); } else if (self.slideNumber === self.itemLength - 3) { self.setTranslate(self.pages[self.itemLength - 2][0].x, 0); } } if (self.lastSlideNumber != self.slideNumber) { self.lastSlideNumber = self.slideNumber; self.lastPage = self.currentPage; $.trigger(self.wrapper, 'slide', { slideNumber: self.slideNumber }); } self._initTimer(); }, _handleSlide: function(e) { var self = this; if (e.target !== self.wrapper) { return; } var detail = e.detail; detail.slideNumber = detail.slideNumber || 0; var temps = self.scroller.querySelectorAll(SELECTOR_SLIDER_ITEM); var items = []; for (var i = 0, len = temps.length; i < len; i++) { var item = temps[i]; if (item.parentNode === self.scroller) { items.push(item); } } var _slideNumber = detail.slideNumber; if (self.loop) { _slideNumber += 1; } if (!self.wrapper.classList.contains('mui-segmented-control')) { for (var i = 0, len = items.length; i < len; i++) { var item = items[i]; if (item.parentNode === self.scroller) { if (i === _slideNumber) { item.classList.add(CLASS_ACTIVE); } else { item.classList.remove(CLASS_ACTIVE); } } } } var indicatorWrap = self.wrapper.querySelector('.mui-slider-indicator'); if (indicatorWrap) { if (indicatorWrap.getAttribute('data-scroll')) { //scroll $(indicatorWrap).scroll().gotoPage(detail.slideNumber); } var indicators = indicatorWrap.querySelectorAll('.mui-indicator'); if (indicators.length > 0) { //图片轮播 for (var i = 0, len = indicators.length; i < len; i++) { indicators[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE); } } else { var number = indicatorWrap.querySelector('.mui-number span'); if (number) { //图文表格 number.innerText = (detail.slideNumber + 1); } else { //segmented controls var controlItems = indicatorWrap.querySelectorAll('.mui-control-item'); for (var i = 0, len = controlItems.length; i < len; i++) { controlItems[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE); } } } } e.stopPropagation(); }, _handleTabShow: function(e) { var self = this; self.gotoItem((e.detail.tabNumber || 0), self.options.slideTime); }, _handleIndicatorTap: function(event) { var self = this; var target = event.target; if (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) { self[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem'](); event.stopPropagation(); } }, _initEvent: function(detach) { var self = this; self._super(detach); var action = detach ? 'removeEventListener' : 'addEventListener'; self.wrapper[action]('slide', this); self.wrapper[action]($.eventName('shown', 'tab'), this); }, handleEvent: function(e) { this._super(e); switch (e.type) { case 'slide': this._handleSlide(e); break; case $.eventName('shown', 'tab'): if (~this.snaps.indexOf(e.target)) { //避免嵌套监听错误的tab show this._handleTabShow(e); } break; } }, _scrollend: function(e) { this._super(e); this._triggerSlide(e); }, _drag: function(e) { this._super(e); var direction = e.detail.direction; if (direction === 'left' || direction === 'right') { //拖拽期间取消定时 var slidershowTimer = this.wrapper.getAttribute('data-slidershowTimer'); slidershowTimer && window.clearTimeout(slidershowTimer); e.stopPropagation(); } }, _initTimer: function() { var self = this; var slider = self.wrapper; var interval = self.options.interval; var slidershowTimer = slider.getAttribute('data-slidershowTimer'); slidershowTimer && window.clearTimeout(slidershowTimer); if (interval) { slidershowTimer = window.setTimeout(function() { if (!slider) { return; } //仅slider显示状态进行自动轮播 if (!!(slider.offsetWidth || slider.offsetHeight)) { self.nextItem(true); //下一个 } self._initTimer(); }, interval); slider.setAttribute('data-slidershowTimer', slidershowTimer); } }, _fixedSlideNumber: function(page) { page = page || this.currentPage; var slideNumber = page.pageX; if (this.loop) { if (page.pageX === 0) { slideNumber = this.itemLength - 3; } else if (page.pageX === (this.itemLength - 1)) { slideNumber = 0; } else { slideNumber = page.pageX - 1; } } return slideNumber; }, _reLayout: function() { this.hasHorizontalScroll = true; this.loop = this.scroller.classList.contains(CLASS_SLIDER_LOOP); this._super(); }, _getScroll: function() { var result = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform')); return result ? result.x : 0; }, _transitionEnd: function(e) { if (e.target !== this.scroller || !this.isInTransition) { return; } this._transitionTime(); this.isInTransition = false; $.trigger(this.wrapper, 'scrollend', this); }, _flick: function(e) { if (!this.moved) { //无moved return; } var detail = e.detail; var direction = detail.direction; this._clearRequestAnimationFrame(); this.isInTransition = true; // if (direction === 'up' || direction === 'down') { // this.resetPosition(this.options.bounceTime); // return; // } if (e.type === 'flick') { if (detail.deltaTime < 200) { //flick,太容易触发,额外校验一下deltaTime this.x = this._getPage((this.slideNumber + (direction === 'right' ? -1 : 1)), true).x; } this.resetPosition(this.options.bounceTime); } else if (e.type === 'dragend' && !detail.flick) { this.resetPosition(this.options.bounceTime); } e.stopPropagation(); }, _initSnap: function() { this.scrollerWidth = this.itemLength * this.scrollerWidth; this.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0); this._super(); if (!this.currentPage.x) { //当slider处于隐藏状态时,导致snap计算是错误的,临时先这么判断一下,后续要考虑解决所有scroll在隐藏状态下初始化属性不正确的问题 var currentPage = this.pages[this.loop ? 1 : 0]; currentPage = currentPage || this.pages[0]; if (!currentPage) { return; } this.currentPage = currentPage[0]; this.slideNumber = 0; this.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? 0 : this.lastSlideNumber; } else { this.slideNumber = this._fixedSlideNumber(); this.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? this.slideNumber : this.lastSlideNumber; } this.options.startX = this.currentPage.x || 0; }, _getSnapX: function(offsetLeft) { return Math.max(-offsetLeft, this.maxScrollX); }, _getPage: function(slideNumber, isFlick) { if (this.loop) { if (slideNumber > (this.itemLength - (isFlick ? 2 : 3))) { slideNumber = 1; time = 0; } else if (slideNumber < (isFlick ? -1 : 0)) { slideNumber = this.itemLength - 2; time = 0; } else { slideNumber += 1; } } else { if (!isFlick) { if (slideNumber > (this.itemLength - 1)) { slideNumber = 0; time = 0; } else if (slideNumber < 0) { slideNumber = this.itemLength - 1; time = 0; } } slideNumber = Math.min(Math.max(0, slideNumber), this.itemLength - 1); } return this.pages[slideNumber][0]; }, _gotoItem: function(slideNumber, time) { this.currentPage = this._getPage(slideNumber, true); //此处传true。可保证程序切换时,动画与人手操作一致(第一张,最后一张的切换动画) this.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing); if (time === 0) { $.trigger(this.wrapper, 'scrollend', this); } }, //API setTranslate: function(x, y) { this._super(x, y); var progressBar = this.progressBar; if (progressBar) { this.progressBarStyle.webkitTransform = this._getTranslateStr((-x * (this.progressBarWidth / this.wrapperWidth)), 0); } }, resetPosition: function(time) { time = time || 0; if (this.x > 0) { this.x = 0; } else if (this.x < this.maxScrollX) { this.x = this.maxScrollX; } this.currentPage = this._nearestSnap(this.x); this.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing); return true; }, gotoItem: function(slideNumber, time) { this._gotoItem(slideNumber, typeof time === 'undefined' ? this.options.scrollTime : time); }, nextItem: function() { this._gotoItem(this.slideNumber + 1, this.options.scrollTime); }, prevItem: function() { this._gotoItem(this.slideNumber - 1, this.options.scrollTime); }, getSlideNumber: function() { return this.slideNumber || 0; }, _reInit: function() { var groups = this.wrapper.querySelectorAll('.' + CLASS_SLIDER_GROUP); for (var i = 0, len = groups.length; i < len; i++) { if (groups[i].parentNode === this.wrapper) { this.scroller = groups[i]; break; } } this.scrollerStyle = this.scroller && this.scroller.style; if (this.progressBar) { this.progressBarWidth = this.progressBar.offsetWidth; this.progressBarStyle = this.progressBar.style; } }, refresh: function(options) { if (options) { $.extend(this.options, options); this._super(); this._initTimer(); } else { this._super(); } }, destroy: function() { this._initEvent(true); //detach delete $.data[this.wrapper.getAttribute('data-slider')]; this.wrapper.setAttribute('data-slider', ''); } }); $.fn.slider = function(options) { var slider = null; this.each(function() { var sliderElement = this; if (!this.classList.contains(CLASS_SLIDER)) { sliderElement = this.querySelector('.' + CLASS_SLIDER); } if (sliderElement && sliderElement.querySelector(SELECTOR_SLIDER_ITEM)) { var id = sliderElement.getAttribute('data-slider'); if (!id) { id = ++$.uuid; $.data[id] = slider = new Slider(sliderElement, options); sliderElement.setAttribute('data-slider', id); } else { slider = $.data[id]; if (slider && options) { slider.refresh(options); } } } }); return slider; }; $.ready(function() { // setTimeout(function() { $('.mui-slider').slider(); $('.mui-scroll-wrapper.mui-slider-indicator.mui-segmented-control').scroll({ scrollY: false, scrollX: true, indicators: false, snap: '.mui-control-item' }); // }, 500); //临时处理slider宽度计算不正确的问题(初步确认是scrollbar导致的) }); })(mui, window); /** * pullRefresh 5+ * @param {type} $ * @returns {undefined} */ (function($, document) { if (!($.os.plus)) { //仅在5+android支持多webview的使用 return; } $.plusReady(function() { if (window.__NWin_Enable__ === false) { //不支持多webview,则不用5+下拉刷新 return; } var CLASS_PLUS_PULLREFRESH = 'mui-plus-pullrefresh'; var CLASS_VISIBILITY = 'mui-visibility'; var CLASS_HIDDEN = 'mui-hidden'; var CLASS_BLOCK = 'mui-block'; var CLASS_PULL_CAPTION = 'mui-pull-caption'; var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down'; var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh'; var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore'; var PlusPullRefresh = $.Class.extend({ init: function(element, options) { this.element = element; this.options = options; this.wrapper = this.scroller = element; this._init(); this._initPulldownRefreshEvent(); }, _init: function() { var self = this; //document.addEventListener('plusscrollbottom', this); window.addEventListener('dragup', self); document.addEventListener("plusscrollbottom", self); self.scrollInterval = window.setInterval(function() { if (self.isScroll && !self.loading) { if (window.pageYOffset + window.innerHeight + 10 >= document.documentElement.scrollHeight) { self.isScroll = false; //放在这里是因为快速滚动的话,有可能检测时,还没到底,所以只要有滚动,没到底之前一直检测高度变化 if (self.bottomPocket) { self.pullupLoading(); } } } }, 100); }, _initPulldownRefreshEvent: function() { var self = this; $.plusReady(function() { if (self.options.down.style == "circle") { //单webview、原生转圈 self.options.webview = plus.webview.currentWebview(); self.options.webview.setPullToRefresh({ support: true, color: self.options.down.color || '#2BD009', height: self.options.down.height || '50px', range: self.options.down.range || '100px', style: 'circle', offset: self.options.down.offset || '0px' }, function() { self.options.down.callback(); }); } else if (self.topPocket && self.options.webviewId) { var webview = plus.webview.getWebviewById(self.options.webviewId); //子窗口 if (!webview) { return; } self.options.webview = webview; var downOptions = self.options.down; var height = downOptions.height; webview.addEventListener('close', function() { var attrWebviewId = self.options.webviewId && self.options.webviewId.replace(/\//g, "_"); //替换所有"/" self.element.removeAttribute('data-pullrefresh-plus-' + attrWebviewId); }); webview.addEventListener("dragBounce", function(e) { if (!self.pulldown) { self._initPulldownRefresh(); } else { self.pullPocket.classList.add(CLASS_BLOCK); } switch (e.status) { case "beforeChangeOffset": //下拉可刷新状态 self._setCaption(downOptions.contentdown); break; case "afterChangeOffset": //松开可刷新状态 self._setCaption(downOptions.contentover); break; case "dragEndAfterChangeOffset": //正在刷新状态 //执行下拉刷新所在webview的回调函数 webview.evalJS("window.mui&&mui.options.pullRefresh.down.callback()"); self._setCaption(downOptions.contentrefresh); break; default: break; } }, false); webview.setBounce({ position: { top: height * 2 + 'px' }, changeoffset: { top: height + 'px' } }); } }); }, handleEvent: function(e) { var self = this; if (self.stopped) { return; } self.isScroll = false; if (e.type === 'dragup' || e.type === 'plusscrollbottom') { self.isScroll = true; setTimeout(function() { self.isScroll = false; }, 1000); } } }).extend($.extend({ setStopped: function(stopped) { //该方法是子页面调用的 this.stopped = !!stopped; // TODO 此处需要设置当前webview的bounce为none,目前5+有BUG if (this.stopped) { this.disablePullupToRefresh(); this.disablePulldownToRefresh(); } else { this.enablePullupToRefresh(); this.enablePulldownToRefresh(); } }, beginPulldown: function() { var self = this; $.plusReady(function() { //这里延时的目的是为了保证下拉刷新组件初始化完成,后续应该做成有状态的 setTimeout(function() { if (self.options.down.style == "circle") { //单webview下拉刷新 plus.webview.currentWebview().beginPullToRefresh(); } else { //双webview模式 var webview = self.options.webview; if (webview) { webview.setBounce({ offset: { top: self.options.down.height + "px" } }); } } }, 15); }.bind(this)); }, pulldownLoading: function() { //该方法是子页面调用的,兼容老的历史API this.beginPulldown(); }, _pulldownLoading: function() { //该方法是父页面调用的 var self = this; $.plusReady(function() { var childWebview = plus.webview.getWebviewById(self.options.webviewId); childWebview && childWebview.setBounce({ offset: { top: self.options.down.height + "px" } }); }); }, endPulldown: function() { var _wv = plus.webview.currentWebview(); //双webview的下拉刷新,需要修改父窗口提示信息 if (_wv.parent() && this.options.down.style !== "circle") { _wv.parent().evalJS("mui&&mui(document.querySelector('.mui-content')).pullRefresh('" + JSON.stringify({ webviewId: _wv.id }) + "')._endPulldownToRefresh()"); } else { _wv.endPullToRefresh(); } }, endPulldownToRefresh: function() { //该方法是子页面调用的,兼容老的历史API this.endPulldown(); }, _endPulldownToRefresh: function() { //该方法是父页面调用的 var self = this; if (self.topPocket && self.options.webview) { self.options.webview.endPullToRefresh(); //下拉刷新所在webview回弹 self.loading = false; self._setCaption(self.options.down.contentdown, true); setTimeout(function() { self.loading || self.topPocket.classList.remove(CLASS_BLOCK); }, 350); } }, beginPullup: function(callback) { //开始上拉加载 var self = this; if (self.isLoading) return; self.isLoading = true; if (self.pulldown !== false) { self._initPullupRefresh(); } else { this.pullPocket.classList.add(CLASS_BLOCK); } setTimeout(function() { self.pullLoading.classList.add(CLASS_VISIBILITY); self.pullLoading.classList.remove(CLASS_HIDDEN); self.pullCaption.innerHTML = ''; //修正5+里边第一次加载时,文字显示的bug(还会显示出来个“多”,猜测应该是渲染问题导致的) self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH; self.pullCaption.innerHTML = self.options.up.contentrefresh; callback = callback || self.options.up.callback; callback && callback.call(self); }, 300); }, pullupLoading: function(callback) { //兼容老的API this.beginPullup(callback); }, endPullup: function(finished) { //上拉加载结束 var self = this; if (self.pullLoading) { self.pullLoading.classList.remove(CLASS_VISIBILITY); self.pullLoading.classList.add(CLASS_HIDDEN); self.isLoading = false; if (finished) { self.finished = true; self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE; self.pullCaption.innerHTML = self.options.up.contentnomore; //取消5+的plusscrollbottom事件 document.removeEventListener('plusscrollbottom', self); window.removeEventListener('dragup', self); } else { //初始化时隐藏,后续不再隐藏 self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN; self.pullCaption.innerHTML = self.options.up.contentdown; } } }, endPullupToRefresh: function(finished) { //上拉加载结束,兼容老的API this.endPullup(finished); }, disablePulldownToRefresh: function() { var webview = plus.webview.currentWebview(); if (this.options.down.style && this.options.down.style == 'circle') { // 单webview模式禁止原生下拉刷新 this.options.webview.setPullToRefresh({ support: false, style: 'circle' }); } else { // 双webview模式禁止下拉刷新 webview.setStyle({ bounce: 'none' }); webview.setBounce({ position: { top: 'none' } }); } }, enablePulldownToRefresh: function() { var self = this, webview = plus.webview.currentWebview(), height = this.options.down.height; // 单webview模式禁止原生下拉刷新 if (this.options.down.style && this.options.down.style == 'circle') { webview.setPullToRefresh({ support: true, height: height || '50px', range: self.options.down.range || '100px', style: 'circle', offset: self.options.down.offset || '0px' }); } else { // 重新初始化双webview模式下拉刷新 webview.setStyle({ bounce: 'vertical' }); webview.setBounce({ position: { top: height * 2 + 'px' }, changeoffset: { top: height + 'px' } }); } }, disablePullupToRefresh: function() { this._initPullupRefresh(); this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN; window.removeEventListener('dragup', this); }, enablePullupToRefresh: function() { this._initPullupRefresh(); this.bottomPocket.classList.remove(CLASS_HIDDEN); this.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN; this.pullCaption.innerHTML = this.options.up.contentdown; document.addEventListener("plusscrollbottom", this); window.addEventListener('dragup', this); }, scrollTo: function(x, y, time) { $.scrollTo(y, time); }, scrollToBottom: function(time) { $.scrollTo(document.documentElement.scrollHeight, time); }, refresh: function(isReset) { if (isReset && this.finished) { this.enablePullupToRefresh(); this.finished = false; } } }, $.PullRefresh)); //override h5 pullRefresh $.fn.pullRefresh_native = function(options) { var self; if (this.length === 0) { self = document.createElement('div'); self.className = 'mui-content'; document.body.appendChild(self); } else { self = this[0]; } var args = options; //一个父需要支持多个子下拉刷新 options = options || {} if (typeof options === 'string') { options = $.parseJSON(options); }; !options.webviewId && (options.webviewId = (plus.webview.currentWebview().id || plus.webview.currentWebview().getURL())); var pullRefreshApi = null; var attrWebviewId = options.webviewId && options.webviewId.replace(/\//g, "_"); //替换所有"/" var id = self.getAttribute('data-pullrefresh-plus-' + attrWebviewId); if (!id && typeof args === 'undefined') { return false; } if (!id) { //避免重复初始化5+ pullrefresh id = ++$.uuid; self.setAttribute('data-pullrefresh-plus-' + attrWebviewId, id); document.body.classList.add(CLASS_PLUS_PULLREFRESH); $.data[id] = pullRefreshApi = new PlusPullRefresh(self, options); } else { pullRefreshApi = $.data[id]; } if (options.down && options.down.auto) { //如果设置了auto,则自动下拉一次 //pullRefreshApi._pulldownLoading(); //parent webview pullRefreshApi.beginPulldown(); } else if (options.up && options.up.auto) { //如果设置了auto,则自动上拉一次 pullRefreshApi.beginPullup(); } return pullRefreshApi; }; }); })(mui, document); /** * off-canvas * @param {type} $ * @param {type} window * @param {type} document * @param {type} action * @returns {undefined} */ (function($, window, document, name) { var CLASS_OFF_CANVAS_LEFT = 'mui-off-canvas-left'; var CLASS_OFF_CANVAS_RIGHT = 'mui-off-canvas-right'; var CLASS_ACTION_BACKDROP = 'mui-off-canvas-backdrop'; var CLASS_OFF_CANVAS_WRAP = 'mui-off-canvas-wrap'; var CLASS_SLIDE_IN = 'mui-slide-in'; var CLASS_ACTIVE = 'mui-active'; var CLASS_TRANSITIONING = 'mui-transitioning'; var SELECTOR_INNER_WRAP = '.mui-inner-wrap'; var OffCanvas = $.Class.extend({ init: function(element, options) { this.wrapper = this.element = element; this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP); this.classList = this.wrapper.classList; if (this.scroller) { this.options = $.extend(true, { dragThresholdX: 10, scale: 0.8, opacity: 0.1, preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/ }, }, options); document.body.classList.add('mui-fullscreen'); //fullscreen this.refresh(); this.initEvent(); } }, _preventDefaultException: function(el, exceptions) { for (var i in exceptions) { if (exceptions[i].test(el[i])) { return true; } } return false; }, refresh: function(offCanvas) { // offCanvas && !offCanvas.classList.contains(CLASS_ACTIVE) && this.classList.remove(CLASS_ACTIVE); this.slideIn = this.classList.contains(CLASS_SLIDE_IN); this.scalable = this.classList.contains('mui-scalable') && !this.slideIn; this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP); // !offCanvas && this.scroller.classList.remove(CLASS_TRANSITIONING); // !offCanvas && this.scroller.setAttribute('style', ''); this.offCanvasLefts = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_LEFT); this.offCanvasRights = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_RIGHT); if (offCanvas) { if (offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) { this.offCanvasLeft = offCanvas; } else if (offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) { this.offCanvasRight = offCanvas; } } else { this.offCanvasRight = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT); this.offCanvasLeft = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT); } this.offCanvasRightWidth = this.offCanvasLeftWidth = 0; this.offCanvasLeftSlideIn = this.offCanvasRightSlideIn = false; if (this.offCanvasRight) { this.offCanvasRightWidth = this.offCanvasRight.offsetWidth; this.offCanvasRightSlideIn = this.slideIn && (this.offCanvasRight.parentNode === this.wrapper); // this.offCanvasRight.classList.remove(CLASS_TRANSITIONING); // this.offCanvasRight.classList.remove(CLASS_ACTIVE); // this.offCanvasRight.setAttribute('style', ''); } if (this.offCanvasLeft) { this.offCanvasLeftWidth = this.offCanvasLeft.offsetWidth; this.offCanvasLeftSlideIn = this.slideIn && (this.offCanvasLeft.parentNode === this.wrapper); // this.offCanvasLeft.classList.remove(CLASS_TRANSITIONING); // this.offCanvasLeft.classList.remove(CLASS_ACTIVE); // this.offCanvasLeft.setAttribute('style', ''); } this.backdrop = this.scroller.querySelector('.' + CLASS_ACTION_BACKDROP); this.options.dragThresholdX = this.options.dragThresholdX || 10; this.visible = false; this.startX = null; this.lastX = null; this.offsetX = null; this.lastTranslateX = null; }, handleEvent: function(e) { switch (e.type) { case $.EVENT_START: e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault(); break; case 'webkitTransitionEnd': //有个bug需要处理,需要考虑假设没有触发webkitTransitionEnd的情况 if (e.target === this.scroller) { this._dispatchEvent(); } break; case 'drag': var detail = e.detail; if (!this.startX) { this.startX = detail.center.x; this.lastX = this.startX; } else { this.lastX = detail.center.x; } if (!this.isDragging && Math.abs(this.lastX - this.startX) > this.options.dragThresholdX && (detail.direction === 'left' || (detail.direction === 'right'))) { if (this.slideIn) { this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP); if (this.classList.contains(CLASS_ACTIVE)) { if (this.offCanvasRight && this.offCanvasRight.classList.contains(CLASS_ACTIVE)) { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } else { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } } else { if (detail.direction === 'left' && this.offCanvasRight) { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } else if (detail.direction === 'right' && this.offCanvasLeft) { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } else { this.scroller = null; } } } else { if (this.classList.contains(CLASS_ACTIVE)) { if (detail.direction === 'left') { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } else { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } } else { if (detail.direction === 'right') { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } else { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } } } if (this.offCanvas && this.scroller) { this.startX = this.lastX; this.isDragging = true; $.gestures.session.lockDirection = true; //锁定方向 $.gestures.session.startDirection = detail.direction; this.offCanvas.classList.remove(CLASS_TRANSITIONING); this.scroller.classList.remove(CLASS_TRANSITIONING); this.offsetX = this.getTranslateX(); this._initOffCanvasVisible(); } } if (this.isDragging) { this.updateTranslate(this.offsetX + (this.lastX - this.startX)); detail.gesture.preventDefault(); e.stopPropagation(); } break; case 'dragend': if (this.isDragging) { var detail = e.detail; var direction = detail.direction; this.isDragging = false; this.offCanvas.classList.add(CLASS_TRANSITIONING); this.scroller.classList.add(CLASS_TRANSITIONING); var ratio = 0; var x = this.getTranslateX(); if (!this.slideIn) { if (x >= 0) { ratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0; } else { ratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0; } if (ratio === 0) { this.openPercentage(0); this._dispatchEvent(); //此处不触发webkitTransitionEnd,所以手动dispatch return; } if (direction === 'right' && ratio >= 0 && (ratio >= 0.5 || detail.swipe)) { //右滑打开 this.openPercentage(100); } else if (direction === 'right' && ratio < 0 && (ratio > -0.5 || detail.swipe)) { //右滑关闭 this.openPercentage(0); } else if (direction === 'right' && ratio > 0 && ratio < 0.5) { //右滑还原关闭 this.openPercentage(0); } else if (direction === 'right' && ratio < 0.5) { //右滑还原打开 this.openPercentage(-100); } else if (direction === 'left' && ratio <= 0 && (ratio <= -0.5 || detail.swipe)) { //左滑打开 this.openPercentage(-100); } else if (direction === 'left' && ratio > 0 && (ratio <= 0.5 || detail.swipe)) { //左滑关闭 this.openPercentage(0); } else if (direction === 'left' && ratio < 0 && ratio >= -0.5) { //左滑还原关闭 this.openPercentage(0); } else if (direction === 'left' && ratio > 0.5) { //左滑还原打开 this.openPercentage(100); } else { //默认关闭 this.openPercentage(0); } if (ratio === 1 || ratio === -1) { //此处不触发webkitTransitionEnd,所以手动dispatch this._dispatchEvent(); } } else { if (x >= 0) { ratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0; } else { ratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0; } if (direction === 'right' && ratio <= 0 && (ratio >= -0.5 || detail.swipe)) { //右滑打开 this.openPercentage(100); } else if (direction === 'right' && ratio > 0 && (ratio >= 0.5 || detail.swipe)) { //右滑关闭 this.openPercentage(0); } else if (direction === 'right' && ratio <= -0.5) { //右滑还原关闭 this.openPercentage(0); } else if (direction === 'right' && ratio > 0 && ratio <= 0.5) { //右滑还原打开 this.openPercentage(-100); } else if (direction === 'left' && ratio >= 0 && (ratio <= 0.5 || detail.swipe)) { //左滑打开 this.openPercentage(-100); } else if (direction === 'left' && ratio < 0 && (ratio <= -0.5 || detail.swipe)) { //左滑关闭 this.openPercentage(0); } else if (direction === 'left' && ratio >= 0.5) { //左滑还原关闭 this.openPercentage(0); } else if (direction === 'left' && ratio >= -0.5 && ratio < 0) { //左滑还原打开 this.openPercentage(100); } else { this.openPercentage(0); } if (ratio === 1 || ratio === -1 || ratio === 0) { this._dispatchEvent(); return; } } } break; } }, _dispatchEvent: function() { if (this.classList.contains(CLASS_ACTIVE)) { $.trigger(this.wrapper, 'shown', this); } else { $.trigger(this.wrapper, 'hidden', this); } }, _initOffCanvasVisible: function() { if (!this.visible) { this.visible = true; if (this.offCanvasLeft) { this.offCanvasLeft.style.visibility = 'visible'; } if (this.offCanvasRight) { this.offCanvasRight.style.visibility = 'visible'; } } }, initEvent: function() { var self = this; if (self.backdrop) { self.backdrop.addEventListener('tap', function(e) { self.close(); e.detail.gesture.preventDefault(); }); } if (this.classList.contains('mui-draggable')) { this.wrapper.addEventListener($.EVENT_START, this); //临时处理 this.wrapper.addEventListener('drag', this); this.wrapper.addEventListener('dragend', this); } this.wrapper.addEventListener('webkitTransitionEnd', this); }, openPercentage: function(percentage) { var p = percentage / 100; if (!this.slideIn) { if (this.offCanvasLeft && percentage >= 0) { this.updateTranslate(this.offCanvasLeftWidth * p); this.offCanvasLeft.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } else if (this.offCanvasRight && percentage <= 0) { this.updateTranslate(this.offCanvasRightWidth * p); this.offCanvasRight.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } this.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } else { if (this.offCanvasLeft && percentage >= 0) { p = p === 0 ? -1 : 0; this.updateTranslate(this.offCanvasLeftWidth * p); this.offCanvasLeft.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } else if (this.offCanvasRight && percentage <= 0) { p = p === 0 ? 1 : 0; this.updateTranslate(this.offCanvasRightWidth * p); this.offCanvasRight.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } this.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } }, updateTranslate: function(x) { if (x !== this.lastTranslateX) { if (!this.slideIn) { if ((!this.offCanvasLeft && x > 0) || (!this.offCanvasRight && x < 0)) { this.setTranslateX(0); return; } if (this.leftShowing && x > this.offCanvasLeftWidth) { this.setTranslateX(this.offCanvasLeftWidth); return; } if (this.rightShowing && x < -this.offCanvasRightWidth) { this.setTranslateX(-this.offCanvasRightWidth); return; } this.setTranslateX(x); if (x >= 0) { this.leftShowing = true; this.rightShowing = false; if (x > 0) { if (this.offCanvasLeft) { $.each(this.offCanvasLefts, function(index, offCanvas) { if (offCanvas === this.offCanvasLeft) { this.offCanvasLeft.style.zIndex = 0; } else { offCanvas.style.zIndex = -1; } }.bind(this)); } if (this.offCanvasRight) { this.offCanvasRight.style.zIndex = -1; } } } else { this.rightShowing = true; this.leftShowing = false; if (this.offCanvasRight) { $.each(this.offCanvasRights, function(index, offCanvas) { if (offCanvas === this.offCanvasRight) { offCanvas.style.zIndex = 0; } else { offCanvas.style.zIndex = -1; } }.bind(this)); } if (this.offCanvasLeft) { this.offCanvasLeft.style.zIndex = -1; } } } else { if (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) { if (x < 0) { this.setTranslateX(0); return; } if (x > this.offCanvasRightWidth) { this.setTranslateX(this.offCanvasRightWidth); return; } } else { if (x > 0) { this.setTranslateX(0); return; } if (x < -this.offCanvasLeftWidth) { this.setTranslateX(-this.offCanvasLeftWidth); return; } } this.setTranslateX(x); } this.lastTranslateX = x; } }, setTranslateX: $.animationFrame(function(x) { if (this.scroller) { if (this.scalable && this.offCanvas.parentNode === this.wrapper) { var percent = Math.abs(x) / this.offCanvasWidth; var zoomOutScale = 1 - (1 - this.options.scale) * percent; var zoomInScale = this.options.scale + (1 - this.options.scale) * percent; var zoomOutOpacity = 1 - (1 - this.options.opacity) * percent; var zoomInOpacity = this.options.opacity + (1 - this.options.opacity) * percent; if (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) { this.offCanvas.style.webkitTransformOrigin = '-100%'; this.scroller.style.webkitTransformOrigin = 'left'; } else { this.offCanvas.style.webkitTransformOrigin = '200%'; this.scroller.style.webkitTransformOrigin = 'right'; } this.offCanvas.style.opacity = zoomInOpacity; this.offCanvas.style.webkitTransform = 'translate3d(0,0,0) scale(' + zoomInScale + ')'; this.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0) scale(' + zoomOutScale + ')'; } else { if (this.slideIn) { this.offCanvas.style.webkitTransform = 'translate3d(' + x + 'px,0,0)'; } else { this.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0)'; } } } }), getTranslateX: function() { if (this.offCanvas) { var scroller = this.slideIn ? this.offCanvas : this.scroller; var result = $.parseTranslateMatrix($.getStyles(scroller, 'webkitTransform')); return (result && result.x) || 0; } return 0; }, isShown: function(direction) { var shown = false; if (!this.slideIn) { var x = this.getTranslateX(); if (direction === 'right') { shown = this.classList.contains(CLASS_ACTIVE) && x < 0; } else if (direction === 'left') { shown = this.classList.contains(CLASS_ACTIVE) && x > 0; } else { shown = this.classList.contains(CLASS_ACTIVE) && x !== 0; } } else { if (direction === 'left') { shown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE); } else if (direction === 'right') { shown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE); } else { shown = this.classList.contains(CLASS_ACTIVE) && (this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE)); } } return shown; }, close: function() { this._initOffCanvasVisible(); this.offCanvas = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE); this.offCanvasWidth = this.offCanvas.offsetWidth; if (this.scroller) { this.offCanvas.offsetHeight; this.offCanvas.classList.add(CLASS_TRANSITIONING); this.scroller.classList.add(CLASS_TRANSITIONING); this.openPercentage(0); } }, show: function(direction) { this._initOffCanvasVisible(); if (this.isShown(direction)) { return false; } if (!direction) { direction = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT) ? 'right' : 'left'; } if (direction === 'right') { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } else { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } if (this.scroller) { this.offCanvas.offsetHeight; this.offCanvas.classList.add(CLASS_TRANSITIONING); this.scroller.classList.add(CLASS_TRANSITIONING); this.openPercentage(direction === 'left' ? 100 : -100); } return true; }, toggle: function(directionOrOffCanvas) { var direction = directionOrOffCanvas; if (directionOrOffCanvas && directionOrOffCanvas.classList) { direction = directionOrOffCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT) ? 'left' : 'right'; this.refresh(directionOrOffCanvas); } if (!this.show(direction)) { this.close(); } } }); //hash to offcanvas var findOffCanvasContainer = function(target) { parentNode = target.parentNode; if (parentNode) { if (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) { return parentNode; } else { parentNode = parentNode.parentNode; if (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) { return parentNode; } } } }; var handle = function(event, target) { if (target.tagName === 'A' && target.hash) { var offcanvas = document.getElementById(target.hash.replace('#', '')); if (offcanvas) { var container = findOffCanvasContainer(offcanvas); if (container) { $.targets._container = container; return offcanvas; } } } return false; }; $.registerTarget({ name: name, index: 60, handle: handle, target: false, isReset: false, isContinue: true }); window.addEventListener('tap', function(e) { if (!$.targets.offcanvas) { return; } //TODO 此处类型的代码后续考虑统一优化(target机制),现在的实现费力不讨好 var target = e.target; for (; target && target !== document; target = target.parentNode) { if (target.tagName === 'A' && target.hash && target.hash === ('#' + $.targets.offcanvas.id)) { e.detail && e.detail.gesture && e.detail.gesture.preventDefault(); //fixed hashchange $($.targets._container).offCanvas().toggle($.targets.offcanvas); $.targets.offcanvas = $.targets._container = null; break; } } }); $.fn.offCanvas = function(options) { var offCanvasApis = []; this.each(function() { var offCanvasApi = null; var self = this; //hack old version if (!self.classList.contains(CLASS_OFF_CANVAS_WRAP)) { self = findOffCanvasContainer(self); } var id = self.getAttribute('data-offCanvas'); if (!id) { id = ++$.uuid; $.data[id] = offCanvasApi = new OffCanvas(self, options); self.setAttribute('data-offCanvas', id); } else { offCanvasApi = $.data[id]; } if (options === 'show' || options === 'close' || options === 'toggle') { offCanvasApi.toggle(); } offCanvasApis.push(offCanvasApi); }); return offCanvasApis.length === 1 ? offCanvasApis[0] : offCanvasApis; }; $.ready(function() { $('.mui-off-canvas-wrap').offCanvas(); }); })(mui, window, document, 'offcanvas'); /** * actions * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var CLASS_ACTION = 'mui-action'; var handle = function(event, target) { var className = target.className || ''; if (typeof className !== 'string') { //svg className(SVGAnimatedString) className = ''; } if (className && ~className.indexOf(CLASS_ACTION)) { if (target.classList.contains('mui-action-back')) { event.preventDefault(); } return target; } return false; }; $.registerTarget({ name: name, index: 50, handle: handle, target: false, isContinue: true }); })(mui, 'action'); /** * Modals * @param {type} $ * @param {type} window * @param {type} document * @param {type} name * @returns {undefined} */ (function($, window, document, name) { var CLASS_MODAL = 'mui-modal'; var handle = function(event, target) { if (target.tagName === 'A' && target.hash) { var modal = document.getElementById(target.hash.replace('#', '')); if (modal && modal.classList.contains(CLASS_MODAL)) { return modal; } } return false; }; $.registerTarget({ name: name, index: 50, handle: handle, target: false, isReset: false, isContinue: true }); window.addEventListener('tap', function(event) { if ($.targets.modal) { event.detail.gesture.preventDefault(); //fixed hashchange $.targets.modal.classList.toggle('mui-active'); } }); })(mui, window, document, 'modal'); /** * Popovers * @param {type} $ * @param {type} window * @param {type} document * @param {type} name * @param {type} undefined * @returns {undefined} */ (function($, window, document, name) { var CLASS_POPOVER = 'mui-popover'; var CLASS_POPOVER_ARROW = 'mui-popover-arrow'; var CLASS_ACTION_POPOVER = 'mui-popover-action'; var CLASS_BACKDROP = 'mui-backdrop'; var CLASS_BAR_POPOVER = 'mui-bar-popover'; var CLASS_BAR_BACKDROP = 'mui-bar-backdrop'; var CLASS_ACTION_BACKDROP = 'mui-backdrop-action'; var CLASS_ACTIVE = 'mui-active'; var CLASS_BOTTOM = 'mui-bottom'; var handle = function(event, target) { if (target.tagName === 'A' && target.hash) { $.targets._popover = document.getElementById(target.hash.replace('#', '')); if ($.targets._popover && $.targets._popover.classList.contains(CLASS_POPOVER)) { return target; } else { $.targets._popover = null; } } return false; }; $.registerTarget({ name: name, index: 60, handle: handle, target: false, isReset: false, isContinue: true }); var onPopoverShown = function(e) { this.removeEventListener('webkitTransitionEnd', onPopoverShown); this.addEventListener($.EVENT_MOVE, $.preventDefault); $.trigger(this, 'shown', this); } var onPopoverHidden = function(e) { setStyle(this, 'none'); this.removeEventListener('webkitTransitionEnd', onPopoverHidden); this.removeEventListener($.EVENT_MOVE, $.preventDefault); $.trigger(this, 'hidden', this); }; var backdrop = (function() { var element = document.createElement('div'); element.classList.add(CLASS_BACKDROP); element.addEventListener($.EVENT_MOVE, $.preventDefault); element.addEventListener('tap', function(e) { var popover = $.targets._popover; if (popover) { popover.addEventListener('webkitTransitionEnd', onPopoverHidden); popover.classList.remove(CLASS_ACTIVE); removeBackdrop(popover); } }); return element; }()); var removeBackdropTimer; var removeBackdrop = function(popover) { backdrop.setAttribute('style', 'opacity:0'); $.targets.popover = $.targets._popover = null; //reset removeBackdropTimer = $.later(function() { if (!popover.classList.contains(CLASS_ACTIVE) && backdrop.parentNode && backdrop.parentNode === document.body) { document.body.removeChild(backdrop); } }, 350); }; window.addEventListener('tap', function(e) { if (!$.targets.popover) { return; } var toggle = false; var target = e.target; for (; target && target !== document; target = target.parentNode) { if (target === $.targets.popover) { toggle = true; } } if (toggle) { e.detail.gesture.preventDefault(); //fixed hashchange togglePopover($.targets._popover, $.targets.popover); } }); var togglePopover = function(popover, anchor, state) { if ((state === 'show' && popover.classList.contains(CLASS_ACTIVE)) || (state === 'hide' && !popover.classList.contains(CLASS_ACTIVE))) { return; } removeBackdropTimer && removeBackdropTimer.cancel(); //取消remove的timer //remove一遍,以免来回快速切换,导致webkitTransitionEnd不触发,无法remove popover.removeEventListener('webkitTransitionEnd', onPopoverShown); popover.removeEventListener('webkitTransitionEnd', onPopoverHidden); backdrop.classList.remove(CLASS_BAR_BACKDROP); backdrop.classList.remove(CLASS_ACTION_BACKDROP); var _popover = document.querySelector('.mui-popover.mui-active'); if (_popover) { // _popover.setAttribute('style', ''); _popover.addEventListener('webkitTransitionEnd', onPopoverHidden); _popover.classList.remove(CLASS_ACTIVE); // _popover.removeEventListener('webkitTransitionEnd', onPopoverHidden); //同一个弹出则直接返回,解决同一个popover的toggle if (popover === _popover) { removeBackdrop(_popover); return; } } var isActionSheet = false; if (popover.classList.contains(CLASS_BAR_POPOVER) || popover.classList.contains(CLASS_ACTION_POPOVER)) { //navBar if (popover.classList.contains(CLASS_ACTION_POPOVER)) { //action sheet popover isActionSheet = true; backdrop.classList.add(CLASS_ACTION_BACKDROP); } else { //bar popover backdrop.classList.add(CLASS_BAR_BACKDROP); // if (anchor) { // if (anchor.parentNode) { // var offsetWidth = anchor.offsetWidth; // var offsetLeft = anchor.offsetLeft; // var innerWidth = window.innerWidth; // popover.style.left = (Math.min(Math.max(offsetLeft, defaultPadding), innerWidth - offsetWidth - defaultPadding)) + "px"; // } else { // //TODO anchor is position:{left,top,bottom,right} // } // } } } setStyle(popover, 'block'); //actionsheet transform popover.offsetHeight; popover.classList.add(CLASS_ACTIVE); backdrop.setAttribute('style', ''); document.body.appendChild(backdrop); calPosition(popover, anchor, isActionSheet); //position backdrop.classList.add(CLASS_ACTIVE); popover.addEventListener('webkitTransitionEnd', onPopoverShown); }; var setStyle = function(popover, display, top, left) { var style = popover.style; if (typeof display !== 'undefined') style.display = display; if (typeof top !== 'undefined') style.top = top + 'px'; if (typeof left !== 'undefined') style.left = left + 'px'; }; var calPosition = function(popover, anchor, isActionSheet) { if (!popover || !anchor) { return; } if (isActionSheet) { //actionsheet setStyle(popover, 'block') return; } var wWidth = window.innerWidth; var wHeight = window.innerHeight; var pWidth = popover.offsetWidth; var pHeight = popover.offsetHeight; var aWidth = anchor.offsetWidth; var aHeight = anchor.offsetHeight; var offset = $.offset(anchor); var arrow = popover.querySelector('.' + CLASS_POPOVER_ARROW); if (!arrow) { arrow = document.createElement('div'); arrow.className = CLASS_POPOVER_ARROW; popover.appendChild(arrow); } var arrowSize = arrow && arrow.offsetWidth / 2 || 0; var pTop = 0; var pLeft = 0; var diff = 0; var arrowLeft = 0; var defaultPadding = popover.classList.contains(CLASS_ACTION_POPOVER) ? 0 : 5; var position = 'top'; if ((pHeight + arrowSize) < (offset.top - window.pageYOffset)) { //top pTop = offset.top - pHeight - arrowSize; } else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset) - aHeight)) { //bottom position = 'bottom'; pTop = offset.top + aHeight + arrowSize; } else { //middle position = 'middle'; pTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset, 0); pLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0); } if (position === 'top' || position === 'bottom') { pLeft = aWidth / 2 + offset.left - pWidth / 2; diff = pLeft; if (pLeft < defaultPadding) pLeft = defaultPadding; if (pLeft + pWidth > wWidth) pLeft = wWidth - pWidth - defaultPadding; if (arrow) { if (position === 'top') { arrow.classList.add(CLASS_BOTTOM); } else { arrow.classList.remove(CLASS_BOTTOM); } diff = diff - pLeft; arrowLeft = (pWidth / 2 - arrowSize / 2 + diff); arrowLeft = Math.max(Math.min(arrowLeft, pWidth - arrowSize * 2 - 6), 6); arrow.setAttribute('style', 'left:' + arrowLeft + 'px'); } } else if (position === 'middle') { arrow.setAttribute('style', 'display:none'); } setStyle(popover, 'block', pTop, pLeft); }; $.createMask = function(callback) { var element = document.createElement('div'); element.classList.add(CLASS_BACKDROP); element.addEventListener($.EVENT_MOVE, $.preventDefault); element.addEventListener('tap', function() { mask.close(); }); var mask = [element]; mask._show = false; mask.show = function() { mask._show = true; element.setAttribute('style', 'opacity:1'); document.body.appendChild(element); return mask; }; mask._remove = function() { if (mask._show) { mask._show = false; element.setAttribute('style', 'opacity:0'); $.later(function() { var body = document.body; element.parentNode === body && body.removeChild(element); }, 350); } return mask; }; mask.close = function() { if (callback) { if (callback() !== false) { mask._remove(); } } else { mask._remove(); } }; return mask; }; $.fn.popover = function() { var args = arguments; this.each(function() { $.targets._popover = this; if (args[0] === 'show' || args[0] === 'hide' || args[0] === 'toggle') { togglePopover(this, args[1], args[0]); } }); }; })(mui, window, document, 'popover'); /** * segmented-controllers * @param {type} $ * @param {type} window * @param {type} document * @param {type} undefined * @returns {undefined} */ (function($, window, document, name, undefined) { var CLASS_CONTROL_ITEM = 'mui-control-item'; var CLASS_SEGMENTED_CONTROL = 'mui-segmented-control'; var CLASS_SEGMENTED_CONTROL_VERTICAL = 'mui-segmented-control-vertical'; var CLASS_CONTROL_CONTENT = 'mui-control-content'; var CLASS_TAB_BAR = 'mui-bar-tab'; var CLASS_TAB_ITEM = 'mui-tab-item'; var CLASS_SLIDER_ITEM = 'mui-slider-item'; var handle = function(event, target) { if (target.classList && (target.classList.contains(CLASS_CONTROL_ITEM) || target.classList.contains(CLASS_TAB_ITEM))) { if (target.parentNode && target.parentNode.classList && target.parentNode.classList.contains(CLASS_SEGMENTED_CONTROL_VERTICAL)) { //vertical 如果preventDefault会导致无法滚动 } else { event.preventDefault(); // if(target.tagName == 'A') { // // fixed 底部选项卡href 无法跳转 && stop hash change // var curr_href = location.hostname + location.pathname, // target_href = target.hostname + target.pathname; // if (curr_href == target_href && target.hash !== "") { // event.preventDefault(); // return target; // }else{ // return false // } // } } // if (target.hash) { return target; // } } return false; }; $.registerTarget({ name: name, index: 80, handle: handle, target: false }); window.addEventListener('tap', function(e) { var targetTab = $.targets.tab; if (!targetTab) { return; } var activeTab; var activeBodies; var targetBody; var className = 'mui-active'; var classSelector = '.' + className; var segmentedControl = targetTab.parentNode; for (; segmentedControl && segmentedControl !== document; segmentedControl = segmentedControl.parentNode) { if (segmentedControl.classList.contains(CLASS_SEGMENTED_CONTROL)) { activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_CONTROL_ITEM); break; } else if (segmentedControl.classList.contains(CLASS_TAB_BAR)) { activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_TAB_ITEM); } } if (activeTab) { activeTab.classList.remove(className); } var isLastActive = targetTab === activeTab; if (targetTab) { targetTab.classList.add(className); } if (!targetTab.hash) { return; } targetBody = document.getElementById(targetTab.hash.replace('#', '')); if (!targetBody) { return; } if (!targetBody.classList.contains(CLASS_CONTROL_CONTENT)) { //tab bar popover targetTab.classList[isLastActive ? 'remove' : 'add'](className); return; } if (isLastActive) { //same return; } var parentNode = targetBody.parentNode; activeBodies = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT + classSelector); for (var i = 0; i < activeBodies.length; i++) { var activeBody = activeBodies[i]; activeBody.parentNode === parentNode && activeBody.classList.remove(className); } targetBody.classList.add(className); var contents = []; var _contents = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT); for (var i = 0; i < _contents.length; i++) { //查找直属子节点 _contents[i].parentNode === parentNode && (contents.push(_contents[i])); } $.trigger(targetBody, $.eventName('shown', name), { tabNumber: Array.prototype.indexOf.call(contents, targetBody) }); e.detail && e.detail.gesture.preventDefault(); //fixed hashchange }); })(mui, window, document, 'tab'); /** * Toggles switch * @param {type} $ * @param {type} window * @param {type} name * @returns {undefined} */ (function($, window, name) { var CLASS_SWITCH = 'mui-switch'; var CLASS_SWITCH_HANDLE = 'mui-switch-handle'; var CLASS_ACTIVE = 'mui-active'; var CLASS_DRAGGING = 'mui-dragging'; var CLASS_DISABLED = 'mui-disabled'; var SELECTOR_SWITCH_HANDLE = '.' + CLASS_SWITCH_HANDLE; var handle = function(event, target) { if (target.classList && target.classList.contains(CLASS_SWITCH)) { return target; } return false; }; $.registerTarget({ name: name, index: 100, handle: handle, target: false }); var Toggle = function(element) { this.element = element; this.classList = this.element.classList; this.handle = this.element.querySelector(SELECTOR_SWITCH_HANDLE); this.init(); this.initEvent(); }; Toggle.prototype.init = function() { this.toggleWidth = this.element.offsetWidth; this.handleWidth = this.handle.offsetWidth; this.handleX = this.toggleWidth - this.handleWidth - 3; }; Toggle.prototype.initEvent = function() { this.element.addEventListener($.EVENT_START, this); this.element.addEventListener('drag', this); this.element.addEventListener('swiperight', this); this.element.addEventListener($.EVENT_END, this); this.element.addEventListener($.EVENT_CANCEL, this); }; Toggle.prototype.handleEvent = function(e) { if (this.classList.contains(CLASS_DISABLED)) { return; } switch (e.type) { case $.EVENT_START: this.start(e); break; case 'drag': this.drag(e); break; case 'swiperight': this.swiperight(); break; case $.EVENT_END: case $.EVENT_CANCEL: this.end(e); break; } }; Toggle.prototype.start = function(e) { this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s'; this.classList.add(CLASS_DRAGGING); if (this.toggleWidth === 0 || this.handleWidth === 0) { //当switch处于隐藏状态时,width为0,需要重新初始化 this.init(); } }; Toggle.prototype.drag = function(e) { var detail = e.detail; if (!this.isDragging) { if (detail.direction === 'left' || detail.direction === 'right') { this.isDragging = true; this.lastChanged = undefined; this.initialState = this.classList.contains(CLASS_ACTIVE); } } if (this.isDragging) { this.setTranslateX(detail.deltaX); e.stopPropagation(); detail.gesture.preventDefault(); } }; Toggle.prototype.swiperight = function(e) { if (this.isDragging) { e.stopPropagation(); } }; Toggle.prototype.end = function(e) { this.classList.remove(CLASS_DRAGGING); if (this.isDragging) { this.isDragging = false; e.stopPropagation(); $.trigger(this.element, 'toggle', { isActive: this.classList.contains(CLASS_ACTIVE) }); } else { this.toggle(); } }; Toggle.prototype.toggle = function(animate) { var classList = this.classList; if (animate === false) { this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '0s'; } else { this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s'; } if (classList.contains(CLASS_ACTIVE)) { classList.remove(CLASS_ACTIVE); this.handle.style.webkitTransform = 'translate(0,0)'; } else { classList.add(CLASS_ACTIVE); this.handle.style.webkitTransform = 'translate(' + this.handleX + 'px,0)'; } $.trigger(this.element, 'toggle', { isActive: this.classList.contains(CLASS_ACTIVE) }); }; Toggle.prototype.setTranslateX = $.animationFrame(function(x) { if (!this.isDragging) { return; } var isChanged = false; if ((this.initialState && -x > (this.handleX / 2)) || (!this.initialState && x > (this.handleX / 2))) { isChanged = true; } if (this.lastChanged !== isChanged) { if (isChanged) { this.handle.style.webkitTransform = 'translate(' + (this.initialState ? 0 : this.handleX) + 'px,0)'; this.classList[this.initialState ? 'remove' : 'add'](CLASS_ACTIVE); } else { this.handle.style.webkitTransform = 'translate(' + (this.initialState ? this.handleX : 0) + 'px,0)'; this.classList[this.initialState ? 'add' : 'remove'](CLASS_ACTIVE); } this.lastChanged = isChanged; } }); $.fn['switch'] = function(options) { var switchApis = []; this.each(function() { var switchApi = null; var id = this.getAttribute('data-switch'); if (!id) { id = ++$.uuid; $.data[id] = new Toggle(this); this.setAttribute('data-switch', id); } else { switchApi = $.data[id]; } switchApis.push(switchApi); }); return switchApis.length > 1 ? switchApis : switchApis[0]; }; $.ready(function() { $('.' + CLASS_SWITCH)['switch'](); }); })(mui, window, 'toggle'); /** * Tableviews * @param {type} $ * @param {type} window * @param {type} document * @returns {undefined} */ (function($, window, document) { var CLASS_ACTIVE = 'mui-active'; var CLASS_SELECTED = 'mui-selected'; var CLASS_GRID_VIEW = 'mui-grid-view'; var CLASS_RADIO_VIEW = 'mui-table-view-radio'; var CLASS_TABLE_VIEW_CELL = 'mui-table-view-cell'; var CLASS_COLLAPSE_CONTENT = 'mui-collapse-content'; var CLASS_DISABLED = 'mui-disabled'; var CLASS_TOGGLE = 'mui-switch'; var CLASS_BTN = 'mui-btn'; var CLASS_SLIDER_HANDLE = 'mui-slider-handle'; var CLASS_SLIDER_LEFT = 'mui-slider-left'; var CLASS_SLIDER_RIGHT = 'mui-slider-right'; var CLASS_TRANSITIONING = 'mui-transitioning'; var SELECTOR_SLIDER_HANDLE = '.' + CLASS_SLIDER_HANDLE; var SELECTOR_SLIDER_LEFT = '.' + CLASS_SLIDER_LEFT; var SELECTOR_SLIDER_RIGHT = '.' + CLASS_SLIDER_RIGHT; var SELECTOR_SELECTED = '.' + CLASS_SELECTED; var SELECTOR_BUTTON = '.' + CLASS_BTN; var overFactor = 0.8; var cell, a; var isMoved = isOpened = openedActions = progress = false; var sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false; var timer = translateX = lastTranslateX = sliderActionLeftWidth = sliderActionRightWidth = 0; var toggleActive = function(isActive) { if (isActive) { if (a) { a.classList.add(CLASS_ACTIVE); } else if (cell) { cell.classList.add(CLASS_ACTIVE); } } else { timer && timer.cancel(); if (a) { a.classList.remove(CLASS_ACTIVE); } else if (cell) { cell.classList.remove(CLASS_ACTIVE); } } }; var updateTranslate = function() { if (translateX !== lastTranslateX) { if (buttonsRight && buttonsRight.length > 0) { progress = translateX / sliderActionRightWidth; if (translateX < -sliderActionRightWidth) { translateX = -sliderActionRightWidth - Math.pow(-translateX - sliderActionRightWidth, overFactor); } for (var i = 0, len = buttonsRight.length; i < len; i++) { var buttonRight = buttonsRight[i]; if (typeof buttonRight._buttonOffset === 'undefined') { buttonRight._buttonOffset = buttonRight.offsetLeft; } buttonOffset = buttonRight._buttonOffset; setTranslate(buttonRight, (translateX - buttonOffset * (1 + Math.max(progress, -1)))); } } if (buttonsLeft && buttonsLeft.length > 0) { progress = translateX / sliderActionLeftWidth; if (translateX > sliderActionLeftWidth) { translateX = sliderActionLeftWidth + Math.pow(translateX - sliderActionLeftWidth, overFactor); } for (var i = 0, len = buttonsLeft.length; i < len; i++) { var buttonLeft = buttonsLeft[i]; if (typeof buttonLeft._buttonOffset === 'undefined') { buttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth; } buttonOffset = buttonLeft._buttonOffset; if (buttonsLeft.length > 1) { buttonLeft.style.zIndex = buttonsLeft.length - i; } setTranslate(buttonLeft, (translateX + buttonOffset * (1 - Math.min(progress, 1)))); } } setTranslate(sliderHandle, translateX); lastTranslateX = translateX; } sliderRequestAnimationFrame = requestAnimationFrame(function() { updateTranslate(); }); }; var setTranslate = function(element, x) { if (element) { element.style.webkitTransform = 'translate(' + x + 'px,0)'; } }; window.addEventListener($.EVENT_START, function(event) { if (cell) { toggleActive(false); } cell = a = false; isMoved = isOpened = openedActions = false; var target = event.target; var isDisabled = false; for (; target && target !== document; target = target.parentNode) { if (target.classList) { var classList = target.classList; if ((target.tagName === 'INPUT' && target.type !== 'radio' && target.type !== 'checkbox') || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN) || classList.contains(CLASS_DISABLED)) { isDisabled = true; } if (classList.contains(CLASS_COLLAPSE_CONTENT)) { //collapse content break; } if (classList.contains(CLASS_TABLE_VIEW_CELL)) { cell = target; //TODO swipe to delete close var selected = cell.parentNode.querySelector(SELECTOR_SELECTED); if (!cell.parentNode.classList.contains(CLASS_RADIO_VIEW) && selected && selected !== cell) { $.swipeoutClose(selected); cell = isDisabled = false; return; } if (!cell.parentNode.classList.contains(CLASS_GRID_VIEW)) { var link = cell.querySelector('a'); if (link && link.parentNode === cell) { //li>a a = link; } } var handle = cell.querySelector(SELECTOR_SLIDER_HANDLE); if (handle) { toggleEvents(cell); event.stopPropagation(); } if (!isDisabled) { if (handle) { if (timer) { timer.cancel(); } timer = $.later(function() { toggleActive(true); }, 100); } else { toggleActive(true); } } break; } } } }); window.addEventListener($.EVENT_MOVE, function(event) { toggleActive(false); }); var handleEvent = { handleEvent: function(event) { switch (event.type) { case 'drag': this.drag(event); break; case 'dragend': this.dragend(event); break; case 'flick': this.flick(event); break; case 'swiperight': this.swiperight(event); break; case 'swipeleft': this.swipeleft(event); break; } }, drag: function(event) { if (!cell) { return; } if (!isMoved) { //init sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false; sliderHandle = cell.querySelector(SELECTOR_SLIDER_HANDLE); if (sliderHandle) { sliderActionLeft = cell.querySelector(SELECTOR_SLIDER_LEFT); sliderActionRight = cell.querySelector(SELECTOR_SLIDER_RIGHT); if (sliderActionLeft) { sliderActionLeftWidth = sliderActionLeft.offsetWidth; buttonsLeft = sliderActionLeft.querySelectorAll(SELECTOR_BUTTON); } if (sliderActionRight) { sliderActionRightWidth = sliderActionRight.offsetWidth; buttonsRight = sliderActionRight.querySelectorAll(SELECTOR_BUTTON); } cell.classList.remove(CLASS_TRANSITIONING); isOpened = cell.classList.contains(CLASS_SELECTED); if (isOpened) { openedActions = cell.querySelector(SELECTOR_SLIDER_LEFT + SELECTOR_SELECTED) ? 'left' : 'right'; } } } var detail = event.detail; var direction = detail.direction; var angle = detail.angle; if (direction === 'left' && (angle > 150 || angle < -150)) { if (buttonsRight || (buttonsLeft && isOpened)) { //存在右侧按钮或存在左侧按钮且是已打开状态 isMoved = true; } } else if (direction === 'right' && (angle > -30 && angle < 30)) { if (buttonsLeft || (buttonsRight && isOpened)) { //存在左侧按钮或存在右侧按钮且是已打开状态 isMoved = true; } } if (isMoved) { event.stopPropagation(); event.detail.gesture.preventDefault(); var translate = event.detail.deltaX; if (isOpened) { if (openedActions === 'right') { translate = translate - sliderActionRightWidth; } else { translate = translate + sliderActionLeftWidth; } } if ((translate > 0 && !buttonsLeft) || (translate < 0 && !buttonsRight)) { if (!isOpened) { return; } translate = 0; } if (translate < 0) { sliderDirection = 'toLeft'; } else if (translate > 0) { sliderDirection = 'toRight'; } else { if (!sliderDirection) { sliderDirection = 'toLeft'; } } if (!sliderRequestAnimationFrame) { updateTranslate(); } translateX = translate; } }, flick: function(event) { if (isMoved) { event.stopPropagation(); } }, swipeleft: function(event) { if (isMoved) { event.stopPropagation(); } }, swiperight: function(event) { if (isMoved) { event.stopPropagation(); } }, dragend: function(event) { if (!isMoved) { return; } event.stopPropagation(); if (sliderRequestAnimationFrame) { cancelAnimationFrame(sliderRequestAnimationFrame); sliderRequestAnimationFrame = null; } var detail = event.detail; isMoved = false; var action = 'close'; var actionsWidth = sliderDirection === 'toLeft' ? sliderActionRightWidth : sliderActionLeftWidth; var isToggle = detail.swipe || (Math.abs(translateX) > actionsWidth / 2); if (isToggle) { if (!isOpened) { action = 'open'; } else if (detail.direction === 'left' && openedActions === 'right') { action = 'open'; } else if (detail.direction === 'right' && openedActions === 'left') { action = 'open'; } } cell.classList.add(CLASS_TRANSITIONING); var buttons; if (action === 'open') { var newTranslate = sliderDirection === 'toLeft' ? -actionsWidth : actionsWidth; setTranslate(sliderHandle, newTranslate); buttons = sliderDirection === 'toLeft' ? buttonsRight : buttonsLeft; if (typeof buttons !== 'undefined') { var button = null; for (var i = 0; i < buttons.length; i++) { button = buttons[i]; setTranslate(button, newTranslate); } button.parentNode.classList.add(CLASS_SELECTED); cell.classList.add(CLASS_SELECTED); if (!isOpened) { $.trigger(cell, sliderDirection === 'toLeft' ? 'slideleft' : 'slideright'); } } } else { setTranslate(sliderHandle, 0); sliderActionLeft && sliderActionLeft.classList.remove(CLASS_SELECTED); sliderActionRight && sliderActionRight.classList.remove(CLASS_SELECTED); cell.classList.remove(CLASS_SELECTED); } var buttonOffset; if (buttonsLeft && buttonsLeft.length > 0 && buttonsLeft !== buttons) { for (var i = 0, len = buttonsLeft.length; i < len; i++) { var buttonLeft = buttonsLeft[i]; buttonOffset = buttonLeft._buttonOffset; if (typeof buttonOffset === 'undefined') { buttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth; } setTranslate(buttonLeft, buttonOffset); } } if (buttonsRight && buttonsRight.length > 0 && buttonsRight !== buttons) { for (var i = 0, len = buttonsRight.length; i < len; i++) { var buttonRight = buttonsRight[i]; buttonOffset = buttonRight._buttonOffset; if (typeof buttonOffset === 'undefined') { buttonRight._buttonOffset = buttonRight.offsetLeft; } setTranslate(buttonRight, -buttonOffset); } } } }; function toggleEvents(element, isRemove) { var method = !!isRemove ? 'removeEventListener' : 'addEventListener'; element[method]('drag', handleEvent); element[method]('dragend', handleEvent); element[method]('swiperight', handleEvent); element[method]('swipeleft', handleEvent); element[method]('flick', handleEvent); }; /** * 打开滑动菜单 * @param {Object} el * @param {Object} direction */ $.swipeoutOpen = function(el, direction) { if (!el) return; var classList = el.classList; if (classList.contains(CLASS_SELECTED)) return; if (!direction) { if (el.querySelector(SELECTOR_SLIDER_RIGHT)) { direction = 'right'; } else { direction = 'left'; } } var swipeoutAction = el.querySelector($.classSelector(".slider-" + direction)); if (!swipeoutAction) return; swipeoutAction.classList.add(CLASS_SELECTED); classList.add(CLASS_SELECTED); classList.remove(CLASS_TRANSITIONING); var buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON); var swipeoutWidth = swipeoutAction.offsetWidth; var translate = (direction === 'right') ? -swipeoutWidth : swipeoutWidth; var length = buttons.length; var button; for (var i = 0; i < length; i++) { button = buttons[i]; if (direction === 'right') { setTranslate(button, -button.offsetLeft); } else { setTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft)); } } classList.add(CLASS_TRANSITIONING); for (var i = 0; i < length; i++) { setTranslate(buttons[i], translate); } setTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), translate); }; /** * 关闭滑动菜单 * @param {Object} el */ $.swipeoutClose = function(el) { if (!el) return; var classList = el.classList; if (!classList.contains(CLASS_SELECTED)) return; var direction = el.querySelector(SELECTOR_SLIDER_RIGHT + SELECTOR_SELECTED) ? 'right' : 'left'; var swipeoutAction = el.querySelector($.classSelector(".slider-" + direction)); if (!swipeoutAction) return; swipeoutAction.classList.remove(CLASS_SELECTED); classList.remove(CLASS_SELECTED); classList.add(CLASS_TRANSITIONING); var buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON); var swipeoutWidth = swipeoutAction.offsetWidth; var length = buttons.length; var button; setTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), 0); for (var i = 0; i < length; i++) { button = buttons[i]; if (direction === 'right') { setTranslate(button, (-button.offsetLeft)); } else { setTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft)); } } }; window.addEventListener($.EVENT_END, function(event) { //使用touchend来取消高亮,避免一次点击既不触发tap,doubletap,longtap的事件 if (!cell) { return; } toggleActive(false); sliderHandle && toggleEvents(cell, true); }); window.addEventListener($.EVENT_CANCEL, function(event) { //使用touchcancel来取消高亮,避免一次点击既不触发tap,doubletap,longtap的事件 if (!cell) { return; } toggleActive(false); sliderHandle && toggleEvents(cell, true); }); var radioOrCheckboxClick = function(event) { var type = event.target && event.target.type || ''; if (type === 'radio' || type === 'checkbox') { return; } var classList = cell.classList; if (classList.contains('mui-radio')) { var input = cell.querySelector('input[type=radio]'); if (input) { // input.click(); if (!input.disabled && !input.readOnly) { input.checked = !input.checked; $.trigger(input, 'change'); } } } else if (classList.contains('mui-checkbox')) { var input = cell.querySelector('input[type=checkbox]'); if (input) { // input.click(); if (!input.disabled && !input.readOnly) { input.checked = !input.checked; $.trigger(input, 'change'); } } } }; //fixed hashchange(android) window.addEventListener($.EVENT_CLICK, function(e) { if (cell && cell.classList.contains('mui-collapse')) { e.preventDefault(); } }); window.addEventListener('doubletap', function(event) { if (cell) { radioOrCheckboxClick(event); } }); var preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/; window.addEventListener('tap', function(event) { if (!cell) { return; } var isExpand = false; var classList = cell.classList; var ul = cell.parentNode; if (ul && ul.classList.contains(CLASS_RADIO_VIEW)) { if (classList.contains(CLASS_SELECTED)) { return; } var selected = ul.querySelector('li' + SELECTOR_SELECTED); if (selected) { selected.classList.remove(CLASS_SELECTED); } classList.add(CLASS_SELECTED); $.trigger(cell, 'selected', { el: cell }); return; } if (classList.contains('mui-collapse') && !cell.parentNode.classList.contains('mui-unfold')) { if (!preventDefaultException.test(event.target.tagName)) { event.detail.gesture.preventDefault(); } if (!classList.contains(CLASS_ACTIVE)) { //展开时,需要收缩其他同类 var collapse = cell.parentNode.querySelector('.mui-collapse.mui-active'); if (collapse) { collapse.classList.remove(CLASS_ACTIVE); } isExpand = true; } classList.toggle(CLASS_ACTIVE); if (isExpand) { //触发展开事件 $.trigger(cell, 'expand'); //scroll //暂不滚动 // var offsetTop = $.offset(cell).top; // var scrollTop = document.body.scrollTop; // var height = window.innerHeight; // var offsetHeight = cell.offsetHeight; // var cellHeight = (offsetTop - scrollTop + offsetHeight); // if (offsetHeight > height) { // $.scrollTo(offsetTop, 300); // } else if (cellHeight > height) { // $.scrollTo(cellHeight - height + scrollTop, 300); // } } } else { radioOrCheckboxClick(event); } }); })(mui, window, document); (function($, window) { /** * 警告消息框 */ $.alert = function(message, title, btnValue, callback) { if ($.os.plus) { if (typeof message === 'undefined') { return; } else { if (typeof title === 'function') { callback = title; title = null; btnValue = '确定'; } else if (typeof btnValue === 'function') { callback = btnValue; btnValue = null; } $.plusReady(function() { plus.nativeUI.alert(message, callback, title, btnValue); }); } } else { //TODO H5版本 window.alert(message); } }; })(mui, window); (function($, window) { /** * 确认消息框 */ $.confirm = function(message, title, btnArray, callback) { if ($.os.plus) { if (typeof message === 'undefined') { return; } else { if (typeof title === 'function') { callback = title; title = null; btnArray = null; } else if (typeof btnArray === 'function') { callback = btnArray; btnArray = null; } $.plusReady(function() { plus.nativeUI.confirm(message, callback, title, btnArray); }); } } else { //H5版本,0为确认,1为取消 if (window.confirm(message)) { callback({ index: 0 }); } else { callback({ index: 1 }); } } }; })(mui, window); (function($, window) { /** * 输入对话框 */ $.prompt = function(text, defaultText, title, btnArray, callback) { if ($.os.plus) { if (typeof message === 'undefined') { return; } else { if (typeof defaultText === 'function') { callback = defaultText; defaultText = null; title = null; btnArray = null; } else if (typeof title === 'function') { callback = title; title = null; btnArray = null; } else if (typeof btnArray === 'function') { callback = btnArray; btnArray = null; } $.plusReady(function() { plus.nativeUI.prompt(text, callback, title, defaultText, btnArray); }); } } else { //H5版本(确认index为0,取消index为1) var result = window.prompt(text); if (result) { callback({ index: 0, value: result }); } else { callback({ index: 1, value: '' }); } } }; })(mui, window); (function($, window) { var CLASS_ACTIVE = 'mui-active'; /** * 自动消失提示框 */ $.toast = function(message,options) { var durations = { 'long': 3500, 'short': 2000 }; //计算显示时间 options = $.extend({ duration: 'short' }, options || {}); if ($.os.plus && options.type !== 'div') { //默认显示在底部; $.plusReady(function() { plus.nativeUI.toast(message, { verticalAlign: 'bottom', duration:options.duration }); }); } else { if (typeof options.duration === 'number') { duration = options.duration>0 ? options.duration:durations['short']; } else { duration = durations[options.duration]; } if (!duration) { duration = durations['short']; } var toast = document.createElement('div'); toast.classList.add('mui-toast-container'); toast.innerHTML = '
' + message + '
'; toast.addEventListener('webkitTransitionEnd', function() { if (!toast.classList.contains(CLASS_ACTIVE)) { toast.parentNode.removeChild(toast); toast = null; } }); //点击则自动消失 toast.addEventListener('click', function() { toast.parentNode.removeChild(toast); toast = null; }); document.body.appendChild(toast); toast.offsetHeight; toast.classList.add(CLASS_ACTIVE); setTimeout(function() { toast && toast.classList.remove(CLASS_ACTIVE); }, duration); return { isVisible: function() {return !!toast;} } } }; })(mui, window); /** * Popup(alert,confirm,prompt) * @param {Object} $ * @param {Object} window * @param {Object} document */ (function($, window, document) { var CLASS_POPUP = 'mui-popup'; var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop'; var CLASS_POPUP_IN = 'mui-popup-in'; var CLASS_POPUP_OUT = 'mui-popup-out'; var CLASS_POPUP_INNER = 'mui-popup-inner'; var CLASS_POPUP_TITLE = 'mui-popup-title'; var CLASS_POPUP_TEXT = 'mui-popup-text'; var CLASS_POPUP_INPUT = 'mui-popup-input'; var CLASS_POPUP_BUTTONS = 'mui-popup-buttons'; var CLASS_POPUP_BUTTON = 'mui-popup-button'; var CLASS_POPUP_BUTTON_BOLD = 'mui-popup-button-bold'; var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop'; var CLASS_ACTIVE = 'mui-active'; var popupStack = []; var backdrop = (function() { var element = document.createElement('div'); element.classList.add(CLASS_POPUP_BACKDROP); element.addEventListener($.EVENT_MOVE, $.preventDefault); element.addEventListener('webkitTransitionEnd', function() { if (!this.classList.contains(CLASS_ACTIVE)) { element.parentNode && element.parentNode.removeChild(element); } }); return element; }()); var createInput = function(placeholder) { return '
'; }; var createInner = function(message, title, extra) { return '
' + title + '
' + message.replace(/\r\n/g, "
").replace(/\n/g, "
") + '
' + (extra || '') + '
'; }; var createButtons = function(btnArray) { var length = btnArray.length; var btns = []; for (var i = 0; i < length; i++) { btns.push('' + btnArray[i] + ''); } return '
' + btns.join('') + '
'; }; var createPopup = function(html, callback) { var popupElement = document.createElement('div'); popupElement.className = CLASS_POPUP; popupElement.innerHTML = html; var removePopupElement = function() { popupElement.parentNode && popupElement.parentNode.removeChild(popupElement); popupElement = null; }; popupElement.addEventListener($.EVENT_MOVE, $.preventDefault); popupElement.addEventListener('webkitTransitionEnd', function(e) { if (popupElement && e.target === popupElement && popupElement.classList.contains(CLASS_POPUP_OUT)) { removePopupElement(); } }); popupElement.style.display = 'block'; document.body.appendChild(popupElement); popupElement.offsetHeight; popupElement.classList.add(CLASS_POPUP_IN); if (!backdrop.classList.contains(CLASS_ACTIVE)) { backdrop.style.display = 'block'; document.body.appendChild(backdrop); backdrop.offsetHeight; backdrop.classList.add(CLASS_ACTIVE); } var btns = $.qsa('.' + CLASS_POPUP_BUTTON, popupElement); var input = popupElement.querySelector('.' + CLASS_POPUP_INPUT + ' input'); var popup = { element: popupElement, close: function(index, animate) { if (popupElement) { var result = callback && callback({ index: index || 0, value: input && input.value || '' }); if (result === false) { //返回false则不关闭当前popup return; } if (animate !== false) { popupElement.classList.remove(CLASS_POPUP_IN); popupElement.classList.add(CLASS_POPUP_OUT); } else { removePopupElement(); } popupStack.pop(); //如果还有其他popup,则不remove backdrop if (popupStack.length) { popupStack[popupStack.length - 1]['show'](animate); } else { backdrop.classList.remove(CLASS_ACTIVE); } } } }; var handleEvent = function(e) { popup.close(btns.indexOf(e.target)); }; $(popupElement).on('tap', '.' + CLASS_POPUP_BUTTON, handleEvent); if (popupStack.length) { popupStack[popupStack.length - 1]['hide'](); } popupStack.push({ close: popup.close, show: function(animate) { popupElement.style.display = 'block'; popupElement.offsetHeight; popupElement.classList.add(CLASS_POPUP_IN); }, hide: function() { popupElement.style.display = 'none'; popupElement.classList.remove(CLASS_POPUP_IN); } }); return popup; }; var createAlert = function(message, title, btnValue, callback, type) { if (typeof message === 'undefined') { return; } else { if (typeof title === 'function') { callback = title; type = btnValue; title = null; btnValue = null; } else if (typeof btnValue === 'function') { type = callback; callback = btnValue; btnValue = null; } } if (!$.os.plus || type === 'div') { return createPopup(createInner(message, title || '提示') + createButtons([btnValue || '确定']), callback); } return plus.nativeUI.alert(message, callback, title || '提示', btnValue || '确定'); }; var createConfirm = function(message, title, btnArray, callback, type) { if (typeof message === 'undefined') { return; } else { if (typeof title === 'function') { callback = title; type = btnArray; title = null; btnArray = null; } else if (typeof btnArray === 'function') { type = callback; callback = btnArray; btnArray = null; } } if (!$.os.plus || type === 'div') { return createPopup(createInner(message, title || '提示') + createButtons(btnArray || ['取消', '确认']), callback); } return plus.nativeUI.confirm(message, callback, title, btnArray || ['取消', '确认']); }; var createPrompt = function(message, placeholder, title, btnArray, callback, type) { if (typeof message === 'undefined') { return; } else { if (typeof placeholder === 'function') { callback = placeholder; type = title; placeholder = null; title = null; btnArray = null; } else if (typeof title === 'function') { callback = title; type = btnArray; title = null; btnArray = null; } else if (typeof btnArray === 'function') { type = callback; callback = btnArray; btnArray = null; } } if (!$.os.plus || type === 'div') { return createPopup(createInner(message, title || '提示', createInput(placeholder)) + createButtons(btnArray || ['取消', '确认']), callback); } return plus.nativeUI.prompt(message, callback, title || '提示', placeholder, btnArray || ['取消', '确认']); }; var closePopup = function() { if (popupStack.length) { popupStack[popupStack.length - 1]['close'](); return true; } else { return false; } }; var closePopups = function() { while (popupStack.length) { popupStack[popupStack.length - 1]['close'](); } }; $.closePopup = closePopup; $.closePopups = closePopups; $.alert = createAlert; $.confirm = createConfirm; $.prompt = createPrompt; })(mui, window, document); (function($, document) { var CLASS_PROGRESSBAR = 'mui-progressbar'; var CLASS_PROGRESSBAR_IN = 'mui-progressbar-in'; var CLASS_PROGRESSBAR_OUT = 'mui-progressbar-out'; var CLASS_PROGRESSBAR_INFINITE = 'mui-progressbar-infinite'; var SELECTOR_PROGRESSBAR = '.mui-progressbar'; var _findProgressbar = function(container) { container = $(container || 'body'); if (container.length === 0) return; container = container[0]; if (container.classList.contains(CLASS_PROGRESSBAR)) { return container; } var progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR); if (progressbars) { for (var i = 0, len = progressbars.length; i < len; i++) { var progressbar = progressbars[i]; if (progressbar.parentNode === container) { return progressbar; } } } }; /** * 创建并显示进度条 * @param {Object} container 可选,默认body,支持selector,DOM Node,mui wrapper * @param {Object} progress 可选,undefined表示循环,数字表示具体进度 * @param {Object} color 可选,指定颜色样式(目前暂未提供实际样式,可暂时不暴露此参数) */ var showProgressbar = function(container, progress, color) { if (typeof container === 'number') { color = progress; progress = container; container = 'body'; } container = $(container || 'body'); if (container.length === 0) return; container = container[0]; var progressbar; if (container.classList.contains(CLASS_PROGRESSBAR)) { progressbar = container; } else { var progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR + ':not(.' + CLASS_PROGRESSBAR_OUT + ')'); if (progressbars) { for (var i = 0, len = progressbars.length; i < len; i++) { var _progressbar = progressbars[i]; if (_progressbar.parentNode === container) { progressbar = _progressbar; break; } } } if (!progressbar) { progressbar = document.createElement('span'); progressbar.className = CLASS_PROGRESSBAR + ' ' + CLASS_PROGRESSBAR_IN + (typeof progress !== 'undefined' ? '' : (' ' + CLASS_PROGRESSBAR_INFINITE)) + (color ? (' ' + CLASS_PROGRESSBAR + '-' + color) : ''); if (typeof progress !== 'undefined') { progressbar.innerHTML = ''; } container.appendChild(progressbar); } else { progressbar.classList.add(CLASS_PROGRESSBAR_IN); } } if (progress) setProgressbar(container, progress); return progressbar; }; /** * 关闭进度条 * @param {Object} container 可选,默认body,支持selector,DOM Node,mui wrapper */ var hideProgressbar = function(container) { var progressbar = _findProgressbar(container); if (!progressbar) { return; } var classList = progressbar.classList; if (!classList.contains(CLASS_PROGRESSBAR_IN) || classList.contains(CLASS_PROGRESSBAR_OUT)) { return; } classList.remove(CLASS_PROGRESSBAR_IN); classList.add(CLASS_PROGRESSBAR_OUT); progressbar.addEventListener('webkitAnimationEnd', function() { progressbar.parentNode && progressbar.parentNode.removeChild(progressbar); progressbar = null; }); return; }; /** * 设置指定进度条进度 * @param {Object} container 可选,默认body,支持selector,DOM Node,mui wrapper * @param {Object} progress 可选,默认0 取值范围[0-100] * @param {Object} speed 进度条动画时间 */ var setProgressbar = function(container, progress, speed) { if (typeof container === 'number') { speed = progress; progress = container; container = false; } var progressbar = _findProgressbar(container); if (!progressbar || progressbar.classList.contains(CLASS_PROGRESSBAR_INFINITE)) { return; } if (progress) progress = Math.min(Math.max(progress, 0), 100); progressbar.offsetHeight; var span = progressbar.querySelector('span'); if (span) { var style = span.style; style.webkitTransform = 'translate3d(' + (-100 + progress) + '%,0,0)'; if (typeof speed !== 'undefined') { style.webkitTransitionDuration = speed + 'ms'; } else { style.webkitTransitionDuration = ''; } } return progressbar; }; $.fn.progressbar = function(options) { var progressbarApis = []; options = options || {}; this.each(function() { var self = this; var progressbarApi = self.mui_plugin_progressbar; if (!progressbarApi) { self.mui_plugin_progressbar = progressbarApi = { options: options, setOptions: function(options) { this.options = options; }, show: function() { return showProgressbar(self, this.options.progress, this.options.color); }, setProgress: function(progress) { return setProgressbar(self, progress); }, hide: function() { return hideProgressbar(self); } }; } else if (options) { progressbarApi.setOptions(options); } progressbarApis.push(progressbarApi); }); return progressbarApis.length === 1 ? progressbarApis[0] : progressbarApis; }; // $.setProgressbar = setProgressbar; // $.showProgressbar = showProgressbar; // $.hideProgressbar = hideProgressbar; })(mui, document); /** * Input(TODO resize) * @param {type} $ * @param {type} window * @param {type} document * @returns {undefined} */ (function($, window, document) { var CLASS_ICON = 'mui-icon'; var CLASS_ICON_CLEAR = 'mui-icon-clear'; var CLASS_ICON_SPEECH = 'mui-icon-speech'; var CLASS_ICON_SEARCH = 'mui-icon-search'; var CLASS_ICON_PASSWORD = 'mui-icon-eye'; var CLASS_INPUT_ROW = 'mui-input-row'; var CLASS_PLACEHOLDER = 'mui-placeholder'; var CLASS_TOOLTIP = 'mui-tooltip'; var CLASS_HIDDEN = 'mui-hidden'; var CLASS_FOCUSIN = 'mui-focusin'; var SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR; var SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH; var SELECTOR_ICON_PASSWORD = '.' + CLASS_ICON_PASSWORD; var SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER; var SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP; var findRow = function(target) { for (; target && target !== document; target = target.parentNode) { if (target.classList && target.classList.contains(CLASS_INPUT_ROW)) { return target; } } return null; }; var Input = function(element, options) { this.element = element; this.options = options || { actions: 'clear' }; if (~this.options.actions.indexOf('slider')) { //slider this.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN; this.sliderActionSelector = SELECTOR_TOOLTIP; } else { //clear,speech,search if (~this.options.actions.indexOf('clear')) { this.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + ' ' + CLASS_HIDDEN; this.clearActionSelector = SELECTOR_ICON_CLOSE; } if (~this.options.actions.indexOf('speech')) { //only for 5+ this.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH; this.speechActionSelector = SELECTOR_ICON_SPEECH; } if (~this.options.actions.indexOf('search')) { this.searchActionClass = CLASS_PLACEHOLDER; this.searchActionSelector = SELECTOR_PLACEHOLDER; } if (~this.options.actions.indexOf('password')) { this.passwordActionClass = CLASS_ICON + ' ' + CLASS_ICON_PASSWORD; this.passwordActionSelector = SELECTOR_ICON_PASSWORD; } } this.init(); }; Input.prototype.init = function() { this.initAction(); this.initElementEvent(); }; Input.prototype.initAction = function() { var self = this; var row = self.element.parentNode; if (row) { if (self.sliderActionClass) { self.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector); } else { if (self.searchActionClass) { self.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector); self.searchAction.addEventListener('tap', function(e) { $.focus(self.element); e.stopPropagation(); }); } if (self.speechActionClass) { self.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector); self.speechAction.addEventListener('click', $.stopPropagation); self.speechAction.addEventListener('tap', function(event) { self.speechActionClick(event); }); } if (self.clearActionClass) { self.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector); self.clearAction.addEventListener('tap', function(event) { self.clearActionClick(event); }); } if (self.passwordActionClass) { self.passwordAction = self.createAction(row, self.passwordActionClass, self.passwordActionSelector); self.passwordAction.addEventListener('tap', function(event) { self.passwordActionClick(event); }); } } } }; Input.prototype.createAction = function(row, actionClass, actionSelector) { var action = row.querySelector(actionSelector); if (!action) { var action = document.createElement('span'); action.className = actionClass; if (actionClass === this.searchActionClass) { action.innerHTML = '' + this.element.getAttribute('placeholder') + ''; this.element.setAttribute('placeholder', ''); if (this.element.value.trim()) { row.classList.add('mui-active'); } } row.insertBefore(action, this.element.nextSibling); } return action; }; Input.prototype.initElementEvent = function() { var element = this.element; if (this.sliderActionClass) { var tooltip = this.sliderAction; var timer = null; var showTip = function() { //每次重新计算是因为控件可能被隐藏,初始化时计算是不正确的 tooltip.classList.remove(CLASS_HIDDEN); var offsetLeft = element.offsetLeft; var width = element.offsetWidth - 28; var tooltipWidth = tooltip.offsetWidth; var distince = Math.abs(element.max - element.min); var scaleWidth = (width / distince) * Math.abs(element.value - element.min); tooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px'; tooltip.innerText = element.value; if (timer) { clearTimeout(timer); } timer = setTimeout(function() { tooltip.classList.add(CLASS_HIDDEN); }, 1000); }; element.addEventListener('input', showTip); element.addEventListener('tap', showTip); element.addEventListener($.EVENT_MOVE, function(e) { e.stopPropagation(); }); } else { if (this.clearActionClass) { var action = this.clearAction; if (!action) { return; } $.each(['keyup', 'change', 'input', 'focus', 'cut', 'paste'], function(index, type) { (function(type) { element.addEventListener(type, function() { action.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN); }); })(type); }); element.addEventListener('blur', function() { action.classList.add(CLASS_HIDDEN); }); } if (this.searchActionClass) { element.addEventListener('focus', function() { element.parentNode.classList.add('mui-active'); }); element.addEventListener('blur', function() { if (!element.value.trim()) { element.parentNode.classList.remove('mui-active'); } }); } } }; Input.prototype.setPlaceholder = function(text) { if (this.searchActionClass) { var placeholder = this.element.parentNode.querySelector(SELECTOR_PLACEHOLDER); placeholder && (placeholder.getElementsByTagName('span')[1].innerText = text); } else { this.element.setAttribute('placeholder', text); } }; Input.prototype.passwordActionClick = function(event) { if (this.element.type === 'text') { this.element.type = 'password'; } else { this.element.type = 'text'; } this.passwordAction.classList.toggle('mui-active'); event.preventDefault(); }; Input.prototype.clearActionClick = function(event) { var self = this; self.element.value = ''; $.focus(self.element); self.clearAction.classList.add(CLASS_HIDDEN); event.preventDefault(); }; Input.prototype.speechActionClick = function(event) { if (window.plus) { var self = this; var oldValue = self.element.value; self.element.value = ''; document.body.classList.add(CLASS_FOCUSIN); plus.speech.startRecognize({ engine: 'iFly' }, function(s) { self.element.value += s; $.focus(self.element); plus.speech.stopRecognize(); $.trigger(self.element, 'recognized', { value: self.element.value }); if (oldValue !== self.element.value) { $.trigger(self.element, 'change'); $.trigger(self.element, 'input'); } // document.body.classList.remove(CLASS_FOCUSIN); }, function(e) { document.body.classList.remove(CLASS_FOCUSIN); }); } else { alert('only for 5+'); } event.preventDefault(); }; $.fn.input = function(options) { var inputApis = []; this.each(function() { var inputApi = null; var actions = []; var row = findRow(this.parentNode); if (this.type === 'range' && row.classList.contains('mui-input-range')) { actions.push('slider'); } else { var classList = this.classList; if (classList.contains('mui-input-clear')) { actions.push('clear'); } if (!($.os.android && $.os.stream) && classList.contains('mui-input-speech')) { actions.push('speech'); } if (classList.contains('mui-input-password')) { actions.push('password'); } if (this.type === 'search' && row.classList.contains('mui-search')) { actions.push('search'); } } var id = this.getAttribute('data-input-' + actions[0]); if (!id) { id = ++$.uuid; inputApi = $.data[id] = new Input(this, { actions: actions.join(',') }); for (var i = 0, len = actions.length; i < len; i++) { this.setAttribute('data-input-' + actions[i], id); } } else { inputApi = $.data[id]; } inputApis.push(inputApi); }); return inputApis.length === 1 ? inputApis[0] : inputApis; }; $.ready(function() { $('.mui-input-row input').input(); }); })(mui, window, document); (function($, window) { var CLASS_ACTIVE = 'mui-active'; var rgbaRegex = /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*(?:\.\d+)?)\)$/; var getColor = function(colorStr) { var matches = colorStr.match(rgbaRegex); if (matches && matches.length === 5) { return [ matches[1], matches[2], matches[3], matches[4] ]; } return []; }; var Transparent = function(element, options) { this.element = element; this.options = $.extend({ top: 0, //距离顶部高度(到达该高度即触发) offset: 150, //滚动透明距离 duration: 16, //过渡时间 scrollby: window//监听滚动距离容器 }, options || {}); this.scrollByElem = this.options.scrollby || window; if (!this.scrollByElem) { throw new Error("监听滚动的元素不存在"); } this.isNativeScroll = false; if (this.scrollByElem === window) { this.isNativeScroll = true; } else if (!~this.scrollByElem.className.indexOf('mui-scroll-wrapper')) { this.isNativeScroll = true; } this._style = this.element.style; this._bgColor = this._style.backgroundColor; var color = getColor(mui.getStyles(this.element, 'backgroundColor')); if (color.length) { this._R = color[0]; this._G = color[1]; this._B = color[2]; this._A = parseFloat(color[3]); this.lastOpacity = this._A; this._bufferFn = $.buffer(this.handleScroll, this.options.duration, this); this.initEvent(); } else { throw new Error("元素背景颜色必须为RGBA"); } }; Transparent.prototype.initEvent = function() { this.scrollByElem.addEventListener('scroll', this._bufferFn); if (this.isNativeScroll) { //原生scroll this.scrollByElem.addEventListener($.EVENT_MOVE, this._bufferFn); } } Transparent.prototype.handleScroll = function(e) { var y = window.scrollY; if (!this.isNativeScroll && e && e.detail) { y = -e.detail.y; } var opacity = (y - this.options.top) / this.options.offset + this._A; opacity = Math.min(Math.max(this._A, opacity), 1); this._style.backgroundColor = 'rgba(' + this._R + ',' + this._G + ',' + this._B + ',' + opacity + ')'; if (opacity > this._A) { this.element.classList.add(CLASS_ACTIVE); } else { this.element.classList.remove(CLASS_ACTIVE); } if (this.lastOpacity !== opacity) { $.trigger(this.element, 'alpha', { alpha: opacity }); this.lastOpacity = opacity; } }; Transparent.prototype.destory = function() { this.scrollByElem.removeEventListener('scroll', this._bufferFn); this.scrollByElem.removeEventListener($.EVENT_MOVE, this._bufferFn); this.element.style.backgroundColor = this._bgColor; this.element.mui_plugin_transparent = null; }; $.fn.transparent = function(options) { options = options || {}; var transparentApis = []; this.each(function() { var transparentApi = this.mui_plugin_transparent; if (!transparentApi) { var top = this.getAttribute('data-top'); var offset = this.getAttribute('data-offset'); var duration = this.getAttribute('data-duration'); var scrollby = this.getAttribute('data-scrollby'); if (top !== null && typeof options.top === 'undefined') { options.top = top; } if (offset !== null && typeof options.offset === 'undefined') { options.offset = offset; } if (duration !== null && typeof options.duration === 'undefined') { options.duration = duration; } if (scrollby !== null && typeof options.scrollby === 'undefined') { options.scrollby = document.querySelector(scrollby) || window; } transparentApi = this.mui_plugin_transparent = new Transparent(this, options); } transparentApis.push(transparentApi); }); return transparentApis.length === 1 ? transparentApis[0] : transparentApis; }; $.ready(function() { $('.mui-bar-transparent').transparent(); }); })(mui, window); /** * 数字输入框 * varstion 1.0.1 * by Houfeng * Houfeng@DCloud.io */ (function($) { var touchSupport = ('ontouchstart' in document); var tapEventName = touchSupport ? 'tap' : 'click'; var changeEventName = 'change'; var holderClassName = 'mui-numbox'; var plusClassSelector = '.mui-btn-numbox-plus,.mui-numbox-btn-plus'; var minusClassSelector = '.mui-btn-numbox-minus,.mui-numbox-btn-minus'; var inputClassSelector = '.mui-input-numbox,.mui-numbox-input'; var Numbox = $.Numbox = $.Class.extend({ /** * 构造函数 **/ init: function(holder, options) { var self = this; if (!holder) { throw "构造 numbox 时缺少容器元素"; } self.holder = holder; options = options || {}; options.step = parseInt(options.step || 1); self.options = options; self.input = $.qsa(inputClassSelector, self.holder)[0]; self.plus = $.qsa(plusClassSelector, self.holder)[0]; self.minus = $.qsa(minusClassSelector, self.holder)[0]; self.checkValue(); self.initEvent(); }, /** * 初始化事件绑定 **/ initEvent: function() { var self = this; self.plus.addEventListener(tapEventName, function(event) { var val = parseInt(self.input.value) + self.options.step; self.input.value = val.toString(); $.trigger(self.input, changeEventName, null); }); self.minus.addEventListener(tapEventName, function(event) { var val = parseInt(self.input.value) - self.options.step; self.input.value = val.toString(); $.trigger(self.input, changeEventName, null); }); self.input.addEventListener(changeEventName, function(event) { self.checkValue(); var val = parseInt(self.input.value); //触发顶层容器 $.trigger(self.holder, changeEventName, { value: val }); }); }, /** * 获取当前值 **/ getValue: function() { var self = this; return parseInt(self.input.value); }, /** * 验证当前值是法合法 **/ checkValue: function() { var self = this; var val = self.input.value; if (val == null || val == '' || isNaN(val)) { self.input.value = self.options.min || 0; self.minus.disabled = self.options.min != null; } else { var val = parseInt(val); if (self.options.max != null && !isNaN(self.options.max) && val >= parseInt(self.options.max)) { val = self.options.max; self.plus.disabled = true; } else { self.plus.disabled = false; } if (self.options.min != null && !isNaN(self.options.min) && val <= parseInt(self.options.min)) { val = self.options.min; self.minus.disabled = true; } else { self.minus.disabled = false; } self.input.value = val; } }, /** * 更新选项 **/ setOption: function(name, value) { var self = this; self.options[name] = value; }, /** * 动态设置新值 **/ setValue: function(value) { this.input.value = value; this.checkValue(); } }); $.fn.numbox = function(options) { var instanceArray = []; //遍历选择的元素 this.each(function(i, element) { if (element.numbox) { return; } if (options) { element.numbox = new Numbox(element, options); } else { var optionsText = element.getAttribute('data-numbox-options'); var options = optionsText ? JSON.parse(optionsText) : {}; options.step = element.getAttribute('data-numbox-step') || options.step; options.min = element.getAttribute('data-numbox-min') || options.min; options.max = element.getAttribute('data-numbox-max') || options.max; element.numbox = new Numbox(element, options); } }); return this[0] ? this[0].numbox : null; } //自动处理 class='mui-locker' 的 dom $.ready(function() { $('.' + holderClassName).numbox(); }); }(mui)); /** * Button * @param {type} $ * @param {type} window * @param {type} document * @returns {undefined} */ (function($, window, document) { var CLASS_ICON = 'mui-icon'; var CLASS_DISABLED = 'mui-disabled'; var STATE_RESET = 'reset'; var STATE_LOADING = 'loading'; var defaultOptions = { loadingText: 'Loading...', //文案 loadingIcon: 'mui-spinner' + ' ' + 'mui-spinner-white', //图标,可为空 loadingIconPosition: 'left' //图标所处位置,仅支持left|right }; var Button = function(element, options) { this.element = element; this.options = $.extend({}, defaultOptions, options); if (!this.options.loadingText) { this.options.loadingText = defaultOptions.loadingText; } if (this.options.loadingIcon === null) { this.options.loadingIcon = 'mui-spinner'; if ($.getStyles(this.element, 'color') === 'rgb(255, 255, 255)') { this.options.loadingIcon += ' ' + 'mui-spinner-white'; } } this.isInput = this.element.tagName === 'INPUT'; this.resetHTML = this.isInput ? this.element.value : this.element.innerHTML; this.state = ''; }; Button.prototype.loading = function() { this.setState(STATE_LOADING); }; Button.prototype.reset = function() { this.setState(STATE_RESET); }; Button.prototype.setState = function(state) { if (this.state === state) { return false; } this.state = state; if (state === STATE_RESET) { this.element.disabled = false; this.element.classList.remove(CLASS_DISABLED); this.setHtml(this.resetHTML); } else if (state === STATE_LOADING) { this.element.disabled = true; this.element.classList.add(CLASS_DISABLED); var html = this.isInput ? this.options.loadingText : ('' + this.options.loadingText + ''); if (this.options.loadingIcon && !this.isInput) { if (this.options.loadingIconPosition === 'right') { html += ' '; } else { html = ' ' + html; } } this.setHtml(html); } }; Button.prototype.setHtml = function(html) { if (this.isInput) { this.element.value = html; } else { this.element.innerHTML = html; } } $.fn.button = function(state) { var buttonApis = []; this.each(function() { var buttonApi = this.mui_plugin_button; if (!buttonApi) { var loadingText = this.getAttribute('data-loading-text'); var loadingIcon = this.getAttribute('data-loading-icon'); var loadingIconPosition = this.getAttribute('data-loading-icon-position'); this.mui_plugin_button = buttonApi = new Button(this, { loadingText: loadingText, loadingIcon: loadingIcon, loadingIconPosition: loadingIconPosition }); } if (state === STATE_LOADING || state === STATE_RESET) { buttonApi.setState(state); } buttonApis.push(buttonApi); }); return buttonApis.length === 1 ? buttonApis[0] : buttonApis; }; })(mui, window, document); ================================================ FILE: examples/hello-mui/.project ================================================ hello-mui com.aptana.ide.core.unifiedBuilder com.pandora.projects.ui.MKeyBuilder com.pandora.projects.ui.MKeyNature ================================================ FILE: examples/hello-mui/css/app.css ================================================ /* *这是单独为hello mui准备的个性化css,可以覆盖标准mui的css定义; * 在实际项目开发时,建议为App单独写一个css文件,从而实现项目的自定义皮肤功能; * * */ .mui-plus header.mui-bar{ display: none; } .mui-plus .mui-bar-nav~.mui-content{ padding: 0; } /*hm开头的表示仅为 Hello MUI示例定义*/ .hm-description{ margin: .5em 0; } .hm-description>li { font-size: 14px; color: #8f8f94; } ================================================ FILE: examples/hello-mui/css/feedback.css ================================================ /*! * ====================================================== * FeedBack Template For MUI (http://dev.dcloud.net.cn/mui) * ======================================================= * @version:1.0.0 * @author:cuihongbao@dcloud.io */ .feedback body { background-color: #EFEFF4; } .feedback input, .feedback textarea { border: none !important; } .feedback textarea { height: 100px; margin-bottom: 0 !important; padding-bottom: 0 !important; } .feedback .row { width: 100%; background-color: #fff; } .feedback p { padding: 10px 15px 0; } /*.feedback button#submit { width: 90%; height: 46px; left: 50%; -webkit-transform: translate(-50%); }*/ input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{ font-size: 14px; } .feedback .hidden { display: none; } .feedback .image-list { width: 100%; height: 85px; background-size: cover; padding: 10px 10px; overflow: hidden; } .feedback .image-item { width: 65px; height: 65px; /*background-image: url(../images/iconfont-tianjia.png);*/ background-size: 100% 100%; display: inline-block; position: relative; border-radius: 5px; margin-right: 10px; margin-bottom: 10px; border: solid 1px #e8e8e8; vertical-align: top; } .feedback .image-item .file { position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 0; } .feedback .image-item.space { border: none; } .feedback .image-item .image-close { position: absolute; display: inline-block; right: -6px; top: -6px; width: 20px; height: 20px; text-align: center; line-height: 20px; border-radius: 12px; background-color: #FF5053; color: #f3f3f3; border: solid 1px #FF5053; font-size: 9px; font-weight: 200; z-index: 1; } .feedback .image-item .image-up{ height: 65px; width: 65px; border-radius: 10px; line-height: 65px; border: 1px solid #ccc; color: #ccc; display: inline-block; text-align: center; } .feedback .image-item .image-up:after{ font-family: "微软雅黑"; content: '+'; font-size: 60px; } .feedback .image-item.space .image-close { display: none; } .feedback .mui-inline{ vertical-align: bottom; font-size: 14px; color: #8f8f94; } .mui-icon-star{ color: #B5B5B5; font-size: 22px; } .mui-icon-star-filled{ color: #FFB400; font-size: 22px; } .mui-popover { height: 180px; } .stream{ display: none; } .mui-plus-stream .stream{ display: block; } ================================================ FILE: examples/hello-mui/css/icons-extra.css ================================================ @font-face { font-family: MuiiconSpread; font-weight: normal; font-style: normal; src: url('../fonts/mui-icons-extra.ttf') format('truetype'); /* iOS 4.1- */ } .mui-icon-extra { font-family: MuiiconSpread; font-size: 24px; font-weight: normal; font-style: normal; line-height: 1; display: inline-block; text-decoration: none; -webkit-font-smoothing: antialiased; } .mui-icon-extra-cold:before { content: "\e500"; } .mui-icon-extra-share:before { content: "\e200"; } .mui-icon-extra-class:before { content: "\e118"; } .mui-icon-extra-custom:before { content: "\e117"; } .mui-icon-extra-new:before { content: "\e103"; } .mui-icon-extra-card:before { content: "\e104"; } .mui-icon-extra-grech:before { content: "\e105"; } .mui-icon-extra-trend:before { content: "\e106"; } .mui-icon-extra-filter:before { content: "\e207"; } .mui-icon-extra-holiday:before { content: "\e300"; } .mui-icon-extra-cart:before { content: "\e107"; } .mui-icon-extra-heart:before { content: "\e180"; } .mui-icon-extra-computer:before { content: "\e600"; } .mui-icon-extra-express:before { content: "\e108"; } .mui-icon-extra-gift:before { content: "\e109"; } .mui-icon-extra-gold:before { content: "\e102"; } .mui-icon-extra-lamp:before { content: "\e601"; } .mui-icon-extra-rank:before { content: "\e110"; } .mui-icon-extra-notice:before { content: "\e111"; } .mui-icon-extra-sweep:before { content: "\e202"; } .mui-icon-extra-arrowleftcricle:before { content: "\e401"; } .mui-icon-extra-dictionary:before { content: "\e602"; } .mui-icon-extra-heart-filled:before { content: "\e119"; } .mui-icon-extra-xiaoshuo:before { content: "\e607"; } .mui-icon-extra-top:before { content: "\e403"; } .mui-icon-extra-people:before { content: "\e203"; } .mui-icon-extra-topic:before { content: "\e603"; } .mui-icon-extra-hotel:before { content: "\e301"; } .mui-icon-extra-like:before { content: "\e206"; } .mui-icon-extra-regist:before { content: "\e201"; } .mui-icon-extra-order:before { content: "\e113"; } .mui-icon-extra-alipay:before { content: "\e114"; } .mui-icon-extra-find:before { content: "\e400"; } .mui-icon-extra-arrowrightcricle:before { content: "\e402"; } .mui-icon-extra-calendar:before { content: "\e115"; } .mui-icon-extra-prech:before { content: "\e116"; } .mui-icon-extra-cate:before { content: "\e501"; } .mui-icon-extra-comment:before { content: "\e209"; } .mui-icon-extra-at:before { content: "\e208"; } .mui-icon-extra-addpeople:before { content: "\e204"; } .mui-icon-extra-peoples:before { content: "\e205"; } .mui-icon-extra-calc:before { content: "\e101"; } .mui-icon-extra-classroom:before { content: "\e604"; } .mui-icon-extra-phone:before { content: "\e404"; } .mui-icon-extra-university:before { content: "\e605"; } .mui-icon-extra-outline:before { content: "\e606"; } ================================================ FILE: examples/hello-mui/css/mui.dtpicker.css ================================================ .mui-dtpicker { position: fixed; left: 0px; width: 100%; z-index: 999999; background-color: #eee; border-top: solid 1px #ccc; box-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1); -webkit-transition: .3s; bottom: 0px; -webkit-transform: translateY(300px); } .mui-dtpicker.mui-active { -webkit-transform: translateY(0px); } /*用于将 html body 禁止滚动条*/ .mui-dtpicker-active-for-page { overflow: hidden !important; } .mui-android-5-1 .mui-dtpicker { bottom: -300px; -webkit-transition-property: bottom; -webkit-transform: none; } .mui-android-5-1 .mui-dtpicker.mui-active { bottom: 0px; -webkit-transition-property: bottom; -webkit-transform: none; } .mui-dtpicker-header { padding: 6px; font-size: 14px; color: #888; } .mui-dtpicker-header button { font-size: 12px; padding: 5px 10px; } .mui-dtpicker-header button:last-child { float: right; } .mui-dtpicker-body { position: relative; width: 100%; height: 200px; /*border-top: solid 1px #eee; background-color: #fff;*/ } .mui-ios .mui-dtpicker-body { -webkit-perspective: 1200px; perspective: 1200px; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; } .mui-dtpicker-title h5 { display: inline-block; width: 20%; margin: 0px; padding: 8px; text-align: center; border-top: solid 1px #ddd; background-color: #f0f0f0; border-bottom: solid 1px #ccc; } .mui-dtpicker .mui-picker { width: 20%; height: 100%; margin: 0px; float: left; border: none; } /*年月日时分*/ [data-type="datetime"] .mui-picker, [data-type="time"] .mui-dtpicker-title h5 { width: 20%; } [data-type="datetime"] [data-id="picker-h"], [data-type="datetime"] [data-id="title-h"] { border-left: dotted 1px #ccc; } /*年月日*/ [data-type="date"] .mui-picker, [data-type="date"] .mui-dtpicker-title h5 { width: 33.3%; } [data-type="date"] [data-id="picker-h"], [data-type="date"] [data-id="picker-i"], [data-type="date"] [data-id="title-h"], [data-type="date"] [data-id="title-i"] { display: none; } /*年月日时*/ [data-type="hour"] .mui-picker, [data-type="hour"] .mui-dtpicker-title h5 { width: 25%; } [data-type="hour"] [data-id="picker-i"], [data-type="hour"] [data-id="title-i"] { display: none; } [data-type="hour"] [data-id="picker-h"], [data-type="hour"] [data-id="title-h"] { border-left: dotted 1px #ccc; } /*时分*/ [data-type="time"] .mui-picker, [data-type="time"] .mui-dtpicker-title h5 { width: 50%; } [data-type="time"] [data-id="picker-y"], [data-type="time"] [data-id="picker-m"], [data-type="time"] [data-id="picker-d"], [data-type="time"] [data-id="title-y"], [data-type="time"] [data-id="title-m"], [data-type="time"] [data-id="title-d"] { display: none; } /*年月*/ [data-type="month"] .mui-picker, [data-type="month"] .mui-dtpicker-title h5 { width: 50%; } [data-type="month"] [data-id="picker-d"], [data-type="month"] [data-id="picker-h"], [data-type="month"] [data-id="picker-i"], [data-type="month"] [data-id="title-d"], [data-type="month"] [data-id="title-h"], [data-type="month"] [data-id="title-i"] { display: none; } ================================================ FILE: examples/hello-mui/css/mui.imageviewer.css ================================================ .mui-imageviewer { position: absolute; position: fixed; background-color: rgba(0, 0, 0, 0.9); width: 100%; height: 100%; z-index: 99; left: 0px; top: 0px; display: none; opacity: 0; -webkit-transition: all 0.6s ease-in-out; transition: all 0.6s ease-in-out; -webkit-transform-style: preserve-3d; -webkit-backface-visibility: hidden; overflow: hidden; margin: 0px; padding: 0px; box-sizing: border-box; } .mui-imageviewer-mask { position: absolute; z-index: 11; width: 100%; height: 100%; left: 0px; top: 0px; display: none; } .mui-imageviewer .mui-imageviewer-header { position: absolute; height: 45px; width: 100%; left: 0px; top: 0px; z-index: 10; background-color: rgba(0, 0, 0, 0.5); margin: 0px; padding: 0px; box-sizing: border-box; } .mui-imageviewer .mui-imageviewer-state { display: block; width: 100%; height: 100%; line-height: 100%; color: #eee; text-align: center; font-size: 16px; padding: 15px; } .mui-imageviewer .mui-imageviewer-header .mui-imageviewer-close { position: absolute; top: 5px; right: 5px; font-size: 32px; color: #aaa; } .mui-imageviewer .mui-imageviewer-header .mui-imageviewer-close:active { color: #FF5053; } .mui-imageviewer .mui-imageviewer-item { width: 100%; height: 100%; left: 0px; top: 0px; position: absolute; z-index: 0; margin: 0px; padding: 0px; box-sizing: border-box; -webkit-transition: -webkit-transform 500ms ease-in-out; transition: transform 500ms ease-in-out; display: table; overflow: hidden; } .mui-imageviewer .mui-imageviewer-item-center { -webkit-transform: translateX(0); transform: translateX(0); } .mui-imageviewer .mui-imageviewer-item-left { -webkit-transform: translateX(-100%); transform: translateX(-100%); } .mui-imageviewer .mui-imageviewer-item-right { -webkit-transform: translateX(100%); transform: translateX(100%); } .mui-imageviewer .mui-imageviewer-item span { display: table-cell; text-align: center; vertical-align: middle; line-height: 100%; font-size: 100%; margin: 0px; padding: 0px; box-sizing: border-box; overflow: auto; } .mui-imageviewer .mui-imageviewer-item img { backface-visibility: hidden; transform-origin: 50% 50% 0px; max-width: 100%; } .mui-imageviewer-left, .mui-imageviewer-right { position: absolute; z-index: 2; color: #aaa; top: 50%; margin-top: -18px; font-size: 36px; } .mui-imageviewer-left { left: 5px; } .mui-imageviewer-right { right: 5px; } .mui-imageviewer-left:active, .mui-imageviewer-right:active { color: #fff; } ================================================ FILE: examples/hello-mui/css/mui.indexedlist.css ================================================ .mui-indexed-list { position: relative; border-top: solid 1px #e3e3e3; border-bottom: solid 1px #e3e3e3; overflow: hidden; background-color: #fafafa; height: 300px; cursor: default; } .mui-indexed-list-inner { margin: 0px; padding: 0px; overflow-y: auto; border: none; } .mui-indexed-list-inner::-webkit-scrollbar { width: 0px; height: 0px; visibility: hidden; } .mui-indexed-list-empty-alert, .mui-indexed-list-inner.empty ul { display: none; } .mui-indexed-list-inner.empty .mui-indexed-list-empty-alert { display: block; } .mui-indexed-list-empty-alert { padding: 30px 15px; text-align: center; color: #ccc; padding-right: 45px; } .mui-ios .mui-indexed-list-inner { width: calc(100% + 10px); } .mui-indexed-list-group, .mui-indexed-list-item { padding-right: 45px; } .mui-ios .mui-indexed-list-group, .mui-ios .mui-indexed-list-item, .mui-ios .mui-indexed-list-empty-alert { padding-right: 55px; } .mui-indexed-list-group { background-color: #f7f7f7; } .mui-indexed-list-group { padding-top: 3px; padding-bottom: 3px; } .mui-indexed-list-search { border-bottom: solid 1px #e3e3e3; z-index: 15; } .mui-indexed-list-search.mui-search:before { margin-top: -10px; } .mui-indexed-list-search input { border-radius: 0px; margin: 0px; background-color: #fafafa; } .mui-indexed-list-bar { width: 23px; background-color: lightgrey; position: absolute; height: 100%; z-index: 10; right: 0px; -webkit-transition: .2s; } .mui-indexed-list-bar a { display: block; text-align: center; font-size: 11px; padding: 0px; margin: 0px; line-height: 15px; color: #aaa; } .mui-indexed-list-bar.active { background-color: rgb(200,200,200); } .mui-indexed-list-bar.active a { color: #333; } .mui-indexed-list-bar.active a.active { color: #007aff; } .mui-indexed-list-alert { position: absolute; z-index: 20; background-color: rgba(0, 0, 0, 0.5); width: 80px; height: 80px; left: 50%; top: 50%; margin-left: -40px; margin-top: -40px; border-radius: 40px; text-align: center; line-height: 80px; font-size: 35px; color: #fff; display: none; -webkit-transition: .2s; } .mui-indexed-list-alert.active { display: block; } ================================================ FILE: examples/hello-mui/css/mui.listpicker.css ================================================ /** * 选择列表插件 * varstion 1.0.0 * by Houfeng * Houfeng@DCloud.io */ .mui-listpicker { position: relative; border: solid 1px #ccc; padding: 0px; margin: 3px; height: 185px; background-color: #fff; overflow: hidden; border-radius: 3px; } .mui-listpicker .mui-listpicker-inner { width: 100%; height: 100%; position: absolute; left: 0px; top: 0px; z-index: 1; border-radius: 3px; -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent); -webkit-mask-box-image: linear-gradient(to top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent); } .mui-ios .mui-listpicker .mui-listpicker-inner { width: calc(100% + 8px); padding-right: 8px; } .mui-android .mui-listpicker .mui-listpicker-inner { overflow-y: auto; -webkit-overflow-scrolling: touch; } .mui-listpicker .mui-listpicker-inner::-webkit-scrollbar { width: 0px; height: 0px; visibility: hidden; } .mui-listpicker ul { list-style-type: none; margin: 0px; padding: 0px; position: relative; } .mui-listpicker ul li { box-sizing: border-box; position: relative; height: 36px; line-height: 36px; text-align: center; color: #555; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .mui-listpicker.three-dimensional { -webkit-transform-style: preserve-3d; transform-style: preserve-3d; } .mui-listpicker.three-dimensional .mui-listpicker-inner { -webkit-transform-style: preserve-3d; transform-style: preserve-3d; } .mui-listpicker.three-dimensional ul { -webkit-transform-style: preserve-3d; transform-style: preserve-3d; } .mui-listpicker.three-dimensional ul li { -webkit-transform-style: preserve-3d; transform-style: preserve-3d; } .mui-listpicker ul li:last-child { border-bottom: none; } .mui-listpicker ul li::first-child { border-top: none; } .mui-listpicker .mui-listpicker-rule { position: absolute; border: solid 1px #ccc; border-left: none; border-right: none; background-color: #dfd; opacity: 0.5; width: 100%; left: 0px; top: 50%; z-index: 0; } .mui-listpicker .mui-listpicker-item-selected { color: green; } ================================================ FILE: examples/hello-mui/css/mui.picker.all.css ================================================ /** * 选择列表插件 * varstion 2.0.0 * by Houfeng * Houfeng@DCloud.io */ .mui-picker { background-color: #ddd; position: relative; height: 200px; overflow: hidden; border: solid 1px rgba(0, 0, 0, 0.1); -webkit-user-select: none; user-select: none; box-sizing: border-box; } .mui-picker-inner { box-sizing: border-box; position: relative; width: 100%; height: 100%; overflow: hidden; -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent); -webkit-mask-box-image: linear-gradient(top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent); } .mui-pciker-list, .mui-pciker-rule { box-sizing: border-box; padding: 0px; margin: 0px; width: 100%; height: 36px; line-height: 36px; position: absolute; left: 0px; top: 50%; margin-top: -18px; } .mui-pciker-rule-bg { z-index: 0; /*background-color: #cfd5da;*/ } .mui-pciker-rule-ft { z-index: 2; border-top: solid 1px rgba(0, 0, 0, 0.1); border-bottom: solid 1px rgba(0, 0, 0, 0.1); /*-webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/ /*box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/ } .mui-pciker-list { z-index: 1; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-transform: perspective(1000px) rotateY(0deg) rotateX(0deg); transform: perspective(1000px) rotateY(0deg) rotateX(0deg); } .mui-pciker-list li { width: 100%; height: 100%; position: absolute; text-align: center; vertical-align: middle; -webkit-backface-visibility: hidden; backface-visibility: hidden; overflow: hidden; box-sizing: border-box; font-size: 16px; font-family: "Helvetica Neue", "Helvetica", "Arial", "sans-serif"; color: #888; padding: 0px 8px; white-space: nowrap; -webkit-text-overflow: ellipsis; text-overflow: ellipsis; overflow: hidden; cursor: default; visibility: hidden; } .mui-pciker-list li.highlight, .mui-pciker-list li.visible { visibility: visible; } .mui-pciker-list li.highlight { color: #222; } .mui-poppicker { position: fixed; left: 0px; width: 100%; z-index: 999; background-color: #eee; border-top: solid 1px #ccc; box-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1); -webkit-transition: .3s; bottom: 0px; -webkit-transform: translateY(300px); } .mui-poppicker.mui-active { -webkit-transform: translateY(0px); } .mui-android-5-1 .mui-poppicker { bottom: -300px; -webkit-transition-property: bottom; -webkit-transform: none; } .mui-android-5-1 .mui-poppicker.mui-active { bottom: 0px; -webkit-transition-property: bottom; -webkit-transform: none; } .mui-poppicker-header { padding: 6px; font-size: 14px; color: #888; } .mui-poppicker-header .mui-btn { font-size: 12px; padding: 5px 10px; } .mui-poppicker-btn-cancel { float: left; } .mui-poppicker-btn-ok { float: right; } .mui-poppicker-clear { clear: both; height: 0px; line-height: 0px; font-size: 0px; overflow: hidden; } .mui-poppicker-body { position: relative; width: 100%; height: 200px; border-top: solid 1px #ddd; /*-webkit-perspective: 1200px; perspective: 1200px; -webkit-transform-style: preserve-3d; transform-style: preserve-3d;*/ } .mui-poppicker-body .mui-picker { width: 100%; height: 100%; margin: 0px; border: none; float: left; } .mui-dtpicker { position: fixed; left: 0px; width: 100%; z-index: 999999; background-color: #eee; border-top: solid 1px #ccc; box-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1); -webkit-transition: .3s; bottom: 0px; -webkit-transform: translateY(300px); } .mui-dtpicker.mui-active { -webkit-transform: translateY(0px); } /*用于将 html body 禁止滚动条*/ .mui-dtpicker-active-for-page { overflow: hidden !important; } .mui-android-5-1 .mui-dtpicker { bottom: -300px; -webkit-transition-property: bottom; -webkit-transform: none; } .mui-android-5-1 .mui-dtpicker.mui-active { bottom: 0px; -webkit-transition-property: bottom; -webkit-transform: none; } .mui-dtpicker-header { padding: 6px; font-size: 14px; color: #888; } .mui-dtpicker-header button { font-size: 12px; padding: 5px 10px; } .mui-dtpicker-header button:last-child { float: right; } .mui-dtpicker-body { position: relative; width: 100%; height: 200px; /*border-top: solid 1px #eee; background-color: #fff;*/ } .mui-ios .mui-dtpicker-body { -webkit-perspective: 1200px; perspective: 1200px; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; } .mui-dtpicker-title h5 { display: inline-block; width: 20%; margin: 0px; padding: 8px; text-align: center; border-top: solid 1px #ddd; background-color: #f0f0f0; border-bottom: solid 1px #ccc; } .mui-dtpicker .mui-picker { width: 20%; height: 100%; margin: 0px; float: left; border: none; } /*年月日时分*/ [data-type="datetime"] .mui-picker, [data-type="time"] .mui-dtpicker-title h5 { width: 20%; } [data-type="datetime"] [data-id="picker-h"], [data-type="datetime"] [data-id="title-h"] { border-left: dotted 1px #ccc; } /*年月日*/ [data-type="date"] .mui-picker, [data-type="date"] .mui-dtpicker-title h5 { width: 33.3%; } [data-type="date"] [data-id="picker-h"], [data-type="date"] [data-id="picker-i"], [data-type="date"] [data-id="title-h"], [data-type="date"] [data-id="title-i"] { display: none; } /*年月日时*/ [data-type="hour"] .mui-picker, [data-type="hour"] .mui-dtpicker-title h5 { width: 25%; } [data-type="hour"] [data-id="picker-i"], [data-type="hour"] [data-id="title-i"] { display: none; } [data-type="hour"] [data-id="picker-h"], [data-type="hour"] [data-id="title-h"] { border-left: dotted 1px #ccc; } /*时分*/ [data-type="time"] .mui-picker, [data-type="time"] .mui-dtpicker-title h5 { width: 50%; } [data-type="time"] [data-id="picker-y"], [data-type="time"] [data-id="picker-m"], [data-type="time"] [data-id="picker-d"], [data-type="time"] [data-id="title-y"], [data-type="time"] [data-id="title-m"], [data-type="time"] [data-id="title-d"] { display: none; } /*年月*/ [data-type="month"] .mui-picker, [data-type="month"] .mui-dtpicker-title h5 { width: 50%; } [data-type="month"] [data-id="picker-d"], [data-type="month"] [data-id="picker-h"], [data-type="month"] [data-id="picker-i"], [data-type="month"] [data-id="title-d"], [data-type="month"] [data-id="title-h"], [data-type="month"] [data-id="title-i"] { display: none; } ================================================ FILE: examples/hello-mui/css/mui.picker.css ================================================ /** * 选择列表插件 * varstion 2.0.0 * by Houfeng * Houfeng@DCloud.io */ .mui-picker { background-color: #ddd; position: relative; height: 200px; overflow: hidden; border: solid 1px rgba(0, 0, 0, 0.1); -webkit-user-select: none; user-select: none; box-sizing: border-box; } .mui-picker-inner { box-sizing: border-box; position: relative; width: 100%; height: 100%; overflow: hidden; -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent); -webkit-mask-box-image: linear-gradient(top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent); } .mui-pciker-list, .mui-pciker-rule { box-sizing: border-box; padding: 0px; margin: 0px; width: 100%; height: 36px; line-height: 36px; position: absolute; left: 0px; top: 50%; margin-top: -18px; } .mui-pciker-rule-bg { z-index: 0; /*background-color: #cfd5da;*/ } .mui-pciker-rule-ft { z-index: 2; border-top: solid 1px rgba(0, 0, 0, 0.1); border-bottom: solid 1px rgba(0, 0, 0, 0.1); /*-webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/ /*box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/ } .mui-pciker-list { z-index: 1; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-transform: perspective(1000px) rotateY(0deg) rotateX(0deg); transform: perspective(1000px) rotateY(0deg) rotateX(0deg); } .mui-pciker-list li { width: 100%; height: 100%; position: absolute; text-align: center; vertical-align: middle; -webkit-backface-visibility: hidden; backface-visibility: hidden; overflow: hidden; box-sizing: border-box; font-size: 16px; font-family: "Helvetica Neue", "Helvetica", "Arial", "sans-serif"; color: #888; padding: 0px 8px; white-space: nowrap; -webkit-text-overflow: ellipsis; text-overflow: ellipsis; overflow: hidden; cursor: default; visibility: hidden; } .mui-pciker-list li.highlight, .mui-pciker-list li.visible { visibility: visible; } .mui-pciker-list li.highlight { color: #222; } ================================================ FILE: examples/hello-mui/css/mui.poppicker.css ================================================ .mui-poppicker { position: fixed; left: 0px; width: 100%; z-index: 999; background-color: #eee; border-top: solid 1px #ccc; box-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1); -webkit-transition: .3s; bottom: 0px; -webkit-transform: translateY(300px); } .mui-poppicker.mui-active { -webkit-transform: translateY(0px); } .mui-android-5-1 .mui-poppicker { bottom: -300px; -webkit-transition-property: bottom; -webkit-transform: none; } .mui-android-5-1 .mui-poppicker.mui-active { bottom: 0px; -webkit-transition-property: bottom; -webkit-transform: none; } .mui-poppicker-header { padding: 6px; font-size: 14px; color: #888; } .mui-poppicker-header .mui-btn { font-size: 12px; padding: 5px 10px; } .mui-poppicker-btn-cancel { float: left; } .mui-poppicker-btn-ok { float: right; } .mui-poppicker-clear { clear: both; height: 0px; line-height: 0px; font-size: 0px; overflow: hidden; } .mui-poppicker-body { position: relative; width: 100%; height: 200px; border-top: solid 1px #ddd; /*-webkit-perspective: 1200px; perspective: 1200px; -webkit-transform-style: preserve-3d; transform-style: preserve-3d;*/ } .mui-poppicker-body .mui-picker { width: 100%; height: 100%; margin: 0px; border: none; float: left; } ================================================ FILE: examples/hello-mui/examples/accordion.html ================================================ Hello MUI

折叠面板

  • 表单
      
  • 图片轮播
  • 文字排版

    h1. Heading

    h2. Heading

    h3. Heading

    h4. Heading

    h5. Heading
    h6. Heading

    p. 目前最接近原生App效果的框架。

================================================ FILE: examples/hello-mui/examples/actionsheet-plus.html ================================================ Hello MUI

原生模式actionsheet

这是5+ runtime封装的原生actionsheet,该模式具备如下优点:

  • 支持覆盖顶部状态栏
  • 支持跨webview的遮罩
  • 在有map等原生组件时,依然会显示在最顶层,不会被遮挡

另一方面,原生模式的actionsheet目前不支持自定义样式

打开actionsheet

================================================ FILE: examples/hello-mui/examples/actionsheet.html ================================================ Hello MUI

H5模式actionsheet

actionsheet一般从底部弹出,显示一系列可选择的操作按钮,供用户选择; actionSheet可从任意位置触发, 点击本页面左下角 会弹出删除信息确认框; 点击本页面右下角 会弹出转发确认框; 你也可点击如下按钮,打开照片选择框:

打开actionsheet

本页面为H5模式的actionsheet演示示例,该模式具有如下优点:

  • 可通过css自由定制展现样式

另一方面,H5模式的actionsheet也具备如下缺点:

  • 不支持覆盖顶部状态栏
  • 不支持跨webview的遮罩
  • 在有map等原生组件时,容易被遮挡

================================================ FILE: examples/hello-mui/examples/ad.html ================================================ advertisement(广告演示)

advertisement(广告演示)

DCloud广告联盟,可以给DCloud的开发者提供更好的变现方式,更优质的广告体验。点击如下链接前往体验:广告演示

目前已支持悬浮红包、推送广告,更多广告陆续接通中,包括开屏广告、信息流广告。

了解更多DCloud广告联盟的优势及加入广告联盟的方式,请点击http://dcloud.io/dad

================================================ FILE: examples/hello-mui/examples/ajax.html ================================================ Hello MUI

ajax(网络请求)

mui基于html5plus的XMLHttpRequest,封装了常用的ajax函数,支持Get、Post请求方式, 支持返回json、xml、html、text、script数据类型;

发送请求:

获得响应:

================================================ FILE: examples/hello-mui/examples/badges.html ================================================ Hello MUI

badge(数字角标)

有底色
1 12 123 3 45 456
无底色(使用父元素背景色)
1 2 3 4 5 6
================================================ FILE: examples/hello-mui/examples/best-practices/list-to-detail/detail.html ================================================

{{title}}

================================================ FILE: examples/hello-mui/examples/best-practices/list-to-detail/list-to-detail.css ================================================ .mui-bar-nav { background-color: #4a82d1; -webkit-box-shadow: none; box-shadow: none; } .mui-bar-nav a, .mui-bar .mui-btn-link { color: white; } .kr-title { color: white; } .kr-article .kr-slider a { height: 180px; background-position: center; background-size: 100%; background-repeat: no-repeat; } /*无需重复显示大图*/ #kr-article-article img.fr-fin.fr-dib.fr-tag{ display: none; } #kr-article-article p img:first-child{ display: none; } .kr-article .kr-slider a .mui-slider-title { background: transparent; color: white; opacity: 1; bottom: 15px; font-size: 20px; font-weight: 500; padding: 0 15px; white-space: normal; line-height: 22px; word-break: break-all; height: 44px; text-align: justify; text-indent: 0; z-index: 1; } .kr-article .kr-table-view .mui-table-view-cell { padding: 11px; } .kr-article .kr-table-view .mui-table-view-cell>a:not(.mui-btn) { margin: -11px; } .kr-article .kr-table-view .mui-media-object { max-width: 90px; width: 90px; height: 90px; line-height: 90px; overflow: hidden; } .kr-article .kr-table-view .mui-media-object img { height: 90px; } .kr-article .kr-table-view .mui-media-body { position: relative; font-size: 14px; white-space: normal; height: 90px; } .kr-article-banner { height: 180px; position: relative; overflow: hidden; } .kr-article-cover { background-position: center; background-color: #ccc; background-size: cover; background-repeat: no-repeat; width: 100%; height: 180px; position: relative; } .kr-article-cover img { width: 100%; } .kr-article-bar a { color: gray; } .kr-article-title { position: absolute; left: 15px; bottom: 15px; width: 90%; font-size: 16px; font-weight: 400; line-height: 21px; color: white; z-index: 11; } .kr-article-content { background: #efeff4; } .kr-article-meta { padding: 10px 0 10px 20px; display: table; } .kr-article-meta div { height: 30px; font-size: 15px; display: table-cell; vertical-align: middle; color: gray; padding: 0 5px; } .kr-article-avatar img { width: 30px; } .kr-article-text { font-size: 13px!important; } .kr-article-author, .kr-article-time { font-weight: 600; } .kr-article-article { font-size: 15px; padding: 0 15px; color: #000; } .kr-article-article ol { margin: 0 0 0 20px; padding: 0; } .kr-article-article p { color: #000; font-size: 15px; line-height: 23px; } .kr-article-article img, .kr-article-article iframe { max-width: 100%; width: 100%; height: auto; } embed,object{ display: none; } .kr-article-content {} .kr-browser .mui-bar .mui-btn { top: 10px; padding: 2px 12px 2px; } .kr-browser-bar .mui-spinner { width: 20px; height: 20px; } .kr-browser-bar a { color: gray; } ================================================ FILE: examples/hello-mui/examples/best-practices/list-to-detail/listview.html ================================================ 列表到详情最佳实践
================================================ FILE: examples/hello-mui/examples/buttons-with-badges.html ================================================ Hello MUI

带数字的按钮

================================================ FILE: examples/hello-mui/examples/buttons-with-block.html ================================================ Hello MUI

块级按钮

================================================ FILE: examples/hello-mui/examples/buttons-with-icons.html ================================================ Hello MUI

带图标按钮

图标居左:
图标居右:
================================================ FILE: examples/hello-mui/examples/buttons-with-loading.html ================================================ Hello MUI

加载中按钮插件

当用户点击按钮后,需要向服务端提交数据或等待服务端响应时, 常常需要提示“正在提交”,并将按钮设置为disabled,避免用户重复点击、重复提交; mui的加载中按钮就实现了类似效果,点击如下按钮体验:

左侧loading图标:
右侧loading图标:
无loading图标:
自定义loading图标:
其他button效果
================================================ FILE: examples/hello-mui/examples/buttons.html ================================================ Hello MUI

普通按钮

有底色按钮:
蓝色
绿色
无底色按钮(使用父元素的背景色):
链接按钮:
默认input标签样式:
默认button标签样式:
================================================ FILE: examples/hello-mui/examples/card.html ================================================ Hello MUI

cardview(卡片视图)

这是一个最简单的卡片视图控件;卡片视图常用来显示完整独立的一段信息,比如一篇文章的预览图、作者信息、点赞数量等
页眉
包含页眉页脚的卡片,页眉常用来显示面板标题,页脚用来显示额外信息或支持的操作(比如点赞、评论等)

Posted on January 18, 2016

这里显示文章摘要,让读者对文章内容有个粗略的概念...

小M

发表于 2016-06-30 15:30

================================================ FILE: examples/hello-mui/examples/checkbox.html ================================================ Hello MUI

checkbox(复选框)

图标左对齐
图标右对齐
================================================ FILE: examples/hello-mui/examples/date.html ================================================ Hello MUI

native模式

日期示例
时间示例
================================================ FILE: examples/hello-mui/examples/dialog.html ================================================ Hello MUI

dialog(消息框)

================================================ FILE: examples/hello-mui/examples/dtpicker.html ================================================

dtpicker(日期时间选择器)

常规示例
设定年份区间
设定选中的时间
指定类型
自定义数据
================================================ FILE: examples/hello-mui/examples/echarts.html ================================================ ECharts 示例

chart(EChart图表)

这是mui集成百度ECharts的图表示例,ECharts的详细用法及 API 请参考其官方网站: http://echarts.baidu.com

柱图示例
线图示例
饼图示例
================================================ FILE: examples/hello-mui/examples/feedback.html ================================================ 问题反馈

问题反馈

图片(选填,提供问题截图,总大小10M以下)

QQ/邮箱

应用评分

================================================ FILE: examples/hello-mui/examples/grid-default.html ================================================ Hello MUI

9宫格默认样式

================================================ FILE: examples/hello-mui/examples/grid-pagination.html ================================================ Hello MUI

左右拖动分页9宫

================================================ FILE: examples/hello-mui/examples/guide.html ================================================ Hello MUI
================================================ FILE: examples/hello-mui/examples/icons-extra.html ================================================ Hello MUI

icons(扩展图标)

点击图标查看高亮样式

================================================ FILE: examples/hello-mui/examples/icons.html ================================================ Hello MUI

icon(图标)

点击图标查看高亮样式

================================================ FILE: examples/hello-mui/examples/im-chat.html ================================================

chat (聊天窗口)


		
		
!
手指上滑,取消发送
================================================ FILE: examples/hello-mui/examples/imageviewer-native.html ================================================ Hello MUI

这是图片放大预览示例,点击如下图片体验全屏预览功能

图片全屏后,双击或双指缩放均可对图片进行放大、缩小操作,左右滑动可查看其它图片,点击会关闭预览

第三张图片,纯粹为了占位:

================================================ FILE: examples/hello-mui/examples/imageviewer.html ================================================ Hello MUI

image viewer(图片预览)

这是图片放大预览示例,点击如下图片体验全屏预览功能

图片全屏后,双击或双指缩放均可对图片进行放大、缩小操作,左右滑动可查看同组(data-preview-group相同的图片为一组)其它图片,点击会关闭预览

第三张图片,纯粹为了占位:

================================================ FILE: examples/hello-mui/examples/indexed-list-select.html ================================================

选择机场

完成
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
没有数据
  • A
  • 阿克苏机场
  • 阿拉山口机场
  • 阿勒泰机场
  • 阿里昆莎机场
  • 安庆天柱山机场
  • 澳门国际机场
  • B
  • 保山机场
  • 包头机场
  • 北海福成机场
  • 北京南苑机场
  • 北京首都国际机场
  • C
  • 长白山机场
  • 长春龙嘉国际机场
  • 常德桃花源机场
  • 昌都邦达机场
  • 长沙黄花国际机场
  • 长治王村机场
  • 常州奔牛机场
  • 成都双流国际机场
  • 赤峰机场
  • D
  • 大理机场
  • 大连周水子国际机场
  • 大庆萨尔图机场
  • 大同东王庄机场
  • 达州河市机场
  • 丹东浪头机场
  • 德宏芒市机场
  • 迪庆香格里拉机场
  • 东营机场
  • 敦煌机场
  • E
  • 鄂尔多斯机场
  • 恩施许家坪机场
  • 二连浩特赛乌苏国际机场
  • F
  • 阜阳西关机场
  • 福州长乐国际机场
  • G
  • 赣州黄金机场
  • 格尔木机场
  • 固原六盘山机场
  • 广元盘龙机场
  • 广州白云国际机场
  • 桂林两江国际机场
  • 贵阳龙洞堡国际机场
  • H
  • 哈尔滨太平国际机场
  • 哈密机场
  • 海口美兰国际机场
  • 海拉尔东山国际机场
  • 邯郸机场
  • 汉中机场
  • 杭州萧山国际机场
  • 合肥骆岗国际机场
  • 和田机场
  • 黑河机场
  • 呼和浩特白塔国际机场
  • 淮安涟水机场
  • 黄山屯溪国际机场
  • J
  • 济南遥墙国际机场
  • 济宁曲阜机场
  • 鸡西兴凯湖机场
  • 佳木斯东郊机场
  • 嘉峪关机场
  • 锦州小岭子机场
  • 景德镇机场
  • 井冈山机场
  • 九江庐山机场
  • 九寨黄龙机场
  • K
  • 喀什机场
  • 克拉玛依机场
  • 库车龟兹机场
  • 库尔勒机场
  • 昆明巫家坝国际机场
  • L
  • 拉萨贡嘎机场
  • 兰州中川机场
  • 丽江三义机场
  • 黎平机场
  • 连云港白塔埠机场
  • 临沧机场
  • 临沂机场
  • 林芝米林机场
  • 柳州白莲机场
  • 龙岩冠豸山机场
  • 泸州蓝田机场
  • 洛阳北郊机场
  • M
  • 满洲里西郊机场
  • 绵阳南郊机场
  • 漠河古莲机场
  • 牡丹江海浪机场
  • N
  • 南昌昌北国际机场
  • 南充高坪机场
  • 南京禄口国际机场
  • 南宁吴圩机场
  • 南通兴东机场
  • 南阳姜营机场
  • 宁波栎社国际机场
  • P
  • 普洱思茅机场
  • Q
  • 齐齐哈尔三家子机场
  • 秦皇岛山海关机场
  • 青岛流亭国际机场
  • 衢州机场
  • 泉州晋江机场
  • R
  • 日喀则和平机场
  • S
  • 三亚凤凰国际机场
  • 汕头外砂机场
  • 上海虹桥国际机场
  • 上海浦东国际机场
  • 深圳宝安国际机场
  • 沈阳桃仙国际机场
  • 石家庄正定国际机场
  • 苏南硕放国际机场
  • T
  • 塔城机场
  • 太原武宿国际机场
  • 台州路桥机场 (黄岩机场)
  • 唐山三女河机场
  • 腾冲驼峰机场
  • 天津滨海国际机场
  • 通辽机场
  • 铜仁凤凰机场
  • W
  • 万州五桥机场
  • 潍坊机场
  • 威海大水泊机场
  • 文山普者黑机场
  • 温州永强国际机场
  • 乌海机场
  • 武汉天河国际机场
  • 乌兰浩特机场
  • 乌鲁木齐地窝堡国际机场
  • 武夷山机场
  • 梧州长洲岛机场
  • X
  • 西安咸阳国际机场
  • 西昌青山机场
  • 锡林浩特机场
  • 西宁曹家堡机场
  • 西双版纳嘎洒机场
  • 厦门高崎国际机场
  • 香港国际机场
  • 襄阳刘集机场
  • 兴义机场
  • 徐州观音机场
  • Y
  • 延安二十里堡机场
  • 盐城机场
  • 延吉朝阳川机场
  • 烟台莱山国际机场
  • 宜宾菜坝机场
  • 宜昌三峡机场
  • 伊春林都机场
  • 伊宁机场
  • 义乌机场
  • 银川河东机场
  • 永州零陵机场
  • 榆林榆阳机场
  • 玉树巴塘机场
  • 运城张孝机场
  • Z
  • 湛江机场
  • 昭通机场
  • 郑州新郑国际机场
  • 芷江机场
  • 重庆江北国际机场
  • 中卫香山机场
  • 舟山朱家尖机场
  • 珠海三灶机场
================================================ FILE: examples/hello-mui/examples/indexed-list.html ================================================

indexed list(索引列表)

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
没有数据
  • A
  • 阿克苏机场
  • 阿拉山口机场
  • 阿勒泰机场
  • 阿里昆莎机场
  • 安庆天柱山机场
  • 澳门国际机场
  • B
  • 保山机场
  • 包头机场
  • 北海福成机场
  • 北京南苑机场
  • 北京首都国际机场
  • C
  • 长白山机场
  • 长春龙嘉国际机场
  • 常德桃花源机场
  • 昌都邦达机场
  • 长沙黄花国际机场
  • 长治王村机场
  • 常州奔牛机场
  • 成都双流国际机场
  • 赤峰机场
  • D
  • 大理机场
  • 大连周水子国际机场
  • 大庆萨尔图机场
  • 大同东王庄机场
  • 达州河市机场
  • 丹东浪头机场
  • 德宏芒市机场
  • 迪庆香格里拉机场
  • 东营机场
  • 敦煌机场
  • E
  • 鄂尔多斯机场
  • 恩施许家坪机场
  • 二连浩特赛乌苏国际机场
  • F
  • 阜阳西关机场
  • 福州长乐国际机场
  • G
  • 赣州黄金机场
  • 格尔木机场
  • 固原六盘山机场
  • 广元盘龙机场
  • 广州白云国际机场
  • 桂林两江国际机场
  • 贵阳龙洞堡国际机场
  • H
  • 哈尔滨太平国际机场
  • 哈密机场
  • 海口美兰国际机场
  • 海拉尔东山国际机场
  • 邯郸机场
  • 汉中机场
  • 杭州萧山国际机场
  • 合肥骆岗国际机场
  • 和田机场
  • 黑河机场
  • 呼和浩特白塔国际机场
  • 淮安涟水机场
  • 黄山屯溪国际机场
  • J
  • 济南遥墙国际机场
  • 济宁曲阜机场
  • 鸡西兴凯湖机场
  • 佳木斯东郊机场
  • 嘉峪关机场
  • 锦州小岭子机场
  • 景德镇机场
  • 井冈山机场
  • 九江庐山机场
  • 九寨黄龙机场
  • K
  • 喀什机场
  • 克拉玛依机场
  • 库车龟兹机场
  • 库尔勒机场
  • 昆明巫家坝国际机场
  • L
  • 拉萨贡嘎机场
  • 兰州中川机场
  • 丽江三义机场
  • 黎平机场
  • 连云港白塔埠机场
  • 临沧机场
  • 临沂机场
  • 林芝米林机场
  • 柳州白莲机场
  • 龙岩冠豸山机场
  • 泸州蓝田机场
  • 洛阳北郊机场
  • M
  • 满洲里西郊机场
  • 绵阳南郊机场
  • 漠河古莲机场
  • 牡丹江海浪机场
  • N
  • 南昌昌北国际机场
  • 南充高坪机场
  • 南京禄口国际机场
  • 南宁吴圩机场
  • 南通兴东机场
  • 南阳姜营机场
  • 宁波栎社国际机场
  • P
  • 普洱思茅机场
  • Q
  • 齐齐哈尔三家子机场
  • 秦皇岛山海关机场
  • 青岛流亭国际机场
  • 衢州机场
  • 泉州晋江机场
  • R
  • 日喀则和平机场
  • S
  • 三亚凤凰国际机场
  • 汕头外砂机场
  • 上海虹桥国际机场
  • 上海浦东国际机场
  • 深圳宝安国际机场
  • 沈阳桃仙国际机场
  • 石家庄正定国际机场
  • 苏南硕放国际机场
  • T
  • 塔城机场
  • 太原武宿国际机场
  • 台州路桥机场 (黄岩机场)
  • 唐山三女河机场
  • 腾冲驼峰机场
  • 天津滨海国际机场
  • 通辽机场
  • 铜仁凤凰机场
  • W
  • 万州五桥机场
  • 潍坊机场
  • 威海大水泊机场
  • 文山普者黑机场
  • 温州永强国际机场
  • 乌海机场
  • 武汉天河国际机场
  • 乌兰浩特机场
  • 乌鲁木齐地窝堡国际机场
  • 武夷山机场
  • 梧州长洲岛机场
  • X
  • 西安咸阳国际机场
  • 西昌青山机场
  • 锡林浩特机场
  • 西宁曹家堡机场
  • 西双版纳嘎洒机场
  • 厦门高崎国际机场
  • 香港国际机场
  • 襄阳刘集机场
  • 兴义机场
  • 徐州观音机场
  • Y
  • 延安二十里堡机场
  • 盐城机场
  • 延吉朝阳川机场
  • 烟台莱山国际机场
  • 宜宾菜坝机场
  • 宜昌三峡机场
  • 伊春林都机场
  • 伊宁机场
  • 义乌机场
  • 银川河东机场
  • 永州零陵机场
  • 榆林榆阳机场
  • 玉树巴塘机场
  • 运城张孝机场
  • Z
  • 湛江机场
  • 昭通机场
  • 郑州新郑国际机场
  • 芷江机场
  • 重庆江北国际机场
  • 中卫香山机场
  • 舟山朱家尖机场
  • 珠海三灶机场
================================================ FILE: examples/hello-mui/examples/info.html ================================================ Hello MUI

关于

mui是一款小巧高能的前端UI框架,其UI控件富有原生UI样式; 通过封装多webview、启动原生动画,使得mui成为目前最接近原生体验的前端框架, 更多详细介绍,请到mui官网查看

当前版本:3.7.0

================================================ FILE: examples/hello-mui/examples/input.html ================================================ Hello MUI

input(输入框)

默认搜索框:
语音输入搜索框:
密码框:
  
================================================ FILE: examples/hello-mui/examples/lazyload-image.html ================================================ Hello MUI

lazyload(延迟加载)

延迟加载的理念:页面初始化时,暂不加载处于屏幕可见区域之外的图片。该方案会有如下几大好处:

  • 加快页面渲染速度
  • 提升页面滚动性能
  • 默认不下载屏幕外的图片,减少网络流量
================================================ FILE: examples/hello-mui/examples/list-triplex-row.html ================================================ Hello MUI

三行列表

================================================ FILE: examples/hello-mui/examples/list-with-input.html ================================================ Hello MUI

列表带input类控件

  • card(圆角列表)
  • Item 1
  • Item 2
  • Item 3
  • Item 4
  • Item 5
  • Item 6
  • Item 7
  • Item 8
================================================ FILE: examples/hello-mui/examples/locker-dom.html ================================================ 手势锁屏示例

locker(手势图案锁屏)

================================================ FILE: examples/hello-mui/examples/login.html ================================================

login(登录)

简单说明

        我们为 “登录模板” 制作了一独立的 “演示应用”,包括 “账号密码登录、第三方账号登录、账号注册、手势锁屏、分享” 等功能演示。

体验方式
  1. 在 HBuilder 中新建“移动App”工程,选择 “mui登录模板” ;
  2. 在 GitHub 上查看或下载 登录模板源码
演示截图

================================================ FILE: examples/hello-mui/examples/media-list.html ================================================ Hello MUI

media list(图文列表)

缩略图居左
缩略图居右
右侧带导航箭头
card(圆角列表)
================================================ FILE: examples/hello-mui/examples/message-bottom.html ================================================

底部提醒消息控件

这是底部提醒消息示例,可放置图标、提示信息、用户操作按钮等

应用当前版本过低,存在安全漏洞,请升级至最新版

================================================ FILE: examples/hello-mui/examples/modals.html ================================================ Hello MUI

modal(弹出窗口)

================================================ FILE: examples/hello-mui/examples/nav-nativeObj.html ================================================ Hello MUI

这个页面的标题栏是使用nativeObj绘制的,开发者可以使用nativeObj绘制图片、文字、背景色、线条等。

================================================ FILE: examples/hello-mui/examples/nav.html ================================================ Hello MUI

这是nav bar(顶部导航栏)演示页面, 你可以在顶部导航中放置多种控件,点击如下单选框切换导航栏显示内容;

左侧显示内容
右侧显示内容
================================================ FILE: examples/hello-mui/examples/nav_transparent.html ================================================ Hello MUI

这是transparent bar(透明导航栏)演示页面, 默认情况下标题栏透明, 当用户向下滚动时,标题栏逐渐由透明转变为不透明;当用户再次向上滚动时,标题栏又从不透明变为透明状态。

这是一种解决滚动条通顶问题的变通解决方案,该方案相比双webview的方案,性能更高,动效更酷,但也有其适用场景:

图片类型
================================================ FILE: examples/hello-mui/examples/nav_transparent_native.html ================================================ Hello MUI

这是原生实现的的transparent bar(透明导航栏)演示页面;默认情况下标题栏透明, 当用户向下滚动时,标题栏逐渐由透明转变为不透明;当用户再次向上滚动时,标题栏又从不透明变为透明状态。

这是一种解决滚动条通顶问题的变通解决方案,该方案有如下优点:

  • 相比双webview的方案,性能更高,动效更酷
  • 相比H5版本的透明导航栏,使用原生渐变动画,也有更高的性能体验
图片类型
================================================ FILE: examples/hello-mui/examples/numbox.html ================================================ 数字输入框

number box(数字输入框)

默认
限定最小值和最大值(1~9)
设定步长值(步长 10)
取值操作
在行内
购买数量:
在表单中
通过样式定义大小(220x60)


================================================ FILE: examples/hello-mui/examples/offcanvas-drag-down.html ================================================ Hello MUI
关闭

div模式下拉菜单

这是div模式下沉菜单示例,主页面和菜单在一个HTML文件中, 当前页面为主界面,你可以在主界面放置任何内容; 打开侧滑菜单有多种方式: 1、点击页面左上角的 图标; 2、通过JS API触发(例如点击如下蓝色按钮体验); 3、Android手机按menu键;

================================================ FILE: examples/hello-mui/examples/offcanvas-drag-left-plus-main.html ================================================ Hello MUI

off canvas(侧滑导航)

这是webview模式右滑导航示例,主页面和菜单在不同的webview中, 优点是支持菜单内容在多页面的复用,缺点是不支持拖动手势(跟手); 当前页面为主界面,你可以在主界面放置任何内容; 打开侧滑菜单有多种方式: 1、在当前页面快速向左滑动(swipe); 2、点击页面右上角的 图标; 3、通过JS API触发(例如点击如下蓝色按钮体验); 4、Android手机按menu键;

侧滑菜单的移动动画,支持多种效果,切换如下选项体验不同动画效果:

================================================ FILE: examples/hello-mui/examples/offcanvas-drag-left-plus-menu.html ================================================ Hello MUI
侧滑导航
这是侧滑菜单示例,你可以在这里放置任何内容;关闭侧滑菜单有多种方式: 1.在手机屏幕任意位置快速向右滑动(swipe); 2.点击本侧滑菜单页之外的任意位置; 3.点击如下红色按钮; 4.Android手机按back键;5.Android手机按menu键

侧滑列表示例
================================================ FILE: examples/hello-mui/examples/offcanvas-drag-left.html ================================================ Hello MUI

左滑导航

这是可拖动式左滑导航示例,主页面和菜单在一个HTML文件中, 优点是支持拖动手势(跟手),缺点是不支持菜单内容在多页面的复用; 当前页面为主界面,你可以在主界面放置任何内容; 打开侧滑菜单有多种方式: 1、在当前页面向左拖动; 2、点击页面右上角的 图标; 3、通过JS API触发(例如点击如下蓝色按钮体验); 4、Android手机按menu键;

侧滑菜单的移动动画,支持多种效果,切换如下选项体验不同动画效果:

================================================ FILE: examples/hello-mui/examples/offcanvas-drag-right-plus-main.html ================================================ Hello MUI
关闭

off canvas(侧滑导航)

这是webview模式右滑导航示例,主页面和菜单在不同的webview中, 优点是支持菜单内容在多页面的复用,缺点是不支持拖动手势(跟手); 当前页面为主界面,你可以在主界面放置任何内容; 打开侧滑菜单有多种方式: 1、在当前页面快速向右滑动(swipe); 2、点击页面左上角的 图标; 3、通过JS API触发(例如点击如下蓝色按钮体验); 4、Android手机按menu键;

侧滑菜单的移动动画,支持多种效果,切换如下选项体验不同动画效果:

================================================ FILE: examples/hello-mui/examples/offcanvas-drag-right-plus-menu.html ================================================ Hello MUI
侧滑导航
这是侧滑菜单示例,你可以在这里放置任何内容;关闭侧滑菜单有多种方式: 1.在手机屏幕任意位置快速向左滑动(swipe); 2.点击本侧滑菜单页之外的任意位置; 3.点击如下红色按钮; 4.Android手机按back键;5.Android手机按menu键

侧滑列表示例
================================================ FILE: examples/hello-mui/examples/offcanvas-drag-right.html ================================================ Hello MUI
关闭

div模式右滑菜单

这是可拖动式右滑导航示例,主页面和菜单在一个HTML文件中, 优点是支持拖动手势(跟手),缺点是不支持菜单内容在多页面的复用; 当前页面为主界面,你可以在主界面放置任何内容; 打开侧滑菜单有多种方式: 1、在当前页面向右拖动; 2、点击页面左上角的 图标; 3、通过JS API触发(例如点击如下蓝色按钮体验); 4、Android手机按menu键;

侧滑菜单的移动动画,支持多种效果,切换如下选项体验不同动画效果:

================================================ FILE: examples/hello-mui/examples/pagination.html ================================================ Hello MUI

pagination(分页)

分页(默认尺寸)
分页(大尺寸)
分页(小尺寸)
翻页(默认)
翻页(对齐)
翻页(禁用)
================================================ FILE: examples/hello-mui/examples/picker.html ================================================

picker(选择器)

原生 SELECT

原生 SELECT(选择框)在不同的设备上UI可能会有差异,并且不支持多级联动(多个 SELECT 可实现,但较麻烦),故mui封装了picker组件,参见如下示例。

普通示例
级联示例
================================================ FILE: examples/hello-mui/examples/popovers.html ================================================ Hello MUI

popover(弹出菜单)

popover(弹出菜单)是mobile App中常见的UI组件,在用户点击位置附近弹出悬浮菜单,向用户展示更多信息或提供快捷操作。

popover最常用的两个位置:顶部导航栏右侧和底部工具栏右侧; 点击本页右上角的 图标体验, 接着点击本页面右下角的“菜单”按钮体验。

除了页面顶部导航栏、底部工具栏固定位置之外,其它区域要使用弹出菜单,都要准确计算物理位置,从而实现弹出菜单的绝对定位; mui封装的手势事件中,可以获得点击位置,通过这些位置可实现任意区域的弹出菜单显示,点击如下按钮体验:

打开弹出菜单

================================================ FILE: examples/hello-mui/examples/progressbar.html ================================================ Hello MUI

progress bar(进度条)

动态设置进度条进度

动态创建内联进度条及销毁

动态创建页面顶部进度条
无限循环进度条
内联无限循环进度条

页面顶部无限循环进度条
自定义进度条颜色

================================================ FILE: examples/hello-mui/examples/pullrefresh.html ================================================ Hello MUI
    ================================================ FILE: examples/hello-mui/examples/pullrefresh_main.html ================================================

    下拉刷新和上拉加载更多

    ================================================ FILE: examples/hello-mui/examples/pullrefresh_sub.html ================================================ Hello MUI
    ================================================ FILE: examples/hello-mui/examples/pullrefresh_with_tab.html ================================================ Hello MUI

    选项卡切换+下拉刷新(div模式)

    • 第1个选项卡子项-1
    • 第1个选项卡子项-2
    • 第1个选项卡子项-3
    • 第1个选项卡子项-4
    • 第1个选项卡子项-5
    • 第1个选项卡子项-6
    • 第1个选项卡子项-7
    • 第1个选项卡子项-8
    • 第1个选项卡子项-9
    • 第1个选项卡子项-10
    • 第1个选项卡子项-11
    • 第1个选项卡子项-12
    • 第1个选项卡子项-13
    • 第1个选项卡子项-14
    • 第1个选项卡子项-15
    • 第1个选项卡子项-16
    • 第1个选项卡子项-17
    • 第1个选项卡子项-18
    • 第1个选项卡子项-19
    • 第1个选项卡子项-20
    • 第2个选项卡子项-1
    • 第2个选项卡子项-2
    • 第2个选项卡子项-3
    • 第2个选项卡子项-4
    • 第2个选项卡子项-5
    • 第2个选项卡子项-6
    • 第2个选项卡子项-7
    • 第2个选项卡子项-8
    • 第2个选项卡子项-9
    • 第2个选项卡子项-10
    • 第2个选项卡子项-11
    • 第2个选项卡子项-12
    • 第2个选项卡子项-13
    • 第2个选项卡子项-14
    • 第2个选项卡子项-15
    • 第2个选项卡子项-16
    • 第2个选项卡子项-17
    • 第2个选项卡子项-18
    • 第2个选项卡子项-19
    • 第2个选项卡子项-20
    • 第3个选项卡子项-1
    • 第3个选项卡子项-2
    • 第3个选项卡子项-3
    • 第3个选项卡子项-4
    • 第3个选项卡子项-5
    • 第3个选项卡子项-6
    • 第3个选项卡子项-7
    • 第3个选项卡子项-8
    • 第3个选项卡子项-9
    • 第3个选项卡子项-10
    • 第3个选项卡子项-11
    • 第3个选项卡子项-12
    • 第3个选项卡子项-13
    • 第3个选项卡子项-14
    • 第3个选项卡子项-15
    • 第3个选项卡子项-16
    • 第3个选项卡子项-17
    • 第3个选项卡子项-18
    • 第3个选项卡子项-19
    • 第3个选项卡子项-20
    • 第4个选项卡子项-1
    • 第4个选项卡子项-2
    • 第4个选项卡子项-3
    • 第4个选项卡子项-4
    • 第4个选项卡子项-5
    • 第4个选项卡子项-6
    • 第4个选项卡子项-7
    • 第4个选项卡子项-8
    • 第4个选项卡子项-9
    • 第4个选项卡子项-10
    • 第4个选项卡子项-11
    • 第4个选项卡子项-12
    • 第4个选项卡子项-13
    • 第4个选项卡子项-14
    • 第4个选项卡子项-15
    • 第4个选项卡子项-16
    • 第4个选项卡子项-17
    • 第4个选项卡子项-18
    • 第4个选项卡子项-19
    • 第4个选项卡子项-20
    • 第5个选项卡子项-1
    • 第5个选项卡子项-2
    • 第5个选项卡子项-3
    • 第5个选项卡子项-4
    • 第5个选项卡子项-5
    • 第5个选项卡子项-6
    • 第5个选项卡子项-7
    • 第5个选项卡子项-8
    • 第5个选项卡子项-9
    • 第5个选项卡子项-10
    • 第5个选项卡子项-11
    • 第5个选项卡子项-12
    • 第5个选项卡子项-13
    • 第5个选项卡子项-14
    • 第5个选项卡子项-15
    • 第5个选项卡子项-16
    • 第5个选项卡子项-17
    • 第5个选项卡子项-18
    • 第5个选项卡子项-19
    • 第5个选项卡子项-20
    • 第6个选项卡子项-1
    • 第6个选项卡子项-2
    • 第6个选项卡子项-3
    • 第6个选项卡子项-4
    • 第6个选项卡子项-5
    • 第6个选项卡子项-6
    • 第6个选项卡子项-7
    • 第6个选项卡子项-8
    • 第6个选项卡子项-9
    • 第6个选项卡子项-10
    • 第6个选项卡子项-11
    • 第6个选项卡子项-12
    • 第6个选项卡子项-13
    • 第6个选项卡子项-14
    • 第6个选项卡子项-15
    • 第6个选项卡子项-16
    • 第6个选项卡子项-17
    • 第6个选项卡子项-18
    • 第6个选项卡子项-19
    • 第6个选项卡子项-20
    ================================================ FILE: examples/hello-mui/examples/radio.html ================================================ Hello MUI

    单选框(radio)

    图标左对齐
    图标右对齐
    列表模式的单选框

    ================================================ FILE: examples/hello-mui/examples/range.html ================================================ Hello MUI

    滑块(range)

    label+输入框+滑块:
    label+滑块:20
    整行滑块:50
    ================================================ FILE: examples/hello-mui/examples/setting.html ================================================ Hello MUI

    设置

    账号与安全

    新消息通知

    • 通知显示消息详情

    若关闭,当收到新消息时,通知提示将不显示发信人和内容摘要

    设置系统功能消息提示声音和震动的时段

    • 声音
    • 震动

    当HelloMUI在运行时,你可以设置是否需要声音或者震动

    功能消息免打扰

    隐私

    • 通讯录
    • 加我为朋友时需要验证
    • 向我推荐QQ好友
    • 通过QQ号搜索到我
    • 可通过手机号搜索到我
    • 向我推荐通讯录朋友
    • 开启后,为你推荐已经开通HBuilder的手机联系人
    • 通过HBuilder账号搜索到我
    • 关闭后,其他用户将不能通过HBuilder号搜索到你

    通用

    • 多语言
    • 听筒模式
    • 功能

    关于MUI

    问题反馈

    图片(选填,提供问题截图,总大小10M以下)

    QQ/邮箱

    应用评分

    ================================================ FILE: examples/hello-mui/examples/slider-default.html ================================================ Hello MUI

    图片轮播

    ================================================ FILE: examples/hello-mui/examples/slider-native.html ================================================ Hello MUI

    这是通过webview的subNViews属性配置的原生图片轮播示例,目前支持自动轮播、循环播放、点击预览、双指放大功能; 将ImageSliderStyles的position属性值设置为"static"后,轮播控件在页面中正常定位,如果页面存在滚动条,轮播控件随窗口内容一起滚动。

    原生版本的图片轮播,适合类似商品详情的场景,用户需要点击图片放大预览,而不是点击跳转新页面。

    这是为了演示页面滚动,而增加的额外文字段落。

    ================================================ FILE: examples/hello-mui/examples/slider-table-default.html ================================================ Hello MUI

    图文表格

    慢生活
    ================================================ FILE: examples/hello-mui/examples/slider-table-pagination.html ================================================ Hello MUI

    左右滑动分页

    ================================================ FILE: examples/hello-mui/examples/slider-with-title.html ================================================ Hello MUI

    下方悬浮标题

    ================================================ FILE: examples/hello-mui/examples/switches.html ================================================ Hello MUI

    开关(switch)

    ================================================ FILE: examples/hello-mui/examples/tab-top-subpage-1.html ================================================ Hello MUI
    ================================================ FILE: examples/hello-mui/examples/tab-top-subpage-2.html ================================================ Hello MUI
    ================================================ FILE: examples/hello-mui/examples/tab-top-subpage-3.html ================================================ Hello MUI
    这是webview模式选项卡中的第3个子页面
    ================================================ FILE: examples/hello-mui/examples/tab-top-subpage-4.html ================================================ Hello MUI
    ================================================ FILE: examples/hello-mui/examples/tab-top-subpage-5.html ================================================ Hello MUI
    ================================================ FILE: examples/hello-mui/examples/tab-top-webview-main.html ================================================ Hello MUI

    顶部选项卡-可左右拖动(webview)

    ================================================ FILE: examples/hello-mui/examples/tab-vertical-scroll.html ================================================ Hello MUI

    侧面选项卡-div模式

    ================================================ FILE: examples/hello-mui/examples/tab-webview-main.html ================================================ Hello MUI

    首页

    ================================================ FILE: examples/hello-mui/examples/tab-webview-subpage-about.html ================================================ Hello MUI

    这是webview模式选项卡的第1个子页面

    何谓webview模式?其实就是每个选项卡内容都是一个独立的webview,彼此之间互相独立、互不影响; 对于较为复杂的业务系统,推荐使用该模式。

    基于webview模式的选项卡,支持原生加速的下拉刷新,点击第二个选项卡(“消息”),切换选项卡,体验下拉刷新;

    ================================================ FILE: examples/hello-mui/examples/tab-webview-subpage-chat.html ================================================ Hello MUI
    这是webview模式选项卡中的第2个子页面,该页面展示一个支持下拉刷新、上拉加载的消息列表
    ================================================ FILE: examples/hello-mui/examples/tab-webview-subpage-contact.html ================================================ Hello MUI
    这是webview模式选项卡中的第3个子页面,该页面展示一个通讯录示例
    ================================================ FILE: examples/hello-mui/examples/tab-webview-subpage-setting.html ================================================ Hello MUI
    这是webview模式选项卡中的第4个子页面,该页面展示一个常见的设置示例
    ================================================ FILE: examples/hello-mui/examples/tab-with-segmented-control-vertical.html ================================================ Hello MUI

    侧面选项卡-div模式

    ================================================ FILE: examples/hello-mui/examples/tab-with-segmented-control.html ================================================ Hello MUI

    顶部选项卡-div模式

    • 第一个选项卡子项-1
    • 第一个选项卡子项-2
    • 第一个选项卡子项-3
    • 第一个选项卡子项-4
    • 第一个选项卡子项-5
    • 第一个选项卡子项-6
    • 第一个选项卡子项-7
    • 第一个选项卡子项-8
    • 第一个选项卡子项-9
    • 第一个选项卡子项-10
    • 第一个选项卡子项-11
    • 第一个选项卡子项-12
    • 第一个选项卡子项-13
    • 第一个选项卡子项-14
    • 第一个选项卡子项-15
    • 第一个选项卡子项-16
    • 第一个选项卡子项-17
    • 第一个选项卡子项-18
    • 第一个选项卡子项-19
    • 第一个选项卡子项-20
    • 第二个选项卡子项-1
    • 第二个选项卡子项-2
    • 第二个选项卡子项-3
    • 第三个选项卡子项-1
    • 第三个选项卡子项-2
    • 第三个选项卡子项-3
    Style
    Color
    ================================================ FILE: examples/hello-mui/examples/tab-with-viewpagerindicator.html ================================================ Hello MUI

    顶部选项卡-可左右拖动(div)

    • 第一个选项卡子项-1
    • 第一个选项卡子项-2
    • 第一个选项卡子项-3
    • 第一个选项卡子项-4
    • 第一个选项卡子项-5
    • 第一个选项卡子项-6
    • 第一个选项卡子项-7
    • 第一个选项卡子项-8
    • 第一个选项卡子项-9
    • 第一个选项卡子项-10
    • 第一个选项卡子项-11
    • 第一个选项卡子项-12
    • 第一个选项卡子项-13
    • 第一个选项卡子项-14
    • 第一个选项卡子项-15
    • 第一个选项卡子项-16
    • 第一个选项卡子项-17
    • 第一个选项卡子项-18
    • 第一个选项卡子项-19
    • 第一个选项卡子项-20
    Color
    ================================================ FILE: examples/hello-mui/examples/tabbar-labels-only.html ================================================ Hello MUI

    文字选项卡

    ================================================ FILE: examples/hello-mui/examples/tabbar-with-submenus.html ================================================ Hello MUI

    底部选项卡-二级菜单(div)

    这是包含二级菜单的底部选项卡示例,点击底部菜单,会展开显示对应的二级菜单。

    ================================================ FILE: examples/hello-mui/examples/tabbar.html ================================================ Hello MUI

    底部选项卡-div模式

    这是div模式选项卡中的第1个子页面.
    何谓div模式的选项卡? 其实就是通过DIV模拟一个独立页面,通过DIV的显示、隐藏模拟不同页面的切换,典型的SPA模式;
    这种模式适合简单业务系统,因为每个选项卡内容要写在一个DIV中, 若逻辑复杂,会导致当前页面DOM结构繁杂,造成webview响应缓慢,甚至崩溃; 因此若系统较复杂,需要下拉刷新等操作,推荐使用webview模式的选项卡;
    这是div模式选项卡中的第2个子页面,该页面展示一个消息列表
    这是div模式选项卡中的第3个子页面,该页面展示一个通讯录示例.
    • 叶文洁

      董事长

      yewenjie@sina.com

    • 艾AA

      总经理

      aaa@163.com

    • 罗辑

      员工

      luoji@126.com

    • 云天明

      员工

      ytm@163.com

    • 史强

      员工

      shiqiang@gmail.com

    这是div模式选项卡中的第4个子页面,该页面展示一个常见的设置示例.
    ================================================ FILE: examples/hello-mui/examples/tableviews-with-badges.html ================================================ Hello MUI

    右侧带数字角标

    ================================================ FILE: examples/hello-mui/examples/tableviews-with-collapses.html ================================================ Hello MUI

    二级列表

    ================================================ FILE: examples/hello-mui/examples/tableviews-with-swipe.html ================================================ Hello MUI

    滑动触发列表项菜单

    拖拽(滑动)显示功能按钮,点击按钮触发事件
    拖拽(滑动)显示操作图标,释放后还原,自动触发事件
    拖拽(滑动)显示多功能菜单
    ================================================ FILE: examples/hello-mui/examples/tableviews.html ================================================ Hello MUI

    普通列表

    右侧无导航箭头
    右侧有导航箭头
    card(圆角列表)
    ================================================ FILE: examples/hello-mui/examples/typography.html ================================================ Hello MUI

    Typography

    h1. Heading

    h2. Heading

    h3. Heading

    h4. Heading

    h5. Heading
    h6. Heading

    p. 目前最接近原生App效果的框架。

    ================================================ FILE: examples/hello-mui/index-menu.html ================================================ Hello MUI
    侧滑导航
    这是首页侧滑导航示例,你可以在这里放置任何内容;关闭侧滑菜单有多种方式: 1.点击本侧滑菜单页之外的任意位置; 2.点击如下红色按钮 ;3.Android手机按back键;4.Android手机按menu键。

    mui典型控件
    ================================================ FILE: examples/hello-mui/index.html ================================================ Hello MUI
    ================================================ FILE: examples/hello-mui/js/95516.js ================================================ (function() { var headerElem = document.querySelector(".header"); if (headerElem) { var backElem = document.getElementById("back-95516"); if (backElem) { return; } var css = ".header{position:relative;}#back-95516 {z-index:2000;position: absolute;display: inline-block;color: #333;top: 0;left: 0;width: 44px;height: 44px;}#back-95516:before{border: #fff solid 3px;position: absolute;left: 15px;top: 15px;display: block;content: ' ';background-size: 12px, auto;width: 12px;height: 12px;border-top: none;border-right: none;-webkit-transform: rotate(45deg);transform: rotate(45deg);}"; var headElem = document.head || document.getElementsByTagName('head')[0]; var styleElem = document.createElement('style'); styleElem.type = 'text/css'; if (styleElem.styleSheet) { styleElem.styleSheet.cssText = css; } else { styleElem.appendChild(document.createTextNode(css)); } headElem.appendChild(styleElem); backElem = document.createElement('a'); backElem.id = 'back-95516'; headerElem.appendChild(backElem); backElem.addEventListener('click', function(e) { plus.webview.currentWebview().close('auto'); }, true); document.addEventListener('plusready', function() { plus.key.addEventListener('backbutton', function() { plus.webview.currentWebview().close('auto'); }) }); } })(); ================================================ FILE: examples/hello-mui/js/arttmpl.js ================================================ /*!art-template - Template Engine | http://aui.github.com/artTemplate/*/ !function(){function a(a){return a.replace(t,"").replace(u,",").replace(v,"").replace(w,"").replace(x,"").split(y)}function b(a){return"'"+a.replace(/('|\\)/g,"\\$1").replace(/\r/g,"\\r").replace(/\n/g,"\\n")+"'"}function c(c,d){function e(a){return m+=a.split(/\n/).length-1,k&&(a=a.replace(/\s+/g," ").replace(//g,"")),a&&(a=s[1]+b(a)+s[2]+"\n"),a}function f(b){var c=m;if(j?b=j(b,d):g&&(b=b.replace(/\n/g,function(){return m++,"$line="+m+";"})),0===b.indexOf("=")){var e=l&&!/^=[=#]/.test(b);if(b=b.replace(/^=[=#]?|[\s;]*$/g,""),e){var f=b.replace(/\s*\([^\)]+\)/,"");n[f]||/^(include|print)$/.test(f)||(b="$escape("+b+")")}else b="$string("+b+")";b=s[1]+b+s[2]}return g&&(b="$line="+c+";"+b),r(a(b),function(a){if(a&&!p[a]){var b;b="print"===a?u:"include"===a?v:n[a]?"$utils."+a:o[a]?"$helpers."+a:"$data."+a,w+=a+"="+b+",",p[a]=!0}}),b+"\n"}var g=d.debug,h=d.openTag,i=d.closeTag,j=d.parser,k=d.compress,l=d.escape,m=1,p={$data:1,$filename:1,$utils:1,$helpers:1,$out:1,$line:1},q="".trim,s=q?["$out='';","$out+=",";","$out"]:["$out=[];","$out.push(",");","$out.join('')"],t=q?"$out+=text;return $out;":"$out.push(text);",u="function(){var text=''.concat.apply('',arguments);"+t+"}",v="function(filename,data){data=data||$data;var text=$utils.$include(filename,data,$filename);"+t+"}",w="'use strict';var $utils=this,$helpers=$utils.$helpers,"+(g?"$line=0,":""),x=s[0],y="return new String("+s[3]+");";r(c.split(h),function(a){a=a.split(i);var b=a[0],c=a[1];1===a.length?x+=e(b):(x+=f(b),c&&(x+=e(c)))});var z=w+x+y;g&&(z="try{"+z+"}catch(e){throw {filename:$filename,name:'Render Error',message:e.message,line:$line,source:"+b(c)+".split(/\\n/)[$line-1].replace(/^\\s+/,'')};}");try{var A=new Function("$data","$filename",z);return A.prototype=n,A}catch(B){throw B.temp="function anonymous($data,$filename) {"+z+"}",B}}var d=function(a,b){return"string"==typeof b?q(b,{filename:a}):g(a,b)};d.version="3.0.0",d.config=function(a,b){e[a]=b};var e=d.defaults={openTag:"<%",closeTag:"%>",escape:!0,cache:!0,compress:!1,parser:null},f=d.cache={};d.render=function(a,b){return q(a,b)};var g=d.renderFile=function(a,b){var c=d.get(a)||p({filename:a,name:"Render Error",message:"Template not found"});return b?c(b):c};d.get=function(a){var b;if(f[a])b=f[a];else if("object"==typeof document){var c=document.getElementById(a);if(c){var d=(c.value||c.innerHTML).replace(/^\s*|\s*$/g,"");b=q(d,{filename:a})}}return b};var h=function(a,b){return"string"!=typeof a&&(b=typeof a,"number"===b?a+="":a="function"===b?h(a.call(a)):""),a},i={"<":"<",">":">",'"':""","'":"'","&":"&"},j=function(a){return i[a]},k=function(a){return h(a).replace(/&(?![\w#]+;)|[<>"']/g,j)},l=Array.isArray||function(a){return"[object Array]"==={}.toString.call(a)},m=function(a,b){var c,d;if(l(a))for(c=0,d=a.length;d>c;c++)b.call(a,a[c],c,a);else for(c in a)b.call(a,a[c],c)},n=d.utils={$helpers:{},$include:g,$string:h,$escape:k,$each:m};d.helper=function(a,b){o[a]=b};var o=d.helpers=n.$helpers;d.onerror=function(a){var b="Template Error\n\n";for(var c in a)b+="<"+c+">\n"+a[c]+"\n\n";"object"==typeof console&&console.error(b)};var p=function(a){return d.onerror(a),function(){return"{Template Error}"}},q=d.compile=function(a,b){function d(c){try{return new i(c,h)+""}catch(d){return b.debug?p(d)():(b.debug=!0,q(a,b)(c))}}b=b||{};for(var g in e)void 0===b[g]&&(b[g]=e[g]);var h=b.filename;try{var i=c(a,b)}catch(j){return j.filename=h||"anonymous",j.name="Syntax Error",p(j)}return d.prototype=i.prototype,d.toString=function(){return i.toString()},h&&b.cache&&(f[h]=d),d},r=n.$each,s="break,case,catch,continue,debugger,default,delete,do,else,false,finally,for,function,if,in,instanceof,new,null,return,switch,this,throw,true,try,typeof,var,void,while,with,abstract,boolean,byte,char,class,const,double,enum,export,extends,final,float,goto,implements,import,int,interface,long,native,package,private,protected,public,short,static,super,synchronized,throws,transient,volatile,arguments,let,yield,undefined",t=/\/\*[\w\W]*?\*\/|\/\/[^\n]*\n|\/\/[^\n]*$|"(?:[^"\\]|\\[\w\W])*"|'(?:[^'\\]|\\[\w\W])*'|\s*\.\s*[$\w\.]+/g,u=/[^\w$]+/g,v=new RegExp(["\\b"+s.replace(/,/g,"\\b|\\b")+"\\b"].join("|"),"g"),w=/^\d[^,]*|,\d[^,]*/g,x=/^,+|,+$/g,y=/^$|,+/;"function"==typeof define?define(function(){return d}):"undefined"!=typeof exports?module.exports=d:this.template=d}(); ================================================ FILE: examples/hello-mui/js/beecloud.js ================================================ var beecloud = {}; var channels = null; var w = null; beecloud.payReq = function(data, cbsuccess, cberror) { doPay(data, cbsuccess, cberror); }; beecloud.genBillNo = function() { var d = new Date(); var vYear = d.getFullYear(); var vMon = d.getMonth() + 1; var vDay = d.getDate(); var h = d.getHours(); var m = d.getMinutes(); var se = d.getSeconds(); var ms = d.getMilliseconds(); billno = "" + vYear + (vMon < 10 ? "0" + vMon : vMon) + (vDay < 10 ? "0" + vDay : vDay) + (h < 10 ? "0" + h : h) + (m < 10 ? "0" + m : m) + (se < 10 ? "0" + se : se) + ms; return billno; }; mui.plusReady(function() { //配置业务支持的支付通道,支付需要服务端支持,在BeeCloud上支持支付宝支付和微信支付; var support_channel = ['alipay']; if(!mui.os.stream){//流应用下暂不支持微信SDK支付 support_channel.push('wxpay'); } plus.payment.getChannels(function(s) { var oauthArea = document.querySelector('.oauth-area'); for (var i = 0; i < s.length; i++) { if(s[i].serviceReady){ if(~support_channel.indexOf(s[i].id)){ var btn = document.createElement('div'); btn.setAttribute('id', s[i].id); btn.className = 'mui-btn mui-btn-blue mui-btn-block pay'; btn.innerText = s[i].description+'支付' oauthArea.appendChild(btn); } } } channels = s; }, function(e) { console.log("获取支付渠道信权限失败:" + e.message); }); }); function getRandomHost() { var hosts = ['https://apibj.beecloud.cn', 'https://apihz.beecloud.cn', 'https://apisz.beecloud.cn', 'https://apiqd.beecloud.cn' ]; return "" + hosts[parseInt(3 * Math.random())] + "/2/rest/app/bill"; } /** * 获取支付通道 * */ function getPayChannel(bc_channel) { var dc_channel_id = ''; switch (bc_channel) { case 'ALI_APP': dc_channel_id = 'alipay'; break; case 'WX_APP': dc_channel_id = 'wxpay'; break; default: break; } for (var i in channels) { if (channels[i].id == dc_channel_id) { return channels[i]; } } return null; } function doPay(payData, cbsuccess, cberror) { if (w) return; w = plus.nativeUI.showWaiting(); mui.ajax(getRandomHost(), { data: JSON.stringify(payData), type: 'post', dataType: 'json', contentType: "application/json", success: function(data) { w.close(); w = null; var paySrc = ''; if (data.result_code == 0) { var payChannel = getPayChannel(payData.channel); if (payChannel) { if (payChannel.id === 'alipay') { paySrc = data.order_string; } else if (payChannel.id === 'wxpay') { var statement = {}; statement.appid = data.app_id; statement.noncestr = data.nonce_str; statement.package = data.package; statement.partnerid = data.partner_id; statement.prepayid = data.prepay_id; statement.timestamp = parseInt(data.timestamp); statement.sign = data.pay_sign; paySrc = JSON.stringify(statement); } plus.payment.request(payChannel, paySrc, cbsuccess, cberror); } else if (payData.channel == 'UN_WEB') { //银联在线支付 var web = plus.webview.create('', "beecloudPay",{ statusbar:{ background: "#f7f7f7" } }); //注入JS,解决银联界面返回的问题 web.setJsFile('_www/js/95516.js'); web.addEventListener('loaded', function() { if (!web.isVisible()) { web.show(); } }); web.loadData(data.html); } } else { var bcError = {}; bcError.code = data.result_code; bcError.message = data.result_msg + ":" + data.err_detail; cberror(bcError); } }, error: function(xhr, errorType, error) { w.close(); w = null; cberror(error); } }); } ================================================ FILE: examples/hello-mui/js/city.data-3.js ================================================ var cityData3 = [{ value: '110000', text: '北京市', children: [{ value: "110100", text: "北京市", children: [{ value: "110101", text: "东城区" }, { value: "110102", text: "西城区" }, { value: "110103", text: "崇文区" }, { value: "110104", text: "宣武区" }, { value: "110105", text: "朝阳区" }, { value: "110106", text: "丰台区" }, { value: "110107", text: "石景山区" }, { value: "110108", text: "海淀区" }, { value: "110109", text: "门头沟区" }, { value: "110111", text: "房山区" }, { value: "110112", text: "通州区" }, { value: "110113", text: "顺义区" }, { value: "110114", text: "昌平区" }, { value: "110115", text: "大兴区" }, { value: "110116", text: "怀柔区" }, { value: "110117", text: "平谷区" }, { value: "110228", text: "密云县" }, { value: "110229", text: "延庆县" }, { value: "110230", text: "其它区" }] }] }, { value: '120000', text: '天津市', children: [{ value: "120100", text: "天津市", children: [{ value: "120101", text: "和平区" }, { value: "120102", text: "河东区" }, { value: "120103", text: "河西区" }, { value: "120104", text: "南开区" }, { value: "120105", text: "河北区" }, { value: "120106", text: "红桥区" }, { value: "120107", text: "塘沽区" }, { value: "120108", text: "汉沽区" }, { value: "120109", text: "大港区" }, { value: "120110", text: "东丽区" }, { value: "120111", text: "西青区" }, { value: "120112", text: "津南区" }, { value: "120113", text: "北辰区" }, { value: "120114", text: "武清区" }, { value: "120115", text: "宝坻区" }, { value: "120116", text: "滨海新区" }, { value: "120221", text: "宁河县" }, { value: "120223", text: "静海县" }, { value: "120225", text: "蓟县" }, { value: "120226", text: "其它区" }] }] }, { value: '130000', text: '河北省', children: [{ value: "130100", text: "石家庄市", children: [{ value: "130102", text: "长安区" }, { value: "130103", text: "桥东区" }, { value: "130104", text: "桥西区" }, { value: "130105", text: "新华区" }, { value: "130107", text: "井陉矿区" }, { value: "130108", text: "裕华区" }, { value: "130121", text: "井陉县" }, { value: "130123", text: "正定县" }, { value: "130124", text: "栾城县" }, { value: "130125", text: "行唐县" }, { value: "130126", text: "灵寿县" }, { value: "130127", text: "高邑县" }, { value: "130128", text: "深泽县" }, { value: "130129", text: "赞皇县" }, { value: "130130", text: "无极县" }, { value: "130131", text: "平山县" }, { value: "130132", text: "元氏县" }, { value: "130133", text: "赵县" }, { value: "130181", text: "辛集市" }, { value: "130182", text: "藁城市" }, { value: "130183", text: "晋州市" }, { value: "130184", text: "新乐市" }, { value: "130185", text: "鹿泉市" }, { value: "130186", text: "其它区" }] }, { value: "130200", text: "唐山市", children: [{ value: "130202", text: "路南区" }, { value: "130203", text: "路北区" }, { value: "130204", text: "古冶区" }, { value: "130205", text: "开平区" }, { value: "130207", text: "丰南区" }, { value: "130208", text: "丰润区" }, { value: "130223", text: "滦县" }, { value: "130224", text: "滦南县" }, { value: "130225", text: "乐亭县" }, { value: "130227", text: "迁西县" }, { value: "130229", text: "玉田县" }, { value: "130230", text: "唐海县" }, { value: "130281", text: "遵化市" }, { value: "130283", text: "迁安市" }, { value: "130284", text: "其它区" }] }, { value: "130300", text: "秦皇岛市", children: [{ value: "130302", text: "海港区" }, { value: "130303", text: "山海关区" }, { value: "130304", text: "北戴河区" }, { value: "130321", text: "青龙满族自治县" }, { value: "130322", text: "昌黎县" }, { value: "130323", text: "抚宁县" }, { value: "130324", text: "卢龙县" }, { value: "130398", text: "其它区" }, { value: "130399", text: "经济技术开发区" }] }, { value: "130400", text: "邯郸市", children: [{ value: "130402", text: "邯山区" }, { value: "130403", text: "丛台区" }, { value: "130404", text: "复兴区" }, { value: "130406", text: "峰峰矿区" }, { value: "130421", text: "邯郸县" }, { value: "130423", text: "临漳县" }, { value: "130424", text: "成安县" }, { value: "130425", text: "大名县" }, { value: "130426", text: "涉县" }, { value: "130427", text: "磁县" }, { value: "130428", text: "肥乡县" }, { value: "130429", text: "永年县" }, { value: "130430", text: "邱县" }, { value: "130431", text: "鸡泽县" }, { value: "130432", text: "广平县" }, { value: "130433", text: "馆陶县" }, { value: "130434", text: "魏县" }, { value: "130435", text: "曲周县" }, { value: "130481", text: "武安市" }, { value: "130482", text: "其它区" }] }, { value: "130500", text: "邢台市", children: [{ value: "130502", text: "桥东区" }, { value: "130503", text: "桥西区" }, { value: "130521", text: "邢台县" }, { value: "130522", text: "临城县" }, { value: "130523", text: "内丘县" }, { value: "130524", text: "柏乡县" }, { value: "130525", text: "隆尧县" }, { value: "130526", text: "任县" }, { value: "130527", text: "南和县" }, { value: "130528", text: "宁晋县" }, { value: "130529", text: "巨鹿县" }, { value: "130530", text: "新河县" }, { value: "130531", text: "广宗县" }, { value: "130532", text: "平乡县" }, { value: "130533", text: "威县" }, { value: "130534", text: "清河县" }, { value: "130535", text: "临西县" }, { value: "130581", text: "南宫市" }, { value: "130582", text: "沙河市" }, { value: "130583", text: "其它区" }] }, { value: "130600", text: "保定市", children: [{ value: "130602", text: "新市区" }, { value: "130603", text: "北市区" }, { value: "130604", text: "南市区" }, { value: "130621", text: "满城县" }, { value: "130622", text: "清苑县" }, { value: "130623", text: "涞水县" }, { value: "130624", text: "阜平县" }, { value: "130625", text: "徐水县" }, { value: "130626", text: "定兴县" }, { value: "130627", text: "唐县" }, { value: "130628", text: "高阳县" }, { value: "130629", text: "容城县" }, { value: "130630", text: "涞源县" }, { value: "130631", text: "望都县" }, { value: "130632", text: "安新县" }, { value: "130633", text: "易县" }, { value: "130634", text: "曲阳县" }, { value: "130635", text: "蠡县" }, { value: "130636", text: "顺平县" }, { value: "130637", text: "博野县" }, { value: "130638", text: "雄县" }, { value: "130681", text: "涿州市" }, { value: "130682", text: "定州市" }, { value: "130683", text: "安国市" }, { value: "130684", text: "高碑店市" }, { value: "130698", text: "高开区" }, { value: "130699", text: "其它区" }] }, { value: "130700", text: "张家口市", children: [{ value: "130702", text: "桥东区" }, { value: "130703", text: "桥西区" }, { value: "130705", text: "宣化区" }, { value: "130706", text: "下花园区" }, { value: "130721", text: "宣化县" }, { value: "130722", text: "张北县" }, { value: "130723", text: "康保县" }, { value: "130724", text: "沽源县" }, { value: "130725", text: "尚义县" }, { value: "130726", text: "蔚县" }, { value: "130727", text: "阳原县" }, { value: "130728", text: "怀安县" }, { value: "130729", text: "万全县" }, { value: "130730", text: "怀来县" }, { value: "130731", text: "涿鹿县" }, { value: "130732", text: "赤城县" }, { value: "130733", text: "崇礼县" }, { value: "130734", text: "其它区" }] }, { value: "130800", text: "承德市", children: [{ value: "130802", text: "双桥区" }, { value: "130803", text: "双滦区" }, { value: "130804", text: "鹰手营子矿区" }, { value: "130821", text: "承德县" }, { value: "130822", text: "兴隆县" }, { value: "130823", text: "平泉县" }, { value: "130824", text: "滦平县" }, { value: "130825", text: "隆化县" }, { value: "130826", text: "丰宁满族自治县" }, { value: "130827", text: "宽城满族自治县" }, { value: "130828", text: "围场满族蒙古族自治县" }, { value: "130829", text: "其它区" }] }, { value: "130900", text: "沧州市", children: [{ value: "130902", text: "新华区" }, { value: "130903", text: "运河区" }, { value: "130921", text: "沧县" }, { value: "130922", text: "青县" }, { value: "130923", text: "东光县" }, { value: "130924", text: "海兴县" }, { value: "130925", text: "盐山县" }, { value: "130926", text: "肃宁县" }, { value: "130927", text: "南皮县" }, { value: "130928", text: "吴桥县" }, { value: "130929", text: "献县" }, { value: "130930", text: "孟村回族自治县" }, { value: "130981", text: "泊头市" }, { value: "130982", text: "任丘市" }, { value: "130983", text: "黄骅市" }, { value: "130984", text: "河间市" }, { value: "130985", text: "其它区" }] }, { value: "131000", text: "廊坊市", children: [{ value: "131002", text: "安次区" }, { value: "131003", text: "广阳区" }, { value: "131022", text: "固安县" }, { value: "131023", text: "永清县" }, { value: "131024", text: "香河县" }, { value: "131025", text: "大城县" }, { value: "131026", text: "文安县" }, { value: "131028", text: "大厂回族自治县" }, { value: "131051", text: "开发区" }, { value: "131052", text: "燕郊经济技术开发区" }, { value: "131081", text: "霸州市" }, { value: "131082", text: "三河市" }, { value: "131083", text: "其它区" }] }, { value: "131100", text: "衡水市", children: [{ value: "131102", text: "桃城区" }, { value: "131121", text: "枣强县" }, { value: "131122", text: "武邑县" }, { value: "131123", text: "武强县" }, { value: "131124", text: "饶阳县" }, { value: "131125", text: "安平县" }, { value: "131126", text: "故城县" }, { value: "131127", text: "景县" }, { value: "131128", text: "阜城县" }, { value: "131181", text: "冀州市" }, { value: "131182", text: "深州市" }, { value: "131183", text: "其它区" }] }] }, { value: '140000', text: '山西省', children: [{ value: "140100", text: "太原市", children: [{ value: "140105", text: "小店区" }, { value: "140106", text: "迎泽区" }, { value: "140107", text: "杏花岭区" }, { value: "140108", text: "尖草坪区" }, { value: "140109", text: "万柏林区" }, { value: "140110", text: "晋源区" }, { value: "140121", text: "清徐县" }, { value: "140122", text: "阳曲县" }, { value: "140123", text: "娄烦县" }, { value: "140181", text: "古交市" }, { value: "140182", text: "其它区" }] }, { value: "140200", text: "大同市", children: [{ value: "140202", text: "城区" }, { value: "140203", text: "矿区" }, { value: "140211", text: "南郊区" }, { value: "140212", text: "新荣区" }, { value: "140221", text: "阳高县" }, { value: "140222", text: "天镇县" }, { value: "140223", text: "广灵县" }, { value: "140224", text: "灵丘县" }, { value: "140225", text: "浑源县" }, { value: "140226", text: "左云县" }, { value: "140227", text: "大同县" }, { value: "140228", text: "其它区" }] }, { value: "140300", text: "阳泉市", children: [{ value: "140302", text: "城区" }, { value: "140303", text: "矿区" }, { value: "140311", text: "郊区" }, { value: "140321", text: "平定县" }, { value: "140322", text: "盂县" }, { value: "140323", text: "其它区" }] }, { value: "140400", text: "长治市", children: [{ value: "140421", text: "长治县" }, { value: "140423", text: "襄垣县" }, { value: "140424", text: "屯留县" }, { value: "140425", text: "平顺县" }, { value: "140426", text: "黎城县" }, { value: "140427", text: "壶关县" }, { value: "140428", text: "长子县" }, { value: "140429", text: "武乡县" }, { value: "140430", text: "沁县" }, { value: "140431", text: "沁源县" }, { value: "140481", text: "潞城市" }, { value: "140482", text: "城区" }, { value: "140483", text: "郊区" }, { value: "140484", text: "高新区" }, { value: "140485", text: "其它区" }] }, { value: "140500", text: "晋城市", children: [{ value: "140502", text: "城区" }, { value: "140521", text: "沁水县" }, { value: "140522", text: "阳城县" }, { value: "140524", text: "陵川县" }, { value: "140525", text: "泽州县" }, { value: "140581", text: "高平市" }, { value: "140582", text: "其它区" }] }, { value: "140600", text: "朔州市", children: [{ value: "140602", text: "朔城区" }, { value: "140603", text: "平鲁区" }, { value: "140621", text: "山阴县" }, { value: "140622", text: "应县" }, { value: "140623", text: "右玉县" }, { value: "140624", text: "怀仁县" }, { value: "140625", text: "其它区" }] }, { value: "140700", text: "晋中市", children: [{ value: "140702", text: "榆次区" }, { value: "140721", text: "榆社县" }, { value: "140722", text: "左权县" }, { value: "140723", text: "和顺县" }, { value: "140724", text: "昔阳县" }, { value: "140725", text: "寿阳县" }, { value: "140726", text: "太谷县" }, { value: "140727", text: "祁县" }, { value: "140728", text: "平遥县" }, { value: "140729", text: "灵石县" }, { value: "140781", text: "介休市" }, { value: "140782", text: "其它区" }] }, { value: "140800", text: "运城市", children: [{ value: "140802", text: "盐湖区" }, { value: "140821", text: "临猗县" }, { value: "140822", text: "万荣县" }, { value: "140823", text: "闻喜县" }, { value: "140824", text: "稷山县" }, { value: "140825", text: "新绛县" }, { value: "140826", text: "绛县" }, { value: "140827", text: "垣曲县" }, { value: "140828", text: "夏县" }, { value: "140829", text: "平陆县" }, { value: "140830", text: "芮城县" }, { value: "140881", text: "永济市" }, { value: "140882", text: "河津市" }, { value: "140883", text: "其它区" }] }, { value: "140900", text: "忻州市", children: [{ value: "140902", text: "忻府区" }, { value: "140921", text: "定襄县" }, { value: "140922", text: "五台县" }, { value: "140923", text: "代县" }, { value: "140924", text: "繁峙县" }, { value: "140925", text: "宁武县" }, { value: "140926", text: "静乐县" }, { value: "140927", text: "神池县" }, { value: "140928", text: "五寨县" }, { value: "140929", text: "岢岚县" }, { value: "140930", text: "河曲县" }, { value: "140931", text: "保德县" }, { value: "140932", text: "偏关县" }, { value: "140981", text: "原平市" }, { value: "140982", text: "其它区" }] }, { value: "141000", text: "临汾市", children: [{ value: "141002", text: "尧都区" }, { value: "141021", text: "曲沃县" }, { value: "141022", text: "翼城县" }, { value: "141023", text: "襄汾县" }, { value: "141024", text: "洪洞县" }, { value: "141025", text: "古县" }, { value: "141026", text: "安泽县" }, { value: "141027", text: "浮山县" }, { value: "141028", text: "吉县" }, { value: "141029", text: "乡宁县" }, { value: "141030", text: "大宁县" }, { value: "141031", text: "隰县" }, { value: "141032", text: "永和县" }, { value: "141033", text: "蒲县" }, { value: "141034", text: "汾西县" }, { value: "141081", text: "侯马市" }, { value: "141082", text: "霍州市" }, { value: "141083", text: "其它区" }] }, { value: "141100", text: "吕梁市", children: [{ value: "141102", text: "离石区" }, { value: "141121", text: "文水县" }, { value: "141122", text: "交城县" }, { value: "141123", text: "兴县" }, { value: "141124", text: "临县" }, { value: "141125", text: "柳林县" }, { value: "141126", text: "石楼县" }, { value: "141127", text: "岚县" }, { value: "141128", text: "方山县" }, { value: "141129", text: "中阳县" }, { value: "141130", text: "交口县" }, { value: "141181", text: "孝义市" }, { value: "141182", text: "汾阳市" }, { value: "141183", text: "其它区" }] }] }, { value: '150000', text: '内蒙古', children: [{ value: "150100", text: "呼和浩特市", children: [{ value: "150102", text: "新城区" }, { value: "150103", text: "回民区" }, { value: "150104", text: "玉泉区" }, { value: "150105", text: "赛罕区" }, { value: "150121", text: "土默特左旗" }, { value: "150122", text: "托克托县" }, { value: "150123", text: "和林格尔县" }, { value: "150124", text: "清水河县" }, { value: "150125", text: "武川县" }, { value: "150126", text: "其它区" }] }, { value: "150200", text: "包头市", children: [{ value: "150202", text: "东河区" }, { value: "150203", text: "昆都仑区" }, { value: "150204", text: "青山区" }, { value: "150205", text: "石拐区" }, { value: "150206", text: "白云矿区" }, { value: "150207", text: "九原区" }, { value: "150221", text: "土默特右旗" }, { value: "150222", text: "固阳县" }, { value: "150223", text: "达尔罕茂明安联合旗" }, { value: "150224", text: "其它区" }] }, { value: "150300", text: "乌海市", children: [{ value: "150302", text: "海勃湾区" }, { value: "150303", text: "海南区" }, { value: "150304", text: "乌达区" }, { value: "150305", text: "其它区" }] }, { value: "150400", text: "赤峰市", children: [{ value: "150402", text: "红山区" }, { value: "150403", text: "元宝山区" }, { value: "150404", text: "松山区" }, { value: "150421", text: "阿鲁科尔沁旗" }, { value: "150422", text: "巴林左旗" }, { value: "150423", text: "巴林右旗" }, { value: "150424", text: "林西县" }, { value: "150425", text: "克什克腾旗" }, { value: "150426", text: "翁牛特旗" }, { value: "150428", text: "喀喇沁旗" }, { value: "150429", text: "宁城县" }, { value: "150430", text: "敖汉旗" }, { value: "150431", text: "其它区" }] }, { value: "150500", text: "通辽市", children: [{ value: "150502", text: "科尔沁区" }, { value: "150521", text: "科尔沁左翼中旗" }, { value: "150522", text: "科尔沁左翼后旗" }, { value: "150523", text: "开鲁县" }, { value: "150524", text: "库伦旗" }, { value: "150525", text: "奈曼旗" }, { value: "150526", text: "扎鲁特旗" }, { value: "150581", text: "霍林郭勒市" }, { value: "150582", text: "其它区" }] }, { value: "150600", text: "鄂尔多斯市", children: [{ value: "150602", text: "东胜区" }, { value: "150621", text: "达拉特旗" }, { value: "150622", text: "准格尔旗" }, { value: "150623", text: "鄂托克前旗" }, { value: "150624", text: "鄂托克旗" }, { value: "150625", text: "杭锦旗" }, { value: "150626", text: "乌审旗" }, { value: "150627", text: "伊金霍洛旗" }, { value: "150628", text: "其它区" }] }, { value: "150700", text: "呼伦贝尔市", children: [{ value: "150702", text: "海拉尔区" }, { value: "150721", text: "阿荣旗" }, { value: "150722", text: "莫力达瓦达斡尔族自治旗" }, { value: "150723", text: "鄂伦春自治旗" }, { value: "150724", text: "鄂温克族自治旗" }, { value: "150725", text: "陈巴尔虎旗" }, { value: "150726", text: "新巴尔虎左旗" }, { value: "150727", text: "新巴尔虎右旗" }, { value: "150781", text: "满洲里市" }, { value: "150782", text: "牙克石市" }, { value: "150783", text: "扎兰屯市" }, { value: "150784", text: "额尔古纳市" }, { value: "150785", text: "根河市" }, { value: "150786", text: "其它区" }] }, { value: "150800", text: "巴彦淖尔市", children: [{ value: "150802", text: "临河区" }, { value: "150821", text: "五原县" }, { value: "150822", text: "磴口县" }, { value: "150823", text: "乌拉特前旗" }, { value: "150824", text: "乌拉特中旗" }, { value: "150825", text: "乌拉特后旗" }, { value: "150826", text: "杭锦后旗" }, { value: "150827", text: "其它区" }] }, { value: "150900", text: "乌兰察布市", children: [{ value: "150902", text: "集宁区" }, { value: "150921", text: "卓资县" }, { value: "150922", text: "化德县" }, { value: "150923", text: "商都县" }, { value: "150924", text: "兴和县" }, { value: "150925", text: "凉城县" }, { value: "150926", text: "察哈尔右翼前旗" }, { value: "150927", text: "察哈尔右翼中旗" }, { value: "150928", text: "察哈尔右翼后旗" }, { value: "150929", text: "四子王旗" }, { value: "150981", text: "丰镇市" }, { value: "150982", text: "其它区" }] }, { value: "152200", text: "兴安盟", children: [{ value: "152201", text: "乌兰浩特市" }, { value: "152202", text: "阿尔山市" }, { value: "152221", text: "科尔沁右翼前旗" }, { value: "152222", text: "科尔沁右翼中旗" }, { value: "152223", text: "扎赉特旗" }, { value: "152224", text: "突泉县" }, { value: "152225", text: "其它区" }] }, { value: "152500", text: "锡林郭勒盟", children: [{ value: "152501", text: "二连浩特市" }, { value: "152502", text: "锡林浩特市" }, { value: "152522", text: "阿巴嘎旗" }, { value: "152523", text: "苏尼特左旗" }, { value: "152524", text: "苏尼特右旗" }, { value: "152525", text: "东乌珠穆沁旗" }, { value: "152526", text: "西乌珠穆沁旗" }, { value: "152527", text: "太仆寺旗" }, { value: "152528", text: "镶黄旗" }, { value: "152529", text: "正镶白旗" }, { value: "152530", text: "正蓝旗" }, { value: "152531", text: "多伦县" }, { value: "152532", text: "其它区" }] }, { value: "152900", text: "阿拉善盟", children: [{ value: "152921", text: "阿拉善左旗" }, { value: "152922", text: "阿拉善右旗" }, { value: "152923", text: "额济纳旗" }, { value: "152924", text: "其它区" }] }] }, { value: '210000', text: '辽宁省', children: [{ value: "210100", text: "沈阳市", children: [{ value: "210102", text: "和平区" }, { value: "210103", text: "沈河区" }, { value: "210104", text: "大东区" }, { value: "210105", text: "皇姑区" }, { value: "210106", text: "铁西区" }, { value: "210111", text: "苏家屯区" }, { value: "210112", text: "东陵区" }, { value: "210113", text: "新城子区" }, { value: "210114", text: "于洪区" }, { value: "210122", text: "辽中县" }, { value: "210123", text: "康平县" }, { value: "210124", text: "法库县" }, { value: "210181", text: "新民市" }, { value: "210182", text: "浑南新区" }, { value: "210183", text: "张士开发区" }, { value: "210184", text: "沈北新区" }, { value: "210185", text: "其它区" }] }, { value: "210200", text: "大连市", children: [{ value: "210202", text: "中山区" }, { value: "210203", text: "西岗区" }, { value: "210204", text: "沙河口区" }, { value: "210211", text: "甘井子区" }, { value: "210212", text: "旅顺口区" }, { value: "210213", text: "金州区" }, { value: "210224", text: "长海县" }, { value: "210251", text: "开发区" }, { value: "210281", text: "瓦房店市" }, { value: "210282", text: "普兰店市" }, { value: "210283", text: "庄河市" }, { value: "210297", text: "岭前区" }, { value: "210298", text: "其它区" }] }, { value: "210300", text: "鞍山市", children: [{ value: "210302", text: "铁东区" }, { value: "210303", text: "铁西区" }, { value: "210304", text: "立山区" }, { value: "210311", text: "千山区" }, { value: "210321", text: "台安县" }, { value: "210323", text: "岫岩满族自治县" }, { value: "210351", text: "高新区" }, { value: "210381", text: "海城市" }, { value: "210382", text: "其它区" }] }, { value: "210400", text: "抚顺市", children: [{ value: "210402", text: "新抚区" }, { value: "210403", text: "东洲区" }, { value: "210404", text: "望花区" }, { value: "210411", text: "顺城区" }, { value: "210421", text: "抚顺县" }, { value: "210422", text: "新宾满族自治县" }, { value: "210423", text: "清原满族自治县" }, { value: "210424", text: "其它区" }] }, { value: "210500", text: "本溪市", children: [{ value: "210502", text: "平山区" }, { value: "210503", text: "溪湖区" }, { value: "210504", text: "明山区" }, { value: "210505", text: "南芬区" }, { value: "210521", text: "本溪满族自治县" }, { value: "210522", text: "桓仁满族自治县" }, { value: "210523", text: "其它区" }] }, { value: "210600", text: "丹东市", children: [{ value: "210602", text: "元宝区" }, { value: "210603", text: "振兴区" }, { value: "210604", text: "振安区" }, { value: "210624", text: "宽甸满族自治县" }, { value: "210681", text: "东港市" }, { value: "210682", text: "凤城市" }, { value: "210683", text: "其它区" }] }, { value: "210700", text: "锦州市", children: [{ value: "210702", text: "古塔区" }, { value: "210703", text: "凌河区" }, { value: "210711", text: "太和区" }, { value: "210726", text: "黑山县" }, { value: "210727", text: "义县" }, { value: "210781", text: "凌海市" }, { value: "210782", text: "北镇市" }, { value: "210783", text: "其它区" }] }, { value: "210800", text: "营口市", children: [{ value: "210802", text: "站前区" }, { value: "210803", text: "西市区" }, { value: "210804", text: "鲅鱼圈区" }, { value: "210811", text: "老边区" }, { value: "210881", text: "盖州市" }, { value: "210882", text: "大石桥市" }, { value: "210883", text: "其它区" }] }, { value: "210900", text: "阜新市", children: [{ value: "210902", text: "海州区" }, { value: "210903", text: "新邱区" }, { value: "210904", text: "太平区" }, { value: "210905", text: "清河门区" }, { value: "210911", text: "细河区" }, { value: "210921", text: "阜新蒙古族自治县" }, { value: "210922", text: "彰武县" }, { value: "210923", text: "其它区" }] }, { value: "211000", text: "辽阳市", children: [{ value: "211002", text: "白塔区" }, { value: "211003", text: "文圣区" }, { value: "211004", text: "宏伟区" }, { value: "211005", text: "弓长岭区" }, { value: "211011", text: "太子河区" }, { value: "211021", text: "辽阳县" }, { value: "211081", text: "灯塔市" }, { value: "211082", text: "其它区" }] }, { value: "211100", text: "盘锦市", children: [{ value: "211102", text: "双台子区" }, { value: "211103", text: "兴隆台区" }, { value: "211121", text: "大洼县" }, { value: "211122", text: "盘山县" }, { value: "211123", text: "其它区" }] }, { value: "211200", text: "铁岭市", children: [{ value: "211202", text: "银州区" }, { value: "211204", text: "清河区" }, { value: "211221", text: "铁岭县" }, { value: "211223", text: "西丰县" }, { value: "211224", text: "昌图县" }, { value: "211281", text: "调兵山市" }, { value: "211282", text: "开原市" }, { value: "211283", text: "其它区" }] }, { value: "211300", text: "朝阳市", children: [{ value: "211302", text: "双塔区" }, { value: "211303", text: "龙城区" }, { value: "211321", text: "朝阳县" }, { value: "211322", text: "建平县" }, { value: "211324", text: "喀喇沁左翼蒙古族自治县" }, { value: "211381", text: "北票市" }, { value: "211382", text: "凌源市" }, { value: "211383", text: "其它区" }] }, { value: "211400", text: "葫芦岛市", children: [{ value: "211402", text: "连山区" }, { value: "211403", text: "龙港区" }, { value: "211404", text: "南票区" }, { value: "211421", text: "绥中县" }, { value: "211422", text: "建昌县" }, { value: "211481", text: "兴城市" }, { value: "211482", text: "其它区" }] }] }, { value: '220000', text: '吉林省', children: [{ value: "220100", text: "长春市", children: [{ value: "220102", text: "南关区" }, { value: "220103", text: "宽城区" }, { value: "220104", text: "朝阳区" }, { value: "220105", text: "二道区" }, { value: "220106", text: "绿园区" }, { value: "220112", text: "双阳区" }, { value: "220122", text: "农安县" }, { value: "220181", text: "九台市" }, { value: "220182", text: "榆树市" }, { value: "220183", text: "德惠市" }, { value: "220184", text: "高新技术产业开发区" }, { value: "220185", text: "汽车产业开发区" }, { value: "220186", text: "经济技术开发区" }, { value: "220187", text: "净月旅游开发区" }, { value: "220188", text: "其它区" }] }, { value: "220200", text: "吉林市", children: [{ value: "220202", text: "昌邑区" }, { value: "220203", text: "龙潭区" }, { value: "220204", text: "船营区" }, { value: "220211", text: "丰满区" }, { value: "220221", text: "永吉县" }, { value: "220281", text: "蛟河市" }, { value: "220282", text: "桦甸市" }, { value: "220283", text: "舒兰市" }, { value: "220284", text: "磐石市" }, { value: "220285", text: "其它区" }] }, { value: "220300", text: "四平市", children: [{ value: "220302", text: "铁西区" }, { value: "220303", text: "铁东区" }, { value: "220322", text: "梨树县" }, { value: "220323", text: "伊通满族自治县" }, { value: "220381", text: "公主岭市" }, { value: "220382", text: "双辽市" }, { value: "220383", text: "其它区" }] }, { value: "220400", text: "辽源市", children: [{ value: "220402", text: "龙山区" }, { value: "220403", text: "西安区" }, { value: "220421", text: "东丰县" }, { value: "220422", text: "东辽县" }, { value: "220423", text: "其它区" }] }, { value: "220500", text: "通化市", children: [{ value: "220502", text: "东昌区" }, { value: "220503", text: "二道江区" }, { value: "220521", text: "通化县" }, { value: "220523", text: "辉南县" }, { value: "220524", text: "柳河县" }, { value: "220581", text: "梅河口市" }, { value: "220582", text: "集安市" }, { value: "220583", text: "其它区" }] }, { value: "220600", text: "白山市", children: [{ value: "220602", text: "八道江区" }, { value: "220621", text: "抚松县" }, { value: "220622", text: "靖宇县" }, { value: "220623", text: "长白朝鲜族自治县" }, { value: "220625", text: "江源市" }, { value: "220681", text: "临江市" }, { value: "220682", text: "其它区" }] }, { value: "220700", text: "松原市", children: [{ value: "220702", text: "宁江区" }, { value: "220721", text: "前郭尔罗斯蒙古族自治县" }, { value: "220722", text: "长岭县" }, { value: "220723", text: "乾安县" }, { value: "220724", text: "扶余县" }, { value: "220725", text: "其它区" }] }, { value: "220800", text: "白城市", children: [{ value: "220802", text: "洮北区" }, { value: "220821", text: "镇赉县" }, { value: "220822", text: "通榆县" }, { value: "220881", text: "洮南市" }, { value: "220882", text: "大安市" }, { value: "220883", text: "其它区" }] }, { value: "222400", text: "延边朝鲜族自治州", children: [{ value: "222401", text: "延吉市" }, { value: "222402", text: "图们市" }, { value: "222403", text: "敦化市" }, { value: "222404", text: "珲春市" }, { value: "222405", text: "龙井市" }, { value: "222406", text: "和龙市" }, { value: "222424", text: "汪清县" }, { value: "222426", text: "安图县" }, { value: "222427", text: "其它区" }] }] }, { value: '230000', text: '黑龙江省', children: [{ value: "230100", text: "哈尔滨市", children: [{ value: "230102", text: "道里区" }, { value: "230103", text: "南岗区" }, { value: "230104", text: "道外区" }, { value: "230106", text: "香坊区" }, { value: "230107", text: "动力区" }, { value: "230108", text: "平房区" }, { value: "230109", text: "松北区" }, { value: "230111", text: "呼兰区" }, { value: "230123", text: "依兰县" }, { value: "230124", text: "方正县" }, { value: "230125", text: "宾县" }, { value: "230126", text: "巴彦县" }, { value: "230127", text: "木兰县" }, { value: "230128", text: "通河县" }, { value: "230129", text: "延寿县" }, { value: "230181", text: "阿城市" }, { value: "230182", text: "双城市" }, { value: "230183", text: "尚志市" }, { value: "230184", text: "五常市" }, { value: "230185", text: "阿城市" }, { value: "230186", text: "其它区" }] }, { value: "230200", text: "齐齐哈尔市", children: [{ value: "230202", text: "龙沙区" }, { value: "230203", text: "建华区" }, { value: "230204", text: "铁锋区" }, { value: "230205", text: "昂昂溪区" }, { value: "230206", text: "富拉尔基区" }, { value: "230207", text: "碾子山区" }, { value: "230208", text: "梅里斯达斡尔族区" }, { value: "230221", text: "龙江县" }, { value: "230223", text: "依安县" }, { value: "230224", text: "泰来县" }, { value: "230225", text: "甘南县" }, { value: "230227", text: "富裕县" }, { value: "230229", text: "克山县" }, { value: "230230", text: "克东县" }, { value: "230231", text: "拜泉县" }, { value: "230281", text: "讷河市" }, { value: "230282", text: "其它区" }] }, { value: "230300", text: "鸡西市", children: [{ value: "230302", text: "鸡冠区" }, { value: "230303", text: "恒山区" }, { value: "230304", text: "滴道区" }, { value: "230305", text: "梨树区" }, { value: "230306", text: "城子河区" }, { value: "230307", text: "麻山区" }, { value: "230321", text: "鸡东县" }, { value: "230381", text: "虎林市" }, { value: "230382", text: "密山市" }, { value: "230383", text: "其它区" }] }, { value: "230400", text: "鹤岗市", children: [{ value: "230402", text: "向阳区" }, { value: "230403", text: "工农区" }, { value: "230404", text: "南山区" }, { value: "230405", text: "兴安区" }, { value: "230406", text: "东山区" }, { value: "230407", text: "兴山区" }, { value: "230421", text: "萝北县" }, { value: "230422", text: "绥滨县" }, { value: "230423", text: "其它区" }] }, { value: "230500", text: "双鸭山市", children: [{ value: "230502", text: "尖山区" }, { value: "230503", text: "岭东区" }, { value: "230505", text: "四方台区" }, { value: "230506", text: "宝山区" }, { value: "230521", text: "集贤县" }, { value: "230522", text: "友谊县" }, { value: "230523", text: "宝清县" }, { value: "230524", text: "饶河县" }, { value: "230525", text: "其它区" }] }, { value: "230600", text: "大庆市", children: [{ value: "230602", text: "萨尔图区" }, { value: "230603", text: "龙凤区" }, { value: "230604", text: "让胡路区" }, { value: "230605", text: "红岗区" }, { value: "230606", text: "大同区" }, { value: "230621", text: "肇州县" }, { value: "230622", text: "肇源县" }, { value: "230623", text: "林甸县" }, { value: "230624", text: "杜尔伯特蒙古族自治县" }, { value: "230625", text: "其它区" }] }, { value: "230700", text: "伊春市", children: [{ value: "230702", text: "伊春区" }, { value: "230703", text: "南岔区" }, { value: "230704", text: "友好区" }, { value: "230705", text: "西林区" }, { value: "230706", text: "翠峦区" }, { value: "230707", text: "新青区" }, { value: "230708", text: "美溪区" }, { value: "230709", text: "金山屯区" }, { value: "230710", text: "五营区" }, { value: "230711", text: "乌马河区" }, { value: "230712", text: "汤旺河区" }, { value: "230713", text: "带岭区" }, { value: "230714", text: "乌伊岭区" }, { value: "230715", text: "红星区" }, { value: "230716", text: "上甘岭区" }, { value: "230722", text: "嘉荫县" }, { value: "230781", text: "铁力市" }, { value: "230782", text: "其它区" }] }, { value: "230800", text: "佳木斯市", children: [{ value: "230802", text: "永红区" }, { value: "230803", text: "向阳区" }, { value: "230804", text: "前进区" }, { value: "230805", text: "东风区" }, { value: "230811", text: "郊区" }, { value: "230822", text: "桦南县" }, { value: "230826", text: "桦川县" }, { value: "230828", text: "汤原县" }, { value: "230833", text: "抚远县" }, { value: "230881", text: "同江市" }, { value: "230882", text: "富锦市" }, { value: "230883", text: "其它区" }] }, { value: "230900", text: "七台河市", children: [{ value: "230902", text: "新兴区" }, { value: "230903", text: "桃山区" }, { value: "230904", text: "茄子河区" }, { value: "230921", text: "勃利县" }, { value: "230922", text: "其它区" }] }, { value: "231000", text: "牡丹江市", children: [{ value: "231002", text: "东安区" }, { value: "231003", text: "阳明区" }, { value: "231004", text: "爱民区" }, { value: "231005", text: "西安区" }, { value: "231024", text: "东宁县" }, { value: "231025", text: "林口县" }, { value: "231081", text: "绥芬河市" }, { value: "231083", text: "海林市" }, { value: "231084", text: "宁安市" }, { value: "231085", text: "穆棱市" }, { value: "231086", text: "其它区" }] }, { value: "231100", text: "黑河市", children: [{ value: "231102", text: "爱辉区" }, { value: "231121", text: "嫩江县" }, { value: "231123", text: "逊克县" }, { value: "231124", text: "孙吴县" }, { value: "231181", text: "北安市" }, { value: "231182", text: "五大连池市" }, { value: "231183", text: "其它区" }] }, { value: "231200", text: "绥化市", children: [{ value: "231202", text: "北林区" }, { value: "231221", text: "望奎县" }, { value: "231222", text: "兰西县" }, { value: "231223", text: "青冈县" }, { value: "231224", text: "庆安县" }, { value: "231225", text: "明水县" }, { value: "231226", text: "绥棱县" }, { value: "231281", text: "安达市" }, { value: "231282", text: "肇东市" }, { value: "231283", text: "海伦市" }, { value: "231284", text: "其它区" }] }, { value: "232700", text: "大兴安岭地区", children: [{ value: "232721", text: "呼玛县" }, { value: "232722", text: "塔河县" }, { value: "232723", text: "漠河县" }, { value: "232724", text: "加格达奇区" }, { value: "232725", text: "其它区" }] }] }, { value: '310000', text: '上海市', children: [{ value: '310100', text: '上海市', children: [{ value: "310101", text: "黄浦区" }, { value: "310103", text: "卢湾区" }, { value: "310104", text: "徐汇区" }, { value: "310105", text: "长宁区" }, { value: "310106", text: "静安区" }, { value: "310107", text: "普陀区" }, { value: "310108", text: "闸北区" }, { value: "310109", text: "虹口区" }, { value: "310110", text: "杨浦区" }, { value: "310112", text: "闵行区" }, { value: "310113", text: "宝山区" }, { value: "310114", text: "嘉定区" }, { value: "310115", text: "浦东新区" }, { value: "310116", text: "金山区" }, { value: "310117", text: "松江区" }, { value: "310118", text: "青浦区" }, { value: "310119", text: "南汇区" }, { value: "310120", text: "奉贤区" }, { value: "310152", text: "川沙区" }, { value: "310230", text: "崇明县" }, { value: "310231", text: "其它区" }] }] }, { value: '320000', text: '江苏省', children: [{ value: "320100", text: "南京市", children: [{ value: "320102", text: "玄武区" }, { value: "320103", text: "白下区" }, { value: "320104", text: "秦淮区" }, { value: "320105", text: "建邺区" }, { value: "320106", text: "鼓楼区" }, { value: "320107", text: "下关区" }, { value: "320111", text: "浦口区" }, { value: "320113", text: "栖霞区" }, { value: "320114", text: "雨花台区" }, { value: "320115", text: "江宁区" }, { value: "320116", text: "六合区" }, { value: "320124", text: "溧水县" }, { value: "320125", text: "高淳县" }, { value: "320126", text: "其它区" }] }, { value: "320200", text: "无锡市", children: [{ value: "320202", text: "崇安区" }, { value: "320203", text: "南长区" }, { value: "320204", text: "北塘区" }, { value: "320205", text: "锡山区" }, { value: "320206", text: "惠山区" }, { value: "320211", text: "滨湖区" }, { value: "320281", text: "江阴市" }, { value: "320282", text: "宜兴市" }, { value: "320296", text: "新区" }, { value: "320297", text: "其它区" }] }, { value: "320300", text: "徐州市", children: [{ value: "320302", text: "鼓楼区" }, { value: "320303", text: "云龙区" }, { value: "320304", text: "九里区" }, { value: "320305", text: "贾汪区" }, { value: "320311", text: "泉山区" }, { value: "320321", text: "丰县" }, { value: "320322", text: "沛县" }, { value: "320323", text: "铜山县" }, { value: "320324", text: "睢宁县" }, { value: "320381", text: "新沂市" }, { value: "320382", text: "邳州市" }, { value: "320383", text: "其它区" }] }, { value: "320400", text: "常州市", children: [{ value: "320402", text: "天宁区" }, { value: "320404", text: "钟楼区" }, { value: "320405", text: "戚墅堰区" }, { value: "320411", text: "新北区" }, { value: "320412", text: "武进区" }, { value: "320481", text: "溧阳市" }, { value: "320482", text: "金坛市" }, { value: "320483", text: "其它区" }] }, { value: "320500", text: "苏州市", children: [{ value: "320502", text: "沧浪区" }, { value: "320503", text: "平江区" }, { value: "320504", text: "金阊区" }, { value: "320505", text: "虎丘区" }, { value: "320506", text: "吴中区" }, { value: "320507", text: "相城区" }, { value: "320581", text: "常熟市" }, { value: "320582", text: "张家港市" }, { value: "320583", text: "昆山市" }, { value: "320584", text: "吴江市" }, { value: "320585", text: "太仓市" }, { value: "320594", text: "新区" }, { value: "320595", text: "园区" }, { value: "320596", text: "其它区" }] }, { value: "320600", text: "南通市", children: [{ value: "320602", text: "崇川区" }, { value: "320611", text: "港闸区" }, { value: "320612", text: "通州区" }, { value: "320621", text: "海安县" }, { value: "320623", text: "如东县" }, { value: "320681", text: "启东市" }, { value: "320682", text: "如皋市" }, { value: "320683", text: "通州市" }, { value: "320684", text: "海门市" }, { value: "320693", text: "开发区" }, { value: "320694", text: "其它区" }] }, { value: "320700", text: "连云港市", children: [{ value: "320703", text: "连云区" }, { value: "320705", text: "新浦区" }, { value: "320706", text: "海州区" }, { value: "320721", text: "赣榆县" }, { value: "320722", text: "东海县" }, { value: "320723", text: "灌云县" }, { value: "320724", text: "灌南县" }, { value: "320725", text: "其它区" }] }, { value: "320800", text: "淮安市", children: [{ value: "320802", text: "清河区" }, { value: "320803", text: "楚州区" }, { value: "320804", text: "淮阴区" }, { value: "320811", text: "清浦区" }, { value: "320826", text: "涟水县" }, { value: "320829", text: "洪泽县" }, { value: "320830", text: "盱眙县" }, { value: "320831", text: "金湖县" }, { value: "320832", text: "其它区" }] }, { value: "320900", text: "盐城市", children: [{ value: "320902", text: "亭湖区" }, { value: "320903", text: "盐都区" }, { value: "320921", text: "响水县" }, { value: "320922", text: "滨海县" }, { value: "320923", text: "阜宁县" }, { value: "320924", text: "射阳县" }, { value: "320925", text: "建湖县" }, { value: "320981", text: "东台市" }, { value: "320982", text: "大丰市" }, { value: "320983", text: "其它区" }] }, { value: "321000", text: "扬州市", children: [{ value: "321002", text: "广陵区" }, { value: "321003", text: "邗江区" }, { value: "321011", text: "维扬区" }, { value: "321023", text: "宝应县" }, { value: "321081", text: "仪征市" }, { value: "321084", text: "高邮市" }, { value: "321088", text: "江都市" }, { value: "321092", text: "经济开发区" }, { value: "321093", text: "其它区" }] }, { value: "321100", text: "镇江市", children: [{ value: "321102", text: "京口区" }, { value: "321111", text: "润州区" }, { value: "321112", text: "丹徒区" }, { value: "321181", text: "丹阳市" }, { value: "321182", text: "扬中市" }, { value: "321183", text: "句容市" }, { value: "321184", text: "其它区" }] }, { value: "321200", text: "泰州市", children: [{ value: "321202", text: "海陵区" }, { value: "321203", text: "高港区" }, { value: "321281", text: "兴化市" }, { value: "321282", text: "靖江市" }, { value: "321283", text: "泰兴市" }, { value: "321284", text: "姜堰市" }, { value: "321285", text: "其它区" }] }, { value: "321300", text: "宿迁市", children: [{ value: "321302", text: "宿城区" }, { value: "321311", text: "宿豫区" }, { value: "321322", text: "沭阳县" }, { value: "321323", text: "泗阳县" }, { value: "321324", text: "泗洪县" }, { value: "321325", text: "其它区" }] }] }, { value: '330000', text: '浙江省', children: [{ value: "330100", text: "杭州市", children: [{ value: "330102", text: "上城区" }, { value: "330103", text: "下城区" }, { value: "330104", text: "江干区" }, { value: "330105", text: "拱墅区" }, { value: "330106", text: "西湖区" }, { value: "330108", text: "滨江区" }, { value: "330109", text: "萧山区" }, { value: "330110", text: "余杭区" }, { value: "330122", text: "桐庐县" }, { value: "330127", text: "淳安县" }, { value: "330182", text: "建德市" }, { value: "330183", text: "富阳市" }, { value: "330185", text: "临安市" }, { value: "330186", text: "其它区" }] }, { value: "330200", text: "宁波市", children: [{ value: "330203", text: "海曙区" }, { value: "330204", text: "江东区" }, { value: "330205", text: "江北区" }, { value: "330206", text: "北仑区" }, { value: "330211", text: "镇海区" }, { value: "330212", text: "鄞州区" }, { value: "330225", text: "象山县" }, { value: "330226", text: "宁海县" }, { value: "330281", text: "余姚市" }, { value: "330282", text: "慈溪市" }, { value: "330283", text: "奉化市" }, { value: "330284", text: "其它区" }] }, { value: "330300", text: "温州市", children: [{ value: "330302", text: "鹿城区" }, { value: "330303", text: "龙湾区" }, { value: "330304", text: "瓯海区" }, { value: "330322", text: "洞头县" }, { value: "330324", text: "永嘉县" }, { value: "330326", text: "平阳县" }, { value: "330327", text: "苍南县" }, { value: "330328", text: "文成县" }, { value: "330329", text: "泰顺县" }, { value: "330381", text: "瑞安市" }, { value: "330382", text: "乐清市" }, { value: "330383", text: "其它区" }] }, { value: "330400", text: "嘉兴市", children: [{ value: "330402", text: "南湖区" }, { value: "330411", text: "秀洲区" }, { value: "330421", text: "嘉善县" }, { value: "330424", text: "海盐县" }, { value: "330481", text: "海宁市" }, { value: "330482", text: "平湖市" }, { value: "330483", text: "桐乡市" }, { value: "330484", text: "其它区" }] }, { value: "330500", text: "湖州市", children: [{ value: "330502", text: "吴兴区" }, { value: "330503", text: "南浔区" }, { value: "330521", text: "德清县" }, { value: "330522", text: "长兴县" }, { value: "330523", text: "安吉县" }, { value: "330524", text: "其它区" }] }, { value: "330600", text: "绍兴市", children: [{ value: "330602", text: "越城区" }, { value: "330621", text: "柯桥区" }, { value: "330624", text: "新昌县" }, { value: "330681", text: "诸暨市" }, { value: "330682", text: "上虞区" }, { value: "330683", text: "嵊州市" }, { value: "330684", text: "其它区" }] }, { value: "330700", text: "金华市", children: [{ value: "330702", text: "婺城区" }, { value: "330703", text: "金东区" }, { value: "330723", text: "武义县" }, { value: "330726", text: "浦江县" }, { value: "330727", text: "磐安县" }, { value: "330781", text: "兰溪市" }, { value: "330782", text: "义乌市" }, { value: "330783", text: "东阳市" }, { value: "330784", text: "永康市" }, { value: "330785", text: "其它区" }] }, { value: "330800", text: "衢州市", children: [{ value: "330802", text: "柯城区" }, { value: "330803", text: "衢江区" }, { value: "330822", text: "常山县" }, { value: "330824", text: "开化县" }, { value: "330825", text: "龙游县" }, { value: "330881", text: "江山市" }, { value: "330882", text: "其它区" }] }, { value: "330900", text: "舟山市", children: [{ value: "330902", text: "定海区" }, { value: "330903", text: "普陀区" }, { value: "330921", text: "岱山县" }, { value: "330922", text: "嵊泗县" }, { value: "330923", text: "其它区" }] }, { value: "331000", text: "台州市", children: [{ value: "331002", text: "椒江区" }, { value: "331003", text: "黄岩区" }, { value: "331004", text: "路桥区" }, { value: "331021", text: "玉环县" }, { value: "331022", text: "三门县" }, { value: "331023", text: "天台县" }, { value: "331024", text: "仙居县" }, { value: "331081", text: "温岭市" }, { value: "331082", text: "临海市" }, { value: "331083", text: "其它区" }] }, { value: "331100", text: "丽水市", children: [{ value: "331102", text: "莲都区" }, { value: "331121", text: "青田县" }, { value: "331122", text: "缙云县" }, { value: "331123", text: "遂昌县" }, { value: "331124", text: "松阳县" }, { value: "331125", text: "云和县" }, { value: "331126", text: "庆元县" }, { value: "331127", text: "景宁畲族自治县" }, { value: "331181", text: "龙泉市" }, { value: "331182", text: "其它区" }] }] }, { value: '340000', text: '安徽省', children: [{ value: "340100", text: "合肥市", children: [{ value: "340102", text: "瑶海区" }, { value: "340103", text: "庐阳区" }, { value: "340104", text: "蜀山区" }, { value: "340111", text: "包河区" }, { value: "340121", text: "长丰县" }, { value: "340122", text: "肥东县" }, { value: "340123", text: "肥西县" }, { value: "340151", text: "高新区" }, { value: "340191", text: "中区" }, { value: "340192", text: "其它区" }, { value: "341400", text: "巢湖市" }, { value: "341402", text: "居巢区" }, { value: "341421", text: "庐江县" }] }, { value: "340200", text: "芜湖市", children: [{ value: "340202", text: "镜湖区" }, { value: "340203", text: "弋江区" }, { value: "340207", text: "鸠江区" }, { value: "340208", text: "三山区" }, { value: "340221", text: "芜湖县" }, { value: "340222", text: "繁昌县" }, { value: "340223", text: "南陵县" }, { value: "340224", text: "其它区" }, { value: "341422", text: "无为县" }] }, { value: "340300", text: "蚌埠市", children: [{ value: "340302", text: "龙子湖区" }, { value: "340303", text: "蚌山区" }, { value: "340304", text: "禹会区" }, { value: "340311", text: "淮上区" }, { value: "340321", text: "怀远县" }, { value: "340322", text: "五河县" }, { value: "340323", text: "固镇县" }, { value: "340324", text: "其它区" }] }, { value: "340400", text: "淮南市", children: [{ value: "340402", text: "大通区" }, { value: "340403", text: "田家庵区" }, { value: "340404", text: "谢家集区" }, { value: "340405", text: "八公山区" }, { value: "340406", text: "潘集区" }, { value: "340421", text: "凤台县" }, { value: "340422", text: "其它区" }] }, { value: "340500", text: "马鞍山市", children: [{ value: "340502", text: "金家庄区" }, { value: "340503", text: "花山区" }, { value: "340504", text: "雨山区" }, { value: "340521", text: "当涂县" }, { value: "340522", text: "其它区" }, { value: "341423", text: "含山县" }, { value: "341424", text: "和县" }] }, { value: "340600", text: "淮北市", children: [{ value: "340602", text: "杜集区" }, { value: "340603", text: "相山区" }, { value: "340604", text: "烈山区" }, { value: "340621", text: "濉溪县" }, { value: "340622", text: "其它区" }] }, { value: "340700", text: "铜陵市", children: [{ value: "340702", text: "铜官山区" }, { value: "340703", text: "狮子山区" }, { value: "340711", text: "郊区" }, { value: "340721", text: "铜陵县" }, { value: "340722", text: "其它区" }] }, { value: "340800", text: "安庆市", children: [{ value: "340802", text: "迎江区" }, { value: "340803", text: "大观区" }, { value: "340811", text: "宜秀区" }, { value: "340822", text: "怀宁县" }, { value: "340823", text: "枞阳县" }, { value: "340824", text: "潜山县" }, { value: "340825", text: "太湖县" }, { value: "340826", text: "宿松县" }, { value: "340827", text: "望江县" }, { value: "340828", text: "岳西县" }, { value: "340881", text: "桐城市" }, { value: "340882", text: "其它区" }] }, { value: "341000", text: "黄山市", children: [{ value: "341002", text: "屯溪区" }, { value: "341003", text: "黄山区" }, { value: "341004", text: "徽州区" }, { value: "341021", text: "歙县" }, { value: "341022", text: "休宁县" }, { value: "341023", text: "黟县" }, { value: "341024", text: "祁门县" }, { value: "341025", text: "其它区" }] }, { value: "341100", text: "滁州市", children: [{ value: "341102", text: "琅琊区" }, { value: "341103", text: "南谯区" }, { value: "341122", text: "来安县" }, { value: "341124", text: "全椒县" }, { value: "341125", text: "定远县" }, { value: "341126", text: "凤阳县" }, { value: "341181", text: "天长市" }, { value: "341182", text: "明光市" }, { value: "341183", text: "其它区" }] }, { value: "341200", text: "阜阳市", children: [{ value: "341202", text: "颍州区" }, { value: "341203", text: "颍东区" }, { value: "341204", text: "颍泉区" }, { value: "341221", text: "临泉县" }, { value: "341222", text: "太和县" }, { value: "341225", text: "阜南县" }, { value: "341226", text: "颍上县" }, { value: "341282", text: "界首市" }, { value: "341283", text: "其它区" }] }, { value: "341300", text: "宿州市", children: [{ value: "341302", text: "埇桥区" }, { value: "341321", text: "砀山县" }, { value: "341322", text: "萧县" }, { value: "341323", text: "灵璧县" }, { value: "341324", text: "泗县" }, { value: "341325", text: "其它区" }] }, { value: "341500", text: "六安市", children: [{ value: "341502", text: "金安区" }, { value: "341503", text: "裕安区" }, { value: "341521", text: "寿县" }, { value: "341522", text: "霍邱县" }, { value: "341523", text: "舒城县" }, { value: "341524", text: "金寨县" }, { value: "341525", text: "霍山县" }, { value: "341526", text: "其它区" }] }, { value: "341600", text: "亳州市", children: [{ value: "341602", text: "谯城区" }, { value: "341621", text: "涡阳县" }, { value: "341622", text: "蒙城县" }, { value: "341623", text: "利辛县" }, { value: "341624", text: "其它区" }] }, { value: "341700", text: "池州市", children: [{ value: "341702", text: "贵池区" }, { value: "341721", text: "东至县" }, { value: "341722", text: "石台县" }, { value: "341723", text: "青阳县" }, { value: "341724", text: "其它区" }] }, { value: "341800", text: "宣城市", children: [{ value: "341802", text: "宣州区" }, { value: "341821", text: "郎溪县" }, { value: "341822", text: "广德县" }, { value: "341823", text: "泾县" }, { value: "341824", text: "绩溪县" }, { value: "341825", text: "旌德县" }, { value: "341881", text: "宁国市" }, { value: "341882", text: "其它区" }] }] }, { value: '350000', text: '福建省', children: [{ value: "350100", text: "福州市", children: [{ value: "350102", text: "鼓楼区" }, { value: "350103", text: "台江区" }, { value: "350104", text: "仓山区" }, { value: "350105", text: "马尾区" }, { value: "350111", text: "晋安区" }, { value: "350121", text: "闽侯县" }, { value: "350122", text: "连江县" }, { value: "350123", text: "罗源县" }, { value: "350124", text: "闽清县" }, { value: "350125", text: "永泰县" }, { value: "350128", text: "平潭县" }, { value: "350181", text: "福清市" }, { value: "350182", text: "长乐市" }, { value: "350183", text: "其它区" }] }, { value: "350200", text: "厦门市", children: [{ value: "350203", text: "思明区" }, { value: "350205", text: "海沧区" }, { value: "350206", text: "湖里区" }, { value: "350211", text: "集美区" }, { value: "350212", text: "同安区" }, { value: "350213", text: "翔安区" }, { value: "350214", text: "其它区" }] }, { value: "350300", text: "莆田市", children: [{ value: "350302", text: "城厢区" }, { value: "350303", text: "涵江区" }, { value: "350304", text: "荔城区" }, { value: "350305", text: "秀屿区" }, { value: "350322", text: "仙游县" }, { value: "350323", text: "其它区" }] }, { value: "350400", text: "三明市", children: [{ value: "350402", text: "梅列区" }, { value: "350403", text: "三元区" }, { value: "350421", text: "明溪县" }, { value: "350423", text: "清流县" }, { value: "350424", text: "宁化县" }, { value: "350425", text: "大田县" }, { value: "350426", text: "尤溪县" }, { value: "350427", text: "沙县" }, { value: "350428", text: "将乐县" }, { value: "350429", text: "泰宁县" }, { value: "350430", text: "建宁县" }, { value: "350481", text: "永安市" }, { value: "350482", text: "其它区" }] }, { value: "350500", text: "泉州市", children: [{ value: "350502", text: "鲤城区" }, { value: "350503", text: "丰泽区" }, { value: "350504", text: "洛江区" }, { value: "350505", text: "泉港区" }, { value: "350521", text: "惠安县" }, { value: "350524", text: "安溪县" }, { value: "350525", text: "永春县" }, { value: "350526", text: "德化县" }, { value: "350527", text: "金门县" }, { value: "350581", text: "石狮市" }, { value: "350582", text: "晋江市" }, { value: "350583", text: "南安市" }, { value: "350584", text: "其它区" }] }, { value: "350600", text: "漳州市", children: [{ value: "350602", text: "芗城区" }, { value: "350603", text: "龙文区" }, { value: "350622", text: "云霄县" }, { value: "350623", text: "漳浦县" }, { value: "350624", text: "诏安县" }, { value: "350625", text: "长泰县" }, { value: "350626", text: "东山县" }, { value: "350627", text: "南靖县" }, { value: "350628", text: "平和县" }, { value: "350629", text: "华安县" }, { value: "350681", text: "龙海市" }, { value: "350682", text: "其它区" }] }, { value: "350700", text: "南平市", children: [{ value: "350702", text: "延平区" }, { value: "350721", text: "顺昌县" }, { value: "350722", text: "浦城县" }, { value: "350723", text: "光泽县" }, { value: "350724", text: "松溪县" }, { value: "350725", text: "政和县" }, { value: "350781", text: "邵武市" }, { value: "350782", text: "武夷山市" }, { value: "350783", text: "建瓯市" }, { value: "350784", text: "建阳市" }, { value: "350785", text: "其它区" }] }, { value: "350800", text: "龙岩市", children: [{ value: "350802", text: "新罗区" }, { value: "350821", text: "长汀县" }, { value: "350822", text: "永定县" }, { value: "350823", text: "上杭县" }, { value: "350824", text: "武平县" }, { value: "350825", text: "连城县" }, { value: "350881", text: "漳平市" }, { value: "350882", text: "其它区" }] }, { value: "350900", text: "宁德市", children: [{ value: "350902", text: "蕉城区" }, { value: "350921", text: "霞浦县" }, { value: "350922", text: "古田县" }, { value: "350923", text: "屏南县" }, { value: "350924", text: "寿宁县" }, { value: "350925", text: "周宁县" }, { value: "350926", text: "柘荣县" }, { value: "350981", text: "福安市" }, { value: "350982", text: "福鼎市" }, { value: "350983", text: "其它区" }] }] }, { value: '360000', text: '江西省', children: [{ value: "360100", text: "南昌市", children: [{ value: "360102", text: "东湖区" }, { value: "360103", text: "西湖区" }, { value: "360104", text: "青云谱区" }, { value: "360105", text: "湾里区" }, { value: "360111", text: "青山湖区" }, { value: "360121", text: "南昌县" }, { value: "360122", text: "新建县" }, { value: "360123", text: "安义县" }, { value: "360124", text: "进贤县" }, { value: "360125", text: "红谷滩新区" }, { value: "360126", text: "经济技术开发区" }, { value: "360127", text: "昌北区" }, { value: "360128", text: "其它区" }] }, { value: "360200", text: "景德镇市", children: [{ value: "360202", text: "昌江区" }, { value: "360203", text: "珠山区" }, { value: "360222", text: "浮梁县" }, { value: "360281", text: "乐平市" }, { value: "360282", text: "其它区" }] }, { value: "360300", text: "萍乡市", children: [{ value: "360302", text: "安源区" }, { value: "360313", text: "湘东区" }, { value: "360321", text: "莲花县" }, { value: "360322", text: "上栗县" }, { value: "360323", text: "芦溪县" }, { value: "360324", text: "其它区" }] }, { value: "360400", text: "九江市", children: [{ value: "360402", text: "庐山区" }, { value: "360403", text: "浔阳区" }, { value: "360421", text: "九江县" }, { value: "360423", text: "武宁县" }, { value: "360424", text: "修水县" }, { value: "360425", text: "永修县" }, { value: "360426", text: "德安县" }, { value: "360427", text: "星子县" }, { value: "360428", text: "都昌县" }, { value: "360429", text: "湖口县" }, { value: "360430", text: "彭泽县" }, { value: "360481", text: "瑞昌市" }, { value: "360482", text: "其它区" }] }, { value: "360500", text: "新余市", children: [{ value: "360502", text: "渝水区" }, { value: "360521", text: "分宜县" }, { value: "360522", text: "其它区" }] }, { value: "360600", text: "鹰潭市", children: [{ value: "360602", text: "月湖区" }, { value: "360622", text: "余江县" }, { value: "360681", text: "贵溪市" }, { value: "360682", text: "其它区" }] }, { value: "360700", text: "赣州市", children: [{ value: "360702", text: "章贡区" }, { value: "360721", text: "赣县" }, { value: "360722", text: "信丰县" }, { value: "360723", text: "大余县" }, { value: "360724", text: "上犹县" }, { value: "360725", text: "崇义县" }, { value: "360726", text: "安远县" }, { value: "360727", text: "龙南县" }, { value: "360728", text: "定南县" }, { value: "360729", text: "全南县" }, { value: "360730", text: "宁都县" }, { value: "360731", text: "于都县" }, { value: "360732", text: "兴国县" }, { value: "360733", text: "会昌县" }, { value: "360734", text: "寻乌县" }, { value: "360735", text: "石城县" }, { value: "360751", text: "黄金区" }, { value: "360781", text: "瑞金市" }, { value: "360782", text: "南康市" }, { value: "360783", text: "其它区" }] }, { value: "360800", text: "吉安市", children: [{ value: "360802", text: "吉州区" }, { value: "360803", text: "青原区" }, { value: "360821", text: "吉安县" }, { value: "360822", text: "吉水县" }, { value: "360823", text: "峡江县" }, { value: "360824", text: "新干县" }, { value: "360825", text: "永丰县" }, { value: "360826", text: "泰和县" }, { value: "360827", text: "遂川县" }, { value: "360828", text: "万安县" }, { value: "360829", text: "安福县" }, { value: "360830", text: "永新县" }, { value: "360881", text: "井冈山市" }, { value: "360882", text: "其它区" }] }, { value: "360900", text: "宜春市", children: [{ value: "360902", text: "袁州区" }, { value: "360921", text: "奉新县" }, { value: "360922", text: "万载县" }, { value: "360923", text: "上高县" }, { value: "360924", text: "宜丰县" }, { value: "360925", text: "靖安县" }, { value: "360926", text: "铜鼓县" }, { value: "360981", text: "丰城市" }, { value: "360982", text: "樟树市" }, { value: "360983", text: "高安市" }, { value: "360984", text: "其它区" }] }, { value: "361000", text: "抚州市", children: [{ value: "361002", text: "临川区" }, { value: "361021", text: "南城县" }, { value: "361022", text: "黎川县" }, { value: "361023", text: "南丰县" }, { value: "361024", text: "崇仁县" }, { value: "361025", text: "乐安县" }, { value: "361026", text: "宜黄县" }, { value: "361027", text: "金溪县" }, { value: "361028", text: "资溪县" }, { value: "361029", text: "东乡县" }, { value: "361030", text: "广昌县" }, { value: "361031", text: "其它区" }] }, { value: "361100", text: "上饶市", children: [{ value: "361102", text: "信州区" }, { value: "361121", text: "上饶县" }, { value: "361122", text: "广丰县" }, { value: "361123", text: "玉山县" }, { value: "361124", text: "铅山县" }, { value: "361125", text: "横峰县" }, { value: "361126", text: "弋阳县" }, { value: "361127", text: "余干县" }, { value: "361128", text: "鄱阳县" }, { value: "361129", text: "万年县" }, { value: "361130", text: "婺源县" }, { value: "361181", text: "德兴市" }, { value: "361182", text: "其它区" }] }] }, { value: '370000', text: '山东省', children: [{ value: "370100", text: "济南市", children: [{ value: "370102", text: "历下区" }, { value: "370103", text: "市中区" }, { value: "370104", text: "槐荫区" }, { value: "370105", text: "天桥区" }, { value: "370112", text: "历城区" }, { value: "370113", text: "长清区" }, { value: "370124", text: "平阴县" }, { value: "370125", text: "济阳县" }, { value: "370126", text: "商河县" }, { value: "370181", text: "章丘市" }, { value: "370182", text: "其它区" }] }, { value: "370200", text: "青岛市", children: [{ value: "370202", text: "市南区" }, { value: "370203", text: "市北区" }, { value: "370205", text: "四方区" }, { value: "370211", text: "黄岛区" }, { value: "370212", text: "崂山区" }, { value: "370213", text: "李沧区" }, { value: "370214", text: "城阳区" }, { value: "370251", text: "开发区" }, { value: "370281", text: "胶州市" }, { value: "370282", text: "即墨市" }, { value: "370283", text: "平度市" }, { value: "370284", text: "胶南市" }, { value: "370285", text: "莱西市" }, { value: "370286", text: "其它区" }] }, { value: "370300", text: "淄博市", children: [{ value: "370302", text: "淄川区" }, { value: "370303", text: "张店区" }, { value: "370304", text: "博山区" }, { value: "370305", text: "临淄区" }, { value: "370306", text: "周村区" }, { value: "370321", text: "桓台县" }, { value: "370322", text: "高青县" }, { value: "370323", text: "沂源县" }, { value: "370324", text: "其它区" }] }, { value: "370400", text: "枣庄市", children: [{ value: "370402", text: "市中区" }, { value: "370403", text: "薛城区" }, { value: "370404", text: "峄城区" }, { value: "370405", text: "台儿庄区" }, { value: "370406", text: "山亭区" }, { value: "370481", text: "滕州市" }, { value: "370482", text: "其它区" }] }, { value: "370500", text: "东营市", children: [{ value: "370502", text: "东营区" }, { value: "370503", text: "河口区" }, { value: "370521", text: "垦利县" }, { value: "370522", text: "利津县" }, { value: "370523", text: "广饶县" }, { value: "370589", text: "西城区" }, { value: "370590", text: "东城区" }, { value: "370591", text: "其它区" }] }, { value: "370600", text: "烟台市", children: [{ value: "370602", text: "芝罘区" }, { value: "370611", text: "福山区" }, { value: "370612", text: "牟平区" }, { value: "370613", text: "莱山区" }, { value: "370634", text: "长岛县" }, { value: "370681", text: "龙口市" }, { value: "370682", text: "莱阳市" }, { value: "370683", text: "莱州市" }, { value: "370684", text: "蓬莱市" }, { value: "370685", text: "招远市" }, { value: "370686", text: "栖霞市" }, { value: "370687", text: "海阳市" }, { value: "370688", text: "其它区" }] }, { value: "370700", text: "潍坊市", children: [{ value: "370702", text: "潍城区" }, { value: "370703", text: "寒亭区" }, { value: "370704", text: "坊子区" }, { value: "370705", text: "奎文区" }, { value: "370724", text: "临朐县" }, { value: "370725", text: "昌乐县" }, { value: "370751", text: "开发区" }, { value: "370781", text: "青州市" }, { value: "370782", text: "诸城市" }, { value: "370783", text: "寿光市" }, { value: "370784", text: "安丘市" }, { value: "370785", text: "高密市" }, { value: "370786", text: "昌邑市" }, { value: "370787", text: "其它区" }] }, { value: "370800", text: "济宁市", children: [{ value: "370802", text: "市中区" }, { value: "370811", text: "任城区" }, { value: "370826", text: "微山县" }, { value: "370827", text: "鱼台县" }, { value: "370828", text: "金乡县" }, { value: "370829", text: "嘉祥县" }, { value: "370830", text: "汶上县" }, { value: "370831", text: "泗水县" }, { value: "370832", text: "梁山县" }, { value: "370881", text: "曲阜市" }, { value: "370882", text: "兖州市" }, { value: "370883", text: "邹城市" }, { value: "370884", text: "其它区" }] }, { value: "370900", text: "泰安市", children: [{ value: "370902", text: "泰山区" }, { value: "370903", text: "岱岳区" }, { value: "370921", text: "宁阳县" }, { value: "370923", text: "东平县" }, { value: "370982", text: "新泰市" }, { value: "370983", text: "肥城市" }, { value: "370984", text: "其它区" }] }, { value: "371000", text: "威海市", children: [{ value: "371002", text: "环翠区" }, { value: "371081", text: "文登市" }, { value: "371082", text: "荣成市" }, { value: "371083", text: "乳山市" }, { value: "371084", text: "其它区" }] }, { value: "371100", text: "日照市", children: [{ value: "371102", text: "东港区" }, { value: "371103", text: "岚山区" }, { value: "371121", text: "五莲县" }, { value: "371122", text: "莒县" }, { value: "371123", text: "其它区" }] }, { value: "371200", text: "莱芜市", children: [{ value: "371202", text: "莱城区" }, { value: "371203", text: "钢城区" }, { value: "371204", text: "其它区" }] }, { value: "371300", text: "临沂市", children: [{ value: "371302", text: "兰山区" }, { value: "371311", text: "罗庄区" }, { value: "371312", text: "河东区" }, { value: "371321", text: "沂南县" }, { value: "371322", text: "郯城县" }, { value: "371323", text: "沂水县" }, { value: "371324", text: "苍山县" }, { value: "371325", text: "费县" }, { value: "371326", text: "平邑县" }, { value: "371327", text: "莒南县" }, { value: "371328", text: "蒙阴县" }, { value: "371329", text: "临沭县" }, { value: "371330", text: "其它区" }] }, { value: "371400", text: "德州市", children: [{ value: "371402", text: "德城区" }, { value: "371421", text: "陵县" }, { value: "371422", text: "宁津县" }, { value: "371423", text: "庆云县" }, { value: "371424", text: "临邑县" }, { value: "371425", text: "齐河县" }, { value: "371426", text: "平原县" }, { value: "371427", text: "夏津县" }, { value: "371428", text: "武城县" }, { value: "371451", text: "开发区" }, { value: "371481", text: "乐陵市" }, { value: "371482", text: "禹城市" }, { value: "371483", text: "其它区" }] }, { value: "371500", text: "聊城市", children: [{ value: "371502", text: "东昌府区" }, { value: "371521", text: "阳谷县" }, { value: "371522", text: "莘县" }, { value: "371523", text: "茌平县" }, { value: "371524", text: "东阿县" }, { value: "371525", text: "冠县" }, { value: "371526", text: "高唐县" }, { value: "371581", text: "临清市" }, { value: "371582", text: "其它区" }] }, { value: "371600", text: "滨州市", children: [{ value: "371602", text: "滨城区" }, { value: "371621", text: "惠民县" }, { value: "371622", text: "阳信县" }, { value: "371623", text: "无棣县" }, { value: "371624", text: "沾化县" }, { value: "371625", text: "博兴县" }, { value: "371626", text: "邹平县" }, { value: "371627", text: "其它区" }] }, { value: "371700", text: "菏泽市", children: [{ value: "371702", text: "牡丹区" }, { value: "371721", text: "曹县" }, { value: "371722", text: "单县" }, { value: "371723", text: "成武县" }, { value: "371724", text: "巨野县" }, { value: "371725", text: "郓城县" }, { value: "371726", text: "鄄城县" }, { value: "371727", text: "定陶县" }, { value: "371728", text: "东明县" }, { value: "371729", text: "其它区" }] }] }, { value: '410000', text: '河南省', children: [{ value: "410100", text: "郑州市", children: [{ value: "410102", text: "中原区" }, { value: "410103", text: "二七区" }, { value: "410104", text: "管城回族区" }, { value: "410105", text: "金水区" }, { value: "410106", text: "上街区" }, { value: "410108", text: "惠济区" }, { value: "410122", text: "中牟县" }, { value: "410181", text: "巩义市" }, { value: "410182", text: "荥阳市" }, { value: "410183", text: "新密市" }, { value: "410184", text: "新郑市" }, { value: "410185", text: "登封市" }, { value: "410186", text: "郑东新区" }, { value: "410187", text: "高新区" }, { value: "410188", text: "其它区" }] }, { value: "410200", text: "开封市", children: [{ value: "410202", text: "龙亭区" }, { value: "410203", text: "顺河回族区" }, { value: "410204", text: "鼓楼区" }, { value: "410205", text: "禹王台区" }, { value: "410211", text: "金明区" }, { value: "410221", text: "杞县" }, { value: "410222", text: "通许县" }, { value: "410223", text: "尉氏县" }, { value: "410224", text: "开封县" }, { value: "410225", text: "兰考县" }, { value: "410226", text: "其它区" }] }, { value: "410300", text: "洛阳市", children: [{ value: "410302", text: "老城区" }, { value: "410303", text: "西工区" }, { value: "410304", text: "廛河回族区" }, { value: "410305", text: "涧西区" }, { value: "410306", text: "吉利区" }, { value: "410307", text: "洛龙区" }, { value: "410322", text: "孟津县" }, { value: "410323", text: "新安县" }, { value: "410324", text: "栾川县" }, { value: "410325", text: "嵩县" }, { value: "410326", text: "汝阳县" }, { value: "410327", text: "宜阳县" }, { value: "410328", text: "洛宁县" }, { value: "410329", text: "伊川县" }, { value: "410381", text: "偃师市" }, { value: "471004", text: "高新区" }, { value: "471005", text: "其它区" }] }, { value: "410400", text: "平顶山市", children: [{ value: "410402", text: "新华区" }, { value: "410403", text: "卫东区" }, { value: "410404", text: "石龙区" }, { value: "410411", text: "湛河区" }, { value: "410421", text: "宝丰县" }, { value: "410422", text: "叶县" }, { value: "410423", text: "鲁山县" }, { value: "410425", text: "郏县" }, { value: "410481", text: "舞钢市" }, { value: "410482", text: "汝州市" }, { value: "410483", text: "其它区" }] }, { value: "410500", text: "安阳市", children: [{ value: "410502", text: "文峰区" }, { value: "410503", text: "北关区" }, { value: "410505", text: "殷都区" }, { value: "410506", text: "龙安区" }, { value: "410522", text: "安阳县" }, { value: "410523", text: "汤阴县" }, { value: "410526", text: "滑县" }, { value: "410527", text: "内黄县" }, { value: "410581", text: "林州市" }, { value: "410582", text: "其它区" }] }, { value: "410600", text: "鹤壁市", children: [{ value: "410602", text: "鹤山区" }, { value: "410603", text: "山城区" }, { value: "410611", text: "淇滨区" }, { value: "410621", text: "浚县" }, { value: "410622", text: "淇县" }, { value: "410623", text: "其它区" }] }, { value: "410700", text: "新乡市", children: [{ value: "410702", text: "红旗区" }, { value: "410703", text: "卫滨区" }, { value: "410704", text: "凤泉区" }, { value: "410711", text: "牧野区" }, { value: "410721", text: "新乡县" }, { value: "410724", text: "获嘉县" }, { value: "410725", text: "原阳县" }, { value: "410726", text: "延津县" }, { value: "410727", text: "封丘县" }, { value: "410728", text: "长垣县" }, { value: "410781", text: "卫辉市" }, { value: "410782", text: "辉县市" }, { value: "410783", text: "其它区" }] }, { value: "410800", text: "焦作市", children: [{ value: "410802", text: "解放区" }, { value: "410803", text: "中站区" }, { value: "410804", text: "马村区" }, { value: "410811", text: "山阳区" }, { value: "410821", text: "修武县" }, { value: "410822", text: "博爱县" }, { value: "410823", text: "武陟县" }, { value: "410825", text: "温县" }, { value: "410882", text: "沁阳市" }, { value: "410883", text: "孟州市" }, { value: "410884", text: "其它区" }] }, { value: "410900", text: "濮阳市", children: [{ value: "410902", text: "华龙区" }, { value: "410922", text: "清丰县" }, { value: "410923", text: "南乐县" }, { value: "410926", text: "范县" }, { value: "410927", text: "台前县" }, { value: "410928", text: "濮阳县" }, { value: "410929", text: "其它区" }] }, { value: "411000", text: "许昌市", children: [{ value: "411002", text: "魏都区" }, { value: "411023", text: "许昌县" }, { value: "411024", text: "鄢陵县" }, { value: "411025", text: "襄城县" }, { value: "411081", text: "禹州市" }, { value: "411082", text: "长葛市" }, { value: "411083", text: "其它区" }] }, { value: "411100", text: "漯河市", children: [{ value: "411102", text: "源汇区" }, { value: "411103", text: "郾城区" }, { value: "411104", text: "召陵区" }, { value: "411121", text: "舞阳县" }, { value: "411122", text: "临颍县" }, { value: "411123", text: "其它区" }] }, { value: "411200", text: "三门峡市", children: [{ value: "411202", text: "湖滨区" }, { value: "411221", text: "渑池县" }, { value: "411222", text: "陕县" }, { value: "411224", text: "卢氏县" }, { value: "411281", text: "义马市" }, { value: "411282", text: "灵宝市" }, { value: "411283", text: "其它区" }] }, { value: "411300", text: "南阳市", children: [{ value: "411302", text: "宛城区" }, { value: "411303", text: "卧龙区" }, { value: "411321", text: "南召县" }, { value: "411322", text: "方城县" }, { value: "411323", text: "西峡县" }, { value: "411324", text: "镇平县" }, { value: "411325", text: "内乡县" }, { value: "411326", text: "淅川县" }, { value: "411327", text: "社旗县" }, { value: "411328", text: "唐河县" }, { value: "411329", text: "新野县" }, { value: "411330", text: "桐柏县" }, { value: "411381", text: "邓州市" }, { value: "411382", text: "其它区" }] }, { value: "411400", text: "商丘市", children: [{ value: "411402", text: "梁园区" }, { value: "411403", text: "睢阳区" }, { value: "411421", text: "民权县" }, { value: "411422", text: "睢县" }, { value: "411423", text: "宁陵县" }, { value: "411424", text: "柘城县" }, { value: "411425", text: "虞城县" }, { value: "411426", text: "夏邑县" }, { value: "411481", text: "永城市" }, { value: "411482", text: "其它区" }] }, { value: "411500", text: "信阳市", children: [{ value: "411502", text: "浉河区" }, { value: "411503", text: "平桥区" }, { value: "411521", text: "罗山县" }, { value: "411522", text: "光山县" }, { value: "411523", text: "新县" }, { value: "411524", text: "商城县" }, { value: "411525", text: "固始县" }, { value: "411526", text: "潢川县" }, { value: "411527", text: "淮滨县" }, { value: "411528", text: "息县" }, { value: "411529", text: "其它区" }] }, { value: "411600", text: "周口市", children: [{ value: "411602", text: "川汇区" }, { value: "411621", text: "扶沟县" }, { value: "411622", text: "西华县" }, { value: "411623", text: "商水县" }, { value: "411624", text: "沈丘县" }, { value: "411625", text: "郸城县" }, { value: "411626", text: "淮阳县" }, { value: "411627", text: "太康县" }, { value: "411628", text: "鹿邑县" }, { value: "411681", text: "项城市" }, { value: "411682", text: "其它区" }] },{ value: "411700", text: "驻马店市", children: [{ value: "411702", text: "驿城区" }, { value: "411721", text: "西平县" }, { value: "411722", text: "上蔡县" }, { value: "411723", text: "平舆县" }, { value: "411724", text: "正阳县" }, { value: "411725", text: "确山县" }, { value: "411726", text: "泌阳县" }, { value: "411727", text: "汝南县" }, { value: "411628", text: "遂平县" }, { value: "411729", text: "新蔡县" }] }] }, { value: '420000', text: '湖北省', children: [{ value: "420100", text: "武汉市", children: [{ value: "420102", text: "江岸区" }, { value: "420103", text: "江汉区" }, { value: "420104", text: "硚口区" }, { value: "420105", text: "汉阳区" }, { value: "420106", text: "武昌区" }, { value: "420107", text: "青山区" }, { value: "420111", text: "洪山区" }, { value: "420112", text: "东西湖区" }, { value: "420113", text: "汉南区" }, { value: "420114", text: "蔡甸区" }, { value: "420115", text: "江夏区" }, { value: "420116", text: "黄陂区" }, { value: "420117", text: "新洲区" }, { value: "420118", text: "其它区" }] }, { value: "420200", text: "黄石市", children: [{ value: "420202", text: "黄石港区" }, { value: "420203", text: "西塞山区" }, { value: "420204", text: "下陆区" }, { value: "420205", text: "铁山区" }, { value: "420222", text: "阳新县" }, { value: "420281", text: "大冶市" }, { value: "420282", text: "其它区" }] }, { value: "420300", text: "十堰市", children: [{ value: "420302", text: "茅箭区" }, { value: "420303", text: "张湾区" }, { value: "420321", text: "郧县" }, { value: "420322", text: "郧西县" }, { value: "420323", text: "竹山县" }, { value: "420324", text: "竹溪县" }, { value: "420325", text: "房县" }, { value: "420381", text: "丹江口市" }, { value: "420382", text: "城区" }, { value: "420383", text: "其它区" }] }, { value: "420500", text: "宜昌市", children: [{ value: "420502", text: "西陵区" }, { value: "420503", text: "伍家岗区" }, { value: "420504", text: "点军区" }, { value: "420505", text: "猇亭区" }, { value: "420506", text: "夷陵区" }, { value: "420525", text: "远安县" }, { value: "420526", text: "兴山县" }, { value: "420527", text: "秭归县" }, { value: "420528", text: "长阳土家族自治县" }, { value: "420529", text: "五峰土家族自治县" }, { value: "420551", text: "葛洲坝区" }, { value: "420552", text: "开发区" }, { value: "420581", text: "宜都市" }, { value: "420582", text: "当阳市" }, { value: "420583", text: "枝江市" }, { value: "420584", text: "其它区" }] }, { value: "420600", text: "襄阳市", children: [{ value: "420602", text: "襄城区" }, { value: "420606", text: "樊城区" }, { value: "420607", text: "襄州区" }, { value: "420624", text: "南漳县" }, { value: "420625", text: "谷城县" }, { value: "420626", text: "保康县" }, { value: "420682", text: "老河口市" }, { value: "420683", text: "枣阳市" }, { value: "420684", text: "宜城市" }, { value: "420685", text: "其它区" }] }, { value: "420700", text: "鄂州市", children: [{ value: "420702", text: "梁子湖区" }, { value: "420703", text: "华容区" }, { value: "420704", text: "鄂城区" }, { value: "420705", text: "其它区" }] }, { value: "420800", text: "荆门市", children: [{ value: "420802", text: "东宝区" }, { value: "420804", text: "掇刀区" }, { value: "420821", text: "京山县" }, { value: "420822", text: "沙洋县" }, { value: "420881", text: "钟祥市" }, { value: "420882", text: "其它区" }] }, { value: "420900", text: "孝感市", children: [{ value: "420902", text: "孝南区" }, { value: "420921", text: "孝昌县" }, { value: "420922", text: "大悟县" }, { value: "420923", text: "云梦县" }, { value: "420981", text: "应城市" }, { value: "420982", text: "安陆市" }, { value: "420984", text: "汉川市" }, { value: "420985", text: "其它区" }] }, { value: "421000", text: "荆州市", children: [{ value: "421002", text: "沙市区" }, { value: "421003", text: "荆州区" }, { value: "421022", text: "公安县" }, { value: "421023", text: "监利县" }, { value: "421024", text: "江陵县" }, { value: "421081", text: "石首市" }, { value: "421083", text: "洪湖市" }, { value: "421087", text: "松滋市" }, { value: "421088", text: "其它区" }] }, { value: "421100", text: "黄冈市", children: [{ value: "421102", text: "黄州区" }, { value: "421121", text: "团风县" }, { value: "421122", text: "红安县" }, { value: "421123", text: "罗田县" }, { value: "421124", text: "英山县" }, { value: "421125", text: "浠水县" }, { value: "421126", text: "蕲春县" }, { value: "421127", text: "黄梅县" }, { value: "421181", text: "麻城市" }, { value: "421182", text: "武穴市" }, { value: "421183", text: "其它区" }] }, { value: "421200", text: "咸宁市", children: [{ value: "421202", text: "咸安区" }, { value: "421221", text: "嘉鱼县" }, { value: "421222", text: "通城县" }, { value: "421223", text: "崇阳县" }, { value: "421224", text: "通山县" }, { value: "421281", text: "赤壁市" }, { value: "421282", text: "温泉城区" }, { value: "421283", text: "其它区" }] }, { value: "421300", text: "随州市", children: [{ value: "421302", text: "曾都区" }, { value: "421321", text: "随县" }, { value: "421381", text: "广水市" }, { value: "421382", text: "其它区" }] }, { value: "422800", text: "恩施土家族苗族自治州", children: [{ value: "422801", text: "恩施市" }, { value: "422802", text: "利川市" }, { value: "422822", text: "建始县" }, { value: "422823", text: "巴东县" }, { value: "422825", text: "宣恩县" }, { value: "422826", text: "咸丰县" }, { value: "422827", text: "来凤县" }, { value: "422828", text: "鹤峰县" }, { value: "422829", text: "其它区" }] }, { value: "429004", text: "仙桃市" }, { value: "429005", text: "潜江市" }, { value: "429006", text: "天门市" }, { value: "429021", text: "神农架林区" }] }, { value: '430000', text: '湖南省', children: [{ value: "430100", text: "长沙市", children: [{ value: "430102", text: "芙蓉区" }, { value: "430103", text: "天心区" }, { value: "430104", text: "岳麓区" }, { value: "430105", text: "开福区" }, { value: "430111", text: "雨花区" }, { value: "430121", text: "长沙县" }, { value: "430122", text: "望城县" }, { value: "430124", text: "宁乡县" }, { value: "430181", text: "浏阳市" }, { value: "430182", text: "其它区" }] }, { value: "430200", text: "株洲市", children: [{ value: "430202", text: "荷塘区" }, { value: "430203", text: "芦淞区" }, { value: "430204", text: "石峰区" }, { value: "430211", text: "天元区" }, { value: "430221", text: "株洲县" }, { value: "430223", text: "攸县" }, { value: "430224", text: "茶陵县" }, { value: "430225", text: "炎陵县" }, { value: "430281", text: "醴陵市" }, { value: "430282", text: "其它区" }] }, { value: "430300", text: "湘潭市", children: [{ value: "430302", text: "雨湖区" }, { value: "430304", text: "岳塘区" }, { value: "430321", text: "湘潭县" }, { value: "430381", text: "湘乡市" }, { value: "430382", text: "韶山市" }, { value: "430383", text: "其它区" }] }, { value: "430400", text: "衡阳市", children: [{ value: "430405", text: "珠晖区" }, { value: "430406", text: "雁峰区" }, { value: "430407", text: "石鼓区" }, { value: "430408", text: "蒸湘区" }, { value: "430412", text: "南岳区" }, { value: "430421", text: "衡阳县" }, { value: "430422", text: "衡南县" }, { value: "430423", text: "衡山县" }, { value: "430424", text: "衡东县" }, { value: "430426", text: "祁东县" }, { value: "430481", text: "耒阳市" }, { value: "430482", text: "常宁市" }, { value: "430483", text: "其它区" }] }, { value: "430500", text: "邵阳市", children: [{ value: "430502", text: "双清区" }, { value: "430503", text: "大祥区" }, { value: "430511", text: "北塔区" }, { value: "430521", text: "邵东县" }, { value: "430522", text: "新邵县" }, { value: "430523", text: "邵阳县" }, { value: "430524", text: "隆回县" }, { value: "430525", text: "洞口县" }, { value: "430527", text: "绥宁县" }, { value: "430528", text: "新宁县" }, { value: "430529", text: "城步苗族自治县" }, { value: "430581", text: "武冈市" }, { value: "430582", text: "其它区" }] }, { value: "430600", text: "岳阳市", children: [{ value: "430602", text: "岳阳楼区" }, { value: "430603", text: "云溪区" }, { value: "430611", text: "君山区" }, { value: "430621", text: "岳阳县" }, { value: "430623", text: "华容县" }, { value: "430624", text: "湘阴县" }, { value: "430626", text: "平江县" }, { value: "430681", text: "汨罗市" }, { value: "430682", text: "临湘市" }, { value: "430683", text: "其它区" }] }, { value: "430700", text: "常德市", children: [{ value: "430702", text: "武陵区" }, { value: "430703", text: "鼎城区" }, { value: "430721", text: "安乡县" }, { value: "430722", text: "汉寿县" }, { value: "430723", text: "澧县" }, { value: "430724", text: "临澧县" }, { value: "430725", text: "桃源县" }, { value: "430726", text: "石门县" }, { value: "430781", text: "津市市" }, { value: "430782", text: "其它区" }] }, { value: "430800", text: "张家界市", children: [{ value: "430802", text: "永定区" }, { value: "430811", text: "武陵源区" }, { value: "430821", text: "慈利县" }, { value: "430822", text: "桑植县" }, { value: "430823", text: "其它区" }] }, { value: "430900", text: "益阳市", children: [{ value: "430902", text: "资阳区" }, { value: "430903", text: "赫山区" }, { value: "430921", text: "南县" }, { value: "430922", text: "桃江县" }, { value: "430923", text: "安化县" }, { value: "430981", text: "沅江市" }, { value: "430982", text: "其它区" }] }, { value: "431000", text: "郴州市", children: [{ value: "431002", text: "北湖区" }, { value: "431003", text: "苏仙区" }, { value: "431021", text: "桂阳县" }, { value: "431022", text: "宜章县" }, { value: "431023", text: "永兴县" }, { value: "431024", text: "嘉禾县" }, { value: "431025", text: "临武县" }, { value: "431026", text: "汝城县" }, { value: "431027", text: "桂东县" }, { value: "431028", text: "安仁县" }, { value: "431081", text: "资兴市" }, { value: "431082", text: "其它区" }] }, { value: "431100", text: "永州市", children: [{ value: "431102", text: "零陵区" }, { value: "431103", text: "冷水滩区" }, { value: "431121", text: "祁阳县" }, { value: "431122", text: "东安县" }, { value: "431123", text: "双牌县" }, { value: "431124", text: "道县" }, { value: "431125", text: "江永县" }, { value: "431126", text: "宁远县" }, { value: "431127", text: "蓝山县" }, { value: "431128", text: "新田县" }, { value: "431129", text: "江华瑶族自治县" }, { value: "431130", text: "其它区" }] }, { value: "431200", text: "怀化市", children: [{ value: "431202", text: "鹤城区" }, { value: "431221", text: "中方县" }, { value: "431222", text: "沅陵县" }, { value: "431223", text: "辰溪县" }, { value: "431224", text: "溆浦县" }, { value: "431225", text: "会同县" }, { value: "431226", text: "麻阳苗族自治县" }, { value: "431227", text: "新晃侗族自治县" }, { value: "431228", text: "芷江侗族自治县" }, { value: "431229", text: "靖州苗族侗族自治县" }, { value: "431230", text: "通道侗族自治县" }, { value: "431281", text: "洪江市" }, { value: "431282", text: "其它区" }] }, { value: "431300", text: "娄底市", children: [{ value: "431302", text: "娄星区" }, { value: "431321", text: "双峰县" }, { value: "431322", text: "新化县" }, { value: "431381", text: "冷水江市" }, { value: "431382", text: "涟源市" }, { value: "431383", text: "其它区" }] }, { value: "433100", text: "湘西土家族苗族自治州", children: [{ value: "433101", text: "吉首市" }, { value: "433122", text: "泸溪县" }, { value: "433123", text: "凤凰县" }, { value: "433124", text: "花垣县" }, { value: "433125", text: "保靖县" }, { value: "433126", text: "古丈县" }, { value: "433127", text: "永顺县" }, { value: "433130", text: "龙山县" }, { value: "433131", text: "其它区" }] }] }, { value: '440000', text: '广东省', children: [{ value: "440100", text: "广州市", children: [{ value: "440103", text: "荔湾区" }, { value: "440104", text: "越秀区" }, { value: "440105", text: "海珠区" }, { value: "440106", text: "天河区" }, { value: "440111", text: "白云区" }, { value: "440112", text: "黄埔区" }, { value: "440113", text: "番禺区" }, { value: "440114", text: "花都区" }, { value: "440115", text: "南沙区" }, { value: "440116", text: "萝岗区" }, { value: "440183", text: "增城市" }, { value: "440184", text: "从化市" }, { value: "440188", text: "东山区" }, { value: "440189", text: "其它区" }] }, { value: "440200", text: "韶关市", children: [{ value: "440203", text: "武江区" }, { value: "440204", text: "浈江区" }, { value: "440205", text: "曲江区" }, { value: "440222", text: "始兴县" }, { value: "440224", text: "仁化县" }, { value: "440229", text: "翁源县" }, { value: "440232", text: "乳源瑶族自治县" }, { value: "440233", text: "新丰县" }, { value: "440281", text: "乐昌市" }, { value: "440282", text: "南雄市" }, { value: "440283", text: "其它区" }] }, { value: "440300", text: "深圳市", children: [{ value: "440303", text: "罗湖区" }, { value: "440304", text: "福田区" }, { value: "440305", text: "南山区" }, { value: "440306", text: "宝安区" }, { value: "440307", text: "龙岗区" }, { value: "440308", text: "盐田区" }, { value: "440309", text: "其它区" }] }, { value: "440400", text: "珠海市", children: [{ value: "440402", text: "香洲区" }, { value: "440403", text: "斗门区" }, { value: "440404", text: "金湾区" }, { value: "440486", text: "金唐区" }, { value: "440487", text: "南湾区" }, { value: "440488", text: "其它区" }] }, { value: "440500", text: "汕头市", children: [{ value: "440507", text: "龙湖区" }, { value: "440511", text: "金平区" }, { value: "440512", text: "濠江区" }, { value: "440513", text: "潮阳区" }, { value: "440514", text: "潮南区" }, { value: "440515", text: "澄海区" }, { value: "440523", text: "南澳县" }, { value: "440524", text: "其它区" }] }, { value: "440600", text: "佛山市", children: [{ value: "440604", text: "禅城区" }, { value: "440605", text: "南海区" }, { value: "440606", text: "顺德区" }, { value: "440607", text: "三水区" }, { value: "440608", text: "高明区" }, { value: "440609", text: "其它区" }] }, { value: "440700", text: "江门市", children: [{ value: "440703", text: "蓬江区" }, { value: "440704", text: "江海区" }, { value: "440705", text: "新会区" }, { value: "440781", text: "台山市" }, { value: "440783", text: "开平市" }, { value: "440784", text: "鹤山市" }, { value: "440785", text: "恩平市" }, { value: "440786", text: "其它区" }] }, { value: "440800", text: "湛江市", children: [{ value: "440802", text: "赤坎区" }, { value: "440803", text: "霞山区" }, { value: "440804", text: "坡头区" }, { value: "440811", text: "麻章区" }, { value: "440823", text: "遂溪县" }, { value: "440825", text: "徐闻县" }, { value: "440881", text: "廉江市" }, { value: "440882", text: "雷州市" }, { value: "440883", text: "吴川市" }, { value: "440884", text: "其它区" }] }, { value: "440900", text: "茂名市", children: [{ value: "440902", text: "茂南区" }, { value: "440903", text: "茂港区" }, { value: "440923", text: "电白县" }, { value: "440981", text: "高州市" }, { value: "440982", text: "化州市" }, { value: "440983", text: "信宜市" }, { value: "440984", text: "其它区" }] }, { value: "441200", text: "肇庆市", children: [{ value: "441202", text: "端州区" }, { value: "441203", text: "鼎湖区" }, { value: "441223", text: "广宁县" }, { value: "441224", text: "怀集县" }, { value: "441225", text: "封开县" }, { value: "441226", text: "德庆县" }, { value: "441283", text: "高要市" }, { value: "441284", text: "四会市" }, { value: "441285", text: "其它区" }] }, { value: "441300", text: "惠州市", children: [{ value: "441302", text: "惠城区" }, { value: "441303", text: "惠阳区" }, { value: "441322", text: "博罗县" }, { value: "441323", text: "惠东县" }, { value: "441324", text: "龙门县" }, { value: "441325", text: "其它区" }] }, { value: "441400", text: "梅州市", children: [{ value: "441402", text: "梅江区" }, { value: "441421", text: "梅县" }, { value: "441422", text: "大埔县" }, { value: "441423", text: "丰顺县" }, { value: "441424", text: "五华县" }, { value: "441426", text: "平远县" }, { value: "441427", text: "蕉岭县" }, { value: "441481", text: "兴宁市" }, { value: "441482", text: "其它区" }] }, { value: "441500", text: "汕尾市", children: [{ value: "441502", text: "城区" }, { value: "441521", text: "海丰县" }, { value: "441523", text: "陆河县" }, { value: "441581", text: "陆丰市" }, { value: "441582", text: "其它区" }] }, { value: "441600", text: "河源市", children: [{ value: "441602", text: "源城区" }, { value: "441621", text: "紫金县" }, { value: "441622", text: "龙川县" }, { value: "441623", text: "连平县" }, { value: "441624", text: "和平县" }, { value: "441625", text: "东源县" }, { value: "441626", text: "其它区" }] }, { value: "441700", text: "阳江市", children: [{ value: "441702", text: "江城区" }, { value: "441721", text: "阳西县" }, { value: "441723", text: "阳东县" }, { value: "441781", text: "阳春市" }, { value: "441782", text: "其它区" }] }, { value: "441800", text: "清远市", children: [{ value: "441802", text: "清城区" }, { value: "441821", text: "佛冈县" }, { value: "441823", text: "阳山县" }, { value: "441825", text: "连山壮族瑶族自治县" }, { value: "441826", text: "连南瑶族自治县" }, { value: "441827", text: "清新县" }, { value: "441881", text: "英德市" }, { value: "441882", text: "连州市" }, { value: "441883", text: "其它区" }] }, { value: "441900", text: "东莞市" }, { value: "442000", text: "中山市" }, { value: "445100", text: "潮州市", children: [{ value: "445102", text: "湘桥区" }, { value: "445121", text: "潮安县" }, { value: "445122", text: "饶平县" }, { value: "445185", text: "枫溪区" }, { value: "445186", text: "其它区" }] }, { value: "445200", text: "揭阳市", children: [{ value: "445202", text: "榕城区" }, { value: "445221", text: "揭东县" }, { value: "445222", text: "揭西县" }, { value: "445224", text: "惠来县" }, { value: "445281", text: "普宁市" }, { value: "445284", text: "东山区" }, { value: "445285", text: "其它区" }] }, { value: "445300", text: "云浮市", children: [{ value: "445302", text: "云城区" }, { value: "445321", text: "新兴县" }, { value: "445322", text: "郁南县" }, { value: "445323", text: "云安县" }, { value: "445381", text: "罗定市" }, { value: "445382", text: "其它区" }] }] }, { value: '450000', text: '广西壮族', children: [{ value: "450100", text: "南宁市", children: [{ value: "450102", text: "兴宁区" }, { value: "450103", text: "青秀区" }, { value: "450105", text: "江南区" }, { value: "450107", text: "西乡塘区" }, { value: "450108", text: "良庆区" }, { value: "450109", text: "邕宁区" }, { value: "450122", text: "武鸣县" }, { value: "450123", text: "隆安县" }, { value: "450124", text: "马山县" }, { value: "450125", text: "上林县" }, { value: "450126", text: "宾阳县" }, { value: "450127", text: "横县" }, { value: "450128", text: "其它区" }] }, { value: "450200", text: "柳州市", children: [{ value: "450202", text: "城中区" }, { value: "450203", text: "鱼峰区" }, { value: "450204", text: "柳南区" }, { value: "450205", text: "柳北区" }, { value: "450221", text: "柳江县" }, { value: "450222", text: "柳城县" }, { value: "450223", text: "鹿寨县" }, { value: "450224", text: "融安县" }, { value: "450225", text: "融水苗族自治县" }, { value: "450226", text: "三江侗族自治县" }, { value: "450227", text: "其它区" }] }, { value: "450300", text: "桂林市", children: [{ value: "450302", text: "秀峰区" }, { value: "450303", text: "叠彩区" }, { value: "450304", text: "象山区" }, { value: "450305", text: "七星区" }, { value: "450311", text: "雁山区" }, { value: "450321", text: "阳朔县" }, { value: "450322", text: "临桂县" }, { value: "450323", text: "灵川县" }, { value: "450324", text: "全州县" }, { value: "450325", text: "兴安县" }, { value: "450326", text: "永福县" }, { value: "450327", text: "灌阳县" }, { value: "450328", text: "龙胜各族自治县" }, { value: "450329", text: "资源县" }, { value: "450330", text: "平乐县" }, { value: "450331", text: "荔浦县" }, { value: "450332", text: "恭城瑶族自治县" }, { value: "450333", text: "其它区" }] }, { value: "450400", text: "梧州市", children: [{ value: "450403", text: "万秀区" }, { value: "450404", text: "蝶山区" }, { value: "450405", text: "长洲区" }, { value: "450421", text: "苍梧县" }, { value: "450422", text: "藤县" }, { value: "450423", text: "蒙山县" }, { value: "450481", text: "岑溪市" }, { value: "450482", text: "其它区" }] }, { value: "450500", text: "北海市", children: [{ value: "450502", text: "海城区" }, { value: "450503", text: "银海区" }, { value: "450512", text: "铁山港区" }, { value: "450521", text: "合浦县" }, { value: "450522", text: "其它区" }] }, { value: "450600", text: "防城港市", children: [{ value: "450602", text: "港口区" }, { value: "450603", text: "防城区" }, { value: "450621", text: "上思县" }, { value: "450681", text: "东兴市" }, { value: "450682", text: "其它区" }] }, { value: "450700", text: "钦州市", children: [{ value: "450702", text: "钦南区" }, { value: "450703", text: "钦北区" }, { value: "450721", text: "灵山县" }, { value: "450722", text: "浦北县" }, { value: "450723", text: "其它区" }] }, { value: "450800", text: "贵港市", children: [{ value: "450802", text: "港北区" }, { value: "450803", text: "港南区" }, { value: "450804", text: "覃塘区" }, { value: "450821", text: "平南县" }, { value: "450881", text: "桂平市" }, { value: "450882", text: "其它区" }] }, { value: "450900", text: "玉林市", children: [{ value: "450902", text: "玉州区" }, { value: "450921", text: "容县" }, { value: "450922", text: "陆川县" }, { value: "450923", text: "博白县" }, { value: "450924", text: "兴业县" }, { value: "450981", text: "北流市" }, { value: "450982", text: "其它区" }] }, { value: "451000", text: "百色市", children: [{ value: "451002", text: "右江区" }, { value: "451021", text: "田阳县" }, { value: "451022", text: "田东县" }, { value: "451023", text: "平果县" }, { value: "451024", text: "德保县" }, { value: "451025", text: "靖西县" }, { value: "451026", text: "那坡县" }, { value: "451027", text: "凌云县" }, { value: "451028", text: "乐业县" }, { value: "451029", text: "田林县" }, { value: "451030", text: "西林县" }, { value: "451031", text: "隆林各族自治县" }, { value: "451032", text: "其它区" }] }, { value: "451100", text: "贺州市", children: [{ value: "451102", text: "八步区" }, { value: "451121", text: "昭平县" }, { value: "451122", text: "钟山县" }, { value: "451123", text: "富川瑶族自治县" }, { value: "451124", text: "其它区" } ] }, { value: "451200", text: "河池市", children: [{ value: "451202", text: "金城江区" }, { value: "451221", text: "南丹县" }, { value: "451222", text: "天峨县" }, { value: "451223", text: "凤山县" }, { value: "451224", text: "东兰县" }, { value: "451225", text: "罗城仫佬族自治县" }, { value: "451226", text: "环江毛南族自治县" }, { value: "451227", text: "巴马瑶族自治县" }, { value: "451228", text: "都安瑶族自治县" }, { value: "451229", text: "大化瑶族自治县" }, { value: "451281", text: "宜州市" }, { value: "451282", text: "其它区" }] }, { value: "451300", text: "来宾市", children: [{ value: "451302", text: "兴宾区" }, { value: "451321", text: "忻城县" }, { value: "451322", text: "象州县" }, { value: "451323", text: "武宣县" }, { value: "451324", text: "金秀瑶族自治县" }, { value: "451381", text: "合山市" }, { value: "451382", text: "其它区" }] }, { value: "451400", text: "崇左市", children: [{ value: "451402", text: "江洲区" }, { value: "451421", text: "扶绥县" }, { value: "451422", text: "宁明县" }, { value: "451423", text: "龙州县" }, { value: "451424", text: "大新县" }, { value: "451425", text: "天等县" }, { value: "451481", text: "凭祥市" }, { value: "451482", text: "其它区" }] }] }, { value: '460000', text: '海南省', children: [{ value: "460100", text: "海口市", children: [{ value: "460105", text: "秀英区" }, { value: "460106", text: "龙华区" }, { value: "460107", text: "琼山区" }, { value: "460108", text: "美兰区" }, { value: "460109", text: "其它区" }] }, { value: "460200", text: "三亚市" }, { value: "469001", text: "五指山市" }, { value: "469002", text: "琼海市" }, { value: "469003", text: "儋州市" }, { value: "469005", text: "文昌市" }, { value: "469006", text: "万宁市" }, { value: "469007", text: "东方市" }, { value: "469025", text: "定安县" }, { value: "469026", text: "屯昌县" }, { value: "469027", text: "澄迈县" }, { value: "469028", text: "临高县" }, { value: "469030", text: "白沙黎族自治县" }, { value: "469031", text: "昌江黎族自治县" }, { value: "469033", text: "乐东黎族自治县" }, { value: "469034", text: "陵水黎族自治县" }, { value: "469035", text: "保亭黎族苗族自治县" }, { value: "469036", text: "琼中黎族苗族自治县" }, { value: "469037", text: "西沙群岛" }, { value: "469038", text: "南沙群岛" }, { value: "469039", text: "中沙群岛的岛礁及其海域" }] }, { value: '500000', text: '重庆', children: [{ value: '500000', text: '重庆', children: [{ value: "500101", text: "万州区" }, { value: "500102", text: "涪陵区" }, { value: "500103", text: "渝中区" }, { value: "500104", text: "大渡口区" }, { value: "500105", text: "江北区" }, { value: "500106", text: "沙坪坝区" }, { value: "500107", text: "九龙坡区" }, { value: "500108", text: "南岸区" }, { value: "500109", text: "北碚区" }, { value: "500110", text: "万盛区" }, { value: "500111", text: "双桥区" }, { value: "500112", text: "渝北区" }, { value: "500113", text: "巴南区" }, { value: "500114", text: "黔江区" }, { value: "500115", text: "长寿区" }, { value: "500222", text: "綦江县" }, { value: "500223", text: "潼南县" }, { value: "500224", text: "铜梁县" }, { value: "500225", text: "大足县" }, { value: "500226", text: "荣昌县" }, { value: "500227", text: "璧山县" }, { value: "500228", text: "梁平县" }, { value: "500229", text: "城口县" }, { value: "500230", text: "丰都县" }, { value: "500231", text: "垫江县" }, { value: "500232", text: "武隆县" }, { value: "500233", text: "忠县" }, { value: "500234", text: "开县" }, { value: "500235", text: "云阳县" }, { value: "500236", text: "奉节县" }, { value: "500237", text: "巫山县" }, { value: "500238", text: "巫溪县" }, { value: "500240", text: "石柱土家族自治县" }, { value: "500241", text: "秀山土家族苗族自治县" }, { value: "500242", text: "酉阳土家族苗族自治县" }, { value: "500243", text: "彭水苗族土家族自治县" }, { value: "500381", text: "江津区" }, { value: "500382", text: "合川区" }, { value: "500383", text: "永川区" }, { value: "500384", text: "南川区" }, { value: "500385", text: "其它区" }] }] }, { value: '510000', text: '四川省', children: [{ value: "510100", text: "成都市", children: [{ value: "510104", text: "锦江区" }, { value: "510105", text: "青羊区" }, { value: "510106", text: "金牛区" }, { value: "510107", text: "武侯区" }, { value: "510108", text: "成华区" }, { value: "510112", text: "龙泉驿区" }, { value: "510113", text: "青白江区" }, { value: "510114", text: "新都区" }, { value: "510115", text: "温江区" }, { value: "510121", text: "金堂县" }, { value: "510122", text: "双流县" }, { value: "510124", text: "郫县" }, { value: "510129", text: "大邑县" }, { value: "510131", text: "蒲江县" }, { value: "510132", text: "新津县" }, { value: "510181", text: "都江堰市" }, { value: "510182", text: "彭州市" }, { value: "510183", text: "邛崃市" }, { value: "510184", text: "崇州市" }, { value: "510185", text: "其它区" }] }, { value: "510300", text: "自贡市", children: [{ value: "510302", text: "自流井区" }, { value: "510303", text: "贡井区" }, { value: "510304", text: "大安区" }, { value: "510311", text: "沿滩区" }, { value: "510321", text: "荣县" }, { value: "510322", text: "富顺县" }, { value: "510323", text: "其它区" }] }, { value: "510400", text: "攀枝花市", children: [{ value: "510402", text: "东区" }, { value: "510403", text: "西区" }, { value: "510411", text: "仁和区" }, { value: "510421", text: "米易县" }, { value: "510422", text: "盐边县" }, { value: "510423", text: "其它区" }] }, { value: "510500", text: "泸州市", children: [{ value: "510502", text: "江阳区" }, { value: "510503", text: "纳溪区" }, { value: "510504", text: "龙马潭区" }, { value: "510521", text: "泸县" }, { value: "510522", text: "合江县" }, { value: "510524", text: "叙永县" }, { value: "510525", text: "古蔺县" }, { value: "510526", text: "其它区" }] }, { value: "510600", text: "德阳市", children: [{ value: "510603", text: "旌阳区" }, { value: "510623", text: "中江县" }, { value: "510626", text: "罗江县" }, { value: "510681", text: "广汉市" }, { value: "510682", text: "什邡市" }, { value: "510683", text: "绵竹市" }, { value: "510684", text: "其它区" }] }, { value: "510700", text: "绵阳市", children: [{ value: "510703", text: "涪城区" }, { value: "510704", text: "游仙区" }, { value: "510722", text: "三台县" }, { value: "510723", text: "盐亭县" }, { value: "510724", text: "安县" }, { value: "510725", text: "梓潼县" }, { value: "510726", text: "北川羌族自治县" }, { value: "510727", text: "平武县" }, { value: "510751", text: "高新区" }, { value: "510781", text: "江油市" }, { value: "510782", text: "其它区" }] }, { value: "510800", text: "广元市", children: [{ value: "510802", text: "利州区" }, { value: "510811", text: "元坝区" }, { value: "510812", text: "朝天区" }, { value: "510821", text: "旺苍县" }, { value: "510822", text: "青川县" }, { value: "510823", text: "剑阁县" }, { value: "510824", text: "苍溪县" }, { value: "510825", text: "其它区" }] }, { value: "510900", text: "遂宁市", children: [{ value: "510903", text: "船山区" }, { value: "510904", text: "安居区" }, { value: "510921", text: "蓬溪县" }, { value: "510922", text: "射洪县" }, { value: "510923", text: "大英县" }, { value: "510924", text: "其它区" }] }, { value: "511000", text: "内江市", children: [{ value: "511002", text: "市中区" }, { value: "511011", text: "东兴区" }, { value: "511024", text: "威远县" }, { value: "511025", text: "资中县" }, { value: "511028", text: "隆昌县" }, { value: "511029", text: "其它区" }] }, { value: "511100", text: "乐山市", children: [{ value: "511102", text: "市中区" }, { value: "511111", text: "沙湾区" }, { value: "511112", text: "五通桥区" }, { value: "511113", text: "金口河区" }, { value: "511123", text: "犍为县" }, { value: "511124", text: "井研县" }, { value: "511126", text: "夹江县" }, { value: "511129", text: "沐川县" }, { value: "511132", text: "峨边彝族自治县" }, { value: "511133", text: "马边彝族自治县" }, { value: "511181", text: "峨眉山市" }, { value: "511182", text: "其它区" }] }, { value: "511300", text: "南充市", children: [{ value: "511302", text: "顺庆区" }, { value: "511303", text: "高坪区" }, { value: "511304", text: "嘉陵区" }, { value: "511321", text: "南部县" }, { value: "511322", text: "营山县" }, { value: "511323", text: "蓬安县" }, { value: "511324", text: "仪陇县" }, { value: "511325", text: "西充县" }, { value: "511381", text: "阆中市" }, { value: "511382", text: "其它区" }] }, { value: "511400", text: "眉山市", children: [{ value: "511402", text: "东坡区" }, { value: "511421", text: "仁寿县" }, { value: "511422", text: "彭山县" }, { value: "511423", text: "洪雅县" }, { value: "511424", text: "丹棱县" }, { value: "511425", text: "青神县" }, { value: "511426", text: "其它区" }] }, { value: "511500", text: "宜宾市", children: [{ value: "511502", text: "翠屏区" }, { value: "511521", text: "宜宾县" }, { value: "511522", text: "南溪县" }, { value: "511523", text: "江安县" }, { value: "511524", text: "长宁县" }, { value: "511525", text: "高县" }, { value: "511526", text: "珙县" }, { value: "511527", text: "筠连县" }, { value: "511528", text: "兴文县" }, { value: "511529", text: "屏山县" }, { value: "511530", text: "其它区" }] }, { value: "511600", text: "广安市", children: [{ value: "511602", text: "广安区" }, { value: "511621", text: "岳池县" }, { value: "511622", text: "武胜县" }, { value: "511623", text: "邻水县" }, { value: "511681", text: "华蓥市" }, { value: "511682", text: "市辖区" }, { value: "511683", text: "其它区" }] }, { value: "511700", text: "达州市", children: [{ value: "511702", text: "通川区" }, { value: "511721", text: "达县" }, { value: "511722", text: "宣汉县" }, { value: "511723", text: "开江县" }, { value: "511724", text: "大竹县" }, { value: "511725", text: "渠县" }, { value: "511781", text: "万源市" }, { value: "511782", text: "其它区" }] }, { value: "511800", text: "雅安市", children: [{ value: "511802", text: "雨城区" }, { value: "511821", text: "名山县" }, { value: "511822", text: "荥经县" }, { value: "511823", text: "汉源县" }, { value: "511824", text: "石棉县" }, { value: "511825", text: "天全县" }, { value: "511826", text: "芦山县" }, { value: "511827", text: "宝兴县" }, { value: "511828", text: "其它区" }] }, { value: "511900", text: "巴中市", children: [{ value: "511902", text: "巴州区" }, { value: "511921", text: "通江县" }, { value: "511922", text: "南江县" }, { value: "511923", text: "平昌县" }, { value: "511924", text: "其它区" }] }, { value: "512000", text: "资阳市", children: [{ value: "512002", text: "雁江区" }, { value: "512021", text: "安岳县" }, { value: "512022", text: "乐至县" }, { value: "512081", text: "简阳市" }, { value: "512082", text: "其它区" }] }, { value: "513200", text: "阿坝藏族羌族自治州", children: [{ value: "513221", text: "汶川县" }, { value: "513222", text: "理县" }, { value: "513223", text: "茂县" }, { value: "513224", text: "松潘县" }, { value: "513225", text: "九寨沟县" }, { value: "513226", text: "金川县" }, { value: "513227", text: "小金县" }, { value: "513228", text: "黑水县" }, { value: "513229", text: "马尔康县" }, { value: "513230", text: "壤塘县" }, { value: "513231", text: "阿坝县" }, { value: "513232", text: "若尔盖县" }, { value: "513233", text: "红原县" }, { value: "513234", text: "其它区" }] }, { value: "513300", text: "甘孜藏族自治州", children: [{ value: "513321", text: "康定县" }, { value: "513322", text: "泸定县" }, { value: "513323", text: "丹巴县" }, { value: "513324", text: "九龙县" }, { value: "513325", text: "雅江县" }, { value: "513326", text: "道孚县" }, { value: "513327", text: "炉霍县" }, { value: "513328", text: "甘孜县" }, { value: "513329", text: "新龙县" }, { value: "513330", text: "德格县" }, { value: "513331", text: "白玉县" }, { value: "513332", text: "石渠县" }, { value: "513333", text: "色达县" }, { value: "513334", text: "理塘县" }, { value: "513335", text: "巴塘县" }, { value: "513336", text: "乡城县" }, { value: "513337", text: "稻城县" }, { value: "513338", text: "得荣县" }, { value: "513339", text: "其它区" }] }, { value: "513400", text: "凉山彝族自治州", children: [{ value: "513401", text: "西昌市" }, { value: "513422", text: "木里藏族自治县" }, { value: "513423", text: "盐源县" }, { value: "513424", text: "德昌县" }, { value: "513425", text: "会理县" }, { value: "513426", text: "会东县" }, { value: "513427", text: "宁南县" }, { value: "513428", text: "普格县" }, { value: "513429", text: "布拖县" }, { value: "513430", text: "金阳县" }, { value: "513431", text: "昭觉县" }, { value: "513432", text: "喜德县" }, { value: "513433", text: "冕宁县" }, { value: "513434", text: "越西县" }, { value: "513435", text: "甘洛县" }, { value: "513436", text: "美姑县" }, { value: "513437", text: "雷波县" }, { value: "513438", text: "其它区" }] }] }, { value: '520000', text: '贵州省', children: [{ value: "520100", text: "贵阳市", children: [{ value: "520102", text: "南明区" }, { value: "520103", text: "云岩区" }, { value: "520111", text: "花溪区" }, { value: "520112", text: "乌当区" }, { value: "520113", text: "白云区" }, { value: "520114", text: "小河区" }, { value: "520121", text: "开阳县" }, { value: "520122", text: "息烽县" }, { value: "520123", text: "修文县" }, { value: "520151", text: "金阳开发区" }, { value: "520181", text: "清镇市" }, { value: "520182", text: "其它区" }] }, { value: "520200", text: "六盘水市", children: [{ value: "520201", text: "钟山区" }, { value: "520203", text: "六枝特区" }, { value: "520221", text: "水城县" }, { value: "520222", text: "盘县" }, { value: "520223", text: "其它区" }] }, { value: "520300", text: "遵义市", children: [{ value: "520302", text: "红花岗区" }, { value: "520303", text: "汇川区" }, { value: "520321", text: "遵义县" }, { value: "520322", text: "桐梓县" }, { value: "520323", text: "绥阳县" }, { value: "520324", text: "正安县" }, { value: "520325", text: "道真仡佬族苗族自治县" }, { value: "520326", text: "务川仡佬族苗族自治县" }, { value: "520327", text: "凤冈县" }, { value: "520328", text: "湄潭县" }, { value: "520329", text: "余庆县" }, { value: "520330", text: "习水县" }, { value: "520381", text: "赤水市" }, { value: "520382", text: "仁怀市" }, { value: "520383", text: "其它区" }] }, { value: "520400", text: "安顺市", children: [{ value: "520402", text: "西秀区" }, { value: "520421", text: "平坝县" }, { value: "520422", text: "普定县" }, { value: "520423", text: "镇宁布依族苗族自治县" }, { value: "520424", text: "关岭布依族苗族自治县" }, { value: "520425", text: "紫云苗族布依族自治县" }, { value: "520426", text: "其它区" }] }, { value: "522200", text: "铜仁地区", children: [{ value: "522201", text: "铜仁市" }, { value: "522222", text: "江口县" }, { value: "522223", text: "玉屏侗族自治县" }, { value: "522224", text: "石阡县" }, { value: "522225", text: "思南县" }, { value: "522226", text: "印江土家族苗族自治县" }, { value: "522227", text: "德江县" }, { value: "522228", text: "沿河土家族自治县" }, { value: "522229", text: "松桃苗族自治县" }, { value: "522230", text: "万山特区" }, { value: "522231", text: "其它区" }] }, { value: "522300", text: "黔西南布依族苗族自治州", children: [{ value: "522301", text: "兴义市" }, { value: "522322", text: "兴仁县" }, { value: "522323", text: "普安县" }, { value: "522324", text: "晴隆县" }, { value: "522325", text: "贞丰县" }, { value: "522326", text: "望谟县" }, { value: "522327", text: "册亨县" }, { value: "522328", text: "安龙县" }, { value: "522329", text: "其它区" }] }, { value: "522400", text: "毕节地区", children: [{ value: "522401", text: "毕节市" }, { value: "522422", text: "大方县" }, { value: "522423", text: "黔西县" }, { value: "522424", text: "金沙县" }, { value: "522425", text: "织金县" }, { value: "522426", text: "纳雍县" }, { value: "522427", text: "威宁彝族回族苗族自治县" }, { value: "522428", text: "赫章县" }, { value: "522429", text: "其它区" }] }, { value: "522600", text: "黔东南苗族侗族自治州", children: [{ value: "522601", text: "凯里市" }, { value: "522622", text: "黄平县" }, { value: "522623", text: "施秉县" }, { value: "522624", text: "三穗县" }, { value: "522625", text: "镇远县" }, { value: "522626", text: "岑巩县" }, { value: "522627", text: "天柱县" }, { value: "522628", text: "锦屏县" }, { value: "522629", text: "剑河县" }, { value: "522630", text: "台江县" }, { value: "522631", text: "黎平县" }, { value: "522632", text: "榕江县" }, { value: "522633", text: "从江县" }, { value: "522634", text: "雷山县" }, { value: "522635", text: "麻江县" }, { value: "522636", text: "丹寨县" }, { value: "522637", text: "其它区" }] }, { value: "522700", text: "黔南布依族苗族自治州", children: [{ value: "522701", text: "都匀市" }, { value: "522702", text: "福泉市" }, { value: "522722", text: "荔波县" }, { value: "522723", text: "贵定县" }, { value: "522725", text: "瓮安县" }, { value: "522726", text: "独山县" }, { value: "522727", text: "平塘县" }, { value: "522728", text: "罗甸县" }, { value: "522729", text: "长顺县" }, { value: "522730", text: "龙里县" }, { value: "522731", text: "惠水县" }, { value: "522732", text: "三都水族自治县" }, { value: "522733", text: "其它区" }] }] }, { value: '530000', text: '云南省', children: [{ value: "530100", text: "昆明市", children: [{ value: "530102", text: "五华区" }, { value: "530103", text: "盘龙区" }, { value: "530111", text: "官渡区" }, { value: "530112", text: "西山区" }, { value: "530113", text: "东川区" }, { value: "530121", text: "呈贡县" }, { value: "530122", text: "晋宁县" }, { value: "530124", text: "富民县" }, { value: "530125", text: "宜良县" }, { value: "530126", text: "石林彝族自治县" }, { value: "530127", text: "嵩明县" }, { value: "530128", text: "禄劝彝族苗族自治县" }, { value: "530129", text: "寻甸回族彝族自治县" }, { value: "530181", text: "安宁市" }, { value: "530182", text: "其它区" }] }, { value: "530300", text: "曲靖市", children: [{ value: "530302", text: "麒麟区" }, { value: "530321", text: "马龙县" }, { value: "530322", text: "陆良县" }, { value: "530323", text: "师宗县" }, { value: "530324", text: "罗平县" }, { value: "530325", text: "富源县" }, { value: "530326", text: "会泽县" }, { value: "530328", text: "沾益县" }, { value: "530381", text: "宣威市" }, { value: "530382", text: "其它区" }] }, { value: "530400", text: "玉溪市", children: [{ value: "530402", text: "红塔区" }, { value: "530421", text: "江川县" }, { value: "530422", text: "澄江县" }, { value: "530423", text: "通海县" }, { value: "530424", text: "华宁县" }, { value: "530425", text: "易门县" }, { value: "530426", text: "峨山彝族自治县" }, { value: "530427", text: "新平彝族傣族自治县" }, { value: "530428", text: "元江哈尼族彝族傣族自治县" }, { value: "530429", text: "其它区" }] }, { value: "530500", text: "保山市", children: [{ value: "530502", text: "隆阳区" }, { value: "530521", text: "施甸县" }, { value: "530522", text: "腾冲县" }, { value: "530523", text: "龙陵县" }, { value: "530524", text: "昌宁县" }, { value: "530525", text: "其它区" }] }, { value: "530600", text: "昭通市", children: [{ value: "530602", text: "昭阳区" }, { value: "530621", text: "鲁甸县" }, { value: "530622", text: "巧家县" }, { value: "530623", text: "盐津县" }, { value: "530624", text: "大关县" }, { value: "530625", text: "永善县" }, { value: "530626", text: "绥江县" }, { value: "530627", text: "镇雄县" }, { value: "530628", text: "彝良县" }, { value: "530629", text: "威信县" }, { value: "530630", text: "水富县" }, { value: "530631", text: "其它区" }] }, { value: "530700", text: "丽江市", children: [{ value: "530702", text: "古城区" }, { value: "530721", text: "玉龙纳西族自治县" }, { value: "530722", text: "永胜县" }, { value: "530723", text: "华坪县" }, { value: "530724", text: "宁蒗彝族自治县" }, { value: "530725", text: "其它区" }] }, { value: "530800", text: "普洱市", children: [{ value: "530802", text: "思茅区" }, { value: "530821", text: "宁洱哈尼族彝族自治县" }, { value: "530822", text: "墨江哈尼族自治县" }, { value: "530823", text: "景东彝族自治县" }, { value: "530824", text: "景谷傣族彝族自治县" }, { value: "530825", text: "镇沅彝族哈尼族拉祜族自治县" }, { value: "530826", text: "江城哈尼族彝族自治县" }, { value: "530827", text: "孟连傣族拉祜族佤族自治县" }, { value: "530828", text: "澜沧拉祜族自治县" }, { value: "530829", text: "西盟佤族自治县" }, { value: "530830", text: "其它区" }] }, { value: "530900", text: "临沧市", children: [{ value: "530902", text: "临翔区" }, { value: "530921", text: "凤庆县" }, { value: "530922", text: "云县" }, { value: "530923", text: "永德县" }, { value: "530924", text: "镇康县" }, { value: "530925", text: "双江拉祜族佤族布朗族傣族自治县" }, { value: "530926", text: "耿马傣族佤族自治县" }, { value: "530927", text: "沧源佤族自治县" }, { value: "530928", text: "其它区" }] }, { value: "532300", text: "楚雄彝族自治州", children: [{ value: "532301", text: "楚雄市" }, { value: "532322", text: "双柏县" }, { value: "532323", text: "牟定县" }, { value: "532324", text: "南华县" }, { value: "532325", text: "姚安县" }, { value: "532326", text: "大姚县" }, { value: "532327", text: "永仁县" }, { value: "532328", text: "元谋县" }, { value: "532329", text: "武定县" }, { value: "532331", text: "禄丰县" }, { value: "532332", text: "其它区" }] }, { value: "532500", text: "红河哈尼族彝族自治州", children: [{ value: "532501", text: "个旧市" }, { value: "532502", text: "开远市" }, { value: "532522", text: "蒙自县" }, { value: "532523", text: "屏边苗族自治县" }, { value: "532524", text: "建水县" }, { value: "532525", text: "石屏县" }, { value: "532526", text: "弥勒县" }, { value: "532527", text: "泸西县" }, { value: "532528", text: "元阳县" }, { value: "532529", text: "红河县" }, { value: "532530", text: "金平苗族瑶族傣族自治县" }, { value: "532531", text: "绿春县" }, { value: "532532", text: "河口瑶族自治县" }, { value: "532533", text: "其它区" }] }, { value: "532600", text: "文山壮族苗族自治州", children: [{ value: "532621", text: "文山县" }, { value: "532622", text: "砚山县" }, { value: "532623", text: "西畴县" }, { value: "532624", text: "麻栗坡县" }, { value: "532625", text: "马关县" }, { value: "532626", text: "丘北县" }, { value: "532627", text: "广南县" }, { value: "532628", text: "富宁县" }, { value: "532629", text: "其它区" }] }, { value: "532800", text: "西双版纳傣族自治州", children: [{ value: "532801", text: "景洪市" }, { value: "532822", text: "勐海县" }, { value: "532823", text: "勐腊县" }, { value: "532824", text: "其它区" }] }, { value: "532900", text: "大理白族自治州", children: [{ value: "532901", text: "大理市" }, { value: "532922", text: "漾濞彝族自治县" }, { value: "532923", text: "祥云县" }, { value: "532924", text: "宾川县" }, { value: "532925", text: "弥渡县" }, { value: "532926", text: "南涧彝族自治县" }, { value: "532927", text: "巍山彝族回族自治县" }, { value: "532928", text: "永平县" }, { value: "532929", text: "云龙县" }, { value: "532930", text: "洱源县" }, { value: "532931", text: "剑川县" }, { value: "532932", text: "鹤庆县" }, { value: "532933", text: "其它区" }] }, { value: "533100", text: "德宏傣族景颇族自治州", children: [{ value: "533102", text: "瑞丽市" }, { value: "533103", text: "潞西市" }, { value: "533122", text: "梁河县" }, { value: "533123", text: "盈江县" }, { value: "533124", text: "陇川县" }, { value: "533125", text: "其它区" }] }, { value: "533300", text: "怒江傈僳族自治州", children: [{ value: "533321", text: "泸水县" }, { value: "533323", text: "福贡县" }, { value: "533324", text: "贡山独龙族怒族自治县" }, { value: "533325", text: "兰坪白族普米族自治县" }, { value: "533326", text: "其它区" }] }, { value: "533400", text: "迪庆藏族自治州", children: [{ value: "533421", text: "香格里拉县" }, { value: "533422", text: "德钦县" }, { value: "533423", text: "维西傈僳族自治县" }, { value: "533424", text: "其它区" }] }] }, { value: '540000', text: '西藏', children: [{ value: "540100", text: "拉萨市", children: [{ value: "540102", text: "城关区" }, { value: "540121", text: "林周县" }, { value: "540122", text: "当雄县" }, { value: "540123", text: "尼木县" }, { value: "540124", text: "曲水县" }, { value: "540125", text: "堆龙德庆县" }, { value: "540126", text: "达孜县" }, { value: "540127", text: "墨竹工卡县" }, { value: "540128", text: "其它区" }] }, { value: "542100", text: "昌都地区", children: [{ value: "542121", text: "昌都县" }, { value: "542122", text: "江达县" }, { value: "542123", text: "贡觉县" }, { value: "542124", text: "类乌齐县" }, { value: "542125", text: "丁青县" }, { value: "542126", text: "察雅县" }, { value: "542127", text: "八宿县" }, { value: "542128", text: "左贡县" }, { value: "542129", text: "芒康县" }, { value: "542132", text: "洛隆县" }, { value: "542133", text: "边坝县" }, { value: "542134", text: "其它区" }] }, { value: "542200", text: "山南地区", children: [{ value: "542221", text: "乃东县" }, { value: "542222", text: "扎囊县" }, { value: "542223", text: "贡嘎县" }, { value: "542224", text: "桑日县" }, { value: "542225", text: "琼结县" }, { value: "542226", text: "曲松县" }, { value: "542227", text: "措美县" }, { value: "542228", text: "洛扎县" }, { value: "542229", text: "加查县" }, { value: "542231", text: "隆子县" }, { value: "542232", text: "错那县" }, { value: "542233", text: "浪卡子县" }, { value: "542234", text: "其它区" }] }, { value: "542300", text: "日喀则地区", children: [{ value: "542301", text: "日喀则市" }, { value: "542322", text: "南木林县" }, { value: "542323", text: "江孜县" }, { value: "542324", text: "定日县" }, { value: "542325", text: "萨迦县" }, { value: "542326", text: "拉孜县" }, { value: "542327", text: "昂仁县" }, { value: "542328", text: "谢通门县" }, { value: "542329", text: "白朗县" }, { value: "542330", text: "仁布县" }, { value: "542331", text: "康马县" }, { value: "542332", text: "定结县" }, { value: "542333", text: "仲巴县" }, { value: "542334", text: "亚东县" }, { value: "542335", text: "吉隆县" }, { value: "542336", text: "聂拉木县" }, { value: "542337", text: "萨嘎县" }, { value: "542338", text: "岗巴县" }, { value: "542339", text: "其它区" }] }, { value: "542400", text: "那曲地区", children: [{ value: "542421", text: "那曲县" }, { value: "542422", text: "嘉黎县" }, { value: "542423", text: "比如县" }, { value: "542424", text: "聂荣县" }, { value: "542425", text: "安多县" }, { value: "542426", text: "申扎县" }, { value: "542427", text: "索县" }, { value: "542428", text: "班戈县" }, { value: "542429", text: "巴青县" }, { value: "542430", text: "尼玛县" }, { value: "542431", text: "其它区" }] }, { value: "542500", text: "阿里地区", children: [{ value: "542521", text: "普兰县" }, { value: "542522", text: "札达县" }, { value: "542523", text: "噶尔县" }, { value: "542524", text: "日土县" }, { value: "542525", text: "革吉县" }, { value: "542526", text: "改则县" }, { value: "542527", text: "措勤县" }, { value: "542528", text: "其它区" }] }, { value: "542600", text: "林芝地区", children: [{ value: "542621", text: "林芝县" }, { value: "542622", text: "工布江达县" }, { value: "542623", text: "米林县" }, { value: "542624", text: "墨脱县" }, { value: "542625", text: "波密县" }, { value: "542626", text: "察隅县" }, { value: "542627", text: "朗县" }, { value: "542628", text: "其它区" }] }] }, { value: '610000', text: '陕西省', children: [{ value: "610100", text: "西安市", children: [{ value: "610102", text: "新城区" }, { value: "610103", text: "碑林区" }, { value: "610104", text: "莲湖区" }, { value: "610111", text: "灞桥区" }, { value: "610112", text: "未央区" }, { value: "610113", text: "雁塔区" }, { value: "610114", text: "阎良区" }, { value: "610115", text: "临潼区" }, { value: "610116", text: "长安区" }, { value: "610122", text: "蓝田县" }, { value: "610124", text: "周至县" }, { value: "610125", text: "户县" }, { value: "610126", text: "高陵县" }, { value: "610127", text: "其它区" }] }, { value: "610200", text: "铜川市", children: [{ value: "610202", text: "王益区" }, { value: "610203", text: "印台区" }, { value: "610204", text: "耀州区" }, { value: "610222", text: "宜君县" }, { value: "610223", text: "其它区" }] }, { value: "610300", text: "宝鸡市", children: [{ value: "610302", text: "渭滨区" }, { value: "610303", text: "金台区" }, { value: "610304", text: "陈仓区" }, { value: "610322", text: "凤翔县" }, { value: "610323", text: "岐山县" }, { value: "610324", text: "扶风县" }, { value: "610326", text: "眉县" }, { value: "610327", text: "陇县" }, { value: "610328", text: "千阳县" }, { value: "610329", text: "麟游县" }, { value: "610330", text: "凤县" }, { value: "610331", text: "太白县" }, { value: "610332", text: "其它区" }] }, { value: "610400", text: "咸阳市", children: [{ value: "610402", text: "秦都区" }, { value: "610403", text: "杨陵区" }, { value: "610404", text: "渭城区" }, { value: "610422", text: "三原县" }, { value: "610423", text: "泾阳县" }, { value: "610424", text: "乾县" }, { value: "610425", text: "礼泉县" }, { value: "610426", text: "永寿县" }, { value: "610427", text: "彬县" }, { value: "610428", text: "长武县" }, { value: "610429", text: "旬邑县" }, { value: "610430", text: "淳化县" }, { value: "610431", text: "武功县" }, { value: "610481", text: "兴平市" }, { value: "610482", text: "其它区" }] }, { value: "610500", text: "渭南市", children: [{ value: "610502", text: "临渭区" }, { value: "610521", text: "华县" }, { value: "610522", text: "潼关县" }, { value: "610523", text: "大荔县" }, { value: "610524", text: "合阳县" }, { value: "610525", text: "澄城县" }, { value: "610526", text: "蒲城县" }, { value: "610527", text: "白水县" }, { value: "610528", text: "富平县" }, { value: "610581", text: "韩城市" }, { value: "610582", text: "华阴市" }, { value: "610583", text: "其它区" }] }, { value: "610600", text: "延安市", children: [{ value: "610602", text: "宝塔区" }, { value: "610621", text: "延长县" }, { value: "610622", text: "延川县" }, { value: "610623", text: "子长县" }, { value: "610624", text: "安塞县" }, { value: "610625", text: "志丹县" }, { value: "610626", text: "吴起县" }, { value: "610627", text: "甘泉县" }, { value: "610628", text: "富县" }, { value: "610629", text: "洛川县" }, { value: "610630", text: "宜川县" }, { value: "610631", text: "黄龙县" }, { value: "610632", text: "黄陵县" }, { value: "610633", text: "其它区" }] }, { value: "610700", text: "汉中市", children: [{ value: "610702", text: "汉台区" }, { value: "610721", text: "南郑县" }, { value: "610722", text: "城固县" }, { value: "610723", text: "洋县" }, { value: "610724", text: "西乡县" }, { value: "610725", text: "勉县" }, { value: "610726", text: "宁强县" }, { value: "610727", text: "略阳县" }, { value: "610728", text: "镇巴县" }, { value: "610729", text: "留坝县" }, { value: "610730", text: "佛坪县" }, { value: "610731", text: "其它区" }] }, { value: "610800", text: "榆林市", children: [{ value: "610802", text: "榆阳区" }, { value: "610821", text: "神木县" }, { value: "610822", text: "府谷县" }, { value: "610823", text: "横山县" }, { value: "610824", text: "靖边县" }, { value: "610825", text: "定边县" }, { value: "610826", text: "绥德县" }, { value: "610827", text: "米脂县" }, { value: "610828", text: "佳县" }, { value: "610829", text: "吴堡县" }, { value: "610830", text: "清涧县" }, { value: "610831", text: "子洲县" }, { value: "610832", text: "其它区" }] }, { value: "610900", text: "安康市", children: [{ value: "610902", text: "汉滨区" }, { value: "610921", text: "汉阴县" }, { value: "610922", text: "石泉县" }, { value: "610923", text: "宁陕县" }, { value: "610924", text: "紫阳县" }, { value: "610925", text: "岚皋县" }, { value: "610926", text: "平利县" }, { value: "610927", text: "镇坪县" }, { value: "610928", text: "旬阳县" }, { value: "610929", text: "白河县" }, { value: "610930", text: "其它区" }] }, { value: "611000", text: "商洛市", children: [{ value: "611002", text: "商州区" }, { value: "611021", text: "洛南县" }, { value: "611022", text: "丹凤县" }, { value: "611023", text: "商南县" }, { value: "611024", text: "山阳县" }, { value: "611025", text: "镇安县" }, { value: "611026", text: "柞水县" }, { value: "611027", text: "其它区" }] }] }, { value: '620000', text: '甘肃省', children: [{ value: "620100", text: "兰州市", children: [{ value: "620102", text: "城关区" }, { value: "620103", text: "七里河区" }, { value: "620104", text: "西固区" }, { value: "620105", text: "安宁区" }, { value: "620111", text: "红古区" }, { value: "620121", text: "永登县" }, { value: "620122", text: "皋兰县" }, { value: "620123", text: "榆中县" }, { value: "620124", text: "其它区" }] }, { value: "620200", text: "嘉峪关市", children: [] }, { value: "620300", text: "金昌市", children: [{ value: "620302", text: "金川区" }, { value: "620321", text: "永昌县" }, { value: "620322", text: "其它区" }] }, { value: "620400", text: "白银市", children: [{ value: "620402", text: "白银区" }, { value: "620403", text: "平川区" }, { value: "620421", text: "靖远县" }, { value: "620422", text: "会宁县" }, { value: "620423", text: "景泰县" }, { value: "620424", text: "其它区" }] }, { value: "620500", text: "天水市", children: [{ value: "620502", text: "秦州区" }, { value: "620503", text: "麦积区" }, { value: "620521", text: "清水县" }, { value: "620522", text: "秦安县" }, { value: "620523", text: "甘谷县" }, { value: "620524", text: "武山县" }, { value: "620525", text: "张家川回族自治县" }, { value: "620526", text: "其它区" }] }, { value: "620600", text: "武威市", children: [{ value: "620602", text: "凉州区" }, { value: "620621", text: "民勤县" }, { value: "620622", text: "古浪县" }, { value: "620623", text: "天祝藏族自治县" }, { value: "620624", text: "其它区" }] }, { value: "620700", text: "张掖市", children: [{ value: "620702", text: "甘州区" }, { value: "620721", text: "肃南裕固族自治县" }, { value: "620722", text: "民乐县" }, { value: "620723", text: "临泽县" }, { value: "620724", text: "高台县" }, { value: "620725", text: "山丹县" }, { value: "620726", text: "其它区" }] }, { value: "620800", text: "平凉市", children: [{ value: "620802", text: "崆峒区" }, { value: "620821", text: "泾川县" }, { value: "620822", text: "灵台县" }, { value: "620823", text: "崇信县" }, { value: "620824", text: "华亭县" }, { value: "620825", text: "庄浪县" }, { value: "620826", text: "静宁县" }, { value: "620827", text: "其它区" }] }, { value: "620900", text: "酒泉市", children: [{ value: "620902", text: "肃州区" }, { value: "620921", text: "金塔县" }, { value: "620922", text: "安西县" }, { value: "620923", text: "肃北蒙古族自治县" }, { value: "620924", text: "阿克塞哈萨克族自治县" }, { value: "620981", text: "玉门市" }, { value: "620982", text: "敦煌市" }, { value: "620983", text: "其它区" }] }, { value: "621000", text: "庆阳市", children: [{ value: "621002", text: "西峰区" }, { value: "621021", text: "庆城县" }, { value: "621022", text: "环县" }, { value: "621023", text: "华池县" }, { value: "621024", text: "合水县" }, { value: "621025", text: "正宁县" }, { value: "621026", text: "宁县" }, { value: "621027", text: "镇原县" }, { value: "621028", text: "其它区" }] }, { value: "621100", text: "定西市", children: [{ value: "621102", text: "安定区" }, { value: "621121", text: "通渭县" }, { value: "621122", text: "陇西县" }, { value: "621123", text: "渭源县" }, { value: "621124", text: "临洮县" }, { value: "621125", text: "漳县" }, { value: "621126", text: "岷县" }, { value: "621127", text: "其它区" }] }, { value: "621200", text: "陇南市", children: [{ value: "621202", text: "武都区" }, { value: "621221", text: "成县" }, { value: "621222", text: "文县" }, { value: "621223", text: "宕昌县" }, { value: "621224", text: "康县" }, { value: "621225", text: "西和县" }, { value: "621226", text: "礼县" }, { value: "621227", text: "徽县" }, { value: "621228", text: "两当县" }, { value: "621229", text: "其它区" }] }, { value: "622900", text: "临夏回族自治州", children: [{ value: "622901", text: "临夏市" }, { value: "622921", text: "临夏县" }, { value: "622922", text: "康乐县" }, { value: "622923", text: "永靖县" }, { value: "622924", text: "广河县" }, { value: "622925", text: "和政县" }, { value: "622926", text: "东乡族自治县" }, { value: "622927", text: "积石山保安族东乡族撒拉族自治县" }, { value: "622928", text: "其它区" }] }, { value: "623000", text: "甘南藏族自治州", children: [{ value: "623001", text: "合作市" }, { value: "623021", text: "临潭县" }, { value: "623022", text: "卓尼县" }, { value: "623023", text: "舟曲县" }, { value: "623024", text: "迭部县" }, { value: "623025", text: "玛曲县" }, { value: "623026", text: "碌曲县" }, { value: "623027", text: "夏河县" }, { value: "623028", text: "其它区" }] }] }, { value: '630000', text: '青海省', children: [{ value: "630100", text: "西宁市", children: [{ value: "630102", text: "城东区" }, { value: "630103", text: "城中区" }, { value: "630104", text: "城西区" }, { value: "630105", text: "城北区" }, { value: "630121", text: "大通回族土族自治县" }, { value: "630122", text: "湟中县" }, { value: "630123", text: "湟源县" }, { value: "630124", text: "其它区" }] }, { value: "632100", text: "海东地区", children: [{ value: "632121", text: "平安县" }, { value: "632122", text: "民和回族土族自治县" }, { value: "632123", text: "乐都县" }, { value: "632126", text: "互助土族自治县" }, { value: "632127", text: "化隆回族自治县" }, { value: "632128", text: "循化撒拉族自治县" }, { value: "632129", text: "其它区" }] }, { value: "632200", text: "海北藏族自治州", children: [{ value: "632221", text: "门源回族自治县" }, { value: "632222", text: "祁连县" }, { value: "632223", text: "海晏县" }, { value: "632224", text: "刚察县" }, { value: "632225", text: "其它区" }] }, { value: "632300", text: "黄南藏族自治州", children: [{ value: "632321", text: "同仁县" }, { value: "632322", text: "尖扎县" }, { value: "632323", text: "泽库县" }, { value: "632324", text: "河南蒙古族自治县" }, { value: "632325", text: "其它区" }] }, { value: "632500", text: "海南藏族自治州", children: [{ value: "632521", text: "共和县" }, { value: "632522", text: "同德县" }, { value: "632523", text: "贵德县" }, { value: "632524", text: "兴海县" }, { value: "632525", text: "贵南县" }, { value: "632526", text: "其它区" }] }, { value: "632600", text: "果洛藏族自治州", children: [{ value: "632621", text: "玛沁县" }, { value: "632622", text: "班玛县" }, { value: "632623", text: "甘德县" }, { value: "632624", text: "达日县" }, { value: "632625", text: "久治县" }, { value: "632626", text: "玛多县" }, { value: "632627", text: "其它区" }] }, { value: "632700", text: "玉树藏族自治州", children: [{ value: "632721", text: "玉树县" }, { value: "632722", text: "杂多县" }, { value: "632723", text: "称多县" }, { value: "632724", text: "治多县" }, { value: "632725", text: "囊谦县" }, { value: "632726", text: "曲麻莱县" }, { value: "632727", text: "其它区" }] }, { value: "632800", text: "海西蒙古族藏族自治州", children: [{ value: "632801", text: "格尔木市" }, { value: "632802", text: "德令哈市" }, { value: "632821", text: "乌兰县" }, { value: "632822", text: "都兰县" }, { value: "632823", text: "天峻县" }, { value: "632824", text: "其它区" }] }] }, { value: '640000', text: '宁夏', children: [{ value: "640100", text: "银川市", children: [{ value: "640104", text: "兴庆区" }, { value: "640105", text: "西夏区" }, { value: "640106", text: "金凤区" }, { value: "640121", text: "永宁县" }, { value: "640122", text: "贺兰县" }, { value: "640181", text: "灵武市" }, { value: "640182", text: "其它区" }] }, { value: "640200", text: "石嘴山市", children: [{ value: "640202", text: "大武口区" }, { value: "640205", text: "惠农区" }, { value: "640221", text: "平罗县" }, { value: "640222", text: "其它区" }] }, { value: "640300", text: "吴忠市", children: [{ value: "640302", text: "利通区" }, { value: "640303", text: "红寺堡区" }, { value: "640323", text: "盐池县" }, { value: "640324", text: "同心县" }, { value: "640381", text: "青铜峡市" }, { value: "640382", text: "其它区" }] }, { value: "640400", text: "固原市", children: [{ value: "640402", text: "原州区" }, { value: "640422", text: "西吉县" }, { value: "640423", text: "隆德县" }, { value: "640424", text: "泾源县" }, { value: "640425", text: "彭阳县" }, { value: "640426", text: "其它区" }] }, { value: "640500", text: "中卫市", children: [{ value: "640502", text: "沙坡头区" }, { value: "640521", text: "中宁县" }, { value: "640522", text: "海原县" }, { value: "640523", text: "其它区" }] }] }, { value: '650000', text: '新疆', children: [{ value: "650100", text: "乌鲁木齐市", children: [{ value: "650102", text: "天山区" }, { value: "650103", text: "沙依巴克区" }, { value: "650104", text: "新市区" }, { value: "650105", text: "水磨沟区" }, { value: "650106", text: "头屯河区" }, { value: "650107", text: "达坂城区" }, { value: "650108", text: "东山区" }, { value: "650109", text: "米东区" }, { value: "650121", text: "乌鲁木齐县" }, { value: "650122", text: "其它区" }] }, { value: "650200", text: "克拉玛依市", children: [{ value: "650202", text: "独山子区" }, { value: "650203", text: "克拉玛依区" }, { value: "650204", text: "白碱滩区" }, { value: "650205", text: "乌尔禾区" }, { value: "650206", text: "其它区" }] }, { value: "652100", text: "吐鲁番地区", children: [{ value: "652101", text: "吐鲁番市" }, { value: "652122", text: "鄯善县" }, { value: "652123", text: "托克逊县" }, { value: "652124", text: "其它区" }] }, { value: "652200", text: "哈密地区", children: [{ value: "652201", text: "哈密市" }, { value: "652222", text: "巴里坤哈萨克自治县" }, { value: "652223", text: "伊吾县" }, { value: "652224", text: "其它区" }] }, { value: "652300", text: "昌吉回族自治州", children: [{ value: "652301", text: "昌吉市" }, { value: "652302", text: "阜康市" }, { value: "652303", text: "米泉市" }, { value: "652323", text: "呼图壁县" }, { value: "652324", text: "玛纳斯县" }, { value: "652325", text: "奇台县" }, { value: "652327", text: "吉木萨尔县" }, { value: "652328", text: "木垒哈萨克自治县" }, { value: "652329", text: "其它区" }] }, { value: "652700", text: "博尔塔拉蒙古自治州", children: [{ value: "652701", text: "博乐市" }, { value: "652722", text: "精河县" }, { value: "652723", text: "温泉县" }, { value: "652724", text: "其它区" }] }, { value: "652800", text: "巴音郭楞蒙古自治州", children: [{ value: "652801", text: "库尔勒市" }, { value: "652822", text: "轮台县" }, { value: "652823", text: "尉犁县" }, { value: "652824", text: "若羌县" }, { value: "652825", text: "且末县" }, { value: "652826", text: "焉耆回族自治县" }, { value: "652827", text: "和静县" }, { value: "652828", text: "和硕县" }, { value: "652829", text: "博湖县" }, { value: "652830", text: "其它区" }] }, { value: "652900", text: "阿克苏地区", children: [{ value: "652901", text: "阿克苏市" }, { value: "652922", text: "温宿县" }, { value: "652923", text: "库车县" }, { value: "652924", text: "沙雅县" }, { value: "652925", text: "新和县" }, { value: "652926", text: "拜城县" }, { value: "652927", text: "乌什县" }, { value: "652928", text: "阿瓦提县" }, { value: "652929", text: "柯坪县" }, { value: "652930", text: "其它区" }] }, { value: "653000", text: "克孜勒苏柯尔克孜自治州", children: [{ value: "653001", text: "阿图什市" }, { value: "653022", text: "阿克陶县" }, { value: "653023", text: "阿合奇县" }, { value: "653024", text: "乌恰县" }, { value: "653025", text: "其它区" }] }, { value: "653100", text: "喀什地区", children: [{ value: "653101", text: "喀什市" }, { value: "653121", text: "疏附县" }, { value: "653122", text: "疏勒县" }, { value: "653123", text: "英吉沙县" }, { value: "653124", text: "泽普县" }, { value: "653125", text: "莎车县" }, { value: "653126", text: "叶城县" }, { value: "653127", text: "麦盖提县" }, { value: "653128", text: "岳普湖县" }, { value: "653129", text: "伽师县" }, { value: "653130", text: "巴楚县" }, { value: "653131", text: "塔什库尔干塔吉克自治县" }, { value: "653132", text: "其它区" }] }, { value: "653200", text: "和田地区", children: [{ value: "653201", text: "和田市" }, { value: "653221", text: "和田县" }, { value: "653222", text: "墨玉县" }, { value: "653223", text: "皮山县" }, { value: "653224", text: "洛浦县" }, { value: "653225", text: "策勒县" }, { value: "653226", text: "于田县" }, { value: "653227", text: "民丰县" }, { value: "653228", text: "其它区" }] }, { value: "654000", text: "伊犁哈萨克自治州", children: [{ value: "654002", text: "伊宁市" }, { value: "654003", text: "奎屯市" }, { value: "654021", text: "伊宁县" }, { value: "654022", text: "察布查尔锡伯自治县" }, { value: "654023", text: "霍城县" }, { value: "654024", text: "巩留县" }, { value: "654025", text: "新源县" }, { value: "654026", text: "昭苏县" }, { value: "654027", text: "特克斯县" }, { value: "654028", text: "尼勒克县" }, { value: "654029", text: "其它区" }] }, { value: "654200", text: "塔城地区", children: [{ value: "654201", text: "塔城市" }, { value: "654202", text: "乌苏市" }, { value: "654221", text: "额敏县" }, { value: "654223", text: "沙湾县" }, { value: "654224", text: "托里县" }, { value: "654225", text: "裕民县" }, { value: "654226", text: "和布克赛尔蒙古自治县" }, { value: "654227", text: "其它区" }] }, { value: "654300", text: "阿勒泰地区", children: [{ value: "654301", text: "阿勒泰市" }, { value: "654321", text: "布尔津县" }, { value: "654322", text: "富蕴县" }, { value: "654323", text: "福海县" }, { value: "654324", text: "哈巴河县" }, { value: "654325", text: "青河县" }, { value: "654326", text: "吉木乃县" }, { value: "654327", text: "其它区" }] }, { value: "659001", text: "石河子市" }, { value: "659002", text: "阿拉尔市" }, { value: "659003", text: "图木舒克市" }, { value: "659004", text: "五家渠市" }] }, { value: '710000', text: '台湾省', children: [{ value: "710100", text: "台北市", children: [{ value: "710101", text: "中正区" }, { value: "710102", text: "大同区" }, { value: "710103", text: "中山区" }, { value: "710104", text: "松山区" }, { value: "710105", text: "大安区" }, { value: "710106", text: "万华区" }, { value: "710107", text: "信义区" }, { value: "710108", text: "士林区" }, { value: "710109", text: "北投区" }, { value: "710110", text: "内湖区" }, { value: "710111", text: "南港区" }, { value: "710112", text: "文山区" }, { value: "710113", text: "其它区" }] }, { value: "710200", text: "高雄市", children: [{ value: "710201", text: "新兴区" }, { value: "710202", text: "前金区" }, { value: "710203", text: "芩雅区" }, { value: "710204", text: "盐埕区" }, { value: "710205", text: "鼓山区" }, { value: "710206", text: "旗津区" }, { value: "710207", text: "前镇区" }, { value: "710208", text: "三民区" }, { value: "710209", text: "左营区" }, { value: "710210", text: "楠梓区" }, { value: "710211", text: "小港区" }, { value: "710212", text: "其它区" }] }, { value: "710300", text: "台南市", children: [{ value: "710301", text: "中西区" }, { value: "710302", text: "东区" }, { value: "710303", text: "南区" }, { value: "710304", text: "北区" }, { value: "710305", text: "安平区" }, { value: "710306", text: "安南区" }, { value: "710307", text: "其它区" }] }, { value: "710400", text: "台中市", children: [{ value: "710401", text: "中区" }, { value: "710402", text: "东区" }, { value: "710403", text: "南区" }, { value: "710404", text: "西区" }, { value: "710405", text: "北区" }, { value: "710406", text: "北屯区" }, { value: "710407", text: "西屯区" }, { value: "710408", text: "南屯区" }, { value: "710409", text: "其它区" }] }, { value: "710500", text: "金门县" }, { value: "710600", text: "南投县" }, { value: "710700", text: "基隆市", children: [{ value: "710701", text: "仁爱区" }, { value: "710702", text: "信义区" }, { value: "710703", text: "中正区" }, { value: "710704", text: "中山区" }, { value: "710705", text: "安乐区" }, { value: "710706", text: "暖暖区" }, { value: "710707", text: "七堵区" }, { value: "710708", text: "其它区" }] }, { value: "710800", text: "新竹市", children: [{ value: "710801", text: "东区" }, { value: "710802", text: "北区" }, { value: "710803", text: "香山区" }, { value: "710804", text: "其它区" }] }, { value: "710900", text: "嘉义市", children: [{ value: "710901", text: "东区" }, { value: "710902", text: "西区" }, { value: "710903", text: "其它区" }] }, { value: "711100", text: "新北市" }, { value: "711200", text: "宜兰县" }, { value: "711300", text: "新竹县" }, { value: "711400", text: "桃园县" }, { value: "711500", text: "苗栗县" }, { value: "711700", text: "彰化县" }, { value: "711900", text: "嘉义县" }, { value: "712100", text: "云林县" }, { value: "712400", text: "屏东县" }, { value: "712500", text: "台东县" }, { value: "712600", text: "花莲县" }, { value: "712700", text: "澎湖县" }] }, { value: '810000', text: '香港', children: [{ value: "810100", text: "香港岛", children: [{ value: "810101", text: "中西区" }, { value: "810102", text: "湾仔" }, { value: "810103", text: "东区" }, { value: "810104", text: "南区" }] }, { value: "810200", text: "九龙", children: [{ value: "810201", text: "九龙城区" }, { value: "810202", text: "油尖旺区" }, { value: "810203", text: "深水埗区" }, { value: "810204", text: "黄大仙区" }, { value: "810205", text: "观塘区" }] }, { value: "810300", text: "新界", children: [{ value: "810301", text: "北区" }, { value: "810302", text: "大埔区" }, { value: "810303", text: "沙田区" }, { value: "810304", text: "西贡区" }, { value: "810305", text: "元朗区" }, { value: "810306", text: "屯门区" }, { value: "810307", text: "荃湾区" }, { value: "810308", text: "葵青区" }, { value: "810309", text: "离岛区" }] }] }, { value: '820000', text: '澳门', children: [{ value: "820100", text: "澳门半岛" }, { value: "820200", text: "离岛" }] }, { value: '990000', text: '海外', children: [{ value: "990100", text: "海外" }] }] ================================================ FILE: examples/hello-mui/js/city.data.js ================================================ var cityData = [{ value: '110000', text: '北京市', children: [{ value: "110101", text: "东城区" }, { value: "110102", text: "西城区" }, { value: "110103", text: "崇文区" }, { value: "110104", text: "宣武区" }, { value: "110105", text: "朝阳区" }, { value: "110106", text: "丰台区" }, { value: "110107", text: "石景山区" }, { value: "110108", text: "海淀区" }, { value: "110109", text: "门头沟区" }, { value: "110111", text: "房山区" }, { value: "110112", text: "通州区" }, { value: "110113", text: "顺义区" }, { value: "110114", text: "昌平区" }, { value: "110115", text: "大兴区" }, { value: "110116", text: "怀柔区" }, { value: "110117", text: "平谷区" }, { value: "110228", text: "密云县" }, { value: "110229", text: "延庆县" }, { value: "110230", text: "其它区" }] }, { value: '120000', text: '天津市', children: [{ value: "120101", text: "和平区" }, { value: "120102", text: "河东区" }, { value: "120103", text: "河西区" }, { value: "120104", text: "南开区" }, { value: "120105", text: "河北区" }, { value: "120106", text: "红桥区" }, { value: "120107", text: "塘沽区" }, { value: "120108", text: "汉沽区" }, { value: "120109", text: "大港区" }, { value: "120110", text: "东丽区" }, { value: "120111", text: "西青区" }, { value: "120112", text: "津南区" }, { value: "120113", text: "北辰区" }, { value: "120114", text: "武清区" }, { value: "120115", text: "宝坻区" }, { value: "120116", text: "滨海新区" }, { value: "120221", text: "宁河县" }, { value: "120223", text: "静海县" }, { value: "120225", text: "蓟县" }, { value: "120226", text: "其它区" }] }, { value: '130000', text: '河北省', children: [{ value: "130100", text: "石家庄市" }, { value: "130200", text: "唐山市" }, { value: "130300", text: "秦皇岛市" }, { value: "130400", text: "邯郸市" }, { value: "130500", text: "邢台市" }, { value: "130600", text: "保定市" }, { value: "130700", text: "张家口市" }, { value: "130800", text: "承德市" }, { value: "130900", text: "沧州市" }, { value: "131000", text: "廊坊市" }, { value: "131100", text: "衡水市" }] }, { value: '140000', text: '山西省', children: [{ value: "140100", text: "太原市" }, { value: "140200", text: "大同市" }, { value: "140300", text: "阳泉市" }, { value: "140400", text: "长治市" }, { value: "140500", text: "晋城市" }, { value: "140600", text: "朔州市" }, { value: "140700", text: "晋中市" }, { value: "140800", text: "运城市" }, { value: "140900", text: "忻州市" }, { value: "141000", text: "临汾市" }, { value: "141100", text: "吕梁市" }] }, { value: '150000', text: '内蒙古', children: [{ value: "150100", text: "呼和浩特市" }, { value: "150200", text: "包头市" }, { value: "150300", text: "乌海市" }, { value: "150400", text: "赤峰市" }, { value: "150500", text: "通辽市" }, { value: "150600", text: "鄂尔多斯市" }, { value: "150700", text: "呼伦贝尔市" }, { value: "150800", text: "巴彦淖尔市" }, { value: "150900", text: "乌兰察布市" }, { value: "152200", text: "兴安盟" }, { value: "152500", text: "锡林郭勒盟" }, { value: "152900", text: "阿拉善盟" }] }, { value: '210000', text: '辽宁省', children: [{ value: "210100", text: "沈阳市" }, { value: "210200", text: "大连市" }, { value: "210300", text: "鞍山市" }, { value: "210400", text: "抚顺市" }, { value: "210500", text: "本溪市" }, { value: "210600", text: "丹东市" }, { value: "210700", text: "锦州市" }, { value: "210800", text: "营口市" }, { value: "210900", text: "阜新市" }, { value: "211000", text: "辽阳市" }, { value: "211100", text: "盘锦市" }, { value: "211200", text: "铁岭市" }, { value: "211300", text: "朝阳市" }, { value: "211400", text: "葫芦岛市" }] }, { value: '220000', text: '吉林省', children: [{ value: "220100", text: "长春市" }, { value: "220200", text: "吉林市" }, { value: "220300", text: "四平市" }, { value: "220400", text: "辽源市" }, { value: "220500", text: "通化市" }, { value: "220600", text: "白山市" }, { value: "220700", text: "松原市" }, { value: "220800", text: "白城市" }, { value: "222400", text: "延边朝鲜族自治州" }] }, { value: '230000', text: '黑龙江省', children: [{ value: "230100", text: "哈尔滨市" }, { value: "230200", text: "齐齐哈尔市" }, { value: "230300", text: "鸡西市" }, { value: "230400", text: "鹤岗市" }, { value: "230500", text: "双鸭山市" }, { value: "230600", text: "大庆市" }, { value: "230700", text: "伊春市" }, { value: "230800", text: "佳木斯市" }, { value: "230900", text: "七台河市" }, { value: "231000", text: "牡丹江市" }, { value: "231100", text: "黑河市" }, { value: "231200", text: "绥化市" }, { value: "232700", text: "大兴安岭地区" }] }, { value: '310000', text: '上海市', children: [{ value: "310101", text: "黄浦区" }, { value: "310103", text: "卢湾区" }, { value: "310104", text: "徐汇区" }, { value: "310105", text: "长宁区" }, { value: "310106", text: "静安区" }, { value: "310107", text: "普陀区" }, { value: "310108", text: "闸北区" }, { value: "310109", text: "虹口区" }, { value: "310110", text: "杨浦区" }, { value: "310112", text: "闵行区" }, { value: "310113", text: "宝山区" }, { value: "310114", text: "嘉定区" }, { value: "310115", text: "浦东新区" }, { value: "310116", text: "金山区" }, { value: "310117", text: "松江区" }, { value: "310118", text: "青浦区" }, { value: "310119", text: "南汇区" }, { value: "310120", text: "奉贤区" }, { value: "310152", text: "川沙区" }, { value: "310230", text: "崇明县" }, { value: "310231", text: "其它区" }] }, { value: '320000', text: '江苏省', children: [{ value: "320100", text: "南京市" }, { value: "320200", text: "无锡市" }, { value: "320300", text: "徐州市" }, { value: "320400", text: "常州市" }, { value: "320500", text: "苏州市" }, { value: "320600", text: "南通市" }, { value: "320700", text: "连云港市" }, { value: "320800", text: "淮安市" }, { value: "320900", text: "盐城市" }, { value: "321000", text: "扬州市" }, { value: "321100", text: "镇江市" }, { value: "321200", text: "泰州市" }, { value: "321300", text: "宿迁市" }] }, { value: '330000', text: '浙江省', children: [{ value: "330100", text: "杭州市" }, { value: "330200", text: "宁波市" }, { value: "330300", text: "温州市" }, { value: "330400", text: "嘉兴市" }, { value: "330500", text: "湖州市" }, { value: "330600", text: "绍兴市" }, { value: "330700", text: "金华市" }, { value: "330800", text: "衢州市" }, { value: "330900", text: "舟山市" }, { value: "331000", text: "台州市" }, { value: "331100", text: "丽水市" }] }, { value: '340000', text: '安徽省', children: [{ value: "340100", text: "合肥市" }, { value: "340200", text: "芜湖市" }, { value: "340300", text: "蚌埠市" }, { value: "340400", text: "淮南市" }, { value: "340500", text: "马鞍山市" }, { value: "340600", text: "淮北市" }, { value: "340700", text: "铜陵市" }, { value: "340800", text: "安庆市" }, { value: "341000", text: "黄山市" }, { value: "341100", text: "滁州市" }, { value: "341200", text: "阜阳市" }, { value: "341300", text: "宿州市" }, { value: "341500", text: "六安市" }, { value: "341600", text: "亳州市" }, { value: "341700", text: "池州市" }, { value: "341800", text: "宣城市" }] }, { value: '350000', text: '福建省', children: [{ value: "350100", text: "福州市" }, { value: "350200", text: "厦门市" }, { value: "350300", text: "莆田市" }, { value: "350400", text: "三明市" }, { value: "350500", text: "泉州市" }, { value: "350600", text: "漳州市" }, { value: "350700", text: "南平市" }, { value: "350800", text: "龙岩市" }, { value: "350900", text: "宁德市" }] }, { value: '360000', text: '江西省', children: [{ value: "360100", text: "南昌市" }, { value: "360200", text: "景德镇市" }, { value: "360300", text: "萍乡市" }, { value: "360400", text: "九江市" }, { value: "360500", text: "新余市" }, { value: "360600", text: "鹰潭市" }, { value: "360700", text: "赣州市" }, { value: "360800", text: "吉安市" }, { value: "360900", text: "宜春市" }, { value: "361000", text: "抚州市" }, { value: "361100", text: "上饶市" }] }, { value: '370000', text: '山东省', children: [{ value: "370100", text: "济南市" }, { value: "370200", text: "青岛市" }, { value: "370300", text: "淄博市" }, { value: "370400", text: "枣庄市" }, { value: "370500", text: "东营市" }, { value: "370600", text: "烟台市" }, { value: "370700", text: "潍坊市" }, { value: "370800", text: "济宁市" }, { value: "370900", text: "泰安市" }, { value: "371000", text: "威海市" }, { value: "371100", text: "日照市" }, { value: "371200", text: "莱芜市" }, { value: "371300", text: "临沂市" }, { value: "371400", text: "德州市" }, { value: "371500", text: "聊城市" }, { value: "371600", text: "滨州市" }, { value: "371700", text: "菏泽市" }] }, { value: '410000', text: '河南省', children: [{ value: "410100", text: "郑州市" }, { value: "410200", text: "开封市" }, { value: "410300", text: "洛阳市" }, { value: "410400", text: "平顶山市" }, { value: "410500", text: "安阳市" }, { value: "410600", text: "鹤壁市" }, { value: "410700", text: "新乡市" }, { value: "410800", text: "焦作市" }, { value: "410881", text: "济源市" }, { value: "410900", text: "濮阳市" }, { value: "411000", text: "许昌市" }, { value: "411100", text: "漯河市" }, { value: "411200", text: "三门峡市" }, { value: "411300", text: "南阳市" }, { value: "411400", text: "商丘市" }, { value: "411500", text: "信阳市" }, { value: "411600", text: "周口市" }, { value: "411700", text: "驻马店市" }] }, { value: '420000', text: '湖北省', children: [{ value: "420100", text: "武汉市" }, { value: "420200", text: "黄石市" }, { value: "420300", text: "十堰市" }, { value: "420500", text: "宜昌市" }, { value: "420600", text: "襄阳市" }, { value: "420700", text: "鄂州市" }, { value: "420800", text: "荆门市" }, { value: "420900", text: "孝感市" }, { value: "421000", text: "荆州市" }, { value: "421100", text: "黄冈市" }, { value: "421200", text: "咸宁市" }, { value: "421300", text: "随州市" }, { value: "422800", text: "恩施土家族苗族自治州" }, { value: "429004", text: "仙桃市" }, { value: "429005", text: "潜江市" }, { value: "429006", text: "天门市" }, { value: "429021", text: "神农架林区" }] }, { value: '430000', text: '湖南省', children: [{ value: "430100", text: "长沙市" }, { value: "430200", text: "株洲市" }, { value: "430300", text: "湘潭市" }, { value: "430400", text: "衡阳市" }, { value: "430500", text: "邵阳市" }, { value: "430600", text: "岳阳市" }, { value: "430700", text: "常德市" }, { value: "430800", text: "张家界市" }, { value: "430900", text: "益阳市" }, { value: "431000", text: "郴州市" }, { value: "431100", text: "永州市" }, { value: "431200", text: "怀化市" }, { value: "431300", text: "娄底市" }, { value: "433100", text: "湘西土家族苗族自治州" }] }, { value: '440000', text: '广东省', children: [{ value: "440100", text: "广州市" }, { value: "440200", text: "韶关市" }, { value: "440300", text: "深圳市" }, { value: "440400", text: "珠海市" }, { value: "440500", text: "汕头市" }, { value: "440600", text: "佛山市" }, { value: "440700", text: "江门市" }, { value: "440800", text: "湛江市" }, { value: "440900", text: "茂名市" }, { value: "441200", text: "肇庆市" }, { value: "441300", text: "惠州市" }, { value: "441400", text: "梅州市" }, { value: "441500", text: "汕尾市" }, { value: "441600", text: "河源市" }, { value: "441700", text: "阳江市" }, { value: "441800", text: "清远市" }, { value: "441900", text: "东莞市" }, { value: "442000", text: "中山市" }, { value: "445100", text: "潮州市" }, { value: "445200", text: "揭阳市" }, { value: "445300", text: "云浮市" }] }, { value: '450000', text: '广西壮族', children: [{ value: "450100", text: "南宁市" }, { value: "450200", text: "柳州市" }, { value: "450300", text: "桂林市" }, { value: "450400", text: "梧州市" }, { value: "450500", text: "北海市" }, { value: "450600", text: "防城港市" }, { value: "450700", text: "钦州市" }, { value: "450800", text: "贵港市" }, { value: "450900", text: "玉林市" }, { value: "451000", text: "百色市" }, { value: "451100", text: "贺州市" }, { value: "451200", text: "河池市" }, { value: "451300", text: "来宾市" }, { value: "451400", text: "崇左市" }] }, { value: '460000', text: '海南省', children: [{ value: "460100", text: "海口市" }, { value: "460200", text: "三亚市" }, { value: "469001", text: "五指山市" }, { value: "469002", text: "琼海市" }, { value: "469003", text: "儋州市" }, { value: "469005", text: "文昌市" }, { value: "469006", text: "万宁市" }, { value: "469007", text: "东方市" }, { value: "469025", text: "定安县" }, { value: "469026", text: "屯昌县" }, { value: "469027", text: "澄迈县" }, { value: "469028", text: "临高县" }, { value: "469030", text: "白沙黎族自治县" }, { value: "469031", text: "昌江黎族自治县" }, { value: "469033", text: "乐东黎族自治县" }, { value: "469034", text: "陵水黎族自治县" }, { value: "469035", text: "保亭黎族苗族自治县" }, { value: "469036", text: "琼中黎族苗族自治县" }, { value: "469037", text: "西沙群岛" }, { value: "469038", text: "南沙群岛" }, { value: "469039", text: "中沙群岛的岛礁及其海域" }] }, { value: '500000', text: '重庆', children: [{ value: "500101", text: "万州区" }, { value: "500102", text: "涪陵区" }, { value: "500103", text: "渝中区" }, { value: "500104", text: "大渡口区" }, { value: "500105", text: "江北区" }, { value: "500106", text: "沙坪坝区" }, { value: "500107", text: "九龙坡区" }, { value: "500108", text: "南岸区" }, { value: "500109", text: "北碚区" }, { value: "500110", text: "万盛区" }, { value: "500111", text: "双桥区" }, { value: "500112", text: "渝北区" }, { value: "500113", text: "巴南区" }, { value: "500114", text: "黔江区" }, { value: "500115", text: "长寿区" }, { value: "500222", text: "綦江县" }, { value: "500223", text: "潼南县" }, { value: "500224", text: "铜梁县" }, { value: "500225", text: "大足县" }, { value: "500226", text: "荣昌县" }, { value: "500227", text: "璧山县" }, { value: "500228", text: "梁平县" }, { value: "500229", text: "城口县" }, { value: "500230", text: "丰都县" }, { value: "500231", text: "垫江县" }, { value: "500232", text: "武隆县" }, { value: "500233", text: "忠县" }, { value: "500234", text: "开县" }, { value: "500235", text: "云阳县" }, { value: "500236", text: "奉节县" }, { value: "500237", text: "巫山县" }, { value: "500238", text: "巫溪县" }, { value: "500240", text: "石柱土家族自治县" }, { value: "500241", text: "秀山土家族苗族自治县" }, { value: "500242", text: "酉阳土家族苗族自治县" }, { value: "500243", text: "彭水苗族土家族自治县" }, { value: "500381", text: "江津区" }, { value: "500382", text: "合川区" }, { value: "500383", text: "永川区" }, { value: "500384", text: "南川区" }, { value: "500385", text: "其它区" }] }, { value: '510000', text: '四川省', children: [{ value: "510100", text: "成都市" }, { value: "510300", text: "自贡市" }, { value: "510400", text: "攀枝花市" }, { value: "510500", text: "泸州市" }, { value: "510600", text: "德阳市" }, { value: "510700", text: "绵阳市" }, { value: "510800", text: "广元市" }, { value: "510900", text: "遂宁市" }, { value: "511000", text: "内江市" }, { value: "511100", text: "乐山市" }, { value: "511300", text: "南充市" }, { value: "511400", text: "眉山市" }, { value: "511500", text: "宜宾市" }, { value: "511600", text: "广安市" }, { value: "511700", text: "达州市" }, { value: "511800", text: "雅安市" }, { value: "511900", text: "巴中市" }, { value: "512000", text: "资阳市" }, { value: "513200", text: "阿坝藏族羌族自治州" }, { value: "513300", text: "甘孜藏族自治州" }, { value: "513400", text: "凉山彝族自治州" }] }, { value: '520000', text: '贵州省', children: [{ value: "520100", text: "贵阳市" }, { value: "520200", text: "六盘水市" }, { value: "520300", text: "遵义市" }, { value: "520400", text: "安顺市" }, { value: "522200", text: "铜仁地区" }, { value: "522300", text: "黔西南布依族苗族自治州" }, { value: "522400", text: "毕节地区" }, { value: "522600", text: "黔东南苗族侗族自治州" }, { value: "522700", text: "黔南布依族苗族自治州" }] }, { value: '530000', text: '云南省', children: [{ value: "530100", text: "昆明市" }, { value: "530300", text: "曲靖市" }, { value: "530400", text: "玉溪市" }, { value: "530500", text: "保山市" }, { value: "530600", text: "昭通市" }, { value: "530700", text: "丽江市" }, { value: "530800", text: "普洱市" }, { value: "530900", text: "临沧市" }, { value: "532300", text: "楚雄彝族自治州" }, { value: "532500", text: "红河哈尼族彝族自治州" }, { value: "532600", text: "文山壮族苗族自治州" }, { value: "532800", text: "西双版纳傣族自治州" }, { value: "532900", text: "大理白族自治州" }, { value: "533100", text: "德宏傣族景颇族自治州" }, { value: "533300", text: "怒江傈僳族自治州" }, { value: "533400", text: "迪庆藏族自治州" }] }, { value: '540000', text: '西藏', children: [{ value: "540100", text: "拉萨市" }, { value: "542100", text: "昌都地区" }, { value: "542200", text: "山南地区" }, { value: "542300", text: "日喀则地区" }, { value: "542400", text: "那曲地区" }, { value: "542500", text: "阿里地区" }, { value: "542600", text: "林芝地区" }] }, { value: '610000', text: '陕西省', children: [{ value: "610100", text: "西安市" }, { value: "610200", text: "铜川市" }, { value: "610300", text: "宝鸡市" }, { value: "610400", text: "咸阳市" }, { value: "610500", text: "渭南市" }, { value: "610600", text: "延安市" }, { value: "610700", text: "汉中市" }, { value: "610800", text: "榆林市" }, { value: "610900", text: "安康市" }, { value: "611000", text: "商洛市" }] }, { value: '620000', text: '甘肃省', children: [{ value: "620100", text: "兰州市" }, { value: "620200", text: "嘉峪关市" }, { value: "620300", text: "金昌市" }, { value: "620400", text: "白银市" }, { value: "620500", text: "天水市" }, { value: "620600", text: "武威市" }, { value: "620700", text: "张掖市" }, { value: "620800", text: "平凉市" }, { value: "620900", text: "酒泉市" }, { value: "621000", text: "庆阳市" }, { value: "621100", text: "定西市" }, { value: "621200", text: "陇南市" }, { value: "622900", text: "临夏回族自治州" }, { value: "623000", text: "甘南藏族自治州" }] }, { value: '630000', text: '青海省', children: [{ value: "630100", text: "西宁市" }, { value: "632100", text: "海东地区" }, { value: "632200", text: "海北藏族自治州" }, { value: "632300", text: "黄南藏族自治州" }, { value: "632500", text: "海南藏族自治州" }, { value: "632600", text: "果洛藏族自治州" }, { value: "632700", text: "玉树藏族自治州" }, { value: "632800", text: "海西蒙古族藏族自治州" }] }, { value: '640000', text: '宁夏', children: [{ value: "640100", text: "银川市" }, { value: "640200", text: "石嘴山市" }, { value: "640300", text: "吴忠市" }, { value: "640400", text: "固原市" }, { value: "640500", text: "中卫市" }] }, { value: '650000', text: '新疆', children: [{ value: "650100", text: "乌鲁木齐市" }, { value: "650200", text: "克拉玛依市" }, { value: "652100", text: "吐鲁番地区" }, { value: "652200", text: "哈密地区" }, { value: "652300", text: "昌吉回族自治州" }, { value: "652700", text: "博尔塔拉蒙古自治州" }, { value: "652800", text: "巴音郭楞蒙古自治州" }, { value: "652900", text: "阿克苏地区" }, { value: "653000", text: "克孜勒苏柯尔克孜自治州" }, { value: "653100", text: "喀什地区" }, { value: "653200", text: "和田地区" }, { value: "654000", text: "伊犁哈萨克自治州" }, { value: "654200", text: "塔城地区" }, { value: "654300", text: "阿勒泰地区" }, { value: "659001", text: "石河子市" }, { value: "659002", text: "阿拉尔市" }, { value: "659003", text: "图木舒克市" }, { value: "659004", text: "五家渠市" }] }, { value: '710000', text: '台湾省', children: [{ value: "710100", text: "台北市" }, { value: "710200", text: "高雄市" }, { value: "710300", text: "台南市" }, { value: "710400", text: "台中市" }, { value: "710500", text: "金门县" }, { value: "710600", text: "南投县" }, { value: "710700", text: "基隆市" }, { value: "710800", text: "新竹市" }, { value: "710900", text: "嘉义市" }, { value: "711100", text: "新北市" }, { value: "711200", text: "宜兰县" }, { value: "711300", text: "新竹县" }, { value: "711400", text: "桃园县" }, { value: "711500", text: "苗栗县" }, { value: "711700", text: "彰化县" }, { value: "711900", text: "嘉义县" }, { value: "712100", text: "云林县" }, { value: "712400", text: "屏东县" }, { value: "712500", text: "台东县" }, { value: "712600", text: "花莲县" }, { value: "712700", text: "澎湖县" }] }, { value: '810000', text: '香港', children: [{ value: "810100", text: "香港岛" }, { value: "810200", text: "九龙" }, { value: "810300", text: "新界" }] }, { value: '820000', text: '澳门', children: [{ value: "820100", text: "澳门半岛" }, { value: "820200", text: "离岛" }] }, { value: '990000', text: '海外', children: [{ value: "990100", text: "海外" }] }] ================================================ FILE: examples/hello-mui/js/feedback.js ================================================ /*! * ====================================================== * FeedBack Template For MUI (http://dev.dcloud.net.cn/mui) * ======================================================= * @version:1.0.0 * @author:cuihongbao@dcloud.io */ (function() { var index = 1; var size = null; var imageIndexIdNum = 0; var starIndex = 0; var feedback = { question: document.getElementById('question'), contact: document.getElementById('contact'), imageList: document.getElementById('image-list'), submitBtn: document.getElementById('submit') }; var url = 'https://service.dcloud.net.cn/feedback'; feedback.files = []; feedback.uploader = null; feedback.deviceInfo = null; mui.plusReady(function() { //设备信息,无需修改 feedback.deviceInfo = { appid: plus.runtime.appid, imei: plus.device.imei, //设备标识 images: feedback.files, //图片文件 p: mui.os.android ? 'a' : 'i', //平台类型,i表示iOS平台,a表示Android平台。 md: plus.device.model, //设备型号 app_version: plus.runtime.version, plus_version: plus.runtime.innerVersion, //基座版本号 os: mui.os.version, net: ''+plus.networkinfo.getCurrentType() } }); /** *提交成功之后,恢复表单项 */ feedback.clearForm = function() { feedback.question.value = ''; feedback.contact.value = ''; feedback.imageList.innerHTML = ''; feedback.newPlaceholder(); feedback.files = []; index = 0; size = 0; imageIndexIdNum = 0; starIndex = 0; //清除所有星标 mui('.icons i').each(function (index,element) { if (element.classList.contains('mui-icon-star-filled')) { element.classList.add('mui-icon-star') element.classList.remove('mui-icon-star-filled') } }) }; feedback.getFileInputArray = function() { return [].slice.call(feedback.imageList.querySelectorAll('.file')); }; feedback.addFile = function(path) { feedback.files.push({name:"images"+index,path:path,id:"img-"+index}); index++; }; /** * 初始化图片域占位 */ feedback.newPlaceholder = function() { var fileInputArray = feedback.getFileInputArray(); if (fileInputArray && fileInputArray.length > 0 && fileInputArray[fileInputArray.length - 1].parentNode.classList.contains('space')) { return; }; imageIndexIdNum++; var placeholder = document.createElement('div'); placeholder.setAttribute('class', 'image-item space'); var up = document.createElement("div"); up.setAttribute('class','image-up') //删除图片 var closeButton = document.createElement('div'); closeButton.setAttribute('class', 'image-close'); closeButton.innerHTML = 'X'; closeButton.id = "img-"+index; //小X的点击事件 closeButton.addEventListener('tap', function(event) { setTimeout(function() { for(var temp=0;temp (10*1024*1024)) { return mui.toast('文件超大,请重新选择~'); } if (!self.parentNode.classList.contains('space')) { //已有图片 feedback.files.splice(index-1,1,{name:"images"+index,path:e}); } else { //加号 placeholder.classList.remove('space'); feedback.addFile(zip.target); feedback.newPlaceholder(); } up.classList.remove('image-up'); placeholder.style.backgroundImage = 'url(' + zip.target + ')'; }, function(zipe) { mui.toast('压缩失败!') }); }, function(e) { mui.toast(e.message); },{}); }, false); placeholder.appendChild(closeButton); placeholder.appendChild(up); placeholder.appendChild(fileInput); feedback.imageList.appendChild(placeholder); }; feedback.newPlaceholder(); feedback.submitBtn.addEventListener('tap', function(event) { if (feedback.question.value == '' || (feedback.contact.value != '' && feedback.contact.value.search(/^(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)|([1-9]\d{4,9})$/) != 0)) { return mui.toast('信息填写不符合规范'); } if (feedback.question.value.length > 200 || feedback.contact.value.length > 200) { return mui.toast('信息超长,请重新填写~') } //判断网络连接 if(plus.networkinfo.getCurrentType()==plus.networkinfo.CONNECTION_NONE){ return mui.toast("连接网络失败,请稍后再试"); } feedback.send(mui.extend({}, feedback.deviceInfo, { content: feedback.question.value, contact: feedback.contact.value, images: feedback.files, score:''+starIndex })) }, false) feedback.send = function(content) { feedback.uploader = plus.uploader.createUpload(url, { method: 'POST' }, function(upload, status) { // plus.nativeUI.closeWaiting() console.log("upload cb:"+upload.responseText); if(status==200){ var data = JSON.parse(upload.responseText); //上传成功,重置表单 if (data.ret === 0 && data.desc === 'Success') { // mui.toast('反馈成功~') console.log("upload success"); // feedback.clearForm(); } }else{ console.log("upload fail"); } }); //添加上传数据 mui.each(content, function(index, element) { if (index !== 'images') { console.log("addData:"+index+","+element); // console.log(index); feedback.uploader.addData(index, element) } }); //添加上传文件 mui.each(feedback.files, function(index, element) { var f = feedback.files[index]; console.log("addFile:"+JSON.stringify(f)); feedback.uploader.addFile(f.path, { key: f.name }); }); //开始上传任务 feedback.uploader.start(); mui.alert("感谢反馈,点击确定关闭","问题反馈","确定",function () { feedback.clearForm(); mui.back(); }); // plus.nativeUI.showWaiting(); }; //应用评分 mui('.icons').on('tap','i',function(){ var index = parseInt(this.getAttribute("data-index")); var parent = this.parentNode; var children = parent.children; if(this.classList.contains("mui-icon-star")){ for(var i=0;i
    "); self.viewer = self.viewer[0] || self.viewer; //self.viewer.style.height = screen.height; self.closeButton = self.viewer.querySelector('.mui-imageviewer-close'); self.state = self.viewer.querySelector('.mui-imageviewer-state'); self.leftButton = self.viewer.querySelector('.mui-imageviewer-left'); self.rightButton = self.viewer.querySelector('.mui-imageviewer-right'); self.mask = self.viewer.querySelector('.mui-imageviewer-mask'); document.body.appendChild(self.viewer); }, //查找所有符合的图片 findAllImage: function() { var self = this; self.images = [].slice.call($(self.selector)); }, //检查图片是否为启动预览的图片 checkImage: function(target) { var self = this; if (target.tagName !== 'IMG') return false; return self.images.some(function(image) { return image == target; }); }, //绑定事件 bindEvent: function() { var self = this; //绑定图片 tap 事件 document.addEventListener(enterEventName, function(event) { if (!self.viewer) return; var target = event.target; if (!self.checkImage(target)) return; self.viewer.style.display = 'block'; setTimeout(function() { self.viewer.style.opacity = 1; }, 0); self.index = self.images.indexOf(target); self.currentItem = self.createImage(self.index); }, false); //关系按钮事件 self.closeButton.addEventListener(tapEventName, function(event) { self.viewer.style.opacity = 0; setTimeout(function() { self.viewer.style.display = 'none'; self.disposeImage(true); }, 600); event.preventDefault(); event.cancelBubble = true; }, false); //处理左右按钮 self.leftButton.addEventListener(tapEventName, function() { self.prev(); }, false); self.rightButton.addEventListener(tapEventName, function() { self.next(); }, false); //处理划动 self.mask.addEventListener($.EVENT_MOVE, function(event) { event.preventDefault(); event.cancelBubble = true; }, false); self.viewer.addEventListener('swipeleft', function(event) { if (self.scaleValue == 1) self.next(); event.preventDefault(); event.cancelBubble = true; }, false); self.viewer.addEventListener('swiperight', function(event) { if (self.scaleValue == 1) self.prev(); event.preventDefault(); event.cancelBubble = true; }, false); //处理缩放开始 self.viewer.addEventListener($.EVENT_START, function(event) { var touches = event.touches; if (touches.length == 2) { var p1 = touches[0]; var p2 = touches[1]; var x = p1.pageX - p2.pageX; //x1-x2 var y = p1.pageY - p2.pageY; //y1-y2 self.scaleStart = Math.sqrt(x * x + y * y); self.isMultiTouch = true; } else if (touches.length = 1) { self.dragStart = touches[0]; } }, false); self.viewer.addEventListener($.EVENT_MOVE, function(event) { var img = self.currentItem.querySelector('img'); var touches = event.changedTouches; if (touches.length == 2) { event.preventDefault(); event.cancelBubble = true; var p1 = touches[0]; var p2 = touches[1]; var x = p1.pageX - p2.pageX; var y = p1.pageY - p2.pageY; self.scaleEnd = Math.sqrt(x * x + y * y); self._scaleValue = (self.scaleValue * (self.scaleEnd / self.scaleStart)); //self.state.innerText = self._scaleValue; img.style.webkitTransform = "scale(" + self._scaleValue + "," + self._scaleValue + ") "; // + " translate(" + self.dragX || 0 + "px," + self.dragY || 0 + "px)"; } else if (!self.isMultiTouch && touches.length == 1 && self.scaleValue != 1) { event.preventDefault(); event.cancelBubble = true; self.dragEnd = touches[0]; self._dragX = self.dragX + (self.dragEnd.pageX - self.dragStart.pageX); self._dragY = self.dragY + (self.dragEnd.pageY - self.dragStart.pageY); img.style.marginLeft = self._dragX + 'px'; img.style.marginTop = self._dragY + 'px'; //img.style.transform = "translate(" + self._dragX + "px," + self._dragY + "px) " + " scale(" + self.scaleValue || 1 + "," + self.scaleValue || 1 + ")"; } }, false); self.viewer.addEventListener($.EVENT_END, function() { self.scaleValue = self._scaleValue || self.scaleValue; self._scaleValue = null; self.dragX = self._dragX; self.dragY = self._dragY; self._dragX = null; self._dragY = null; var touches = event.touches; self.isMultiTouch = (touches.length != 0); }); // doubletap 好像不能用 self.viewer.addEventListener('doubletap', function() { var img = self.currentItem.querySelector('img'); if (self.scaleValue === 1) { self.scaleValue = 2; } else { self.scaleValue = 1; } self.dragX = 0; self.dragY = 0; img.style.marginLeft = self.dragX + 'px'; img.style.marginTop = self.dragY + 'px'; img.style.webkitTransform = "scale(" + self.scaleValue + "," + self.scaleValue + ") "; //+ " translate(" + self.dragX || 0 + "px," + self.dragY || 0 + "px)"; self.viewer.__tap_num = 0; }, false); //处理缩放结束 }, //下一张图片 next: function() { var self = this; self.mask.style.display = 'block'; self.index++; var newItem = self.createImage(self.index, 'right'); setTimeout(function() { self.currentItem.classList.remove('mui-imageviewer-item-center'); self.currentItem.classList.add('mui-imageviewer-item-left'); newItem.classList.remove('mui-imageviewer-item-right'); newItem.classList.add('mui-imageviewer-item-center'); self.oldItem = self.currentItem; self.currentItem = newItem; // TODO: 临时,稍候将调整 setTimeout(function() { self.disposeImage(); self.mask.style.display = 'none'; }, 600); }, 25); }, //上一张图片 prev: function() { var self = this; self.mask.style.display = 'block'; self.index--; var newItem = self.createImage(self.index, 'left'); setTimeout(function() { self.currentItem.classList.remove('mui-imageviewer-item-center'); self.currentItem.classList.add('mui-imageviewer-item-right'); newItem.classList.remove('mui-imageviewer-item-left'); newItem.classList.add('mui-imageviewer-item-center'); self.oldItem = self.currentItem; self.currentItem = newItem; // TODO: 临时,稍候将调整 setTimeout(function() { self.disposeImage(); self.mask.style.display = 'none'; }, 600); }, 25); }, //释放不显示的图片 disposeImage: function(all) { var sel = '.mui-imageviewer-item-left,.mui-imageviewer-item-right'; if (all) sel += ",.mui-imageviewer-item"; var willdisposes = $(sel); willdisposes.each(function(i, item) { if (item.parentNode && item.parentNode.removeChild) item.parentNode.removeChild(item, true); }); }, //创建一个图片 createImage: function(index, type) { var self = this; type = type || 'center'; if (index < 0) index = self.images.length - 1; if (index > self.images.length - 1) index = 0; self.index = index; var item = $.dom("
    ")[0]; item.appendChild($.dom('')[0]); item.classList.add('mui-imageviewer-item-' + type); self.viewer.appendChild(item); self.state.innerText = (self.index + 1) + "/" + self.images.length; //重置初始缩放比例 self.scaleValue = 1; self.dragX = 0; self.dragY = 0; return item; } }); $.imageViewer = function(selector, options) { return new ImageViewer(selector, options); }; $.ready(function() { $.imageViewer('.' + imageClassName); }); }(mui, document)); ================================================ FILE: examples/hello-mui/js/mui.indexedlist.js ================================================ /** * IndexedList * 类似联系人应用中的联系人列表,可以按首字母分组 * 右侧的字母定位工具条,可以快速定位列表位置 * varstion 1.0.0 * by Houfeng * Houfeng@DCloud.io **/ (function($, window, document) { var classSelector = function(name) { return '.' + $.className(name); } var IndexedList = $.IndexedList = $.Class.extend({ /** * 通过 element 和 options 构造 IndexedList 实例 **/ init: function(holder, options) { var self = this; self.options = options || {}; self.box = holder; if (!self.box) { throw "实例 IndexedList 时需要指定 element"; } self.createDom(); self.findElements(); self.caleLayout(); self.bindEvent(); }, createDom: function() { var self = this; self.el = self.el || {}; //styleForSearch 用于搜索,此方式能在数据较多时获取很好的性能 self.el.styleForSearch = document.createElement('style'); (document.head || document.body).appendChild(self.el.styleForSearch); }, findElements: function() { var self = this; self.el = self.el || {}; self.el.search = self.box.querySelector(classSelector('indexed-list-search')); self.el.searchInput = self.box.querySelector(classSelector('indexed-list-search-input')); self.el.searchClear = self.box.querySelector(classSelector('indexed-list-search') + ' ' + classSelector('icon-clear')); self.el.bar = self.box.querySelector(classSelector('indexed-list-bar')); self.el.barItems = [].slice.call(self.box.querySelectorAll(classSelector('indexed-list-bar') + ' a')); self.el.inner = self.box.querySelector(classSelector('indexed-list-inner')); self.el.items = [].slice.call(self.box.querySelectorAll(classSelector('indexed-list-item'))); self.el.liArray = [].slice.call(self.box.querySelectorAll(classSelector('indexed-list-inner') + ' li')); self.el.alert = self.box.querySelector(classSelector('indexed-list-alert')); }, caleLayout: function() { var self = this; var withoutSearchHeight = (self.box.offsetHeight - self.el.search.offsetHeight) + 'px'; self.el.bar.style.height = withoutSearchHeight; self.el.inner.style.height = withoutSearchHeight; var barItemHeight = ((self.el.bar.offsetHeight - 40) / self.el.barItems.length) + 'px'; self.el.barItems.forEach(function(item) { item.style.height = barItemHeight; item.style.lineHeight = barItemHeight; }); }, scrollTo: function(group) { var self = this; var groupElement = self.el.inner.querySelector('[data-group="' + group + '"]'); if (!groupElement || (self.hiddenGroups && self.hiddenGroups.indexOf(groupElement) > -1)) { return; } self.el.inner.scrollTop = groupElement.offsetTop; }, bindBarEvent: function() { var self = this; var pointElement = null; var findStart = function(event) { if (pointElement) { pointElement.classList.remove('active'); pointElement = null; } self.el.bar.classList.add('active'); var point = event.changedTouches ? event.changedTouches[0] : event; pointElement = document.elementFromPoint(point.pageX, point.pageY); if (pointElement) { var group = pointElement.innerText; if (group && group.length == 1) { pointElement.classList.add('active'); self.el.alert.innerText = group; self.el.alert.classList.add('active'); self.scrollTo(group); } } event.preventDefault(); }; var findEnd = function(event) { self.el.alert.classList.remove('active'); self.el.bar.classList.remove('active'); if (pointElement) { pointElement.classList.remove('active'); pointElement = null; } }; self.el.bar.addEventListener($.EVENT_MOVE, function(event) { findStart(event); }, false); self.el.bar.addEventListener($.EVENT_START, function(event) { findStart(event); }, false); document.body.addEventListener($.EVENT_END, function(event) { findEnd(event); }, false); document.body.addEventListener($.EVENT_CANCEL, function(event) { findEnd(event); }, false); }, search: function(keyword) { var self = this; keyword = (keyword || '').toLowerCase(); var selectorBuffer = []; var groupIndex = -1; var itemCount = 0; var liArray = self.el.liArray; var itemTotal = liArray.length; self.hiddenGroups = []; var checkGroup = function(currentIndex, last) { if (itemCount >= currentIndex - groupIndex - (last ? 0 : 1)) { selectorBuffer.push(classSelector('indexed-list-inner li') + ':nth-child(' + (groupIndex + 1) + ')'); self.hiddenGroups.push(liArray[groupIndex]); }; groupIndex = currentIndex; itemCount = 0; } liArray.forEach(function(item) { var currentIndex = liArray.indexOf(item); if (item.classList.contains($.className('indexed-list-group'))) { checkGroup(currentIndex, false); } else { var text = (item.innerText || '').toLowerCase(); var value = (item.getAttribute('data-value') || '').toLowerCase(); var tags = (item.getAttribute('data-tags') || '').toLowerCase(); if (keyword && text.indexOf(keyword) < 0 && value.indexOf(keyword) < 0 && tags.indexOf(keyword) < 0) { selectorBuffer.push(classSelector('indexed-list-inner li') + ':nth-child(' + (currentIndex + 1) + ')'); itemCount++; } if (currentIndex >= itemTotal - 1) { checkGroup(currentIndex, true); } } }); if (selectorBuffer.length >= itemTotal) { self.el.inner.classList.add('empty'); } else if (selectorBuffer.length > 0) { self.el.inner.classList.remove('empty'); self.el.styleForSearch.innerText = selectorBuffer.join(', ') + "{display:none;}"; } else { self.el.inner.classList.remove('empty'); self.el.styleForSearch.innerText = ""; } }, bindSearchEvent: function() { var self = this; self.el.searchInput.addEventListener('input', function() { var keyword = this.value; self.search(keyword); }, false); $(self.el.search).on('tap', classSelector('icon-clear'), function() { self.search(''); }, false); }, bindEvent: function() { var self = this; self.bindBarEvent(); self.bindSearchEvent(); } }); //mui(selector).indexedList 方式 $.fn.indexedList = function(options) { //遍历选择的元素 this.each(function(i, element) { if (element.indexedList) return; element.indexedList = new IndexedList(element, options); }); return this[0] ? this[0].indexedList : null; }; })(mui, window, document); ================================================ FILE: examples/hello-mui/js/mui.js ================================================ /*! * ===================================================== * Mui v3.7.3 (http://dev.dcloud.net.cn/mui) * ===================================================== */ /** * MUI核心JS * @type _L4.$|Function */ var mui = (function(document, undefined) { var readyRE = /complete|loaded|interactive/; var idSelectorRE = /^#([\w-]+)$/; var classSelectorRE = /^\.([\w-]+)$/; var tagSelectorRE = /^[\w-]+$/; var translateRE = /translate(?:3d)?\((.+?)\)/; var translateMatrixRE = /matrix(3d)?\((.+?)\)/; var $ = function(selector, context) { context = context || document; if (!selector) return wrap(); if (typeof selector === 'object') if ($.isArrayLike(selector)) { return wrap($.slice.call(selector), null); } else { return wrap([selector], null); } if (typeof selector === 'function') return $.ready(selector); if (typeof selector === 'string') { try { selector = selector.trim(); if (idSelectorRE.test(selector)) { var found = document.getElementById(RegExp.$1); return wrap(found ? [found] : []); } return wrap($.qsa(selector, context), selector); } catch (e) {} } return wrap(); }; var wrap = function(dom, selector) { dom = dom || []; Object.setPrototypeOf(dom, $.fn); dom.selector = selector || ''; return dom; }; $.uuid = 0; $.data = {}; /** * extend(simple) * @param {type} target * @param {type} source * @param {type} deep * @returns {unresolved} */ $.extend = function() { //from jquery2 var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; if (typeof target === "boolean") { deep = target; target = arguments[i] || {}; i++; } if (typeof target !== "object" && !$.isFunction(target)) { target = {}; } if (i === length) { target = this; i--; } for (; i < length; i++) { if ((options = arguments[i]) != null) { for (name in options) { src = target[name]; copy = options[name]; if (target === copy) { continue; } if (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && $.isArray(src) ? src : []; } else { clone = src && $.isPlainObject(src) ? src : {}; } target[name] = $.extend(deep, clone, copy); } else if (copy !== undefined) { target[name] = copy; } } } } return target; }; /** * mui noop(function) */ $.noop = function() {}; /** * mui slice(array) */ $.slice = [].slice; /** * mui filter(array) */ $.filter = [].filter; $.type = function(obj) { return obj == null ? String(obj) : class2type[{}.toString.call(obj)] || "object"; }; /** * mui isArray */ $.isArray = Array.isArray || function(object) { return object instanceof Array; }; /** * mui isArrayLike * @param {Object} obj */ $.isArrayLike = function(obj) { var length = !!obj && "length" in obj && obj.length; var type = $.type(obj); if (type === "function" || $.isWindow(obj)) { return false; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj; }; /** * mui isWindow(需考虑obj为undefined的情况) */ $.isWindow = function(obj) { return obj != null && obj === obj.window; }; /** * mui isObject */ $.isObject = function(obj) { return $.type(obj) === "object"; }; /** * mui isPlainObject */ $.isPlainObject = function(obj) { return $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype; }; /** * mui isEmptyObject * @param {Object} o */ $.isEmptyObject = function(o) { for (var p in o) { if (p !== undefined) { return false; } } return true; }; /** * mui isFunction */ $.isFunction = function(value) { return $.type(value) === "function"; }; /** * mui querySelectorAll * @param {type} selector * @param {type} context * @returns {Array} */ $.qsa = function(selector, context) { context = context || document; return $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector)); }; /** * ready(DOMContentLoaded) * @param {type} callback * @returns {_L6.$} */ $.ready = function(callback) { if (readyRE.test(document.readyState)) { callback($); } else { document.addEventListener('DOMContentLoaded', function() { callback($); }, false); } return this; }; /** * 将 fn 缓存一段时间后, 再被调用执行 * 此方法为了避免在 ms 段时间内, 执行 fn 多次. 常用于 resize , scroll , mousemove 等连续性事件中; * 当 ms 设置为 -1, 表示立即执行 fn, 即和直接调用 fn 一样; * 调用返回函数的 stop 停止最后一次的 buffer 效果 * @param {Object} fn * @param {Object} ms * @param {Object} context */ $.buffer = function(fn, ms, context) { var timer; var lastStart = 0; var lastEnd = 0; var ms = ms || 150; function run() { if (timer) { timer.cancel(); timer = 0; } lastStart = $.now(); fn.apply(context || this, arguments); lastEnd = $.now(); } return $.extend(function() { if ( (!lastStart) || // 从未运行过 (lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒 (lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成,后8*ms毫秒 ) { run.apply(this, arguments); } else { if (timer) { timer.cancel(); } timer = $.later(run, ms, null, $.slice.call(arguments)); } }, { stop: function() { if (timer) { timer.cancel(); timer = 0; } } }); }; /** * each * @param {type} elements * @param {type} callback * @returns {_L8.$} */ $.each = function(elements, callback, hasOwnProperty) { if (!elements) { return this; } if (typeof elements.length === 'number') { [].every.call(elements, function(el, idx) { return callback.call(el, idx, el) !== false; }); } else { for (var key in elements) { if (hasOwnProperty) { if (elements.hasOwnProperty(key)) { if (callback.call(elements[key], key, elements[key]) === false) return elements; } } else { if (callback.call(elements[key], key, elements[key]) === false) return elements; } } } return this; }; $.focus = function(element) { if ($.os.ios) { setTimeout(function() { element.focus(); }, 10); } else { element.focus(); } }; /** * trigger event * @param {type} element * @param {type} eventType * @param {type} eventData * @returns {_L8.$} */ $.trigger = function(element, eventType, eventData) { element.dispatchEvent(new CustomEvent(eventType, { detail: eventData, bubbles: true, cancelable: true })); return this; }; /** * getStyles * @param {type} element * @param {type} property * @returns {styles} */ $.getStyles = function(element, property) { var styles = element.ownerDocument.defaultView.getComputedStyle(element, null); if (property) { return styles.getPropertyValue(property) || styles[property]; } return styles; }; /** * parseTranslate * @param {type} translateString * @param {type} position * @returns {Object} */ $.parseTranslate = function(translateString, position) { var result = translateString.match(translateRE || ''); if (!result || !result[1]) { result = ['', '0,0,0']; } result = result[1].split(","); result = { x: parseFloat(result[0]), y: parseFloat(result[1]), z: parseFloat(result[2]) }; if (position && result.hasOwnProperty(position)) { return result[position]; } return result; }; /** * parseTranslateMatrix * @param {type} translateString * @param {type} position * @returns {Object} */ $.parseTranslateMatrix = function(translateString, position) { var matrix = translateString.match(translateMatrixRE); var is3D = matrix && matrix[1]; if (matrix) { matrix = matrix[2].split(","); if (is3D === "3d") matrix = matrix.slice(12, 15); else { matrix.push(0); matrix = matrix.slice(4, 7); } } else { matrix = [0, 0, 0]; } var result = { x: parseFloat(matrix[0]), y: parseFloat(matrix[1]), z: parseFloat(matrix[2]) }; if (position && result.hasOwnProperty(position)) { return result[position]; } return result; }; $.hooks = {}; $.addAction = function(type, hook) { var hooks = $.hooks[type]; if (!hooks) { hooks = []; } hook.index = hook.index || 1000; hooks.push(hook); hooks.sort(function(a, b) { return a.index - b.index; }); $.hooks[type] = hooks; return $.hooks[type]; }; $.doAction = function(type, callback) { if ($.isFunction(callback)) { //指定了callback $.each($.hooks[type], callback); } else { //未指定callback,直接执行 $.each($.hooks[type], function(index, hook) { return !hook.handle(); }); } }; /** * setTimeout封装 * @param {Object} fn * @param {Object} when * @param {Object} context * @param {Object} data */ $.later = function(fn, when, context, data) { when = when || 0; var m = fn; var d = data; var f; var r; if (typeof fn === 'string') { m = context[fn]; } f = function() { m.apply(context, $.isArray(d) ? d : [d]); }; r = setTimeout(f, when); return { id: r, cancel: function() { clearTimeout(r); } }; }; $.now = Date.now || function() { return +new Date(); }; var class2type = {}; $.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) { class2type["[object " + name + "]"] = name.toLowerCase(); }); if (window.JSON) { $.parseJSON = JSON.parse; } /** * $.fn */ $.fn = { each: function(callback) { [].every.call(this, function(el, idx) { return callback.call(el, idx, el) !== false; }); return this; } }; /** * 兼容 AMD 模块 **/ if (typeof define === 'function' && define.amd) { define('mui', [], function() { return $; }); } return $; })(document); //window.mui = mui; //'$' in window || (window.$ = mui); /** * $.os * @param {type} $ * @returns {undefined} */ (function($, window) { function detect(ua) { this.os = {}; var funcs = [ function() { //wechat var wechat = ua.match(/(MicroMessenger)\/([\d\.]+)/i); if (wechat) { //wechat this.os.wechat = { version: wechat[2].replace(/_/g, '.') }; } return false; }, function() { //android var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); if (android) { this.os.android = true; this.os.version = android[2]; this.os.isBadAndroid = !(/Chrome\/\d/.test(window.navigator.appVersion)); } return this.os.android === true; }, function() { //ios var iphone = ua.match(/(iPhone\sOS)\s([\d_]+)/); if (iphone) { //iphone this.os.ios = this.os.iphone = true; this.os.version = iphone[2].replace(/_/g, '.'); } else { var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); if (ipad) { //ipad this.os.ios = this.os.ipad = true; this.os.version = ipad[2].replace(/_/g, '.'); } } return this.os.ios === true; } ]; [].every.call(funcs, function(func) { return !func.call($); }); } detect.call($, navigator.userAgent); })(mui, window); /** * $.os.plus * @param {type} $ * @returns {undefined} */ (function($, document) { function detect(ua) { this.os = this.os || {}; var plus = ua.match(/Html5Plus/i); //TODO 5\+Browser? if (plus) { this.os.plus = true; $(function() { document.body.classList.add('mui-plus'); }); if (ua.match(/StreamApp/i)) { //TODO 最好有流应用自己的标识 this.os.stream = true; $(function() { document.body.classList.add('mui-plus-stream'); }); } } } detect.call($, navigator.userAgent); })(mui, document); /** * 仅提供简单的on,off(仅支持事件委托,不支持当前元素绑定,当前元素绑定请直接使用addEventListener,removeEventListener) * @param {Object} $ */ (function($) { if ('ontouchstart' in window) { $.isTouchable = true; $.EVENT_START = 'touchstart'; $.EVENT_MOVE = 'touchmove'; $.EVENT_END = 'touchend'; } else { $.isTouchable = false; $.EVENT_START = 'mousedown'; $.EVENT_MOVE = 'mousemove'; $.EVENT_END = 'mouseup'; } $.EVENT_CANCEL = 'touchcancel'; $.EVENT_CLICK = 'click'; var _mid = 1; var delegates = {}; //需要wrap的函数 var eventMethods = { preventDefault: 'isDefaultPrevented', stopImmediatePropagation: 'isImmediatePropagationStopped', stopPropagation: 'isPropagationStopped' }; //默认true返回函数 var returnTrue = function() { return true }; //默认false返回函数 var returnFalse = function() { return false }; //wrap浏览器事件 var compatible = function(event, target) { if (!event.detail) { event.detail = { currentTarget: target }; } else { event.detail.currentTarget = target; } $.each(eventMethods, function(name, predicate) { var sourceMethod = event[name]; event[name] = function() { this[predicate] = returnTrue; return sourceMethod && sourceMethod.apply(event, arguments) } event[predicate] = returnFalse; }, true); return event; }; //简单的wrap对象_mid var mid = function(obj) { return obj && (obj._mid || (obj._mid = _mid++)); }; //事件委托对象绑定的事件回调列表 var delegateFns = {}; //返回事件委托的wrap事件回调 var delegateFn = function(element, event, selector, callback) { return function(e) { //same event var callbackObjs = delegates[element._mid][event]; var handlerQueue = []; var target = e.target; var selectorAlls = {}; for (; target && target !== document; target = target.parentNode) { if (target === element) { break; } if (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) { break; } var matches = {}; $.each(callbackObjs, function(selector, callbacks) { //same selector selectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element)); if (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) { if (!matches[selector]) { matches[selector] = callbacks; } } }, true); if (!$.isEmptyObject(matches)) { handlerQueue.push({ element: target, handlers: matches }); } } selectorAlls = null; e = compatible(e); //compatible event $.each(handlerQueue, function(index, handler) { target = handler.element; var tagName = target.tagName; if (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) { e.preventDefault(); e.detail && e.detail.gesture && e.detail.gesture.preventDefault(); } $.each(handler.handlers, function(index, handler) { $.each(handler, function(index, callback) { if (callback.call(target, e) === false) { e.preventDefault(); e.stopPropagation(); } }, true); }, true) if (e.isPropagationStopped()) { return false; } }, true); }; }; var findDelegateFn = function(element, event) { var delegateCallbacks = delegateFns[mid(element)]; var result = []; if (delegateCallbacks) { result = []; if (event) { var filterFn = function(fn) { return fn.type === event; } return delegateCallbacks.filter(filterFn); } else { result = delegateCallbacks; } } return result; }; var preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/; /** * mui delegate events * @param {type} event * @param {type} selector * @param {type} callback * @returns {undefined} */ $.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用,类似mouse,focus之类暂不封装支持 return this.each(function() { var element = this; mid(element); mid(callback); var isAddEventListener = false; var delegateEvents = delegates[element._mid] || (delegates[element._mid] = {}); var delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {})); if ($.isEmptyObject(delegateCallbackObjs)) { isAddEventListener = true; } var delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []); delegateCallbacks.push(callback); if (isAddEventListener) { var delegateFnArray = delegateFns[mid(element)]; if (!delegateFnArray) { delegateFnArray = []; } var delegateCallback = delegateFn(element, event, selector, callback); delegateFnArray.push(delegateCallback); delegateCallback.i = delegateFnArray.length - 1; delegateCallback.type = event; delegateFns[mid(element)] = delegateFnArray; element.addEventListener(event, delegateCallback); if (event === 'tap') { //TODO 需要找个更好的解决方案 element.addEventListener('click', function(e) { if (e.target) { var tagName = e.target.tagName; if (!preventDefaultException.test(tagName)) { if (tagName === 'A') { var href = e.target.href; if (!(href && ~href.indexOf('tel:'))) { e.preventDefault(); } } else { e.preventDefault(); } } } }); } } }); }; $.fn.off = function(event, selector, callback) { return this.each(function() { var _mid = mid(this); if (!event) { //mui(selector).off(); delegates[_mid] && delete delegates[_mid]; } else if (!selector) { //mui(selector).off(event); delegates[_mid] && delete delegates[_mid][event]; } else if (!callback) { //mui(selector).off(event,selector); delegates[_mid] && delegates[_mid][event] && delete delegates[_mid][event][selector]; } else { //mui(selector).off(event,selector,callback); var delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector]; $.each(delegateCallbacks, function(index, delegateCallback) { if (mid(delegateCallback) === mid(callback)) { delegateCallbacks.splice(index, 1); return false; } }, true); } if (delegates[_mid]) { //如果off掉了所有当前element的指定的event事件,则remove掉当前element的delegate回调 if ((!delegates[_mid][event] || $.isEmptyObject(delegates[_mid][event]))) { findDelegateFn(this, event).forEach(function(fn) { this.removeEventListener(fn.type, fn); delete delegateFns[_mid][fn.i]; }.bind(this)); } } else { //如果delegates[_mid]已不存在,删除所有 findDelegateFn(this).forEach(function(fn) { this.removeEventListener(fn.type, fn); delete delegateFns[_mid][fn.i]; }.bind(this)); } }); }; })(mui); /** * mui target(action>popover>modal>tab>toggle) */ (function($, window, document) { /** * targets */ $.targets = {}; /** * target handles */ $.targetHandles = []; /** * register target * @param {type} target * @returns {$.targets} */ $.registerTarget = function(target) { target.index = target.index || 1000; $.targetHandles.push(target); $.targetHandles.sort(function(a, b) { return a.index - b.index; }); return $.targetHandles; }; window.addEventListener($.EVENT_START, function(event) { var target = event.target; var founds = {}; for (; target && target !== document; target = target.parentNode) { var isFound = false; $.each($.targetHandles, function(index, targetHandle) { var name = targetHandle.name; if (!isFound && !founds[name] && targetHandle.hasOwnProperty('handle')) { $.targets[name] = targetHandle.handle(event, target); if ($.targets[name]) { founds[name] = true; if (targetHandle.isContinue !== true) { isFound = true; } } } else { if (!founds[name]) { if (targetHandle.isReset !== false) $.targets[name] = false; } } }); if (isFound) { break; } } }); window.addEventListener('click', function(event) { //解决touch与click的target不一致的问题(比如链接边缘点击时,touch的target为html,而click的target为A) var target = event.target; var isFound = false; for (; target && target !== document; target = target.parentNode) { if (target.tagName === 'A') { $.each($.targetHandles, function(index, targetHandle) { var name = targetHandle.name; if (targetHandle.hasOwnProperty('handle')) { if (targetHandle.handle(event, target)) { isFound = true; event.preventDefault(); return false; } } }); if (isFound) { break; } } } }); })(mui, window, document); /** * fixed trim * @param {type} undefined * @returns {undefined} */ (function(undefined) { if (String.prototype.trim === undefined) { // fix for iOS 3.2 String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }; } Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) { obj['__proto__'] = proto; return obj; }; })(); /** * fixed CustomEvent */ (function() { if (typeof window.CustomEvent === 'undefined') { function CustomEvent(event, params) { params = params || { bubbles: false, cancelable: false, detail: undefined }; var evt = document.createEvent('Events'); var bubbles = true; for (var name in params) { (name === 'bubbles') ? (bubbles = !!params[name]) : (evt[name] = params[name]); } evt.initEvent(event, bubbles, true); return evt; }; CustomEvent.prototype = window.Event.prototype; window.CustomEvent = CustomEvent; } })(); /* A shim for non ES5 supporting browsers. Adds function bind to Function prototype, so that you can do partial application. Works even with the nasty thing, where the first word is the opposite of extranet, the second one is the profession of Columbus, and the version number is 9, flipped 180 degrees. */ Function.prototype.bind = Function.prototype.bind || function(to) { // Make an array of our arguments, starting from second argument var partial = Array.prototype.splice.call(arguments, 1), // We'll need the original function. fn = this; var bound = function() { // Join the already applied arguments to the now called ones (after converting to an array again). var args = partial.concat(Array.prototype.splice.call(arguments, 0)); // If not being called as a constructor if (!(this instanceof bound)) { // return the result of the function called bound to target and partially applied. return fn.apply(to, args); } // If being called as a constructor, apply the function bound to self. fn.apply(this, args); } // Attach the prototype of the function to our newly created function. bound.prototype = fn.prototype; return bound; }; /** * mui fixed classList * @param {type} document * @returns {undefined} */ (function(document) { if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') { Object.defineProperty(HTMLElement.prototype, 'classList', { get: function() { var self = this; function update(fn) { return function(value) { var classes = self.className.split(/\s+/), index = classes.indexOf(value); fn(classes, index, value); self.className = classes.join(" "); }; } var ret = { add: update(function(classes, index, value) { ~index || classes.push(value); }), remove: update(function(classes, index) { ~index && classes.splice(index, 1); }), toggle: update(function(classes, index, value) { ~index ? classes.splice(index, 1) : classes.push(value); }), contains: function(value) { return !!~self.className.split(/\s+/).indexOf(value); }, item: function(i) { return self.className.split(/\s+/)[i] || null; } }; Object.defineProperty(ret, 'length', { get: function() { return self.className.split(/\s+/).length; } }); return ret; } }); } })(document); /** * mui fixed requestAnimationFrame * @param {type} window * @returns {undefined} */ (function(window) { if (!window.requestAnimationFrame) { var lastTime = 0; window.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16.7 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; window.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) { clearTimeout(id); }; }; }(window)); /** * fastclick(only for radio,checkbox) */ (function($, window, name) { if (!$.os.android && !$.os.ios) { //目前仅识别android和ios return; } if (window.FastClick) { return; } var handle = function(event, target) { if (target.tagName === 'LABEL') { if (target.parentNode) { target = target.parentNode.querySelector('input'); } } if (target && (target.type === 'radio' || target.type === 'checkbox')) { if (!target.disabled) { //disabled return target; } } return false; }; $.registerTarget({ name: name, index: 40, handle: handle, target: false }); var dispatchEvent = function(event) { var targetElement = $.targets.click; if (targetElement) { var clickEvent, touch; // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect if (document.activeElement && document.activeElement !== targetElement) { document.activeElement.blur(); } touch = event.detail.gesture.changedTouches[0]; // Synthesise a click event, with an extra attribute so it can be tracked clickEvent = document.createEvent('MouseEvents'); clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); clickEvent.forwardedTouchEvent = true; targetElement.dispatchEvent(clickEvent); event.detail && event.detail.gesture.preventDefault(); } }; window.addEventListener('tap', dispatchEvent); window.addEventListener('doubletap', dispatchEvent); //捕获 window.addEventListener('click', function(event) { if ($.targets.click) { if (!event.forwardedTouchEvent) { //stop click if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } else { // Part of the hack for browsers that don't support Event#stopImmediatePropagation event.propagationStopped = true; } event.stopPropagation(); event.preventDefault(); return false; } } }, true); })(mui, window, 'click'); (function($, document) { $(function() { if (!$.os.ios) { return; } var CLASS_FOCUSIN = 'mui-focusin'; var CLASS_BAR_TAB = 'mui-bar-tab'; var CLASS_BAR_FOOTER = 'mui-bar-footer'; var CLASS_BAR_FOOTER_SECONDARY = 'mui-bar-footer-secondary'; var CLASS_BAR_FOOTER_SECONDARY_TAB = 'mui-bar-footer-secondary-tab'; // var content = document.querySelector('.' + CLASS_CONTENT); // if (content) { // document.body.insertBefore(content, document.body.firstElementChild); // } document.addEventListener('focusin', function(e) { if ($.os.plus) { //在父webview里边不fix if (window.plus) { if (plus.webview.currentWebview().children().length > 0) { return; } } } var target = e.target; //TODO 需考虑所有键盘弹起的情况 if (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) { if (target.disabled || target.readOnly) { return; } document.body.classList.add(CLASS_FOCUSIN); var isFooter = false; for (; target && target !== document; target = target.parentNode) { var classList = target.classList; if (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) { isFooter = true; break; } } if (isFooter) { var scrollTop = document.body.scrollHeight; var scrollLeft = document.body.scrollLeft; setTimeout(function() { window.scrollTo(scrollLeft, scrollTop); }, 20); } } }); document.addEventListener('focusout', function(e) { var classList = document.body.classList; if (classList.contains(CLASS_FOCUSIN)) { classList.remove(CLASS_FOCUSIN); setTimeout(function() { window.scrollTo(document.body.scrollLeft, document.body.scrollTop); }, 20); } }); }); })(mui, document); /** * mui namespace(optimization) * @param {type} $ * @returns {undefined} */ (function($) { $.namespace = 'mui'; $.classNamePrefix = $.namespace + '-'; $.classSelectorPrefix = '.' + $.classNamePrefix; /** * 返回正确的className * @param {type} className * @returns {String} */ $.className = function(className) { return $.classNamePrefix + className; }; /** * 返回正确的classSelector * @param {type} classSelector * @returns {String} */ $.classSelector = function(classSelector) { return classSelector.replace(/\./g, $.classSelectorPrefix); }; /** * 返回正确的eventName * @param {type} event * @param {type} module * @returns {String} */ $.eventName = function(event, module) { return event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : ''); }; })(mui); /** * mui gestures * @param {type} $ * @param {type} window * @returns {undefined} */ (function($, window) { $.gestures = { session: {} }; /** * Gesture preventDefault * @param {type} e * @returns {undefined} */ $.preventDefault = function(e) { e.preventDefault(); }; /** * Gesture stopPropagation * @param {type} e * @returns {undefined} */ $.stopPropagation = function(e) { e.stopPropagation(); }; /** * register gesture * @param {type} gesture * @returns {$.gestures} */ $.addGesture = function(gesture) { return $.addAction('gestures', gesture); }; var round = Math.round; var abs = Math.abs; var sqrt = Math.sqrt; var atan = Math.atan; var atan2 = Math.atan2; /** * distance * @param {type} p1 * @param {type} p2 * @returns {Number} */ var getDistance = function(p1, p2, props) { if(!props) { props = ['x', 'y']; } var x = p2[props[0]] - p1[props[0]]; var y = p2[props[1]] - p1[props[1]]; return sqrt((x * x) + (y * y)); }; /** * scale * @param {Object} starts * @param {Object} moves */ var getScale = function(starts, moves) { if(starts.length >= 2 && moves.length >= 2) { var props = ['pageX', 'pageY']; return getDistance(moves[1], moves[0], props) / getDistance(starts[1], starts[0], props); } return 1; }; /** * angle * @param {type} p1 * @param {type} p2 * @returns {Number} */ var getAngle = function(p1, p2, props) { if(!props) { props = ['x', 'y']; } var x = p2[props[0]] - p1[props[0]]; var y = p2[props[1]] - p1[props[1]]; return atan2(y, x) * 180 / Math.PI; }; /** * direction * @param {Object} x * @param {Object} y */ var getDirection = function(x, y) { if(x === y) { return ''; } if(abs(x) >= abs(y)) { return x > 0 ? 'left' : 'right'; } return y > 0 ? 'up' : 'down'; }; /** * rotation * @param {Object} start * @param {Object} end */ var getRotation = function(start, end) { var props = ['pageX', 'pageY']; return getAngle(end[1], end[0], props) - getAngle(start[1], start[0], props); }; /** * px per ms * @param {Object} deltaTime * @param {Object} x * @param {Object} y */ var getVelocity = function(deltaTime, x, y) { return { x: x / deltaTime || 0, y: y / deltaTime || 0 }; }; /** * detect gestures * @param {type} event * @param {type} touch * @returns {undefined} */ var detect = function(event, touch) { if($.gestures.stoped) { return; } $.doAction('gestures', function(index, gesture) { if(!$.gestures.stoped) { if($.options.gestureConfig[gesture.name] !== false) { gesture.handle(event, touch); } } }); }; /** * 暂时无用 * @param {Object} node * @param {Object} parent */ var hasParent = function(node, parent) { while(node) { if(node == parent) { return true; } node = node.parentNode; } return false; }; var uniqueArray = function(src, key, sort) { var results = []; var values = []; var i = 0; while(i < src.length) { var val = key ? src[i][key] : src[i]; if(values.indexOf(val) < 0) { results.push(src[i]); } values[i] = val; i++; } if(sort) { if(!key) { results = results.sort(); } else { results = results.sort(function sortUniqueArray(a, b) { return a[key] > b[key]; }); } } return results; }; var getMultiCenter = function(touches) { var touchesLength = touches.length; if(touchesLength === 1) { return { x: round(touches[0].pageX), y: round(touches[0].pageY) }; } var x = 0; var y = 0; var i = 0; while(i < touchesLength) { x += touches[i].pageX; y += touches[i].pageY; i++; } return { x: round(x / touchesLength), y: round(y / touchesLength) }; }; var multiTouch = function() { return $.options.gestureConfig.pinch; }; var copySimpleTouchData = function(touch) { var touches = []; var i = 0; while(i < touch.touches.length) { touches[i] = { pageX: round(touch.touches[i].pageX), pageY: round(touch.touches[i].pageY) }; i++; } return { timestamp: $.now(), gesture: touch.gesture, touches: touches, center: getMultiCenter(touch.touches), deltaX: touch.deltaX, deltaY: touch.deltaY }; }; var calDelta = function(touch) { var session = $.gestures.session; var center = touch.center; var offset = session.offsetDelta || {}; var prevDelta = session.prevDelta || {}; var prevTouch = session.prevTouch || {}; if(touch.gesture.type === $.EVENT_START || touch.gesture.type === $.EVENT_END) { prevDelta = session.prevDelta = { x: prevTouch.deltaX || 0, y: prevTouch.deltaY || 0 }; offset = session.offsetDelta = { x: center.x, y: center.y }; } touch.deltaX = prevDelta.x + (center.x - offset.x); touch.deltaY = prevDelta.y + (center.y - offset.y); }; var calTouchData = function(touch) { var session = $.gestures.session; var touches = touch.touches; var touchesLength = touches.length; if(!session.firstTouch) { session.firstTouch = copySimpleTouchData(touch); } if(multiTouch() && touchesLength > 1 && !session.firstMultiTouch) { session.firstMultiTouch = copySimpleTouchData(touch); } else if(touchesLength === 1) { session.firstMultiTouch = false; } var firstTouch = session.firstTouch; var firstMultiTouch = session.firstMultiTouch; var offsetCenter = firstMultiTouch ? firstMultiTouch.center : firstTouch.center; var center = touch.center = getMultiCenter(touches); touch.timestamp = $.now(); touch.deltaTime = touch.timestamp - firstTouch.timestamp; touch.angle = getAngle(offsetCenter, center); touch.distance = getDistance(offsetCenter, center); calDelta(touch); touch.offsetDirection = getDirection(touch.deltaX, touch.deltaY); touch.scale = firstMultiTouch ? getScale(firstMultiTouch.touches, touches) : 1; touch.rotation = firstMultiTouch ? getRotation(firstMultiTouch.touches, touches) : 0; calIntervalTouchData(touch); }; var CAL_INTERVAL = 25; var calIntervalTouchData = function(touch) { var session = $.gestures.session; var last = session.lastInterval || touch; var deltaTime = touch.timestamp - last.timestamp; var velocity; var velocityX; var velocityY; var direction; if(touch.gesture.type != $.EVENT_CANCEL && (deltaTime > CAL_INTERVAL || last.velocity === undefined)) { var deltaX = last.deltaX - touch.deltaX; var deltaY = last.deltaY - touch.deltaY; var v = getVelocity(deltaTime, deltaX, deltaY); velocityX = v.x; velocityY = v.y; velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y; direction = getDirection(deltaX, deltaY) || last.direction; session.lastInterval = touch; } else { velocity = last.velocity; velocityX = last.velocityX; velocityY = last.velocityY; direction = last.direction; } touch.velocity = velocity; touch.velocityX = velocityX; touch.velocityY = velocityY; touch.direction = direction; }; var targetIds = {}; var convertTouches = function(touches) { for(var i = 0; i < touches.length; i++) { !touches['identifier'] && (touches['identifier'] = 0); } return touches; }; var getTouches = function(event, touch) { var allTouches = convertTouches($.slice.call(event.touches || [event])); var type = event.type; var targetTouches = []; var changedTargetTouches = []; //当touchstart或touchmove且touches长度为1,直接获得all和changed if((type === $.EVENT_START || type === $.EVENT_MOVE) && allTouches.length === 1) { targetIds[allTouches[0].identifier] = true; targetTouches = allTouches; changedTargetTouches = allTouches; touch.target = event.target; } else { var i = 0; var targetTouches = []; var changedTargetTouches = []; var changedTouches = convertTouches($.slice.call(event.changedTouches || [event])); touch.target = event.target; var sessionTarget = $.gestures.session.target || event.target; targetTouches = allTouches.filter(function(touch) { return hasParent(touch.target, sessionTarget); }); if(type === $.EVENT_START) { i = 0; while(i < targetTouches.length) { targetIds[targetTouches[i].identifier] = true; i++; } } i = 0; while(i < changedTouches.length) { if(targetIds[changedTouches[i].identifier]) { changedTargetTouches.push(changedTouches[i]); } if(type === $.EVENT_END || type === $.EVENT_CANCEL) { delete targetIds[changedTouches[i].identifier]; } i++; } if(!changedTargetTouches.length) { return false; } } targetTouches = uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true); var touchesLength = targetTouches.length; var changedTouchesLength = changedTargetTouches.length; if(type === $.EVENT_START && touchesLength - changedTouchesLength === 0) { //first touch.isFirst = true; $.gestures.touch = $.gestures.session = { target: event.target }; } touch.isFinal = ((type === $.EVENT_END || type === $.EVENT_CANCEL) && (touchesLength - changedTouchesLength === 0)); touch.touches = targetTouches; touch.changedTouches = changedTargetTouches; return true; }; var handleTouchEvent = function(event) { var touch = { gesture: event }; var touches = getTouches(event, touch); if(!touches) { return; } calTouchData(touch); detect(event, touch); $.gestures.session.prevTouch = touch; if(event.type === $.EVENT_END && !$.isTouchable) { $.gestures.touch = $.gestures.session = {}; } }; var supportsPassive = (function checkPassiveListener() { var supportsPassive = false; try { var opts = Object.defineProperty({}, 'passive', { get: function get() { supportsPassive = true; }, }); window.addEventListener('testPassiveListener', null, opts); } catch(e) { // No support } return supportsPassive; }()) window.addEventListener($.EVENT_START, handleTouchEvent); window.addEventListener($.EVENT_MOVE, handleTouchEvent, supportsPassive ? { passive: false, capture: false } : false); window.addEventListener($.EVENT_END, handleTouchEvent); window.addEventListener($.EVENT_CANCEL, handleTouchEvent); //fixed hashchange(android) window.addEventListener($.EVENT_CLICK, function(e) { //TODO 应该判断当前target是不是在targets.popover内部,而不是非要相等 if(($.os.android || $.os.ios) && (($.targets.popover && e.target === $.targets.popover) || ($.targets.tab) || $.targets.offcanvas || $.targets.modal)) { e.preventDefault(); } }, true); //增加原生滚动识别 $.isScrolling = false; var scrollingTimeout = null; window.addEventListener('scroll', function() { $.isScrolling = true; scrollingTimeout && clearTimeout(scrollingTimeout); scrollingTimeout = setTimeout(function() { $.isScrolling = false; }, 250); }); })(mui, window); /** * mui gesture flick[left|right|up|down] * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var flickStartTime = 0; var handle = function(event, touch) { var session = $.gestures.session; var options = this.options; var now = $.now(); switch (event.type) { case $.EVENT_MOVE: if (now - flickStartTime > 300) { flickStartTime = now; session.flickStart = touch.center; } break; case $.EVENT_END: case $.EVENT_CANCEL: touch.flick = false; if (session.flickStart && options.flickMaxTime > (now - flickStartTime) && touch.distance > options.flickMinDistince) { touch.flick = true; touch.flickTime = now - flickStartTime; touch.flickDistanceX = touch.center.x - session.flickStart.x; touch.flickDistanceY = touch.center.y - session.flickStart.y; $.trigger(session.target, name, touch); $.trigger(session.target, name + touch.direction, touch); } break; } }; /** * mui gesture flick */ $.addGesture({ name: name, index: 5, handle: handle, options: { flickMaxTime: 200, flickMinDistince: 10 } }); })(mui, 'flick'); /** * mui gesture swipe[left|right|up|down] * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var handle = function(event, touch) { var session = $.gestures.session; if (event.type === $.EVENT_END || event.type === $.EVENT_CANCEL) { var options = this.options; touch.swipe = false; //TODO 后续根据velocity计算 if (touch.direction && options.swipeMaxTime > touch.deltaTime && touch.distance > options.swipeMinDistince) { touch.swipe = true; $.trigger(session.target, name, touch); $.trigger(session.target, name + touch.direction, touch); } } }; /** * mui gesture swipe */ $.addGesture({ name: name, index: 10, handle: handle, options: { swipeMaxTime: 300, swipeMinDistince: 18 } }); })(mui, 'swipe'); /** * mui gesture drag[start|left|right|up|down|end] * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var handle = function(event, touch) { var session = $.gestures.session; switch (event.type) { case $.EVENT_START: break; case $.EVENT_MOVE: if (!touch.direction || !session.target) { return; } //修正direction,可在session期间自行锁定拖拽方向,方便开发scroll类不同方向拖拽插件嵌套 if (session.lockDirection && session.startDirection) { if (session.startDirection && session.startDirection !== touch.direction) { if (session.startDirection === 'up' || session.startDirection === 'down') { touch.direction = touch.deltaY < 0 ? 'up' : 'down'; } else { touch.direction = touch.deltaX < 0 ? 'left' : 'right'; } } } if (!session.drag) { session.drag = true; $.trigger(session.target, name + 'start', touch); } $.trigger(session.target, name, touch); $.trigger(session.target, name + touch.direction, touch); break; case $.EVENT_END: case $.EVENT_CANCEL: if (session.drag && touch.isFinal) { $.trigger(session.target, name + 'end', touch); } break; } }; /** * mui gesture drag */ $.addGesture({ name: name, index: 20, handle: handle, options: { fingers: 1 } }); })(mui, 'drag'); /** * mui gesture tap and doubleTap * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var lastTarget; var lastTapTime; var handle = function(event, touch) { var session = $.gestures.session; var options = this.options; switch (event.type) { case $.EVENT_END: if (!touch.isFinal) { return; } var target = session.target; if (!target || (target.disabled || (target.classList && target.classList.contains('mui-disabled')))) { return; } if (touch.distance < options.tapMaxDistance && touch.deltaTime < options.tapMaxTime) { if ($.options.gestureConfig.doubletap && lastTarget && (lastTarget === target)) { //same target if (lastTapTime && (touch.timestamp - lastTapTime) < options.tapMaxInterval) { $.trigger(target, 'doubletap', touch); lastTapTime = $.now(); lastTarget = target; return; } } $.trigger(target, name, touch); lastTapTime = $.now(); lastTarget = target; } break; } }; /** * mui gesture tap */ $.addGesture({ name: name, index: 30, handle: handle, options: { fingers: 1, tapMaxInterval: 300, tapMaxDistance: 5, tapMaxTime: 250 } }); })(mui, 'tap'); /** * mui gesture longtap * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var timer; var handle = function(event, touch) { var session = $.gestures.session; var options = this.options; switch (event.type) { case $.EVENT_START: clearTimeout(timer); timer = setTimeout(function() { $.trigger(session.target, name, touch); }, options.holdTimeout); break; case $.EVENT_MOVE: if (touch.distance > options.holdThreshold) { clearTimeout(timer); } break; case $.EVENT_END: case $.EVENT_CANCEL: clearTimeout(timer); break; } }; /** * mui gesture longtap */ $.addGesture({ name: name, index: 10, handle: handle, options: { fingers: 1, holdTimeout: 500, holdThreshold: 2 } }); })(mui, 'longtap'); /** * mui gesture hold * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var timer; var handle = function(event, touch) { var session = $.gestures.session; var options = this.options; switch (event.type) { case $.EVENT_START: if ($.options.gestureConfig.hold) { timer && clearTimeout(timer); timer = setTimeout(function() { touch.hold = true; $.trigger(session.target, name, touch); }, options.holdTimeout); } break; case $.EVENT_MOVE: break; case $.EVENT_END: case $.EVENT_CANCEL: if (timer) { clearTimeout(timer) && (timer = null); $.trigger(session.target, 'release', touch); } break; } }; /** * mui gesture hold */ $.addGesture({ name: name, index: 10, handle: handle, options: { fingers: 1, holdTimeout: 0 } }); })(mui, 'hold'); /** * mui gesture pinch * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var handle = function(event, touch) { var options = this.options; var session = $.gestures.session; switch (event.type) { case $.EVENT_START: break; case $.EVENT_MOVE: if ($.options.gestureConfig.pinch) { if (touch.touches.length < 2) { return; } if (!session.pinch) { //start session.pinch = true; $.trigger(session.target, name + 'start', touch); } $.trigger(session.target, name, touch); var scale = touch.scale; var rotation = touch.rotation; var lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale; var scaleDiff = 0.000000000001; //防止scale与lastScale相等,不触发事件的情况。 if (scale > lastScale) { //out lastScale = scale - scaleDiff; $.trigger(session.target, name + 'out', touch); } //in else if (scale < lastScale) { lastScale = scale + scaleDiff; $.trigger(session.target, name + 'in', touch); } if (Math.abs(rotation) > options.minRotationAngle) { $.trigger(session.target, 'rotate', touch); } } break; case $.EVENT_END: case $.EVENT_CANCEL: if ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) { session.pinch = false; $.trigger(session.target, name + 'end', touch); } break; } }; /** * mui gesture pinch */ $.addGesture({ name: name, index: 10, handle: handle, options: { minRotationAngle: 0 } }); })(mui, 'pinch'); /** * mui.init * @param {type} $ * @returns {undefined} */ (function($) { $.global = $.options = { gestureConfig: { tap: true, doubletap: false, longtap: false, hold: false, flick: true, swipe: true, drag: true, pinch: false } }; /** * * @param {type} options * @returns {undefined} */ $.initGlobal = function(options) { $.options = $.extend(true, $.global, options); return this; }; var inits = {}; /** * 单页配置 初始化 * @param {object} options */ $.init = function(options) { $.options = $.extend(true, $.global, options || {}); $.ready(function() { $.doAction('inits', function(index, init) { var isInit = !!(!inits[init.name] || init.repeat); if (isInit) { init.handle.call($); inits[init.name] = true; } }); }); return this; }; /** * 增加初始化执行流程 * @param {function} init */ $.addInit = function(init) { return $.addAction('inits', init); }; /** * 处理html5版本subpages */ $.addInit({ name: 'iframe', index: 100, handle: function() { var options = $.options; var subpages = options.subpages || []; if (!$.os.plus && subpages.length) { //暂时只处理单个subpage。后续可以考虑支持多个subpage createIframe(subpages[0]); } } }); var createIframe = function(options) { var wrapper = document.createElement('div'); wrapper.className = 'mui-iframe-wrapper'; var styles = options.styles || {}; if (typeof styles.top !== 'string') { styles.top = '0px'; } if (typeof styles.bottom !== 'string') { styles.bottom = '0px'; } wrapper.style.top = styles.top; wrapper.style.bottom = styles.bottom; var iframe = document.createElement('iframe'); iframe.src = options.url; iframe.id = options.id || options.url; iframe.name = iframe.id; wrapper.appendChild(iframe); document.body.appendChild(wrapper); //目前仅处理微信 $.os.wechat && handleScroll(wrapper, iframe); }; function handleScroll(wrapper, iframe) { var key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src; var scrollTop = (parseFloat(localStorage.getItem(key)) || 0); if (scrollTop) { (function(y) { iframe.onload = function() { window.scrollTo(0, y); }; })(scrollTop); } setInterval(function() { var _scrollTop = window.scrollY; if (scrollTop !== _scrollTop) { localStorage.setItem(key, _scrollTop + ''); scrollTop = _scrollTop; } }, 100); }; $(function() { var classList = document.body.classList; var os = []; if ($.os.ios) { os.push({ os: 'ios', version: $.os.version }); classList.add('mui-ios'); } else if ($.os.android) { os.push({ os: 'android', version: $.os.version }); classList.add('mui-android'); } if ($.os.wechat) { os.push({ os: 'wechat', version: $.os.wechat.version }); classList.add('mui-wechat'); } if (os.length) { $.each(os, function(index, osObj) { var version = ''; var classArray = []; if (osObj.version) { $.each(osObj.version.split('.'), function(i, v) { version = version + (version ? '-' : '') + v; classList.add($.className(osObj.os + '-' + version)); }); } }); } }); })(mui); /** * mui.init 5+ * @param {type} $ * @returns {undefined} */ (function($) { var defaultOptions = { swipeBack: false, preloadPages: [], //5+ lazyLoad webview preloadLimit: 10, //预加载窗口的数量限制(一旦超出,先进先出) keyEventBind: { backbutton: true, menubutton: true }, titleConfig: { height: "44px", backgroundColor: "#f7f7f7", //导航栏背景色 bottomBorderColor: "#cccccc", //底部边线颜色 title: { //标题配置 text: "", //标题文字 position: { top: 0, left: 0, width: "100%", height: "100%" }, styles: { color: "#000000", align: "center", family: "'Helvetica Neue',Helvetica,sans-serif", size: "17px", style: "normal", weight: "normal", fontSrc: "" } }, back: { image: { base64Data: '', imgSrc: '', sprite: { top: '0px', left: '0px', width: '100%', height: '100%' }, position: { top: "10px", left: "10px", width: "24px", height: "24px" } } } } }; //默认页面动画 var defaultShow = { event:"titleUpdate", autoShow: true, duration: 300, aniShow: 'slide-in-right', extras:{} }; //若执行了显示动画初始化操作,则要覆盖默认配置 if($.options.show) { defaultShow = $.extend(true, defaultShow, $.options.show); } $.currentWebview = null; $.extend(true, $.global, defaultOptions); $.extend(true, $.options, defaultOptions); /** * 等待动画配置 * @param {type} options * @returns {Object} */ $.waitingOptions = function(options) { return $.extend(true, {}, { autoShow: true, title: '', modal: false }, options); }; /** * 窗口显示配置 * @param {type} options * @returns {Object} */ $.showOptions = function(options) { return $.extend(true, {}, defaultShow, options); }; /** * 窗口默认配置 * @param {type} options * @returns {Object} */ $.windowOptions = function(options) { return $.extend({ scalable: false, bounce: "" //vertical }, options); }; /** * plusReady * @param {type} callback * @returns {_L6.$} */ $.plusReady = function(callback) { if(window.plus) { setTimeout(function() { //解决callback与plusready事件的执行时机问题(典型案例:showWaiting,closeWaiting) callback(); }, 0); } else { document.addEventListener("plusready", function() { callback(); }, false); } return this; }; /** * 5+ event(5+没提供之前我自己实现) * @param {type} webview * @param {type} eventType * @param {type} data * @returns {undefined} */ $.fire = function(webview, eventType, data) { if(webview) { if(typeof data === 'undefined') { data = ''; } else if(typeof data === 'boolean' || typeof data === 'number') { webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "'," + data + ")"); return; } else if($.isPlainObject(data) || $.isArray(data)) { data = JSON.stringify(data || {}).replace(/\'/g, "\\u0027").replace(/\\/g, "\\u005c"); } webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "','" + data + "')"); } }; /** * 5+ event(5+没提供之前我自己实现) * @param {type} eventType * @param {type} data * @returns {undefined} */ $.receive = function(eventType, data) { if(eventType) { try { if(data && typeof data === 'string') { data = JSON.parse(data); } } catch(e) {} $.trigger(document, eventType, data); } }; var triggerPreload = function(webview) { if(!webview.preloaded) { //保证仅触发一次 $.fire(webview, 'preload'); var list = webview.children(); for(var i = 0; i < list.length; i++) { $.fire(list[i], 'preload'); } webview.preloaded = true; } }; var trigger = function(webview, eventType, timeChecked) { if(timeChecked) { if(!webview[eventType + 'ed']) { $.fire(webview, eventType); var list = webview.children(); for(var i = 0; i < list.length; i++) { $.fire(list[i], eventType); } webview[eventType + 'ed'] = true; } } else { $.fire(webview, eventType); var list = webview.children(); for(var i = 0; i < list.length; i++) { $.fire(list[i], eventType); } } }; /** * 打开新窗口 * @param {string} url 要打开的页面地址 * @param {string} id 指定页面ID * @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}} */ $.openWindow = function(url, id, options) { if(typeof url === 'object') { options = url; url = options.url; id = options.id || url; } else { if(typeof id === 'object') { options = id; id = options.id || url; } else { id = id || url; } } if(!$.os.plus) { //TODO 先临时这么处理:手机上顶层跳,PC上parent跳 if($.os.ios || $.os.android) { window.top.location.href = url; } else { window.parent.location.href = url; } return; } if(!window.plus) { return; } options = options || {}; var params = options.params || {}; var webview = null, webviewCache = null, nShow, nWaiting; if($.webviews[id]) { webviewCache = $.webviews[id]; //webview真实存在,才能获取 if(plus.webview.getWebviewById(id)) { webview = webviewCache.webview; } } else if(options.createNew !== true) { webview = plus.webview.getWebviewById(id); } if(webview) { //已缓存 //每次show都需要传递动画参数; //预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置; nShow = webviewCache ? webviewCache.show : defaultShow; nShow = options.show ? $.extend(nShow, options.show) : nShow; nShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() { triggerPreload(webview); trigger(webview, 'pagebeforeshow', false); }); if(webviewCache) { webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')'); } return webview; } else { //新窗口 if(!url) { throw new Error('webview[' + id + '] does not exist'); } //显示waiting var waitingConfig = $.waitingOptions(options.waiting); if(waitingConfig.autoShow) { nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options); } //创建页面 options = $.extend(options, { id: id, url: url }); webview = $.createWindow(options); //显示 nShow = $.showOptions(options.show); if(nShow.autoShow) { var showWebview = function() { //关闭等待框 if(nWaiting) { nWaiting.close(); } //显示页面 webview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras); options.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')'); }; //titleUpdate触发时机早于loaded,更换为titleUpdate后,可以更早的显示webview webview.addEventListener(nShow.event, showWebview, false); //loaded事件发生后,触发预加载和pagebeforeshow事件 webview.addEventListener("loaded", function() { triggerPreload(webview); trigger(webview, 'pagebeforeshow', false); }, false); } } return webview; }; $.openWindowWithTitle = function(options, titleConfig) { options = options || {}; var url = options.url; var id = options.id || url; if(!$.os.plus) { //TODO 先临时这么处理:手机上顶层跳,PC上parent跳 if($.os.ios || $.os.android) { window.top.location.href = url; } else { window.parent.location.href = url; } return; } if(!window.plus) { return; } var params = options.params || {}; var webview = null, webviewCache = null, nShow, nWaiting; if($.webviews[id]) { webviewCache = $.webviews[id]; //webview真实存在,才能获取 if(plus.webview.getWebviewById(id)) { webview = webviewCache.webview; } } else if(options.createNew !== true) { webview = plus.webview.getWebviewById(id); } if(webview) { //已缓存 //每次show都需要传递动画参数; //预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置; nShow = webviewCache ? webviewCache.show : defaultShow; nShow = options.show ? $.extend(nShow, options.show) : nShow; nShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() { triggerPreload(webview); trigger(webview, 'pagebeforeshow', false); }); if(webviewCache) { webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')'); } return webview; } else { //新窗口 if(!url) { throw new Error('webview[' + id + '] does not exist'); } //显示waiting var waitingConfig = $.waitingOptions(options.waiting); if(waitingConfig.autoShow) { nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options); } //创建页面 options = $.extend(options, { id: id, url: url }); webview = $.createWindow(options); if(titleConfig) { //处理原生头 $.extend(true, $.options.titleConfig, titleConfig); var tid = $.options.titleConfig.id ? $.options.titleConfig.id : id + "_title"; var view = new plus.nativeObj.View(tid, { top: 0, height: $.options.titleConfig.height, width: "100%", dock: "top", position: "dock" }); view.drawRect($.options.titleConfig.backgroundColor); //绘制背景色 var _b = parseInt($.options.titleConfig.height) - 1; view.drawRect($.options.titleConfig.bottomBorderColor, { top: _b + "px", left: "0px" }); //绘制底部边线 //绘制文字 if($.options.titleConfig.title.text){ var _title = $.options.titleConfig.title; view.drawText(_title.text,_title.position , _title.styles); } //返回图标绘制 var _back = $.options.titleConfig.back; var backClick = null; //优先字体 //其次是图片 var _backImage = _back.image; if(_backImage.base64Data || _backImage.imgSrc) { //TODO 此处需要处理百分比的情况 backClick = { left:parseInt(_backImage.position.left), right:parseInt(_backImage.position.left) + parseInt(_backImage.position.width) }; var bitmap = new plus.nativeObj.Bitmap(id + "_back"); if(_backImage.base64Data) { //优先base64编码字符串 bitmap.loadBase64Data(_backImage.base64Data); } else { //其次加载图片文件 bitmap.load(_backImage.imgSrc); } view.drawBitmap(bitmap,_backImage.sprite , _backImage.position); } //处理点击事件 view.setTouchEventRect({ top: "0px", left: "0px", width: "100%", height: "100%" }); view.interceptTouchEvent(true); view.addEventListener("click", function(e) { var x = e.clientX; //返回按钮点击 if(backClick&& x > backClick.left && x < backClick.right){ if( _back.click && $.isFunction(_back.click)){ _back.click(); }else{ webview.evalJS("window.mui&&mui.back();"); } } }, false); webview.append(view); } //显示 nShow = $.showOptions(options.show); if(nShow.autoShow) { //titleUpdate触发时机早于loaded,更换为titleUpdate后,可以更早的显示webview webview.addEventListener(nShow.event, function () { //关闭等待框 if(nWaiting) { nWaiting.close(); } //显示页面 webview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras); }, false); } } return webview; }; /** * 根据配置信息创建一个webview * @param {type} options * @param {type} isCreate * @returns {webview} */ $.createWindow = function(options, isCreate) { if(!window.plus) { return; } var id = options.id || options.url; var webview; if(options.preload) { if($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache webview = $.webviews[id].webview; } else { //新增预加载窗口 //判断是否携带createNew参数,默认为false if(options.createNew !== true) { webview = plus.webview.getWebviewById(id); } //之前没有,那就新创建 if(!webview) { webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({ preload: true }, options.extras)); if(options.subpages) { $.each(options.subpages, function(index, subpage) { var subpageId = subpage.id || subpage.url; if(subpageId) { //过滤空对象 var subWebview = plus.webview.getWebviewById(subpageId); if(!subWebview) { //如果该webview不存在,则创建 subWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), $.extend({ preload: true }, subpage.extras)); } webview.append(subWebview); } }); } } } //TODO 理论上,子webview也应该计算到预加载队列中,但这样就麻烦了,要退必须退整体,否则可能出现问题; $.webviews[id] = { webview: webview, //目前仅preload的缓存webview preload: true, show: $.showOptions(options.show), afterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯 }; //索引该预加载窗口 var preloads = $.data.preloads; var index = preloads.indexOf(id); if(~index) { //删除已存在的(变相调整插入位置) preloads.splice(index, 1); } preloads.push(id); if(preloads.length > $.options.preloadLimit) { //先进先出 var first = $.data.preloads.shift(); var webviewCache = $.webviews[first]; if(webviewCache && webviewCache.webview) { //需要将自己打开的所有页面,全部close; //关闭该预加载webview $.closeAll(webviewCache.webview); } //删除缓存 delete $.webviews[first]; } } else { if(isCreate !== false) { //直接创建非预加载窗口 webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras); if(options.subpages) { $.each(options.subpages, function(index, subpage) { var subpageId = subpage.id || subpage.url; var subWebview = plus.webview.getWebviewById(subpageId); if(!subWebview) { subWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), subpage.extras); } webview.append(subWebview); }); } } } return webview; }; /** * 预加载 */ $.preload = function(options) { //调用预加载函数,不管是否传递preload参数,强制变为true if(!options.preload) { options.preload = true; } return $.createWindow(options); }; /** *关闭当前webview打开的所有webview; */ $.closeOpened = function(webview) { var opened = webview.opened(); if(opened) { for(var i = 0, len = opened.length; i < len; i++) { var openedWebview = opened[i]; var open_open = openedWebview.opened(); if(open_open && open_open.length > 0) { //关闭打开的webview $.closeOpened(openedWebview); //关闭自己 openedWebview.close("none"); } else { //如果直接孩子节点,就不用关闭了,因为父关闭的时候,会自动关闭子; if(openedWebview.parent() !== webview) { openedWebview.close('none'); } } } } }; $.closeAll = function(webview, aniShow) { $.closeOpened(webview); if(aniShow) { webview.close(aniShow); } else { webview.close(); } }; /** * 批量创建webview * @param {type} options * @returns {undefined} */ $.createWindows = function(options) { $.each(options, function(index, option) { //初始化预加载窗口(创建)和非预加载窗口(仅配置,不创建) $.createWindow(option, false); }); }; /** * 创建当前页面的子webview * @param {type} options * @returns {webview} */ $.appendWebview = function(options) { if(!window.plus) { return; } var id = options.id || options.url; var webview; if(!$.webviews[id]) { //保证执行一遍 //TODO 这里也有隐患,比如某个webview不是作为subpage创建的,而是作为target webview的话; if(!plus.webview.getWebviewById(id)) { webview = plus.webview.create(options.url, id, options.styles, options.extras); } //之前的实现方案:子窗口loaded之后再append到父窗口中; //问题:部分子窗口loaded事件发生较晚,此时执行父窗口的children方法会返回空,导致父子通讯失败; // 比如父页面执行完preload事件后,需触发子页面的preload事件,此时未append的话,就无法触发; //修改方式:不再监控loaded事件,直接append //by chb@20150521 // webview.addEventListener('loaded', function() { plus.webview.currentWebview().append(webview); // }); $.webviews[id] = options; } return webview; }; //全局webviews $.webviews = {}; //预加载窗口索引 $.data.preloads = []; //$.currentWebview $.plusReady(function() { $.currentWebview = plus.webview.currentWebview(); }); $.addInit({ name: '5+', index: 100, handle: function() { var options = $.options; var subpages = options.subpages || []; if($.os.plus) { $.plusReady(function() { //TODO 这里需要判断一下,最好等子窗口加载完毕后,再调用主窗口的show方法; //或者:在openwindow方法中,监听实现; $.each(subpages, function(index, subpage) { $.appendWebview(subpage); }); //判断是否首页 if(plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) { //首页需要自己激活预加载; //timeout因为子页面loaded之后才append的,防止子页面尚未append、从而导致其preload未触发的问题; setTimeout(function() { triggerPreload(plus.webview.currentWebview()); }, 300); } //设置ios顶部状态栏颜色; if($.os.ios && $.options.statusBarBackground) { plus.navigator.setStatusBarBackground($.options.statusBarBackground); } if($.os.android && parseFloat($.os.version) < 4.4) { //解决Android平台4.4版本以下,resume后,父窗体标题延迟渲染的问题; if(plus.webview.currentWebview().parent() == null) { document.addEventListener("resume", function() { var body = document.body; body.style.display = 'none'; setTimeout(function() { body.style.display = ''; }, 10); }); } } }); } else { //已支持iframe嵌入 // if (subpages.length > 0) { // var err = document.createElement('div'); // err.className = 'mui-error'; // //文字描述 // var span = document.createElement('span'); // span.innerHTML = '在该浏览器下,不支持创建子页面,具体参考'; // err.appendChild(span); // var a = document.createElement('a'); // a.innerHTML = '"mui框架适用场景"'; // a.href = 'http://ask.dcloud.net.cn/article/113'; // err.appendChild(a); // document.body.appendChild(err); // console.log('在该浏览器下,不支持创建子页面'); // } } } }); window.addEventListener('preload', function() { //处理预加载部分 var webviews = $.options.preloadPages || []; $.plusReady(function() { $.each(webviews, function(index, webview) { $.createWindow($.extend(webview, { preload: true })); }); }); }); $.supportStatusbarOffset = function() { return $.os.plus && $.os.ios && parseFloat($.os.version) >= 7; }; $.ready(function() { //标识当前环境支持statusbar if($.supportStatusbarOffset()) { document.body.classList.add('mui-statusbar'); } }); })(mui); /** * mui back * @param {type} $ * @param {type} window * @returns {undefined} */ (function($, window) { /** * register back * @param {type} back * @returns {$.gestures} */ $.addBack = function(back) { return $.addAction('backs', back); }; /** * default */ $.addBack({ name: 'browser', index: 100, handle: function() { if (window.history.length > 1) { window.history.back(); return true; } return false; } }); /** * 后退 */ $.back = function() { if (typeof $.options.beforeback === 'function') { if ($.options.beforeback() === false) { return; } } $.doAction('backs'); }; window.addEventListener('tap', function(e) { var action = $.targets.action; if (action && action.classList.contains('mui-action-back')) { $.back(); $.targets.action = false; } }); window.addEventListener('swiperight', function(e) { var detail = e.detail; if ($.options.swipeBack === true && Math.abs(detail.angle) < 3) { $.back(); } }); })(mui, window); /** * mui back 5+ * @param {type} $ * @param {type} window * @returns {undefined} */ (function($, window) { if ($.os.plus && $.os.android) { $.addBack({ name: 'mui', index: 5, handle: function() { //后续重新设计此处,将back放到各个空间内部实现 //popover if ($.targets._popover && $.targets._popover.classList.contains('mui-active')) { $($.targets._popover).popover('hide'); return true; } //offcanvas var offCanvas = document.querySelector('.mui-off-canvas-wrap.mui-active'); if (offCanvas) { $(offCanvas).offCanvas('close'); return true; } var previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage(); if (previewImage && previewImage.isShown()) { previewImage.close(); return true; } //popup return $.closePopup(); } }); } //首次按下back按键的时间 $.__back__first = null; /** * 5+ back */ $.addBack({ name: '5+', index: 10, handle: function() { if (!window.plus) { return false; } var wobj = plus.webview.currentWebview(); var parent = wobj.parent(); if (parent) { parent.evalJS('mui&&mui.back();'); } else { wobj.canBack(function(e) { //by chb 暂时注释,在碰到类似popover之类的锚点的时候,需多次点击才能返回; if (e.canBack) { //webview history back window.history.back(); } else { //webview close or hide //fixed by fxy 此处不应该用opener判断,因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了,导致不能执行close if (wobj.id === plus.runtime.appid) { //首页 //首页不存在opener的情况下,后退实际上应该是退出应用; //首次按键,提示‘再按一次退出应用’ if (!$.__back__first) { $.__back__first = new Date().getTime(); mui.toast('再按一次退出应用'); setTimeout(function() { $.__back__first = null; }, 2000); } else { if (new Date().getTime() - $.__back__first < 2000) { plus.runtime.quit(); } } } else { //其他页面, if (wobj.preload) { wobj.hide("auto"); } else { //关闭页面时,需要将其打开的所有子页面全部关闭; $.closeAll(wobj); } } } }); } return true; } }); $.menu = function() { var menu = document.querySelector('.mui-action-menu'); if (menu) { $.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话,找不到当前targets的问题 $.trigger(menu, 'tap'); } else { //执行父窗口的menu if (window.plus) { var wobj = $.currentWebview; var parent = wobj.parent(); if (parent) { //又得evalJS parent.evalJS('mui&&mui.menu();'); } } } }; var __back = function() { $.back(); }; var __menu = function() { $.menu(); }; //默认监听 $.plusReady(function() { if ($.options.keyEventBind.backbutton) { plus.key.addEventListener('backbutton', __back, false); } if ($.options.keyEventBind.menubutton) { plus.key.addEventListener('menubutton', __menu, false); } }); //处理按键监听事件 $.addInit({ name: 'keyEventBind', index: 1000, handle: function() { $.plusReady(function() { //如果不为true,则移除默认监听 if (!$.options.keyEventBind.backbutton) { plus.key.removeEventListener('backbutton', __back); } if (!$.options.keyEventBind.menubutton) { plus.key.removeEventListener('menubutton', __menu); } }); } }); })(mui, window); /** * mui.init pulldownRefresh * @param {type} $ * @returns {undefined} */ (function($) { $.addInit({ name: 'pullrefresh', index: 1000, handle: function() { var options = $.options; var pullRefreshOptions = options.pullRefresh || {}; var hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback'); var hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback'); if(hasPulldown || hasPullup) { var container = pullRefreshOptions.container; if(container) { var $container = $(container); if($container.length === 1) { if($.os.plus) { //5+环境 if(hasPulldown && pullRefreshOptions.down.style == "circle") { //原生转圈 $.plusReady(function() { //这里改写$.fn.pullRefresh $.fn.pullRefresh = $.fn.pullRefresh_native; $container.pullRefresh(pullRefreshOptions); }); } else if($.os.android) { //非原生转圈,但是Android环境 $.plusReady(function() { //这里改写$.fn.pullRefresh $.fn.pullRefresh = $.fn.pullRefresh_native var webview = plus.webview.currentWebview(); if(window.__NWin_Enable__ === false) { //不支持多webview $container.pullRefresh(pullRefreshOptions); } else { if(hasPullup) { //当前页面初始化pullup var upOptions = {}; upOptions.up = pullRefreshOptions.up; upOptions.webviewId = webview.id || webview.getURL(); $container.pullRefresh(upOptions); } if(hasPulldown) { var parent = webview.parent(); var id = webview.id || webview.getURL(); if(parent) { if(!hasPullup) { //如果没有上拉加载,需要手动初始化一个默认的pullRefresh,以便当前页面容器可以调用endPulldownToRefresh等方法 $container.pullRefresh({ webviewId: id }); } var downOptions = { webviewId: id//子页面id }; downOptions.down = $.extend({}, pullRefreshOptions.down); downOptions.down.callback = '_CALLBACK'; //改写父页面的$.fn.pullRefresh parent.evalJS("mui.fn.pullRefresh=mui.fn.pullRefresh_native"); //父页面初始化pulldown parent.evalJS("mui&&mui(document.querySelector('.mui-content')).pullRefresh('" + JSON.stringify(downOptions) + "')"); } } } }); } else { //非原生转圈,iOS环境 $container.pullRefresh(pullRefreshOptions); } } else { $container.pullRefresh(pullRefreshOptions); } } } } } }); })(mui); /** * mui ajax * @param {type} $ * @returns {undefined} */ (function($, window, undefined) { var jsonType = 'application/json'; var htmlType = 'text/html'; var rscript = /)<[^<]*)*<\/script>/gi; var scriptTypeRE = /^(?:text|application)\/javascript/i; var xmlTypeRE = /^(?:text|application)\/xml/i; var blankRE = /^\s*$/; $.ajaxSettings = { type: 'GET', beforeSend: $.noop, success: $.noop, error: $.noop, complete: $.noop, context: null, xhr: function(protocol) { return new window.XMLHttpRequest(); }, accepts: { script: 'text/javascript, application/javascript, application/x-javascript', json: jsonType, xml: 'application/xml, text/xml', html: htmlType, text: 'text/plain' }, timeout: 0, processData: true, cache: true }; var ajaxBeforeSend = function(xhr, settings) { var context = settings.context if(settings.beforeSend.call(context, xhr, settings) === false) { return false; } }; var ajaxSuccess = function(data, xhr, settings) { settings.success.call(settings.context, data, 'success', xhr); ajaxComplete('success', xhr, settings); }; // type: "timeout", "error", "abort", "parsererror" var ajaxError = function(error, type, xhr, settings) { settings.error.call(settings.context, xhr, type, error); ajaxComplete(type, xhr, settings); }; // status: "success", "notmodified", "error", "timeout", "abort", "parsererror" var ajaxComplete = function(status, xhr, settings) { settings.complete.call(settings.context, xhr, status); }; var serialize = function(params, obj, traditional, scope) { var type, array = $.isArray(obj), hash = $.isPlainObject(obj); $.each(obj, function(key, value) { type = $.type(value); if(scope) { key = traditional ? scope : scope + '[' + (hash || type === 'object' || type === 'array' ? key : '') + ']'; } // handle data in serializeArray() format if(!scope && array) { params.add(value.name, value.value); } // recurse into nested objects else if(type === "array" || (!traditional && type === "object")) { serialize(params, value, traditional, key); } else { params.add(key, value); } }); }; var serializeData = function(options) { if(options.processData && options.data && typeof options.data !== "string") { var contentType = options.contentType; if(!contentType && options.headers) { contentType = options.headers['Content-Type']; } if(contentType && ~contentType.indexOf(jsonType)) { //application/json options.data = JSON.stringify(options.data); } else { options.data = $.param(options.data, options.traditional); } } if(options.data && (!options.type || options.type.toUpperCase() === 'GET')) { options.url = appendQuery(options.url, options.data); options.data = undefined; } }; var appendQuery = function(url, query) { if(query === '') { return url; } return(url + '&' + query).replace(/[&?]{1,2}/, '?'); }; var mimeToDataType = function(mime) { if(mime) { mime = mime.split(';', 2)[0]; } return mime && (mime === htmlType ? 'html' : mime === jsonType ? 'json' : scriptTypeRE.test(mime) ? 'script' : xmlTypeRE.test(mime) && 'xml') || 'text'; }; var parseArguments = function(url, data, success, dataType) { if($.isFunction(data)) { dataType = success, success = data, data = undefined; } if(!$.isFunction(success)) { dataType = success, success = undefined; } return { url: url, data: data, success: success, dataType: dataType }; }; $.ajax = function(url, options) { if(typeof url === "object") { options = url; url = undefined; } var settings = options || {}; settings.url = url || settings.url; for(var key in $.ajaxSettings) { if(settings[key] === undefined) { settings[key] = $.ajaxSettings[key]; } } serializeData(settings); var dataType = settings.dataType; if(settings.cache === false || ((!options || options.cache !== true) && ('script' === dataType))) { settings.url = appendQuery(settings.url, '_=' + $.now()); } var mime = settings.accepts[dataType && dataType.toLowerCase()]; var headers = {}; var setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value]; }; var protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol; var xhr = settings.xhr(settings); if(location.protocol === 'file:' && $.os.ios && window.webkit && window.webkit.messageHandlers && !(xhr instanceof plus.net.XMLHttpRequest)){ console.error("当前运行环境为WKWebview,需在plusReady事件触发后再调用mui.ajax,否则可能会执行失败或报Script error的错误") } var nativeSetHeader = xhr.setRequestHeader; var abortTimeout; setHeader('X-Requested-With', 'XMLHttpRequest'); setHeader('Accept', mime || '*/*'); if(!!(mime = settings.mimeType || mime)) { if(mime.indexOf(',') > -1) { mime = mime.split(',', 2)[0]; } xhr.overrideMimeType && xhr.overrideMimeType(mime); } if(settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() !== 'GET')) { setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded'); } if(settings.headers) { for(var name in settings.headers) setHeader(name, settings.headers[name]); } xhr.setRequestHeader = setHeader; xhr.onreadystatechange = function() { if(xhr.readyState === 4) { xhr.onreadystatechange = $.noop; clearTimeout(abortTimeout); var result, error = false; var isLocal = protocol === 'file:'; if((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || (xhr.status === 0 && isLocal && xhr.responseText)) { dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type')); result = xhr.responseText; try { // http://perfectionkills.com/global-eval-what-are-the-options/ if(dataType === 'script') { (1, eval)(result); } else if(dataType === 'xml') { result = xhr.responseXML; } else if(dataType === 'json') { result = blankRE.test(result) ? null : $.parseJSON(result); } } catch(e) { error = e; } if(error) { ajaxError(error, 'parsererror', xhr, settings); } else { ajaxSuccess(result, xhr, settings); } } else { var status = xhr.status ? 'error' : 'abort'; var statusText = xhr.statusText || null; if(isLocal) { status = 'error'; statusText = '404'; } ajaxError(statusText, status, xhr, settings); } } }; if(ajaxBeforeSend(xhr, settings) === false) { xhr.abort(); ajaxError(null, 'abort', xhr, settings); return xhr; } if(settings.xhrFields) { for(var name in settings.xhrFields) { xhr[name] = settings.xhrFields[name]; } } var async = 'async' in settings ? settings.async : true; xhr.open(settings.type.toUpperCase(), settings.url, async, settings.username, settings.password); for(var name in headers) { if(headers.hasOwnProperty(name)) { nativeSetHeader.apply(xhr, headers[name]); } } if(settings.timeout > 0) { abortTimeout = setTimeout(function() { xhr.onreadystatechange = $.noop; xhr.abort(); ajaxError(null, 'timeout', xhr, settings); }, settings.timeout); } xhr.send(settings.data ? settings.data : null); return xhr; }; $.param = function(obj, traditional) { var params = []; params.add = function(k, v) { this.push(encodeURIComponent(k) + '=' + encodeURIComponent(v)); }; serialize(params, obj, traditional); return params.join('&').replace(/%20/g, '+'); }; $.get = function( /* url, data, success, dataType */ ) { return $.ajax(parseArguments.apply(null, arguments)); }; $.post = function( /* url, data, success, dataType */ ) { var options = parseArguments.apply(null, arguments); options.type = 'POST'; return $.ajax(options); }; $.getJSON = function( /* url, data, success */ ) { var options = parseArguments.apply(null, arguments); options.dataType = 'json'; return $.ajax(options); }; $.fn.load = function(url, data, success) { if(!this.length) return this; var self = this, parts = url.split(/\s/), selector, options = parseArguments(url, data, success), callback = options.success; if(parts.length > 1) options.url = parts[0], selector = parts[1]; options.success = function(response) { if(selector) { var div = document.createElement('div'); div.innerHTML = response.replace(rscript, ""); var selectorDiv = document.createElement('div'); var childs = div.querySelectorAll(selector); if(childs && childs.length > 0) { for(var i = 0, len = childs.length; i < len; i++) { selectorDiv.appendChild(childs[i]); } } self[0].innerHTML = selectorDiv.innerHTML; } else { self[0].innerHTML = response; } callback && callback.apply(self, arguments); }; $.ajax(options); return this; }; })(mui, window); /** * 5+ ajax */ (function($) { var originAnchor = document.createElement('a'); originAnchor.href = window.location.href; $.plusReady(function() { $.ajaxSettings = $.extend($.ajaxSettings, { xhr: function(settings) { if (settings.crossDomain) { //强制使用plus跨域 return new plus.net.XMLHttpRequest(); } //仅在webview的url为远程文件,且ajax请求的资源不同源下使用plus.net.XMLHttpRequest if (originAnchor.protocol !== 'file:') { var urlAnchor = document.createElement('a'); urlAnchor.href = settings.url; urlAnchor.href = urlAnchor.href; settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host); if (settings.crossDomain) { return new plus.net.XMLHttpRequest(); } } if ($.os.ios && window.webkit && window.webkit.messageHandlers) { //wkwebview下同样使用5+ xhr return new plus.net.XMLHttpRequest(); } return new window.XMLHttpRequest(); } }); }); })(mui); /** * mui layout(offset[,position,width,height...]) * @param {type} $ * @param {type} window * @param {type} undefined * @returns {undefined} */ (function($, window, undefined) { $.offset = function(element) { var box = { top : 0, left : 0 }; if ( typeof element.getBoundingClientRect !== undefined) { box = element.getBoundingClientRect(); } return { top : box.top + window.pageYOffset - element.clientTop, left : box.left + window.pageXOffset - element.clientLeft }; }; })(mui, window); /** * mui animation */ (function($, window) { /** * scrollTo */ $.scrollTo = function(scrollTop, duration, callback) { duration = duration || 1000; var scroll = function(duration) { if (duration <= 0) { window.scrollTo(0, scrollTop); callback && callback(); return; } var distaince = scrollTop - window.scrollY; setTimeout(function() { window.scrollTo(0, window.scrollY + distaince / duration * 10); scroll(duration - 10); }, 16.7); }; scroll(duration); }; $.animationFrame = function(cb) { var args, isQueued, context; return function() { args = arguments; context = this; if (!isQueued) { isQueued = true; requestAnimationFrame(function() { cb.apply(context, args); isQueued = false; }); } }; }; })(mui, window); (function($) { var initializing = false, fnTest = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/; var Class = function() {}; Class.extend = function(prop) { var _super = this.prototype; initializing = true; var prototype = new this(); initializing = false; for (var name in prop) { prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn) { return function() { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; } function Class() { if (!initializing && this.init) this.init.apply(this, arguments); } Class.prototype = prototype; Class.prototype.constructor = Class; Class.extend = arguments.callee; return Class; }; $.Class = Class; })(mui); (function($, document, undefined) { var CLASS_PULL_TOP_POCKET = 'mui-pull-top-pocket'; var CLASS_PULL_BOTTOM_POCKET = 'mui-pull-bottom-pocket'; var CLASS_PULL = 'mui-pull'; var CLASS_PULL_LOADING = 'mui-pull-loading'; var CLASS_PULL_CAPTION = 'mui-pull-caption'; var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down'; var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh'; var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore'; var CLASS_ICON = 'mui-icon'; var CLASS_SPINNER = 'mui-spinner'; var CLASS_ICON_PULLDOWN = 'mui-icon-pulldown'; var CLASS_BLOCK = 'mui-block'; var CLASS_HIDDEN = 'mui-hidden'; var CLASS_VISIBILITY = 'mui-visibility'; var CLASS_LOADING_UP = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN; var CLASS_LOADING_DOWN = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN; var CLASS_LOADING = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_SPINNER; var pocketHtml = ['
    ', '
    ', '
    {contentrefresh}
    ', '
    '].join(''); var PullRefresh = { init: function(element, options) { this._super(element, $.extend(true, { scrollY: true, scrollX: false, indicators: true, deceleration: 0.003, down: { height: 50, contentinit: '下拉可以刷新', contentdown: '下拉可以刷新', contentover: '释放立即刷新', contentrefresh: '正在刷新...' }, up: { height: 50, auto: false, contentinit: '上拉显示更多', contentdown: '上拉显示更多', contentrefresh: '正在加载...', contentnomore: '没有更多数据了', duration: 300 } }, options)); }, _init: function() { this._super(); this._initPocket(); }, _initPulldownRefresh: function() { this.pulldown = true; if (this.topPocket) { this.pullPocket = this.topPocket; this.pullPocket.classList.add(CLASS_BLOCK); this.pullPocket.classList.add(CLASS_VISIBILITY); this.pullCaption = this.topCaption; this.pullLoading = this.topLoading; } }, _initPullupRefresh: function() { this.pulldown = false; if (this.bottomPocket) { this.pullPocket = this.bottomPocket; this.pullPocket.classList.add(CLASS_BLOCK); this.pullPocket.classList.add(CLASS_VISIBILITY); this.pullCaption = this.bottomCaption; this.pullLoading = this.bottomLoading; } }, _initPocket: function() { var options = this.options; if (options.down && options.down.hasOwnProperty('callback')) { this.topPocket = this.scroller.querySelector('.' + CLASS_PULL_TOP_POCKET); if (!this.topPocket) { this.topPocket = this._createPocket(CLASS_PULL_TOP_POCKET, options.down, CLASS_LOADING_DOWN); this.wrapper.insertBefore(this.topPocket, this.wrapper.firstChild); } this.topLoading = this.topPocket.querySelector('.' + CLASS_PULL_LOADING); this.topCaption = this.topPocket.querySelector('.' + CLASS_PULL_CAPTION); } if (options.up && options.up.hasOwnProperty('callback')) { this.bottomPocket = this.scroller.querySelector('.' + CLASS_PULL_BOTTOM_POCKET); if (!this.bottomPocket) { this.bottomPocket = this._createPocket(CLASS_PULL_BOTTOM_POCKET, options.up, CLASS_LOADING); this.scroller.appendChild(this.bottomPocket); } this.bottomLoading = this.bottomPocket.querySelector('.' + CLASS_PULL_LOADING); this.bottomCaption = this.bottomPocket.querySelector('.' + CLASS_PULL_CAPTION); //TODO only for h5 this.wrapper.addEventListener('scrollbottom', this); } }, _createPocket: function(clazz, options, iconClass) { var pocket = document.createElement('div'); pocket.className = clazz; pocket.innerHTML = pocketHtml.replace('{contentrefresh}', options.contentinit).replace('{icon}', iconClass); return pocket; }, _resetPullDownLoading: function() { var loading = this.pullLoading; if (loading) { this.pullCaption.innerHTML = this.options.down.contentdown; loading.style.webkitTransition = ""; loading.style.webkitTransform = ""; loading.style.webkitAnimation = ""; loading.className = CLASS_LOADING_DOWN; } }, _setCaptionClass: function(isPulldown, caption, title) { if (!isPulldown) { switch (title) { case this.options.up.contentdown: caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN; break; case this.options.up.contentrefresh: caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH break; case this.options.up.contentnomore: caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE; break; } } }, _setCaption: function(title, reset) { if (this.loading) { return; } var options = this.options; var pocket = this.pullPocket; var caption = this.pullCaption; var loading = this.pullLoading; var isPulldown = this.pulldown; var self = this; if (pocket) { if (reset) { setTimeout(function() { caption.innerHTML = self.lastTitle = title; if (isPulldown) { loading.className = CLASS_LOADING_DOWN; } else { self._setCaptionClass(false, caption, title); loading.className = CLASS_LOADING; } loading.style.webkitAnimation = ""; loading.style.webkitTransition = ""; loading.style.webkitTransform = ""; }, 100); } else { if (title !== this.lastTitle) { caption.innerHTML = title; if (isPulldown) { if (title === options.down.contentrefresh) { loading.className = CLASS_LOADING; loading.style.webkitAnimation = "spinner-spin 1s step-end infinite"; } else if (title === options.down.contentover) { loading.className = CLASS_LOADING_UP; loading.style.webkitTransition = "-webkit-transform 0.3s ease-in"; loading.style.webkitTransform = "rotate(180deg)"; } else if (title === options.down.contentdown) { loading.className = CLASS_LOADING_DOWN; loading.style.webkitTransition = "-webkit-transform 0.3s ease-in"; loading.style.webkitTransform = "rotate(0deg)"; } } else { if (title === options.up.contentrefresh) { loading.className = CLASS_LOADING + ' ' + CLASS_VISIBILITY; } else { loading.className = CLASS_LOADING + ' ' + CLASS_HIDDEN; } self._setCaptionClass(false, caption, title); } this.lastTitle = title; } } } } }; $.PullRefresh = PullRefresh; })(mui, document); (function($, window, document, undefined) { var CLASS_SCROLL = 'mui-scroll'; var CLASS_SCROLLBAR = 'mui-scrollbar'; var CLASS_INDICATOR = 'mui-scrollbar-indicator'; var CLASS_SCROLLBAR_VERTICAL = CLASS_SCROLLBAR + '-vertical'; var CLASS_SCROLLBAR_HORIZONTAL = CLASS_SCROLLBAR + '-horizontal'; var CLASS_ACTIVE = 'mui-active'; var ease = { quadratic: { style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)', fn: function(k) { return k * (2 - k); } }, circular: { style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', fn: function(k) { return Math.sqrt(1 - (--k * k)); } }, outCirc: { style: 'cubic-bezier(0.075, 0.82, 0.165, 1)' }, outCubic: { style: 'cubic-bezier(0.165, 0.84, 0.44, 1)' } } var Scroll = $.Class.extend({ init: function(element, options) { this.wrapper = this.element = element; this.scroller = this.wrapper.children[0]; this.scrollerStyle = this.scroller && this.scroller.style; this.stopped = false; this.options = $.extend(true, { scrollY: true, //是否竖向滚动 scrollX: false, //是否横向滚动 startX: 0, //初始化时滚动至x startY: 0, //初始化时滚动至y indicators: true, //是否显示滚动条 stopPropagation: false, hardwareAccelerated: true, fixedBadAndorid: false, preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/ }, momentum: true, snapX: 0.5, //横向切换距离(以当前容器宽度为基准) snap: false, //图片轮播,拖拽式选项卡 bounce: true, //是否启用回弹 bounceTime: 500, //回弹动画时间 bounceEasing: ease.outCirc, //回弹动画曲线 scrollTime: 500, scrollEasing: ease.outCubic, //轮播动画曲线 directionLockThreshold: 5, parallaxElement: false, //视差元素 parallaxRatio: 0.5 }, options); this.x = 0; this.y = 0; this.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : ''; this._init(); if (this.scroller) { this.refresh(); // if (this.options.startX !== 0 || this.options.startY !== 0) { //需要判断吗?后续根据实际情况再看看 this.scrollTo(this.options.startX, this.options.startY); // } } }, _init: function() { this._initParallax(); this._initIndicators(); this._initEvent(); }, _initParallax: function() { if (this.options.parallaxElement) { this.parallaxElement = document.querySelector(this.options.parallaxElement); this.parallaxStyle = this.parallaxElement.style; this.parallaxHeight = this.parallaxElement.offsetHeight; this.parallaxImgStyle = this.parallaxElement.querySelector('img').style; } }, _initIndicators: function() { var self = this; self.indicators = []; if (!this.options.indicators) { return; } var indicators = [], indicator; // Vertical scrollbar if (self.options.scrollY) { indicator = { el: this._createScrollBar(CLASS_SCROLLBAR_VERTICAL), listenX: false }; this.wrapper.appendChild(indicator.el); indicators.push(indicator); } // Horizontal scrollbar if (this.options.scrollX) { indicator = { el: this._createScrollBar(CLASS_SCROLLBAR_HORIZONTAL), listenY: false }; this.wrapper.appendChild(indicator.el); indicators.push(indicator); } for (var i = indicators.length; i--;) { this.indicators.push(new Indicator(this, indicators[i])); } }, _initSnap: function() { this.currentPage = {}; this.pages = []; var snaps = this.snaps; var length = snaps.length; var m = 0; var n = -1; var x = 0; var leftX = 0; var rightX = 0; var snapX = 0; for (var i = 0; i < length; i++) { var snap = snaps[i]; var offsetLeft = snap.offsetLeft; var offsetWidth = snap.offsetWidth; if (i === 0 || offsetLeft <= snaps[i - 1].offsetLeft) { m = 0; n++; } if (!this.pages[m]) { this.pages[m] = []; } x = this._getSnapX(offsetLeft); snapX = Math.round((offsetWidth) * this.options.snapX); leftX = x - snapX; rightX = x - offsetWidth + snapX; this.pages[m][n] = { x: x, leftX: leftX, rightX: rightX, pageX: m, element: snap } if (snap.classList.contains(CLASS_ACTIVE)) { this.currentPage = this.pages[m][0]; } if (x >= this.maxScrollX) { m++; } } this.options.startX = this.currentPage.x || 0; }, _getSnapX: function(offsetLeft) { return Math.max(Math.min(0, -offsetLeft + (this.wrapperWidth / 2)), this.maxScrollX); }, _gotoPage: function(index) { this.currentPage = this.pages[Math.min(index, this.pages.length - 1)][0]; for (var i = 0, len = this.snaps.length; i < len; i++) { if (i === index) { this.snaps[i].classList.add(CLASS_ACTIVE); } else { this.snaps[i].classList.remove(CLASS_ACTIVE); } } this.scrollTo(this.currentPage.x, 0, this.options.scrollTime); }, _nearestSnap: function(x) { if (!this.pages.length) { return { x: 0, pageX: 0 }; } var i = 0; var length = this.pages.length; if (x > 0) { x = 0; } else if (x < this.maxScrollX) { x = this.maxScrollX; } for (; i < length; i++) { var nearestX = this.direction === 'left' ? this.pages[i][0].leftX : this.pages[i][0].rightX; if (x >= nearestX) { return this.pages[i][0]; } } return { x: 0, pageX: 0 }; }, _initEvent: function(detach) { var action = detach ? 'removeEventListener' : 'addEventListener'; window[action]('orientationchange', this); window[action]('resize', this); this.scroller[action]('webkitTransitionEnd', this); this.wrapper[action]($.EVENT_START, this); this.wrapper[action]($.EVENT_CANCEL, this); this.wrapper[action]($.EVENT_END, this); this.wrapper[action]('drag', this); this.wrapper[action]('dragend', this); this.wrapper[action]('flick', this); this.wrapper[action]('scrollend', this); if (this.options.scrollX) { this.wrapper[action]('swiperight', this); } var segmentedControl = this.wrapper.querySelector('.mui-segmented-control'); if (segmentedControl) { //靠,这个bug排查了一下午,阻止hash跳转,一旦hash跳转会导致可拖拽选项卡的tab不见 mui(segmentedControl)[detach ? 'off' : 'on']('click', 'a', $.preventDefault); } this.wrapper[action]('scrollstart', this); this.wrapper[action]('refresh', this); }, _handleIndicatorScrollend: function() { this.indicators.map(function(indicator) { indicator.fade(); }); }, _handleIndicatorScrollstart: function() { this.indicators.map(function(indicator) { indicator.fade(1); }); }, _handleIndicatorRefresh: function() { this.indicators.map(function(indicator) { indicator.refresh(); }); }, handleEvent: function(e) { if (this.stopped) { this.resetPosition(); return; } switch (e.type) { case $.EVENT_START: this._start(e); break; case 'drag': this.options.stopPropagation && e.stopPropagation(); this._drag(e); break; case 'dragend': case 'flick': this.options.stopPropagation && e.stopPropagation(); this._flick(e); break; case $.EVENT_CANCEL: case $.EVENT_END: this._end(e); break; case 'webkitTransitionEnd': this.transitionTimer && this.transitionTimer.cancel(); this._transitionEnd(e); break; case 'scrollstart': this._handleIndicatorScrollstart(e); break; case 'scrollend': this._handleIndicatorScrollend(e); this._scrollend(e); e.stopPropagation(); break; case 'orientationchange': case 'resize': this._resize(); break; case 'swiperight': e.stopPropagation(); break; case 'refresh': this._handleIndicatorRefresh(e); break; } }, _start: function(e) { this.moved = this.needReset = false; this._transitionTime(); if (this.isInTransition) { this.needReset = true; this.isInTransition = false; var pos = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform')); this.setTranslate(Math.round(pos.x), Math.round(pos.y)); // this.resetPosition(); //reset $.trigger(this.scroller, 'scrollend', this); // e.stopPropagation(); e.preventDefault(); } this.reLayout(); $.trigger(this.scroller, 'beforescrollstart', this); }, _getDirectionByAngle: function(angle) { if (angle < -80 && angle > -100) { return 'up'; } else if (angle >= 80 && angle < 100) { return 'down'; } else if (angle >= 170 || angle <= -170) { return 'left'; } else if (angle >= -35 && angle <= 10) { return 'right'; } return null; }, _drag: function(e) { // if (this.needReset) { // e.stopPropagation(); //disable parent drag(nested scroller) // return; // } var detail = e.detail; if (this.options.scrollY || detail.direction === 'up' || detail.direction === 'down') { //如果是竖向滚动或手势方向是上或下 //ios8 hack if ($.os.ios && parseFloat($.os.version) >= 8) { //多webview时,离开当前webview会导致后续touch事件不触发 var clientY = detail.gesture.touches[0].clientY; //下拉刷新 or 上拉加载 if ((clientY + 10) > window.innerHeight || clientY < 10) { this.resetPosition(this.options.bounceTime); return; } } } var isPreventDefault = isReturn = false; var direction = this._getDirectionByAngle(detail.angle); if (detail.direction === 'left' || detail.direction === 'right') { if (this.options.scrollX) { isPreventDefault = true; if (!this.moved) { //识别角度(该角度导致轮播不灵敏) // if (direction !== 'left' && direction !== 'right') { // isReturn = true; // } else { $.gestures.session.lockDirection = true; //锁定方向 $.gestures.session.startDirection = detail.direction; // } } } else if (this.options.scrollY && !this.moved) { isReturn = true; } } else if (detail.direction === 'up' || detail.direction === 'down') { if (this.options.scrollY) { isPreventDefault = true; // if (!this.moved) { //识别角度,竖向滚动似乎没必要进行小角度验证 // if (direction !== 'up' && direction !== 'down') { // isReturn = true; // } // } if (!this.moved) { $.gestures.session.lockDirection = true; //锁定方向 $.gestures.session.startDirection = detail.direction; } } else if (this.options.scrollX && !this.moved) { isReturn = true; } } else { isReturn = true; } if (this.moved || isPreventDefault) { e.stopPropagation(); //阻止冒泡(scroll类嵌套) detail.gesture && detail.gesture.preventDefault(); } if (isReturn) { //禁止非法方向滚动 return; } if (!this.moved) { $.trigger(this.scroller, 'scrollstart', this); } else { e.stopPropagation(); //move期间阻止冒泡(scroll嵌套) } var deltaX = 0; var deltaY = 0; if (!this.moved) { //start deltaX = detail.deltaX; deltaY = detail.deltaY; } else { //move deltaX = detail.deltaX - $.gestures.session.prevTouch.deltaX; deltaY = detail.deltaY - $.gestures.session.prevTouch.deltaY; } var absDeltaX = Math.abs(detail.deltaX); var absDeltaY = Math.abs(detail.deltaY); if (absDeltaX > absDeltaY + this.options.directionLockThreshold) { deltaY = 0; } else if (absDeltaY >= absDeltaX + this.options.directionLockThreshold) { deltaX = 0; } deltaX = this.hasHorizontalScroll ? deltaX : 0; deltaY = this.hasVerticalScroll ? deltaY : 0; var newX = this.x + deltaX; var newY = this.y + deltaY; // Slow down if outside of the boundaries if (newX > 0 || newX < this.maxScrollX) { newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX; } if (newY > 0 || newY < this.maxScrollY) { newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY; } if (!this.requestAnimationFrame) { this._updateTranslate(); } this.direction = detail.deltaX > 0 ? 'right' : 'left'; this.moved = true; this.x = newX; this.y = newY; $.trigger(this.scroller, 'scroll', this); }, _flick: function(e) { // if (!this.moved || this.needReset) { // return; // } if (!this.moved) { return; } e.stopPropagation(); var detail = e.detail; this._clearRequestAnimationFrame(); if (e.type === 'dragend' && detail.flick) { //dragend return; } var newX = Math.round(this.x); var newY = Math.round(this.y); this.isInTransition = false; // reset if we are outside of the boundaries if (this.resetPosition(this.options.bounceTime)) { return; } this.scrollTo(newX, newY); // ensures that the last position is rounded if (e.type === 'dragend') { //dragend $.trigger(this.scroller, 'scrollend', this); return; } var time = 0; var easing = ''; // start momentum animation if needed if (this.options.momentum && detail.flickTime < 300) { momentumX = this.hasHorizontalScroll ? this._momentum(this.x, detail.flickDistanceX, detail.flickTime, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 }; momentumY = this.hasVerticalScroll ? this._momentum(this.y, detail.flickDistanceY, detail.flickTime, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 }; newX = momentumX.destination; newY = momentumY.destination; time = Math.max(momentumX.duration, momentumY.duration); this.isInTransition = true; } if (newX != this.x || newY != this.y) { if (newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY) { easing = ease.quadratic; } this.scrollTo(newX, newY, time, easing); return; } $.trigger(this.scroller, 'scrollend', this); // e.stopPropagation(); }, _end: function(e) { this.needReset = false; if ((!this.moved && this.needReset) || e.type === $.EVENT_CANCEL) { this.resetPosition(); } }, _transitionEnd: function(e) { if (e.target != this.scroller || !this.isInTransition) { return; } this._transitionTime(); if (!this.resetPosition(this.options.bounceTime)) { this.isInTransition = false; $.trigger(this.scroller, 'scrollend', this); } }, _scrollend: function(e) { if ((this.y === 0 && this.maxScrollY === 0) || (Math.abs(this.y) > 0 && this.y <= this.maxScrollY)) { $.trigger(this.scroller, 'scrollbottom', this); } }, _resize: function() { var that = this; clearTimeout(that.resizeTimeout); that.resizeTimeout = setTimeout(function() { that.refresh(); }, that.options.resizePolling); }, _transitionTime: function(time) { time = time || 0; this.scrollerStyle['webkitTransitionDuration'] = time + 'ms'; if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果 this.parallaxStyle['webkitTransitionDuration'] = time + 'ms'; } if (this.options.fixedBadAndorid && !time && $.os.isBadAndroid) { this.scrollerStyle['webkitTransitionDuration'] = '0.001s'; if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果 this.parallaxStyle['webkitTransitionDuration'] = '0.001s'; } } if (this.indicators) { for (var i = this.indicators.length; i--;) { this.indicators[i].transitionTime(time); } } if (time) { //自定义timer,保证webkitTransitionEnd始终触发 this.transitionTimer && this.transitionTimer.cancel(); this.transitionTimer = $.later(function() { $.trigger(this.scroller, 'webkitTransitionEnd'); }, time + 100, this); } }, _transitionTimingFunction: function(easing) { this.scrollerStyle['webkitTransitionTimingFunction'] = easing; if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果 this.parallaxStyle['webkitTransitionDuration'] = easing; } if (this.indicators) { for (var i = this.indicators.length; i--;) { this.indicators[i].transitionTimingFunction(easing); } } }, _translate: function(x, y) { this.x = x; this.y = y; }, _clearRequestAnimationFrame: function() { if (this.requestAnimationFrame) { cancelAnimationFrame(this.requestAnimationFrame); this.requestAnimationFrame = null; } }, _updateTranslate: function() { var self = this; if (self.x !== self.lastX || self.y !== self.lastY) { self.setTranslate(self.x, self.y); } self.requestAnimationFrame = requestAnimationFrame(function() { self._updateTranslate(); }); }, _createScrollBar: function(clazz) { var scrollbar = document.createElement('div'); var indicator = document.createElement('div'); scrollbar.className = CLASS_SCROLLBAR + ' ' + clazz; indicator.className = CLASS_INDICATOR; scrollbar.appendChild(indicator); if (clazz === CLASS_SCROLLBAR_VERTICAL) { this.scrollbarY = scrollbar; this.scrollbarIndicatorY = indicator; } else if (clazz === CLASS_SCROLLBAR_HORIZONTAL) { this.scrollbarX = scrollbar; this.scrollbarIndicatorX = indicator; } this.wrapper.appendChild(scrollbar); return scrollbar; }, _preventDefaultException: function(el, exceptions) { for (var i in exceptions) { if (exceptions[i].test(el[i])) { return true; } } return false; }, _reLayout: function() { if (!this.hasHorizontalScroll) { this.maxScrollX = 0; this.scrollerWidth = this.wrapperWidth; } if (!this.hasVerticalScroll) { this.maxScrollY = 0; this.scrollerHeight = this.wrapperHeight; } this.indicators.map(function(indicator) { indicator.refresh(); }); //以防slider类嵌套使用 if (this.options.snap && typeof this.options.snap === 'string') { var items = this.scroller.querySelectorAll(this.options.snap); this.itemLength = 0; this.snaps = []; for (var i = 0, len = items.length; i < len; i++) { var item = items[i]; if (item.parentNode === this.scroller) { this.itemLength++; this.snaps.push(item); } } this._initSnap(); //需要每次都_initSnap么。其实init的时候执行一次,后续resize的时候执行一次就行了吧.先这么做吧,如果影响性能,再调整 } }, _momentum: function(current, distance, time, lowerMargin, wrapperSize, deceleration) { var speed = parseFloat(Math.abs(distance) / time), destination, duration; deceleration = deceleration === undefined ? 0.0006 : deceleration; destination = current + (speed * speed) / (2 * deceleration) * (distance < 0 ? -1 : 1); duration = speed / deceleration; if (destination < lowerMargin) { destination = wrapperSize ? lowerMargin - (wrapperSize / 2.5 * (speed / 8)) : lowerMargin; distance = Math.abs(destination - current); duration = distance / speed; } else if (destination > 0) { destination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0; distance = Math.abs(current) + destination; duration = distance / speed; } return { destination: Math.round(destination), duration: duration }; }, _getTranslateStr: function(x, y) { if (this.options.hardwareAccelerated) { return 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ; } return 'translate(' + x + 'px,' + y + 'px) '; }, //API setStopped: function(stopped) { // this.stopped = !!stopped; // fixed ios双webview模式下拉刷新 if(stopped) { this.disablePullupToRefresh(); this.disablePulldownToRefresh(); } else { this.enablePullupToRefresh(); this.enablePulldownToRefresh(); } }, setTranslate: function(x, y) { this.x = x; this.y = y; this.scrollerStyle['webkitTransform'] = this._getTranslateStr(x, y); if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果 var parallaxY = y * this.options.parallaxRatio; var scale = 1 + parallaxY / ((this.parallaxHeight - parallaxY) / 2); if (scale > 1) { this.parallaxImgStyle['opacity'] = 1 - parallaxY / 100 * this.options.parallaxRatio; this.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -parallaxY) + ' scale(' + scale + ',' + scale + ')'; } else { this.parallaxImgStyle['opacity'] = 1; this.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -1) + ' scale(1,1)'; } } if (this.indicators) { for (var i = this.indicators.length; i--;) { this.indicators[i].updatePosition(); } } this.lastX = this.x; this.lastY = this.y; $.trigger(this.scroller, 'scroll', this); }, reLayout: function() { this.wrapper.offsetHeight; var paddingLeft = parseFloat($.getStyles(this.wrapper, 'padding-left')) || 0; var paddingRight = parseFloat($.getStyles(this.wrapper, 'padding-right')) || 0; var paddingTop = parseFloat($.getStyles(this.wrapper, 'padding-top')) || 0; var paddingBottom = parseFloat($.getStyles(this.wrapper, 'padding-bottom')) || 0; var clientWidth = this.wrapper.clientWidth; var clientHeight = this.wrapper.clientHeight; this.scrollerWidth = this.scroller.offsetWidth; this.scrollerHeight = this.scroller.offsetHeight; this.wrapperWidth = clientWidth - paddingLeft - paddingRight; this.wrapperHeight = clientHeight - paddingTop - paddingBottom; this.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0); this.maxScrollY = Math.min(this.wrapperHeight - this.scrollerHeight, 0); this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0; this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0; this._reLayout(); }, resetPosition: function(time) { var x = this.x, y = this.y; time = time || 0; if (!this.hasHorizontalScroll || this.x > 0) { x = 0; } else if (this.x < this.maxScrollX) { x = this.maxScrollX; } if (!this.hasVerticalScroll || this.y > 0) { y = 0; } else if (this.y < this.maxScrollY) { y = this.maxScrollY; } if (x == this.x && y == this.y) { return false; } this.scrollTo(x, y, time, this.options.scrollEasing); return true; }, _reInit: function() { var groups = this.wrapper.querySelectorAll('.' + CLASS_SCROLL); for (var i = 0, len = groups.length; i < len; i++) { if (groups[i].parentNode === this.wrapper) { this.scroller = groups[i]; break; } } this.scrollerStyle = this.scroller && this.scroller.style; }, refresh: function() { this._reInit(); this.reLayout(); $.trigger(this.scroller, 'refresh', this); this.resetPosition(); }, scrollTo: function(x, y, time, easing) { var easing = easing || ease.circular; // this.isInTransition = time > 0 && (this.lastX != x || this.lastY != y); //暂不严格判断x,y,否则会导致部分版本上不正常触发轮播 this.isInTransition = time > 0; if (this.isInTransition) { this._clearRequestAnimationFrame(); this._transitionTimingFunction(easing.style); this._transitionTime(time); this.setTranslate(x, y); } else { this.setTranslate(x, y); } }, scrollToBottom: function(time, easing) { time = time || this.options.scrollTime; this.scrollTo(0, this.maxScrollY, time, easing); }, gotoPage: function(index) { this._gotoPage(index); }, destroy: function() { this._initEvent(true); //detach delete $.data[this.wrapper.getAttribute('data-scroll')]; this.wrapper.setAttribute('data-scroll', ''); } }); //Indicator var Indicator = function(scroller, options) { this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el; this.wrapperStyle = this.wrapper.style; this.indicator = this.wrapper.children[0]; this.indicatorStyle = this.indicator.style; this.scroller = scroller; this.options = $.extend({ listenX: true, listenY: true, fade: false, speedRatioX: 0, speedRatioY: 0 }, options); this.sizeRatioX = 1; this.sizeRatioY = 1; this.maxPosX = 0; this.maxPosY = 0; if (this.options.fade) { this.wrapperStyle['webkitTransform'] = this.scroller.translateZ; this.wrapperStyle['webkitTransitionDuration'] = this.options.fixedBadAndorid && $.os.isBadAndroid ? '0.001s' : '0ms'; this.wrapperStyle.opacity = '0'; } } Indicator.prototype = { handleEvent: function(e) { }, transitionTime: function(time) { time = time || 0; this.indicatorStyle['webkitTransitionDuration'] = time + 'ms'; if (this.scroller.options.fixedBadAndorid && !time && $.os.isBadAndroid) { this.indicatorStyle['webkitTransitionDuration'] = '0.001s'; } }, transitionTimingFunction: function(easing) { this.indicatorStyle['webkitTransitionTimingFunction'] = easing; }, refresh: function() { this.transitionTime(); if (this.options.listenX && !this.options.listenY) { this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none'; } else if (this.options.listenY && !this.options.listenX) { this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none'; } else { this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none'; } this.wrapper.offsetHeight; // force refresh if (this.options.listenX) { this.wrapperWidth = this.wrapper.clientWidth; this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8); this.indicatorStyle.width = this.indicatorWidth + 'px'; this.maxPosX = this.wrapperWidth - this.indicatorWidth; this.minBoundaryX = 0; this.maxBoundaryX = this.maxPosX; this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX)); } if (this.options.listenY) { this.wrapperHeight = this.wrapper.clientHeight; this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8); this.indicatorStyle.height = this.indicatorHeight + 'px'; this.maxPosY = this.wrapperHeight - this.indicatorHeight; this.minBoundaryY = 0; this.maxBoundaryY = this.maxPosY; this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY)); } this.updatePosition(); }, updatePosition: function() { var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0, y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0; if (x < this.minBoundaryX) { this.width = Math.max(this.indicatorWidth + x, 8); this.indicatorStyle.width = this.width + 'px'; x = this.minBoundaryX; } else if (x > this.maxBoundaryX) { this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8); this.indicatorStyle.width = this.width + 'px'; x = this.maxPosX + this.indicatorWidth - this.width; } else if (this.width != this.indicatorWidth) { this.width = this.indicatorWidth; this.indicatorStyle.width = this.width + 'px'; } if (y < this.minBoundaryY) { this.height = Math.max(this.indicatorHeight + y * 3, 8); this.indicatorStyle.height = this.height + 'px'; y = this.minBoundaryY; } else if (y > this.maxBoundaryY) { this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8); this.indicatorStyle.height = this.height + 'px'; y = this.maxPosY + this.indicatorHeight - this.height; } else if (this.height != this.indicatorHeight) { this.height = this.indicatorHeight; this.indicatorStyle.height = this.height + 'px'; } this.x = x; this.y = y; this.indicatorStyle['webkitTransform'] = this.scroller._getTranslateStr(x, y); }, fade: function(val, hold) { if (hold && !this.visible) { return; } clearTimeout(this.fadeTimeout); this.fadeTimeout = null; var time = val ? 250 : 500, delay = val ? 0 : 300; val = val ? '1' : '0'; this.wrapperStyle['webkitTransitionDuration'] = time + 'ms'; this.fadeTimeout = setTimeout((function(val) { this.wrapperStyle.opacity = val; this.visible = +val; }).bind(this, val), delay); } }; $.Scroll = Scroll; $.fn.scroll = function(options) { var scrollApis = []; this.each(function() { var scrollApi = null; var self = this; var id = self.getAttribute('data-scroll'); if (!id) { id = ++$.uuid; var _options = $.extend({}, options); if (self.classList.contains('mui-segmented-control')) { _options = $.extend(_options, { scrollY: false, scrollX: true, indicators: false, snap: '.mui-control-item' }); } $.data[id] = scrollApi = new Scroll(self, _options); self.setAttribute('data-scroll', id); } else { scrollApi = $.data[id]; } scrollApis.push(scrollApi); }); return scrollApis.length === 1 ? scrollApis[0] : scrollApis; }; })(mui, window, document); (function($, window, document, undefined) { var CLASS_VISIBILITY = 'mui-visibility'; var CLASS_HIDDEN = 'mui-hidden'; var PullRefresh = $.Scroll.extend($.extend({ handleEvent: function(e) { this._super(e); if (e.type === 'scrollbottom') { if (e.target === this.scroller) { this._scrollbottom(); } } }, _scrollbottom: function() { if (!this.pulldown && !this.loading) { this.pulldown = false; this._initPullupRefresh(); this.pullupLoading(); } }, _start: function(e) { //仅下拉刷新在start阻止默认事件 if (e.touches && e.touches.length && e.touches[0].clientX > 30) { e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault(); } if (!this.loading) { this.pulldown = this.pullPocket = this.pullCaption = this.pullLoading = false } this._super(e); }, _drag: function(e) { if (this.y >= 0 && this.disablePulldown && e.detail.direction === 'down') { //禁用下拉刷新 return; } this._super(e); if (!this.pulldown && !this.loading && this.topPocket && e.detail.direction === 'down' && this.y >= 0) { this._initPulldownRefresh(); } if (this.pulldown) { this._setCaption(this.y > this.options.down.height ? this.options.down.contentover : this.options.down.contentdown); } }, _reLayout: function() { this.hasVerticalScroll = true; this._super(); }, //API resetPosition: function(time) { if (this.pulldown && !this.disablePulldown) { if (this.y >= this.options.down.height) { this.pulldownLoading(undefined, time || 0); return true; } else { !this.loading && this.topPocket.classList.remove(CLASS_VISIBILITY); } } return this._super(time); }, pulldownLoading: function(y, time) { typeof y === 'undefined' && (y = this.options.down.height); //默认高度 this.scrollTo(0, y, time, this.options.bounceEasing); if (this.loading) { return; } // if (!this.pulldown) { this._initPulldownRefresh(); // } this._setCaption(this.options.down.contentrefresh); this.loading = true; this.indicators.map(function(indicator) { indicator.fade(0); }); var callback = this.options.down.callback; callback && callback.call(this); }, endPulldownToRefresh: function() { var self = this; if (self.topPocket && self.loading && this.pulldown) { self.scrollTo(0, 0, self.options.bounceTime, self.options.bounceEasing); self.loading = false; self._setCaption(self.options.down.contentdown, true); setTimeout(function() { self.loading || self.topPocket.classList.remove(CLASS_VISIBILITY); }, 350); } }, pullupLoading: function(callback, x, time) { x = x || 0; this.scrollTo(x, this.maxScrollY, time, this.options.bounceEasing); if (this.loading) { return; } this._initPullupRefresh(); this._setCaption(this.options.up.contentrefresh); this.indicators.map(function(indicator) { indicator.fade(0); }); this.loading = true; callback = callback || this.options.up.callback; callback && callback.call(this); }, endPullupToRefresh: function(finished) { var self = this; if (self.bottomPocket) { // && self.loading && !this.pulldown self.loading = false; if (finished) { this.finished = true; self._setCaption(self.options.up.contentnomore); // self.bottomPocket.classList.remove(CLASS_VISIBILITY); // self.bottomPocket.classList.add(CLASS_HIDDEN); self.wrapper.removeEventListener('scrollbottom', self); } else { self._setCaption(self.options.up.contentdown); // setTimeout(function() { self.loading || self.bottomPocket.classList.remove(CLASS_VISIBILITY); // }, 300); } } }, disablePullupToRefresh: function() { this._initPullupRefresh(); this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN; this.wrapper.removeEventListener('scrollbottom', this); }, disablePulldownToRefresh: function() { this._initPulldownRefresh(); this.topPocket.className = 'mui-pull-top-pocket' + ' ' + CLASS_HIDDEN; this.disablePulldown = true; }, enablePulldownToRefresh: function() { this._initPulldownRefresh(); this.topPocket.classList.remove(CLASS_HIDDEN); this._setCaption(this.options.down.contentdown); this.disablePulldown = false; }, enablePullupToRefresh: function() { this._initPullupRefresh(); this.bottomPocket.classList.remove(CLASS_HIDDEN); this._setCaption(this.options.up.contentdown); this.wrapper.addEventListener('scrollbottom', this); }, refresh: function(isReset) { if (isReset && this.finished) { this.enablePullupToRefresh(); this.finished = false; } this._super(); }, }, $.PullRefresh)); $.fn.pullRefresh = function(options) { if (this.length === 1) { var self = this[0]; var pullRefreshApi = null; var id = self.getAttribute('data-pullrefresh'); if (!id && typeof options === 'undefined') { return false; } options = options || {}; if (!id) { id = ++$.uuid; $.data[id] = pullRefreshApi = new PullRefresh(self, options); self.setAttribute('data-pullrefresh', id); } else { pullRefreshApi = $.data[id]; } if (options.down && options.down.auto) { //如果设置了auto,则自动下拉一次 pullRefreshApi.pulldownLoading(options.down.autoY); } else if (options.up && options.up.auto) { //如果设置了auto,则自动上拉一次 pullRefreshApi.pullupLoading(); } //暂不提供这种调用方式吧 // if (typeof options === 'string') { // var methodValue = pullRefreshApi[options].apply(pullRefreshApi, $.slice.call(arguments, 1)); // if (methodValue !== undefined) { // return methodValue; // } // } return pullRefreshApi; } }; })(mui, window, document); /** * snap 重构 * @param {Object} $ * @param {Object} window */ (function($, window) { var CLASS_SLIDER = 'mui-slider'; var CLASS_SLIDER_GROUP = 'mui-slider-group'; var CLASS_SLIDER_LOOP = 'mui-slider-loop'; var CLASS_SLIDER_INDICATOR = 'mui-slider-indicator'; var CLASS_ACTION_PREVIOUS = 'mui-action-previous'; var CLASS_ACTION_NEXT = 'mui-action-next'; var CLASS_SLIDER_ITEM = 'mui-slider-item'; var CLASS_ACTIVE = 'mui-active'; var SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM; var SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR; var SELECTOR_SLIDER_PROGRESS_BAR = '.mui-slider-progress-bar'; var Slider = $.Slider = $.Scroll.extend({ init: function(element, options) { this._super(element, $.extend(true, { fingers: 1, interval: 0, //设置为0,则不定时轮播 scrollY: false, scrollX: true, indicators: false, scrollTime: 1000, startX: false, slideTime: 0, //滑动动画时间 snap: SELECTOR_SLIDER_ITEM }, options)); if (this.options.startX) { // $.trigger(this.wrapper, 'scrollend', this); } }, _init: function() { this._reInit(); if (this.scroller) { this.scrollerStyle = this.scroller.style; this.progressBar = this.wrapper.querySelector(SELECTOR_SLIDER_PROGRESS_BAR); if (this.progressBar) { this.progressBarWidth = this.progressBar.offsetWidth; this.progressBarStyle = this.progressBar.style; } //忘记这个代码是干什么的了? // this.x = this._getScroll(); // if (this.options.startX === false) { // this.options.startX = this.x; // } //根据active修正startX this._super(); this._initTimer(); } }, _triggerSlide: function() { var self = this; self.isInTransition = false; var page = self.currentPage; self.slideNumber = self._fixedSlideNumber(); if (self.loop) { if (self.slideNumber === 0) { self.setTranslate(self.pages[1][0].x, 0); } else if (self.slideNumber === self.itemLength - 3) { self.setTranslate(self.pages[self.itemLength - 2][0].x, 0); } } if (self.lastSlideNumber != self.slideNumber) { self.lastSlideNumber = self.slideNumber; self.lastPage = self.currentPage; $.trigger(self.wrapper, 'slide', { slideNumber: self.slideNumber }); } self._initTimer(); }, _handleSlide: function(e) { var self = this; if (e.target !== self.wrapper) { return; } var detail = e.detail; detail.slideNumber = detail.slideNumber || 0; var temps = self.scroller.querySelectorAll(SELECTOR_SLIDER_ITEM); var items = []; for (var i = 0, len = temps.length; i < len; i++) { var item = temps[i]; if (item.parentNode === self.scroller) { items.push(item); } } var _slideNumber = detail.slideNumber; if (self.loop) { _slideNumber += 1; } if (!self.wrapper.classList.contains('mui-segmented-control')) { for (var i = 0, len = items.length; i < len; i++) { var item = items[i]; if (item.parentNode === self.scroller) { if (i === _slideNumber) { item.classList.add(CLASS_ACTIVE); } else { item.classList.remove(CLASS_ACTIVE); } } } } var indicatorWrap = self.wrapper.querySelector('.mui-slider-indicator'); if (indicatorWrap) { if (indicatorWrap.getAttribute('data-scroll')) { //scroll $(indicatorWrap).scroll().gotoPage(detail.slideNumber); } var indicators = indicatorWrap.querySelectorAll('.mui-indicator'); if (indicators.length > 0) { //图片轮播 for (var i = 0, len = indicators.length; i < len; i++) { indicators[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE); } } else { var number = indicatorWrap.querySelector('.mui-number span'); if (number) { //图文表格 number.innerText = (detail.slideNumber + 1); } else { //segmented controls var controlItems = indicatorWrap.querySelectorAll('.mui-control-item'); for (var i = 0, len = controlItems.length; i < len; i++) { controlItems[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE); } } } } e.stopPropagation(); }, _handleTabShow: function(e) { var self = this; self.gotoItem((e.detail.tabNumber || 0), self.options.slideTime); }, _handleIndicatorTap: function(event) { var self = this; var target = event.target; if (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) { self[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem'](); event.stopPropagation(); } }, _initEvent: function(detach) { var self = this; self._super(detach); var action = detach ? 'removeEventListener' : 'addEventListener'; self.wrapper[action]('slide', this); self.wrapper[action]($.eventName('shown', 'tab'), this); }, handleEvent: function(e) { this._super(e); switch (e.type) { case 'slide': this._handleSlide(e); break; case $.eventName('shown', 'tab'): if (~this.snaps.indexOf(e.target)) { //避免嵌套监听错误的tab show this._handleTabShow(e); } break; } }, _scrollend: function(e) { this._super(e); this._triggerSlide(e); }, _drag: function(e) { this._super(e); var direction = e.detail.direction; if (direction === 'left' || direction === 'right') { //拖拽期间取消定时 var slidershowTimer = this.wrapper.getAttribute('data-slidershowTimer'); slidershowTimer && window.clearTimeout(slidershowTimer); e.stopPropagation(); } }, _initTimer: function() { var self = this; var slider = self.wrapper; var interval = self.options.interval; var slidershowTimer = slider.getAttribute('data-slidershowTimer'); slidershowTimer && window.clearTimeout(slidershowTimer); if (interval) { slidershowTimer = window.setTimeout(function() { if (!slider) { return; } //仅slider显示状态进行自动轮播 if (!!(slider.offsetWidth || slider.offsetHeight)) { self.nextItem(true); //下一个 } self._initTimer(); }, interval); slider.setAttribute('data-slidershowTimer', slidershowTimer); } }, _fixedSlideNumber: function(page) { page = page || this.currentPage; var slideNumber = page.pageX; if (this.loop) { if (page.pageX === 0) { slideNumber = this.itemLength - 3; } else if (page.pageX === (this.itemLength - 1)) { slideNumber = 0; } else { slideNumber = page.pageX - 1; } } return slideNumber; }, _reLayout: function() { this.hasHorizontalScroll = true; this.loop = this.scroller.classList.contains(CLASS_SLIDER_LOOP); this._super(); }, _getScroll: function() { var result = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform')); return result ? result.x : 0; }, _transitionEnd: function(e) { if (e.target !== this.scroller || !this.isInTransition) { return; } this._transitionTime(); this.isInTransition = false; $.trigger(this.wrapper, 'scrollend', this); }, _flick: function(e) { if (!this.moved) { //无moved return; } var detail = e.detail; var direction = detail.direction; this._clearRequestAnimationFrame(); this.isInTransition = true; // if (direction === 'up' || direction === 'down') { // this.resetPosition(this.options.bounceTime); // return; // } if (e.type === 'flick') { if (detail.deltaTime < 200) { //flick,太容易触发,额外校验一下deltaTime this.x = this._getPage((this.slideNumber + (direction === 'right' ? -1 : 1)), true).x; } this.resetPosition(this.options.bounceTime); } else if (e.type === 'dragend' && !detail.flick) { this.resetPosition(this.options.bounceTime); } e.stopPropagation(); }, _initSnap: function() { this.scrollerWidth = this.itemLength * this.scrollerWidth; this.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0); this._super(); if (!this.currentPage.x) { //当slider处于隐藏状态时,导致snap计算是错误的,临时先这么判断一下,后续要考虑解决所有scroll在隐藏状态下初始化属性不正确的问题 var currentPage = this.pages[this.loop ? 1 : 0]; currentPage = currentPage || this.pages[0]; if (!currentPage) { return; } this.currentPage = currentPage[0]; this.slideNumber = 0; this.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? 0 : this.lastSlideNumber; } else { this.slideNumber = this._fixedSlideNumber(); this.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? this.slideNumber : this.lastSlideNumber; } this.options.startX = this.currentPage.x || 0; }, _getSnapX: function(offsetLeft) { return Math.max(-offsetLeft, this.maxScrollX); }, _getPage: function(slideNumber, isFlick) { if (this.loop) { if (slideNumber > (this.itemLength - (isFlick ? 2 : 3))) { slideNumber = 1; time = 0; } else if (slideNumber < (isFlick ? -1 : 0)) { slideNumber = this.itemLength - 2; time = 0; } else { slideNumber += 1; } } else { if (!isFlick) { if (slideNumber > (this.itemLength - 1)) { slideNumber = 0; time = 0; } else if (slideNumber < 0) { slideNumber = this.itemLength - 1; time = 0; } } slideNumber = Math.min(Math.max(0, slideNumber), this.itemLength - 1); } return this.pages[slideNumber][0]; }, _gotoItem: function(slideNumber, time) { this.currentPage = this._getPage(slideNumber, true); //此处传true。可保证程序切换时,动画与人手操作一致(第一张,最后一张的切换动画) this.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing); if (time === 0) { $.trigger(this.wrapper, 'scrollend', this); } }, //API setTranslate: function(x, y) { this._super(x, y); var progressBar = this.progressBar; if (progressBar) { this.progressBarStyle.webkitTransform = this._getTranslateStr((-x * (this.progressBarWidth / this.wrapperWidth)), 0); } }, resetPosition: function(time) { time = time || 0; if (this.x > 0) { this.x = 0; } else if (this.x < this.maxScrollX) { this.x = this.maxScrollX; } this.currentPage = this._nearestSnap(this.x); this.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing); return true; }, gotoItem: function(slideNumber, time) { this._gotoItem(slideNumber, typeof time === 'undefined' ? this.options.scrollTime : time); }, nextItem: function() { this._gotoItem(this.slideNumber + 1, this.options.scrollTime); }, prevItem: function() { this._gotoItem(this.slideNumber - 1, this.options.scrollTime); }, getSlideNumber: function() { return this.slideNumber || 0; }, _reInit: function() { var groups = this.wrapper.querySelectorAll('.' + CLASS_SLIDER_GROUP); for (var i = 0, len = groups.length; i < len; i++) { if (groups[i].parentNode === this.wrapper) { this.scroller = groups[i]; break; } } this.scrollerStyle = this.scroller && this.scroller.style; if (this.progressBar) { this.progressBarWidth = this.progressBar.offsetWidth; this.progressBarStyle = this.progressBar.style; } }, refresh: function(options) { if (options) { $.extend(this.options, options); this._super(); this._initTimer(); } else { this._super(); } }, destroy: function() { this._initEvent(true); //detach delete $.data[this.wrapper.getAttribute('data-slider')]; this.wrapper.setAttribute('data-slider', ''); } }); $.fn.slider = function(options) { var slider = null; this.each(function() { var sliderElement = this; if (!this.classList.contains(CLASS_SLIDER)) { sliderElement = this.querySelector('.' + CLASS_SLIDER); } if (sliderElement && sliderElement.querySelector(SELECTOR_SLIDER_ITEM)) { var id = sliderElement.getAttribute('data-slider'); if (!id) { id = ++$.uuid; $.data[id] = slider = new Slider(sliderElement, options); sliderElement.setAttribute('data-slider', id); } else { slider = $.data[id]; if (slider && options) { slider.refresh(options); } } } }); return slider; }; $.ready(function() { // setTimeout(function() { $('.mui-slider').slider(); $('.mui-scroll-wrapper.mui-slider-indicator.mui-segmented-control').scroll({ scrollY: false, scrollX: true, indicators: false, snap: '.mui-control-item' }); // }, 500); //临时处理slider宽度计算不正确的问题(初步确认是scrollbar导致的) }); })(mui, window); /** * pullRefresh 5+ * @param {type} $ * @returns {undefined} */ (function($, document) { if (!($.os.plus)) { //仅在5+android支持多webview的使用 return; } $.plusReady(function() { if (window.__NWin_Enable__ === false) { //不支持多webview,则不用5+下拉刷新 return; } var CLASS_PLUS_PULLREFRESH = 'mui-plus-pullrefresh'; var CLASS_VISIBILITY = 'mui-visibility'; var CLASS_HIDDEN = 'mui-hidden'; var CLASS_BLOCK = 'mui-block'; var CLASS_PULL_CAPTION = 'mui-pull-caption'; var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down'; var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh'; var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore'; var PlusPullRefresh = $.Class.extend({ init: function(element, options) { this.element = element; this.options = options; this.wrapper = this.scroller = element; this._init(); this._initPulldownRefreshEvent(); }, _init: function() { var self = this; //document.addEventListener('plusscrollbottom', this); window.addEventListener('dragup', self); document.addEventListener("plusscrollbottom", self); self.scrollInterval = window.setInterval(function() { if (self.isScroll && !self.loading) { if (window.pageYOffset + window.innerHeight + 10 >= document.documentElement.scrollHeight) { self.isScroll = false; //放在这里是因为快速滚动的话,有可能检测时,还没到底,所以只要有滚动,没到底之前一直检测高度变化 if (self.bottomPocket) { self.pullupLoading(); } } } }, 100); }, _initPulldownRefreshEvent: function() { var self = this; $.plusReady(function() { if (self.options.down.style == "circle") { //单webview、原生转圈 self.options.webview = plus.webview.currentWebview(); self.options.webview.setPullToRefresh({ support: true, color: self.options.down.color || '#2BD009', height: self.options.down.height || '50px', range: self.options.down.range || '100px', style: 'circle', offset: self.options.down.offset || '0px' }, function() { self.options.down.callback(); }); } else if (self.topPocket && self.options.webviewId) { var webview = plus.webview.getWebviewById(self.options.webviewId); //子窗口 if (!webview) { return; } self.options.webview = webview; var downOptions = self.options.down; var height = downOptions.height; webview.addEventListener('close', function() { var attrWebviewId = self.options.webviewId && self.options.webviewId.replace(/\//g, "_"); //替换所有"/" self.element.removeAttribute('data-pullrefresh-plus-' + attrWebviewId); }); webview.addEventListener("dragBounce", function(e) { if (!self.pulldown) { self._initPulldownRefresh(); } else { self.pullPocket.classList.add(CLASS_BLOCK); } switch (e.status) { case "beforeChangeOffset": //下拉可刷新状态 self._setCaption(downOptions.contentdown); break; case "afterChangeOffset": //松开可刷新状态 self._setCaption(downOptions.contentover); break; case "dragEndAfterChangeOffset": //正在刷新状态 //执行下拉刷新所在webview的回调函数 webview.evalJS("window.mui&&mui.options.pullRefresh.down.callback()"); self._setCaption(downOptions.contentrefresh); break; default: break; } }, false); webview.setBounce({ position: { top: height * 2 + 'px' }, changeoffset: { top: height + 'px' } }); } }); }, handleEvent: function(e) { var self = this; if (self.stopped) { return; } self.isScroll = false; if (e.type === 'dragup' || e.type === 'plusscrollbottom') { self.isScroll = true; setTimeout(function() { self.isScroll = false; }, 1000); } } }).extend($.extend({ setStopped: function(stopped) { //该方法是子页面调用的 this.stopped = !!stopped; // TODO 此处需要设置当前webview的bounce为none,目前5+有BUG if (this.stopped) { this.disablePullupToRefresh(); this.disablePulldownToRefresh(); } else { this.enablePullupToRefresh(); this.enablePulldownToRefresh(); } }, beginPulldown: function() { var self = this; $.plusReady(function() { //这里延时的目的是为了保证下拉刷新组件初始化完成,后续应该做成有状态的 setTimeout(function() { if (self.options.down.style == "circle") { //单webview下拉刷新 plus.webview.currentWebview().beginPullToRefresh(); } else { //双webview模式 var webview = self.options.webview; if (webview) { webview.setBounce({ offset: { top: self.options.down.height + "px" } }); } } }, 15); }.bind(this)); }, pulldownLoading: function() { //该方法是子页面调用的,兼容老的历史API this.beginPulldown(); }, _pulldownLoading: function() { //该方法是父页面调用的 var self = this; $.plusReady(function() { var childWebview = plus.webview.getWebviewById(self.options.webviewId); childWebview && childWebview.setBounce({ offset: { top: self.options.down.height + "px" } }); }); }, endPulldown: function() { var _wv = plus.webview.currentWebview(); //双webview的下拉刷新,需要修改父窗口提示信息 if (_wv.parent() && this.options.down.style !== "circle") { _wv.parent().evalJS("mui&&mui(document.querySelector('.mui-content')).pullRefresh('" + JSON.stringify({ webviewId: _wv.id }) + "')._endPulldownToRefresh()"); } else { _wv.endPullToRefresh(); } }, endPulldownToRefresh: function() { //该方法是子页面调用的,兼容老的历史API this.endPulldown(); }, _endPulldownToRefresh: function() { //该方法是父页面调用的 var self = this; if (self.topPocket && self.options.webview) { self.options.webview.endPullToRefresh(); //下拉刷新所在webview回弹 self.loading = false; self._setCaption(self.options.down.contentdown, true); setTimeout(function() { self.loading || self.topPocket.classList.remove(CLASS_BLOCK); }, 350); } }, beginPullup: function(callback) { //开始上拉加载 var self = this; if (self.isLoading) return; self.isLoading = true; if (self.pulldown !== false) { self._initPullupRefresh(); } else { this.pullPocket.classList.add(CLASS_BLOCK); } setTimeout(function() { self.pullLoading.classList.add(CLASS_VISIBILITY); self.pullLoading.classList.remove(CLASS_HIDDEN); self.pullCaption.innerHTML = ''; //修正5+里边第一次加载时,文字显示的bug(还会显示出来个“多”,猜测应该是渲染问题导致的) self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH; self.pullCaption.innerHTML = self.options.up.contentrefresh; callback = callback || self.options.up.callback; callback && callback.call(self); }, 300); }, pullupLoading: function(callback) { //兼容老的API this.beginPullup(callback); }, endPullup: function(finished) { //上拉加载结束 var self = this; if (self.pullLoading) { self.pullLoading.classList.remove(CLASS_VISIBILITY); self.pullLoading.classList.add(CLASS_HIDDEN); self.isLoading = false; if (finished) { self.finished = true; self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE; self.pullCaption.innerHTML = self.options.up.contentnomore; //取消5+的plusscrollbottom事件 document.removeEventListener('plusscrollbottom', self); window.removeEventListener('dragup', self); } else { //初始化时隐藏,后续不再隐藏 self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN; self.pullCaption.innerHTML = self.options.up.contentdown; } } }, endPullupToRefresh: function(finished) { //上拉加载结束,兼容老的API this.endPullup(finished); }, disablePulldownToRefresh: function() { var webview = plus.webview.currentWebview(); if (this.options.down.style && this.options.down.style == 'circle') { // 单webview模式禁止原生下拉刷新 this.options.webview.setPullToRefresh({ support: false, style: 'circle' }); } else { // 双webview模式禁止下拉刷新 webview.setStyle({ bounce: 'none' }); webview.setBounce({ position: { top: 'none' } }); } }, enablePulldownToRefresh: function() { var self = this, webview = plus.webview.currentWebview(), height = this.options.down.height; // 单webview模式禁止原生下拉刷新 if (this.options.down.style && this.options.down.style == 'circle') { webview.setPullToRefresh({ support: true, height: height || '50px', range: self.options.down.range || '100px', style: 'circle', offset: self.options.down.offset || '0px' }); } else { // 重新初始化双webview模式下拉刷新 webview.setStyle({ bounce: 'vertical' }); webview.setBounce({ position: { top: height * 2 + 'px' }, changeoffset: { top: height + 'px' } }); } }, disablePullupToRefresh: function() { this._initPullupRefresh(); this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN; window.removeEventListener('dragup', this); }, enablePullupToRefresh: function() { this._initPullupRefresh(); this.bottomPocket.classList.remove(CLASS_HIDDEN); this.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN; this.pullCaption.innerHTML = this.options.up.contentdown; document.addEventListener("plusscrollbottom", this); window.addEventListener('dragup', this); }, scrollTo: function(x, y, time) { $.scrollTo(y, time); }, scrollToBottom: function(time) { $.scrollTo(document.documentElement.scrollHeight, time); }, refresh: function(isReset) { if (isReset && this.finished) { this.enablePullupToRefresh(); this.finished = false; } } }, $.PullRefresh)); //override h5 pullRefresh $.fn.pullRefresh_native = function(options) { var self; if (this.length === 0) { self = document.createElement('div'); self.className = 'mui-content'; document.body.appendChild(self); } else { self = this[0]; } var args = options; //一个父需要支持多个子下拉刷新 options = options || {} if (typeof options === 'string') { options = $.parseJSON(options); }; !options.webviewId && (options.webviewId = (plus.webview.currentWebview().id || plus.webview.currentWebview().getURL())); var pullRefreshApi = null; var attrWebviewId = options.webviewId && options.webviewId.replace(/\//g, "_"); //替换所有"/" var id = self.getAttribute('data-pullrefresh-plus-' + attrWebviewId); if (!id && typeof args === 'undefined') { return false; } if (!id) { //避免重复初始化5+ pullrefresh id = ++$.uuid; self.setAttribute('data-pullrefresh-plus-' + attrWebviewId, id); document.body.classList.add(CLASS_PLUS_PULLREFRESH); $.data[id] = pullRefreshApi = new PlusPullRefresh(self, options); } else { pullRefreshApi = $.data[id]; } if (options.down && options.down.auto) { //如果设置了auto,则自动下拉一次 //pullRefreshApi._pulldownLoading(); //parent webview pullRefreshApi.beginPulldown(); } else if (options.up && options.up.auto) { //如果设置了auto,则自动上拉一次 pullRefreshApi.beginPullup(); } return pullRefreshApi; }; }); })(mui, document); /** * off-canvas * @param {type} $ * @param {type} window * @param {type} document * @param {type} action * @returns {undefined} */ (function($, window, document, name) { var CLASS_OFF_CANVAS_LEFT = 'mui-off-canvas-left'; var CLASS_OFF_CANVAS_RIGHT = 'mui-off-canvas-right'; var CLASS_ACTION_BACKDROP = 'mui-off-canvas-backdrop'; var CLASS_OFF_CANVAS_WRAP = 'mui-off-canvas-wrap'; var CLASS_SLIDE_IN = 'mui-slide-in'; var CLASS_ACTIVE = 'mui-active'; var CLASS_TRANSITIONING = 'mui-transitioning'; var SELECTOR_INNER_WRAP = '.mui-inner-wrap'; var OffCanvas = $.Class.extend({ init: function(element, options) { this.wrapper = this.element = element; this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP); this.classList = this.wrapper.classList; if (this.scroller) { this.options = $.extend(true, { dragThresholdX: 10, scale: 0.8, opacity: 0.1, preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/ }, }, options); document.body.classList.add('mui-fullscreen'); //fullscreen this.refresh(); this.initEvent(); } }, _preventDefaultException: function(el, exceptions) { for (var i in exceptions) { if (exceptions[i].test(el[i])) { return true; } } return false; }, refresh: function(offCanvas) { // offCanvas && !offCanvas.classList.contains(CLASS_ACTIVE) && this.classList.remove(CLASS_ACTIVE); this.slideIn = this.classList.contains(CLASS_SLIDE_IN); this.scalable = this.classList.contains('mui-scalable') && !this.slideIn; this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP); // !offCanvas && this.scroller.classList.remove(CLASS_TRANSITIONING); // !offCanvas && this.scroller.setAttribute('style', ''); this.offCanvasLefts = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_LEFT); this.offCanvasRights = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_RIGHT); if (offCanvas) { if (offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) { this.offCanvasLeft = offCanvas; } else if (offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) { this.offCanvasRight = offCanvas; } } else { this.offCanvasRight = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT); this.offCanvasLeft = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT); } this.offCanvasRightWidth = this.offCanvasLeftWidth = 0; this.offCanvasLeftSlideIn = this.offCanvasRightSlideIn = false; if (this.offCanvasRight) { this.offCanvasRightWidth = this.offCanvasRight.offsetWidth; this.offCanvasRightSlideIn = this.slideIn && (this.offCanvasRight.parentNode === this.wrapper); // this.offCanvasRight.classList.remove(CLASS_TRANSITIONING); // this.offCanvasRight.classList.remove(CLASS_ACTIVE); // this.offCanvasRight.setAttribute('style', ''); } if (this.offCanvasLeft) { this.offCanvasLeftWidth = this.offCanvasLeft.offsetWidth; this.offCanvasLeftSlideIn = this.slideIn && (this.offCanvasLeft.parentNode === this.wrapper); // this.offCanvasLeft.classList.remove(CLASS_TRANSITIONING); // this.offCanvasLeft.classList.remove(CLASS_ACTIVE); // this.offCanvasLeft.setAttribute('style', ''); } this.backdrop = this.scroller.querySelector('.' + CLASS_ACTION_BACKDROP); this.options.dragThresholdX = this.options.dragThresholdX || 10; this.visible = false; this.startX = null; this.lastX = null; this.offsetX = null; this.lastTranslateX = null; }, handleEvent: function(e) { switch (e.type) { case $.EVENT_START: e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault(); break; case 'webkitTransitionEnd': //有个bug需要处理,需要考虑假设没有触发webkitTransitionEnd的情况 if (e.target === this.scroller) { this._dispatchEvent(); } break; case 'drag': var detail = e.detail; if (!this.startX) { this.startX = detail.center.x; this.lastX = this.startX; } else { this.lastX = detail.center.x; } if (!this.isDragging && Math.abs(this.lastX - this.startX) > this.options.dragThresholdX && (detail.direction === 'left' || (detail.direction === 'right'))) { if (this.slideIn) { this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP); if (this.classList.contains(CLASS_ACTIVE)) { if (this.offCanvasRight && this.offCanvasRight.classList.contains(CLASS_ACTIVE)) { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } else { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } } else { if (detail.direction === 'left' && this.offCanvasRight) { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } else if (detail.direction === 'right' && this.offCanvasLeft) { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } else { this.scroller = null; } } } else { if (this.classList.contains(CLASS_ACTIVE)) { if (detail.direction === 'left') { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } else { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } } else { if (detail.direction === 'right') { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } else { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } } } if (this.offCanvas && this.scroller) { this.startX = this.lastX; this.isDragging = true; $.gestures.session.lockDirection = true; //锁定方向 $.gestures.session.startDirection = detail.direction; this.offCanvas.classList.remove(CLASS_TRANSITIONING); this.scroller.classList.remove(CLASS_TRANSITIONING); this.offsetX = this.getTranslateX(); this._initOffCanvasVisible(); } } if (this.isDragging) { this.updateTranslate(this.offsetX + (this.lastX - this.startX)); detail.gesture.preventDefault(); e.stopPropagation(); } break; case 'dragend': if (this.isDragging) { var detail = e.detail; var direction = detail.direction; this.isDragging = false; this.offCanvas.classList.add(CLASS_TRANSITIONING); this.scroller.classList.add(CLASS_TRANSITIONING); var ratio = 0; var x = this.getTranslateX(); if (!this.slideIn) { if (x >= 0) { ratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0; } else { ratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0; } if (ratio === 0) { this.openPercentage(0); this._dispatchEvent(); //此处不触发webkitTransitionEnd,所以手动dispatch return; } if (direction === 'right' && ratio >= 0 && (ratio >= 0.5 || detail.swipe)) { //右滑打开 this.openPercentage(100); } else if (direction === 'right' && ratio < 0 && (ratio > -0.5 || detail.swipe)) { //右滑关闭 this.openPercentage(0); } else if (direction === 'right' && ratio > 0 && ratio < 0.5) { //右滑还原关闭 this.openPercentage(0); } else if (direction === 'right' && ratio < 0.5) { //右滑还原打开 this.openPercentage(-100); } else if (direction === 'left' && ratio <= 0 && (ratio <= -0.5 || detail.swipe)) { //左滑打开 this.openPercentage(-100); } else if (direction === 'left' && ratio > 0 && (ratio <= 0.5 || detail.swipe)) { //左滑关闭 this.openPercentage(0); } else if (direction === 'left' && ratio < 0 && ratio >= -0.5) { //左滑还原关闭 this.openPercentage(0); } else if (direction === 'left' && ratio > 0.5) { //左滑还原打开 this.openPercentage(100); } else { //默认关闭 this.openPercentage(0); } if (ratio === 1 || ratio === -1) { //此处不触发webkitTransitionEnd,所以手动dispatch this._dispatchEvent(); } } else { if (x >= 0) { ratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0; } else { ratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0; } if (direction === 'right' && ratio <= 0 && (ratio >= -0.5 || detail.swipe)) { //右滑打开 this.openPercentage(100); } else if (direction === 'right' && ratio > 0 && (ratio >= 0.5 || detail.swipe)) { //右滑关闭 this.openPercentage(0); } else if (direction === 'right' && ratio <= -0.5) { //右滑还原关闭 this.openPercentage(0); } else if (direction === 'right' && ratio > 0 && ratio <= 0.5) { //右滑还原打开 this.openPercentage(-100); } else if (direction === 'left' && ratio >= 0 && (ratio <= 0.5 || detail.swipe)) { //左滑打开 this.openPercentage(-100); } else if (direction === 'left' && ratio < 0 && (ratio <= -0.5 || detail.swipe)) { //左滑关闭 this.openPercentage(0); } else if (direction === 'left' && ratio >= 0.5) { //左滑还原关闭 this.openPercentage(0); } else if (direction === 'left' && ratio >= -0.5 && ratio < 0) { //左滑还原打开 this.openPercentage(100); } else { this.openPercentage(0); } if (ratio === 1 || ratio === -1 || ratio === 0) { this._dispatchEvent(); return; } } } break; } }, _dispatchEvent: function() { if (this.classList.contains(CLASS_ACTIVE)) { $.trigger(this.wrapper, 'shown', this); } else { $.trigger(this.wrapper, 'hidden', this); } }, _initOffCanvasVisible: function() { if (!this.visible) { this.visible = true; if (this.offCanvasLeft) { this.offCanvasLeft.style.visibility = 'visible'; } if (this.offCanvasRight) { this.offCanvasRight.style.visibility = 'visible'; } } }, initEvent: function() { var self = this; if (self.backdrop) { self.backdrop.addEventListener('tap', function(e) { self.close(); e.detail.gesture.preventDefault(); }); } if (this.classList.contains('mui-draggable')) { this.wrapper.addEventListener($.EVENT_START, this); //临时处理 this.wrapper.addEventListener('drag', this); this.wrapper.addEventListener('dragend', this); } this.wrapper.addEventListener('webkitTransitionEnd', this); }, openPercentage: function(percentage) { var p = percentage / 100; if (!this.slideIn) { if (this.offCanvasLeft && percentage >= 0) { this.updateTranslate(this.offCanvasLeftWidth * p); this.offCanvasLeft.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } else if (this.offCanvasRight && percentage <= 0) { this.updateTranslate(this.offCanvasRightWidth * p); this.offCanvasRight.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } this.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } else { if (this.offCanvasLeft && percentage >= 0) { p = p === 0 ? -1 : 0; this.updateTranslate(this.offCanvasLeftWidth * p); this.offCanvasLeft.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } else if (this.offCanvasRight && percentage <= 0) { p = p === 0 ? 1 : 0; this.updateTranslate(this.offCanvasRightWidth * p); this.offCanvasRight.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } this.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE); } }, updateTranslate: function(x) { if (x !== this.lastTranslateX) { if (!this.slideIn) { if ((!this.offCanvasLeft && x > 0) || (!this.offCanvasRight && x < 0)) { this.setTranslateX(0); return; } if (this.leftShowing && x > this.offCanvasLeftWidth) { this.setTranslateX(this.offCanvasLeftWidth); return; } if (this.rightShowing && x < -this.offCanvasRightWidth) { this.setTranslateX(-this.offCanvasRightWidth); return; } this.setTranslateX(x); if (x >= 0) { this.leftShowing = true; this.rightShowing = false; if (x > 0) { if (this.offCanvasLeft) { $.each(this.offCanvasLefts, function(index, offCanvas) { if (offCanvas === this.offCanvasLeft) { this.offCanvasLeft.style.zIndex = 0; } else { offCanvas.style.zIndex = -1; } }.bind(this)); } if (this.offCanvasRight) { this.offCanvasRight.style.zIndex = -1; } } } else { this.rightShowing = true; this.leftShowing = false; if (this.offCanvasRight) { $.each(this.offCanvasRights, function(index, offCanvas) { if (offCanvas === this.offCanvasRight) { offCanvas.style.zIndex = 0; } else { offCanvas.style.zIndex = -1; } }.bind(this)); } if (this.offCanvasLeft) { this.offCanvasLeft.style.zIndex = -1; } } } else { if (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) { if (x < 0) { this.setTranslateX(0); return; } if (x > this.offCanvasRightWidth) { this.setTranslateX(this.offCanvasRightWidth); return; } } else { if (x > 0) { this.setTranslateX(0); return; } if (x < -this.offCanvasLeftWidth) { this.setTranslateX(-this.offCanvasLeftWidth); return; } } this.setTranslateX(x); } this.lastTranslateX = x; } }, setTranslateX: $.animationFrame(function(x) { if (this.scroller) { if (this.scalable && this.offCanvas.parentNode === this.wrapper) { var percent = Math.abs(x) / this.offCanvasWidth; var zoomOutScale = 1 - (1 - this.options.scale) * percent; var zoomInScale = this.options.scale + (1 - this.options.scale) * percent; var zoomOutOpacity = 1 - (1 - this.options.opacity) * percent; var zoomInOpacity = this.options.opacity + (1 - this.options.opacity) * percent; if (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) { this.offCanvas.style.webkitTransformOrigin = '-100%'; this.scroller.style.webkitTransformOrigin = 'left'; } else { this.offCanvas.style.webkitTransformOrigin = '200%'; this.scroller.style.webkitTransformOrigin = 'right'; } this.offCanvas.style.opacity = zoomInOpacity; this.offCanvas.style.webkitTransform = 'translate3d(0,0,0) scale(' + zoomInScale + ')'; this.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0) scale(' + zoomOutScale + ')'; } else { if (this.slideIn) { this.offCanvas.style.webkitTransform = 'translate3d(' + x + 'px,0,0)'; } else { this.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0)'; } } } }), getTranslateX: function() { if (this.offCanvas) { var scroller = this.slideIn ? this.offCanvas : this.scroller; var result = $.parseTranslateMatrix($.getStyles(scroller, 'webkitTransform')); return (result && result.x) || 0; } return 0; }, isShown: function(direction) { var shown = false; if (!this.slideIn) { var x = this.getTranslateX(); if (direction === 'right') { shown = this.classList.contains(CLASS_ACTIVE) && x < 0; } else if (direction === 'left') { shown = this.classList.contains(CLASS_ACTIVE) && x > 0; } else { shown = this.classList.contains(CLASS_ACTIVE) && x !== 0; } } else { if (direction === 'left') { shown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE); } else if (direction === 'right') { shown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE); } else { shown = this.classList.contains(CLASS_ACTIVE) && (this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE)); } } return shown; }, close: function() { this._initOffCanvasVisible(); this.offCanvas = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE); this.offCanvasWidth = this.offCanvas.offsetWidth; if (this.scroller) { this.offCanvas.offsetHeight; this.offCanvas.classList.add(CLASS_TRANSITIONING); this.scroller.classList.add(CLASS_TRANSITIONING); this.openPercentage(0); } }, show: function(direction) { this._initOffCanvasVisible(); if (this.isShown(direction)) { return false; } if (!direction) { direction = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT) ? 'right' : 'left'; } if (direction === 'right') { this.offCanvas = this.offCanvasRight; this.offCanvasWidth = this.offCanvasRightWidth; } else { this.offCanvas = this.offCanvasLeft; this.offCanvasWidth = this.offCanvasLeftWidth; } if (this.scroller) { this.offCanvas.offsetHeight; this.offCanvas.classList.add(CLASS_TRANSITIONING); this.scroller.classList.add(CLASS_TRANSITIONING); this.openPercentage(direction === 'left' ? 100 : -100); } return true; }, toggle: function(directionOrOffCanvas) { var direction = directionOrOffCanvas; if (directionOrOffCanvas && directionOrOffCanvas.classList) { direction = directionOrOffCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT) ? 'left' : 'right'; this.refresh(directionOrOffCanvas); } if (!this.show(direction)) { this.close(); } } }); //hash to offcanvas var findOffCanvasContainer = function(target) { parentNode = target.parentNode; if (parentNode) { if (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) { return parentNode; } else { parentNode = parentNode.parentNode; if (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) { return parentNode; } } } }; var handle = function(event, target) { if (target.tagName === 'A' && target.hash) { var offcanvas = document.getElementById(target.hash.replace('#', '')); if (offcanvas) { var container = findOffCanvasContainer(offcanvas); if (container) { $.targets._container = container; return offcanvas; } } } return false; }; $.registerTarget({ name: name, index: 60, handle: handle, target: false, isReset: false, isContinue: true }); window.addEventListener('tap', function(e) { if (!$.targets.offcanvas) { return; } //TODO 此处类型的代码后续考虑统一优化(target机制),现在的实现费力不讨好 var target = e.target; for (; target && target !== document; target = target.parentNode) { if (target.tagName === 'A' && target.hash && target.hash === ('#' + $.targets.offcanvas.id)) { e.detail && e.detail.gesture && e.detail.gesture.preventDefault(); //fixed hashchange $($.targets._container).offCanvas().toggle($.targets.offcanvas); $.targets.offcanvas = $.targets._container = null; break; } } }); $.fn.offCanvas = function(options) { var offCanvasApis = []; this.each(function() { var offCanvasApi = null; var self = this; //hack old version if (!self.classList.contains(CLASS_OFF_CANVAS_WRAP)) { self = findOffCanvasContainer(self); } var id = self.getAttribute('data-offCanvas'); if (!id) { id = ++$.uuid; $.data[id] = offCanvasApi = new OffCanvas(self, options); self.setAttribute('data-offCanvas', id); } else { offCanvasApi = $.data[id]; } if (options === 'show' || options === 'close' || options === 'toggle') { offCanvasApi.toggle(); } offCanvasApis.push(offCanvasApi); }); return offCanvasApis.length === 1 ? offCanvasApis[0] : offCanvasApis; }; $.ready(function() { $('.mui-off-canvas-wrap').offCanvas(); }); })(mui, window, document, 'offcanvas'); /** * actions * @param {type} $ * @param {type} name * @returns {undefined} */ (function($, name) { var CLASS_ACTION = 'mui-action'; var handle = function(event, target) { var className = target.className || ''; if (typeof className !== 'string') { //svg className(SVGAnimatedString) className = ''; } if (className && ~className.indexOf(CLASS_ACTION)) { if (target.classList.contains('mui-action-back')) { event.preventDefault(); } return target; } return false; }; $.registerTarget({ name: name, index: 50, handle: handle, target: false, isContinue: true }); })(mui, 'action'); /** * Modals * @param {type} $ * @param {type} window * @param {type} document * @param {type} name * @returns {undefined} */ (function($, window, document, name) { var CLASS_MODAL = 'mui-modal'; var handle = function(event, target) { if (target.tagName === 'A' && target.hash) { var modal = document.getElementById(target.hash.replace('#', '')); if (modal && modal.classList.contains(CLASS_MODAL)) { return modal; } } return false; }; $.registerTarget({ name: name, index: 50, handle: handle, target: false, isReset: false, isContinue: true }); window.addEventListener('tap', function(event) { if ($.targets.modal) { event.detail.gesture.preventDefault(); //fixed hashchange $.targets.modal.classList.toggle('mui-active'); } }); })(mui, window, document, 'modal'); /** * Popovers * @param {type} $ * @param {type} window * @param {type} document * @param {type} name * @param {type} undefined * @returns {undefined} */ (function($, window, document, name) { var CLASS_POPOVER = 'mui-popover'; var CLASS_POPOVER_ARROW = 'mui-popover-arrow'; var CLASS_ACTION_POPOVER = 'mui-popover-action'; var CLASS_BACKDROP = 'mui-backdrop'; var CLASS_BAR_POPOVER = 'mui-bar-popover'; var CLASS_BAR_BACKDROP = 'mui-bar-backdrop'; var CLASS_ACTION_BACKDROP = 'mui-backdrop-action'; var CLASS_ACTIVE = 'mui-active'; var CLASS_BOTTOM = 'mui-bottom'; var handle = function(event, target) { if (target.tagName === 'A' && target.hash) { $.targets._popover = document.getElementById(target.hash.replace('#', '')); if ($.targets._popover && $.targets._popover.classList.contains(CLASS_POPOVER)) { return target; } else { $.targets._popover = null; } } return false; }; $.registerTarget({ name: name, index: 60, handle: handle, target: false, isReset: false, isContinue: true }); var onPopoverShown = function(e) { this.removeEventListener('webkitTransitionEnd', onPopoverShown); this.addEventListener($.EVENT_MOVE, $.preventDefault); $.trigger(this, 'shown', this); } var onPopoverHidden = function(e) { setStyle(this, 'none'); this.removeEventListener('webkitTransitionEnd', onPopoverHidden); this.removeEventListener($.EVENT_MOVE, $.preventDefault); $.trigger(this, 'hidden', this); }; var backdrop = (function() { var element = document.createElement('div'); element.classList.add(CLASS_BACKDROP); element.addEventListener($.EVENT_MOVE, $.preventDefault); element.addEventListener('tap', function(e) { var popover = $.targets._popover; if (popover) { popover.addEventListener('webkitTransitionEnd', onPopoverHidden); popover.classList.remove(CLASS_ACTIVE); removeBackdrop(popover); } }); return element; }()); var removeBackdropTimer; var removeBackdrop = function(popover) { backdrop.setAttribute('style', 'opacity:0'); $.targets.popover = $.targets._popover = null; //reset removeBackdropTimer = $.later(function() { if (!popover.classList.contains(CLASS_ACTIVE) && backdrop.parentNode && backdrop.parentNode === document.body) { document.body.removeChild(backdrop); } }, 350); }; window.addEventListener('tap', function(e) { if (!$.targets.popover) { return; } var toggle = false; var target = e.target; for (; target && target !== document; target = target.parentNode) { if (target === $.targets.popover) { toggle = true; } } if (toggle) { e.detail.gesture.preventDefault(); //fixed hashchange togglePopover($.targets._popover, $.targets.popover); } }); var togglePopover = function(popover, anchor, state) { if ((state === 'show' && popover.classList.contains(CLASS_ACTIVE)) || (state === 'hide' && !popover.classList.contains(CLASS_ACTIVE))) { return; } removeBackdropTimer && removeBackdropTimer.cancel(); //取消remove的timer //remove一遍,以免来回快速切换,导致webkitTransitionEnd不触发,无法remove popover.removeEventListener('webkitTransitionEnd', onPopoverShown); popover.removeEventListener('webkitTransitionEnd', onPopoverHidden); backdrop.classList.remove(CLASS_BAR_BACKDROP); backdrop.classList.remove(CLASS_ACTION_BACKDROP); var _popover = document.querySelector('.mui-popover.mui-active'); if (_popover) { // _popover.setAttribute('style', ''); _popover.addEventListener('webkitTransitionEnd', onPopoverHidden); _popover.classList.remove(CLASS_ACTIVE); // _popover.removeEventListener('webkitTransitionEnd', onPopoverHidden); //同一个弹出则直接返回,解决同一个popover的toggle if (popover === _popover) { removeBackdrop(_popover); return; } } var isActionSheet = false; if (popover.classList.contains(CLASS_BAR_POPOVER) || popover.classList.contains(CLASS_ACTION_POPOVER)) { //navBar if (popover.classList.contains(CLASS_ACTION_POPOVER)) { //action sheet popover isActionSheet = true; backdrop.classList.add(CLASS_ACTION_BACKDROP); } else { //bar popover backdrop.classList.add(CLASS_BAR_BACKDROP); // if (anchor) { // if (anchor.parentNode) { // var offsetWidth = anchor.offsetWidth; // var offsetLeft = anchor.offsetLeft; // var innerWidth = window.innerWidth; // popover.style.left = (Math.min(Math.max(offsetLeft, defaultPadding), innerWidth - offsetWidth - defaultPadding)) + "px"; // } else { // //TODO anchor is position:{left,top,bottom,right} // } // } } } setStyle(popover, 'block'); //actionsheet transform popover.offsetHeight; popover.classList.add(CLASS_ACTIVE); backdrop.setAttribute('style', ''); document.body.appendChild(backdrop); calPosition(popover, anchor, isActionSheet); //position backdrop.classList.add(CLASS_ACTIVE); popover.addEventListener('webkitTransitionEnd', onPopoverShown); }; var setStyle = function(popover, display, top, left) { var style = popover.style; if (typeof display !== 'undefined') style.display = display; if (typeof top !== 'undefined') style.top = top + 'px'; if (typeof left !== 'undefined') style.left = left + 'px'; }; var calPosition = function(popover, anchor, isActionSheet) { if (!popover || !anchor) { return; } if (isActionSheet) { //actionsheet setStyle(popover, 'block') return; } var wWidth = window.innerWidth; var wHeight = window.innerHeight; var pWidth = popover.offsetWidth; var pHeight = popover.offsetHeight; var aWidth = anchor.offsetWidth; var aHeight = anchor.offsetHeight; var offset = $.offset(anchor); var arrow = popover.querySelector('.' + CLASS_POPOVER_ARROW); if (!arrow) { arrow = document.createElement('div'); arrow.className = CLASS_POPOVER_ARROW; popover.appendChild(arrow); } var arrowSize = arrow && arrow.offsetWidth / 2 || 0; var pTop = 0; var pLeft = 0; var diff = 0; var arrowLeft = 0; var defaultPadding = popover.classList.contains(CLASS_ACTION_POPOVER) ? 0 : 5; var position = 'top'; if ((pHeight + arrowSize) < (offset.top - window.pageYOffset)) { //top pTop = offset.top - pHeight - arrowSize; } else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset) - aHeight)) { //bottom position = 'bottom'; pTop = offset.top + aHeight + arrowSize; } else { //middle position = 'middle'; pTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset, 0); pLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0); } if (position === 'top' || position === 'bottom') { pLeft = aWidth / 2 + offset.left - pWidth / 2; diff = pLeft; if (pLeft < defaultPadding) pLeft = defaultPadding; if (pLeft + pWidth > wWidth) pLeft = wWidth - pWidth - defaultPadding; if (arrow) { if (position === 'top') { arrow.classList.add(CLASS_BOTTOM); } else { arrow.classList.remove(CLASS_BOTTOM); } diff = diff - pLeft; arrowLeft = (pWidth / 2 - arrowSize / 2 + diff); arrowLeft = Math.max(Math.min(arrowLeft, pWidth - arrowSize * 2 - 6), 6); arrow.setAttribute('style', 'left:' + arrowLeft + 'px'); } } else if (position === 'middle') { arrow.setAttribute('style', 'display:none'); } setStyle(popover, 'block', pTop, pLeft); }; $.createMask = function(callback) { var element = document.createElement('div'); element.classList.add(CLASS_BACKDROP); element.addEventListener($.EVENT_MOVE, $.preventDefault); element.addEventListener('tap', function() { mask.close(); }); var mask = [element]; mask._show = false; mask.show = function() { mask._show = true; element.setAttribute('style', 'opacity:1'); document.body.appendChild(element); return mask; }; mask._remove = function() { if (mask._show) { mask._show = false; element.setAttribute('style', 'opacity:0'); $.later(function() { var body = document.body; element.parentNode === body && body.removeChild(element); }, 350); } return mask; }; mask.close = function() { if (callback) { if (callback() !== false) { mask._remove(); } } else { mask._remove(); } }; return mask; }; $.fn.popover = function() { var args = arguments; this.each(function() { $.targets._popover = this; if (args[0] === 'show' || args[0] === 'hide' || args[0] === 'toggle') { togglePopover(this, args[1], args[0]); } }); }; })(mui, window, document, 'popover'); /** * segmented-controllers * @param {type} $ * @param {type} window * @param {type} document * @param {type} undefined * @returns {undefined} */ (function($, window, document, name, undefined) { var CLASS_CONTROL_ITEM = 'mui-control-item'; var CLASS_SEGMENTED_CONTROL = 'mui-segmented-control'; var CLASS_SEGMENTED_CONTROL_VERTICAL = 'mui-segmented-control-vertical'; var CLASS_CONTROL_CONTENT = 'mui-control-content'; var CLASS_TAB_BAR = 'mui-bar-tab'; var CLASS_TAB_ITEM = 'mui-tab-item'; var CLASS_SLIDER_ITEM = 'mui-slider-item'; var handle = function(event, target) { if (target.classList && (target.classList.contains(CLASS_CONTROL_ITEM) || target.classList.contains(CLASS_TAB_ITEM))) { if (target.parentNode && target.parentNode.classList && target.parentNode.classList.contains(CLASS_SEGMENTED_CONTROL_VERTICAL)) { //vertical 如果preventDefault会导致无法滚动 } else { event.preventDefault(); // if(target.tagName == 'A') { // // fixed 底部选项卡href 无法跳转 && stop hash change // var curr_href = location.hostname + location.pathname, // target_href = target.hostname + target.pathname; // if (curr_href == target_href && target.hash !== "") { // event.preventDefault(); // return target; // }else{ // return false // } // } } // if (target.hash) { return target; // } } return false; }; $.registerTarget({ name: name, index: 80, handle: handle, target: false }); window.addEventListener('tap', function(e) { var targetTab = $.targets.tab; if (!targetTab) { return; } var activeTab; var activeBodies; var targetBody; var className = 'mui-active'; var classSelector = '.' + className; var segmentedControl = targetTab.parentNode; for (; segmentedControl && segmentedControl !== document; segmentedControl = segmentedControl.parentNode) { if (segmentedControl.classList.contains(CLASS_SEGMENTED_CONTROL)) { activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_CONTROL_ITEM); break; } else if (segmentedControl.classList.contains(CLASS_TAB_BAR)) { activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_TAB_ITEM); } } if (activeTab) { activeTab.classList.remove(className); } var isLastActive = targetTab === activeTab; if (targetTab) { targetTab.classList.add(className); } if (!targetTab.hash) { return; } targetBody = document.getElementById(targetTab.hash.replace('#', '')); if (!targetBody) { return; } if (!targetBody.classList.contains(CLASS_CONTROL_CONTENT)) { //tab bar popover targetTab.classList[isLastActive ? 'remove' : 'add'](className); return; } if (isLastActive) { //same return; } var parentNode = targetBody.parentNode; activeBodies = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT + classSelector); for (var i = 0; i < activeBodies.length; i++) { var activeBody = activeBodies[i]; activeBody.parentNode === parentNode && activeBody.classList.remove(className); } targetBody.classList.add(className); var contents = []; var _contents = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT); for (var i = 0; i < _contents.length; i++) { //查找直属子节点 _contents[i].parentNode === parentNode && (contents.push(_contents[i])); } $.trigger(targetBody, $.eventName('shown', name), { tabNumber: Array.prototype.indexOf.call(contents, targetBody) }); e.detail && e.detail.gesture.preventDefault(); //fixed hashchange }); })(mui, window, document, 'tab'); /** * Toggles switch * @param {type} $ * @param {type} window * @param {type} name * @returns {undefined} */ (function($, window, name) { var CLASS_SWITCH = 'mui-switch'; var CLASS_SWITCH_HANDLE = 'mui-switch-handle'; var CLASS_ACTIVE = 'mui-active'; var CLASS_DRAGGING = 'mui-dragging'; var CLASS_DISABLED = 'mui-disabled'; var SELECTOR_SWITCH_HANDLE = '.' + CLASS_SWITCH_HANDLE; var handle = function(event, target) { if (target.classList && target.classList.contains(CLASS_SWITCH)) { return target; } return false; }; $.registerTarget({ name: name, index: 100, handle: handle, target: false }); var Toggle = function(element) { this.element = element; this.classList = this.element.classList; this.handle = this.element.querySelector(SELECTOR_SWITCH_HANDLE); this.init(); this.initEvent(); }; Toggle.prototype.init = function() { this.toggleWidth = this.element.offsetWidth; this.handleWidth = this.handle.offsetWidth; this.handleX = this.toggleWidth - this.handleWidth - 3; }; Toggle.prototype.initEvent = function() { this.element.addEventListener($.EVENT_START, this); this.element.addEventListener('drag', this); this.element.addEventListener('swiperight', this); this.element.addEventListener($.EVENT_END, this); this.element.addEventListener($.EVENT_CANCEL, this); }; Toggle.prototype.handleEvent = function(e) { if (this.classList.contains(CLASS_DISABLED)) { return; } switch (e.type) { case $.EVENT_START: this.start(e); break; case 'drag': this.drag(e); break; case 'swiperight': this.swiperight(); break; case $.EVENT_END: case $.EVENT_CANCEL: this.end(e); break; } }; Toggle.prototype.start = function(e) { this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s'; this.classList.add(CLASS_DRAGGING); if (this.toggleWidth === 0 || this.handleWidth === 0) { //当switch处于隐藏状态时,width为0,需要重新初始化 this.init(); } }; Toggle.prototype.drag = function(e) { var detail = e.detail; if (!this.isDragging) { if (detail.direction === 'left' || detail.direction === 'right') { this.isDragging = true; this.lastChanged = undefined; this.initialState = this.classList.contains(CLASS_ACTIVE); } } if (this.isDragging) { this.setTranslateX(detail.deltaX); e.stopPropagation(); detail.gesture.preventDefault(); } }; Toggle.prototype.swiperight = function(e) { if (this.isDragging) { e.stopPropagation(); } }; Toggle.prototype.end = function(e) { this.classList.remove(CLASS_DRAGGING); if (this.isDragging) { this.isDragging = false; e.stopPropagation(); $.trigger(this.element, 'toggle', { isActive: this.classList.contains(CLASS_ACTIVE) }); } else { this.toggle(); } }; Toggle.prototype.toggle = function(animate) { var classList = this.classList; if (animate === false) { this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '0s'; } else { this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s'; } if (classList.contains(CLASS_ACTIVE)) { classList.remove(CLASS_ACTIVE); this.handle.style.webkitTransform = 'translate(0,0)'; } else { classList.add(CLASS_ACTIVE); this.handle.style.webkitTransform = 'translate(' + this.handleX + 'px,0)'; } $.trigger(this.element, 'toggle', { isActive: this.classList.contains(CLASS_ACTIVE) }); }; Toggle.prototype.setTranslateX = $.animationFrame(function(x) { if (!this.isDragging) { return; } var isChanged = false; if ((this.initialState && -x > (this.handleX / 2)) || (!this.initialState && x > (this.handleX / 2))) { isChanged = true; } if (this.lastChanged !== isChanged) { if (isChanged) { this.handle.style.webkitTransform = 'translate(' + (this.initialState ? 0 : this.handleX) + 'px,0)'; this.classList[this.initialState ? 'remove' : 'add'](CLASS_ACTIVE); } else { this.handle.style.webkitTransform = 'translate(' + (this.initialState ? this.handleX : 0) + 'px,0)'; this.classList[this.initialState ? 'add' : 'remove'](CLASS_ACTIVE); } this.lastChanged = isChanged; } }); $.fn['switch'] = function(options) { var switchApis = []; this.each(function() { var switchApi = null; var id = this.getAttribute('data-switch'); if (!id) { id = ++$.uuid; $.data[id] = new Toggle(this); this.setAttribute('data-switch', id); } else { switchApi = $.data[id]; } switchApis.push(switchApi); }); return switchApis.length > 1 ? switchApis : switchApis[0]; }; $.ready(function() { $('.' + CLASS_SWITCH)['switch'](); }); })(mui, window, 'toggle'); /** * Tableviews * @param {type} $ * @param {type} window * @param {type} document * @returns {undefined} */ (function($, window, document) { var CLASS_ACTIVE = 'mui-active'; var CLASS_SELECTED = 'mui-selected'; var CLASS_GRID_VIEW = 'mui-grid-view'; var CLASS_RADIO_VIEW = 'mui-table-view-radio'; var CLASS_TABLE_VIEW_CELL = 'mui-table-view-cell'; var CLASS_COLLAPSE_CONTENT = 'mui-collapse-content'; var CLASS_DISABLED = 'mui-disabled'; var CLASS_TOGGLE = 'mui-switch'; var CLASS_BTN = 'mui-btn'; var CLASS_SLIDER_HANDLE = 'mui-slider-handle'; var CLASS_SLIDER_LEFT = 'mui-slider-left'; var CLASS_SLIDER_RIGHT = 'mui-slider-right'; var CLASS_TRANSITIONING = 'mui-transitioning'; var SELECTOR_SLIDER_HANDLE = '.' + CLASS_SLIDER_HANDLE; var SELECTOR_SLIDER_LEFT = '.' + CLASS_SLIDER_LEFT; var SELECTOR_SLIDER_RIGHT = '.' + CLASS_SLIDER_RIGHT; var SELECTOR_SELECTED = '.' + CLASS_SELECTED; var SELECTOR_BUTTON = '.' + CLASS_BTN; var overFactor = 0.8; var cell, a; var isMoved = isOpened = openedActions = progress = false; var sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false; var timer = translateX = lastTranslateX = sliderActionLeftWidth = sliderActionRightWidth = 0; var toggleActive = function(isActive) { if (isActive) { if (a) { a.classList.add(CLASS_ACTIVE); } else if (cell) { cell.classList.add(CLASS_ACTIVE); } } else { timer && timer.cancel(); if (a) { a.classList.remove(CLASS_ACTIVE); } else if (cell) { cell.classList.remove(CLASS_ACTIVE); } } }; var updateTranslate = function() { if (translateX !== lastTranslateX) { if (buttonsRight && buttonsRight.length > 0) { progress = translateX / sliderActionRightWidth; if (translateX < -sliderActionRightWidth) { translateX = -sliderActionRightWidth - Math.pow(-translateX - sliderActionRightWidth, overFactor); } for (var i = 0, len = buttonsRight.length; i < len; i++) { var buttonRight = buttonsRight[i]; if (typeof buttonRight._buttonOffset === 'undefined') { buttonRight._buttonOffset = buttonRight.offsetLeft; } buttonOffset = buttonRight._buttonOffset; setTranslate(buttonRight, (translateX - buttonOffset * (1 + Math.max(progress, -1)))); } } if (buttonsLeft && buttonsLeft.length > 0) { progress = translateX / sliderActionLeftWidth; if (translateX > sliderActionLeftWidth) { translateX = sliderActionLeftWidth + Math.pow(translateX - sliderActionLeftWidth, overFactor); } for (var i = 0, len = buttonsLeft.length; i < len; i++) { var buttonLeft = buttonsLeft[i]; if (typeof buttonLeft._buttonOffset === 'undefined') { buttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth; } buttonOffset = buttonLeft._buttonOffset; if (buttonsLeft.length > 1) { buttonLeft.style.zIndex = buttonsLeft.length - i; } setTranslate(buttonLeft, (translateX + buttonOffset * (1 - Math.min(progress, 1)))); } } setTranslate(sliderHandle, translateX); lastTranslateX = translateX; } sliderRequestAnimationFrame = requestAnimationFrame(function() { updateTranslate(); }); }; var setTranslate = function(element, x) { if (element) { element.style.webkitTransform = 'translate(' + x + 'px,0)'; } }; window.addEventListener($.EVENT_START, function(event) { if (cell) { toggleActive(false); } cell = a = false; isMoved = isOpened = openedActions = false; var target = event.target; var isDisabled = false; for (; target && target !== document; target = target.parentNode) { if (target.classList) { var classList = target.classList; if ((target.tagName === 'INPUT' && target.type !== 'radio' && target.type !== 'checkbox') || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN) || classList.contains(CLASS_DISABLED)) { isDisabled = true; } if (classList.contains(CLASS_COLLAPSE_CONTENT)) { //collapse content break; } if (classList.contains(CLASS_TABLE_VIEW_CELL)) { cell = target; //TODO swipe to delete close var selected = cell.parentNode.querySelector(SELECTOR_SELECTED); if (!cell.parentNode.classList.contains(CLASS_RADIO_VIEW) && selected && selected !== cell) { $.swipeoutClose(selected); cell = isDisabled = false; return; } if (!cell.parentNode.classList.contains(CLASS_GRID_VIEW)) { var link = cell.querySelector('a'); if (link && link.parentNode === cell) { //li>a a = link; } } var handle = cell.querySelector(SELECTOR_SLIDER_HANDLE); if (handle) { toggleEvents(cell); event.stopPropagation(); } if (!isDisabled) { if (handle) { if (timer) { timer.cancel(); } timer = $.later(function() { toggleActive(true); }, 100); } else { toggleActive(true); } } break; } } } }); window.addEventListener($.EVENT_MOVE, function(event) { toggleActive(false); }); var handleEvent = { handleEvent: function(event) { switch (event.type) { case 'drag': this.drag(event); break; case 'dragend': this.dragend(event); break; case 'flick': this.flick(event); break; case 'swiperight': this.swiperight(event); break; case 'swipeleft': this.swipeleft(event); break; } }, drag: function(event) { if (!cell) { return; } if (!isMoved) { //init sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false; sliderHandle = cell.querySelector(SELECTOR_SLIDER_HANDLE); if (sliderHandle) { sliderActionLeft = cell.querySelector(SELECTOR_SLIDER_LEFT); sliderActionRight = cell.querySelector(SELECTOR_SLIDER_RIGHT); if (sliderActionLeft) { sliderActionLeftWidth = sliderActionLeft.offsetWidth; buttonsLeft = sliderActionLeft.querySelectorAll(SELECTOR_BUTTON); } if (sliderActionRight) { sliderActionRightWidth = sliderActionRight.offsetWidth; buttonsRight = sliderActionRight.querySelectorAll(SELECTOR_BUTTON); } cell.classList.remove(CLASS_TRANSITIONING); isOpened = cell.classList.contains(CLASS_SELECTED); if (isOpened) { openedActions = cell.querySelector(SELECTOR_SLIDER_LEFT + SELECTOR_SELECTED) ? 'left' : 'right'; } } } var detail = event.detail; var direction = detail.direction; var angle = detail.angle; if (direction === 'left' && (angle > 150 || angle < -150)) { if (buttonsRight || (buttonsLeft && isOpened)) { //存在右侧按钮或存在左侧按钮且是已打开状态 isMoved = true; } } else if (direction === 'right' && (angle > -30 && angle < 30)) { if (buttonsLeft || (buttonsRight && isOpened)) { //存在左侧按钮或存在右侧按钮且是已打开状态 isMoved = true; } } if (isMoved) { event.stopPropagation(); event.detail.gesture.preventDefault(); var translate = event.detail.deltaX; if (isOpened) { if (openedActions === 'right') { translate = translate - sliderActionRightWidth; } else { translate = translate + sliderActionLeftWidth; } } if ((translate > 0 && !buttonsLeft) || (translate < 0 && !buttonsRight)) { if (!isOpened) { return; } translate = 0; } if (translate < 0) { sliderDirection = 'toLeft'; } else if (translate > 0) { sliderDirection = 'toRight'; } else { if (!sliderDirection) { sliderDirection = 'toLeft'; } } if (!sliderRequestAnimationFrame) { updateTranslate(); } translateX = translate; } }, flick: function(event) { if (isMoved) { event.stopPropagation(); } }, swipeleft: function(event) { if (isMoved) { event.stopPropagation(); } }, swiperight: function(event) { if (isMoved) { event.stopPropagation(); } }, dragend: function(event) { if (!isMoved) { return; } event.stopPropagation(); if (sliderRequestAnimationFrame) { cancelAnimationFrame(sliderRequestAnimationFrame); sliderRequestAnimationFrame = null; } var detail = event.detail; isMoved = false; var action = 'close'; var actionsWidth = sliderDirection === 'toLeft' ? sliderActionRightWidth : sliderActionLeftWidth; var isToggle = detail.swipe || (Math.abs(translateX) > actionsWidth / 2); if (isToggle) { if (!isOpened) { action = 'open'; } else if (detail.direction === 'left' && openedActions === 'right') { action = 'open'; } else if (detail.direction === 'right' && openedActions === 'left') { action = 'open'; } } cell.classList.add(CLASS_TRANSITIONING); var buttons; if (action === 'open') { var newTranslate = sliderDirection === 'toLeft' ? -actionsWidth : actionsWidth; setTranslate(sliderHandle, newTranslate); buttons = sliderDirection === 'toLeft' ? buttonsRight : buttonsLeft; if (typeof buttons !== 'undefined') { var button = null; for (var i = 0; i < buttons.length; i++) { button = buttons[i]; setTranslate(button, newTranslate); } button.parentNode.classList.add(CLASS_SELECTED); cell.classList.add(CLASS_SELECTED); if (!isOpened) { $.trigger(cell, sliderDirection === 'toLeft' ? 'slideleft' : 'slideright'); } } } else { setTranslate(sliderHandle, 0); sliderActionLeft && sliderActionLeft.classList.remove(CLASS_SELECTED); sliderActionRight && sliderActionRight.classList.remove(CLASS_SELECTED); cell.classList.remove(CLASS_SELECTED); } var buttonOffset; if (buttonsLeft && buttonsLeft.length > 0 && buttonsLeft !== buttons) { for (var i = 0, len = buttonsLeft.length; i < len; i++) { var buttonLeft = buttonsLeft[i]; buttonOffset = buttonLeft._buttonOffset; if (typeof buttonOffset === 'undefined') { buttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth; } setTranslate(buttonLeft, buttonOffset); } } if (buttonsRight && buttonsRight.length > 0 && buttonsRight !== buttons) { for (var i = 0, len = buttonsRight.length; i < len; i++) { var buttonRight = buttonsRight[i]; buttonOffset = buttonRight._buttonOffset; if (typeof buttonOffset === 'undefined') { buttonRight._buttonOffset = buttonRight.offsetLeft; } setTranslate(buttonRight, -buttonOffset); } } } }; function toggleEvents(element, isRemove) { var method = !!isRemove ? 'removeEventListener' : 'addEventListener'; element[method]('drag', handleEvent); element[method]('dragend', handleEvent); element[method]('swiperight', handleEvent); element[method]('swipeleft', handleEvent); element[method]('flick', handleEvent); }; /** * 打开滑动菜单 * @param {Object} el * @param {Object} direction */ $.swipeoutOpen = function(el, direction) { if (!el) return; var classList = el.classList; if (classList.contains(CLASS_SELECTED)) return; if (!direction) { if (el.querySelector(SELECTOR_SLIDER_RIGHT)) { direction = 'right'; } else { direction = 'left'; } } var swipeoutAction = el.querySelector($.classSelector(".slider-" + direction)); if (!swipeoutAction) return; swipeoutAction.classList.add(CLASS_SELECTED); classList.add(CLASS_SELECTED); classList.remove(CLASS_TRANSITIONING); var buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON); var swipeoutWidth = swipeoutAction.offsetWidth; var translate = (direction === 'right') ? -swipeoutWidth : swipeoutWidth; var length = buttons.length; var button; for (var i = 0; i < length; i++) { button = buttons[i]; if (direction === 'right') { setTranslate(button, -button.offsetLeft); } else { setTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft)); } } classList.add(CLASS_TRANSITIONING); for (var i = 0; i < length; i++) { setTranslate(buttons[i], translate); } setTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), translate); }; /** * 关闭滑动菜单 * @param {Object} el */ $.swipeoutClose = function(el) { if (!el) return; var classList = el.classList; if (!classList.contains(CLASS_SELECTED)) return; var direction = el.querySelector(SELECTOR_SLIDER_RIGHT + SELECTOR_SELECTED) ? 'right' : 'left'; var swipeoutAction = el.querySelector($.classSelector(".slider-" + direction)); if (!swipeoutAction) return; swipeoutAction.classList.remove(CLASS_SELECTED); classList.remove(CLASS_SELECTED); classList.add(CLASS_TRANSITIONING); var buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON); var swipeoutWidth = swipeoutAction.offsetWidth; var length = buttons.length; var button; setTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), 0); for (var i = 0; i < length; i++) { button = buttons[i]; if (direction === 'right') { setTranslate(button, (-button.offsetLeft)); } else { setTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft)); } } }; window.addEventListener($.EVENT_END, function(event) { //使用touchend来取消高亮,避免一次点击既不触发tap,doubletap,longtap的事件 if (!cell) { return; } toggleActive(false); sliderHandle && toggleEvents(cell, true); }); window.addEventListener($.EVENT_CANCEL, function(event) { //使用touchcancel来取消高亮,避免一次点击既不触发tap,doubletap,longtap的事件 if (!cell) { return; } toggleActive(false); sliderHandle && toggleEvents(cell, true); }); var radioOrCheckboxClick = function(event) { var type = event.target && event.target.type || ''; if (type === 'radio' || type === 'checkbox') { return; } var classList = cell.classList; if (classList.contains('mui-radio')) { var input = cell.querySelector('input[type=radio]'); if (input) { // input.click(); if (!input.disabled && !input.readOnly) { input.checked = !input.checked; $.trigger(input, 'change'); } } } else if (classList.contains('mui-checkbox')) { var input = cell.querySelector('input[type=checkbox]'); if (input) { // input.click(); if (!input.disabled && !input.readOnly) { input.checked = !input.checked; $.trigger(input, 'change'); } } } }; //fixed hashchange(android) window.addEventListener($.EVENT_CLICK, function(e) { if (cell && cell.classList.contains('mui-collapse')) { e.preventDefault(); } }); window.addEventListener('doubletap', function(event) { if (cell) { radioOrCheckboxClick(event); } }); var preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/; window.addEventListener('tap', function(event) { if (!cell) { return; } var isExpand = false; var classList = cell.classList; var ul = cell.parentNode; if (ul && ul.classList.contains(CLASS_RADIO_VIEW)) { if (classList.contains(CLASS_SELECTED)) { return; } var selected = ul.querySelector('li' + SELECTOR_SELECTED); if (selected) { selected.classList.remove(CLASS_SELECTED); } classList.add(CLASS_SELECTED); $.trigger(cell, 'selected', { el: cell }); return; } if (classList.contains('mui-collapse') && !cell.parentNode.classList.contains('mui-unfold')) { if (!preventDefaultException.test(event.target.tagName)) { event.detail.gesture.preventDefault(); } if (!classList.contains(CLASS_ACTIVE)) { //展开时,需要收缩其他同类 var collapse = cell.parentNode.querySelector('.mui-collapse.mui-active'); if (collapse) { collapse.classList.remove(CLASS_ACTIVE); } isExpand = true; } classList.toggle(CLASS_ACTIVE); if (isExpand) { //触发展开事件 $.trigger(cell, 'expand'); //scroll //暂不滚动 // var offsetTop = $.offset(cell).top; // var scrollTop = document.body.scrollTop; // var height = window.innerHeight; // var offsetHeight = cell.offsetHeight; // var cellHeight = (offsetTop - scrollTop + offsetHeight); // if (offsetHeight > height) { // $.scrollTo(offsetTop, 300); // } else if (cellHeight > height) { // $.scrollTo(cellHeight - height + scrollTop, 300); // } } } else { radioOrCheckboxClick(event); } }); })(mui, window, document); (function($, window) { /** * 警告消息框 */ $.alert = function(message, title, btnValue, callback) { if ($.os.plus) { if (typeof message === 'undefined') { return; } else { if (typeof title === 'function') { callback = title; title = null; btnValue = '确定'; } else if (typeof btnValue === 'function') { callback = btnValue; btnValue = null; } $.plusReady(function() { plus.nativeUI.alert(message, callback, title, btnValue); }); } } else { //TODO H5版本 window.alert(message); } }; })(mui, window); (function($, window) { /** * 确认消息框 */ $.confirm = function(message, title, btnArray, callback) { if ($.os.plus) { if (typeof message === 'undefined') { return; } else { if (typeof title === 'function') { callback = title; title = null; btnArray = null; } else if (typeof btnArray === 'function') { callback = btnArray; btnArray = null; } $.plusReady(function() { plus.nativeUI.confirm(message, callback, title, btnArray); }); } } else { //H5版本,0为确认,1为取消 if (window.confirm(message)) { callback({ index: 0 }); } else { callback({ index: 1 }); } } }; })(mui, window); (function($, window) { /** * 输入对话框 */ $.prompt = function(text, defaultText, title, btnArray, callback) { if ($.os.plus) { if (typeof message === 'undefined') { return; } else { if (typeof defaultText === 'function') { callback = defaultText; defaultText = null; title = null; btnArray = null; } else if (typeof title === 'function') { callback = title; title = null; btnArray = null; } else if (typeof btnArray === 'function') { callback = btnArray; btnArray = null; } $.plusReady(function() { plus.nativeUI.prompt(text, callback, title, defaultText, btnArray); }); } } else { //H5版本(确认index为0,取消index为1) var result = window.prompt(text); if (result) { callback({ index: 0, value: result }); } else { callback({ index: 1, value: '' }); } } }; })(mui, window); (function($, window) { var CLASS_ACTIVE = 'mui-active'; /** * 自动消失提示框 */ $.toast = function(message,options) { var durations = { 'long': 3500, 'short': 2000 }; //计算显示时间 options = $.extend({ duration: 'short' }, options || {}); if ($.os.plus && options.type !== 'div') { //默认显示在底部; $.plusReady(function() { plus.nativeUI.toast(message, { verticalAlign: 'bottom', duration:options.duration }); }); } else { if (typeof options.duration === 'number') { duration = options.duration>0 ? options.duration:durations['short']; } else { duration = durations[options.duration]; } if (!duration) { duration = durations['short']; } var toast = document.createElement('div'); toast.classList.add('mui-toast-container'); toast.innerHTML = '
    ' + message + '
    '; toast.addEventListener('webkitTransitionEnd', function() { if (!toast.classList.contains(CLASS_ACTIVE)) { toast.parentNode.removeChild(toast); toast = null; } }); //点击则自动消失 toast.addEventListener('click', function() { toast.parentNode.removeChild(toast); toast = null; }); document.body.appendChild(toast); toast.offsetHeight; toast.classList.add(CLASS_ACTIVE); setTimeout(function() { toast && toast.classList.remove(CLASS_ACTIVE); }, duration); return { isVisible: function() {return !!toast;} } } }; })(mui, window); /** * Popup(alert,confirm,prompt) * @param {Object} $ * @param {Object} window * @param {Object} document */ (function($, window, document) { var CLASS_POPUP = 'mui-popup'; var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop'; var CLASS_POPUP_IN = 'mui-popup-in'; var CLASS_POPUP_OUT = 'mui-popup-out'; var CLASS_POPUP_INNER = 'mui-popup-inner'; var CLASS_POPUP_TITLE = 'mui-popup-title'; var CLASS_POPUP_TEXT = 'mui-popup-text'; var CLASS_POPUP_INPUT = 'mui-popup-input'; var CLASS_POPUP_BUTTONS = 'mui-popup-buttons'; var CLASS_POPUP_BUTTON = 'mui-popup-button'; var CLASS_POPUP_BUTTON_BOLD = 'mui-popup-button-bold'; var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop'; var CLASS_ACTIVE = 'mui-active'; var popupStack = []; var backdrop = (function() { var element = document.createElement('div'); element.classList.add(CLASS_POPUP_BACKDROP); element.addEventListener($.EVENT_MOVE, $.preventDefault); element.addEventListener('webkitTransitionEnd', function() { if (!this.classList.contains(CLASS_ACTIVE)) { element.parentNode && element.parentNode.removeChild(element); } }); return element; }()); var createInput = function(placeholder) { return '
    '; }; var createInner = function(message, title, extra) { return '
    ' + title + '
    ' + message.replace(/\r\n/g, "
    ").replace(/\n/g, "
    ") + '
    ' + (extra || '') + '
    '; }; var createButtons = function(btnArray) { var length = btnArray.length; var btns = []; for (var i = 0; i < length; i++) { btns.push('' + btnArray[i] + ''); } return '
    ' + btns.join('') + '
    '; }; var createPopup = function(html, callback) { var popupElement = document.createElement('div'); popupElement.className = CLASS_POPUP; popupElement.innerHTML = html; var removePopupElement = function() { popupElement.parentNode && popupElement.parentNode.removeChild(popupElement); popupElement = null; }; popupElement.addEventListener($.EVENT_MOVE, $.preventDefault); popupElement.addEventListener('webkitTransitionEnd', function(e) { if (popupElement && e.target === popupElement && popupElement.classList.contains(CLASS_POPUP_OUT)) { removePopupElement(); } }); popupElement.style.display = 'block'; document.body.appendChild(popupElement); popupElement.offsetHeight; popupElement.classList.add(CLASS_POPUP_IN); if (!backdrop.classList.contains(CLASS_ACTIVE)) { backdrop.style.display = 'block'; document.body.appendChild(backdrop); backdrop.offsetHeight; backdrop.classList.add(CLASS_ACTIVE); } var btns = $.qsa('.' + CLASS_POPUP_BUTTON, popupElement); var input = popupElement.querySelector('.' + CLASS_POPUP_INPUT + ' input'); var popup = { element: popupElement, close: function(index, animate) { if (popupElement) { var result = callback && callback({ index: index || 0, value: input && input.value || '' }); if (result === false) { //返回false则不关闭当前popup return; } if (animate !== false) { popupElement.classList.remove(CLASS_POPUP_IN); popupElement.classList.add(CLASS_POPUP_OUT); } else { removePopupElement(); } popupStack.pop(); //如果还有其他popup,则不remove backdrop if (popupStack.length) { popupStack[popupStack.length - 1]['show'](animate); } else { backdrop.classList.remove(CLASS_ACTIVE); } } } }; var handleEvent = function(e) { popup.close(btns.indexOf(e.target)); }; $(popupElement).on('tap', '.' + CLASS_POPUP_BUTTON, handleEvent); if (popupStack.length) { popupStack[popupStack.length - 1]['hide'](); } popupStack.push({ close: popup.close, show: function(animate) { popupElement.style.display = 'block'; popupElement.offsetHeight; popupElement.classList.add(CLASS_POPUP_IN); }, hide: function() { popupElement.style.display = 'none'; popupElement.classList.remove(CLASS_POPUP_IN); } }); return popup; }; var createAlert = function(message, title, btnValue, callback, type) { if (typeof message === 'undefined') { return; } else { if (typeof title === 'function') { callback = title; type = btnValue; title = null; btnValue = null; } else if (typeof btnValue === 'function') { type = callback; callback = btnValue; btnValue = null; } } if (!$.os.plus || type === 'div') { return createPopup(createInner(message, title || '提示') + createButtons([btnValue || '确定']), callback); } return plus.nativeUI.alert(message, callback, title || '提示', btnValue || '确定'); }; var createConfirm = function(message, title, btnArray, callback, type) { if (typeof message === 'undefined') { return; } else { if (typeof title === 'function') { callback = title; type = btnArray; title = null; btnArray = null; } else if (typeof btnArray === 'function') { type = callback; callback = btnArray; btnArray = null; } } if (!$.os.plus || type === 'div') { return createPopup(createInner(message, title || '提示') + createButtons(btnArray || ['取消', '确认']), callback); } return plus.nativeUI.confirm(message, callback, title, btnArray || ['取消', '确认']); }; var createPrompt = function(message, placeholder, title, btnArray, callback, type) { if (typeof message === 'undefined') { return; } else { if (typeof placeholder === 'function') { callback = placeholder; type = title; placeholder = null; title = null; btnArray = null; } else if (typeof title === 'function') { callback = title; type = btnArray; title = null; btnArray = null; } else if (typeof btnArray === 'function') { type = callback; callback = btnArray; btnArray = null; } } if (!$.os.plus || type === 'div') { return createPopup(createInner(message, title || '提示', createInput(placeholder)) + createButtons(btnArray || ['取消', '确认']), callback); } return plus.nativeUI.prompt(message, callback, title || '提示', placeholder, btnArray || ['取消', '确认']); }; var closePopup = function() { if (popupStack.length) { popupStack[popupStack.length - 1]['close'](); return true; } else { return false; } }; var closePopups = function() { while (popupStack.length) { popupStack[popupStack.length - 1]['close'](); } }; $.closePopup = closePopup; $.closePopups = closePopups; $.alert = createAlert; $.confirm = createConfirm; $.prompt = createPrompt; })(mui, window, document); (function($, document) { var CLASS_PROGRESSBAR = 'mui-progressbar'; var CLASS_PROGRESSBAR_IN = 'mui-progressbar-in'; var CLASS_PROGRESSBAR_OUT = 'mui-progressbar-out'; var CLASS_PROGRESSBAR_INFINITE = 'mui-progressbar-infinite'; var SELECTOR_PROGRESSBAR = '.mui-progressbar'; var _findProgressbar = function(container) { container = $(container || 'body'); if (container.length === 0) return; container = container[0]; if (container.classList.contains(CLASS_PROGRESSBAR)) { return container; } var progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR); if (progressbars) { for (var i = 0, len = progressbars.length; i < len; i++) { var progressbar = progressbars[i]; if (progressbar.parentNode === container) { return progressbar; } } } }; /** * 创建并显示进度条 * @param {Object} container 可选,默认body,支持selector,DOM Node,mui wrapper * @param {Object} progress 可选,undefined表示循环,数字表示具体进度 * @param {Object} color 可选,指定颜色样式(目前暂未提供实际样式,可暂时不暴露此参数) */ var showProgressbar = function(container, progress, color) { if (typeof container === 'number') { color = progress; progress = container; container = 'body'; } container = $(container || 'body'); if (container.length === 0) return; container = container[0]; var progressbar; if (container.classList.contains(CLASS_PROGRESSBAR)) { progressbar = container; } else { var progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR + ':not(.' + CLASS_PROGRESSBAR_OUT + ')'); if (progressbars) { for (var i = 0, len = progressbars.length; i < len; i++) { var _progressbar = progressbars[i]; if (_progressbar.parentNode === container) { progressbar = _progressbar; break; } } } if (!progressbar) { progressbar = document.createElement('span'); progressbar.className = CLASS_PROGRESSBAR + ' ' + CLASS_PROGRESSBAR_IN + (typeof progress !== 'undefined' ? '' : (' ' + CLASS_PROGRESSBAR_INFINITE)) + (color ? (' ' + CLASS_PROGRESSBAR + '-' + color) : ''); if (typeof progress !== 'undefined') { progressbar.innerHTML = ''; } container.appendChild(progressbar); } else { progressbar.classList.add(CLASS_PROGRESSBAR_IN); } } if (progress) setProgressbar(container, progress); return progressbar; }; /** * 关闭进度条 * @param {Object} container 可选,默认body,支持selector,DOM Node,mui wrapper */ var hideProgressbar = function(container) { var progressbar = _findProgressbar(container); if (!progressbar) { return; } var classList = progressbar.classList; if (!classList.contains(CLASS_PROGRESSBAR_IN) || classList.contains(CLASS_PROGRESSBAR_OUT)) { return; } classList.remove(CLASS_PROGRESSBAR_IN); classList.add(CLASS_PROGRESSBAR_OUT); progressbar.addEventListener('webkitAnimationEnd', function() { progressbar.parentNode && progressbar.parentNode.removeChild(progressbar); progressbar = null; }); return; }; /** * 设置指定进度条进度 * @param {Object} container 可选,默认body,支持selector,DOM Node,mui wrapper * @param {Object} progress 可选,默认0 取值范围[0-100] * @param {Object} speed 进度条动画时间 */ var setProgressbar = function(container, progress, speed) { if (typeof container === 'number') { speed = progress; progress = container; container = false; } var progressbar = _findProgressbar(container); if (!progressbar || progressbar.classList.contains(CLASS_PROGRESSBAR_INFINITE)) { return; } if (progress) progress = Math.min(Math.max(progress, 0), 100); progressbar.offsetHeight; var span = progressbar.querySelector('span'); if (span) { var style = span.style; style.webkitTransform = 'translate3d(' + (-100 + progress) + '%,0,0)'; if (typeof speed !== 'undefined') { style.webkitTransitionDuration = speed + 'ms'; } else { style.webkitTransitionDuration = ''; } } return progressbar; }; $.fn.progressbar = function(options) { var progressbarApis = []; options = options || {}; this.each(function() { var self = this; var progressbarApi = self.mui_plugin_progressbar; if (!progressbarApi) { self.mui_plugin_progressbar = progressbarApi = { options: options, setOptions: function(options) { this.options = options; }, show: function() { return showProgressbar(self, this.options.progress, this.options.color); }, setProgress: function(progress) { return setProgressbar(self, progress); }, hide: function() { return hideProgressbar(self); } }; } else if (options) { progressbarApi.setOptions(options); } progressbarApis.push(progressbarApi); }); return progressbarApis.length === 1 ? progressbarApis[0] : progressbarApis; }; // $.setProgressbar = setProgressbar; // $.showProgressbar = showProgressbar; // $.hideProgressbar = hideProgressbar; })(mui, document); /** * Input(TODO resize) * @param {type} $ * @param {type} window * @param {type} document * @returns {undefined} */ (function($, window, document) { var CLASS_ICON = 'mui-icon'; var CLASS_ICON_CLEAR = 'mui-icon-clear'; var CLASS_ICON_SPEECH = 'mui-icon-speech'; var CLASS_ICON_SEARCH = 'mui-icon-search'; var CLASS_ICON_PASSWORD = 'mui-icon-eye'; var CLASS_INPUT_ROW = 'mui-input-row'; var CLASS_PLACEHOLDER = 'mui-placeholder'; var CLASS_TOOLTIP = 'mui-tooltip'; var CLASS_HIDDEN = 'mui-hidden'; var CLASS_FOCUSIN = 'mui-focusin'; var SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR; var SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH; var SELECTOR_ICON_PASSWORD = '.' + CLASS_ICON_PASSWORD; var SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER; var SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP; var findRow = function(target) { for (; target && target !== document; target = target.parentNode) { if (target.classList && target.classList.contains(CLASS_INPUT_ROW)) { return target; } } return null; }; var Input = function(element, options) { this.element = element; this.options = options || { actions: 'clear' }; if (~this.options.actions.indexOf('slider')) { //slider this.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN; this.sliderActionSelector = SELECTOR_TOOLTIP; } else { //clear,speech,search if (~this.options.actions.indexOf('clear')) { this.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + ' ' + CLASS_HIDDEN; this.clearActionSelector = SELECTOR_ICON_CLOSE; } if (~this.options.actions.indexOf('speech')) { //only for 5+ this.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH; this.speechActionSelector = SELECTOR_ICON_SPEECH; } if (~this.options.actions.indexOf('search')) { this.searchActionClass = CLASS_PLACEHOLDER; this.searchActionSelector = SELECTOR_PLACEHOLDER; } if (~this.options.actions.indexOf('password')) { this.passwordActionClass = CLASS_ICON + ' ' + CLASS_ICON_PASSWORD; this.passwordActionSelector = SELECTOR_ICON_PASSWORD; } } this.init(); }; Input.prototype.init = function() { this.initAction(); this.initElementEvent(); }; Input.prototype.initAction = function() { var self = this; var row = self.element.parentNode; if (row) { if (self.sliderActionClass) { self.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector); } else { if (self.searchActionClass) { self.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector); self.searchAction.addEventListener('tap', function(e) { $.focus(self.element); e.stopPropagation(); }); } if (self.speechActionClass) { self.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector); self.speechAction.addEventListener('click', $.stopPropagation); self.speechAction.addEventListener('tap', function(event) { self.speechActionClick(event); }); } if (self.clearActionClass) { self.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector); self.clearAction.addEventListener('tap', function(event) { self.clearActionClick(event); }); } if (self.passwordActionClass) { self.passwordAction = self.createAction(row, self.passwordActionClass, self.passwordActionSelector); self.passwordAction.addEventListener('tap', function(event) { self.passwordActionClick(event); }); } } } }; Input.prototype.createAction = function(row, actionClass, actionSelector) { var action = row.querySelector(actionSelector); if (!action) { var action = document.createElement('span'); action.className = actionClass; if (actionClass === this.searchActionClass) { action.innerHTML = '' + this.element.getAttribute('placeholder') + ''; this.element.setAttribute('placeholder', ''); if (this.element.value.trim()) { row.classList.add('mui-active'); } } row.insertBefore(action, this.element.nextSibling); } return action; }; Input.prototype.initElementEvent = function() { var element = this.element; if (this.sliderActionClass) { var tooltip = this.sliderAction; var timer = null; var showTip = function() { //每次重新计算是因为控件可能被隐藏,初始化时计算是不正确的 tooltip.classList.remove(CLASS_HIDDEN); var offsetLeft = element.offsetLeft; var width = element.offsetWidth - 28; var tooltipWidth = tooltip.offsetWidth; var distince = Math.abs(element.max - element.min); var scaleWidth = (width / distince) * Math.abs(element.value - element.min); tooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px'; tooltip.innerText = element.value; if (timer) { clearTimeout(timer); } timer = setTimeout(function() { tooltip.classList.add(CLASS_HIDDEN); }, 1000); }; element.addEventListener('input', showTip); element.addEventListener('tap', showTip); element.addEventListener($.EVENT_MOVE, function(e) { e.stopPropagation(); }); } else { if (this.clearActionClass) { var action = this.clearAction; if (!action) { return; } $.each(['keyup', 'change', 'input', 'focus', 'cut', 'paste'], function(index, type) { (function(type) { element.addEventListener(type, function() { action.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN); }); })(type); }); element.addEventListener('blur', function() { action.classList.add(CLASS_HIDDEN); }); } if (this.searchActionClass) { element.addEventListener('focus', function() { element.parentNode.classList.add('mui-active'); }); element.addEventListener('blur', function() { if (!element.value.trim()) { element.parentNode.classList.remove('mui-active'); } }); } } }; Input.prototype.setPlaceholder = function(text) { if (this.searchActionClass) { var placeholder = this.element.parentNode.querySelector(SELECTOR_PLACEHOLDER); placeholder && (placeholder.getElementsByTagName('span')[1].innerText = text); } else { this.element.setAttribute('placeholder', text); } }; Input.prototype.passwordActionClick = function(event) { if (this.element.type === 'text') { this.element.type = 'password'; } else { this.element.type = 'text'; } this.passwordAction.classList.toggle('mui-active'); event.preventDefault(); }; Input.prototype.clearActionClick = function(event) { var self = this; self.element.value = ''; $.focus(self.element); self.clearAction.classList.add(CLASS_HIDDEN); event.preventDefault(); }; Input.prototype.speechActionClick = function(event) { if (window.plus) { var self = this; var oldValue = self.element.value; self.element.value = ''; document.body.classList.add(CLASS_FOCUSIN); plus.speech.startRecognize({ engine: 'iFly' }, function(s) { self.element.value += s; $.focus(self.element); plus.speech.stopRecognize(); $.trigger(self.element, 'recognized', { value: self.element.value }); if (oldValue !== self.element.value) { $.trigger(self.element, 'change'); $.trigger(self.element, 'input'); } // document.body.classList.remove(CLASS_FOCUSIN); }, function(e) { document.body.classList.remove(CLASS_FOCUSIN); }); } else { alert('only for 5+'); } event.preventDefault(); }; $.fn.input = function(options) { var inputApis = []; this.each(function() { var inputApi = null; var actions = []; var row = findRow(this.parentNode); if (this.type === 'range' && row.classList.contains('mui-input-range')) { actions.push('slider'); } else { var classList = this.classList; if (classList.contains('mui-input-clear')) { actions.push('clear'); } if (!($.os.android && $.os.stream) && classList.contains('mui-input-speech')) { actions.push('speech'); } if (classList.contains('mui-input-password')) { actions.push('password'); } if (this.type === 'search' && row.classList.contains('mui-search')) { actions.push('search'); } } var id = this.getAttribute('data-input-' + actions[0]); if (!id) { id = ++$.uuid; inputApi = $.data[id] = new Input(this, { actions: actions.join(',') }); for (var i = 0, len = actions.length; i < len; i++) { this.setAttribute('data-input-' + actions[i], id); } } else { inputApi = $.data[id]; } inputApis.push(inputApi); }); return inputApis.length === 1 ? inputApis[0] : inputApis; }; $.ready(function() { $('.mui-input-row input').input(); }); })(mui, window, document); (function($, window) { var CLASS_ACTIVE = 'mui-active'; var rgbaRegex = /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*(?:\.\d+)?)\)$/; var getColor = function(colorStr) { var matches = colorStr.match(rgbaRegex); if (matches && matches.length === 5) { return [ matches[1], matches[2], matches[3], matches[4] ]; } return []; }; var Transparent = function(element, options) { this.element = element; this.options = $.extend({ top: 0, //距离顶部高度(到达该高度即触发) offset: 150, //滚动透明距离 duration: 16, //过渡时间 scrollby: window//监听滚动距离容器 }, options || {}); this.scrollByElem = this.options.scrollby || window; if (!this.scrollByElem) { throw new Error("监听滚动的元素不存在"); } this.isNativeScroll = false; if (this.scrollByElem === window) { this.isNativeScroll = true; } else if (!~this.scrollByElem.className.indexOf('mui-scroll-wrapper')) { this.isNativeScroll = true; } this._style = this.element.style; this._bgColor = this._style.backgroundColor; var color = getColor(mui.getStyles(this.element, 'backgroundColor')); if (color.length) { this._R = color[0]; this._G = color[1]; this._B = color[2]; this._A = parseFloat(color[3]); this.lastOpacity = this._A; this._bufferFn = $.buffer(this.handleScroll, this.options.duration, this); this.initEvent(); } else { throw new Error("元素背景颜色必须为RGBA"); } }; Transparent.prototype.initEvent = function() { this.scrollByElem.addEventListener('scroll', this._bufferFn); if (this.isNativeScroll) { //原生scroll this.scrollByElem.addEventListener($.EVENT_MOVE, this._bufferFn); } } Transparent.prototype.handleScroll = function(e) { var y = window.scrollY; if (!this.isNativeScroll && e && e.detail) { y = -e.detail.y; } var opacity = (y - this.options.top) / this.options.offset + this._A; opacity = Math.min(Math.max(this._A, opacity), 1); this._style.backgroundColor = 'rgba(' + this._R + ',' + this._G + ',' + this._B + ',' + opacity + ')'; if (opacity > this._A) { this.element.classList.add(CLASS_ACTIVE); } else { this.element.classList.remove(CLASS_ACTIVE); } if (this.lastOpacity !== opacity) { $.trigger(this.element, 'alpha', { alpha: opacity }); this.lastOpacity = opacity; } }; Transparent.prototype.destory = function() { this.scrollByElem.removeEventListener('scroll', this._bufferFn); this.scrollByElem.removeEventListener($.EVENT_MOVE, this._bufferFn); this.element.style.backgroundColor = this._bgColor; this.element.mui_plugin_transparent = null; }; $.fn.transparent = function(options) { options = options || {}; var transparentApis = []; this.each(function() { var transparentApi = this.mui_plugin_transparent; if (!transparentApi) { var top = this.getAttribute('data-top'); var offset = this.getAttribute('data-offset'); var duration = this.getAttribute('data-duration'); var scrollby = this.getAttribute('data-scrollby'); if (top !== null && typeof options.top === 'undefined') { options.top = top; } if (offset !== null && typeof options.offset === 'undefined') { options.offset = offset; } if (duration !== null && typeof options.duration === 'undefined') { options.duration = duration; } if (scrollby !== null && typeof options.scrollby === 'undefined') { options.scrollby = document.querySelector(scrollby) || window; } transparentApi = this.mui_plugin_transparent = new Transparent(this, options); } transparentApis.push(transparentApi); }); return transparentApis.length === 1 ? transparentApis[0] : transparentApis; }; $.ready(function() { $('.mui-bar-transparent').transparent(); }); })(mui, window); /** * 数字输入框 * varstion 1.0.1 * by Houfeng * Houfeng@DCloud.io */ (function($) { var touchSupport = ('ontouchstart' in document); var tapEventName = touchSupport ? 'tap' : 'click'; var changeEventName = 'change'; var holderClassName = 'mui-numbox'; var plusClassSelector = '.mui-btn-numbox-plus,.mui-numbox-btn-plus'; var minusClassSelector = '.mui-btn-numbox-minus,.mui-numbox-btn-minus'; var inputClassSelector = '.mui-input-numbox,.mui-numbox-input'; var Numbox = $.Numbox = $.Class.extend({ /** * 构造函数 **/ init: function(holder, options) { var self = this; if (!holder) { throw "构造 numbox 时缺少容器元素"; } self.holder = holder; options = options || {}; options.step = parseInt(options.step || 1); self.options = options; self.input = $.qsa(inputClassSelector, self.holder)[0]; self.plus = $.qsa(plusClassSelector, self.holder)[0]; self.minus = $.qsa(minusClassSelector, self.holder)[0]; self.checkValue(); self.initEvent(); }, /** * 初始化事件绑定 **/ initEvent: function() { var self = this; self.plus.addEventListener(tapEventName, function(event) { var val = parseInt(self.input.value) + self.options.step; self.input.value = val.toString(); $.trigger(self.input, changeEventName, null); }); self.minus.addEventListener(tapEventName, function(event) { var val = parseInt(self.input.value) - self.options.step; self.input.value = val.toString(); $.trigger(self.input, changeEventName, null); }); self.input.addEventListener(changeEventName, function(event) { self.checkValue(); var val = parseInt(self.input.value); //触发顶层容器 $.trigger(self.holder, changeEventName, { value: val }); }); }, /** * 获取当前值 **/ getValue: function() { var self = this; return parseInt(self.input.value); }, /** * 验证当前值是法合法 **/ checkValue: function() { var self = this; var val = self.input.value; if (val == null || val == '' || isNaN(val)) { self.input.value = self.options.min || 0; self.minus.disabled = self.options.min != null; } else { var val = parseInt(val); if (self.options.max != null && !isNaN(self.options.max) && val >= parseInt(self.options.max)) { val = self.options.max; self.plus.disabled = true; } else { self.plus.disabled = false; } if (self.options.min != null && !isNaN(self.options.min) && val <= parseInt(self.options.min)) { val = self.options.min; self.minus.disabled = true; } else { self.minus.disabled = false; } self.input.value = val; } }, /** * 更新选项 **/ setOption: function(name, value) { var self = this; self.options[name] = value; }, /** * 动态设置新值 **/ setValue: function(value) { this.input.value = value; this.checkValue(); } }); $.fn.numbox = function(options) { var instanceArray = []; //遍历选择的元素 this.each(function(i, element) { if (element.numbox) { return; } if (options) { element.numbox = new Numbox(element, options); } else { var optionsText = element.getAttribute('data-numbox-options'); var options = optionsText ? JSON.parse(optionsText) : {}; options.step = element.getAttribute('data-numbox-step') || options.step; options.min = element.getAttribute('data-numbox-min') || options.min; options.max = element.getAttribute('data-numbox-max') || options.max; element.numbox = new Numbox(element, options); } }); return this[0] ? this[0].numbox : null; } //自动处理 class='mui-locker' 的 dom $.ready(function() { $('.' + holderClassName).numbox(); }); }(mui)); /** * Button * @param {type} $ * @param {type} window * @param {type} document * @returns {undefined} */ (function($, window, document) { var CLASS_ICON = 'mui-icon'; var CLASS_DISABLED = 'mui-disabled'; var STATE_RESET = 'reset'; var STATE_LOADING = 'loading'; var defaultOptions = { loadingText: 'Loading...', //文案 loadingIcon: 'mui-spinner' + ' ' + 'mui-spinner-white', //图标,可为空 loadingIconPosition: 'left' //图标所处位置,仅支持left|right }; var Button = function(element, options) { this.element = element; this.options = $.extend({}, defaultOptions, options); if (!this.options.loadingText) { this.options.loadingText = defaultOptions.loadingText; } if (this.options.loadingIcon === null) { this.options.loadingIcon = 'mui-spinner'; if ($.getStyles(this.element, 'color') === 'rgb(255, 255, 255)') { this.options.loadingIcon += ' ' + 'mui-spinner-white'; } } this.isInput = this.element.tagName === 'INPUT'; this.resetHTML = this.isInput ? this.element.value : this.element.innerHTML; this.state = ''; }; Button.prototype.loading = function() { this.setState(STATE_LOADING); }; Button.prototype.reset = function() { this.setState(STATE_RESET); }; Button.prototype.setState = function(state) { if (this.state === state) { return false; } this.state = state; if (state === STATE_RESET) { this.element.disabled = false; this.element.classList.remove(CLASS_DISABLED); this.setHtml(this.resetHTML); } else if (state === STATE_LOADING) { this.element.disabled = true; this.element.classList.add(CLASS_DISABLED); var html = this.isInput ? this.options.loadingText : ('' + this.options.loadingText + ''); if (this.options.loadingIcon && !this.isInput) { if (this.options.loadingIconPosition === 'right') { html += ' '; } else { html = ' ' + html; } } this.setHtml(html); } }; Button.prototype.setHtml = function(html) { if (this.isInput) { this.element.value = html; } else { this.element.innerHTML = html; } } $.fn.button = function(state) { var buttonApis = []; this.each(function() { var buttonApi = this.mui_plugin_button; if (!buttonApi) { var loadingText = this.getAttribute('data-loading-text'); var loadingIcon = this.getAttribute('data-loading-icon'); var loadingIconPosition = this.getAttribute('data-loading-icon-position'); this.mui_plugin_button = buttonApi = new Button(this, { loadingText: loadingText, loadingIcon: loadingIcon, loadingIconPosition: loadingIconPosition }); } if (state === STATE_LOADING || state === STATE_RESET) { buttonApi.setState(state); } buttonApis.push(buttonApi); }); return buttonApis.length === 1 ? buttonApis[0] : buttonApis; }; })(mui, window, document); ================================================ FILE: examples/hello-mui/js/mui.lazyload.img.js ================================================ (function($, window, document) { var ImageLazyload = $.Lazyload.extend({ init: function(element, options) { this._super(element, options); }, _init: function() { this.options.selector = '[data-lazyload]'; this._super(); }, _set: function(element, uri) { if (element.tagName === 'IMG') { element.src = uri; } else { element.style.backgroundImage = "url(" + uri + ")"; } }, _hasPlaceholder: function(element) { if (element.offsetWidth) { if (element.tagName === 'IMG') { return !!element.src; } else { return !!element.style.backgroundImage; } } return false; }, _addPlaceHolder: function(element) { var self = this; if (element.tagName === 'IMG') { self._counter++; element.onload = function() { self._counter--; self.addCallback(element, self.handle); this.onload = null; }; self.onPlaceHolder(function(placeholder) { self._set(element, placeholder); }); } else { element.style.backgroundImage = "url(" + self.options.placeholder + ")"; } }, addElement: function(element) { var self = this; var uri = element.getAttribute('data-lazyload'); if (uri) { if (self._hasPlaceholder(element)) { self.addCallback(element, self.handle); } else { self.onPlaceHolder = self._createLoader(function(callback) { var img = new Image(); var placeholder = self.options.placeholder; img.src = placeholder; img.onload = img.onerror = function() { callback(placeholder); }; }); self._addPlaceHolder(element); } return true; } return false; }, set: function(element, uri) { var self = this; var img = new Image(); img.onload = function() { self._set(element, uri); $.trigger(self.element, 'success', { element: element, uri: uri }); }; img.onerror = function() { $.trigger(self.element, 'error', { element: element, uri: uri }); }; img.src = uri; element.removeAttribute('data-lazyload'); //只尝试一次,后续可能支持多次尝试 }, handle: function(element, key) { var uri = element.getAttribute('data-lazyload'); if (uri) { this.set(element, uri); //element.parentNode.parentNode.setAttribute('data-lazyload', 'true'); //debug } }, destroy: function() { this._super(); this.element.removeAttribute('data-imageLazyload'); } }); $.fn.imageLazyload = function(options) { var lazyloadApis = []; this.each(function() { var self = this; var lazyloadApi = null; if (self === document || self === window) { self = document.body; } var id = self.getAttribute('data-imageLazyload'); if (!id) { id = ++$.uuid; $.data[id] = lazyloadApi = new ImageLazyload(self, options); self.setAttribute('data-imageLazyload', id); } else { lazyloadApi = $.data[id]; } lazyloadApis.push(lazyloadApi); }); return lazyloadApis.length === 1 ? lazyloadApis[0] : lazyloadApis; } })(mui, window, document); ================================================ FILE: examples/hello-mui/js/mui.lazyload.js ================================================ (function($, window, document) { var mid = 0; $.Lazyload = $.Class.extend({ init: function(element, options) { var self = this; this.container = this.element = element; // placeholder //默认图片 this.options = $.extend({ selector: '', //查询哪些元素需要lazyload diff: false, //距离视窗底部多少像素出发lazyload force: false, //强制加载(不论元素是否在是视窗内) autoDestroy: true, //元素加载完后是否自动销毁当前插件对象 duration: 100 //滑动停止多久后开始加载 }, options); this._key = 0; this._containerIsNotDocument = this.container.nodeType !== 9; this._callbacks = {}; this._init(); }, _init: function() { this._initLoadFn(); this.addElements(); this._loadFn(); $.ready(function() { this._loadFn(); }.bind(this)); this.resume(); }, _initLoadFn: function() { var self = this; self._loadFn = this._buffer(function() { // 加载延迟项 if(self.options.autoDestroy && self._counter == 0 && $.isEmptyObject(self._callbacks)) { self.destroy(); } self._loadItems(); }, self.options.duration, self); }, /** *根据加载函数实现加载器 *@param {Function} load 加载函数 *@returns {Function} 加载器 */ _createLoader: function(load) { var value, loading, handles = [], h; return function(handle) { if(!loading) { loading = true; load(function(v) { value = v; while(h = handles.shift()) { try { h && h.apply(null, [value]); } catch(e) { setTimeout(function() { throw e; }, 0) } } }) } if(value) { handle && handle.apply(null, [value]); return value; } handle && handles.push(handle); return value; } }, _buffer: function(fn, ms, context) { var timer; var lastStart = 0; var lastEnd = 0; var ms = ms || 150; function run() { if(timer) { timer.cancel(); timer = 0; } lastStart = $.now(); fn.apply(context || this, arguments); lastEnd = $.now(); } return $.extend(function() { if( (!lastStart) || // 从未运行过 (lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒 (lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成,后8*ms毫秒 ) { run(); } else { if(timer) { timer.cancel(); } timer = $.later(run, ms, null, arguments); } }, { stop: function() { if(timer) { timer.cancel(); timer = 0; } } }); }, _getBoundingRect: function(c) { var vh, vw, left, top; if(c !== undefined) { vh = c.offsetHeight; vw = c.offsetWidth; var offset = $.offset(c); left = offset.left; top = offset.top; } else { vh = window.innerHeight; vw = window.innerWidth; left = 0; top = window.pageYOffset; } var diff = this.options.diff; var diffX = diff === false ? vw : diff; var diffX0 = 0; var diffX1 = diffX; var diffY = diff === false ? vh : diff; var diffY0 = 0; var diffY1 = diffY; var right = left + vw; var bottom = top + vh; left -= diffX0; right += diffX1; top -= diffY0; bottom += diffY1; return { left: left, top: top, right: right, bottom: bottom }; }, _cacheWidth: function(el) { if(el._mui_lazy_width) { return el._mui_lazy_width; } return el._mui_lazy_width = el.offsetWidth; }, _cacheHeight: function(el) { if(el._mui_lazy_height) { return el._mui_lazy_height; } return el._mui_lazy_height = el.offsetHeight; }, _isCross: function(r1, r2) { var r = {}; r.top = Math.max(r1.top, r2.top); r.bottom = Math.min(r1.bottom, r2.bottom); r.left = Math.max(r1.left, r2.left); r.right = Math.min(r1.right, r2.right); return r.bottom >= r.top && r.right >= r.left; }, _elementInViewport: function(elem, windowRegion, containerRegion) { // display none or inside display none if(!elem.offsetWidth) { return false; } var elemOffset = $.offset(elem); var inContainer = true; var inWin; var left = elemOffset.left; var top = elemOffset.top; var elemRegion = { left: left, top: top, right: left + this._cacheWidth(elem), bottom: top + this._cacheHeight(elem) }; inWin = this._isCross(windowRegion, elemRegion); if(inWin && containerRegion) { inContainer = this._isCross(containerRegion, elemRegion); } // 确保在容器内出现 // 并且在视窗内也出现 return inContainer && inWin; }, _loadItems: function() { var self = this; // container is display none if(self._containerIsNotDocument && !self.container.offsetWidth) { return; } self._windowRegion = self._getBoundingRect(); if(self._containerIsNotDocument) { self._containerRegion = self._getBoundingRect(this.container); } $.each(self._callbacks, function(key, callback) { callback && self._loadItem(key, callback); }); }, _loadItem: function(key, callback) { var self = this; callback = callback || self._callbacks[key]; if(!callback) { return true; } var el = callback.el; var remove = false; var fn = callback.fn; if(self.options.force || self._elementInViewport(el, self._windowRegion, self._containerRegion)) { try { remove = fn.call(self, el, key); } catch(e) { setTimeout(function() { throw e; }, 0); } } if(remove !== false) { delete self._callbacks[key]; } return remove; }, addCallback: function(el, fn) { var self = this; var callbacks = self._callbacks; var callback = { el: el, fn: fn || $.noop }; var key = ++this._key; callbacks[key] = callback; // add 立即检测,防止首屏元素问题 if(self._windowRegion) { self._loadItem(key, callback); } else { self.refresh(); } }, addElements: function(elements) { var self = this; self._counter = self._counter || 0; var lazyloads = []; if(!elements && self.options.selector) { lazyloads = self.container.querySelectorAll(self.options.selector); } else { $.each(elements, function(index, el) { lazyloads = lazyloads.concat($.qsa(self.options.selector, el)); }); } //addElements时,自动初始化一次 if(self._containerIsNotDocument) { self._containerRegion = self._getBoundingRect(self.container); } $.each(lazyloads, function(index, el) { if(!el.getAttribute('data-lazyload-id')) { if(self.addElement(el)) { el.setAttribute('data-lazyload-id', mid++); self.addCallback(el, self.handle); } } }); }, addElement: function(el) { return true; }, handle: function() { //throw new Error('需子类实现'); }, refresh: function(check) { if(check) { //检查新的lazyload this.addElements(); } this._loadFn(); }, pause: function() { var load = this._loadFn; if(this._destroyed) { return; } window.removeEventListener('scroll', load); window.removeEventListener($.EVENT_MOVE, load); window.removeEventListener('resize', load); if(this._containerIsNotDocument) { this.container.removeEventListener('scrollend', load); this.container.removeEventListener('scroll', load); this.container.removeEventListener($.EVENT_MOVE, load); } }, resume: function() { var load = this._loadFn; if(this._destroyed) { return; } window.addEventListener('scroll', load, false); window.addEventListener($.EVENT_MOVE, load, false); window.addEventListener('resize', load, false); if(this._containerIsNotDocument) { this.container.addEventListener('scrollend', load, false); this.container.addEventListener('scroll', load, false); this.container.addEventListener($.EVENT_MOVE, load, false); } }, destroy: function() { var self = this; self.pause(); self._callbacks = {}; $.trigger(this.container, 'destroy', self); self._destroyed = 1; } }); })(mui, window, document); ================================================ FILE: examples/hello-mui/js/mui.listpicker.js ================================================ /** * 选择列表插件 * varstion 1.0.1 * by Houfeng * Houfeng@DCloud.io */ (function($, document) { //创建 DOM $.dom = function(str) { if (typeof(str) !== 'string') { if ((str instanceof Array) || (str[0] && str.length)) { return [].slice.call(str); } else { return [str]; } } if (!$.__create_dom_div__) { $.__create_dom_div__ = document.createElement('div'); } $.__create_dom_div__.innerHTML = str; return [].slice.call($.__create_dom_div__.childNodes); }; var _listpickerId = 0; var ListPicker = $.ListPicker = $.Class.extend({ init: function(box, options) { var self = this; if (!box) { throw "构造 ListPicker 时找不到元素"; } self.box = box; //避免重复初始化开始 if (self.box.listpickerId) return; self.listpickerId = self.box.listpickerId = "listpicker-" + (++_listpickerId); //避免重复初始化结束 self.box.setAttribute('data-listpicker-id', self.box.listpickerId); //处理 options options = options || {}; options.fiexdDur = options.fiexdDur || 150; options.highlightStyle = options.highlightStyle || 'color: green;'; //在 ios 上启用 h5 模式, if ($.os.ios) { options.enabledH5 = true; } //如果没有设定 enabled3d,将默认用 3d 模式 if (options.enabled3d === null || typeof options.enabled3d === 'undefined') { options.enabled3d = $.os.ios; } // self.options = options; self._create(); self._handleShim(); self._bindEvent(); self._applyToBox(); self._handleHighlight(); }, _create: function() { var self = this; self.boxInner = $('.mui-listpicker-inner', self.box)[0]; self.boxHeight = self.box.offsetHeight; self.list = $('ul', self.boxInner)[0]; //refresh 中会执行 self.itemElementArray = [].slice.call($('li', self.list)); self.refresh(); var firstItem = self.itemElementArray[0]; self.itemHeight = 0; if (firstItem) { self.itemHeight = firstItem.offsetHeight; } else { self.list.innerHTML = "
  • ...
  • "; firstItem = $('li', self.list)[0]; self.itemHeight = firstItem.offsetHeight; self.list.innerHTML = ''; } self.list.style.paddingTop = self.list.style.paddingBottom = (self.boxHeight / 2 - self.itemHeight / 2) + 'px'; //创建中间选中项的高亮行 self.rule = $.dom('
    ')[0]; self.rule.style.height = self.itemHeight + 'px'; self.rule.style.marginTop = -(self.itemHeight / 2) + 'px'; self.box.appendChild(self.rule); self.middle = self.boxInner.offsetHeight / 2; self.showLine = parseInt((self.boxInner.offsetHeight / self.itemHeight).toFixed(0)); //是否启用 3d 效果 if (self.options.enabled3d) { self.box.classList.add('three-dimensional'); } }, //根据 options 处理不同平台兼容问题 _handleShim: function() { var self = this; if (self.options.enabledH5) { self.options.fiexdDur *= 2; self.boxInner.classList.add($.className('scroll-wrapper')); self.list.classList.add($.className('scroll')); self._scrollerApi = $(self.boxInner).scroll({ deceleration: 0.002 }); //增加惯性滚动时的 scroll 触发处理 //shimTetTranslate(self._scrollerApi); //-- self.setScrollTop = function(y, dur, callback) { self._scrollerApi.scrollTo(0, -y, dur); }; self.getScrollTop = function() { var self = this; if (self._scrollerApi.lastY > 0) { return 0 } else { return Math.abs(self._scrollerApi.lastY); } }; } else { //alert(0); //为 boxInner 增加 scrollend 事件 (没有原生 scrollend 事件) self.boxInner.addEventListener('scroll', function(event) { if (self.disabledScroll) return; self.isScrolling = true; if (self.scrollTimer) { clearTimeout(self.scrollTimer); } self.scrollTimer = setTimeout(function() { self.isScrolling = false; if (!self.isTouchDown || !$.os.ios) { $.trigger(self.boxInner, 'scrollend'); } }, 150); }, false); self.aniScrollTop = function(y, dur, callback) { self.disabledScroll = true; var stepNum = dur > 0 ? dur / 10 : 1; var stepSize = (y - self.boxInner.scrollTop) / stepNum; self._lastScrollTop = self.boxInner.scrollTop; //记录最后的位置 self._aniScrollTop(y, 0, stepNum, stepSize, callback); }; self._aniScrollTop = function(y, stepIndex, stepNum, stepSize, callback) { self.boxInner.scrollTop = self._lastScrollTop + stepSize * stepIndex; if (stepIndex < stepNum) { setTimeout(function() { self._aniScrollTop(y, ++stepIndex, stepNum, stepSize); }, 10); } else { //self.boxInner.scrollTop = y; self.disabledScroll = false; if (callback) callback(); } }; self.setScrollTop = function(y, dur, callback) { self.aniScrollTop(y, dur); }; self.getScrollTop = function() { var self = this; return self.boxInner.scrollTop; }; //在 ios 上手指不弹起时,防止定位抖动开始 if ($.os.ios) { self.boxInner.addEventListener('touchstart', function(event) { var self = this; self.isTouchDown = true; }, false); self.boxInner.addEventListener('touchend', function(event) { self.isTouchDown = false; if (!self.isScrolling) { setTimeout(function() { $.trigger(self.boxInner, 'scrollend'); }, 0); } }, false); } //在 ios 上手指不弹起时,防止定位抖动结束 } }, _handleHighlight: function() { var self = this; var scrollTop = self.getScrollTop(); var fiexd = parseInt((scrollTop / self.itemHeight).toFixed(0)); var lastIndex = self.itemElementArray.length - 1; var displayRange = parseInt((self.showLine / 2).toFixed(0)); var displayBegin = fiexd - displayRange; var displayEnd = fiexd + displayRange; if (displayBegin < 0) { displayBegin = 0; } if (displayEnd > lastIndex) { displayEnd = lastIndex; } //高亮选中行开始 for (var index = displayBegin; index <= displayEnd; index++) { var itemElement = self.itemElementArray[index]; if (index == fiexd) { itemElement.classList.add($.className('listpicker-item-selected')); //itemElement.classList.remove($.className('listpicker-item-before')); //itemElement.classList.remove($.className('listpicker-item-after')); } else { //itemElement.classList.add($.className('listpicker-item-' + (fiexd > index ? 'before' : 'after'))); itemElement.classList.remove($.className('listpicker-item-selected')); } if (self.options.enabled3d) { //3d 处理开始 var itemOffset = self.middle - (itemElement.offsetTop - scrollTop + self.itemHeight / 2) + 1; var percentage = itemOffset / self.itemHeight; var angle = (18 * percentage); //if (angle > 180) angle = 180; //if (angle < -180) angle = -180; itemElement.style.webkitTransform = 'rotateX(' + angle + 'deg) translate3d(0px,0px,' + (0 - Math.abs(percentage * 12)) + 'px)'; //3d 处理结束 } } }, _triggerChange: function() { var self = this; $.trigger(self.box, 'change', { index: self.getSelectedIndex(), value: self.getSelectedValue(), text: self.getSelectedText(), item: self.getSelectedItem(), element: self.getSelectedElement() }); }, _scrollEndHandle: function() { var self = this; var scrollTop = self.getScrollTop(); var fiexd = (scrollTop / self.itemHeight).toFixed(0); self.disabledScrollEnd = true; self.setSelectedIndex(fiexd); self._triggerChange(); self._handleHighlight(); setTimeout(function() { self.disabledScrollEnd = false; self._handleHighlight(); }, self.options.fiexdDur); }, _bindEvent: function() { var self = this; //滚动处理高亮 self.boxInner.addEventListener('scroll', function(event) { self._handleHighlight(event); }, false); //处理滚动结束 self.disabledScrollEnd = false; self.boxInner.addEventListener('scrollend', function(event) { if (self.disabledScrollEnd) return; self.disabledScrollEnd = true; self._scrollEndHandle(); }, false); //绑定项 tap 事件 $(self.boxInner).on('tap', 'li', function(event) { var tapItem = this; var items = [].slice.call($('li', self.list)); for (var i in items) { var item = items[i]; if (item == tapItem) { self.setSelectedIndex(i); return; } }; }); }, getSelectedIndex: function() { var self = this; return (self.getScrollTop() / self.itemHeight).toFixed(0); }, setSelectedIndex: function(index, noAni) { var self = this; index = (index || 0); self.setScrollTop(self.itemHeight * index, noAni ? 0 : self.options.fiexdDur); }, getSelectedElement: function() { var self = this; var index = self.getSelectedIndex(); return $('li', self.list)[index]; }, getSelectedItem: function() { var self = this; var itemElement = self.getSelectedElement(); if (!itemElement) return null; var itemJson = itemElement.getAttribute('data-item'); return itemJson ? JSON.parse(itemJson) : { text: itemElement.innerText, value: itemElement.getAttribute('data-value') }; }, refresh: function() { var self = this; self.itemElementArray = [].slice.call($('li', self.list)); }, setItems: function(items) { var self = this; var buffer = []; for (index in items) { var item = items[index] || { text: 'null', value: 'null' + index }; var itemJson = JSON.stringify(item); buffer.push("
  • " + item.text + "
  • "); }; self.list.innerHTML = buffer.join(''); if (self._scrollerApi && self._scrollerApi.refresh) { self._scrollerApi.refresh(); } self.refresh(); self._handleHighlight(); self._triggerChange(); }, getItems: function() { var self = this; var items = []; var itemElements = $('li', self.list); for (index in itemElements) { var itemElement = itemElements[index]; var itemJson = itemElement.getAttribute('data-item'); items.push(itemJson ? JSON.parse(itemJson) : { text: itemElement.innerText, value: itemElement.getAttribute('data-value') }); } return items; }, getSelectedValue: function() { var self = this; var item = self.getSelectedItem(); if (!item) return null; return item.value; }, getSelectedText: function() { var self = this; var item = self.getSelectedItem(); if (!item) return null; return item.text; }, setSelectedValue: function(value, noAni) { var self = this; var itemElements = $('li', self.list); for (index in itemElements) { var itemElement = itemElements[index]; if (!itemElement || !itemElement.getAttribute) { continue; } if (itemElement.getAttribute('data-value') == value) { self.setSelectedIndex(index, noAni); return; } } }, _applyToBox: function() { var self = this; var memberArray = [ "getSelectedIndex", "setSelectedIndex", "getSelectedElement", "getSelectedItem", "setItems", "getItems", "getSelectedValue", "getSelectedText", "setSelectedValue" ]; var _clone = function(name) { if (typeof self[name] === 'function') { self.box[name] = function() { return self[name].apply(self, arguments); }; } else { self.box[name] = self[name]; } }; for (var i in memberArray) { var name = memberArray[i]; _clone(name); } } }); //添加 locker 插件 $.fn.listpicker = function(options) { //遍历选择的元素 this.each(function(i, element) { if (options) { new ListPicker(element, options); } else { var optionsText = element.getAttribute('data-listpicker-options'); var _options = optionsText ? JSON.parse(optionsText) : {}; _options.enabledH5 = element.getAttribute('data-listpicker-enabledh5') || _options.enabledH5; _options.enabled3d = element.getAttribute('data-listpicker-enabled3d') || _options.enabled3d; _options.fixedDur = element.getAttribute('data-listpicker-fixddur') || _options.fixedDur; new ListPicker(element, _options); } }); return this; }; //自动初始化 $.ready(function() { $('.mui-listpicker').listpicker(); }); })(mui, document); ================================================ FILE: examples/hello-mui/js/mui.locker.js ================================================ /** * 手势锁屏插件 * varstion 1.0.5 * by Houfeng * Houfeng@DCloud.io */ (function($, doc) { var touchSupport = ('ontouchstart' in document); var startEventName = touchSupport ? $.EVENT_START : 'mousedown'; var moveEventName = touchSupport ? $.EVENT_MOVE : 'mousemove'; var endEventName = touchSupport ? $.EVENT_END : 'mouseup'; var lockerHolderClassName = $.className('locker-holder'); var lockerClassName = $.className('locker'); var styleHolder = doc.querySelector('head') || doc.querySelector('body'); styleHolder.innerHTML += ""; var times = 2; function getElementLeft(element) {     var actualLeft = element.offsetLeft;     var current = element.offsetParent;     while (current !== null) {       actualLeft += current.offsetLeft;       current = current.offsetParent;     }     return actualLeft;   }   function getElementTop(element) {     var actualTop = element.offsetTop;     var current = element.offsetParent;     while (current !== null) {       actualTop += current.offsetTop;       current = current.offsetParent;     }     return actualTop;   } //定义 Locker 类 var Locker = $.Locker = $.Class.extend({ R: 26, CW: 400, CH: 320, OffsetX: 30, OffsetY: 30, /** * 构造函数 * */ init: function(holder, options) { var self = this; if (!holder) { throw "构造 Locker 时缺少容器元素"; } self.holder = holder; // options = options || {}; options.callback = options.callback || options.done || $.noop; options.times = options.times || times; self.options = options; self.holder.innerHTML = ''; // self.holder.classList.add(lockerHolderClassName); //初始化 var canvas = self.canvas = $.qsa('canvas', self.holder)[0]; canvas.on = canvas.addEventListener || function(name, handler, capture) { canvas.attachEvent('on' + name, handler, capture); }; canvas.off = canvas.removeEventListener || function(name, handler, capture) { canvas.detachEvent('on' + name, handler, capture); }; // if (self.options.width) self.holder.style.width = self.options.width + 'px'; if (self.options.height) self.holder.style.height = self.options.height + 'px'; self.CW = self.options.width || self.holder.offsetWidth || self.CW; self.CH = self.options.height || self.holder.offsetHeight || self.CH; //处理 “宽、高” 等数值, 全部扩大 times 倍 self.R *= self.options.times; self.CW *= self.options.times; self.CH *= self.options.times; self.OffsetX *= self.options.times; self.OffsetY *= self.options.times; // canvas.width = self.CW; canvas.height = self.CH; var cxt = self.cxt = canvas.getContext("2d"); //两个圆之间的外距离 就是说两个圆心的距离去除两个半径 var X = (self.CW - 2 * self.OffsetX - self.R * 2 * 3) / 2; var Y = (self.CH - 2 * self.OffsetY - self.R * 2 * 3) / 2; self.pointLocationArr = self.caculateNinePointLotion(X, Y); self.initEvent(canvas, cxt, self.holder); //console.log(X); self.draw(cxt, self.pointLocationArr, [], null); setTimeout(function() { self.draw(cxt, self.pointLocationArr, [], null); }, 0); }, /** * 计算 */ caculateNinePointLotion: function(diffX, diffY) { var self = this; var Re = []; for (var row = 0; row < 3; row++) { for (var col = 0; col < 3; col++) { var Point = { X: (self.OffsetX + col * diffX + (col * 2 + 1) * self.R), Y: (self.OffsetY + row * diffY + (row * 2 + 1) * self.R) }; Re.push(Point); } } return Re; }, /** * 绘制 */ draw: function(cxt, _PointLocationArr, _LinePointArr, touchPoint) { var self = this; var R = self.R; if (_LinePointArr.length > 0) { cxt.beginPath(); for (var i = 0; i < _LinePointArr.length; i++) { var pointIndex = _LinePointArr[i]; cxt.lineTo(_PointLocationArr[pointIndex].X, _PointLocationArr[pointIndex].Y); } cxt.lineWidth = (self.options.lindeWidth || 2) * self.options.times; cxt.strokeStyle = self.options.lineColor || "#999"; //连结线颜色 cxt.stroke(); cxt.closePath(); if (touchPoint != null) { var lastPointIndex = _LinePointArr[_LinePointArr.length - 1]; var lastPoint = _PointLocationArr[lastPointIndex]; cxt.beginPath(); cxt.moveTo(lastPoint.X, lastPoint.Y); cxt.lineTo(touchPoint.X, touchPoint.Y); cxt.stroke(); cxt.closePath(); } } for (var i = 0; i < _PointLocationArr.length; i++) { var Point = _PointLocationArr[i]; cxt.fillStyle = self.options.ringColor || "#888"; //圆圈边框颜色 cxt.beginPath(); cxt.arc(Point.X, Point.Y, R, 0, Math.PI * 2, true); cxt.closePath(); cxt.fill(); cxt.fillStyle = self.options.fillColor || "#f3f3f3"; //圆圈填充颜色 cxt.beginPath(); cxt.arc(Point.X, Point.Y, R - ((self.options.ringWidth || 2) * self.options.times), 0, Math.PI * 2, true); cxt.closePath(); cxt.fill(); if (_LinePointArr.indexOf(i) >= 0) { cxt.fillStyle = self.options.pointColor || "#777"; //圆圈中心点颜色 cxt.beginPath(); cxt.arc(Point.X, Point.Y, R - ((self.options.pointWidth || 16) * self.options.times), 0, Math.PI * 2, true); cxt.closePath(); cxt.fill(); } } }, isPointSelect: function(touches, linePoint) { var self = this; for (var i = 0; i < self.pointLocationArr.length; i++) { var currentPoint = self.pointLocationArr[i]; var xdiff = Math.abs(currentPoint.X - touches.elementX); var ydiff = Math.abs(currentPoint.Y - touches.elementY); var dir = Math.pow((xdiff * xdiff + ydiff * ydiff), 0.5); if (dir < self.R) { if (linePoint.indexOf(i) < 0) { linePoint.push(i); } break; } } }, initEvent: function(canvas, cxt, holder) { var self = this; var linePoint = []; var isDown = false; //针对鼠标事件 //start self._startHandler = function(e) { e.point = event.changedTouches ? event.changedTouches[0] : event; e.point.elementX = (e.point.pageX - getElementLeft(holder)) * self.options.times; e.point.elementY = (e.point.pageY - getElementTop(holder)) * self.options.times; self.isPointSelect(e.point, linePoint); isDown = true; }; canvas.on(startEventName, self._startHandler, false); //move self._moveHanlder = function(e) { if (!isDown) return; e.preventDefault(); e.point = event.changedTouches ? event.changedTouches[0] : event; e.point.elementX = (e.point.pageX - getElementLeft(holder)) * self.options.times; e.point.elementY = (e.point.pageY - getElementTop(holder)) * self.options.times; var touches = e.point; self.isPointSelect(touches, linePoint); cxt.clearRect(0, 0, self.CW, self.CH); self.draw(cxt, self.pointLocationArr, linePoint, { X: touches.elementX, Y: touches.elementY }); }; canvas.on(moveEventName, self._moveHanlder, false); //end self._endHandler = function(e) { e.point = event.changedTouches ? event.changedTouches[0] : event; e.point.elementX = (e.point.pageX - getElementLeft(holder)) * self.options.times; e.point.elementY = (e.point.pageY - getElementTop(holder)) * self.options.times; cxt.clearRect(0, 0, self.CW, self.CH); self.draw(cxt, self.pointLocationArr, linePoint, null); //事件数据 var eventData = { sender: self, points: linePoint }; /* * 回调完成事件 * * 备注: * 比较理想的做法是为 Locker 的实例启用事件机制,比如 locker.on('done',handler); * 在 mui 没有完整的公共事件模块前,此版本中 locker 实例暂通过 options.callback 处理 */ self.options.callback(eventData); //触发声明的DOM的自定义事件(暂定 done 为事件名,可以考虑更有针对的事件名 ) $.trigger(self.holder, 'done', eventData); //- linePoint = []; isDown = false; }; canvas.on(endEventName, self._endHandler, false); }, pointLocationArr: [], /** * 清除图形 * */ clear: function() { var self = this; //self.pointLocationArr = []; if (self.cxt) { self.cxt.clearRect(0, 0, self.CW, self.CH); self.draw(self.cxt, self.pointLocationArr, [], { X: 0, Y: 0 }); } }, /** * 释放资源 * */ dispose: function() { var self = this; self.cxt = null; self.canvas.off(startEventName, self._startHandler); self.canvas.off(moveEventName, self._moveHandler); self.canvas.off(endEventName, self._endHandler); self.holder.innerHTML = ''; self.canvas = null; } }); //添加 locker 插件 $.fn.locker = function(options) { //遍历选择的元素 this.each(function(i, element) { if (element.locker) return; if (options) { element.locker = new Locker(element, options); } else { var optionsText = element.getAttribute('data-locker-options'); var _options = optionsText ? JSON.parse(optionsText) : {}; _options.lineColor = element.getAttribute('data-locker-line-color') || _options.lineColor; _options.ringColor = element.getAttribute('data-locker-ring-color') || _options.ringColor; _options.fillColor = element.getAttribute('data-locker-fill-color') || _options.fillColor; _options.pointColor = element.getAttribute('data-locker-point-color') || _options.pointColor; _options.width = element.getAttribute('data-locker-width') || _options.width; _options.height = element.getAttribute('data-locker-height') || _options.height; element.locker = new Locker(element, _options); } }); return this[0] ? this[0].locker : null; }; //自动处理 class='mui-locker' 的 dom try { $('.' + lockerClassName).locker(); } catch (ex) {} $.ready(function() { $('.' + lockerClassName).locker(); }); }(mui, document)); ================================================ FILE: examples/hello-mui/js/mui.picker.all.js ================================================ /** * 选择列表插件 * varstion 2.0.0 * by Houfeng * Houfeng@DCloud.io */ (function($, window, document, undefined) { var MAX_EXCEED = 30; var VISIBLE_RANGE = 90; var DEFAULT_ITEM_HEIGHT = 40; var BLUR_WIDTH = 10; var rad2deg = $.rad2deg = function(rad) { return rad / (Math.PI / 180); }; var deg2rad = $.deg2rad = function(deg) { return deg * (Math.PI / 180); }; var platform = navigator.platform.toLowerCase(); var userAgent = navigator.userAgent.toLowerCase(); var isIos = (userAgent.indexOf('iphone') > -1 || userAgent.indexOf('ipad') > -1 || userAgent.indexOf('ipod') > -1) && (platform.indexOf('iphone') > -1 || platform.indexOf('ipad') > -1 || platform.indexOf('ipod') > -1); //alert(isIos); var Picker = $.Picker = function(holder, options) { var self = this; self.holder = holder; self.options = options || {}; self.init(); self.initInertiaParams(); self.calcElementItemPostion(true); self.bindEvent(); }; Picker.prototype.findElementItems = function() { var self = this; self.elementItems = [].slice.call(self.holder.querySelectorAll('li')); return self.elementItems; }; Picker.prototype.init = function() { var self = this; self.list = self.holder.querySelector('ul'); self.findElementItems(); self.height = self.holder.offsetHeight; self.r = self.height / 2 - BLUR_WIDTH; self.d = self.r * 2; self.itemHeight = self.elementItems.length > 0 ? self.elementItems[0].offsetHeight : DEFAULT_ITEM_HEIGHT; self.itemAngle = parseInt(self.calcAngle(self.itemHeight * 0.8)); self.hightlightRange = self.itemAngle / 2; self.visibleRange = VISIBLE_RANGE; self.beginAngle = 0; self.beginExceed = self.beginAngle - MAX_EXCEED; self.list.angle = self.beginAngle; if (isIos) { self.list.style.webkitTransformOrigin = "center center " + self.r + "px"; } }; Picker.prototype.calcElementItemPostion = function(andGenerateItms) { var self = this; if (andGenerateItms) { self.items = []; } self.elementItems.forEach(function(item) { var index = self.elementItems.indexOf(item); self.endAngle = self.itemAngle * index; item.angle = self.endAngle; item.style.webkitTransformOrigin = "center center -" + self.r + "px"; item.style.webkitTransform = "translateZ(" + self.r + "px) rotateX(" + (-self.endAngle) + "deg)"; if (andGenerateItms) { var dataItem = {}; dataItem.text = item.innerHTML || ''; dataItem.value = item.getAttribute('data-value') || dataItem.text; self.items.push(dataItem); } }); self.endExceed = self.endAngle + MAX_EXCEED; self.calcElementItemVisibility(self.beginAngle); }; Picker.prototype.calcAngle = function(c) { var self = this; var a = b = parseFloat(self.r); //直径的整倍数部分直接乘以 180 c = Math.abs(c); //只算角度不关心正否值 var intDeg = parseInt(c / self.d) * 180; c = c % self.d; //余弦 var cosC = (a * a + b * b - c * c) / (2 * a * b); var angleC = intDeg + rad2deg(Math.acos(cosC)); return angleC; }; Picker.prototype.calcElementItemVisibility = function(angle) { var self = this; self.elementItems.forEach(function(item) { var difference = Math.abs(item.angle - angle); if (difference < self.hightlightRange) { item.classList.add('highlight'); } else if (difference < self.visibleRange) { item.classList.add('visible'); item.classList.remove('highlight'); } else { item.classList.remove('highlight'); item.classList.remove('visible'); } }); }; Picker.prototype.setAngle = function(angle) { var self = this; self.list.angle = angle; self.list.style.webkitTransform = "perspective(1000px) rotateY(0deg) rotateX(" + angle + "deg)"; self.calcElementItemVisibility(angle); }; Picker.prototype.bindEvent = function() { var self = this; var lastAngle = 0; var startY = null; var isPicking = false; self.holder.addEventListener($.EVENT_START, function(event) { isPicking = true; event.preventDefault(); self.list.style.webkitTransition = ''; startY = (event.changedTouches ? event.changedTouches[0] : event).pageY; lastAngle = self.list.angle; self.updateInertiaParams(event, true); }, false); self.holder.addEventListener($.EVENT_END, function(event) { isPicking = false; event.preventDefault(); self.startInertiaScroll(event); }, false); self.holder.addEventListener($.EVENT_CANCEL, function(event) { isPicking = false; event.preventDefault(); self.startInertiaScroll(event); }, false); self.holder.addEventListener($.EVENT_MOVE, function(event) { if (!isPicking) { return; } event.preventDefault(); var endY = (event.changedTouches ? event.changedTouches[0] : event).pageY; var dragRange = endY - startY; var dragAngle = self.calcAngle(dragRange); var newAngle = dragRange > 0 ? lastAngle - dragAngle : lastAngle + dragAngle; if (newAngle > self.endExceed) { newAngle = self.endExceed } if (newAngle < self.beginExceed) { newAngle = self.beginExceed } self.setAngle(newAngle); self.updateInertiaParams(event); }, false); //-- self.list.addEventListener('tap', function(event) { elementItem = event.target; if (elementItem.tagName == 'LI') { self.setSelectedIndex(self.elementItems.indexOf(elementItem), 200); } }, false); }; Picker.prototype.initInertiaParams = function() { var self = this; self.lastMoveTime = 0; self.lastMoveStart = 0; self.stopInertiaMove = false; }; Picker.prototype.updateInertiaParams = function(event, isStart) { var self = this; var point = event.changedTouches ? event.changedTouches[0] : event; if (isStart) { self.lastMoveStart = point.pageY; self.lastMoveTime = event.timeStamp || Date.now(); self.startAngle = self.list.angle; } else { var nowTime = event.timeStamp || Date.now(); if (nowTime - self.lastMoveTime > 300) { self.lastMoveTime = nowTime; self.lastMoveStart = point.pageY; } } self.stopInertiaMove = true; }; Picker.prototype.startInertiaScroll = function(event) { var self = this; var point = event.changedTouches ? event.changedTouches[0] : event; /** * 缓动代码 */ var nowTime = event.timeStamp || Date.now(); var v = (point.pageY - self.lastMoveStart) / (nowTime - self.lastMoveTime); //最后一段时间手指划动速度 var dir = v > 0 ? -1 : 1; //加速度方向 var deceleration = dir * 0.0006 * -1; var duration = Math.abs(v / deceleration); // 速度消减至0所需时间 var dist = v * duration / 2; //最终移动多少 var startAngle = self.list.angle; var distAngle = self.calcAngle(dist) * dir; //---- var srcDistAngle = distAngle; if (startAngle + distAngle < self.beginExceed) { distAngle = self.beginExceed - startAngle; duration = duration * (distAngle / srcDistAngle) * 0.6; } if (startAngle + distAngle > self.endExceed) { distAngle = self.endExceed - startAngle; duration = duration * (distAngle / srcDistAngle) * 0.6; } //---- if (distAngle == 0) { self.endScroll(); return; } self.scrollDistAngle(nowTime, startAngle, distAngle, duration); }; Picker.prototype.scrollDistAngle = function(nowTime, startAngle, distAngle, duration) { var self = this; self.stopInertiaMove = false; (function(nowTime, startAngle, distAngle, duration) { var frameInterval = 13; var stepCount = duration / frameInterval; var stepIndex = 0; (function inertiaMove() { if (self.stopInertiaMove) return; var newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount); self.setAngle(newAngle); stepIndex++; if (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) { self.endScroll(); return; } setTimeout(inertiaMove, frameInterval); })(); })(nowTime, startAngle, distAngle, duration); }; Picker.prototype.quartEaseOut = function(t, b, c, d) { return -c * ((t = t / d - 1) * t * t * t - 1) + b; }; Picker.prototype.endScroll = function() { var self = this; if (self.list.angle < self.beginAngle) { self.list.style.webkitTransition = "150ms ease-out"; self.setAngle(self.beginAngle); } else if (self.list.angle > self.endAngle) { self.list.style.webkitTransition = "150ms ease-out"; self.setAngle(self.endAngle); } else { var index = parseInt((self.list.angle / self.itemAngle).toFixed(0)); self.list.style.webkitTransition = "100ms ease-out"; self.setAngle(self.itemAngle * index); } self.triggerChange(); }; Picker.prototype.triggerChange = function(force) { var self = this; setTimeout(function() { var index = self.getSelectedIndex(); var item = self.items[index]; if ($.trigger && (index != self.lastIndex || force === true)) { $.trigger(self.holder, 'change', { "index": index, "item": item }); //console.log('change:' + index); } self.lastIndex = index; typeof force === 'function' && force(); }, 0); }; Picker.prototype.correctAngle = function(angle) { var self = this; if (angle < self.beginAngle) { return self.beginAngle; } else if (angle > self.endAngle) { return self.endAngle; } else { return angle; } }; Picker.prototype.setItems = function(items) { var self = this; self.items = items || []; var buffer = []; self.items.forEach(function(item) { if (item !== null && item !== undefined) { buffer.push('
  • ' + (item.text || item) + '
  • '); } }); self.list.innerHTML = buffer.join(''); self.findElementItems(); self.calcElementItemPostion(); self.setAngle(self.correctAngle(self.list.angle)); self.triggerChange(true); }; Picker.prototype.getItems = function() { var self = this; return self.items; }; Picker.prototype.getSelectedIndex = function() { var self = this; return parseInt((self.list.angle / self.itemAngle).toFixed(0)); }; Picker.prototype.setSelectedIndex = function(index, duration, callback) { var self = this; self.list.style.webkitTransition = ''; var angle = self.correctAngle(self.itemAngle * index); if (duration && duration > 0) { var distAngle = angle - self.list.angle; self.scrollDistAngle(Date.now(), self.list.angle, distAngle, duration); } else { self.setAngle(angle); } self.triggerChange(callback); }; Picker.prototype.getSelectedItem = function() { var self = this; return self.items[self.getSelectedIndex()]; }; Picker.prototype.getSelectedValue = function() { var self = this; return (self.items[self.getSelectedIndex()] || {}).value; }; Picker.prototype.getSelectedText = function() { var self = this; return (self.items[self.getSelectedIndex()] || {}).text; }; Picker.prototype.setSelectedValue = function(value, duration, callback) { var self = this; for (var index in self.items) { var item = self.items[index]; if (item.value == value) { self.setSelectedIndex(index, duration, callback); return; } } }; if ($.fn) { $.fn.picker = function(options) { //遍历选择的元素 this.each(function(i, element) { if (element.picker) return; if (options) { element.picker = new Picker(element, options); } else { var optionsText = element.getAttribute('data-picker-options'); var _options = optionsText ? JSON.parse(optionsText) : {}; element.picker = new Picker(element, _options); } }); return this[0] ? this[0].picker : null; }; //自动初始化 $.ready(function() { $('.mui-picker').picker(); }); } })(window.mui || window, window, document, undefined); //end /** * 弹出选择列表插件 * 此组件依赖 listpcker ,请在页面中先引入 mui.picker.css + mui.picker.js * varstion 1.0.1 * by Houfeng * Houfeng@DCloud.io */ (function($, document) { //创建 DOM $.dom = function(str) { if (typeof(str) !== 'string') { if ((str instanceof Array) || (str[0] && str.length)) { return [].slice.call(str); } else { return [str]; } } if (!$.__create_dom_div__) { $.__create_dom_div__ = document.createElement('div'); } $.__create_dom_div__.innerHTML = str; return [].slice.call($.__create_dom_div__.childNodes); }; var panelBuffer = '
    \
    \ \ \
    \
    \
    \
    \
    '; var pickerBuffer = '
    \
    \
    \
      \
    \
    \
    \
    '; //定义弹出选择器类 var PopPicker = $.PopPicker = $.Class.extend({ //构造函数 init: function(options) { var self = this; self.options = options || {}; self.options.buttons = self.options.buttons || ['取消', '确定']; self.panel = $.dom(panelBuffer)[0]; document.body.appendChild(self.panel); self.ok = self.panel.querySelector('.mui-poppicker-btn-ok'); self.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel'); self.body = self.panel.querySelector('.mui-poppicker-body'); self.mask = $.createMask(); self.cancel.innerText = self.options.buttons[0]; self.ok.innerText = self.options.buttons[1]; self.cancel.addEventListener('tap', function(event) { self.hide(); }, false); self.ok.addEventListener('tap', function(event) { if (self.callback) { var rs = self.callback(self.getSelectedItems()); if (rs !== false) { self.hide(); } } }, false); self.mask[0].addEventListener('tap', function() { self.hide(); }, false); self._createPicker(); //防止滚动穿透 self.panel.addEventListener($.EVENT_START, function(event) { event.preventDefault(); }, false); self.panel.addEventListener($.EVENT_MOVE, function(event) { event.preventDefault(); }, false); }, _createPicker: function() { var self = this; var layer = self.options.layer || 1; var width = (100 / layer) + '%'; self.pickers = []; for (var i = 1; i <= layer; i++) { var pickerElement = $.dom(pickerBuffer)[0]; pickerElement.style.width = width; self.body.appendChild(pickerElement); var picker = $(pickerElement).picker(); self.pickers.push(picker); pickerElement.addEventListener('change', function(event) { var nextPickerElement = this.nextSibling; if (nextPickerElement && nextPickerElement.picker) { var eventData = event.detail || {}; var preItem = eventData.item || {}; nextPickerElement.picker.setItems(preItem.children); } }, false); } }, //填充数据 setData: function(data) { var self = this; data = data || []; self.pickers[0].setItems(data); }, //获取选中的项(数组) getSelectedItems: function() { var self = this; var items = []; for (var i in self.pickers) { var picker = self.pickers[i]; items.push(picker.getSelectedItem() || {}); } return items; }, //显示 show: function(callback) { var self = this; self.callback = callback; self.mask.show(); document.body.classList.add($.className('poppicker-active-for-page')); self.panel.classList.add($.className('active')); //处理物理返回键 self.__back = $.back; $.back = function() { self.hide(); }; }, //隐藏 hide: function() { var self = this; if (self.disposed) return; self.panel.classList.remove($.className('active')); self.mask.close(); document.body.classList.remove($.className('poppicker-active-for-page')); //处理物理返回键 $.back=self.__back; }, dispose: function() { var self = this; self.hide(); setTimeout(function() { self.panel.parentNode.removeChild(self.panel); for (var name in self) { self[name] = null; delete self[name]; }; self.disposed = true; }, 300); } }); })(mui, document); /** * 日期时间插件 * varstion 1.0.5 * by Houfeng * Houfeng@DCloud.io */ (function($, document) { //创建 DOM $.dom = function(str) { if (typeof(str) !== 'string') { if ((str instanceof Array) || (str[0] && str.length)) { return [].slice.call(str); } else { return [str]; } } if (!$.__create_dom_div__) { $.__create_dom_div__ = document.createElement('div'); } $.__create_dom_div__.innerHTML = str; return [].slice.call($.__create_dom_div__.childNodes); }; var domBuffer = '
    \
    \ \ \
    \
    \
    \
    \
    \
    \
      \
    \
    \
    \
    \
    \
    \
    \
      \
    \
    \
    \
    \
    \
    \
    \
      \
    \
    \
    \
    \
    \
    \
    \
      \
    \
    \
    \
    \
    \
    \
    \
      \
    \
    \
    \
    \
    \
    '; //plugin var DtPicker = $.DtPicker = $.Class.extend({ init: function(options) { var self = this; var _picker = $.dom(domBuffer)[0]; document.body.appendChild(_picker); $('[data-id*="picker"]', _picker).picker(); var ui = self.ui = { picker: _picker, mask: $.createMask(), ok: $('[data-id="btn-ok"]', _picker)[0], cancel: $('[data-id="btn-cancel"]', _picker)[0], y: $('[data-id="picker-y"]', _picker)[0], m: $('[data-id="picker-m"]', _picker)[0], d: $('[data-id="picker-d"]', _picker)[0], h: $('[data-id="picker-h"]', _picker)[0], i: $('[data-id="picker-i"]', _picker)[0], labels: $('[data-id*="title-"]', _picker), }; ui.cancel.addEventListener('tap', function() { self.hide(); }, false); ui.ok.addEventListener('tap', function() { var rs = self.callback(self.getSelected()); if (rs !== false) { self.hide(); } }, false); ui.y.addEventListener('change', function(e) { //目前的change事件容易导致级联触发 if (self.options.beginMonth || self.options.endMonth) { self._createMonth(); } else { self._createDay(); } }, false); ui.m.addEventListener('change', function(e) { self._createDay(); }, false); ui.d.addEventListener('change', function(e) { if (self.options.beginMonth || self.options.endMonth) { //仅提供了beginDate时,触发day,hours,minutes的change self._createHours(); } }, false); ui.h.addEventListener('change', function(e) { if (self.options.beginMonth || self.options.endMonth) { self._createMinutes(); } }, false); ui.mask[0].addEventListener('tap', function() { self.hide(); }, false); self._create(options); //防止滚动穿透 self.ui.picker.addEventListener($.EVENT_START, function(event) { event.preventDefault(); }, false); self.ui.picker.addEventListener($.EVENT_MOVE, function(event) { event.preventDefault(); }, false); }, getSelected: function() { var self = this; var ui = self.ui; var type = self.options.type; var selected = { type: type, y: ui.y.picker.getSelectedItem(), m: ui.m.picker.getSelectedItem(), d: ui.d.picker.getSelectedItem(), h: ui.h.picker.getSelectedItem(), i: ui.i.picker.getSelectedItem(), toString: function() { return this.value; } }; switch (type) { case 'datetime': selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value; selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text; break; case 'date': selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value; selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text; break; case 'time': selected.value = selected.h.value + ':' + selected.i.value; selected.text = selected.h.text + ':' + selected.i.text; break; case 'month': selected.value = selected.y.value + '-' + selected.m.value; selected.text = selected.y.text + '-' + selected.m.text; break; case 'hour': selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value; selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text; break; } return selected; }, setSelectedValue: function(value) { var self = this; var ui = self.ui; var parsedValue = self._parseValue(value); //TODO 嵌套过多,因为picker的change时间是异步(考虑到性能)的,所以为了保证change之后再setSelected,目前使用回调处理 ui.y.picker.setSelectedValue(parsedValue.y, 0, function() { ui.m.picker.setSelectedValue(parsedValue.m, 0, function() { ui.d.picker.setSelectedValue(parsedValue.d, 0, function() { ui.h.picker.setSelectedValue(parsedValue.h, 0, function() { ui.i.picker.setSelectedValue(parsedValue.i, 0); }); }); }); }); }, isLeapYear: function(year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); }, _inArray: function(array, item) { for (var index in array) { var _item = array[index]; if (_item === item) return true; } return false; }, getDayNum: function(year, month) { var self = this; if (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) { return 31; } else if (self._inArray([4, 6, 9, 11], month)) { return 30; } else if (self.isLeapYear(year)) { return 29; } else { return 28; } }, _fill: function(num) { num = num.toString(); if (num.length < 2) { num = 0 + num; } return num; }, _isBeginYear: function() { return this.options.beginYear === parseInt(this.ui.y.picker.getSelectedValue()); }, _isBeginMonth: function() { return this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.picker.getSelectedValue()); }, _isBeginDay: function() { return this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.picker.getSelectedValue()); }, _isBeginHours: function() { return this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.picker.getSelectedValue()); }, _isEndYear: function() { return this.options.endYear === parseInt(this.ui.y.picker.getSelectedValue()); }, _isEndMonth: function() { return this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.picker.getSelectedValue()); }, _isEndDay: function() { return this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.picker.getSelectedValue()); }, _isEndHours: function() { return this._isEndDay() && this.options.endHours === parseInt(this.ui.h.picker.getSelectedValue()); }, _createYear: function(current) { var self = this; var options = self.options; var ui = self.ui; //生成年列表 var yArray = []; if (options.customData.y) { yArray = options.customData.y; } else { var yBegin = options.beginYear; var yEnd = options.endYear; for (var y = yBegin; y <= yEnd; y++) { yArray.push({ text: y + '', value: y }); } } ui.y.picker.setItems(yArray); //ui.y.picker.setSelectedValue(current); }, _createMonth: function(current) { var self = this; var options = self.options; var ui = self.ui; //生成月列表 var mArray = []; if (options.customData.m) { mArray = options.customData.m; } else { var m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1; var maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12; for (; m <= maxMonth; m++) { var val = self._fill(m); mArray.push({ text: val, value: val }); } } ui.m.picker.setItems(mArray); //ui.m.picker.setSelectedValue(current); }, _createDay: function(current) { var self = this; var options = self.options; var ui = self.ui; //生成日列表 var dArray = []; if (options.customData.d) { dArray = options.customData.d; } else { var d = self._isBeginMonth() ? options.beginDay : 1; var maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.picker.getSelectedValue()), parseInt(this.ui.m.picker.getSelectedValue())); for (; d <= maxDay; d++) { var val = self._fill(d); dArray.push({ text: val, value: val }); } } ui.d.picker.setItems(dArray); current = current || ui.d.picker.getSelectedValue(); //ui.d.picker.setSelectedValue(current); }, _createHours: function(current) { var self = this; var options = self.options; var ui = self.ui; //生成时列表 var hArray = []; if (options.customData.h) { hArray = options.customData.h; } else { var h = self._isBeginDay() ? options.beginHours : 0; var maxHours = self._isEndDay() ? options.endHours : 23; for (; h <= maxHours; h++) { var val = self._fill(h); hArray.push({ text: val, value: val }); } } ui.h.picker.setItems(hArray); //ui.h.picker.setSelectedValue(current); }, _createMinutes: function(current) { var self = this; var options = self.options; var ui = self.ui; //生成分列表 var iArray = []; if (options.customData.i) { iArray = options.customData.i; } else { var i = self._isBeginHours() ? options.beginMinutes : 0; var maxMinutes = self._isEndHours() ? options.endMinutes : 59; for (; i <= maxMinutes; i++) { var val = self._fill(i); iArray.push({ text: val, value: val }); } } ui.i.picker.setItems(iArray); //ui.i.picker.setSelectedValue(current); }, _setLabels: function() { var self = this; var options = self.options; var ui = self.ui; ui.labels.each(function(i, label) { label.innerText = options.labels[i]; }); }, _setButtons: function() { var self = this; var options = self.options; var ui = self.ui; ui.cancel.innerText = options.buttons[0]; ui.ok.innerText = options.buttons[1]; }, _parseValue: function(value) { var self = this; var rs = {}; if (value) { var parts = value.replace(":", "-").replace(" ", "-").split("-"); rs.y = parts[0]; rs.m = parts[1]; rs.d = parts[2]; rs.h = parts[3]; rs.i = parts[4]; } else { var now = new Date(); rs.y = now.getFullYear(); rs.m = now.getMonth() + 1; rs.d = now.getDate(); rs.h = now.getHours(); rs.i = now.getMinutes(); } return rs; }, _create: function(options) { var self = this; options = options || {}; options.labels = options.labels || ['年', '月', '日', '时', '分']; options.buttons = options.buttons || ['取消', '确定']; options.type = options.type || 'datetime'; options.customData = options.customData || {}; self.options = options; var now = new Date(); var beginDate = options.beginDate; if (beginDate instanceof Date && !isNaN(beginDate.valueOf())) { //设定了开始日期 options.beginYear = beginDate.getFullYear(); options.beginMonth = beginDate.getMonth() + 1; options.beginDay = beginDate.getDate(); options.beginHours = beginDate.getHours(); options.beginMinutes = beginDate.getMinutes(); } var endDate = options.endDate; if (endDate instanceof Date && !isNaN(endDate.valueOf())) { //设定了结束日期 options.endYear = endDate.getFullYear(); options.endMonth = endDate.getMonth() + 1; options.endDay = endDate.getDate(); options.endHours = endDate.getHours(); options.endMinutes = endDate.getMinutes(); } options.beginYear = options.beginYear || (now.getFullYear() - 5); options.endYear = options.endYear || (now.getFullYear() + 5); var ui = self.ui; //设定label self._setLabels(); self._setButtons(); //设定类型 ui.picker.setAttribute('data-type', options.type); //生成 self._createYear(); self._createMonth(); self._createDay(); self._createHours(); self._createMinutes(); //设定默认值 self.setSelectedValue(options.value); }, //显示 show: function(callback) { var self = this; var ui = self.ui; self.callback = callback || $.noop; ui.mask.show(); document.body.classList.add($.className('dtpicker-active-for-page')); ui.picker.classList.add($.className('active')); //处理物理返回键 self.__back = $.back; $.back = function() { self.hide(); }; }, hide: function() { var self = this; if (self.disposed) return; var ui = self.ui; ui.picker.classList.remove($.className('active')); ui.mask.close(); document.body.classList.remove($.className('dtpicker-active-for-page')); //处理物理返回键 $.back = self.__back; }, dispose: function() { var self = this; self.hide(); setTimeout(function() { self.ui.picker.parentNode.removeChild(self.ui.picker); for (var name in self) { self[name] = null; delete self[name]; }; self.disposed = true; }, 300); } }); })(mui, document); ================================================ FILE: examples/hello-mui/js/mui.picker.js ================================================ /** * 选择列表插件 * varstion 2.0.0 * by Houfeng * Houfeng@DCloud.io */ (function($, window, document, undefined) { var MAX_EXCEED = 30; var VISIBLE_RANGE = 90; var DEFAULT_ITEM_HEIGHT = 40; var BLUR_WIDTH = 10; var rad2deg = $.rad2deg = function(rad) { return rad / (Math.PI / 180); }; var deg2rad = $.deg2rad = function(deg) { return deg * (Math.PI / 180); }; var platform = navigator.platform.toLowerCase(); var userAgent = navigator.userAgent.toLowerCase(); var isIos = (userAgent.indexOf('iphone') > -1 || userAgent.indexOf('ipad') > -1 || userAgent.indexOf('ipod') > -1) && (platform.indexOf('iphone') > -1 || platform.indexOf('ipad') > -1 || platform.indexOf('ipod') > -1); //alert(isIos); var Picker = $.Picker = function(holder, options) { var self = this; self.holder = holder; self.options = options || {}; self.init(); self.initInertiaParams(); self.calcElementItemPostion(true); self.bindEvent(); }; Picker.prototype.findElementItems = function() { var self = this; self.elementItems = [].slice.call(self.holder.querySelectorAll('li')); return self.elementItems; }; Picker.prototype.init = function() { var self = this; self.list = self.holder.querySelector('ul'); self.findElementItems(); self.height = self.holder.offsetHeight; self.r = self.height / 2 - BLUR_WIDTH; self.d = self.r * 2; self.itemHeight = self.elementItems.length > 0 ? self.elementItems[0].offsetHeight : DEFAULT_ITEM_HEIGHT; self.itemAngle = parseInt(self.calcAngle(self.itemHeight * 0.8)); self.hightlightRange = self.itemAngle / 2; self.visibleRange = VISIBLE_RANGE; self.beginAngle = 0; self.beginExceed = self.beginAngle - MAX_EXCEED; self.list.angle = self.beginAngle; if (isIos) { self.list.style.webkitTransformOrigin = "center center " + self.r + "px"; } }; Picker.prototype.calcElementItemPostion = function(andGenerateItms) { var self = this; if (andGenerateItms) { self.items = []; } self.elementItems.forEach(function(item) { var index = self.elementItems.indexOf(item); self.endAngle = self.itemAngle * index; item.angle = self.endAngle; item.style.webkitTransformOrigin = "center center -" + self.r + "px"; item.style.webkitTransform = "translateZ(" + self.r + "px) rotateX(" + (-self.endAngle) + "deg)"; if (andGenerateItms) { var dataItem = {}; dataItem.text = item.innerHTML || ''; dataItem.value = item.getAttribute('data-value') || dataItem.text; self.items.push(dataItem); } }); self.endExceed = self.endAngle + MAX_EXCEED; self.calcElementItemVisibility(self.beginAngle); }; Picker.prototype.calcAngle = function(c) { var self = this; var a = b = parseFloat(self.r); //直径的整倍数部分直接乘以 180 c = Math.abs(c); //只算角度不关心正否值 var intDeg = parseInt(c / self.d) * 180; c = c % self.d; //余弦 var cosC = (a * a + b * b - c * c) / (2 * a * b); var angleC = intDeg + rad2deg(Math.acos(cosC)); return angleC; }; Picker.prototype.calcElementItemVisibility = function(angle) { var self = this; self.elementItems.forEach(function(item) { var difference = Math.abs(item.angle - angle); if (difference < self.hightlightRange) { item.classList.add('highlight'); } else if (difference < self.visibleRange) { item.classList.add('visible'); item.classList.remove('highlight'); } else { item.classList.remove('highlight'); item.classList.remove('visible'); } }); }; Picker.prototype.setAngle = function(angle) { var self = this; self.list.angle = angle; self.list.style.webkitTransform = "perspective(1000px) rotateY(0deg) rotateX(" + angle + "deg)"; self.calcElementItemVisibility(angle); }; Picker.prototype.bindEvent = function() { var self = this; var lastAngle = 0; var startY = null; var isPicking = false; self.holder.addEventListener($.EVENT_START, function(event) { isPicking = true; event.preventDefault(); self.list.style.webkitTransition = ''; startY = (event.changedTouches ? event.changedTouches[0] : event).pageY; lastAngle = self.list.angle; self.updateInertiaParams(event, true); }, false); self.holder.addEventListener($.EVENT_END, function(event) { isPicking = false; event.preventDefault(); self.startInertiaScroll(event); }, false); self.holder.addEventListener($.EVENT_CANCEL, function(event) { isPicking = false; event.preventDefault(); self.startInertiaScroll(event); }, false); self.holder.addEventListener($.EVENT_MOVE, function(event) { if (!isPicking) { return; } event.preventDefault(); var endY = (event.changedTouches ? event.changedTouches[0] : event).pageY; var dragRange = endY - startY; var dragAngle = self.calcAngle(dragRange); var newAngle = dragRange > 0 ? lastAngle - dragAngle : lastAngle + dragAngle; if (newAngle > self.endExceed) { newAngle = self.endExceed } if (newAngle < self.beginExceed) { newAngle = self.beginExceed } self.setAngle(newAngle); self.updateInertiaParams(event); }, false); //-- self.list.addEventListener('tap', function(event) { elementItem = event.target; if (elementItem.tagName == 'LI') { self.setSelectedIndex(self.elementItems.indexOf(elementItem), 200); } }, false); }; Picker.prototype.initInertiaParams = function() { var self = this; self.lastMoveTime = 0; self.lastMoveStart = 0; self.stopInertiaMove = false; }; Picker.prototype.updateInertiaParams = function(event, isStart) { var self = this; var point = event.changedTouches ? event.changedTouches[0] : event; if (isStart) { self.lastMoveStart = point.pageY; self.lastMoveTime = event.timeStamp || Date.now(); self.startAngle = self.list.angle; } else { var nowTime = event.timeStamp || Date.now(); if (nowTime - self.lastMoveTime > 300) { self.lastMoveTime = nowTime; self.lastMoveStart = point.pageY; } } self.stopInertiaMove = true; }; Picker.prototype.startInertiaScroll = function(event) { var self = this; var point = event.changedTouches ? event.changedTouches[0] : event; /** * 缓动代码 */ var nowTime = event.timeStamp || Date.now(); var v = (point.pageY - self.lastMoveStart) / (nowTime - self.lastMoveTime); //最后一段时间手指划动速度 var dir = v > 0 ? -1 : 1; //加速度方向 var deceleration = dir * 0.0006 * -1; var duration = Math.abs(v / deceleration); // 速度消减至0所需时间 var dist = v * duration / 2; //最终移动多少 var startAngle = self.list.angle; var distAngle = self.calcAngle(dist) * dir; //---- var srcDistAngle = distAngle; if (startAngle + distAngle < self.beginExceed) { distAngle = self.beginExceed - startAngle; duration = duration * (distAngle / srcDistAngle) * 0.6; } if (startAngle + distAngle > self.endExceed) { distAngle = self.endExceed - startAngle; duration = duration * (distAngle / srcDistAngle) * 0.6; } //---- if (distAngle == 0) { self.endScroll(); return; } self.scrollDistAngle(nowTime, startAngle, distAngle, duration); }; Picker.prototype.scrollDistAngle = function(nowTime, startAngle, distAngle, duration) { var self = this; self.stopInertiaMove = false; (function(nowTime, startAngle, distAngle, duration) { var frameInterval = 13; var stepCount = duration / frameInterval; var stepIndex = 0; (function inertiaMove() { if (self.stopInertiaMove) return; var newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount); self.setAngle(newAngle); stepIndex++; if (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) { self.endScroll(); return; } setTimeout(inertiaMove, frameInterval); })(); })(nowTime, startAngle, distAngle, duration); }; Picker.prototype.quartEaseOut = function(t, b, c, d) { return -c * ((t = t / d - 1) * t * t * t - 1) + b; }; Picker.prototype.endScroll = function() { var self = this; if (self.list.angle < self.beginAngle) { self.list.style.webkitTransition = "150ms ease-out"; self.setAngle(self.beginAngle); } else if (self.list.angle > self.endAngle) { self.list.style.webkitTransition = "150ms ease-out"; self.setAngle(self.endAngle); } else { var index = parseInt((self.list.angle / self.itemAngle).toFixed(0)); self.list.style.webkitTransition = "100ms ease-out"; self.setAngle(self.itemAngle * index); } self.triggerChange(); }; Picker.prototype.triggerChange = function(force) { var self = this; setTimeout(function() { var index = self.getSelectedIndex(); var item = self.items[index]; if ($.trigger && (index != self.lastIndex || force === true)) { $.trigger(self.holder, 'change', { "index": index, "item": item }); //console.log('change:' + index); } self.lastIndex = index; typeof force === 'function' && force(); }, 0); }; Picker.prototype.correctAngle = function(angle) { var self = this; if (angle < self.beginAngle) { return self.beginAngle; } else if (angle > self.endAngle) { return self.endAngle; } else { return angle; } }; Picker.prototype.setItems = function(items) { var self = this; self.items = items || []; var buffer = []; self.items.forEach(function(item) { if (item !== null && item !== undefined) { buffer.push('
  • ' + (item.text || item) + '
  • '); } }); self.list.innerHTML = buffer.join(''); self.findElementItems(); self.calcElementItemPostion(); self.setAngle(self.correctAngle(self.list.angle)); self.triggerChange(true); }; Picker.prototype.getItems = function() { var self = this; return self.items; }; Picker.prototype.getSelectedIndex = function() { var self = this; return parseInt((self.list.angle / self.itemAngle).toFixed(0)); }; Picker.prototype.setSelectedIndex = function(index, duration, callback) { var self = this; self.list.style.webkitTransition = ''; var angle = self.correctAngle(self.itemAngle * index); if (duration && duration > 0) { var distAngle = angle - self.list.angle; self.scrollDistAngle(Date.now(), self.list.angle, distAngle, duration); } else { self.setAngle(angle); } self.triggerChange(callback); }; Picker.prototype.getSelectedItem = function() { var self = this; return self.items[self.getSelectedIndex()]; }; Picker.prototype.getSelectedValue = function() { var self = this; return (self.items[self.getSelectedIndex()] || {}).value; }; Picker.prototype.getSelectedText = function() { var self = this; return (self.items[self.getSelectedIndex()] || {}).text; }; Picker.prototype.setSelectedValue = function(value, duration, callback) { var self = this; for (var index in self.items) { var item = self.items[index]; if (item.value == value) { self.setSelectedIndex(index, duration, callback); return; } } }; if ($.fn) { $.fn.picker = function(options) { //遍历选择的元素 this.each(function(i, element) { if (element.picker) return; if (options) { element.picker = new Picker(element, options); } else { var optionsText = element.getAttribute('data-picker-options'); var _options = optionsText ? JSON.parse(optionsText) : {}; element.picker = new Picker(element, _options); } }); return this[0] ? this[0].picker : null; }; //自动初始化 $.ready(function() { $('.mui-picker').picker(); }); } })(window.mui || window, window, document, undefined); //end ================================================ FILE: examples/hello-mui/js/mui.poppicker.js ================================================ /** * 弹出选择列表插件 * 此组件依赖 listpcker ,请在页面中先引入 mui.picker.css + mui.picker.js * varstion 1.0.1 * by Houfeng * Houfeng@DCloud.io */ (function($, document) { //创建 DOM $.dom = function(str) { if (typeof(str) !== 'string') { if ((str instanceof Array) || (str[0] && str.length)) { return [].slice.call(str); } else { return [str]; } } if (!$.__create_dom_div__) { $.__create_dom_div__ = document.createElement('div'); } $.__create_dom_div__.innerHTML = str; return [].slice.call($.__create_dom_div__.childNodes); }; var panelBuffer = '
    \
    \ \ \
    \
    \
    \
    \
    '; var pickerBuffer = '
    \
    \
    \
      \
    \
    \
    \
    '; //定义弹出选择器类 var PopPicker = $.PopPicker = $.Class.extend({ //构造函数 init: function(options) { var self = this; self.options = options || {}; self.options.buttons = self.options.buttons || ['取消', '确定']; self.panel = $.dom(panelBuffer)[0]; document.body.appendChild(self.panel); self.ok = self.panel.querySelector('.mui-poppicker-btn-ok'); self.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel'); self.body = self.panel.querySelector('.mui-poppicker-body'); self.mask = $.createMask(); self.cancel.innerText = self.options.buttons[0]; self.ok.innerText = self.options.buttons[1]; self.cancel.addEventListener('tap', function(event) { self.hide(); }, false); self.ok.addEventListener('tap', function(event) { if (self.callback) { var rs = self.callback(self.getSelectedItems()); if (rs !== false) { self.hide(); } } }, false); self.mask[0].addEventListener('tap', function() { self.hide(); }, false); self._createPicker(); //防止滚动穿透 self.panel.addEventListener($.EVENT_START, function(event) { event.preventDefault(); }, false); self.panel.addEventListener($.EVENT_MOVE, function(event) { event.preventDefault(); }, false); }, _createPicker: function() { var self = this; var layer = self.options.layer || 1; var width = (100 / layer) + '%'; self.pickers = []; for (var i = 1; i <= layer; i++) { var pickerElement = $.dom(pickerBuffer)[0]; pickerElement.style.width = width; self.body.appendChild(pickerElement); var picker = $(pickerElement).picker(); self.pickers.push(picker); pickerElement.addEventListener('change', function(event) { var nextPickerElement = this.nextSibling; if (nextPickerElement && nextPickerElement.picker) { var eventData = event.detail || {}; var preItem = eventData.item || {}; nextPickerElement.picker.setItems(preItem.children); } }, false); } }, //填充数据 setData: function(data) { var self = this; data = data || []; self.pickers[0].setItems(data); }, //获取选中的项(数组) getSelectedItems: function() { var self = this; var items = []; for (var i in self.pickers) { if(self.pickers.hasOwnProperty(i)) { // 修复for in会访问继承属性造成items报错情况 var picker = self.pickers[i]; items.push(picker.getSelectedItem() || {}); } } return items; }, //显示 show: function(callback) { var self = this; self.callback = callback; self.mask.show(); document.body.classList.add($.className('poppicker-active-for-page')); self.panel.classList.add($.className('active')); //处理物理返回键 self.__back = $.back; $.back = function() { self.hide(); }; }, //隐藏 hide: function() { var self = this; if (self.disposed) return; self.panel.classList.remove($.className('active')); self.mask.close(); document.body.classList.remove($.className('poppicker-active-for-page')); //处理物理返回键 $.back=self.__back; }, dispose: function() { var self = this; self.hide(); setTimeout(function() { self.panel.parentNode.removeChild(self.panel); for (var name in self) { self[name] = null; delete self[name]; }; self.disposed = true; }, 300); } }); })(mui, document); ================================================ FILE: examples/hello-mui/js/mui.previewimage.js ================================================ (function($, window) { var template = '
    {{header}}
    '; var itemTemplate = '
    '; var defaultGroupName = '__DEFAULT'; var div = document.createElement('div'); var imgId = 0; var PreviewImage = function(options) { this.options = $.extend(true, { id: '__MUI_PREVIEWIMAGE', zoom: true, header: '', footer: '' }, options || {}); this.init(); this.initEvent(); }; var proto = PreviewImage.prototype; proto.init = function() { var options = this.options; var el = document.getElementById(this.options.id); if (!el) { div.innerHTML = template.replace(/\{\{id\}\}/g, this.options.id).replace('{{header}}', options.header).replace('{{footer}}', options.footer); document.body.appendChild(div.firstElementChild); el = document.getElementById(this.options.id); } this.element = el; this.scroller = this.element.querySelector($.classSelector('.slider-group')); this.indicator = this.element.querySelector($.classSelector('.preview-indicator')); this.loader = this.element.querySelector($.classSelector('.preview-loading')); if (options.footer) { this.element.querySelector($.classSelector('.preview-footer')).classList.remove($.className('hidden')); } this.addImages(); }; proto.initEvent = function() { var self = this; $(document.body).on('tap', 'img[data-preview-src]', function() { self.open(this); return false; }); var laterClose = null; var laterCloseEvent = function() { !laterClose && (laterClose = $.later(function() { self.loader.removeEventListener('tap', laterCloseEvent); self.scroller.removeEventListener('tap', laterCloseEvent); self.close(); }, 300)); }; this.scroller.addEventListener('doubletap', function() { if (laterClose) { laterClose.cancel(); laterClose = null; } }); this.element.addEventListener('webkitAnimationEnd', function() { if (self.element.classList.contains($.className('preview-out'))) { //close self.element.style.display = 'none'; self.element.classList.remove($.className('preview-out')); self.element.classList.remove($.className('preview-in')); laterClose = null; } else { //open self.loader.addEventListener('tap', laterCloseEvent); self.scroller.addEventListener('tap', laterCloseEvent); } }); this.element.addEventListener('slide', function(e) { if (self.options.zoom) { var lastZoomerEl = self.element.querySelector('.mui-zoom-wrapper:nth-child(' + (self.lastIndex + 1) + ')'); if (lastZoomerEl) { $(lastZoomerEl).zoom().setZoom(1); } } var slideNumber = e.detail.slideNumber; self.lastIndex = slideNumber; self.indicator && (self.indicator.innerText = (slideNumber + 1) + '/' + self.currentGroup.length); self._loadItem(slideNumber); }); }; proto.addImages = function(group, index) { this.groups = {}; var imgs = []; if (group) { if (group === defaultGroupName) { imgs = document.querySelectorAll("img[data-preview-src]:not([data-preview-group])"); } else { imgs = document.querySelectorAll("img[data-preview-src][data-preview-group='" + group + "']"); } } else { imgs = document.querySelectorAll("img[data-preview-src]"); } if (imgs.length) { for (var i = 0, len = imgs.length; i < len; i++) { this.addImage(imgs[i]); } } }; proto.addImage = function(img) { var group = img.getAttribute('data-preview-group'); group = group || defaultGroupName; if (!this.groups[group]) { this.groups[group] = []; } var src = img.getAttribute('src'); if (img.__mui_img_data && img.__mui_img_data.src === src) { //已缓存且图片未变化 this.groups[group].push(img.__mui_img_data); } else { var lazyload = img.getAttribute('data-preview-src'); if (!lazyload) { lazyload = src; } var imgObj = { src: src, lazyload: src === lazyload ? '' : lazyload, loaded: src === lazyload ? true : false, sWidth: 0, sHeight: 0, sTop: 0, sLeft: 0, sScale: 1, el: img }; this.groups[group].push(imgObj); img.__mui_img_data = imgObj; } }; proto.empty = function() { this.scroller.innerHTML = ''; }; proto._initImgData = function(itemData, imgEl) { if (!itemData.sWidth) { var img = itemData.el; itemData.sWidth = img.offsetWidth; itemData.sHeight = img.offsetHeight; var offset = $.offset(img); itemData.sTop = offset.top; itemData.sLeft = offset.left; itemData.sScale = Math.max(itemData.sWidth / window.innerWidth, itemData.sHeight / window.innerHeight); } imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')'; }; proto._getScale = function(from, to) { var scaleX = from.width / to.width; var scaleY = from.height / to.height; var scale = 1; if (scaleX <= scaleY) { scale = from.height / (to.height * scaleX); } else { scale = from.width / (to.width * scaleY); } return scale; }; proto._imgTransitionEnd = function(e) { var img = e.target; img.classList.remove($.className('transitioning')); img.removeEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this)); }; proto._loadItem = function(index, isOpening) { //TODO 暂时仅支持img var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')')); var itemData = this.currentGroup[index]; var imgEl = itemEl.querySelector('img'); this._initImgData(itemData, imgEl); if (isOpening) { var posi = this._getPosition(itemData); imgEl.style.webkitTransitionDuration = '0ms'; imgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')'; imgEl.offsetHeight; } if (!itemData.loaded && imgEl.getAttribute('data-preview-lazyload')) { var self = this; self.loader.classList.add($.className('active')); //移动位置动画 imgEl.style.webkitTransitionDuration = '0.5s'; imgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self)); imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')'; this.loadImage(imgEl, function() { itemData.loaded = true; imgEl.src = itemData.lazyload; self._initZoom(itemEl, this.width, this.height); imgEl.classList.add($.className('transitioning')); imgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self)); imgEl.setAttribute('style', ''); imgEl.offsetHeight; self.loader.classList.remove($.className('active')); }); } else { itemData.lazyload && (imgEl.src = itemData.lazyload); this._initZoom(itemEl, imgEl.width, imgEl.height); imgEl.classList.add($.className('transitioning')); imgEl.addEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this)); imgEl.setAttribute('style', ''); imgEl.offsetHeight; } this._preloadItem(index + 1); this._preloadItem(index - 1); }; proto._preloadItem = function(index) { var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')')); if (itemEl) { var itemData = this.currentGroup[index]; if (!itemData.sWidth) { var imgEl = itemEl.querySelector('img'); this._initImgData(itemData, imgEl); } } }; proto._initZoom = function(zoomWrapperEl, zoomerWidth, zoomerHeight) { if (!this.options.zoom) { return; } if (zoomWrapperEl.getAttribute('data-zoomer')) { return; } var zoomEl = zoomWrapperEl.querySelector($.classSelector('.zoom')); if (zoomEl.tagName === 'IMG') { var self = this; var maxZoom = self._getScale({ width: zoomWrapperEl.offsetWidth, height: zoomWrapperEl.offsetHeight }, { width: zoomerWidth, height: zoomerHeight }); $(zoomWrapperEl).zoom({ maxZoom: Math.max(maxZoom, 1) }); } else { $(zoomWrapperEl).zoom(); } }; proto.loadImage = function(imgEl, callback) { var onReady = function() { callback && callback.call(this); }; var img = new Image(); img.onload = onReady; img.onerror = onReady; img.src = imgEl.getAttribute('data-preview-lazyload'); }; proto.getRangeByIndex = function(index, length) { return { from: 0, to: length - 1 }; // var from = Math.max(index - 1, 0); // var to = Math.min(index + 1, length); // if (index === length - 1) { // from = Math.max(length - 3, 0); // to = length - 1; // } // if (index === 0) { // from = 0; // to = Math.min(2, length - 1); // } // return { // from: from, // to: to // }; }; proto._getPosition = function(itemData) { var sLeft = itemData.sLeft - window.pageXOffset; var sTop = itemData.sTop - window.pageYOffset; var left = (window.innerWidth - itemData.sWidth) / 2; var top = (window.innerHeight - itemData.sHeight) / 2; return { left: sLeft, top: sTop, x: sLeft - left, y: sTop - top }; }; proto.refresh = function(index, groupArray) { this.currentGroup = groupArray; //重新生成slider var length = groupArray.length; var itemHtml = []; var currentRange = this.getRangeByIndex(index, length); var from = currentRange.from; var to = currentRange.to + 1; var currentIndex = index; var className = ''; var itemStr = ''; var wWidth = window.innerWidth; var wHeight = window.innerHeight; for (var i = 0; from < to; from++, i++) { var itemData = groupArray[from]; var style = ''; if (itemData.sWidth) { style = '-webkit-transform:translate3d(0,0,0) scale(' + itemData.sScale + ');transform:translate3d(0,0,0) scale(' + itemData.sScale + ')'; } itemStr = itemTemplate.replace('{{src}}', itemData.src).replace('{{lazyload}}', itemData.lazyload).replace('{{style}}', style); if (from === index) { currentIndex = i; className = $.className('active'); } else { className = ''; } itemHtml.push(itemStr.replace('{{className}}', className)); } this.scroller.innerHTML = itemHtml.join(''); this.element.style.display = 'block'; this.element.classList.add($.className('preview-in')); this.lastIndex = currentIndex; this.element.offsetHeight; $(this.element).slider().gotoItem(currentIndex, 0); this.indicator && (this.indicator.innerText = (currentIndex + 1) + '/' + this.currentGroup.length); this._loadItem(currentIndex, true); }; proto.openByGroup = function(index, group) { index = Math.min(Math.max(0, index), this.groups[group].length - 1); this.refresh(index, this.groups[group]); }; proto.open = function(index, group) { if (this.isShown()) { return; } if (typeof index === "number") { group = group || defaultGroupName; this.addImages(group, index); //刷新当前group this.openByGroup(index, group); } else { group = index.getAttribute('data-preview-group'); group = group || defaultGroupName; this.addImages(group, index); //刷新当前group this.openByGroup(this.groups[group].indexOf(index.__mui_img_data), group); } }; proto.close = function(index, group) { if (!this.isShown()) { return; } this.element.classList.remove($.className('preview-in')); this.element.classList.add($.className('preview-out')); var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (this.lastIndex + 1) + ')')); var imgEl = itemEl.querySelector('img'); if (imgEl) { imgEl.classList.add($.className('transitioning')); var itemData = this.currentGroup[this.lastIndex]; var posi = this._getPosition(itemData); var sLeft = posi.left; var sTop = posi.top; if (sTop > window.innerHeight || sLeft > window.innerWidth || sTop < 0 || sLeft < 0) { //out viewport imgEl.style.opacity = 0; imgEl.style.webkitTransitionDuration = '0.5s'; imgEl.style.webkitTransform = 'scale(' + itemData.sScale + ')'; } else { if (this.options.zoom) { $(imgEl.parentNode.parentNode).zoom().toggleZoom(0); } imgEl.style.webkitTransitionDuration = '0.5s'; imgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')'; } } var zoomers = this.element.querySelectorAll($.classSelector('.zoom-wrapper')); for (var i = 0, len = zoomers.length; i < len; i++) { $(zoomers[i]).zoom().destroy(); } $(this.element).slider().destroy(); // this.empty(); }; proto.isShown = function() { return this.element.classList.contains($.className('preview-in')); }; var previewImageApi = null; $.previewImage = function(options) { if (!previewImageApi) { previewImageApi = new PreviewImage(options); } return previewImageApi; }; $.getPreviewImage = function() { return previewImageApi; } })(mui, window); ================================================ FILE: examples/hello-mui/js/mui.pullToRefresh.js ================================================ (function($, window, document) { var STATE_BEFORECHANGEOFFSET = 'beforeChangeOffset'; var STATE_AFTERCHANGEOFFSET = 'afterChangeOffset'; var EVENT_PULLSTART = 'pullstart'; var EVENT_PULLING = 'pulling'; var EVENT_BEFORECHANGEOFFSET = STATE_BEFORECHANGEOFFSET; var EVENT_AFTERCHANGEOFFSET = STATE_AFTERCHANGEOFFSET; var EVENT_DRAGENDAFTERCHANGEOFFSET = 'dragEndAfterChangeOffset'; var CLASS_TRANSITIONING = $.className('transitioning'); var CLASS_PULL_TOP_TIPS = $.className('pull-top-tips'); var CLASS_PULL_BOTTOM_TIPS = $.className('pull-bottom-tips'); var CLASS_PULL_LOADING = $.className('pull-loading'); var CLASS_SCROLL = $.className('scroll'); var CLASS_PULL_TOP_ARROW = $.className('pull-loading') + ' ' + $.className('icon') + ' ' + $.className('icon-pulldown'); var CLASS_PULL_TOP_ARROW_REVERSE = CLASS_PULL_TOP_ARROW + ' ' + $.className('reverse'); var CLASS_PULL_TOP_SPINNER = $.className('pull-loading') + ' ' + $.className('spinner'); var CLASS_HIDDEN = $.className('hidden'); var SELECTOR_PULL_LOADING = '.' + CLASS_PULL_LOADING; $.PullToRefresh = $.Class.extend({ init: function(element, options) { this.element = element; this.options = $.extend(true, { down: { height: 75, callback: false, }, up: { auto: false, offset: 100, //距离底部高度(到达该高度即触发) show: true, contentinit: '上拉显示更多', contentdown: '上拉显示更多', contentrefresh: '正在加载...', contentnomore: '没有更多数据了', callback: false }, preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ } }, options); this.stopped = this.isNeedRefresh = this.isDragging = false; this.state = STATE_BEFORECHANGEOFFSET; this.isInScroll = this.element.classList.contains(CLASS_SCROLL); this.initPullUpTips(); this.initEvent(); }, _preventDefaultException: function(el, exceptions) { for (var i in exceptions) { if (exceptions[i].test(el[i])) { return true; } } return false; }, initEvent: function() { if ($.isFunction(this.options.down.callback)) { this.element.addEventListener($.EVENT_START, this); this.element.addEventListener('drag', this); this.element.addEventListener('dragend', this); } if (this.pullUpTips) { this.element.addEventListener('dragup', this); if (this.isInScroll) { this.element.addEventListener('scrollbottom', this); } else { window.addEventListener('scroll', this); } } }, handleEvent: function(e) { switch (e.type) { case $.EVENT_START: this.isInScroll && this._canPullDown() && e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault(); break; case 'drag': this._drag(e); break; case 'dragend': this._dragend(e); break; case 'webkitTransitionEnd': this._transitionEnd(e); break; case 'dragup': case 'scroll': this._dragup(e); break; case 'scrollbottom': if (e.target === this.element) { this.pullUpLoading(e); } break; } }, initPullDownTips: function() { var self = this; if ($.isFunction(self.options.down.callback)) { self.pullDownTips = (function() { var element = document.querySelector('.' + CLASS_PULL_TOP_TIPS); if (element) { element.parentNode.removeChild(element); } if (!element) { element = document.createElement('div'); element.classList.add(CLASS_PULL_TOP_TIPS); element.innerHTML = '
    '; element.addEventListener('webkitTransitionEnd', self); } self.pullDownTipsIcon = element.querySelector(SELECTOR_PULL_LOADING); document.body.appendChild(element); return element; }()); } }, initPullUpTips: function() { var self = this; if ($.isFunction(self.options.up.callback)) { self.pullUpTips = (function() { var element = self.element.querySelector('.' + CLASS_PULL_BOTTOM_TIPS); if (!element) { element = document.createElement('div'); element.classList.add(CLASS_PULL_BOTTOM_TIPS); if (!self.options.up.show) { element.classList.add(CLASS_HIDDEN); } element.innerHTML = '
    ' + self.options.up.contentinit + '
    '; self.element.appendChild(element); } self.pullUpTipsIcon = element.querySelector(SELECTOR_PULL_LOADING); return element; }()); } }, _transitionEnd: function(e) { if (e.target === this.pullDownTips && this.removing) { this.removePullDownTips(); } }, _dragup: function(e) { var self = this; if (self.loading) { return; } if (e && e.detail && $.gestures.session.drag) { self.isDraggingUp = true; } else { if (!self.isDraggingUp) { //scroll event return; } } if (!self.isDragging) { if (self._canPullUp()) { self.pullUpLoading(e); } } }, _canPullUp: function() { if (this.removing) { return false; } if (this.isInScroll) { var scrollId = this.element.parentNode.getAttribute('data-scroll'); if (scrollId) { var scrollApi = $.data[scrollId]; return scrollApi.y === scrollApi.maxScrollY; } } return window.pageYOffset + window.innerHeight + this.options.up.offset >= document.documentElement.scrollHeight; }, _canPullDown: function() { if (this.removing) { return false; } if (this.isInScroll) { var scrollId = this.element.parentNode.getAttribute('data-scroll'); if (scrollId) { var scrollApi = $.data[scrollId]; return scrollApi.y === 0; } } return document.body.scrollTop === 0; }, _drag: function(e) { if (this.loading || this.stopped) { e.stopPropagation(); e.detail.gesture.preventDefault(); return; } var detail = e.detail; if (!this.isDragging) { if (detail.direction === 'down' && this._canPullDown()) { if (document.querySelector('.' + CLASS_PULL_TOP_TIPS)) { e.stopPropagation(); e.detail.gesture.preventDefault(); return; } this.isDragging = true; this.removing = false; this.startDeltaY = detail.deltaY; $.gestures.session.lockDirection = true; //锁定方向 $.gestures.session.startDirection = detail.direction; this._pullStart(this.startDeltaY); } } if (this.isDragging) { e.stopPropagation(); e.detail.gesture.preventDefault(); var deltaY = detail.deltaY - this.startDeltaY; deltaY = Math.min(deltaY, 1.5 * this.options.down.height); this.deltaY = deltaY; this._pulling(deltaY); var state = deltaY > this.options.down.height ? STATE_AFTERCHANGEOFFSET : STATE_BEFORECHANGEOFFSET; if (this.state !== state) { this.state = state; if (this.state === STATE_AFTERCHANGEOFFSET) { this.removing = false; this.isNeedRefresh = true; } else { this.removing = true; this.isNeedRefresh = false; } this['_' + state](deltaY); } if ($.os.ios && parseFloat($.os.version) >= 8) { var clientY = detail.gesture.touches[0].clientY; if ((clientY + 10) > window.innerHeight || clientY < 10) { this._dragend(e); return; } } } }, _dragend: function(e) { var self = this; if (self.isDragging) { self.isDragging = false; self._dragEndAfterChangeOffset(self.isNeedRefresh); } if (self.isPullingUp) { if (self.pullingUpTimeout) { clearTimeout(self.pullingUpTimeout); } self.pullingUpTimeout = setTimeout(function() { self.isPullingUp = false; }, 1000); } }, _pullStart: function(startDeltaY) { this.pullStart(startDeltaY); $.trigger(this.element, EVENT_PULLSTART, { api: this, startDeltaY: startDeltaY }); }, _pulling: function(deltaY) { this.pulling(deltaY); $.trigger(this.element, EVENT_PULLING, { api: this, deltaY: deltaY }); }, _beforeChangeOffset: function(deltaY) { this.beforeChangeOffset(deltaY); $.trigger(this.element, EVENT_BEFORECHANGEOFFSET, { api: this, deltaY: deltaY }); }, _afterChangeOffset: function(deltaY) { this.afterChangeOffset(deltaY); $.trigger(this.element, EVENT_AFTERCHANGEOFFSET, { api: this, deltaY: deltaY }); }, _dragEndAfterChangeOffset: function(isNeedRefresh) { this.dragEndAfterChangeOffset(isNeedRefresh); $.trigger(this.element, EVENT_DRAGENDAFTERCHANGEOFFSET, { api: this, isNeedRefresh: isNeedRefresh }); }, removePullDownTips: function() { if (this.pullDownTips) { try { this.pullDownTips.parentNode && this.pullDownTips.parentNode.removeChild(this.pullDownTips); this.pullDownTips = null; this.removing = false; } catch (e) {} } }, pullStart: function(startDeltaY) { this.initPullDownTips(startDeltaY); }, pulling: function(deltaY) { this.pullDownTips.style.webkitTransform = 'translate3d(0,' + deltaY + 'px,0)'; }, beforeChangeOffset: function(deltaY) { this.pullDownTipsIcon.className = CLASS_PULL_TOP_ARROW; }, afterChangeOffset: function(deltaY) { this.pullDownTipsIcon.className = CLASS_PULL_TOP_ARROW_REVERSE; }, dragEndAfterChangeOffset: function(isNeedRefresh) { if (isNeedRefresh) { this.pullDownTipsIcon.className = CLASS_PULL_TOP_SPINNER; this.pullDownLoading(); } else { this.pullDownTipsIcon.className = CLASS_PULL_TOP_ARROW; this.endPullDownToRefresh(); } }, pullDownLoading: function() { if (this.loading) { return; } if (!this.pullDownTips) { this.initPullDownTips(); this.dragEndAfterChangeOffset(true); return; } this.loading = true; this.pullDownTips.classList.add(CLASS_TRANSITIONING); this.pullDownTips.style.webkitTransform = 'translate3d(0,' + this.options.down.height + 'px,0)'; this.options.down.callback.apply(this); }, pullUpLoading: function(e) { if (this.loading || this.finished) { return; } this.loading = true; this.isDraggingUp = false; this.pullUpTips.classList.remove(CLASS_HIDDEN); e && e.detail && e.detail.gesture && e.detail.gesture.preventDefault(); this.pullUpTipsIcon.innerHTML = this.options.up.contentrefresh; this.options.up.callback.apply(this); }, endPullDownToRefresh: function() { this.loading = false; this.pullUpTips && this.pullUpTips.classList.remove(CLASS_HIDDEN); this.pullDownTips.classList.add(CLASS_TRANSITIONING); this.pullDownTips.style.webkitTransform = 'translate3d(0,0,0)'; if (this.deltaY <= 0) { this.removePullDownTips(); } else { this.removing = true; } if (this.isInScroll) { $(this.element.parentNode).scroll().refresh(); } }, endPullUpToRefresh: function(finished) { if (finished) { this.finished = true; this.pullUpTipsIcon.innerHTML = this.options.up.contentnomore; this.element.removeEventListener('dragup', this); window.removeEventListener('scroll', this); } else { this.pullUpTipsIcon.innerHTML = this.options.up.contentdown; } this.loading = false; if (this.isInScroll) { $(this.element.parentNode).scroll().refresh(); } }, setStopped: function(stopped) { if (stopped != this.stopped) { this.stopped = stopped; this.pullUpTips && this.pullUpTips.classList[stopped ? 'add' : 'remove'](CLASS_HIDDEN); } }, refresh: function(isReset) { if (isReset && this.finished && this.pullUpTipsIcon) { this.pullUpTipsIcon.innerHTML = this.options.up.contentdown; this.element.addEventListener('dragup', this); window.addEventListener('scroll', this); this.finished = false; } } }); $.fn.pullToRefresh = function(options) { var pullRefreshApis = []; options = options || {}; this.each(function() { var self = this; var pullRefreshApi = null; var id = self.getAttribute('data-pullToRefresh'); if (!id) { id = ++$.uuid; $.data[id] = pullRefreshApi = new $.PullToRefresh(self, options); self.setAttribute('data-pullToRefresh', id); } else { pullRefreshApi = $.data[id]; } if (options.up && options.up.auto) { //如果设置了auto,则自动上拉一次 pullRefreshApi.pullUpLoading(); } pullRefreshApis.push(pullRefreshApi); }); return pullRefreshApis.length === 1 ? pullRefreshApis[0] : pullRefreshApis; } })(mui, window, document); ================================================ FILE: examples/hello-mui/js/mui.pullToRefresh.material.js ================================================ (function($) { var CLASS_PULL_TOP_TIPS = $.className('pull-top-tips'); $.PullToRefresh = $.PullToRefresh.extend({ init: function(element, options) { this._super(element, options); this.options = $.extend(true, { down: { tips: { colors: ['008000', 'd8ad44', 'd00324', 'dc00b8', '017efc'], size: 200, //width=height=size;x=y=size/2;radius=size/4 lineWidth: 15, duration: 1000, tail_duration: 1000 * 2.5 } } }, this.options); this.options.down.tips.color = this.options.down.tips.colors[0]; this.options.down.tips.colors = this.options.down.tips.colors.map(function(color) { return { r: parseInt(color.substring(0, 2), 16), g: parseInt(color.substring(2, 4), 16), b: parseInt(color.substring(4, 6), 16) }; }); }, initPullDownTips: function() { var self = this; if ($.isFunction(self.options.down.callback)) { self.pullDownTips = (function() { var element = document.querySelector('.' + CLASS_PULL_TOP_TIPS); if (element) { element.parentNode.removeChild(element); } if (!element) { element = document.createElement('div'); element.classList.add(CLASS_PULL_TOP_TIPS); element.innerHTML = '
    '; element.addEventListener('webkitTransitionEnd', self); document.body.appendChild(element); } self.pullDownCanvas = document.getElementById("pullDownTips"); self.pullDownCanvasCtx = self.pullDownCanvas.getContext('2d'); self.canvasUtils.init(self.pullDownCanvas, self.options.down.tips); return element; }()); } }, removePullDownTips: function() { this._super(); this.canvasUtils.stopSpin(); }, pulling: function(deltaY) { var ratio = Math.min(deltaY / (this.options.down.height * 1.5), 1); var ratioPI = Math.min(1, ratio * 2); this.pullDownTips.style.webkitTransform = 'translate3d(0,' + (deltaY < 0 ? 0 : deltaY) + 'px,0)'; this.pullDownCanvas.style.opacity = ratioPI; this.pullDownCanvas.style.webkitTransform = 'rotate(' + 300 * ratio + 'deg)'; var canvas = this.pullDownCanvas; var ctx = this.pullDownCanvasCtx; var size = this.options.down.tips.size; ctx.lineWidth = this.options.down.tips.lineWidth; ctx.fillStyle = '#' + this.options.down.tips.color; ctx.strokeStyle = '#' + this.options.down.tips.color; ctx.stroke(); ctx.clearRect(0, 0, size, size); //fixed android 4.1.x canvas.style.display = 'none'; // Detach from DOM canvas.offsetHeight; // Force the detach canvas.style.display = 'inherit'; // Reattach to DOM this.canvasUtils.drawArcedArrow(ctx, size / 2 + 0.5, size / 2, size / 4, 0 * Math.PI, 5 / 3 * Math.PI * ratioPI, false, 1, 2, 0.7853981633974483, 25, this.options.down.tips.lineWidth, this.options.down.tips.lineWidth); }, beforeChangeOffset: function(deltaY) {}, afterChangeOffset: function(deltaY) {}, dragEndAfterChangeOffset: function(isNeedRefresh) { if (isNeedRefresh) { this.canvasUtils.startSpin(); this.pullDownLoading(); } else { this.canvasUtils.stopSpin(); this.endPullDownToRefresh(); } }, canvasUtils: (function() { var canvasObj = null, ctx = null, size = 200, lineWidth = 15, tick = 0, startTime = 0, frameTime = 0, timeLast = 0, oldStep = 0, acc = 0, head = 0, tail = 180, rad = Math.PI / 180, duration = 1000, tail_duration = 1000 * 2.5, colors = ['35ad0e', 'd8ad44', 'd00324', 'dc00b8', '017efc'], rAF = null; function easeLinear(currentIteration, startValue, changeInValue, totalIterations) { return changeInValue * currentIteration / totalIterations + startValue; } function easeInOutQuad(currentIteration, startValue, changeInValue, totalIterations) { if ((currentIteration /= totalIterations / 2) < 1) { return changeInValue / 2 * currentIteration * currentIteration + startValue; } return -changeInValue / 2 * ((--currentIteration) * (currentIteration - 2) - 1) + startValue; } function minmax(value, v0, v1) { var min = Math.min(v0, v1); var max = Math.max(v0, v1); if (value < min) return min; if (value > max) return min; return value; } var drawHead = function(ctx, x0, y0, x1, y1, x2, y2, style) { 'use strict'; if (typeof(x0) == 'string') x0 = parseInt(x0); if (typeof(y0) == 'string') y0 = parseInt(y0); if (typeof(x1) == 'string') x1 = parseInt(x1); if (typeof(y1) == 'string') y1 = parseInt(y1); if (typeof(x2) == 'string') x2 = parseInt(x2); if (typeof(y2) == 'string') y2 = parseInt(y2); var radius = 3; var twoPI = 2 * Math.PI; ctx.save(); ctx.beginPath(); ctx.moveTo(x0, y0); ctx.lineTo(x1, y1); ctx.lineTo(x2, y2); switch (style) { case 0: var backdist = Math.sqrt(((x2 - x0) * (x2 - x0)) + ((y2 - y0) * (y2 - y0))); ctx.arcTo(x1, y1, x0, y0, .55 * backdist); ctx.fill(); break; case 1: ctx.beginPath(); ctx.moveTo(x0, y0); ctx.lineTo(x1, y1); ctx.lineTo(x2, y2); ctx.lineTo(x0, y0); ctx.fill(); break; case 2: ctx.stroke(); break; case 3: var cpx = (x0 + x1 + x2) / 3; var cpy = (y0 + y1 + y2) / 3; ctx.quadraticCurveTo(cpx, cpy, x0, y0); ctx.fill(); break; case 4: var cp1x, cp1y, cp2x, cp2y, backdist; var shiftamt = 5; if (x2 == x0) { backdist = y2 - y0; cp1x = (x1 + x0) / 2; cp2x = (x1 + x0) / 2; cp1y = y1 + backdist / shiftamt; cp2y = y1 - backdist / shiftamt; } else { backdist = Math.sqrt(((x2 - x0) * (x2 - x0)) + ((y2 - y0) * (y2 - y0))); var xback = (x0 + x2) / 2; var yback = (y0 + y2) / 2; var xmid = (xback + x1) / 2; var ymid = (yback + y1) / 2; var m = (y2 - y0) / (x2 - x0); var dx = (backdist / (2 * Math.sqrt(m * m + 1))) / shiftamt; var dy = m * dx; cp1x = xmid - dx; cp1y = ymid - dy; cp2x = xmid + dx; cp2y = ymid + dy; } ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x0, y0); ctx.fill(); break; } ctx.restore(); }; var drawArcedArrow = function(ctx, x, y, r, startangle, endangle, anticlockwise, style, which, angle, d, lineWidth, lineRatio) { 'use strict'; style = typeof(style) != 'undefined' ? style : 3; which = typeof(which) != 'undefined' ? which : 1; angle = typeof(angle) != 'undefined' ? angle : Math.PI / 8; lineWidth = lineWidth || 1; lineRatio = lineRatio || 10; d = typeof(d) != 'undefined' ? d : 10; ctx.save(); ctx.lineWidth = lineWidth; ctx.beginPath(); ctx.arc(x, y, r, startangle, endangle, anticlockwise); ctx.stroke(); var sx, sy, lineangle, destx, desty; if (which & 1) { sx = Math.cos(startangle) * r + x; sy = Math.sin(startangle) * r + y; lineangle = Math.atan2(x - sx, sy - y); if (anticlockwise) { destx = sx + 10 * Math.cos(lineangle); desty = sy + 10 * Math.sin(lineangle); } else { destx = sx - 10 * Math.cos(lineangle); desty = sy - 10 * Math.sin(lineangle); } drawArrow(ctx, sx, sy, destx, desty, style, 2, angle, d); } if (which & 2) { sx = Math.cos(endangle) * r + x; sy = Math.sin(endangle) * r + y; lineangle = Math.atan2(x - sx, sy - y); if (anticlockwise) { destx = sx - 10 * Math.cos(lineangle); desty = sy - 10 * Math.sin(lineangle); } else { destx = sx + 10 * Math.cos(lineangle); desty = sy + 10 * Math.sin(lineangle); } drawArrow(ctx, sx - lineRatio * Math.sin(endangle), sy + lineRatio * Math.cos(endangle), destx - lineRatio * Math.sin(endangle), desty + lineRatio * Math.cos(endangle), style, 2, angle, d) } ctx.restore(); } var drawArrow = function(ctx, x1, y1, x2, y2, style, which, angle, d) { 'use strict'; if (typeof(x1) == 'string') x1 = parseInt(x1); if (typeof(y1) == 'string') y1 = parseInt(y1); if (typeof(x2) == 'string') x2 = parseInt(x2); if (typeof(y2) == 'string') y2 = parseInt(y2); style = typeof(style) != 'undefined' ? style : 3; which = typeof(which) != 'undefined' ? which : 1; angle = typeof(angle) != 'undefined' ? angle : Math.PI / 8; d = typeof(d) != 'undefined' ? d : 10; var toDrawHead = typeof(style) != 'function' ? drawHead : style; var dist = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); var ratio = (dist - d / 3) / dist; var tox, toy, fromx, fromy; if (which & 1) { tox = Math.round(x1 + (x2 - x1) * ratio); toy = Math.round(y1 + (y2 - y1) * ratio); } else { tox = x2; toy = y2; } if (which & 2) { fromx = x1 + (x2 - x1) * (1 - ratio); fromy = y1 + (y2 - y1) * (1 - ratio); } else { fromx = x1; fromy = y1; } ctx.beginPath(); ctx.moveTo(fromx, fromy); ctx.lineTo(tox, toy); ctx.stroke(); var lineangle = Math.atan2(y2 - y1, x2 - x1); var h = Math.abs(d / Math.cos(angle)); if (which & 1) { var angle1 = lineangle + Math.PI + angle; var topx = x2 + Math.cos(angle1) * h; var topy = y2 + Math.sin(angle1) * h; var angle2 = lineangle + Math.PI - angle; var botx = x2 + Math.cos(angle2) * h; var boty = y2 + Math.sin(angle2) * h; toDrawHead(ctx, topx, topy, x2, y2, botx, boty, style); } if (which & 2) { var angle1 = lineangle + angle; var topx = x1 + Math.cos(angle1) * h; var topy = y1 + Math.sin(angle1) * h; var angle2 = lineangle - angle; var botx = x1 + Math.cos(angle2) * h; var boty = y1 + Math.sin(angle2) * h; toDrawHead(ctx, topx, topy, x1, y1, botx, boty, style); } }; var spinColors = function(currentIteration, totalIterations) { var step = currentIteration % totalIterations; if (step < oldStep) colors.push(colors.shift()); var c0 = colors[0], c1 = colors[1], r = minmax(easeLinear(step, c0.r, c1.r - c0.r, totalIterations), c0.r, c1.r), g = minmax(easeLinear(step, c0.g, c1.g - c0.g, totalIterations), c0.g, c1.g), b = minmax(easeLinear(step, c0.b, c1.b - c0.b, totalIterations), c0.b, c1.b); oldStep = step; return "rgb(" + parseInt(r) + "," + parseInt(g) + "," + parseInt(b) + ")"; } var spin = function(t) { var timeCurrent = t || (new Date).getTime(); if (!startTime) { startTime = timeCurrent; } tick = timeCurrent - startTime; acc = easeInOutQuad((tick + tail_duration / 2) % tail_duration, 0, duration, tail_duration); head = easeLinear((tick + acc) % duration, 0, 360, duration); tail = 20 + Math.abs(easeLinear((tick + tail_duration / 2) % tail_duration, -300, 600, tail_duration)); ctx.lineWidth = lineWidth; ctx.lineCap = "round"; ctx.strokeStyle = spinColors(tick, duration); ctx.clearRect(0, 0, size, size); //fixed android 4.1.x canvasObj.style.display = 'none'; // Detach from DOM canvasObj.offsetHeight; // Force the detach canvasObj.style.display = 'inherit'; // Reattach to DOM ctx.beginPath(); ctx.arc(size / 2, size / 2, size / 4, parseInt(head - tail) % 360 * rad, parseInt(head) % 360 * rad, false); ctx.stroke(); rAF = requestAnimationFrame(spin); }; var startSpin = function() { startTime = 0; oldStep = 0; rAF = requestAnimationFrame(spin); }; var stopSpin = function() { rAF && cancelAnimationFrame(rAF); } var init = function(canvas, options) { canvasObj = canvas; ctx = canvasObj.getContext('2d'); var options = $.extend(true, {}, options); colors = options.colors; duration = options.duration; tail_duration = options.tail_duration; size = options.size; lineWidth = options.lineWidth; }; return { init: init, drawArcedArrow: drawArcedArrow, startSpin: startSpin, stopSpin: stopSpin }; })() }); })(mui); ================================================ FILE: examples/hello-mui/js/mui.view.js ================================================ /** *
    * @param {Object} $ * @param {Object} window */ (function($, window) { var CLASS_LEFT = $.className('left'); var CLASS_CENTER = $.className('center'); var CLASS_RIGHT = $.className('right'); var CLASS_PAGE = $.className('page'); var CLASS_PAGE_LEFT = $.className('page-left'); var CLASS_PAGE_CENTER = $.className('page-center'); var CLASS_NAVBAR_LEFT = $.className('navbar-left'); var CLASS_NAVBAR_CENTER = $.className('navbar-center'); var CLASS_PAGE_SHADOW = $.className('page-shadow'); var CLASS_TRANSITIONING = $.className('transitioning'); var SELECTOR_LEFT = '.' + CLASS_LEFT; var SELECTOR_CENTER = '.' + CLASS_CENTER; var SELECTOR_RIGHT = '.' + CLASS_RIGHT; var SELECTOR_ICON = $.classSelector('.icon'); var SELECTOR_NAVBAR = $.classSelector('.navbar'); var SELECTOR_NAVBAR_INNER = $.classSelector('.navbar-inner'); var SELECTOR_PAGES = $.classSelector('.pages'); var SELECTOR_BTN_NAV = $.classSelector('.btn-nav'); var SELECTOR_PAGE_LEFT = '.' + CLASS_PAGE_LEFT; var SELECTOR_PAGE_CENTER = '.' + CLASS_PAGE_CENTER; var SELECTOR_NAVBAR_LEFT = '.' + CLASS_NAVBAR_LEFT; var SELECTOR_NAVBAR_CENTER = '.' + CLASS_NAVBAR_CENTER; var View = $.Class.extend({ init: function(element, options) { this.view = this.element = element; this.options = $.extend({ animateNavbar: 'ios', //ios swipeBackPageActiveArea: 30, hardwareAccelerated: true }, options); this.navbars = this.view.querySelector(SELECTOR_NAVBAR); this.pages = this.view.querySelector(SELECTOR_PAGES); this.history = []; //history this.maxScrollX = this.view.offsetWidth; this.x = this.y = 0; this.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : ''; this.ratio = 0; this.isBack = true; this.moved = this.dragging = false; this.activeNavbar = this.previousNavbar = null; this.activePage = this.previousPage = null; this._initPageEventMethod(); this._initDefaultPage(); this.navbars && this._initNavBar(); this.initEvent(); }, _initPageEventMethod: function() { var self = this; $.each(['onPageBeforeShow', 'onPageShow', 'onPageBeforeBack', 'onPageBack'], function(index, event) { self[event + 'Callbacks'] = {}; self[event] = function(page, callback) { var eventCallbacks = event + 'Callbacks'; if (!self[eventCallbacks].hasOwnProperty(page)) { self[eventCallbacks][page] = [callback]; } else { self[eventCallbacks][page].push(callback); } }; }); }, _initDefaultPage: function() { var defaultPage = document.querySelector(this.options.defaultPage); if (defaultPage) { this._appendPage(defaultPage); } else { throw new Error('defaultPage[' + this.options.defaultPage + '] does not exist'); } }, initEvent: function() { this.view.addEventListener('click', this); this.view.addEventListener('tap', this); this.pages.addEventListener('drag', this); this.pages.addEventListener('dragend', this); this.pages.addEventListener('webkitTransitionEnd', this); }, handleEvent: function(event) { switch (event.type) { case 'click': this._click(event); break; case 'tap': this._tap(event); break; case 'drag': this._drag(event); break; case 'dragend': this._dragend(event); break; case 'webkitTransitionEnd': this._webkitTransitionEnd(event); break; } }, shadow: function() { var shadow = document.createElement('div'); shadow.className = CLASS_PAGE_SHADOW; return shadow; }(), _removePage: function(page, navbar) { navbar && this._removeNavbar(page, navbar); document.body.appendChild(page); this._cleanPageClass(page); }, _prependPage: function(page) { var navbar = page.querySelector(SELECTOR_NAVBAR_INNER); navbar && this._prependNavbar(navbar); page.classList.add(CLASS_PAGE_LEFT); this.pages.insertBefore(page, this.pages.firstElementChild); }, _appendPage: function(page) { var navbar = page.querySelector(SELECTOR_NAVBAR_INNER); navbar && this._appendNavbar(navbar); page.classList.add(CLASS_PAGE_CENTER); this.pages.appendChild(page); }, _removeNavbar: function(page, navbar) { page.insertBefore(navbar, page.firstElementChild); this._cleanNavbarClass(navbar); }, _prependNavbar: function(navbar) { navbar.classList.add(CLASS_NAVBAR_LEFT); this.navbars.insertBefore(navbar, this.navbars.firstElementChild); }, _appendNavbar: function(navbar) { navbar.classList.add(CLASS_NAVBAR_CENTER); this.navbars.appendChild(navbar); }, _cleanPageClass: function(page) { page.classList.remove(CLASS_PAGE_CENTER); page.classList.remove(CLASS_PAGE_LEFT); }, _cleanNavbarClass: function(navbar) { navbar.classList.remove(CLASS_NAVBAR_CENTER); navbar.classList.remove(CLASS_NAVBAR_LEFT); }, _tap: function(event) { var target = event.target; for (; target && target !== document; target = target.parentNode) { if (target.tagName === 'A' && target.hash) { var page = document.getElementById(target.hash.replace('#', '')); if (page && page.classList.contains(CLASS_PAGE)) { event.stopPropagation(); event.detail.gesture.preventDefault(); this.go(target.hash); break; } } } }, _click: function(event) { var target = event.target; for (; target && target !== document; target = target.parentNode) { if (target.tagName === 'A' && target.hash) { var page = document.getElementById(target.hash.replace('#', '')); if (page && page.classList.contains(CLASS_PAGE)) { event.preventDefault(); break; } } } }, _cleanStyle: function(el) { if (el) { el.style.webkitTransform = ''; el.style.opacity = ''; } }, _isAnimateNavbarIOS: function() { return !$.os.android && this.options.animateNavbar === 'ios'; }, _webkitTransitionEnd: function(event) { this.dragging = this.moved = false; if (this.activePage !== event.target) { return; } this.isInTransition = false; this.shadow.parentNode === this.activePage && this.activePage.removeChild(this.shadow); this.previousPageClassList.remove(CLASS_TRANSITIONING); this.activePageClassList.remove(CLASS_TRANSITIONING); var self = this; if (this._isAnimateNavbarIOS() && this.previousNavElements && this.activeNavElements) { var isBack = this.isBack; $.each(this.previousNavElements, function(i, el) { el.classList.remove(CLASS_TRANSITIONING); isBack && self._cleanStyle(el); }); $.each(this.activeNavElements, function(i, el) { el.classList.remove(CLASS_TRANSITIONING); self._cleanStyle(el); }); if (this.previousNavBackIcon) { this.previousNavBackIcon.classList.remove(CLASS_TRANSITIONING); isBack && this._cleanStyle(this.previousNavBackIcon); } if (this.activeNavBackIcon) { this.activeNavBackIcon.classList.remove(CLASS_TRANSITIONING); this._cleanStyle(this.activeNavBackIcon); } } else { this.previousNavbar && this.previousNavbar.classList.remove(CLASS_TRANSITIONING); this.activeNavbar && this.activeNavbar.classList.remove(CLASS_TRANSITIONING); this._cleanStyle(this.previousNavbar); this._cleanStyle(this.activeNavbar); } this._cleanStyle(this.previousPage); this._cleanStyle(this.activePage); if (this.ratio <= 0.5) { return; } if (this.isBack) { this._removePage(this.activePage, this.activeNavbar); this.previousPageClassList.remove(CLASS_PAGE_LEFT); this.previousPageClassList.add(CLASS_PAGE_CENTER); if (this.previousNavbar) { this.previousNavbar.classList.remove(CLASS_NAVBAR_LEFT); this.previousNavbar.classList.add(CLASS_NAVBAR_CENTER); } if (this.history.length > 0) { this._prependPage(this.history.pop()); } this.navbars && this._initNavBar(); this._trigger('pageBack', this.activePage); this._trigger('pageShow', this.previousPage); } else { this.previousPageClassList.add(CLASS_PAGE_LEFT); this.activePageClassList.add(CLASS_PAGE_CENTER); this._trigger('pageShow', this.activePage); } }, _trigger: function(eventType, page) { var eventCallbacks = 'on' + eventType.charAt(0).toUpperCase() + eventType.slice(1) + 'Callbacks'; if (this[eventCallbacks].hasOwnProperty(page.id)) { var callbacks = this[eventCallbacks][page.id]; var event = new CustomEvent(eventType, { detail: { page: page }, bubbles: true, cancelable: true }); for (var len = callbacks.length; len--;) { callbacks[len].call(this, event); } } $.trigger(this.view, eventType, { page: page }); }, _initPageTransform: function() { this.previousPage = this.pages.querySelector(SELECTOR_PAGE_LEFT); this.activePage = this.pages.querySelector(SELECTOR_PAGE_CENTER); if (this.previousPage && this.activePage) { this.activePage.appendChild(this.shadow); this.previousPageClassList = this.previousPage.classList; this.activePageClassList = this.activePage.classList; this.previousPageStyle = this.previousPage.style; this.activePageStyle = this.activePage.style; this.previousPageClassList.remove(CLASS_TRANSITIONING); this.activePageClassList.remove(CLASS_TRANSITIONING); if (this.navbars) { this.previousNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_LEFT); this.activeNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_CENTER); if (this._isAnimateNavbarIOS() && this.previousNavbar && this.activeNavbar) { this.previousNavElements = this.previousNavbar.querySelectorAll(SELECTOR_LEFT + ',' + SELECTOR_CENTER + ',' + SELECTOR_RIGHT); this.activeNavElements = this.activeNavbar.querySelectorAll(SELECTOR_LEFT + ',' + SELECTOR_CENTER + ',' + SELECTOR_RIGHT); this.previousNavBackIcon = this.previousNavbar.querySelector(SELECTOR_LEFT + SELECTOR_BTN_NAV + ' ' + SELECTOR_ICON); this.activeNavBackIcon = this.activeNavbar.querySelector(SELECTOR_LEFT + SELECTOR_BTN_NAV + ' ' + SELECTOR_ICON); } } this.x = 0; this.dragging = true; return true; } return false; }, _initNavBar: function() { if (this._isAnimateNavbarIOS() && this.navbars) { var inners = this.navbars.querySelectorAll(SELECTOR_NAVBAR_INNER); var inner, left, right, center, leftWidth, rightWidth, centerWidth, noLeft, onRight, currLeft, diff, navbarWidth; for (var i = 0, len = inners.length; i < len; i++) { inner = inners[i]; left = inner.querySelector(SELECTOR_LEFT); right = inner.querySelector(SELECTOR_RIGHT); center = inner.querySelector(SELECTOR_CENTER); noLeft = !left; noRight = !right; leftWidth = noLeft ? 0 : left.offsetWidth; rightWidth = noRight ? 0 : right.offsetWidth; centerWidth = center ? center.offsetWidth : 0; navbarWidth = this.maxScrollX; onLeft = inner.classList.contains('navbar-left'); if (noRight) { currLeft = navbarWidth - centerWidth; } if (noLeft) { currLeft = 0; } if (!noLeft && !noRight) { currLeft = (navbarWidth - rightWidth - centerWidth + leftWidth) / 2; } var requiredLeft = (navbarWidth - centerWidth) / 2; if (navbarWidth - leftWidth - rightWidth > centerWidth) { if (requiredLeft < leftWidth) { requiredLeft = leftWidth; } if (requiredLeft + centerWidth > navbarWidth - rightWidth) { requiredLeft = navbarWidth - rightWidth - centerWidth; } diff = requiredLeft - currLeft; } else { diff = 0; } var centerLeft = diff; if (center) { center.style.marginLeft = -leftWidth + 'px'; center.mNavbarLeftOffset = -(currLeft + diff) + 30; //这个30是测出来的。后续要实际计算一下 center.mNavbarRightOffset = navbarWidth - currLeft - diff - centerWidth; } if (onLeft) center.style.webkitTransform = ('translate3d(' + center.mNavbarLeftOffset + 'px, 0, 0)'); if (!noLeft) { left.mNavbarLeftOffset = -leftWidth; left.mNavbarRightOffset = (navbarWidth - leftWidth) / 2; if (onLeft) left.style.webkitTransform = ('translate3d(' + left[0].mNavbarLeftOffset + 'px, 0, 0)'); } if (!noRight) { right.mNavbarLeftOffset = -(navbarWidth - rightWidth) / 2; right.mNavbarRightOffset = rightWidth; if (onLeft) right.style.webkitTransform = ('translate3d(' + right[0].mNavbarLeftOffset + 'px, 0, 0)'); } } } }, _drag: function(event) { if (this.isInTransition) { return; } var detail = event.detail; if (!this.dragging) { if (($.gestures.session.firstTouch.center.x - this.view.offsetLeft) < this.options.swipeBackPageActiveArea) { this.isBack = true; this._initPageTransform(); } } if (this.dragging) { var deltaX = 0; if (!this.moved) { //start deltaX = detail.deltaX; $.gestures.session.lockDirection = true; //锁定方向 $.gestures.session.startDirection = detail.direction; } else { //move deltaX = detail.deltaX - ($.gestures.session.prevTouch && $.gestures.session.prevTouch.deltaX || 0); } var newX = this.x + deltaX; if (newX < 0 || newX > this.maxScrollX) { newX = newX < 0 ? 0 : this.maxScrollX; } event.stopPropagation(); detail.gesture.preventDefault(); if (!this.requestAnimationFrame) { this._updateTranslate(); } this.moved = true; this.x = newX; this.y = 0; } }, _dragend: function(event) { if (!this.moved) { return; } event.stopPropagation(); var detail = event.detail; this._clearRequestAnimationFrame(); this._prepareTransition(); this.ratio = this.x / this.maxScrollX; if (this.ratio === 1 || this.ratio === 0) { $.trigger(this.activePage, 'webkitTransitionEnd'); return; } if (this.ratio > 0.5) { this.setTranslate(this.maxScrollX, 0); } else { this._cleanStyle(this.previousPage); this._cleanStyle(this.activePage); } }, _prepareTransition: function() { this.isInTransition = true; this.previousPageClassList.add(CLASS_TRANSITIONING); this.activePageClassList.add(CLASS_TRANSITIONING); var self = this; if (this.previousNavbar && this.activeNavbar) { this.previousNavbar.classList.add(CLASS_TRANSITIONING); this.activeNavbar.classList.add(CLASS_TRANSITIONING); if (this._isAnimateNavbarIOS() && this.previousNavElements && this.activeNavElements) { $.each(this.previousNavElements, function(i, el) { el.classList.add(CLASS_TRANSITIONING); self._cleanStyle(el); }); $.each(this.activeNavElements, function(i, el) { el.classList.add(CLASS_TRANSITIONING); self._cleanStyle(el); }); if (this.previousNavBackIcon) { this._cleanStyle(this.previousNavBackIcon); this.previousNavBackIcon.classList.add(CLASS_TRANSITIONING); } if (this.activeNavBackIcon) { this._cleanStyle(this.activeNavBackIcon); this.activeNavBackIcon.classList.add(CLASS_TRANSITIONING); } } } }, _clearRequestAnimationFrame: function() { if (this.requestAnimationFrame) { cancelAnimationFrame(this.requestAnimationFrame); this.requestAnimationFrame = null; } }, _getTranslateStr: function(x, y) { if (this.options.hardwareAccelerated) { return 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ; } return 'translate(' + x + 'px,' + y + 'px) '; }, _updateTranslate: function() { var self = this; if (self.x !== self.lastX || self.y !== self.lastY) { self.setTranslate(self.x, self.y); } self.requestAnimationFrame = requestAnimationFrame(function() { self._updateTranslate(); }); }, _setNavbarTranslate: function(x, y) { var percentage = x / this.maxScrollX; //only for ios if (this._isAnimateNavbarIOS()) { if (this.previousNavElements && this.activeNavElements) { this.animateNavbarByIOS(percentage); } } else { //pop-in this.activeNavbar.style.opacity = 1 - percentage * 1.3; this.previousNavbar.style.opacity = percentage * 1.3 - 0.3; } }, animateNavbarByIOS: function(percentage) { var i, len, style, el; for (i = 0, len = this.activeNavElements.length; i < len; i++) { el = this.activeNavElements[i]; style = el.style; style.opacity = (1 - percentage * (el.classList.contains(CLASS_LEFT) ? 3.5 : 1.3)); if (!el.classList.contains(CLASS_RIGHT)) { var activeNavTranslate = percentage * el.mNavbarRightOffset; el.style.webkitTransform = ('translate3d(' + activeNavTranslate + 'px,0,0)'); if (el.classList.contains(CLASS_LEFT) && this.activeNavBackIcon) { this.activeNavBackIcon.style.webkitTransform = ('translate3d(' + -activeNavTranslate + 'px,0,0)'); } } } for (i = 0, len = this.previousNavElements.length; i < len; i++) { el = this.previousNavElements[i]; style = el.style; style.opacity = percentage * 1.3 - 0.3; if (!el.classList.contains(CLASS_RIGHT)) { var previousNavTranslate = el.mNavbarLeftOffset * (1 - percentage); el.style.webkitTransform = ('translate3d(' + previousNavTranslate + 'px,0,0)'); if (el.classList.contains(CLASS_LEFT) && this.previousNavBackIcon) { this.previousNavBackIcon.style.webkitTransform = ('translate3d(' + -previousNavTranslate + 'px,0,0)'); } } } }, setTranslate: function(x, y) { this.x = x; this.y = y; this.previousPage.style.opacity = 0.9 + 0.1 * x / this.maxScrollX; this.previousPage.style['webkitTransform'] = this._getTranslateStr((x / 6 - this.maxScrollX / 6), y); this.activePage.style['webkitTransform'] = this._getTranslateStr(x, y); this.navbars && this._setNavbarTranslate(x, y); this.lastX = this.x; this.lastY = this.y; }, canBack: function() { return this.pages.querySelector(SELECTOR_PAGE_LEFT); }, back: function() { if (this.isInTransition) { return; } this.isBack = true; this.ratio = 1; if (this._initPageTransform()) { this._trigger('pageBeforeBack', this.activePage); this._trigger('pageBeforeShow', this.previousPage); this._prepareTransition(); this.previousPage.offsetHeight; this.activePage.offsetHeight; this.setTranslate(this.maxScrollX, 0); } }, go: function(pageSelector) { if (this.isInTransition) { return; } var nextPage = document.querySelector(pageSelector); if (nextPage) { var previousPage = this.pages.querySelector(SELECTOR_PAGE_LEFT); var activePage = this.pages.querySelector(SELECTOR_PAGE_CENTER); var previousNavbar; var activeNavbar; if (this.navbars) { previousNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_LEFT); activeNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_CENTER); } if (activeNavbar) { activeNavbar.classList.remove(CLASS_NAVBAR_CENTER); activeNavbar.classList.add(CLASS_NAVBAR_LEFT); } if (previousPage) { this._removePage(previousPage, previousNavbar); this.history.push(previousPage); //add to history } if (activePage) { activePage.classList.remove(CLASS_PAGE_CENTER); activePage.style.webkitTransform = 'translate3d(0,0,0)'; activePage.classList.add(CLASS_PAGE_LEFT); } nextPage.style.webkitTransform = 'translate3d(100%,0,0)'; this._appendPage(nextPage); nextPage.appendChild(this.shadow); //shadow nextPage.offsetHeight; //force this.isBack = false; this.ratio = 1; this._initPageTransform(); this.navbars && this._initNavBar(); this.navbars && this._setNavbarTranslate(this.maxScrollX, 0); //force this.previousPage.offsetHeight; this.activePage.offsetHeight; if (this.navbars) { this.previousNavbar.offsetHeight; this.activeNavbar.offsetHeight; } this._trigger('pageBeforeShow', this.activePage); this._prepareTransition(); this.setTranslate(0, 0); } } }); $.fn.view = function(options) { var self = this[0]; var viewApi = null; var id = self.getAttribute('data-view'); if (!id) { id = ++$.uuid; $.data[id] = viewApi = new View(self, options); self.setAttribute('data-view', id); } else { viewApi = $.data[id]; } return viewApi; } })(mui, window); ================================================ FILE: examples/hello-mui/js/mui.zoom.js ================================================ (function($, window) { var CLASS_ZOOM = $.className('zoom'); var CLASS_ZOOM_SCROLLER = $.className('zoom-scroller'); var SELECTOR_ZOOM = '.' + CLASS_ZOOM; var SELECTOR_ZOOM_SCROLLER = '.' + CLASS_ZOOM_SCROLLER; var EVENT_PINCH_START = 'pinchstart'; var EVENT_PINCH = 'pinch'; var EVENT_PINCH_END = 'pinchend'; if ('ongesturestart' in window) { EVENT_PINCH_START = 'gesturestart'; EVENT_PINCH = 'gesturechange'; EVENT_PINCH_END = 'gestureend'; } $.Zoom = function(element, options) { var zoom = this; zoom.options = $.extend($.Zoom.defaults, options); zoom.wrapper = zoom.element = element; zoom.scroller = element.querySelector(SELECTOR_ZOOM_SCROLLER); zoom.scrollerStyle = zoom.scroller && zoom.scroller.style; zoom.zoomer = element.querySelector(SELECTOR_ZOOM); zoom.zoomerStyle = zoom.zoomer && zoom.zoomer.style; zoom.init = function() { //自动启用 $.options.gestureConfig.pinch = true; $.options.gestureConfig.doubletap = true; zoom.initEvents(); }; zoom.initEvents = function(detach) { var action = detach ? 'removeEventListener' : 'addEventListener'; var target = zoom.scroller; target[action](EVENT_PINCH_START, zoom.onPinchstart); target[action](EVENT_PINCH, zoom.onPinch); target[action](EVENT_PINCH_END, zoom.onPinchend); target[action]($.EVENT_START, zoom.onTouchstart); target[action]($.EVENT_MOVE, zoom.onTouchMove); target[action]($.EVENT_CANCEL, zoom.onTouchEnd); target[action]($.EVENT_END, zoom.onTouchEnd); target[action]('drag', zoom.dragEvent); target[action]('doubletap', zoom.doubleTapEvent); }; zoom.dragEvent = function(e) { if (imageIsMoved || isGesturing) { e.stopPropagation(); } }; zoom.doubleTapEvent = function(e) { zoom.toggleZoom(e.detail.center); }; zoom.transition = function(style, time) { time = time || 0; style['webkitTransitionDuration'] = time + 'ms'; return zoom; }; zoom.translate = function(style, x, y) { x = x || 0; y = y || 0; style['webkitTransform'] = 'translate3d(' + x + 'px,' + y + 'px,0px)'; return zoom; }; zoom.scale = function(style, scale) { scale = scale || 1; style['webkitTransform'] = 'translate3d(0,0,0) scale(' + scale + ')'; return zoom; }; zoom.scrollerTransition = function(time) { return zoom.transition(zoom.scrollerStyle, time); }; zoom.scrollerTransform = function(x, y) { return zoom.translate(zoom.scrollerStyle, x, y); }; zoom.zoomerTransition = function(time) { return zoom.transition(zoom.zoomerStyle, time); }; zoom.zoomerTransform = function(scale) { return zoom.scale(zoom.zoomerStyle, scale); }; // Gestures var scale = 1, currentScale = 1, isScaling = false, isGesturing = false; zoom.onPinchstart = function(e) { isGesturing = true; }; zoom.onPinch = function(e) { if (!isScaling) { zoom.zoomerTransition(0); isScaling = true; } scale = (e.detail ? e.detail.scale : e.scale) * currentScale; if (scale > zoom.options.maxZoom) { scale = zoom.options.maxZoom - 1 + Math.pow((scale - zoom.options.maxZoom + 1), 0.5); } if (scale < zoom.options.minZoom) { scale = zoom.options.minZoom + 1 - Math.pow((zoom.options.minZoom - scale + 1), 0.5); } zoom.zoomerTransform(scale); }; zoom.onPinchend = function(e) { scale = Math.max(Math.min(scale, zoom.options.maxZoom), zoom.options.minZoom); zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale); currentScale = scale; isScaling = false; }; zoom.setZoom = function(newScale) { scale = currentScale = newScale; zoom.scrollerTransition(zoom.options.speed).scrollerTransform(0, 0); zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale); }; zoom.toggleZoom = function(position, speed) { if (typeof position === 'number') { speed = position; position = undefined; } speed = typeof speed === 'undefined' ? zoom.options.speed : speed; if (scale && scale !== 1) { scale = currentScale = 1; zoom.scrollerTransition(speed).scrollerTransform(0, 0); } else { scale = currentScale = zoom.options.maxZoom; if (position) { var offset = $.offset(zoom.zoomer); var top = offset.top; var left = offset.left; var offsetX = (position.x - left) * scale; var offsetY = (position.y - top) * scale; this._cal(); if (offsetX >= imageMaxX && offsetX <= (imageMaxX + wrapperWidth)) { //center offsetX = imageMaxX - offsetX + wrapperWidth / 2; } else if (offsetX < imageMaxX) { //left offsetX = imageMaxX - offsetX + wrapperWidth / 2; } else if (offsetX > (imageMaxX + wrapperWidth)) { //right offsetX = imageMaxX + wrapperWidth - offsetX - wrapperWidth / 2; } if (offsetY >= imageMaxY && offsetY <= (imageMaxY + wrapperHeight)) { //middle offsetY = imageMaxY - offsetY + wrapperHeight / 2; } else if (offsetY < imageMaxY) { //top offsetY = imageMaxY - offsetY + wrapperHeight / 2; } else if (offsetY > (imageMaxY + wrapperHeight)) { //bottom offsetY = imageMaxY + wrapperHeight - offsetY - wrapperHeight / 2; } offsetX = Math.min(Math.max(offsetX, imageMinX), imageMaxX); offsetY = Math.min(Math.max(offsetY, imageMinY), imageMaxY); zoom.scrollerTransition(speed).scrollerTransform(offsetX, offsetY); } else { zoom.scrollerTransition(speed).scrollerTransform(0, 0); } } zoom.zoomerTransition(speed).zoomerTransform(scale); }; zoom._cal = function() { wrapperWidth = zoom.wrapper.offsetWidth; wrapperHeight = zoom.wrapper.offsetHeight; imageWidth = zoom.zoomer.offsetWidth; imageHeight = zoom.zoomer.offsetHeight; var scaledWidth = imageWidth * scale; var scaledHeight = imageHeight * scale; imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0); imageMaxX = -imageMinX; imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0); imageMaxY = -imageMinY; }; var wrapperWidth, wrapperHeight, imageIsTouched, imageIsMoved, imageCurrentX, imageCurrentY, imageMinX, imageMinY, imageMaxX, imageMaxY, imageWidth, imageHeight, imageTouchesStart = {}, imageTouchesCurrent = {}, imageStartX, imageStartY, velocityPrevPositionX, velocityPrevTime, velocityX, velocityPrevPositionY, velocityY; zoom.onTouchstart = function(e) { e.preventDefault(); imageIsTouched = true; imageTouchesStart.x = e.type === $.EVENT_START ? e.targetTouches[0].pageX : e.pageX; imageTouchesStart.y = e.type === $.EVENT_START ? e.targetTouches[0].pageY : e.pageY; }; zoom.onTouchMove = function(e) { e.preventDefault(); if (!imageIsTouched) return; if (!imageIsMoved) { wrapperWidth = zoom.wrapper.offsetWidth; wrapperHeight = zoom.wrapper.offsetHeight; imageWidth = zoom.zoomer.offsetWidth; imageHeight = zoom.zoomer.offsetHeight; var translate = $.parseTranslateMatrix($.getStyles(zoom.scroller, 'webkitTransform')); imageStartX = translate.x || 0; imageStartY = translate.y || 0; zoom.scrollerTransition(0); } var scaledWidth = imageWidth * scale; var scaledHeight = imageHeight * scale; if (scaledWidth < wrapperWidth && scaledHeight < wrapperHeight) return; imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0); imageMaxX = -imageMinX; imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0); imageMaxY = -imageMinY; imageTouchesCurrent.x = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageX : e.pageX; imageTouchesCurrent.y = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageY : e.pageY; if (!imageIsMoved && !isScaling) { // if (Math.abs(imageTouchesCurrent.y - imageTouchesStart.y) < Math.abs(imageTouchesCurrent.x - imageTouchesStart.x)) { //TODO 此处需要优化,当遇到长图,需要上下滚动时,下列判断会导致滚动不流畅 if ( (Math.floor(imageMinX) === Math.floor(imageStartX) && imageTouchesCurrent.x < imageTouchesStart.x) || (Math.floor(imageMaxX) === Math.floor(imageStartX) && imageTouchesCurrent.x > imageTouchesStart.x) ) { imageIsTouched = false; return; } // } } imageIsMoved = true; imageCurrentX = imageTouchesCurrent.x - imageTouchesStart.x + imageStartX; imageCurrentY = imageTouchesCurrent.y - imageTouchesStart.y + imageStartY; if (imageCurrentX < imageMinX) { imageCurrentX = imageMinX + 1 - Math.pow((imageMinX - imageCurrentX + 1), 0.8); } if (imageCurrentX > imageMaxX) { imageCurrentX = imageMaxX - 1 + Math.pow((imageCurrentX - imageMaxX + 1), 0.8); } if (imageCurrentY < imageMinY) { imageCurrentY = imageMinY + 1 - Math.pow((imageMinY - imageCurrentY + 1), 0.8); } if (imageCurrentY > imageMaxY) { imageCurrentY = imageMaxY - 1 + Math.pow((imageCurrentY - imageMaxY + 1), 0.8); } //Velocity if (!velocityPrevPositionX) velocityPrevPositionX = imageTouchesCurrent.x; if (!velocityPrevPositionY) velocityPrevPositionY = imageTouchesCurrent.y; if (!velocityPrevTime) velocityPrevTime = $.now(); velocityX = (imageTouchesCurrent.x - velocityPrevPositionX) / ($.now() - velocityPrevTime) / 2; velocityY = (imageTouchesCurrent.y - velocityPrevPositionY) / ($.now() - velocityPrevTime) / 2; if (Math.abs(imageTouchesCurrent.x - velocityPrevPositionX) < 2) velocityX = 0; if (Math.abs(imageTouchesCurrent.y - velocityPrevPositionY) < 2) velocityY = 0; velocityPrevPositionX = imageTouchesCurrent.x; velocityPrevPositionY = imageTouchesCurrent.y; velocityPrevTime = $.now(); zoom.scrollerTransform(imageCurrentX, imageCurrentY); }; zoom.onTouchEnd = function(e) { if (!e.touches.length) { isGesturing = false; } if (!imageIsTouched || !imageIsMoved) { imageIsTouched = false; imageIsMoved = false; return; } imageIsTouched = false; imageIsMoved = false; var momentumDurationX = 300; var momentumDurationY = 300; var momentumDistanceX = velocityX * momentumDurationX; var newPositionX = imageCurrentX + momentumDistanceX; var momentumDistanceY = velocityY * momentumDurationY; var newPositionY = imageCurrentY + momentumDistanceY; if (velocityX !== 0) momentumDurationX = Math.abs((newPositionX - imageCurrentX) / velocityX); if (velocityY !== 0) momentumDurationY = Math.abs((newPositionY - imageCurrentY) / velocityY); var momentumDuration = Math.max(momentumDurationX, momentumDurationY); imageCurrentX = newPositionX; imageCurrentY = newPositionY; var scaledWidth = imageWidth * scale; var scaledHeight = imageHeight * scale; imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0); imageMaxX = -imageMinX; imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0); imageMaxY = -imageMinY; imageCurrentX = Math.max(Math.min(imageCurrentX, imageMaxX), imageMinX); imageCurrentY = Math.max(Math.min(imageCurrentY, imageMaxY), imageMinY); zoom.scrollerTransition(momentumDuration).scrollerTransform(imageCurrentX, imageCurrentY); }; zoom.destroy = function() { zoom.initEvents(true); //detach delete $.data[zoom.wrapper.getAttribute('data-zoomer')]; zoom.wrapper.setAttribute('data-zoomer', ''); } zoom.init(); return zoom; }; $.Zoom.defaults = { speed: 300, maxZoom: 3, minZoom: 1, }; $.fn.zoom = function(options) { var zoomApis = []; this.each(function() { var zoomApi = null; var self = this; var id = self.getAttribute('data-zoomer'); if (!id) { id = ++$.uuid; $.data[id] = zoomApi = new $.Zoom(self, options); self.setAttribute('data-zoomer', id); } else { zoomApi = $.data[id]; } zoomApis.push(zoomApi); }); return zoomApis.length === 1 ? zoomApis[0] : zoomApis; }; })(mui, window); ================================================ FILE: examples/hello-mui/js/update.js ================================================ /** * 5+ App客户端升级参考:http://ask.dcloud.net.cn/article/431 * 服务端升级逻辑参考:https://ext.dcloud.net.cn/plugin?id=2226 * * 检查升级返回值为JSON格式,如下: * * 需升级 { "isUpdate":true, "version": "2.6.0", "title": "Hello MUI版本更新", "note": "修复“选项卡+下拉刷新”示例中,某个选项卡滚动到底时,会触发所有选项卡上拉加载事件的bug;\n修复Android4.4.4版本部分手机上,软键盘弹出时影响图片轮播组件,导致自动轮播停止的bug;", "url": "http://www.dcloud.io/hellomui/HelloMUI.apk" } * * 无需升级 { "isUpdate":false } * */ //服务端检查更新地址,这里是 uniCloud 实现示例,开发者可替换为自己的地址 var server = "https://7a3e3fa9-7820-41d0-be80-11927ac2026c.bspapp.com/http/update"; function update() { mui.getJSON(server, { "appid": plus.runtime.appid, "version": plus.runtime.version, "imei": plus.device.imei }, function(data) { if (data.isUpdate) { plus.nativeUI.confirm(data.note, function(event) { if (0 == event.index) { plus.runtime.openURL(data.url); } }, data.title, ["立即更新", "取  消"]); } }); } // 真机运行不需要检查更新,真机运行时appid固定为'HBuilder',这是调试基座的appid if(plus.runtime.appid !== 'HBuilder' && mui.os.plus && !mui.os.stream ){ mui.plusReady(update); } ================================================ FILE: examples/hello-mui/js/webviewGroup.js ================================================ var webviewGroup = function(id, options) { this.id = id; this.options = options; this.styles = options.styles; this.items = options.items; this.onChange = options.onChange this.options.index = options.index || 0; this.webviews = {}; this.webviewContexts = {}; this.currentWebview = false; this._init(); }; var proto = webviewGroup.prototype; proto._init = function() { this._initParent(); this._initNativeView(); this._initWebviewContexts(this.options.index); }; proto._initParent = function() { this.parent = plus.webview.getWebviewById(this.id); if(!this.parent) { this.parent = plus.webview.create(this.id, this.id); this.parent.show('none'); } }; proto._initNativeView = function() { // fixed by wmy 因为沉浸式应用,需要额外加上状态栏高度 var statusbar_H = plus.navigator.getStatusbarHeight(); this.nativeView = new plus.nativeObj.View('__MUI_TAB_NATIVE', { 'top': (83 + statusbar_H) +'px', //这个需要根据顶部导航及顶部选项卡高度自动调整 'height': (window.screen.height - 83)+"px", 'left': '100%', 'width': '100%', "backgroundColor":"#ffffff" }); this.nativeView.show(); }; proto._initWebviewContexts = function() { for(var len = this.items.length, i = len - 1; i >= 0; i--) { var webviewOptions = this.items[i]; var id = webviewOptions.id; var isFirst = i === 0; var isLast = i === (len - 1); var isCurrent = this.options.index === i; var extras = webviewOptions.extras; extras.__mui_url = webviewOptions.url; extras.__mui_index = i; extras.__mui_left = isFirst ? '' : this.items[i - 1].id; extras.__mui_right = isLast ? '' : this.items[i + 1].id; var styles = webviewOptions.styles || {}; if(i > this.options.index) { styles.left = '100%'; } else if(i < this.options.index) { styles.left = '-100%'; } else { styles.left = '0'; } var webviewContext = new webviewGroupContext(id, webviewOptions, this); this.webviewContexts[id] = webviewContext; if(isCurrent) { webviewContext.webview = plus.webview.getWebviewById(id); webviewContext.createWebview(); webviewContext.webview.show("none"); this._initDrags(webviewContext.webview); this.currentWebview = webviewContext.webview; } } }; proto._onChange = function(webview) { this.currentWebview = webview; this.onChange({ index: webview.__mui_index }); }; proto._dragCallback = function(dir, fromWebview, view, viewId) { if(view === this.nativeView) { //需要创建webview //第一步:初始化目标webview this.webviewContexts[viewId].createWebview('drag'); var targetWebview = this.webviewContexts[viewId].webview; targetWebview.show(); this.nativeView.setStyle({ left: '100%' }); //第二步:初始化目标webview的drag this._initDrags(targetWebview); this._onChange(targetWebview); //第三步:校验目标webview的左右webview的drag初始化 this._checkDrags(targetWebview); } else { this._onChange(view); } }; proto._initDrag = function(webview, dir) { var flag = ('__mui_drag_' + dir + '_flag'); if(webview[flag]) { return; } var viewId = webview['__mui_' + (dir === 'left' ? 'right' : 'left')]; if(viewId) { var view = plus.webview.getWebviewById(viewId); if(!view) { //如果目标webview不存在,使用nativeView替换 view = this.nativeView; } else { webview[flag] = true; } webview.drag({ 'direction': dir, 'moveMode': 'followFinger' }, { 'view': view, 'moveMode': 'follow' }, function(res) { if(res.type === 'end' && res.result) { //拖拽完成 this._dragCallback(dir, webview, view, viewId); } }.bind(this) ) } else { webview[flag] = true; } }; proto._initDrags = function(webview) { this._initDrag(webview, 'left'); this._initDrag(webview, 'right'); }; proto._checkDrags = function(webview) { var left = webview.__mui_left; var right = webview.__mui_right; if(left) { var leftWebview = plus.webview.getWebviewById(left); if(leftWebview && !leftWebview.__mui_drag_left_flag) { this._initDrag(leftWebview, 'left'); } } if(right) { var rightWebview = plus.webview.getWebviewById(right); if(rightWebview && !rightWebview.__mui_drag_right_flag) { this._initDrag(rightWebview, 'right'); } } }; proto.getCurrentWebview = function() { return this.currentWebview; }; proto.getCurrentWebviewContext = function() { if(this.currentWebview) { return this.webviewContexts[this.currentWebview.id]; } return false; }; proto.switchTab = function(id) { id = id.replace('_0', ''); //首页需要替换为appid var fromWebview = this.currentWebview; if(id === fromWebview.id) { return; } var toWebviewContext = this.webviewContexts[id]; var toWebview = toWebviewContext.webview; var fromToLeft = '100%'; var toFromLeft = '-100%'; if(toWebviewContext.options.extras.__mui_index > fromWebview.__mui_index) { fromToLeft = '-100%'; toFromLeft = '100%'; } var isNew = false; if(!toWebview) { isNew = true; toWebviewContext.createWebview('startAnimation'); toWebview = toWebviewContext.webview; // toWebview.showBehind(plus.webview.getSecondWebview()); toWebview.show(); this._initDrags(toWebview); this._checkDrags(toWebview); //新建的时候均需校验 } var self = this; // console.log("current:" + fromWebview.id + ",to:" + fromToLeft); // console.log("next:" + toWebview.id + ",from:" + toFromLeft); plus.webview.startAnimation({ 'view': fromWebview, 'styles': { 'fromLeft': '0', 'toLeft': fromToLeft }, 'action': 'show' }, { 'view': toWebview, 'styles': { 'fromLeft': toFromLeft, 'toLeft': '0' }, 'action': 'show' }, function(e) { //console.log("startAnimation callback..."); if(e.id === toWebview.id) { isNew && plus.nativeUI.showWaiting(); this.currentWebview = toWebview; this.onChange({ index: toWebview.__mui_index }); } }.bind(this) ) }; /** * @param {Object} id * @param {Object} webviewOptions */ var webviewGroupContext = function(id, webviewOptions, groupContext) { this.id = id; this.url = webviewOptions.url; this.options = webviewOptions; this.groupContext = groupContext; this.webview = false; this.inited = false; }; var _proto = webviewGroupContext.prototype; _proto.createWebview = function(from) { var options = this.options; options.styles = options.styles || { top: "83px", bottom: "0px", render: "always" }; options.styles.popGesture = 'none'; if(this.webview) { this.webview.setStyle(options.styles); for(var key in options.extras) { this.webview[key] = options.extras[key]; } } else { options.styles.left = '100%'; if(from !== 'startAnimation') { options.styles.left = '0'; plus.nativeUI.showWaiting(); } this.webview = plus.webview.create(this.url, this.id, options.styles, options.extras); //append进去,避免返回时闪屏 plus.webview.currentWebview().append(this.webview); } this._initWebview(); this.inited = true; }; _proto._initWebview = function() { var options = this.options; if(!this.webview) { return; } this.webview.addEventListener('rendering', function() { setTimeout(function() { plus.nativeUI.closeWaiting(); }, 500); }); if(options.pullToRefresh && options.pullToRefresh.support && support.pullToRefresh()) { var callback = options.pullToRefresh.callback; this.webview.setPullToRefresh(options.pullToRefresh, function() { if(callback) { //如果指定了下拉回调 callback(this.webview); } else { //下拉刷新回调,默认reload当前页面 var self = this; var titleUpdate = function() { setTimeout(function() { self.webview.endPullToRefresh(); }.bind(this), 1000); self.webview.removeEventListener('titleUpdate', titleUpdate); }; this.webview.addEventListener('titleUpdate', titleUpdate); this.webview.reload(); } }.bind(this)); } }; ================================================ FILE: examples/hello-mui/libs/echarts-all.js ================================================ !function(e){var t,i;!function(){function e(e,t){if(!t)return e;if(0===e.indexOf(".")){var i=t.split("/"),n=e.split("/"),a=i.length-1,o=n.length,r=0,s=0;e:for(var l=0;o>l;l++)switch(n[l]){case"..":if(!(a>r))break e;r++,s++;break;case".":s++;break;default:break e}return i.length=a-r,n=n.slice(s),i.concat(n).join("/")}return e}function n(t){function i(i,r){if("string"==typeof i){var s=n[i];return s||(s=o(e(i,t)),n[i]=s),s}i instanceof Array&&(r=r||function(){},r.apply(this,a(i,r,t)))}var n={};return i}function a(i,n,a){for(var s=[],l=r[a],h=0,m=Math.min(i.length,n.length);m>h;h++){var V,U=e(i[h],a);switch(U){case"require":V=l&&l.require||t;break;case"exports":V=l.exports;break;case"module":V=l;break;default:V=o(U)}s.push(V)}return s}function o(e){var t=r[e];if(!t)throw new Error("No "+e);if(!t.defined){var i=t.factory,n=i.apply(this,a(t.deps||[],i,e));"undefined"!=typeof n&&(t.exports=n),t.defined=1}return t.exports}var r={};i=function(e,t,i){r[e]={id:e,deps:t,factory:i,defined:0,exports:{},require:n(e)}},t=n("")}(),i("echarts",["echarts/echarts"],function(e){return e}),i("echarts/echarts",["require","./config","zrender/tool/util","zrender/tool/event","zrender/tool/env","zrender","zrender/config","./chart/island","./component/toolbox","./component","./component/title","./component/tooltip","./component/legend","./util/ecData","./chart","zrender/tool/color","./component/timeline","zrender/shape/Image","zrender/loadingEffect/Bar","zrender/loadingEffect/Bubble","zrender/loadingEffect/DynamicLine","zrender/loadingEffect/Ring","zrender/loadingEffect/Spin","zrender/loadingEffect/Whirling","./theme/macarons","./theme/infographic"],function(e){function t(){r.Dispatcher.call(this)}function i(e){e.innerHTML="",this._themeConfig={},this.dom=e,this._connected=!1,this._status={dragIn:!1,dragOut:!1,needRefresh:!1},this._curEventType=!1,this._chartList=[],this._messageCenter=new t,this._messageCenterOutSide=new t,this.resize=this.resize(),this._init()}function n(e,t,i,n,a){for(var o=e._chartList,r=o.length;r--;){var s=o[r];"function"==typeof s[t]&&s[t](i,n,a)}}var a=e("./config"),o=e("zrender/tool/util"),r=e("zrender/tool/event"),s={},l=e("zrender/tool/env").canvasSupported,h=new Date-0,m={},V="_echarts_instance_";s.version="2.2.7",s.dependencies={zrender:"2.1.1"},s.init=function(t,n){var a=e("zrender");a.version.replace(".","")-0r;r++){var l=d[r],h=U[l];o[h]="_on"+l.toLowerCase(),i.on(h,this._onzrevent)}this.chart={},this.component={};var m=e("./chart/island");this._island=new m(this._themeConfig,this._messageCenter,i,{},this),this.chart.island=this._island;var V=e("./component/toolbox");this._toolbox=new V(this._themeConfig,this._messageCenter,i,{},this),this.component.toolbox=this._toolbox;var p=e("./component");p.define("title",e("./component/title")),p.define("tooltip",e("./component/tooltip")),p.define("legend",e("./component/legend")),(0===i.getWidth()||0===i.getHeight())&&console.error("Dom’s width & height should be ready before init.")},__onevent:function(e){e.__echartsId=e.__echartsId||this.id;var t=e.__echartsId===this.id;switch(this._curEventType||(this._curEventType=e.type),e.type){case a.EVENT.LEGEND_SELECTED:this._onlegendSelected(e);break;case a.EVENT.DATA_ZOOM:if(!t){var i=this.component.dataZoom;i&&(i.silence(!0),i.absoluteZoom(e.zoom),i.silence(!1))}this._ondataZoom(e);break;case a.EVENT.DATA_RANGE:t&&this._ondataRange(e);break;case a.EVENT.MAGIC_TYPE_CHANGED:if(!t){var n=this.component.toolbox;n&&(n.silence(!0),n.setMagicType(e.magicType),n.silence(!1))}this._onmagicTypeChanged(e);break;case a.EVENT.DATA_VIEW_CHANGED:t&&this._ondataViewChanged(e);break;case a.EVENT.TOOLTIP_HOVER:t&&this._tooltipHover(e);break;case a.EVENT.RESTORE:this._onrestore();break;case a.EVENT.REFRESH:t&&this._onrefresh(e);break;case a.EVENT.TOOLTIP_IN_GRID:case a.EVENT.TOOLTIP_OUT_GRID:if(t){if(this._connected){var o=this.component.grid;o&&(e.x=(e.event.zrenderX-o.getX())/o.getWidth(),e.y=(e.event.zrenderY-o.getY())/o.getHeight())}}else{var o=this.component.grid;o&&this._zr.trigger("mousemove",{connectTrigger:!0,zrenderX:o.getX()+e.x*o.getWidth(),zrenderY:o.getY()+e.y*o.getHeight()})}}if(this._connected&&t&&this._curEventType===e.type){for(var r in this._connected)this._connected[r].connectedEventHandler(e);this._curEventType=null}(!t||!this._connected&&t)&&(this._curEventType=null)},_onclick:function(e){if(n(this,"onclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.CLICK,e.event,t,this)}},_ondblclick:function(e){if(n(this,"ondblclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.DBLCLICK,e.event,t,this)}},_onmouseover:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.HOVER,e.event,t,this)}},_onmouseout:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.MOUSEOUT,e.event,t,this)}},_ondragstart:function(e){this._status={dragIn:!1,dragOut:!1,needRefresh:!1},n(this,"ondragstart",e)},_ondragenter:function(e){n(this,"ondragenter",e)},_ondragover:function(e){n(this,"ondragover",e)},_ondragleave:function(e){n(this,"ondragleave",e)},_ondrop:function(e){n(this,"ondrop",e,this._status),this._island.ondrop(e,this._status)},_ondragend:function(e){if(n(this,"ondragend",e,this._status),this._timeline&&this._timeline.ondragend(e,this._status),this._island.ondragend(e,this._status),this._status.needRefresh){this._syncBackupData(this._option);var t=this._messageCenter;t.dispatch(a.EVENT.DATA_CHANGED,e.event,this._eventPackage(e.target),this),t.dispatch(a.EVENT.REFRESH,null,null,this)}},_onlegendSelected:function(e){this._status.needRefresh=!1,n(this,"onlegendSelected",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataZoom:function(e){this._status.needRefresh=!1,n(this,"ondataZoom",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataRange:function(e){this._clearEffect(),this._status.needRefresh=!1,n(this,"ondataRange",e,this._status),this._status.needRefresh&&this._zr.refreshNextFrame()},_onmagicTypeChanged:function(){this._clearEffect(),this._render(this._toolbox.getMagicOption())},_ondataViewChanged:function(e){this._syncBackupData(e.option),this._messageCenter.dispatch(a.EVENT.DATA_CHANGED,null,e,this),this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_tooltipHover:function(e){var t=[];n(this,"ontooltipHover",e,t)},_onrestore:function(){this.restore()},_onrefresh:function(e){this._refreshInside=!0,this.refresh(e),this._refreshInside=!1},_syncBackupData:function(e){this.component.dataZoom&&this.component.dataZoom.syncBackupData(e)},_eventPackage:function(t){if(t){var i=e("./util/ecData"),n=i.get(t,"seriesIndex"),a=i.get(t,"dataIndex");return a=-1!=n&&this.component.dataZoom?this.component.dataZoom.getRealDataIndex(n,a):a,{seriesIndex:n,seriesName:(i.get(t,"series")||{}).name,dataIndex:a,data:i.get(t,"data"),name:i.get(t,"name"),value:i.get(t,"value"),special:i.get(t,"special")}}},_noDataCheck:function(e){for(var t=e.series,i=0,n=t.length;n>i;i++)if(t[i].type==a.CHART_TYPE_MAP||t[i].data&&t[i].data.length>0||t[i].markPoint&&t[i].markPoint.data&&t[i].markPoint.data.length>0||t[i].markLine&&t[i].markLine.data&&t[i].markLine.data.length>0||t[i].nodes&&t[i].nodes.length>0||t[i].links&&t[i].links.length>0||t[i].matrix&&t[i].matrix.length>0||t[i].eventList&&t[i].eventList.length>0)return!1;var o=this._option&&this._option.noDataLoadingOption||this._themeConfig.noDataLoadingOption||a.noDataLoadingOption||{text:this._option&&this._option.noDataText||this._themeConfig.noDataText||a.noDataText,effect:this._option&&this._option.noDataEffect||this._themeConfig.noDataEffect||a.noDataEffect};return this.clear(),this.showLoading(o),!0},_render:function(t){if(this._mergeGlobalConifg(t),!this._noDataCheck(t)){var i=t.backgroundColor;if(i)if(l||-1==i.indexOf("rgba"))this.dom.style.backgroundColor=i;else{var n=i.split(",");this.dom.style.filter="alpha(opacity="+100*n[3].substring(0,n[3].lastIndexOf(")"))+")",n.length=3,n[0]=n[0].replace("a",""),this.dom.style.backgroundColor=n.join(",")+")"}this._zr.clearAnimation(),this._chartList=[];var o=e("./chart"),r=e("./component");(t.xAxis||t.yAxis)&&(t.grid=t.grid||{},t.dataZoom=t.dataZoom||{});for(var s,h,m,V=["title","legend","tooltip","dataRange","roamController","grid","dataZoom","xAxis","yAxis","polar"],U=0,d=V.length;d>U;U++)h=V[U],m=this.component[h],t[h]?(m?m.refresh&&m.refresh(t):(s=r.get(/^[xy]Axis$/.test(h)?"axis":h),m=new s(this._themeConfig,this._messageCenter,this._zr,t,this,h),this.component[h]=m),this._chartList.push(m)):m&&(m.dispose(),this.component[h]=null,delete this.component[h]);for(var p,c,u,y={},U=0,d=t.series.length;d>U;U++)c=t.series[U].type,c?y[c]||(y[c]=!0,p=o.get(c),p?(this.chart[c]?(u=this.chart[c],u.refresh(t)):u=new p(this._themeConfig,this._messageCenter,this._zr,t,this),this._chartList.push(u),this.chart[c]=u):console.error(c+" has not been required.")):console.error("series["+U+"] chart type has not been defined.");for(c in this.chart)c==a.CHART_TYPE_ISLAND||y[c]||(this.chart[c].dispose(),this.chart[c]=null,delete this.chart[c]);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._island.refresh(t),this._toolbox.refresh(t),t.animation&&!t.renderAsImage?this._zr.refresh():this._zr.render();var g="IMG"+this.id,b=document.getElementById(g);t.renderAsImage&&l?(b?b.src=this.getDataURL(t.renderAsImage):(b=this.getImage(t.renderAsImage),b.id=g,b.style.position="absolute",b.style.left=0,b.style.top=0,this.dom.firstChild.appendChild(b)),this.un(),this._zr.un(),this._disposeChartList(),this._zr.clear()):b&&b.parentNode.removeChild(b),b=null,this._option=t}},restore:function(){this._clearEffect(),this._option=o.clone(this._optionRestore),this._disposeChartList(),this._island.clear(),this._toolbox.reset(this._option,!0),this._render(this._option)},refresh:function(e){this._clearEffect(),e=e||{};var t=e.option;!this._refreshInside&&t&&(t=this.getOption(),o.merge(t,e.option,!0),o.merge(this._optionRestore,e.option,!0),this._toolbox.reset(t)),this._island.refresh(t),this._toolbox.refresh(t),this._zr.clearAnimation();for(var i=0,n=this._chartList.length;n>i;i++)this._chartList[i].refresh&&this._chartList[i].refresh(t);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._zr.refresh()},_disposeChartList:function(){this._clearEffect(),this._zr.clearAnimation();for(var e=this._chartList.length;e--;){var t=this._chartList[e];if(t){var i=t.type;this.chart[i]&&delete this.chart[i],this.component[i]&&delete this.component[i],t.dispose&&t.dispose()}}this._chartList=[]},_mergeGlobalConifg:function(t){for(var i=["backgroundColor","calculable","calculableColor","calculableHolderColor","nameConnector","valueConnector","animation","animationThreshold","animationDuration","animationDurationUpdate","animationEasing","addDataAnimation","symbolList","DRAG_ENABLE_TIME"],n=i.length;n--;){var o=i[n];null==t[o]&&(t[o]=null!=this._themeConfig[o]?this._themeConfig[o]:a[o])}var r=t.color;r&&r.length||(r=this._themeConfig.color||a.color),this._zr.getColor=function(t){var i=e("zrender/tool/color");return i.getColor(t,r)},l||(t.animation=!1,t.addDataAnimation=!1)},setOption:function(e,t){return e.timeline?this._setTimelineOption(e):this._setOption(e,t)},_setOption:function(e,t,i){return!t&&this._option?this._option=o.merge(this.getOption(),o.clone(e),!0):(this._option=o.clone(e),!i&&this._timeline&&this._timeline.dispose()),this._optionRestore=o.clone(this._option),this._option.series&&0!==this._option.series.length?(this.component.dataZoom&&(this._option.dataZoom||this._option.toolbox&&this._option.toolbox.feature&&this._option.toolbox.feature.dataZoom&&this._option.toolbox.feature.dataZoom.show)&&this.component.dataZoom.syncOption(this._option),this._toolbox.reset(this._option),this._render(this._option),this):void this._zr.clear()},getOption:function(){function e(e){var n=i._optionRestore[e];if(n)if(n instanceof Array)for(var a=n.length;a--;)t[e][a].data=o.clone(n[a].data);else t[e].data=o.clone(n.data)}var t=o.clone(this._option),i=this;return e("xAxis"),e("yAxis"),e("series"),t},setSeries:function(e,t){return t?(this._option.series=e,this.setOption(this._option,t)):this.setOption({series:e}),this},getSeries:function(){return this.getOption().series},_setTimelineOption:function(t){this._timeline&&this._timeline.dispose();var i=e("./component/timeline"),n=new i(this._themeConfig,this._messageCenter,this._zr,t,this);return this._timeline=n,this.component.timeline=this._timeline,this},addData:function(e,t,i,n,r){function s(){if(V._zr){V._zr.clearAnimation();for(var e=0,t=X.length;t>e;e++)X[e].motionlessOnce=h.addDataAnimation&&X[e].addDataAnimation;V._messageCenter.dispatch(a.EVENT.REFRESH,null,{option:h},V)}}for(var l=e instanceof Array?e:[[e,t,i,n,r]],h=this.getOption(),m=this._optionRestore,V=this,U=0,d=l.length;d>U;U++){e=l[U][0],t=l[U][1],i=l[U][2],n=l[U][3],r=l[U][4];var p=m.series[e],c=i?"unshift":"push",u=i?"pop":"shift";if(p){var y=p.data,g=h.series[e].data;if(y[c](t),g[c](t),n||(y[u](),t=g[u]()),null!=r){var b,f;if(p.type===a.CHART_TYPE_PIE&&(b=m.legend)&&(f=b.data)){var k=h.legend.data;if(f[c](r),k[c](r),!n){var x=o.indexOf(f,t.name);-1!=x&&f.splice(x,1),x=o.indexOf(k,t.name),-1!=x&&k.splice(x,1)}}else if(null!=m.xAxis&&null!=m.yAxis){var _,L,W=p.xAxisIndex||0;(null==m.xAxis[W].type||"category"===m.xAxis[W].type)&&(_=m.xAxis[W].data,L=h.xAxis[W].data,_[c](r),L[c](r),n||(_[u](),L[u]())),W=p.yAxisIndex||0,"category"===m.yAxis[W].type&&(_=m.yAxis[W].data,L=h.yAxis[W].data,_[c](r),L[c](r),n||(_[u](),L[u]()))}}this._option.series[e].data=h.series[e].data}}this._zr.clearAnimation();for(var X=this._chartList,v=0,w=function(){v--,0===v&&s()},U=0,d=X.length;d>U;U++)h.addDataAnimation&&X[U].addDataAnimation&&(v++,X[U].addDataAnimation(l,w));return this.component.dataZoom&&this.component.dataZoom.syncOption(h),this._option=h,h.addDataAnimation||setTimeout(s,0),this},addMarkPoint:function(e,t){return this._addMark(e,t,"markPoint")},addMarkLine:function(e,t){return this._addMark(e,t,"markLine")},_addMark:function(e,t,i){var n,a=this._option.series;if(a&&(n=a[e])){var r=this._optionRestore.series,s=r[e],l=n[i],h=s[i];l=n[i]=l||{data:[]},h=s[i]=h||{data:[]};for(var m in t)"data"===m?(l.data=l.data.concat(t.data),h.data=h.data.concat(t.data)):"object"!=typeof t[m]||null==l[m]?l[m]=h[m]=t[m]:(o.merge(l[m],t[m],!0),o.merge(h[m],t[m],!0));var V=this.chart[n.type];V&&V.addMark(e,t,i)}return this},delMarkPoint:function(e,t){return this._delMark(e,t,"markPoint")},delMarkLine:function(e,t){return this._delMark(e,t,"markLine")},_delMark:function(e,t,i){var n,a,o,r=this._option.series;if(!(r&&(n=r[e])&&(a=n[i])&&(o=a.data)))return this;t=t.split(" > ");for(var s=-1,l=0,h=o.length;h>l;l++){var m=o[l];if(m instanceof Array){if(m[0].name===t[0]&&m[1].name===t[1]){s=l;break}}else if(m.name===t[0]){s=l;break}}if(s>-1){o.splice(s,1),this._optionRestore.series[e][i].data.splice(s,1);var V=this.chart[n.type];V&&V.delMark(e,t.join(" > "),i)}return this},getDom:function(){return this.dom},getZrender:function(){return this._zr},getDataURL:function(e){if(!l)return"";if(0===this._chartList.length){var t="IMG"+this.id,i=document.getElementById(t);if(i)return i.src}var n=this.component.tooltip;switch(n&&n.hideTip(),e){case"jpeg":break;default:e="png"}var a=this._option.backgroundColor;return a&&"rgba(0,0,0,0)"===a.replace(" ","")&&(a="#fff"),this._zr.toDataURL("image/"+e,a)},getImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getDataURL(e),i.title=t&&t.text||"ECharts",i},getConnectedDataURL:function(t){if(!this.isConnected())return this.getDataURL(t);var i=this.dom,n={self:{img:this.getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight}},a=n.self.left,o=n.self.top,r=n.self.right,s=n.self.bottom;for(var l in this._connected)i=this._connected[l].getDom(),n[l]={img:this._connected[l].getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight},a=Math.min(a,n[l].left),o=Math.min(o,n[l].top),r=Math.max(r,n[l].right),s=Math.max(s,n[l].bottom);var h=document.createElement("div");h.style.position="absolute",h.style.left="-4000px",h.style.width=r-a+"px",h.style.height=s-o+"px",document.body.appendChild(h);var m=e("zrender").init(h),V=e("zrender/shape/Image");for(var l in n)m.addShape(new V({style:{x:n[l].left-a,y:n[l].top-o,image:n[l].img}}));m.render();var U=this._option.backgroundColor;U&&"rgba(0,0,0,0)"===U.replace(/ /g,"")&&(U="#fff");var d=m.toDataURL("image/png",U);return setTimeout(function(){m.dispose(),h.parentNode.removeChild(h),h=null},100),d},getConnectedImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getConnectedDataURL(e),i.title=t&&t.text||"ECharts",i},on:function(e,t){return this._messageCenterOutSide.bind(e,t,this),this},un:function(e,t){return this._messageCenterOutSide.unbind(e,t),this},connect:function(e){if(!e)return this;if(this._connected||(this._connected={}),e instanceof Array)for(var t=0,i=e.length;i>t;t++)this._connected[e[t].id]=e[t];else this._connected[e.id]=e;return this},disConnect:function(e){if(!e||!this._connected)return this;if(e instanceof Array)for(var t=0,i=e.length;i>t;t++)delete this._connected[e[t].id];else delete this._connected[e.id];for(var n in this._connected)return this;return this._connected=!1,this},connectedEventHandler:function(e){e.__echartsId!=this.id&&this._onevent(e)},isConnected:function(){return!!this._connected},showLoading:function(t){var i={bar:e("zrender/loadingEffect/Bar"),bubble:e("zrender/loadingEffect/Bubble"),dynamicLine:e("zrender/loadingEffect/DynamicLine"),ring:e("zrender/loadingEffect/Ring"),spin:e("zrender/loadingEffect/Spin"),whirling:e("zrender/loadingEffect/Whirling")};this._toolbox.hideDataView(),t=t||{};var n=t.textStyle||{};t.textStyle=n;var r=o.merge(o.merge(o.clone(n),this._themeConfig.textStyle),a.textStyle);n.textFont=r.fontStyle+" "+r.fontWeight+" "+r.fontSize+"px "+r.fontFamily,n.text=t.text||this._option&&this._option.loadingText||this._themeConfig.loadingText||a.loadingText,null!=t.x&&(n.x=t.x),null!=t.y&&(n.y=t.y),t.effectOption=t.effectOption||{},t.effectOption.textStyle=n;var s=t.effect;return("string"==typeof s||null==s)&&(s=i[t.effect||this._option&&this._option.loadingEffect||this._themeConfig.loadingEffect||a.loadingEffect]||i.spin),this._zr.showLoading(new s(t.effectOption)),this},hideLoading:function(){return this._zr.hideLoading(),this},setTheme:function(t){if(t){if("string"==typeof t)switch(t){case"macarons":t=e("./theme/macarons");break;case"infographic":t=e("./theme/infographic");break;default:t={}}else t=t||{};this._themeConfig=t}if(!l){var i=this._themeConfig.textStyle;i&&i.fontFamily&&i.fontFamily2&&(i.fontFamily=i.fontFamily2),i=a.textStyle,i.fontFamily=i.fontFamily2}this._timeline&&this._timeline.setTheme(!0),this._optionRestore&&this.restore()},resize:function(){var e=this;return function(){if(e._clearEffect(),e._zr.resize(),e._option&&e._option.renderAsImage&&l)return e._render(e._option),e;e._zr.clearAnimation(),e._island.resize(),e._toolbox.resize(),e._timeline&&e._timeline.resize();for(var t=0,i=e._chartList.length;i>t;t++)e._chartList[t].resize&&e._chartList[t].resize();return e.component.grid&&e.component.grid.refixAxisShape(e.component),e._zr.refresh(),e._messageCenter.dispatch(a.EVENT.RESIZE,null,null,e),e}},_clearEffect:function(){this._zr.modLayer(a.EFFECT_ZLEVEL,{motionBlur:!1}),this._zr.painter.clearLayer(a.EFFECT_ZLEVEL)},clear:function(){return this._disposeChartList(),this._zr.clear(),this._option={},this._optionRestore={},this.dom.style.backgroundColor=null,this},dispose:function(){var e=this.dom.getAttribute(V);e&&delete m[e],this._island.dispose(),this._toolbox.dispose(),this._timeline&&this._timeline.dispose(),this._messageCenter.unbind(),this.clear(),this._zr.dispose(),this._zr=null}},s}),i("echarts/config",[],function(){var e={CHART_TYPE_LINE:"line",CHART_TYPE_BAR:"bar",CHART_TYPE_SCATTER:"scatter",CHART_TYPE_PIE:"pie",CHART_TYPE_RADAR:"radar",CHART_TYPE_VENN:"venn",CHART_TYPE_TREEMAP:"treemap",CHART_TYPE_TREE:"tree",CHART_TYPE_MAP:"map",CHART_TYPE_K:"k",CHART_TYPE_ISLAND:"island",CHART_TYPE_FORCE:"force",CHART_TYPE_CHORD:"chord",CHART_TYPE_GAUGE:"gauge",CHART_TYPE_FUNNEL:"funnel",CHART_TYPE_EVENTRIVER:"eventRiver",CHART_TYPE_WORDCLOUD:"wordCloud",CHART_TYPE_HEATMAP:"heatmap",COMPONENT_TYPE_TITLE:"title",COMPONENT_TYPE_LEGEND:"legend",COMPONENT_TYPE_DATARANGE:"dataRange",COMPONENT_TYPE_DATAVIEW:"dataView",COMPONENT_TYPE_DATAZOOM:"dataZoom",COMPONENT_TYPE_TOOLBOX:"toolbox",COMPONENT_TYPE_TOOLTIP:"tooltip",COMPONENT_TYPE_GRID:"grid",COMPONENT_TYPE_AXIS:"axis",COMPONENT_TYPE_POLAR:"polar",COMPONENT_TYPE_X_AXIS:"xAxis",COMPONENT_TYPE_Y_AXIS:"yAxis",COMPONENT_TYPE_AXIS_CATEGORY:"categoryAxis",COMPONENT_TYPE_AXIS_VALUE:"valueAxis",COMPONENT_TYPE_TIMELINE:"timeline",COMPONENT_TYPE_ROAMCONTROLLER:"roamController",backgroundColor:"rgba(0,0,0,0)",color:["#ff7f50","#87cefa","#da70d6","#32cd32","#6495ed","#ff69b4","#ba55d3","#cd5c5c","#ffa500","#40e0d0","#1e90ff","#ff6347","#7b68ee","#00fa9a","#ffd700","#6699FF","#ff6666","#3cb371","#b8860b","#30e0e0"],markPoint:{clickable:!0,symbol:"pin",symbolSize:10,large:!1,effect:{show:!1,loop:!0,period:15,type:"scale",scaleSize:2,bounceDistance:10},itemStyle:{normal:{borderWidth:2,label:{show:!0,position:"inside"}},emphasis:{label:{show:!0}}}},markLine:{clickable:!0,symbol:["circle","arrow"],symbolSize:[2,4],smoothness:.2,precision:2,effect:{show:!1,loop:!0,period:15,scaleSize:2},bundling:{enable:!1,maxTurningAngle:45},itemStyle:{normal:{borderWidth:1.5,label:{show:!0,position:"end"},lineStyle:{type:"dashed"}},emphasis:{label:{show:!1},lineStyle:{}}}},textStyle:{decoration:"none",fontFamily:"Arial, Verdana, sans-serif",fontFamily2:"微软雅黑",fontSize:12,fontStyle:"normal",fontWeight:"normal"},EVENT:{REFRESH:"refresh",RESTORE:"restore",RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",HOVER:"hover",MOUSEOUT:"mouseout",DATA_CHANGED:"dataChanged",DATA_ZOOM:"dataZoom",DATA_RANGE:"dataRange",DATA_RANGE_SELECTED:"dataRangeSelected",DATA_RANGE_HOVERLINK:"dataRangeHoverLink",LEGEND_SELECTED:"legendSelected",LEGEND_HOVERLINK:"legendHoverLink",MAP_SELECTED:"mapSelected",PIE_SELECTED:"pieSelected",MAGIC_TYPE_CHANGED:"magicTypeChanged",DATA_VIEW_CHANGED:"dataViewChanged",TIMELINE_CHANGED:"timelineChanged",MAP_ROAM:"mapRoam",FORCE_LAYOUT_END:"forceLayoutEnd",TOOLTIP_HOVER:"tooltipHover",TOOLTIP_IN_GRID:"tooltipInGrid",TOOLTIP_OUT_GRID:"tooltipOutGrid",ROAMCONTROLLER:"roamController"},DRAG_ENABLE_TIME:120,EFFECT_ZLEVEL:10,effectBlendAlpha:.95,symbolList:["circle","rectangle","triangle","diamond","emptyCircle","emptyRectangle","emptyTriangle","emptyDiamond"],loadingEffect:"spin",loadingText:"数据读取中...",noDataEffect:"bubble",noDataText:"暂无数据",calculable:!1,calculableColor:"rgba(255,165,0,0.6)",calculableHolderColor:"#ccc",nameConnector:" & ",valueConnector:": ",animation:!0,addDataAnimation:!0,animationThreshold:2e3,animationDuration:2e3,animationDurationUpdate:500,animationEasing:"ExponentialOut"};return e}),i("zrender/tool/util",["require","../dep/excanvas"],function(e){function t(e){return e&&1===e.nodeType&&"string"==typeof e.nodeName}function i(e){if("object"==typeof e&&null!==e){var n=e;if(e instanceof Array){n=[];for(var a=0,o=e.length;o>a;a++)n[a]=i(e[a])}else if(!y[g.call(e)]&&!t(e)){n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=i(e[r]))}return n}return e}function n(e,i,n,o){if(i.hasOwnProperty(n)){var r=e[n];"object"!=typeof r||y[g.call(r)]||t(r)?!o&&n in e||(e[n]=i[n]):a(e[n],i[n],o)}}function a(e,t,i){for(var a in t)n(e,t,a,i);return e}function o(){if(!U)if(e("../dep/excanvas"),window.G_vmlCanvasManager){var t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",document.body.appendChild(t),U=G_vmlCanvasManager.initElement(t).getContext("2d")}else U=document.createElement("canvas").getContext("2d");return U}function r(e,t){if(e.indexOf)return e.indexOf(t);for(var i=0,n=e.length;n>i;i++)if(e[i]===t)return i;return-1}function s(e,t){function i(){}var n=e.prototype;i.prototype=t.prototype,e.prototype=new i;for(var a in n)e.prototype[a]=n[a];e.constructor=e}function l(e,t,i){if(e&&t)if(e.forEach&&e.forEach===p)e.forEach(t,i);else if(e.length===+e.length)for(var n=0,a=e.length;a>n;n++)t.call(i,e[n],n,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(i,e[o],o,e)}function h(e,t,i){if(e&&t){if(e.map&&e.map===c)return e.map(t,i);for(var n=[],a=0,o=e.length;o>a;a++)n.push(t.call(i,e[a],a,e));return n}}function m(e,t,i){if(e&&t){if(e.filter&&e.filter===u)return e.filter(t,i);for(var n=[],a=0,o=e.length;o>a;a++)t.call(i,e[a],a,e)&&n.push(e[a]);return n}}function V(e,t){return function(){e.apply(t,arguments)}}var U,d=Array.prototype,p=d.forEach,c=d.map,u=d.filter,y={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1},g=Object.prototype.toString;return{inherits:s,clone:i,merge:a,getContext:o,indexOf:r,each:l,map:h,filter:m,bind:V}}),i("zrender/tool/event",["require","../mixin/Eventful"],function(e){"use strict";function t(e){return"undefined"!=typeof e.zrenderX&&e.zrenderX||"undefined"!=typeof e.offsetX&&e.offsetX||"undefined"!=typeof e.layerX&&e.layerX||"undefined"!=typeof e.clientX&&e.clientX}function i(e){return"undefined"!=typeof e.zrenderY&&e.zrenderY||"undefined"!=typeof e.offsetY&&e.offsetY||"undefined"!=typeof e.layerY&&e.layerY||"undefined"!=typeof e.clientY&&e.clientY}function n(e){return"undefined"!=typeof e.zrenderDelta&&e.zrenderDelta||"undefined"!=typeof e.wheelDelta&&e.wheelDelta||"undefined"!=typeof e.detail&&-e.detail}var a=e("../mixin/Eventful"),o="function"==typeof window.addEventListener?function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0}:function(e){e.returnValue=!1,e.cancelBubble=!0};return{getX:t,getY:i,getDelta:n,stop:o,Dispatcher:a}}),i("zrender/tool/env",[],function(){function e(e){var t=this.os={},i=this.browser={},n=e.match(/Web[kK]it[\/]{0,1}([\d.]+)/),a=e.match(/(Android);?[\s\/]+([\d.]+)?/),o=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),s=!o&&e.match(/(iPhone\sOS)\s([\d_]+)/),l=e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),h=l&&e.match(/TouchPad/),m=e.match(/Kindle\/([\d.]+)/),V=e.match(/Silk\/([\d._]+)/),U=e.match(/(BlackBerry).*Version\/([\d.]+)/),d=e.match(/(BB10).*Version\/([\d.]+)/),p=e.match(/(RIM\sTablet\sOS)\s([\d.]+)/),c=e.match(/PlayBook/),u=e.match(/Chrome\/([\d.]+)/)||e.match(/CriOS\/([\d.]+)/),y=e.match(/Firefox\/([\d.]+)/),g=e.match(/MSIE ([\d.]+)/),b=n&&e.match(/Mobile\//)&&!u,f=e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/)&&!u,g=e.match(/MSIE\s([\d.]+)/);return(i.webkit=!!n)&&(i.version=n[1]),a&&(t.android=!0,t.version=a[2]),s&&!r&&(t.ios=t.iphone=!0,t.version=s[2].replace(/_/g,".")),o&&(t.ios=t.ipad=!0,t.version=o[2].replace(/_/g,".")),r&&(t.ios=t.ipod=!0,t.version=r[3]?r[3].replace(/_/g,"."):null),l&&(t.webos=!0,t.version=l[2]),h&&(t.touchpad=!0),U&&(t.blackberry=!0,t.version=U[2]),d&&(t.bb10=!0,t.version=d[2]),p&&(t.rimtabletos=!0,t.version=p[2]),c&&(i.playbook=!0),m&&(t.kindle=!0,t.version=m[1]),V&&(i.silk=!0,i.version=V[1]),!V&&t.android&&e.match(/Kindle Fire/)&&(i.silk=!0),u&&(i.chrome=!0,i.version=u[1]),y&&(i.firefox=!0,i.version=y[1]),g&&(i.ie=!0,i.version=g[1]),b&&(e.match(/Safari/)||t.ios)&&(i.safari=!0),f&&(i.webview=!0),g&&(i.ie=!0,i.version=g[1]),t.tablet=!!(o||c||a&&!e.match(/Mobile/)||y&&e.match(/Tablet/)||g&&!e.match(/Phone/)&&e.match(/Touch/)),t.phone=!(t.tablet||t.ipod||!(a||s||l||U||d||u&&e.match(/Android/)||u&&e.match(/CriOS\/([\d.]+)/)||y&&e.match(/Mobile/)||g&&e.match(/Touch/))),{browser:i,os:t,canvasSupported:document.createElement("canvas").getContext?!0:!1}}return e(navigator.userAgent)}),i("zrender",["zrender/zrender"],function(e){return e}),i("zrender/zrender",["require","./dep/excanvas","./tool/util","./tool/log","./tool/guid","./Handler","./Painter","./Storage","./animation/Animation","./tool/env"],function(e){function t(e){return function(){e._needsRefreshNextFrame&&e.refresh()}}e("./dep/excanvas");var i=e("./tool/util"),n=e("./tool/log"),a=e("./tool/guid"),o=e("./Handler"),r=e("./Painter"),s=e("./Storage"),l=e("./animation/Animation"),h={},m={};m.version="2.1.1",m.init=function(e){var t=new V(a(),e);return h[t.id]=t,t},m.dispose=function(e){if(e)e.dispose();else{for(var t in h)h[t].dispose();h={}}return m},m.getInstance=function(e){return h[e]},m.delInstance=function(e){return delete h[e],m};var V=function(i,n){this.id=i,this.env=e("./tool/env"),this.storage=new s,this.painter=new r(n,this.storage),this.handler=new o(n,this.storage,this.painter),this.animation=new l({stage:{update:t(this)}}),this.animation.start();var a=this;this.painter.refreshNextFrame=function(){a.refreshNextFrame()},this._needsRefreshNextFrame=!1;var a=this,h=this.storage,m=h.delFromMap;h.delFromMap=function(e){var t=h.get(e);a.stopAnimation(t),m.call(h,e)}};return V.prototype.getId=function(){return this.id},V.prototype.addShape=function(e){return this.addElement(e),this},V.prototype.addGroup=function(e){return this.addElement(e),this},V.prototype.delShape=function(e){return this.delElement(e),this},V.prototype.delGroup=function(e){return this.delElement(e),this},V.prototype.modShape=function(e,t){return this.modElement(e,t),this},V.prototype.modGroup=function(e,t){return this.modElement(e,t),this},V.prototype.addElement=function(e){return this.storage.addRoot(e),this._needsRefreshNextFrame=!0,this},V.prototype.delElement=function(e){return this.storage.delRoot(e),this._needsRefreshNextFrame=!0,this},V.prototype.modElement=function(e,t){return this.storage.mod(e,t),this._needsRefreshNextFrame=!0,this},V.prototype.modLayer=function(e,t){return this.painter.modLayer(e,t),this._needsRefreshNextFrame=!0,this},V.prototype.addHoverShape=function(e){return this.storage.addHover(e),this},V.prototype.render=function(e){return this.painter.render(e),this._needsRefreshNextFrame=!1,this},V.prototype.refresh=function(e){return this.painter.refresh(e),this._needsRefreshNextFrame=!1,this},V.prototype.refreshNextFrame=function(){return this._needsRefreshNextFrame=!0,this},V.prototype.refreshHover=function(e){return this.painter.refreshHover(e),this},V.prototype.refreshShapes=function(e,t){return this.painter.refreshShapes(e,t),this},V.prototype.resize=function(){return this.painter.resize(),this},V.prototype.animate=function(e,t,a){var o=this;if("string"==typeof e&&(e=this.storage.get(e)),e){var r;if(t){for(var s=t.split("."),l=e,h=0,m=s.length;m>h;h++)l&&(l=l[s[h]]);l&&(r=l)}else r=e;if(!r)return void n('Property "'+t+'" is not existed in element '+e.id); null==e.__animators&&(e.__animators=[]);var V=e.__animators,U=this.animation.animate(r,{loop:a}).during(function(){o.modShape(e)}).done(function(){var t=i.indexOf(e.__animators,U);t>=0&&V.splice(t,1)});return V.push(U),U}n("Element not existed")},V.prototype.stopAnimation=function(e){if(e.__animators){for(var t=e.__animators,i=t.length,n=0;i>n;n++)t[n].stop();t.length=0}return this},V.prototype.clearAnimation=function(){return this.animation.clear(),this},V.prototype.showLoading=function(e){return this.painter.showLoading(e),this},V.prototype.hideLoading=function(){return this.painter.hideLoading(),this},V.prototype.getWidth=function(){return this.painter.getWidth()},V.prototype.getHeight=function(){return this.painter.getHeight()},V.prototype.toDataURL=function(e,t,i){return this.painter.toDataURL(e,t,i)},V.prototype.shapeToImage=function(e,t,i){var n=a();return this.painter.shapeToImage(n,e,t,i)},V.prototype.on=function(e,t,i){return this.handler.on(e,t,i),this},V.prototype.un=function(e,t){return this.handler.un(e,t),this},V.prototype.trigger=function(e,t){return this.handler.trigger(e,t),this},V.prototype.clear=function(){return this.storage.delRoot(),this.painter.clear(),this},V.prototype.dispose=function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,m.delInstance(this.id)},m}),i("zrender/config",[],function(){var e={EVENT:{RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",MOUSEWHEEL:"mousewheel",MOUSEMOVE:"mousemove",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",GLOBALOUT:"globalout",DRAGSTART:"dragstart",DRAGEND:"dragend",DRAGENTER:"dragenter",DRAGOVER:"dragover",DRAGLEAVE:"dragleave",DROP:"drop",touchClickDelay:300},elementClassName:"zr-element",catchBrushException:!1,debugMode:0,devicePixelRatio:Math.max(window.devicePixelRatio||1,1)};return e}),i("echarts/chart/island",["require","./base","zrender/shape/Circle","../config","../util/ecData","zrender/tool/util","zrender/tool/event","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,n,a,r){i.call(this,e,t,n,a,r),this._nameConnector,this._valueConnector,this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth();var l=this;l.shapeHandler.onmousewheel=function(e){var t=e.target,i=e.event,n=s.getDelta(i);n=n>0?-1:1,t.style.r-=n,t.style.r=t.style.r<5?5:t.style.r;var a=o.get(t,"value"),r=a*l.option.island.calculateStep;a=r>1?Math.round(a-r*n):+(a-r*n).toFixed(2);var h=o.get(t,"name");t.style.text=h+":"+a,o.set(t,"value",a),o.set(t,"name",h),l.zr.modShape(t.id),l.zr.refreshNextFrame(),s.stop(i)}}var i=e("./base"),n=e("zrender/shape/Circle"),a=e("../config");a.island={zlevel:0,z:5,r:15,calculateStep:.1};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/event");return t.prototype={type:a.CHART_TYPE_ISLAND,_combine:function(t,i){var n=e("zrender/tool/color"),a=e("../util/accMath"),r=a.accAdd(o.get(t,"value"),o.get(i,"value")),s=o.get(t,"name")+this._nameConnector+o.get(i,"name");t.style.text=s+this._valueConnector+r,o.set(t,"value",r),o.set(t,"name",s),t.style.r=this.option.island.r,t.style.color=n.mix(t.style.color,i.style.color)},refresh:function(e){e&&(e.island=this.reformOption(e.island),this.option=e,this._nameConnector=this.option.nameConnector,this._valueConnector=this.option.valueConnector)},getOption:function(){return this.option},resize:function(){var e=this.zr.getWidth(),t=this.zr.getHeight(),i=e/(this._zrWidth||e),n=t/(this._zrHeight||t);if(1!==i||1!==n){this._zrWidth=e,this._zrHeight=t;for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.modShape(this.shapeList[a].id,{style:{x:Math.round(this.shapeList[a].style.x*i),y:Math.round(this.shapeList[a].style.y*n)}})}},add:function(e){var t=o.get(e,"name"),i=o.get(e,"value"),a=null!=o.get(e,"series")?o.get(e,"series").name:"",r=this.getFont(this.option.island.textStyle),s=this.option.island,l={zlevel:s.zlevel,z:s.z,style:{x:e.style.x,y:e.style.y,r:this.option.island.r,color:e.style.color||e.style.strokeColor,text:t+this._valueConnector+i,textFont:r},draggable:!0,hoverable:!0,onmousewheel:this.shapeHandler.onmousewheel,_type:"island"};"#fff"===l.style.color&&(l.style.color=e.style.strokeColor),this.setCalculable(l),l.dragEnableTime=0,o.pack(l,{name:a},-1,i,-1,t),l=new n(l),this.shapeList.push(l),this.zr.addShape(l)},del:function(e){this.zr.delShape(e.id);for(var t=[],i=0,n=this.shapeList.length;n>i;i++)this.shapeList[i].id!=e.id&&t.push(this.shapeList[i]);this.shapeList=t},ondrop:function(e,t){if(this.isDrop&&e.target){var i=e.target,n=e.dragged;this._combine(i,n),this.zr.modShape(i.id),t.dragIn=!0,this.isDrop=!1}},ondragend:function(e,t){var i=e.target;this.isDragend?t.dragIn&&(this.del(i),t.needRefresh=!0):t.dragIn||(i.style.x=s.getX(e.event),i.style.y=s.getY(e.event),this.add(i),t.needRefresh=!0),this.isDragend=!1}},r.inherits(t,i),e("../chart").define("island",t),t}),i("echarts/component/toolbox",["require","./base","zrender/shape/Line","zrender/shape/Image","zrender/shape/Rectangle","../util/shape/Icon","../config","zrender/tool/util","zrender/config","zrender/tool/event","./dataView","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._magicType={},this._magicMap={},this._isSilence=!1,this._iconList,this._iconShapeMap={},this._featureTitle={},this._featureIcon={},this._featureColor={},this._featureOption={},this._enableColor="red",this._disableColor="#ccc",this._markShapeList=[];var r=this;r._onMark=function(e){r.__onMark(e)},r._onMarkUndo=function(e){r.__onMarkUndo(e)},r._onMarkClear=function(e){r.__onMarkClear(e)},r._onDataZoom=function(e){r.__onDataZoom(e)},r._onDataZoomReset=function(e){r.__onDataZoomReset(e)},r._onDataView=function(e){r.__onDataView(e)},r._onRestore=function(e){r.__onRestore(e)},r._onSaveAsImage=function(e){r.__onSaveAsImage(e)},r._onMagicType=function(e){r.__onMagicType(e)},r._onCustomHandler=function(e){r.__onCustomHandler(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onclick=function(e){return r.__onclick(e)}}var i=e("./base"),n=e("zrender/shape/Line"),a=e("zrender/shape/Image"),o=e("zrender/shape/Rectangle"),r=e("../util/shape/Icon"),s=e("../config");s.toolbox={zlevel:0,z:6,show:!1,orient:"horizontal",x:"right",y:"top",color:["#1e90ff","#22bb22","#4b0082","#d2691e"],disableColor:"#ddd",effectiveColor:"red",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemSize:16,showTitle:!0,feature:{mark:{show:!1,title:{mark:"辅助线开关",markUndo:"删除辅助线",markClear:"清空辅助线"},lineStyle:{width:1,color:"#1e90ff",type:"dashed"}},dataZoom:{show:!1,title:{dataZoom:"区域缩放",dataZoomReset:"区域缩放后退"}},dataView:{show:!1,title:"数据视图",readOnly:!1,lang:["数据视图","关闭","刷新"]},magicType:{show:!1,title:{line:"折线图切换",bar:"柱形图切换",stack:"堆积",tiled:"平铺",force:"力导向布局图切换",chord:"和弦图切换",pie:"饼图切换",funnel:"漏斗图切换"},type:[]},restore:{show:!1,title:"还原"},saveAsImage:{show:!1,title:"保存为图片",type:"png",lang:["点击保存"]}}};var l=e("zrender/tool/util"),h=e("zrender/config"),m=e("zrender/tool/event"),V="stack",U="tiled";return t.prototype={type:s.COMPONENT_TYPE_TOOLBOX,_buildShape:function(){this._iconList=[];var e=this.option.toolbox;this._enableColor=e.effectiveColor,this._disableColor=e.disableColor;var t=e.feature,i=[];for(var n in t)if(t[n].show)switch(n){case"mark":i.push({key:n,name:"mark"}),i.push({key:n,name:"markUndo"}),i.push({key:n,name:"markClear"});break;case"magicType":for(var a=0,o=t[n].type.length;o>a;a++)t[n].title[t[n].type[a]+"Chart"]=t[n].title[t[n].type[a]],t[n].option&&(t[n].option[t[n].type[a]+"Chart"]=t[n].option[t[n].type[a]]),i.push({key:n,name:t[n].type[a]+"Chart"});break;case"dataZoom":i.push({key:n,name:"dataZoom"}),i.push({key:n,name:"dataZoomReset"});break;case"saveAsImage":this.canvasSupported&&i.push({key:n,name:"saveAsImage"});break;default:i.push({key:n,name:n})}if(i.length>0){for(var r,n,a=0,o=i.length;o>a;a++)r=i[a].name,n=i[a].key,this._iconList.push(r),this._featureTitle[r]=t[n].title[r]||t[n].title,t[n].icon&&(this._featureIcon[r]=t[n].icon[r]||t[n].icon),t[n].color&&(this._featureColor[r]=t[n].color[r]||t[n].color),t[n].option&&(this._featureOption[r]=t[n].option[r]||t[n].option);this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.addShape(this.shapeList[a]);this._iconShapeMap.mark&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear)),this._iconShapeMap.dataZoomReset&&0===this._zoomQueue.length&&this._iconDisable(this._iconShapeMap.dataZoomReset)}},_buildItem:function(){var t,i,n,o,s=this.option.toolbox,l=this._iconList.length,h=this._itemGroupLocation.x,m=this._itemGroupLocation.y,V=s.itemSize,U=s.itemGap,d=s.color instanceof Array?s.color:[s.color],p=this.getFont(s.textStyle);"horizontal"===s.orient?(i=this._itemGroupLocation.y/this.zr.getHeight()<.5?"bottom":"top",n=this._itemGroupLocation.x/this.zr.getWidth()<.5?"left":"right",o=this._itemGroupLocation.y/this.zr.getHeight()<.5?"top":"bottom"):i=this._itemGroupLocation.x/this.zr.getWidth()<.5?"right":"left",this._iconShapeMap={};for(var c=this,u=0;l>u;u++){switch(t={type:"icon",zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:h,y:m,width:V,height:V,iconType:this._iconList[u],lineWidth:1,strokeColor:this._featureColor[this._iconList[u]]||d[u%d.length],brushType:"stroke"},highlightStyle:{lineWidth:1,text:s.showTitle?this._featureTitle[this._iconList[u]]:void 0,textFont:p,textPosition:i,strokeColor:this._featureColor[this._iconList[u]]||d[u%d.length]},hoverable:!0,clickable:!0},this._featureIcon[this._iconList[u]]&&(t.style.image=this._featureIcon[this._iconList[u]].replace(new RegExp("^image:\\/\\/"),""),t.style.opacity=.8,t.highlightStyle.opacity=1,t.type="image"),"horizontal"===s.orient&&(0===u&&"left"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h,t.highlightStyle.textY="top"===o?m+V+10:m-10),u===l-1&&"right"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h+V,t.highlightStyle.textY="top"===o?m+V+10:m-10)),this._iconList[u]){case"mark":t.onclick=c._onMark;break;case"markUndo":t.onclick=c._onMarkUndo;break;case"markClear":t.onclick=c._onMarkClear;break;case"dataZoom":t.onclick=c._onDataZoom;break;case"dataZoomReset":t.onclick=c._onDataZoomReset;break;case"dataView":if(!this._dataView){var y=e("./dataView");this._dataView=new y(this.ecTheme,this.messageCenter,this.zr,this.option,this.myChart)}t.onclick=c._onDataView;break;case"restore":t.onclick=c._onRestore;break;case"saveAsImage":t.onclick=c._onSaveAsImage;break;default:this._iconList[u].match("Chart")?(t._name=this._iconList[u].replace("Chart",""),t.onclick=c._onMagicType):t.onclick=c._onCustomHandler}"icon"===t.type?t=new r(t):"image"===t.type&&(t=new a(t)),this.shapeList.push(t),this._iconShapeMap[this._iconList[u]]=t,"horizontal"===s.orient?h+=V+U:m+=V+U}},_buildBackground:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding);this.shapeList.push(new o({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-t[3],y:this._itemGroupLocation.y-t[0],width:this._itemGroupLocation.width+t[3]+t[1],height:this._itemGroupLocation.height+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_getItemGroupLocation:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding),i=this._iconList.length,n=e.itemGap,a=e.itemSize,o=0,r=0;"horizontal"===e.orient?(o=(a+n)*i-n,r=a):(r=(a+n)*i-n,o=a);var s,l=this.zr.getWidth();switch(e.x){case"center":s=Math.floor((l-o)/2);break;case"left":s=t[3]+e.borderWidth;break;case"right":s=l-o-t[1]-e.borderWidth;break;default:s=e.x-0,s=isNaN(s)?0:s}var h,m=this.zr.getHeight();switch(e.y){case"top":h=t[0]+e.borderWidth;break;case"bottom":h=m-r-t[2]-e.borderWidth;break;case"center":h=Math.floor((m-r)/2);break;default:h=e.y-0,h=isNaN(h)?0:h}return{x:s,y:h,width:o,height:r}},__onmousemove:function(e){this._marking&&(this._markShape.style.xEnd=m.getX(e.event),this._markShape.style.yEnd=m.getY(e.event),this.zr.addHoverShape(this._markShape)),this._zooming&&(this._zoomShape.style.width=m.getX(e.event)-this._zoomShape.style.x,this._zoomShape.style.height=m.getY(e.event)-this._zoomShape.style.y,this.zr.addHoverShape(this._zoomShape),this.dom.style.cursor="crosshair",m.stop(e.event)),this._zoomStart&&"pointer"!=this.dom.style.cursor&&"move"!=this.dom.style.cursor&&(this.dom.style.cursor="crosshair")},__onmousedown:function(e){if(!e.target){this._zooming=!0;var t=m.getX(e.event),i=m.getY(e.event),n=this.option.dataZoom||{};return this._zoomShape=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:t,y:i,width:1,height:1,brushType:"both"},highlightStyle:{lineWidth:2,color:n.fillerColor||s.dataZoom.fillerColor,strokeColor:n.handleColor||s.dataZoom.handleColor,brushType:"both"}}),this.zr.addHoverShape(this._zoomShape),!0}},__onmouseup:function(){if(!this._zoomShape||Math.abs(this._zoomShape.style.width)<10||Math.abs(this._zoomShape.style.height)<10)return this._zooming=!1,!0;if(this._zooming&&this.component.dataZoom){this._zooming=!1;var e=this.component.dataZoom.rectZoom(this._zoomShape.style);e&&(this._zoomQueue.push({start:e.start,end:e.end,start2:e.start2,end2:e.end2}),this._iconEnable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame())}return!0},__onclick:function(e){if(!e.target)if(this._marking)this._marking=!1,this._markShapeList.push(this._markShape),this._iconEnable(this._iconShapeMap.markUndo),this._iconEnable(this._iconShapeMap.markClear),this.zr.addShape(this._markShape),this.zr.refreshNextFrame();else if(this._markStart){this._marking=!0;var t=m.getX(e.event),i=m.getY(e.event);this._markShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:t,yStart:i,xEnd:t,yEnd:i,lineWidth:this.query(this.option,"toolbox.feature.mark.lineStyle.width"),strokeColor:this.query(this.option,"toolbox.feature.mark.lineStyle.color"),lineType:this.query(this.option,"toolbox.feature.mark.lineStyle.type")}}),this.zr.addHoverShape(this._markShape)}},__onMark:function(e){var t=e.target;if(this._marking||this._markStart)this._resetMark(),this.zr.refreshNextFrame();else{this._resetZoom(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._markStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.CLICK,i._onclick)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10)}return!0},__onMarkUndo:function(){if(this._marking)this._marking=!1;else{var e=this._markShapeList.length;if(e>=1){var t=this._markShapeList[e-1];this.zr.delShape(t.id),this.zr.refreshNextFrame(),this._markShapeList.pop(),1===e&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear))}}return!0},__onMarkClear:function(){this._marking&&(this._marking=!1);var e=this._markShapeList.length;if(e>0){for(;e--;)this.zr.delShape(this._markShapeList.pop().id);this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear),this.zr.refreshNextFrame()}return!0},__onDataZoom:function(e){var t=e.target;if(this._zooming||this._zoomStart)this._resetZoom(),this.zr.refreshNextFrame(),this.dom.style.cursor="default";else{this._resetMark(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._zoomStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.MOUSEDOWN,i._onmousedown)&&i.zr.on(h.EVENT.MOUSEUP,i._onmouseup)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10),this.dom.style.cursor="crosshair"}return!0},__onDataZoomReset:function(){return this._zooming&&(this._zooming=!1),this._zoomQueue.pop(),this._zoomQueue.length>0?this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length-1]):(this.component.dataZoom.rectZoom(),this._iconDisable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame()),!0},_resetMark:function(){this._marking=!1,this._markStart&&(this._markStart=!1,this._iconShapeMap.mark&&this.zr.modShape(this._iconShapeMap.mark.id,{style:{strokeColor:this._iconShapeMap.mark.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.CLICK,this._onclick),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_resetZoom:function(){this._zooming=!1,this._zoomStart&&(this._zoomStart=!1,this._iconShapeMap.dataZoom&&this.zr.modShape(this._iconShapeMap.dataZoom.id,{style:{strokeColor:this._iconShapeMap.dataZoom.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.MOUSEDOWN,this._onmousedown),this.zr.un(h.EVENT.MOUSEUP,this._onmouseup),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_iconDisable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{strokeColor:this._disableColor}}):this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{opacity:.3}})},_iconEnable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{strokeColor:e.highlightStyle.strokeColor}}):this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{opacity:.8}})},__onDataView:function(){return this._dataView.show(this.option),!0},__onRestore:function(){return this._resetMark(),this._resetZoom(),this.messageCenter.dispatch(s.EVENT.RESTORE,null,null,this.myChart),!0},__onSaveAsImage:function(){var e=this.option.toolbox.feature.saveAsImage,t=e.type||"png";"png"!=t&&"jpeg"!=t&&(t="png");var i;i=this.myChart.isConnected()?this.myChart.getConnectedDataURL(t):this.zr.toDataURL("image/"+t,this.option.backgroundColor&&"rgba(0,0,0,0)"===this.option.backgroundColor.replace(" ","")?"#fff":this.option.backgroundColor);var n=document.createElement("div");n.id="__echarts_download_wrap__",n.style.cssText="position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:"+document.documentElement.clientHeight+"px;";var a=document.createElement("a");a.href=i,a.setAttribute("download",(e.name?e.name:this.option.title&&(this.option.title.text||this.option.title.subtext)?this.option.title.text||this.option.title.subtext:"ECharts")+"."+t),a.innerHTML='图片另存为":e.lang?e.lang[0]:"点击保存")+'"/>',n.appendChild(a),document.body.appendChild(n),a=null,n=null,setTimeout(function(){var e=document.getElementById("__echarts_download_wrap__");e&&(e.onclick=function(){var e=document.getElementById("__echarts_download_wrap__");e.onclick=null,e.innerHTML="",document.body.removeChild(e),e=null},e=null)},500)},__onMagicType:function(e){this._resetMark();var t=e.target._name;return this._magicType[t]||(this._magicType[t]=!0,t===s.CHART_TYPE_LINE?this._magicType[s.CHART_TYPE_BAR]=!1:t===s.CHART_TYPE_BAR&&(this._magicType[s.CHART_TYPE_LINE]=!1),t===s.CHART_TYPE_PIE?this._magicType[s.CHART_TYPE_FUNNEL]=!1:t===s.CHART_TYPE_FUNNEL&&(this._magicType[s.CHART_TYPE_PIE]=!1),t===s.CHART_TYPE_FORCE?this._magicType[s.CHART_TYPE_CHORD]=!1:t===s.CHART_TYPE_CHORD&&(this._magicType[s.CHART_TYPE_FORCE]=!1),t===V?this._magicType[U]=!1:t===U&&(this._magicType[V]=!1),this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,e.event,{magicType:this._magicType},this.myChart)),!0},setMagicType:function(e){this._resetMark(),this._magicType=e,!this._isSilence&&this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,null,{magicType:this._magicType},this.myChart)},__onCustomHandler:function(e){var t=e.target.style.iconType,i=this.option.toolbox.feature[t].onclick;"function"==typeof i&&i.call(this,this.option)},reset:function(e,t){if(t&&this.clear(),this.query(e,"toolbox.show")&&this.query(e,"toolbox.feature.magicType.show")){var i=e.toolbox.feature.magicType.type,n=i.length;for(this._magicMap={};n--;)this._magicMap[i[n]]=!0;n=e.series.length;for(var a,o;n--;)a=e.series[n].type,this._magicMap[a]&&(o=e.xAxis instanceof Array?e.xAxis[e.series[n].xAxisIndex||0]:e.xAxis,o&&"category"===(o.type||"category")&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),o=e.yAxis instanceof Array?e.yAxis[e.series[n].yAxisIndex||0]:e.yAxis,o&&"category"===o.type&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),e.series[n].__type=a,e.series[n].__itemStyle=l.clone(e.series[n].itemStyle||{})),(this._magicMap[V]||this._magicMap[U])&&(e.series[n].__stack=e.series[n].stack)}this._magicType=t?{}:this._magicType||{};for(var r in this._magicType)if(this._magicType[r]){this.option=e,this.getMagicOption();break}var s=e.dataZoom;if(s&&s.show){var h=null!=s.start&&s.start>=0&&s.start<=100?s.start:0,m=null!=s.end&&s.end>=0&&s.end<=100?s.end:100;h>m&&(h+=m,m=h-m,h-=m),this._zoomQueue=[{start:h,end:m,start2:0,end2:100}]}else this._zoomQueue=[]},getMagicOption:function(){var e,t;if(this._magicType[s.CHART_TYPE_LINE]||this._magicType[s.CHART_TYPE_BAR]){for(var i=this._magicType[s.CHART_TYPE_LINE]?!1:!0,n=0,a=this.option.series.length;a>n;n++)t=this.option.series[n].type,(t==s.CHART_TYPE_LINE||t==s.CHART_TYPE_BAR)&&(e=this.option.xAxis instanceof Array?this.option.xAxis[this.option.series[n].xAxisIndex||0]:this.option.xAxis,e&&"category"===(e.type||"category")&&(e.boundaryGap=i?!0:e.__boundaryGap),e=this.option.yAxis instanceof Array?this.option.yAxis[this.option.series[n].yAxisIndex||0]:this.option.yAxis,e&&"category"===e.type&&(e.boundaryGap=i?!0:e.__boundaryGap));this._defaultMagic(s.CHART_TYPE_LINE,s.CHART_TYPE_BAR)}if(this._defaultMagic(s.CHART_TYPE_CHORD,s.CHART_TYPE_FORCE),this._defaultMagic(s.CHART_TYPE_PIE,s.CHART_TYPE_FUNNEL),this._magicType[V]||this._magicType[U])for(var n=0,a=this.option.series.length;a>n;n++)this._magicType[V]?(this.option.series[n].stack="_ECHARTS_STACK_KENER_2014_",t=V):this._magicType[U]&&(this.option.series[n].stack=null,t=U),this._featureOption[t+"Chart"]&&l.merge(this.option.series[n],this._featureOption[t+"Chart"]||{},!0);return this.option},_defaultMagic:function(e,t){if(this._magicType[e]||this._magicType[t])for(var i=0,n=this.option.series.length;n>i;i++){var a=this.option.series[i].type;(a==e||a==t)&&(this.option.series[i].type=this._magicType[e]?e:t,this.option.series[i].itemStyle=l.clone(this.option.series[i].__itemStyle),a=this.option.series[i].type,this._featureOption[a+"Chart"]&&l.merge(this.option.series[i],this._featureOption[a+"Chart"]||{},!0))}},silence:function(e){this._isSilence=e},resize:function(){this._resetMark(),this.clear(),this.option&&this.option.toolbox&&this.option.toolbox.show&&this._buildShape(),this._dataView&&this._dataView.resize()},hideDataView:function(){this._dataView&&this._dataView.hide()},clear:function(e){this.zr&&(this.zr.delShape(this.shapeList),this.shapeList=[],e||(this.zr.delShape(this._markShapeList),this._markShapeList=[]))},onbeforDispose:function(){this._dataView&&(this._dataView.dispose(),this._dataView=null),this._markShapeList=null},refresh:function(e){e&&(this._resetMark(),this._resetZoom(),e.toolbox=this.reformOption(e.toolbox),this.option=e,this.clear(!0),e.toolbox.show&&this._buildShape(),this.hideDataView())}},l.inherits(t,i),e("../component").define("toolbox",t),t}),i("echarts/component",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),i("echarts/component/title",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../config");o.title={zlevel:0,z:6,show:!0,text:"",subtext:"",x:"left",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:5,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}};var r=e("zrender/tool/util"),s=e("zrender/tool/area"),l=e("zrender/tool/color");return t.prototype={type:o.COMPONENT_TYPE_TITLE,_buildShape:function(){if(this.titleOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e=this.titleOption.text,t=this.titleOption.link,i=this.titleOption.target,a=this.titleOption.subtext,o=this.titleOption.sublink,r=this.titleOption.subtarget,s=this.getFont(this.titleOption.textStyle),h=this.getFont(this.titleOption.subtextStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this._itemGroupLocation.width,d=this._itemGroupLocation.height,p={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:V,color:this.titleOption.textStyle.color,text:e,textFont:s,textBaseline:"top"},highlightStyle:{color:l.lift(this.titleOption.textStyle.color,1),brushType:"fill"},hoverable:!1};t&&(p.hoverable=!0,p.clickable=!0,p.onclick=function(){i&&"self"==i?window.location=t:window.open(t)});var c={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:V+d,color:this.titleOption.subtextStyle.color,text:a,textFont:h,textBaseline:"bottom"},highlightStyle:{color:l.lift(this.titleOption.subtextStyle.color,1),brushType:"fill"},hoverable:!1};switch(o&&(c.hoverable=!0,c.clickable=!0,c.onclick=function(){r&&"self"==r?window.location=o:window.open(o)}),this.titleOption.x){case"center":p.style.x=c.style.x=m+U/2,p.style.textAlign=c.style.textAlign="center";break;case"left":p.style.x=c.style.x=m,p.style.textAlign=c.style.textAlign="left";break;case"right":p.style.x=c.style.x=m+U,p.style.textAlign=c.style.textAlign="right";break;default:m=this.titleOption.x-0,m=isNaN(m)?0:m,p.style.x=c.style.x=m}this.titleOption.textAlign&&(p.style.textAlign=c.style.textAlign=this.titleOption.textAlign),this.shapeList.push(new n(p)),""!==a&&this.shapeList.push(new n(c))},_buildBackground:function(){var e=this.reformCssArray(this.titleOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.titleOption.borderWidth?"fill":"both",color:this.titleOption.backgroundColor,strokeColor:this.titleOption.borderColor,lineWidth:this.titleOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.titleOption.padding),i=this.titleOption.text,n=this.titleOption.subtext,a=this.getFont(this.titleOption.textStyle),o=this.getFont(this.titleOption.subtextStyle),r=Math.max(s.getTextWidth(i,a),s.getTextWidth(n,o)),l=s.getTextHeight(i,a)+(""===n?0:this.titleOption.itemGap+s.getTextHeight(n,o)),h=this.zr.getWidth();switch(this.titleOption.x){case"center":e=Math.floor((h-r)/2);break;case"left":e=t[3]+this.titleOption.borderWidth;break;case"right":e=h-r-t[1]-this.titleOption.borderWidth;break;default:e=this.titleOption.x-0,e=isNaN(e)?0:e}var m,V=this.zr.getHeight();switch(this.titleOption.y){case"top":m=t[0]+this.titleOption.borderWidth;break;case"bottom":m=V-l-t[2]-this.titleOption.borderWidth;break;case"center":m=Math.floor((V-l)/2);break;default:m=this.titleOption.y-0,m=isNaN(m)?0:m}return{x:e,y:m,width:r,height:l}},refresh:function(e){e&&(this.option=e,this.option.title=this.reformOption(this.option.title),this.titleOption=this.option.title,this.titleOption.textStyle=this.getTextStyle(this.titleOption.textStyle),this.titleOption.subtextStyle=this.getTextStyle(this.titleOption.subtextStyle)),this.clear(),this._buildShape()}},r.inherits(t,i),e("../component").define("title",t),t}),i("echarts/component/tooltip",["require","./base","../util/shape/Cross","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/area","zrender/tool/color","zrender/tool/util","zrender/shape/Base","../component"],function(e){function t(e,t,o,r,s){i.call(this,e,t,o,r,s),this.dom=s.dom;var l=this;l._onmousemove=function(e){return l.__onmousemove(e)},l._onglobalout=function(e){return l.__onglobalout(e)},this.zr.on(h.EVENT.MOUSEMOVE,l._onmousemove),this.zr.on(h.EVENT.GLOBALOUT,l._onglobalout),l._hide=function(e){return l.__hide(e)},l._tryShow=function(e){return l.__tryShow(e)},l._refixed=function(e){return l.__refixed(e)},l._setContent=function(e,t){return l.__setContent(e,t)},this._tDom=this._tDom||document.createElement("div"),this._tDom.onselectstart=function(){return!1},this._tDom.onmouseover=function(){l._mousein=!0},this._tDom.onmouseout=function(){l._mousein=!1},this._tDom.className="echarts-tooltip",this._tDom.style.position="absolute",this.hasAppend=!1,this._axisLineShape&&this.zr.delShape(this._axisLineShape.id),this._axisLineShape=new a({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisLineShape),this.zr.addShape(this._axisLineShape),this._axisShadowShape&&this.zr.delShape(this._axisShadowShape.id),this._axisShadowShape=new a({zlevel:this.getZlevelBase(),z:1,invisible:!0,hoverable:!1}),this.shapeList.push(this._axisShadowShape),this.zr.addShape(this._axisShadowShape),this._axisCrossShape&&this.zr.delShape(this._axisCrossShape.id),this._axisCrossShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisCrossShape),this.zr.addShape(this._axisCrossShape),this.showing=!1,this.refresh(r)}var i=e("./base"),n=e("../util/shape/Cross"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=new o({}),s=e("../config");s.tooltip={zlevel:1,z:8,show:!0,showContent:!0,trigger:"item",islandFormatter:"{a}
    {b} : {c}",showDelay:20,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(0,0,0,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,axisPointer:{type:"line",lineStyle:{color:"#48b",width:2,type:"solid"},crossStyle:{color:"#1e90ff",width:1,type:"dashed"},shadowStyle:{color:"rgba(150,150,150,0.3)",width:"auto",type:"default"}},textStyle:{color:"#fff"}};var l=e("../util/ecData"),h=e("zrender/config"),m=e("zrender/tool/event"),V=e("zrender/tool/area"),U=e("zrender/tool/color"),d=e("zrender/tool/util"),p=e("zrender/shape/Base");return t.prototype={type:s.COMPONENT_TYPE_TOOLTIP,_gCssText:"position:absolute;display:block;border-style:solid;white-space:nowrap;",_style:function(e){if(!e)return"";var t=[];if(e.transitionDuration){var i="left "+e.transitionDuration+"s,top "+e.transitionDuration+"s";t.push("transition:"+i),t.push("-moz-transition:"+i),t.push("-webkit-transition:"+i),t.push("-o-transition:"+i)}e.backgroundColor&&(t.push("background-Color:"+U.toHex(e.backgroundColor)),t.push("filter:alpha(opacity=70)"),t.push("background-Color:"+e.backgroundColor)),null!=e.borderWidth&&t.push("border-width:"+e.borderWidth+"px"),null!=e.borderColor&&t.push("border-color:"+e.borderColor),null!=e.borderRadius&&(t.push("border-radius:"+e.borderRadius+"px"),t.push("-moz-border-radius:"+e.borderRadius+"px"),t.push("-webkit-border-radius:"+e.borderRadius+"px"),t.push("-o-border-radius:"+e.borderRadius+"px"));var n=e.textStyle;n&&(n.color&&t.push("color:"+n.color),n.decoration&&t.push("text-decoration:"+n.decoration),n.align&&t.push("text-align:"+n.align),n.fontFamily&&t.push("font-family:"+n.fontFamily),n.fontSize&&t.push("font-size:"+n.fontSize+"px"),n.fontSize&&t.push("line-height:"+Math.round(3*n.fontSize/2)+"px"),n.fontStyle&&t.push("font-style:"+n.fontStyle),n.fontWeight&&t.push("font-weight:"+n.fontWeight));var a=e.padding;return null!=a&&(a=this.reformCssArray(a),t.push("padding:"+a[0]+"px "+a[1]+"px "+a[2]+"px "+a[3]+"px")),t=t.join(";")+";"},__hide:function(){this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,this._tDom&&(this._tDom.style.display="none");var e=!1;this._axisLineShape.invisible||(this._axisLineShape.invisible=!0, this.zr.modShape(this._axisLineShape.id),e=!0),this._axisShadowShape.invisible||(this._axisShadowShape.invisible=!0,this.zr.modShape(this._axisShadowShape.id),e=!0),this._axisCrossShape.invisible||(this._axisCrossShape.invisible=!0,this.zr.modShape(this._axisCrossShape.id),e=!0),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2),e&&this.zr.refreshNextFrame(),this.showing=!1},_show:function(e,t,i,n){var a=this._tDom.offsetHeight,o=this._tDom.offsetWidth;e&&("function"==typeof e&&(e=e([t,i])),e instanceof Array&&(t=e[0],i=e[1])),t+o>this._zrWidth&&(t-=o+40),i+a>this._zrHeight&&(i-=a-20),20>i&&(i=0),this._tDom.style.cssText=this._gCssText+this._defaultCssText+(n?n:"")+"left:"+t+"px;top:"+i+"px;",(10>a||10>o)&&setTimeout(this._refixed,20),this.showing=!0},__refixed:function(){if(this._tDom){var e="",t=this._tDom.offsetHeight,i=this._tDom.offsetWidth;this._tDom.offsetLeft+i>this._zrWidth&&(e+="left:"+(this._zrWidth-i-20)+"px;"),this._tDom.offsetTop+t>this._zrHeight&&(e+="top:"+(this._zrHeight-t-10)+"px;"),""!==e&&(this._tDom.style.cssText+=e)}},__tryShow:function(){var e,t;if(this._curTarget){if("island"===this._curTarget._type&&this.option.tooltip.show)return void this._showItemTrigger();var i=l.get(this._curTarget,"series"),n=l.get(this._curTarget,"data");e=this.deepQuery([n,i,this.option],"tooltip.show"),null!=i&&null!=n&&e?(t=this.deepQuery([n,i,this.option],"tooltip.trigger"),"axis"===t?this._showAxisTrigger(i.xAxisIndex,i.yAxisIndex,l.get(this._curTarget,"dataIndex")):this._showItemTrigger()):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}else this._findPolarTrigger()||this._findAxisTrigger()},_findAxisTrigger:function(){if(!this.component.xAxis||!this.component.yAxis)return void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));for(var e,t,i=this.option.series,n=0,a=i.length;a>n;n++)if("axis"===this.deepQuery([i[n],this.option],"tooltip.trigger"))return e=i[n].xAxisIndex||0,t=i[n].yAxisIndex||0,this.component.xAxis.getAxis(e)&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("x",this.component.xAxis.getAxis(e))):this.component.yAxis.getAxis(t)&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("y",this.component.yAxis.getAxis(t))):void this._showAxisTrigger(e,t,-1);"cross"===this.option.tooltip.axisPointer.type&&this._showAxisTrigger(-1,-1,-1)},_findPolarTrigger:function(){if(!this.component.polar)return!1;var e,t=m.getX(this._event),i=m.getY(this._event),n=this.component.polar.getNearestIndex([t,i]);return n?(e=n.valueIndex,n=n.polarIndex):n=-1,-1!=n?this._showPolarTrigger(n,e):!1},_getNearestDataIndex:function(e,t){var i=-1,n=m.getX(this._event),a=m.getY(this._event);if("x"===e){for(var o,r,s=this.component.grid.getXend(),l=t.getCoordByIndex(i);s>l&&(r=l,n>=l);)o=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:r-n>=n-o?i-=1:null==t.getNameByIndex(i)&&(i-=1),i}for(var h,V,U=this.component.grid.getY(),l=t.getCoordByIndex(i);l>U&&(h=l,l>=a);)V=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:a-h>=V-a?i-=1:null==t.getNameByIndex(i)&&(i-=1),i},_showAxisTrigger:function(e,t,i){if(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_IN_GRID,this._event,null,this.myChart),null==this.component.xAxis||null==this.component.yAxis||null==e||null==t)return clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));var n,a,o,r,l=this.option.series,h=[],V=[],U="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return;a=this.option.tooltip.formatter,o=this.option.tooltip.position}var d,p,c=-1!=e&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"xAxis":-1!=t&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"yAxis":!1;if(c){var u="xAxis"==c?e:t;n=this.component[c].getAxis(u);for(var y=0,g=l.length;g>y;y++)this._isSelected(l[y].name)&&l[y][c+"Index"]===u&&"axis"===this.deepQuery([l[y],this.option],"tooltip.trigger")&&(r=this.query(l[y],"tooltip.showContent")||r,a=this.query(l[y],"tooltip.formatter")||a,o=this.query(l[y],"tooltip.position")||o,U+=this._style(this.query(l[y],"tooltip")),null!=l[y].stack&&"xAxis"==c?(h.unshift(l[y]),V.unshift(y)):(h.push(l[y]),V.push(y)));this.messageCenter.dispatch(s.EVENT.TOOLTIP_HOVER,this._event,{seriesIndex:V,dataIndex:i},this.myChart);var b;"xAxis"==c?(d=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),p=m.getY(this._event),b=[d,this.component.grid.getY(),d,this.component.grid.getYend()]):(d=m.getX(this._event),p=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),b=[this.component.grid.getX(),p,this.component.grid.getXend(),p]),this._styleAxisPointer(h,b[0],b[1],b[2],b[3],n.getGap(),d,p)}else d=m.getX(this._event),p=m.getY(this._event),this._styleAxisPointer(l,this.component.grid.getX(),p,this.component.grid.getXend(),p,0,d,p),i>=0?this._showItemTrigger(!0):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._tDom.style.display="none");if(h.length>0){if(this._lastItemTriggerId=-1,this._lastDataIndex!=i||this._lastSeriesIndex!=V[0]){this._lastDataIndex=i,this._lastSeriesIndex=V[0];var f,k;if("function"==typeof a){for(var x=[],y=0,g=h.length;g>y;y++)f=h[y].data[i],k=this.getDataFromOption(f,"-"),x.push({seriesIndex:V[y],seriesName:h[y].name||"",series:h[y],dataIndex:i,data:f,name:n.getNameByIndex(i),value:k,0:h[y].name||"",1:n.getNameByIndex(i),2:k,3:f});this._curTicket="axis:"+i,this._tDom.innerHTML=a.call(this.myChart,x,this._curTicket,this._setContent)}else if("string"==typeof a){this._curTicket=0/0,a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}");for(var y=0,g=h.length;g>y;y++)a=a.replace("{a"+y+"}",this._encodeHTML(h[y].name||"")),a=a.replace("{b"+y+"}",this._encodeHTML(n.getNameByIndex(i))),f=h[y].data[i],f=this.getDataFromOption(f,"-"),a=a.replace("{c"+y+"}",f instanceof Array?f:this.numAddCommas(f));this._tDom.innerHTML=a}else{this._curTicket=0/0,a=this._encodeHTML(n.getNameByIndex(i));for(var y=0,g=h.length;g>y;y++)a+="
    "+this._encodeHTML(h[y].name||"")+" : ",f=h[y].data[i],f=this.getDataFromOption(f,"-"),a+=f instanceof Array?f:this.numAddCommas(f);this._tDom.innerHTML=a}}if(r===!1||!this.option.tooltip.showContent)return;this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(o,d+10,p+10,U)}},_showPolarTrigger:function(e,t){if(null==this.component.polar||null==e||null==t||0>t)return!1;var i,n,a,o=this.option.series,r=[],s=[],l="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return!1;i=this.option.tooltip.formatter,n=this.option.tooltip.position}for(var h=this.option.polar[e].indicator[t].text,V=0,U=o.length;U>V;V++)this._isSelected(o[V].name)&&o[V].polarIndex===e&&"axis"===this.deepQuery([o[V],this.option],"tooltip.trigger")&&(a=this.query(o[V],"tooltip.showContent")||a,i=this.query(o[V],"tooltip.formatter")||i,n=this.query(o[V],"tooltip.position")||n,l+=this._style(this.query(o[V],"tooltip")),r.push(o[V]),s.push(V));if(r.length>0){for(var d,p,c,u=[],V=0,U=r.length;U>V;V++){d=r[V].data;for(var y=0,g=d.length;g>y;y++)p=d[y],this._isSelected(p.name)&&(p=null!=p?p:{name:"",value:{dataIndex:"-"}},c=this.getDataFromOption(p.value[t]),u.push({seriesIndex:s[V],seriesName:r[V].name||"",series:r[V],dataIndex:t,data:p,name:p.name,indicator:h,value:c,0:r[V].name||"",1:p.name,2:c,3:h}))}if(u.length<=0)return;if(this._lastItemTriggerId=-1,this._lastDataIndex!=t||this._lastSeriesIndex!=s[0])if(this._lastDataIndex=t,this._lastSeriesIndex=s[0],"function"==typeof i)this._curTicket="axis:"+t,this._tDom.innerHTML=i.call(this.myChart,u,this._curTicket,this._setContent);else if("string"==typeof i){i=i.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}");for(var V=0,U=u.length;U>V;V++)i=i.replace("{a"+V+"}",this._encodeHTML(u[V].seriesName)),i=i.replace("{b"+V+"}",this._encodeHTML(u[V].name)),i=i.replace("{c"+V+"}",this.numAddCommas(u[V].value)),i=i.replace("{d"+V+"}",this._encodeHTML(u[V].indicator));this._tDom.innerHTML=i}else{i=this._encodeHTML(u[0].name)+"
    "+this._encodeHTML(u[0].indicator)+" : "+this.numAddCommas(u[0].value);for(var V=1,U=u.length;U>V;V++)i+="
    "+this._encodeHTML(u[V].name)+"
    ",i+=this._encodeHTML(u[V].indicator)+" : "+this.numAddCommas(u[V].value);this._tDom.innerHTML=i}if(a===!1||!this.option.tooltip.showContent)return;return this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(n,m.getX(this._event),m.getY(this._event),l),!0}},_showItemTrigger:function(e){if(this._curTarget){var t,i,n,a=l.get(this._curTarget,"series"),o=l.get(this._curTarget,"seriesIndex"),r=l.get(this._curTarget,"data"),h=l.get(this._curTarget,"dataIndex"),V=l.get(this._curTarget,"name"),U=l.get(this._curTarget,"value"),d=l.get(this._curTarget,"special"),p=l.get(this._curTarget,"special2"),c=[r,a,this.option],u="";if("island"!=this._curTarget._type){var y=e?"axis":"item";this.option.tooltip.trigger===y&&(t=this.option.tooltip.formatter,i=this.option.tooltip.position),this.query(a,"tooltip.trigger")===y&&(n=this.query(a,"tooltip.showContent")||n,t=this.query(a,"tooltip.formatter")||t,i=this.query(a,"tooltip.position")||i,u+=this._style(this.query(a,"tooltip"))),n=this.query(r,"tooltip.showContent")||n,t=this.query(r,"tooltip.formatter")||t,i=this.query(r,"tooltip.position")||i,u+=this._style(this.query(r,"tooltip"))}else this._lastItemTriggerId=0/0,n=this.deepQuery(c,"tooltip.showContent"),t=this.deepQuery(c,"tooltip.islandFormatter"),i=this.deepQuery(c,"tooltip.islandPosition");this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId!==this._curTarget.id&&(this._lastItemTriggerId=this._curTarget.id,"function"==typeof t?(this._curTicket=(a.name||"")+":"+h,this._tDom.innerHTML=t.call(this.myChart,{seriesIndex:o,seriesName:a.name||"",series:a,dataIndex:h,data:r,name:V,value:U,percent:d,indicator:d,value2:p,indicator2:p,0:a.name||"",1:V,2:U,3:d,4:p,5:r,6:o,7:h},this._curTicket,this._setContent)):"string"==typeof t?(this._curTicket=0/0,t=t.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),t=t.replace("{a0}",this._encodeHTML(a.name||"")).replace("{b0}",this._encodeHTML(V)).replace("{c0}",U instanceof Array?U:this.numAddCommas(U)),t=t.replace("{d}","{d0}").replace("{d0}",d||""),t=t.replace("{e}","{e0}").replace("{e0}",l.get(this._curTarget,"special2")||""),this._tDom.innerHTML=t):(this._curTicket=0/0,this._tDom.innerHTML=a.type===s.CHART_TYPE_RADAR&&d?this._itemFormatter.radar.call(this,a,V,U,d):a.type===s.CHART_TYPE_EVENTRIVER?this._itemFormatter.eventRiver.call(this,a,V,U,r):""+(null!=a.name?this._encodeHTML(a.name)+"
    ":"")+(""===V?"":this._encodeHTML(V)+" : ")+(U instanceof Array?U:this.numAddCommas(U))));var g=m.getX(this._event),b=m.getY(this._event);this.deepQuery(c,"tooltip.axisPointer.show")&&this.component.grid?this._styleAxisPointer([a],this.component.grid.getX(),b,this.component.grid.getXend(),b,0,g,b):this._hide(),n!==!1&&this.option.tooltip.showContent&&(this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(i,g+20,b-20,u))}},_itemFormatter:{radar:function(e,t,i,n){var a="";a+=this._encodeHTML(""===t?e.name||"":t),a+=""===a?"":"
    ";for(var o=0;o";return a},chord:function(e,t,i,n,a){if(null==a)return this._encodeHTML(t)+" ("+this.numAddCommas(i)+")";var o=this._encodeHTML(t),r=this._encodeHTML(n);return""+(null!=e.name?this._encodeHTML(e.name)+"
    ":"")+o+" -> "+r+" ("+this.numAddCommas(i)+")
    "+r+" -> "+o+" ("+this.numAddCommas(a)+")"},eventRiver:function(e,t,i,n){var a="";a+=this._encodeHTML(""===e.name?"":e.name+" : "),a+=this._encodeHTML(t),a+=""===a?"":"
    ",n=n.evolution;for(var o=0,r=n.length;r>o;o++)a+='
    ',n[o].detail&&(n[o].detail.img&&(a+=''),a+='
    '+n[o].time+"
    ",a+='',a+=n[o].detail.text+"
    ",a+="
    ");return a}},_styleAxisPointer:function(e,t,i,n,a,o,r,s){if(e.length>0){var l,h,m=this.option.tooltip.axisPointer,V=m.type,U={line:{},cross:{},shadow:{}};for(var d in U)U[d].color=m[d+"Style"].color,U[d].width=m[d+"Style"].width,U[d].type=m[d+"Style"].type;for(var p=0,c=e.length;c>p;p++)l=e[p],h=this.query(l,"tooltip.axisPointer.type"),V=h||V,h&&(U[h].color=this.query(l,"tooltip.axisPointer."+h+"Style.color")||U[h].color,U[h].width=this.query(l,"tooltip.axisPointer."+h+"Style.width")||U[h].width,U[h].type=this.query(l,"tooltip.axisPointer."+h+"Style.type")||U[h].type);if("line"===V){var u=U.line.width,y=t==n;this._axisLineShape.style={xStart:y?this.subPixelOptimize(t,u):t,yStart:y?i:this.subPixelOptimize(i,u),xEnd:y?this.subPixelOptimize(n,u):n,yEnd:y?a:this.subPixelOptimize(a,u),strokeColor:U.line.color,lineWidth:u,lineType:U.line.type},this._axisLineShape.invisible=!1,this.zr.modShape(this._axisLineShape.id)}else if("cross"===V){var g=U.cross.width;this._axisCrossShape.style={brushType:"stroke",rect:this.component.grid.getArea(),x:this.subPixelOptimize(r,g),y:this.subPixelOptimize(s,g),text:("( "+this.component.xAxis.getAxis(0).getValueFromCoord(r)+" , "+this.component.yAxis.getAxis(0).getValueFromCoord(s)+" )").replace(" , "," ").replace(" , "," "),textPosition:"specific",strokeColor:U.cross.color,lineWidth:g,lineType:U.cross.type},this.component.grid.getXend()-r>100?(this._axisCrossShape.style.textAlign="left",this._axisCrossShape.style.textX=r+10):(this._axisCrossShape.style.textAlign="right",this._axisCrossShape.style.textX=r-10),s-this.component.grid.getY()>50?(this._axisCrossShape.style.textBaseline="bottom",this._axisCrossShape.style.textY=s-10):(this._axisCrossShape.style.textBaseline="top",this._axisCrossShape.style.textY=s+10),this._axisCrossShape.invisible=!1,this.zr.modShape(this._axisCrossShape.id)}else"shadow"===V&&((null==U.shadow.width||"auto"===U.shadow.width||isNaN(U.shadow.width))&&(U.shadow.width=o),t===n?Math.abs(this.component.grid.getX()-t)<2?(U.shadow.width/=2,t=n+=U.shadow.width/2):Math.abs(this.component.grid.getXend()-t)<2&&(U.shadow.width/=2,t=n-=U.shadow.width/2):i===a&&(Math.abs(this.component.grid.getY()-i)<2?(U.shadow.width/=2,i=a+=U.shadow.width/2):Math.abs(this.component.grid.getYend()-i)<2&&(U.shadow.width/=2,i=a-=U.shadow.width/2)),this._axisShadowShape.style={xStart:t,yStart:i,xEnd:n,yEnd:a,strokeColor:U.shadow.color,lineWidth:U.shadow.width},this._axisShadowShape.invisible=!1,this.zr.modShape(this._axisShadowShape.id));this.zr.refreshNextFrame()}},__onmousemove:function(e){if(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),!this._mousein||!this._enterable){var t=e.target,i=m.getX(e.event),n=m.getY(e.event);if(t){this._curTarget=t,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n;var a;if(this._needAxisTrigger&&this.component.polar&&-1!=(a=this.component.polar.isInside([i,n])))for(var o=this.option.series,l=0,h=o.length;h>l;l++)if(o[l].polarIndex===a&&"axis"===this.deepQuery([o[l],this.option],"tooltip.trigger")){this._curTarget=null;break}this._showingTicket=setTimeout(this._tryShow,this._showDelay)}else this._curTarget=!1,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n,this._needAxisTrigger&&this.component.grid&&V.isInside(r,this.component.grid.getArea(),i,n)?this._showingTicket=setTimeout(this._tryShow,this._showDelay):this._needAxisTrigger&&this.component.polar&&-1!=this.component.polar.isInside([i,n])?this._showingTicket=setTimeout(this._tryShow,this._showDelay):(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_OUT_GRID,this._event,null,this.myChart),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}},__onglobalout:function(){clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay)},__setContent:function(e,t){this._tDom&&(e===this._curTicket&&(this._tDom.innerHTML=t),setTimeout(this._refixed,20))},ontooltipHover:function(e,t){if(!this._lastTipShape||this._lastTipShape&&this._lastTipShape.dataIndex!=e.dataIndex){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this.shapeList.length=2);for(var i=0,n=t.length;n>i;i++)t[i].zlevel=this.getZlevelBase(),t[i].z=this.getZBase(),t[i].style=p.prototype.getHighlightStyle(t[i].style,t[i].highlightStyle),t[i].draggable=!1,t[i].hoverable=!1,t[i].clickable=!1,t[i].ondragend=null,t[i].ondragover=null,t[i].ondrop=null,this.shapeList.push(t[i]),this.zr.addShape(t[i]);this._lastTipShape={dataIndex:e.dataIndex,tipShape:t}}},ondragend:function(){this._hide()},onlegendSelected:function(e){this._selectedMap=e.selected},_setSelectedMap:function(){this._selectedMap=this.component.legend?d.clone(this.component.legend.getSelectedMap()):{}},_isSelected:function(e){return null!=this._selectedMap[e]?this._selectedMap[e]:!0},showTip:function(e){if(e){var t,i=this.option.series;if(null!=e.seriesIndex)t=e.seriesIndex;else for(var n=e.seriesName,a=0,o=i.length;o>a;a++)if(i[a].name===n){t=a;break}var r=i[t];if(null!=r){var m=this.myChart.chart[r.type],V="axis"===this.deepQuery([r,this.option],"tooltip.trigger");if(m)if(V){var U=e.dataIndex;switch(m.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_RADAR:if(null==this.component.polar||r.data[0].value.length<=U)return;var d=r.polarIndex||0,p=this.component.polar.getVector(d,U,"max");this._event={zrenderX:p[0],zrenderY:p[1]},this._showPolarTrigger(d,U)}}else{var c,u,y=m.shapeList;switch(m.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_TREEMAP:case s.CHART_TYPE_SCATTER:for(var U=e.dataIndex,a=0,o=y.length;o>a;a++)if(null==y[a]._mark&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"dataIndex")==U){this._curTarget=y[a],c=y[a].style.x,u=m.type!=s.CHART_TYPE_K?y[a].style.y:y[a].style.y[0];break}break;case s.CHART_TYPE_RADAR:for(var U=e.dataIndex,a=0,o=y.length;o>a;a++)if("polygon"===y[a].type&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"dataIndex")==U){this._curTarget=y[a];var p=this.component.polar.getCenter(r.polarIndex||0);c=p[0],u=p[1];break}break;case s.CHART_TYPE_PIE:for(var g=e.name,a=0,o=y.length;o>a;a++)if("sector"===y[a].type&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"name")==g){this._curTarget=y[a];var b=this._curTarget.style,f=(b.startAngle+b.endAngle)/2*Math.PI/180;c=this._curTarget.style.x+Math.cos(f)*b.r/1.5,u=this._curTarget.style.y-Math.sin(f)*b.r/1.5;break}break;case s.CHART_TYPE_MAP:for(var g=e.name,k=r.mapType,a=0,o=y.length;o>a;a++)if("text"===y[a].type&&y[a]._mapType===k&&y[a].style._name===g){this._curTarget=y[a],c=this._curTarget.style.x+this._curTarget.position[0],u=this._curTarget.style.y+this._curTarget.position[1];break}break;case s.CHART_TYPE_CHORD:for(var g=e.name,a=0,o=y.length;o>a;a++)if("sector"===y[a].type&&l.get(y[a],"name")==g){this._curTarget=y[a];var b=this._curTarget.style,f=(b.startAngle+b.endAngle)/2*Math.PI/180;return c=this._curTarget.style.x+Math.cos(f)*(b.r-2),u=this._curTarget.style.y-Math.sin(f)*(b.r-2),void this.zr.trigger(h.EVENT.MOUSEMOVE,{zrenderX:c,zrenderY:u})}break;case s.CHART_TYPE_FORCE:for(var g=e.name,a=0,o=y.length;o>a;a++)if("circle"===y[a].type&&l.get(y[a],"name")==g){this._curTarget=y[a],c=this._curTarget.position[0],u=this._curTarget.position[1];break}}null!=c&&null!=u&&(this._event={zrenderX:c,zrenderY:u},this.zr.addHoverShape(this._curTarget),this.zr.refreshHover(),this._showItemTrigger())}}}},hideTip:function(){this._hide()},refresh:function(e){if(this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2,this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,e){this.option=e,this.option.tooltip=this.reformOption(this.option.tooltip),this.option.tooltip.textStyle=d.merge(this.option.tooltip.textStyle,this.ecTheme.textStyle),this._needAxisTrigger=!1,"axis"===this.option.tooltip.trigger&&(this._needAxisTrigger=!0);for(var t=this.option.series,i=0,n=t.length;n>i;i++)if("axis"===this.query(t[i],"tooltip.trigger")){this._needAxisTrigger=!0;break}this._showDelay=this.option.tooltip.showDelay,this._hideDelay=this.option.tooltip.hideDelay,this._defaultCssText=this._style(this.option.tooltip),this._setSelectedMap(),this._axisLineWidth=this.option.tooltip.axisPointer.lineStyle.width,this._enterable=this.option.tooltip.enterable,!this._enterable&&this._tDom.className.indexOf(h.elementClassName)<0&&(this._tDom.className+=" "+h.elementClassName)}if(this.showing){var a=this;setTimeout(function(){a.zr.trigger(h.EVENT.MOUSEMOVE,a.zr.handler._event)},50)}},onbeforDispose:function(){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove),this.zr.un(h.EVENT.GLOBALOUT,this._onglobalout),this.hasAppend&&this.dom.firstChild&&this.dom.firstChild.removeChild(this._tDom),this._tDom=null},_encodeHTML:function(e){return String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}},d.inherits(t,i),e("../component").define("tooltip",t),t}),i("echarts/component/legend",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","zrender/shape/Sector","../util/shape/Icon","../util/shape/Candle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o){if(!this.query(a,"legend.data"))return void console.error("option.legend.data has not been defined.");i.call(this,e,t,n,a,o);var r=this;r._legendSelected=function(e){r.__legendSelected(e)},r._dispatchHoverLink=function(e){return r.__dispatchHoverLink(e)},this._colorIndex=0,this._colorMap={},this._selectedMap={},this._hasDataMap={},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Sector"),r=e("../util/shape/Icon"),s=e("../util/shape/Candle"),l=e("../config");l.legend={zlevel:0,z:4,show:!0,orient:"horizontal",x:"center",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,textStyle:{color:"#333"},selectedMode:!0};var h=e("zrender/tool/util"),m=e("zrender/tool/area");t.prototype={type:l.COMPONENT_TYPE_LEGEND,_buildShape:function(){if(this.legendOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e,t,i,a,o,s,l,V,U=this.legendOption.data,d=U.length,p=this.legendOption.textStyle,c=this.zr.getWidth(),u=this.zr.getHeight(),y=this._itemGroupLocation.x,g=this._itemGroupLocation.y,b=this.legendOption.itemWidth,f=this.legendOption.itemHeight,k=this.legendOption.itemGap;"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(y=this._itemGroupLocation.x+this._itemGroupLocation.width-b);for(var x=0;d>x;x++)o=h.merge(U[x].textStyle||{},p),s=this.getFont(o),e=this._getName(U[x]),l=this._getFormatterName(e),""!==e?(t=U[x].icon||this._getSomethingByName(e).type,V=this.getColor(e),"horizontal"===this.legendOption.orient?200>c-y&&b+5+m.getTextWidth(l,s)+(x===d-1||""===U[x+1]?0:k)>=c-y&&(y=this._itemGroupLocation.x,g+=f+k):200>u-g&&f+(x===d-1||""===U[x+1]?0:k)>=u-g&&("right"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+k:y+=this._itemGroupLocation.maxWidth+k,g=this._itemGroupLocation.y),i=this._getItemShapeByType(y,g,b,f,this._selectedMap[e]&&this._hasDataMap[e]?V:"#ccc",t,V),i._name=e,i=new r(i),a={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:y+b+5,y:g+f/2,color:this._selectedMap[e]?"auto"===o.color?V:o.color:"#ccc",text:l,textFont:s,textBaseline:"middle"},highlightStyle:{color:V,brushType:"fill"},hoverable:!!this.legendOption.selectedMode,clickable:!!this.legendOption.selectedMode},"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(a.style.x-=b+10,a.style.textAlign="right"),a._name=e,a=new n(a),this.legendOption.selectedMode&&(i.onclick=a.onclick=this._legendSelected,i.onmouseover=a.onmouseover=this._dispatchHoverLink,i.hoverConnect=a.id,a.hoverConnect=i.id),this.shapeList.push(i),this.shapeList.push(a),"horizontal"===this.legendOption.orient?y+=b+5+m.getTextWidth(l,s)+k:g+=f+k):"horizontal"===this.legendOption.orient?(y=this._itemGroupLocation.x,g+=f+k):("right"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+k:y+=this._itemGroupLocation.maxWidth+k,g=this._itemGroupLocation.y);"horizontal"===this.legendOption.orient&&"center"===this.legendOption.x&&g!=this._itemGroupLocation.y&&this._mLineOptimize()},_getName:function(e){return"undefined"!=typeof e.name?e.name:e},_getFormatterName:function(e){var t,i=this.legendOption.formatter;return t="function"==typeof i?i.call(this.myChart,e):"string"==typeof i?i.replace("{name}",e):e},_getFormatterNameFromData:function(e){var t=this._getName(e);return this._getFormatterName(t)},_mLineOptimize:function(){for(var e=[],t=this._itemGroupLocation.x,i=2,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t?e.push((this._itemGroupLocation.width-(this.shapeList[i-1].style.x+m.getTextWidth(this.shapeList[i-1].style.text,this.shapeList[i-1].style.textFont)-t))/2):i===n-1&&e.push((this._itemGroupLocation.width-(this.shapeList[i].style.x+m.getTextWidth(this.shapeList[i].style.text,this.shapeList[i].style.textFont)-t))/2);for(var a=-1,i=1,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t&&a++,0!==e[a]&&(this.shapeList[i].style.x+=e[a])},_buildBackground:function(){var e=this.reformCssArray(this.legendOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.legendOption.borderWidth?"fill":"both",color:this.legendOption.backgroundColor,strokeColor:this.legendOption.borderColor,lineWidth:this.legendOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this.legendOption.data,t=e.length,i=this.legendOption.itemGap,n=this.legendOption.itemWidth+5,a=this.legendOption.itemHeight,o=this.legendOption.textStyle,r=this.getFont(o),s=0,l=0,V=this.reformCssArray(this.legendOption.padding),U=this.zr.getWidth()-V[1]-V[3],d=this.zr.getHeight()-V[0]-V[2],p=0,c=0;if("horizontal"===this.legendOption.orient){l=a;for(var u=0;t>u;u++)if(""!==this._getName(e[u])){var y=m.getTextWidth(this._getFormatterNameFromData(e[u]),e[u].textStyle?this.getFont(h.merge(e[u].textStyle||{},o)):r);p+n+y+i>U?(p-=i,s=Math.max(s,p),l+=a+i,p=0):(p+=n+y+i,s=Math.max(s,p-i))}else p-=i,s=Math.max(s,p),l+=a+i,p=0}else{for(var u=0;t>u;u++)c=Math.max(c,m.getTextWidth(this._getFormatterNameFromData(e[u]),e[u].textStyle?this.getFont(h.merge(e[u].textStyle||{},o)):r));c+=n,s=c;for(var u=0;t>u;u++)""!==this._getName(e[u])?p+a+i>d?(s+=c+i,p-=i,l=Math.max(l,p),p=0):(p+=a+i,l=Math.max(l,p-i)):(s+=c+i,p-=i,l=Math.max(l,p),p=0)}U=this.zr.getWidth(),d=this.zr.getHeight();var g;switch(this.legendOption.x){case"center":g=Math.floor((U-s)/2);break;case"left":g=V[3]+this.legendOption.borderWidth;break;case"right":g=U-s-V[1]-V[3]-2*this.legendOption.borderWidth;break;default:g=this.parsePercent(this.legendOption.x,U)}var b;switch(this.legendOption.y){case"top":b=V[0]+this.legendOption.borderWidth;break;case"bottom":b=d-l-V[0]-V[2]-2*this.legendOption.borderWidth;break;case"center":b=Math.floor((d-l)/2);break;default:b=this.parsePercent(this.legendOption.y,d)}return{x:g,y:b,width:s,height:l,maxWidth:c}},_getSomethingByName:function(e){for(var t,i=this.option.series,n=0,a=i.length;a>n;n++){if(i[n].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:null,dataIndex:-1};if(i[n].type===l.CHART_TYPE_PIE||i[n].type===l.CHART_TYPE_RADAR||i[n].type===l.CHART_TYPE_CHORD||i[n].type===l.CHART_TYPE_FORCE||i[n].type===l.CHART_TYPE_FUNNEL||i[n].type===l.CHART_TYPE_TREEMAP){t=i[n].categories||i[n].data||i[n].nodes;for(var o=0,r=t.length;r>o;o++)if(t[o].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:t[o],dataIndex:o}}}return{type:"bar",series:null,seriesIndex:-1,data:null,dataIndex:-1}},_getItemShapeByType:function(e,t,i,n,a,o,r){var s,h="#ccc"===a?r:a,m={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{iconType:"legendicon"+o,x:e,y:t,width:i,height:n,color:a,strokeColor:a,lineWidth:2},highlightStyle:{color:h,strokeColor:h,lineWidth:1},hoverable:this.legendOption.selectedMode,clickable:this.legendOption.selectedMode};if(o.match("image")){var s=o.replace(new RegExp("^image:\\/\\/"),"");o="image"}switch(o){case"line":m.style.brushType="stroke",m.highlightStyle.lineWidth=3;break;case"radar":case"venn":case"tree":case"treemap":case"scatter":m.highlightStyle.lineWidth=3;break;case"k":m.style.brushType="both",m.highlightStyle.lineWidth=3,m.highlightStyle.color=m.style.color=this.deepQuery([this.ecTheme,l],"k.itemStyle.normal.color")||"#fff",m.style.strokeColor="#ccc"!=a?this.deepQuery([this.ecTheme,l],"k.itemStyle.normal.lineStyle.color")||"#ff3200":a;break;case"image":m.style.iconType="image",m.style.image=s,"#ccc"===a&&(m.style.opacity=.5)}return m},__legendSelected:function(e){var t=e.target._name;if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[t]=!this._selectedMap[t],this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,e.event,{selected:this._selectedMap,target:t},this.myChart)},__dispatchHoverLink:function(e){this.messageCenter.dispatch(l.EVENT.LEGEND_HOVERLINK,e.event,{target:e.target._name},this.myChart)},refresh:function(e){if(e){this.option=e||this.option,this.option.legend=this.reformOption(this.option.legend),this.legendOption=this.option.legend;var t,i,n,a,o=this.legendOption.data||[];if(this.legendOption.selected)for(var r in this.legendOption.selected)this._selectedMap[r]="undefined"!=typeof this._selectedMap[r]?this._selectedMap[r]:this.legendOption.selected[r];for(var s=0,h=o.length;h>s;s++)t=this._getName(o[s]),""!==t&&(i=this._getSomethingByName(t),i.series?(this._hasDataMap[t]=!0,a=!i.data||i.type!==l.CHART_TYPE_PIE&&i.type!==l.CHART_TYPE_FORCE&&i.type!==l.CHART_TYPE_FUNNEL?[i.series]:[i.data,i.series],n=this.getItemStyleColor(this.deepQuery(a,"itemStyle.normal.color"),i.seriesIndex,i.dataIndex,i.data),n&&i.type!=l.CHART_TYPE_K&&this.setColor(t,n),this._selectedMap[t]=null!=this._selectedMap[t]?this._selectedMap[t]:!0):this._hasDataMap[t]=!1)}this.clear(),this._buildShape()},getRelatedAmount:function(e){for(var t,i=0,n=this.option.series,a=0,o=n.length;o>a;a++)if(n[a].name===e&&i++,n[a].type===l.CHART_TYPE_PIE||n[a].type===l.CHART_TYPE_RADAR||n[a].type===l.CHART_TYPE_CHORD||n[a].type===l.CHART_TYPE_FORCE||n[a].type===l.CHART_TYPE_FUNNEL){t=n[a].type!=l.CHART_TYPE_FORCE?n[a].data:n[a].categories;for(var r=0,s=t.length;s>r;r++)t[r].name===e&&"-"!=t[r].value&&i++}return i},setColor:function(e,t){this._colorMap[e]=t},getColor:function(e){return this._colorMap[e]||(this._colorMap[e]=this.zr.getColor(this._colorIndex++)),this._colorMap[e]},hasColor:function(e){return this._colorMap[e]?this._colorMap[e]:!1},add:function(e,t){ for(var i=this.legendOption.data,n=0,a=i.length;a>n;n++)if(this._getName(i[n])===e)return;this.legendOption.data.push(e),this.setColor(e,t),this._selectedMap[e]=!0,this._hasDataMap[e]=!0},del:function(e){for(var t=this.legendOption.data,i=0,n=t.length;n>i;i++)if(this._getName(t[i])===e)return this.legendOption.data.splice(i,1)},getItemShape:function(e){if(null!=e)for(var t,i=0,n=this.shapeList.length;n>i;i++)if(t=this.shapeList[i],t._name===e&&"text"!=t.type)return t},setItemShape:function(e,t){for(var i,n=0,a=this.shapeList.length;a>n;n++)i=this.shapeList[n],i._name===e&&"text"!=i.type&&(this._selectedMap[e]||(t.style.color="#ccc",t.style.strokeColor="#ccc"),this.zr.modShape(i.id,t))},isSelected:function(e){return"undefined"!=typeof this._selectedMap[e]?this._selectedMap[e]:!0},getSelectedMap:function(){return this._selectedMap},setSelected:function(e,t){if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[e]=t,this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,null,{selected:this._selectedMap,target:e},this.myChart)},onlegendSelected:function(e,t){var i=e.selected;for(var n in i)this._selectedMap[n]!=i[n]&&(t.needRefresh=!0),this._selectedMap[n]=i[n]}};var V={line:function(e,t){var i=t.height/2;e.moveTo(t.x,t.y+i),e.lineTo(t.x+t.width,t.y+i)},pie:function(e,t){var i=t.x,n=t.y,a=t.width,r=t.height;o.prototype.buildPath(e,{x:i+a/2,y:n+r+2,r:r,r0:6,startAngle:45,endAngle:135})},eventRiver:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o),e.bezierCurveTo(i+a,n+o,i,n+4,i+a,n+4),e.lineTo(i+a,n),e.bezierCurveTo(i,n,i+a,n+o-4,i,n+o-4),e.lineTo(i,n+o)},k:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;s.prototype.buildPath(e,{x:i+a/2,y:[n+1,n+1,n+o-6,n+o],width:a-6})},bar:function(e,t){var i=t.x,n=t.y+1,a=t.width,o=t.height-2,r=3;e.moveTo(i+r,n),e.lineTo(i+a-r,n),e.quadraticCurveTo(i+a,n,i+a,n+r),e.lineTo(i+a,n+o-r),e.quadraticCurveTo(i+a,n+o,i+a-r,n+o),e.lineTo(i+r,n+o),e.quadraticCurveTo(i,n+o,i,n+o-r),e.lineTo(i,n+r),e.quadraticCurveTo(i,n,i+r,n)},force:function(e,t){r.prototype.iconLibrary.circle(e,t)},radar:function(e,t){var i=6,n=t.x+t.width/2,a=t.y+t.height/2,o=t.height/2,r=2*Math.PI/i,s=-Math.PI/2,l=n+o*Math.cos(s),h=a+o*Math.sin(s);e.moveTo(l,h),s+=r;for(var m=0,V=i-1;V>m;m++)e.lineTo(n+o*Math.cos(s),a+o*Math.sin(s)),s+=r;e.lineTo(l,h)}};V.chord=V.pie,V.map=V.bar;for(var U in V)r.prototype.iconLibrary["legendicon"+U]=V[U];return h.inherits(t,i),e("../component").define("legend",t),t}),i("echarts/util/ecData",[],function(){function e(e,t,i,n,a,o,r,s){var l;return"undefined"!=typeof n&&(l=null==n.value?n:n.value),e._echartsData={_series:t,_seriesIndex:i,_data:n,_dataIndex:a,_name:o,_value:l,_special:r,_special2:s},e._echartsData}function t(e,t){var i=e._echartsData;if(!t)return i;switch(t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":return i&&i["_"+t]}return null}function i(e,t,i){switch(e._echartsData=e._echartsData||{},t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":e._echartsData["_"+t]=i}}function n(e,t){t._echartsData={_series:e._echartsData._series,_seriesIndex:e._echartsData._seriesIndex,_data:e._echartsData._data,_dataIndex:e._echartsData._dataIndex,_name:e._echartsData._name,_value:e._echartsData._value,_special:e._echartsData._special,_special2:e._echartsData._special2}}return{pack:e,set:i,get:t,clone:n}}),i("echarts/chart",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),i("zrender/tool/color",["require","../tool/util"],function(e){function t(e){D=e}function i(){D=N}function n(e,t){return e=0|e,t=t||D,t[e%t.length]}function a(e){B=e}function o(){H=B}function r(){return B}function s(e,t,i,n,a,o,r){O||(O=P.getContext());for(var s=O.createRadialGradient(e,t,i,n,a,o),l=0,h=r.length;h>l;l++)s.addColorStop(r[l][0],r[l][1]);return s.__nonRecursion=!0,s}function l(e,t,i,n,a){O||(O=P.getContext());for(var o=O.createLinearGradient(e,t,i,n),r=0,s=a.length;s>r;r++)o.addColorStop(a[r][0],a[r][1]);return o.__nonRecursion=!0,o}function h(e,t,i){e=p(e),t=p(t),e=I(e),t=I(t);for(var n=[],a=(t[0]-e[0])/i,o=(t[1]-e[1])/i,r=(t[2]-e[2])/i,s=(t[3]-e[3])/i,l=0,h=e[0],m=e[1],U=e[2],d=e[3];i>l;l++)n[l]=V([S(Math.floor(h),[0,255]),S(Math.floor(m),[0,255]),S(Math.floor(U),[0,255]),d.toFixed(4)-0],"rgba"),h+=a,m+=o,U+=r,d+=s;return h=t[0],m=t[1],U=t[2],d=t[3],n[l]=V([h,m,U,d],"rgba"),n}function m(e,t){var i=[],n=e.length;if(void 0===t&&(t=20),1===n)i=h(e[0],e[0],t);else if(n>1)for(var a=0,o=n-1;o>a;a++){var r=h(e[a],e[a+1],t);o-1>a&&r.pop(),i=i.concat(r)}return i}function V(e,t){if(t=t||"rgb",e&&(3===e.length||4===e.length)){if(e=C(e,function(e){return e>1?Math.ceil(e):e}),t.indexOf("hex")>-1)return"#"+((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1);if(t.indexOf("hs")>-1){var i=C(e.slice(1,3),function(e){return e+"%"});e[1]=i[0],e[2]=i[1]}return t.indexOf("a")>-1?(3===e.length&&e.push(1),e[3]=S(e[3],[0,1]),t+"("+e.slice(0,4).join(",")+")"):t+"("+e.slice(0,3).join(",")+")"}}function U(e){e=L(e),e.indexOf("rgba")<0&&(e=p(e));var t=[],i=0;return e.replace(/[\d.]+/g,function(e){e=3>i?0|e:+e,t[i++]=e}),t}function d(e,t){if(!E(e))return e;var i=I(e),n=i[3];return"undefined"==typeof n&&(n=1),e.indexOf("hsb")>-1?i=F(i):e.indexOf("hsl")>-1&&(i=T(i)),t.indexOf("hsb")>-1||t.indexOf("hsv")>-1?i=A(i):t.indexOf("hsl")>-1&&(i=M(i)),i[3]=n,V(i,t)}function p(e){return d(e,"rgba")}function c(e){return d(e,"rgb")}function u(e){return d(e,"hex")}function y(e){return d(e,"hsva")}function g(e){return d(e,"hsv")}function b(e){return d(e,"hsba")}function f(e){return d(e,"hsb")}function k(e){return d(e,"hsla")}function x(e){return d(e,"hsl")}function _(e){for(var t in G)if(u(G[t])===u(e))return t;return null}function L(e){return String(e).replace(/\s+/g,"")}function W(e){if(G[e]&&(e=G[e]),e=L(e),e=e.replace(/hsv/i,"hsb"),/^#[\da-f]{3}$/i.test(e)){e=parseInt(e.slice(1),16);var t=(3840&e)<<8,i=(240&e)<<4,n=15&e;e="#"+((1<<24)+(t<<4)+t+(i<<4)+i+(n<<4)+n).toString(16).slice(1)}return e}function X(e,t){if(!E(e))return e;var i=t>0?1:-1;"undefined"==typeof t&&(t=0),t=Math.abs(t)>1?1:Math.abs(t),e=c(e);for(var n=I(e),a=0;3>a;a++)n[a]=1===i?n[a]*(1-t)|0:(255-n[a])*t+n[a]|0;return"rgb("+n.join(",")+")"}function v(e){if(!E(e))return e;var t=I(p(e));return t=C(t,function(e){return 255-e}),V(t,"rgb")}function w(e,t,i){if(!E(e)||!E(t))return e;"undefined"==typeof i&&(i=.5),i=1-S(i,[0,1]);for(var n=2*i-1,a=I(p(e)),o=I(p(t)),r=a[3]-o[3],s=((n*r===-1?n:(n+r)/(1+n*r))+1)/2,l=1-s,h=[],m=0;3>m;m++)h[m]=a[m]*s+o[m]*l;var U=a[3]*i+o[3]*(1-i);return U=Math.max(0,Math.min(1,U)),1===a[3]&&1===o[3]?V(h,"rgb"):(h[3]=U,V(h,"rgba"))}function K(){return"#"+(Math.random().toString(16)+"0000").slice(2,8)}function I(e){e=W(e);var t=e.match(R);if(null===t)throw new Error("The color format error");var i,n,a,o=[];if(t[2])i=t[2].replace("#","").split(""),a=[i[0]+i[1],i[2]+i[3],i[4]+i[5]],o=C(a,function(e){return S(parseInt(e,16),[0,255])});else if(t[4]){var r=t[4].split(",");n=r[3],a=r.slice(0,3),o=C(a,function(e){return e=Math.floor(e.indexOf("%")>0?2.55*parseInt(e,0):e),S(e,[0,255])}),"undefined"!=typeof n&&o.push(S(parseFloat(n),[0,1]))}else if(t[5]||t[6]){var s=(t[5]||t[6]).split(","),l=parseInt(s[0],0)/360,h=s[1],m=s[2];n=s[3],o=C([h,m],function(e){return S(parseFloat(e)/100,[0,1])}),o.unshift(l),"undefined"!=typeof n&&o.push(S(parseFloat(n),[0,1]))}return o}function J(e,t){if(!E(e))return e;null===t&&(t=1);var i=I(p(e));return i[3]=S(Number(t).toFixed(4),[0,1]),V(i,"rgba")}function C(e,t){if("function"!=typeof t)throw new TypeError;for(var i=e?e.length:0,n=0;i>n;n++)e[n]=t(e[n]);return e}function S(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function E(e){return e instanceof Array||"string"==typeof e}function F(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s=6*a;6===s&&(s=0);var l=0|s,h=r*(1-o),m=r*(1-o*(s-l)),V=r*(1-o*(1-(s-l))),U=0,d=0,p=0;0===l?(U=r,d=V,p=h):1===l?(U=m,d=r,p=h):2===l?(U=h,d=r,p=V):3===l?(U=h,d=m,p=r):4===l?(U=V,d=h,p=r):(U=r,d=h,p=m),t=255*U,i=255*d,n=255*p}return[t,i,n]}function T(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s;s=.5>r?r*(1+o):r+o-o*r;var l=2*r-s;t=255*z(l,s,a+1/3),i=255*z(l,s,a),n=255*z(l,s,a-1/3)}return[t,i,n]}function z(e,t,i){return 0>i&&(i+=1),i>1&&(i-=1),1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function A(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=s;if(0===l)t=0,i=0;else{i=l/s;var m=((s-n)/6+l/2)/l,V=((s-a)/6+l/2)/l,U=((s-o)/6+l/2)/l;n===s?t=U-V:a===s?t=1/3+m-U:o===s&&(t=2/3+V-m),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}function M(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=(s+r)/2;if(0===l)t=0,i=0;else{i=.5>h?l/(s+r):l/(2-s-r);var m=((s-n)/6+l/2)/l,V=((s-a)/6+l/2)/l,U=((s-o)/6+l/2)/l;n===s?t=U-V:a===s?t=1/3+m-U:o===s&&(t=2/3+V-m),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}var O,P=e("../tool/util"),D=["#ff9277"," #dddd00"," #ffc877"," #bbe3ff"," #d5ffbb","#bbbbff"," #ddb000"," #b0dd00"," #e2bbff"," #ffbbe3","#ff7777"," #ff9900"," #83dd00"," #77e3ff"," #778fff","#c877ff"," #ff77ab"," #ff6600"," #aa8800"," #77c7ff","#ad77ff"," #ff77ff"," #dd0083"," #777700"," #00aa00","#0088aa"," #8400dd"," #aa0088"," #dd0000"," #772e00"],N=D,B="rgba(255,255,0,0.5)",H=B,R=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"};return{customPalette:t,resetPalette:i,getColor:n,getHighlightColor:r,customHighlight:a,resetHighlight:o,getRadialGradient:s,getLinearGradient:l,getGradientColors:m,getStepColors:h,reverse:v,mix:w,lift:X,trim:L,random:K,toRGB:c,toRGBA:p,toHex:u,toHSL:x,toHSLA:k,toHSB:f,toHSBA:b,toHSV:g,toHSVA:y,toName:_,toColor:V,toArray:U,alpha:J,getData:I}}),i("echarts/component/timeline",["require","./base","zrender/shape/Rectangle","../util/shape/Icon","../util/shape/Chain","../config","zrender/tool/util","zrender/tool/area","zrender/tool/event","../component"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o);var r=this;if(r._onclick=function(e){return r.__onclick(e)},r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},r._setCurrentOption=function(){var e=r.timelineOption;r.currentIndex%=e.data.length;var t=r.options[r.currentIndex]||{};r.myChart._setOption(t,e.notMerge,!0),r.messageCenter.dispatch(s.EVENT.TIMELINE_CHANGED,null,{currentIndex:r.currentIndex,data:null!=e.data[r.currentIndex].name?e.data[r.currentIndex].name:e.data[r.currentIndex]},r.myChart)},r._onFrame=function(){r._setCurrentOption(),r._syncHandleShape(),r.timelineOption.autoPlay&&(r.playTicket=setTimeout(function(){return r.currentIndex+=1,!r.timelineOption.loop&&r.currentIndex>=r.timelineOption.data.length?(r.currentIndex=r.timelineOption.data.length-1,void r.stop()):void r._onFrame()},r.timelineOption.playInterval))},this.setTheme(!1),this.options=this.option.options,this.currentIndex=this.timelineOption.currentIndex%this.timelineOption.data.length,this.timelineOption.notMerge||0===this.currentIndex||(this.options[this.currentIndex]=l.merge(this.options[this.currentIndex],this.options[0])),this.timelineOption.show&&(this._buildShape(),this._syncHandleShape()),this._setCurrentOption(),this.timelineOption.autoPlay){var r=this;this.playTicket=setTimeout(function(){r.play()},null!=this.ecTheme.animationDuration?this.ecTheme.animationDuration:s.animationDuration)}}function i(e,t){var i=2,n=t.x+i,a=t.y+i+2,r=t.width-i,s=t.height-i,l=t.symbol;if("last"===l)e.moveTo(n+r-2,a+s/3),e.lineTo(n+r-2,a),e.lineTo(n+2,a+s/2),e.lineTo(n+r-2,a+s),e.lineTo(n+r-2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("next"===l)e.moveTo(n+2,a+s/3),e.lineTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("play"===l)if("stop"===t.status)e.moveTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a);else{var h="both"===t.brushType?2:3;e.rect(n+2,a,h,s),e.rect(n+r-h-2,a,h,s)}else if(l.match("image")){var m="";m=l.replace(new RegExp("^image:\\/\\/"),""),l=o.prototype.iconLibrary.image,l(e,{x:n,y:a,width:r,height:s,image:m})}}var n=e("./base"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/Icon"),r=e("../util/shape/Chain"),s=e("../config");s.timeline={zlevel:0,z:4,show:!0,type:"time",notMerge:!1,realtime:!0,x:80,x2:80,y2:0,height:50,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,controlPosition:"left",autoPlay:!1,loop:!0,playInterval:2e3,lineStyle:{width:1,color:"#666",type:"dashed"},label:{show:!0,interval:"auto",rotate:0,textStyle:{color:"#333"}},checkpointStyle:{symbol:"auto",symbolSize:"auto",color:"auto",borderColor:"auto",borderWidth:"auto",label:{show:!1,textStyle:{color:"auto"}}},controlStyle:{itemSize:15,itemGap:5,normal:{color:"#333"},emphasis:{color:"#1e90ff"}},symbol:"emptyDiamond",symbolSize:4,currentIndex:0};var l=e("zrender/tool/util"),h=e("zrender/tool/area"),m=e("zrender/tool/event");return t.prototype={type:s.COMPONENT_TYPE_TIMELINE,_buildShape:function(){if(this._location=this._getLocation(),this._buildBackground(),this._buildControl(),this._chainPoint=this._getChainPoint(),this.timelineOption.label.show)for(var e=this._getInterval(),t=0,i=this._chainPoint.length;i>t;t+=e)this._chainPoint[t].showLabel=!0;this._buildChain(),this._buildHandle();for(var t=0,n=this.shapeList.length;n>t;t++)this.zr.addShape(this.shapeList[t])},_getLocation:function(){var e,t=this.timelineOption,i=this.reformCssArray(this.timelineOption.padding),n=this.zr.getWidth(),a=this.parsePercent(t.x,n),o=this.parsePercent(t.x2,n);null==t.width?(e=n-a-o,o=n-o):(e=this.parsePercent(t.width,n),o=a+e);var r,s,l=this.zr.getHeight(),h=this.parsePercent(t.height,l);return null!=t.y?(r=this.parsePercent(t.y,l),s=r+h):(s=l-this.parsePercent(t.y2,l),r=s-h),{x:a+i[3],y:r+i[0],x2:o-i[1],y2:s-i[2],width:e-i[1]-i[3],height:h-i[0]-i[2]}},_getReformedLabel:function(e){var t=this.timelineOption,i=null!=t.data[e].name?t.data[e].name:t.data[e],n=t.data[e].formatter||t.label.formatter;return n&&("function"==typeof n?i=n.call(this.myChart,i):"string"==typeof n&&(i=n.replace("{value}",i))),i},_getInterval:function(){var e=this._chainPoint,t=this.timelineOption,i=t.label.interval;if("auto"===i){var n=t.label.textStyle.fontSize,a=t.data,o=t.data.length;if(o>3){var r,s,l=!1;for(i=0;!l&&o>i;){i++,l=!0;for(var m=i;o>m;m+=i){if(r=e[m].x-e[m-i].x,0!==t.label.rotate)s=n;else if(a[m].textStyle)s=h.getTextWidth(e[m].name,e[m].textFont);else{var V=e[m].name+"",U=(V.match(/\w/g)||"").length,d=V.length-U;s=U*n*2/3+d*n}if(s>r){l=!1;break}}}}else i=1}else i=i-0+1;return i},_getChainPoint:function(){function e(e){return null!=h[e].name?h[e].name:h[e]+""}var t,i=this.timelineOption,n=i.symbol.toLowerCase(),a=i.symbolSize,o=i.label.rotate,r=i.label.textStyle,s=this.getFont(r),h=i.data,m=this._location.x,V=this._location.y+this._location.height/4*3,U=this._location.x2-this._location.x,d=h.length,p=[];if(d>1){var c=U/d;if(c=c>50?50:20>c?5:c,U-=2*c,"number"===i.type)for(var u=0;d>u;u++)p.push(m+c+U/(d-1)*u);else{p[0]=new Date(e(0).replace(/-/g,"/")),p[d-1]=new Date(e(d-1).replace(/-/g,"/"))-p[0];for(var u=1;d>u;u++)p[u]=m+c+U*(new Date(e(u).replace(/-/g,"/"))-p[0])/p[d-1];p[0]=m+c}}else p.push(m+U/2);for(var y,g,b,f,k,x=[],u=0;d>u;u++)m=p[u],y=h[u].symbol&&h[u].symbol.toLowerCase()||n,y.match("empty")?(y=y.replace("empty",""),b=!0):b=!1,y.match("star")&&(g=y.replace("star","")-0||5,y="star"),t=h[u].textStyle?l.merge(h[u].textStyle||{},r):r,f=t.align||"center",o?(f=o>0?"right":"left",k=[o*Math.PI/180,m,V-5]):k=!1,x.push({x:m,n:g,isEmpty:b,symbol:y,symbolSize:h[u].symbolSize||a,color:h[u].color,borderColor:h[u].borderColor,borderWidth:h[u].borderWidth,name:this._getReformedLabel(u),textColor:t.color,textAlign:f,textBaseline:t.baseline||"middle",textX:m,textY:V-(o?5:0),textFont:h[u].textStyle?this.getFont(t):s,rotation:k,showLabel:!1});return x},_buildBackground:function(){var e=this.timelineOption,t=this.reformCssArray(this.timelineOption.padding),i=this._location.width,n=this._location.height;(0!==e.borderWidth||"rgba(0,0,0,0)"!=e.backgroundColor.replace(/\s/g,""))&&this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x-t[3],y:this._location.y-t[0],width:i+t[1]+t[3],height:n+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_buildControl:function(){var e=this,t=this.timelineOption,i=t.lineStyle,n=t.controlStyle;if("none"!==t.controlPosition){var a,r=n.itemSize,s=n.itemGap;"left"===t.controlPosition?(a=this._location.x,this._location.x+=3*(r+s)):(a=this._location.x2-(3*(r+s)-s),this._location.x2-=3*(r+s));var h=this._location.y,m={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{iconType:"timelineControl",symbol:"last",x:a,y:h,width:r,height:r,brushType:"stroke",color:n.normal.color,strokeColor:n.normal.color,lineWidth:i.width},highlightStyle:{color:n.emphasis.color,strokeColor:n.emphasis.color,lineWidth:i.width+1},clickable:!0};this._ctrLastShape=new o(m),this._ctrLastShape.onclick=function(){e.last()},this.shapeList.push(this._ctrLastShape),a+=r+s,this._ctrPlayShape=new o(l.clone(m)),this._ctrPlayShape.style.brushType="fill",this._ctrPlayShape.style.symbol="play",this._ctrPlayShape.style.status=this.timelineOption.autoPlay?"playing":"stop",this._ctrPlayShape.style.x=a,this._ctrPlayShape.onclick=function(){"stop"===e._ctrPlayShape.style.status?e.play():e.stop()},this.shapeList.push(this._ctrPlayShape),a+=r+s,this._ctrNextShape=new o(l.clone(m)),this._ctrNextShape.style.symbol="next",this._ctrNextShape.style.x=a,this._ctrNextShape.onclick=function(){e.next()},this.shapeList.push(this._ctrNextShape)}},_buildChain:function(){var e=this.timelineOption,t=e.lineStyle;this._timelineShae={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:this._location.x,y:this.subPixelOptimize(this._location.y,t.width),width:this._location.x2-this._location.x,height:this._location.height,chainPoint:this._chainPoint,brushType:"both",strokeColor:t.color,lineWidth:t.width,lineType:t.type},hoverable:!1,clickable:!0,onclick:this._onclick},this._timelineShae=new r(this._timelineShae),this.shapeList.push(this._timelineShae)},_buildHandle:function(){var e=this._chainPoint[this.currentIndex],t=e.symbolSize+1;t=5>t?5:t,this._handleShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,hoverable:!1,draggable:!0,style:{iconType:"diamond",n:e.n,x:e.x-t,y:this._location.y+this._location.height/4-t,width:2*t,height:2*t,brushType:"both",textPosition:"specific",textX:e.x,textY:this._location.y-this._location.height/4,textAlign:"center",textBaseline:"middle"},highlightStyle:{},ondrift:this._ondrift,ondragend:this._ondragend},this._handleShape=new o(this._handleShape),this.shapeList.push(this._handleShape)},_syncHandleShape:function(){if(this.timelineOption.show){var e=this.timelineOption,t=e.checkpointStyle,i=this._chainPoint[this.currentIndex];this._handleShape.style.text=t.label.show?i.name:"",this._handleShape.style.textFont=i.textFont,this._handleShape.style.n=i.n,"auto"===t.symbol?this._handleShape.style.iconType="none"!=i.symbol?i.symbol:"diamond":(this._handleShape.style.iconType=t.symbol,t.symbol.match("star")&&(this._handleShape.style.n=t.symbol.replace("star","")-0||5,this._handleShape.style.iconType="star"));var n;"auto"===t.symbolSize?(n=i.symbolSize+2,n=5>n?5:n):n=t.symbolSize-0,this._handleShape.style.color="auto"===t.color?i.color?i.color:e.controlStyle.emphasis.color:t.color,this._handleShape.style.textColor="auto"===t.label.textStyle.color?this._handleShape.style.color:t.label.textStyle.color,this._handleShape.highlightStyle.strokeColor=this._handleShape.style.strokeColor="auto"===t.borderColor?i.borderColor?i.borderColor:"#fff":t.borderColor,this._handleShape.style.lineWidth="auto"===t.borderWidth?i.borderWidth?i.borderWidth:0:t.borderWidth-0,this._handleShape.highlightStyle.lineWidth=this._handleShape.style.lineWidth+1,this.zr.animate(this._handleShape.id,"style").when(500,{x:i.x-n,textX:i.x,y:this._location.y+this._location.height/4-n,width:2*n,height:2*n}).start("ExponentialOut")}},_findChainIndex:function(e){var t=this._chainPoint,i=t.length;if(e<=t[0].x)return 0;if(e>=t[i-1].x)return i-1;for(var n=0;i-1>n;n++)if(e>=t[n].x&&e<=t[n+1].x)return Math.abs(e-t[n].x)=n[a-1].x-n[a-1].symbolSize?(e.style.x=n[a-1].x-n[a-1].symbolSize,i=a-1):(e.style.x+=t,i=this._findChainIndex(e.style.x));var o=n[i],r=o.symbolSize+2;if(e.style.iconType=o.symbol,e.style.n=o.n,e.style.textX=e.style.x+r/2,e.style.y=this._location.y+this._location.height/4-r,e.style.width=2*r,e.style.height=2*r,e.style.text=o.name,i===this.currentIndex)return!0;if(this.currentIndex=i,this.timelineOption.realtime){clearTimeout(this.playTicket);var s=this;this.playTicket=setTimeout(function(){s._setCurrentOption()},200)}return!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.timelineOption.realtime&&this._setCurrentOption(),t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this._syncHandleShape())},last:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex-=1,this.currentIndex<0&&(this.currentIndex=this.timelineOption.data.length-1),this._onFrame(),this.currentIndex},next:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex+=1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},play:function(e,t){return this._ctrPlayShape&&"playing"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="playing",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=null!=t?t:!0,this.timelineOption.autoPlay||clearTimeout(this.playTicket),this.currentIndex=null!=e?e:this.currentIndex+1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},stop:function(){return this._ctrPlayShape&&"stop"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="stop",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=!1,clearTimeout(this.playTicket),this.currentIndex},resize:function(){this.timelineOption.show&&(this.clear(),this._buildShape(),this._syncHandleShape())},setTheme:function(e){this.timelineOption=this.reformOption(l.clone(this.option.timeline)),this.timelineOption.label.textStyle=this.getTextStyle(this.timelineOption.label.textStyle),this.timelineOption.checkpointStyle.label.textStyle=this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle),this.myChart.canvasSupported||(this.timelineOption.realtime=!1),this.timelineOption.show&&e&&(this.clear(),this._buildShape(),this._syncHandleShape())},onbeforDispose:function(){clearTimeout(this.playTicket)}},o.prototype.iconLibrary.timelineControl=i,l.inherits(t,n),e("../component").define("timeline",t),t}),i("zrender/shape/Image",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"image",brush:function(e,t,i){var n=this.style||{};t&&(n=this.getHighlightStyle(n,this.highlightStyle||{}));var a=n.image,o=this;if(this._imageCache||(this._imageCache={}),"string"==typeof a){var r=a;this._imageCache[r]?a=this._imageCache[r]:(a=new Image,a.onload=function(){a.onload=null,o.modSelf(),i()},a.src=r,this._imageCache[r]=a)}if(a){if("IMG"==a.nodeName.toUpperCase())if(window.ActiveXObject){if("complete"!=a.readyState)return}else if(!a.complete)return;var s=n.width||a.width,l=n.height||a.height,h=n.x,m=n.y;if(!a.width||!a.height)return;if(e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.sWidth&&n.sHeight){var V=n.sx||0,U=n.sy||0;e.drawImage(a,V,U,n.sWidth,n.sHeight,h,m,s,l)}else if(n.sx&&n.sy){var V=n.sx,U=n.sy,d=s-V,p=l-U;e.drawImage(a,V,U,d,p,h,m,s,l)}else e.drawImage(a,h,m,s,l);n.width||(n.width=s),n.height||(n.height=l),this.style.width||(this.style.width=s),this.style.height||(this.style.height=l),this.drawText(e,n,this.style),e.restore()}},getRect:function(e){return{x:e.x,y:e.y,width:e.width,height:e.height}},clearCache:function(){this._imageCache={}}},e("../tool/util").inherits(i,t),i}),i("zrender/loadingEffect/Bar",["require","./Base","../tool/util","../tool/color","../shape/Rectangle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Rectangle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:0,y:this.canvasHeight/2-30,width:this.canvasWidth,height:5,brushType:"fill",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=new o({highlightStyle:n.clone(l)});return h.highlightStyle.color=l.color||a.getLinearGradient(l.x,l.y,l.x+l.width,l.y+l.height,[[0,"#ff6400"],[.5,"#ffe100"],[1,"#b1ff00"]]),null!=i.progress?(e(s),h.highlightStyle.width=this.adjust(i.progress,[0,1])*i.effectOption.width,e(h),e(r),void t()):(h.highlightStyle.width=0,setInterval(function(){e(s),h.highlightStyle.widthc;c++){var u="random"==l.color?a.alpha(a.random(),.3):l.color;U[c]=new o({highlightStyle:{x:Math.ceil(Math.random()*d),y:Math.ceil(Math.random()*p),r:Math.ceil(40*Math.random()),brushType:m,color:u,strokeColor:u,lineWidth:V},animationY:Math.ceil(20*Math.random())})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=U[i].highlightStyle;n.y-U[i].animationY+n.r<=0&&(U[i].highlightStyle.y=p+n.r,U[i].highlightStyle.x=Math.ceil(Math.random()*d)),U[i].highlightStyle.y-=U[i].animationY,e(U[i])}e(r),t()},l.timeInterval)},t}),i("zrender/loadingEffect/DynamicLine",["require","./Base","../tool/util","../tool/color","../shape/Line"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Line");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:"#fff"},backgroundColor:"rgba(0, 0, 0, 0.8)",effectOption:{n:30,lineWidth:1,color:"random",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=l.n,m=l.lineWidth,V=[],U=this.canvasWidth,d=this.canvasHeight,p=0;h>p;p++){var c=-Math.ceil(1e3*Math.random()),u=Math.ceil(400*Math.random()),y=Math.ceil(Math.random()*d),g="random"==l.color?a.random():l.color;V[p]=new o({highlightStyle:{xStart:c,yStart:y,xEnd:c+u,yEnd:y,strokeColor:g,lineWidth:m},animationX:Math.ceil(100*Math.random()),len:u})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=V[i].highlightStyle;n.xStart>=U&&(V[i].len=Math.ceil(400*Math.random()),n.xStart=-400,n.xEnd=-400+V[i].len,n.yStart=Math.ceil(Math.random()*d),n.yEnd=n.yStart),n.xStart+=V[i].animationX,n.xEnd+=V[i].animationX,e(V[i])}e(r),t()},l.timeInterval)},t}),i("zrender/loadingEffect/Ring",["require","./Base","../tool/util","../tool/color","../shape/Ring","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Ring"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#07a"},backgroundColor:"rgba(250, 250, 250, 0.8)",effect:{x:this.canvasWidth/2,y:this.canvasHeight/2,r0:60,r:100,color:"#bbdcff",brushType:"fill",textPosition:"inside",textFont:"normal 30px verdana",textColor:"rgba(30, 144, 255, 0.6)",timeInterval:100}}),s=i.effect,l=i.textStyle; null==l.x&&(l.x=s.x),null==l.y&&(l.y=s.y+(s.r0+s.r)/2-5);for(var h=this.createTextShape(i.textStyle),m=this.createBackgroundShape(i.backgroundColor),V=s.x,U=s.y,d=s.r0+6,p=s.r-6,c=s.color,u=a.lift(c,.1),y=new o({highlightStyle:n.clone(s)}),g=[],b=a.getGradientColors(["#ff6400","#ffe100","#97ff00"],25),f=15,k=240,x=0;16>x;x++)g.push(new r({highlightStyle:{x:V,y:U,r0:d,r:p,startAngle:k-f,endAngle:k,brushType:"fill",color:u},_color:a.getLinearGradient(V+d*Math.cos(k,!0),U-d*Math.sin(k,!0),V+d*Math.cos(k-f,!0),U-d*Math.sin(k-f,!0),[[0,b[2*x]],[1,b[2*x+1]]])})),k-=f;k=360;for(var x=0;4>x;x++)g.push(new r({highlightStyle:{x:V,y:U,r0:d,r:p,startAngle:k-f,endAngle:k,brushType:"fill",color:u},_color:a.getLinearGradient(V+d*Math.cos(k,!0),U-d*Math.sin(k,!0),V+d*Math.cos(k-f,!0),U-d*Math.sin(k-f,!0),[[0,b[2*x+32]],[1,b[2*x+33]]])})),k-=f;var _=0;if(null!=i.progress){e(m),_=100*this.adjust(i.progress,[0,1]).toFixed(2)/5,y.highlightStyle.text=5*_+"%",e(y);for(var x=0;20>x;x++)g[x].highlightStyle.color=_>x?g[x]._color:u,e(g[x]);return e(h),void t()}return setInterval(function(){e(m),_+=_>=20?-20:1,e(y);for(var i=0;20>i;i++)g[i].highlightStyle.color=_>i?g[i]._color:u,e(g[i]);e(h),t()},s.timeInterval)},t}),i("zrender/loadingEffect/Spin",["require","./Base","../tool/util","../tool/color","../tool/area","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../tool/area"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#fff",textAlign:"start"},backgroundColor:"rgba(0, 0, 0, 0.8)"}),s=this.createTextShape(i.textStyle),l=10,h=o.getTextWidth(s.highlightStyle.text,s.highlightStyle.textFont),m=o.getTextHeight(s.highlightStyle.text,s.highlightStyle.textFont),V=n.merge(this.options.effect||{},{r0:9,r:15,n:18,color:"#fff",timeInterval:100}),U=this.getLocation(this.options.textStyle,h+l+2*V.r,Math.max(2*V.r,m));V.x=U.x+V.r,V.y=s.highlightStyle.y=U.y+U.height/2,s.highlightStyle.x=V.x+V.r+l;for(var d=this.createBackgroundShape(i.backgroundColor),p=V.n,c=V.x,u=V.y,y=V.r0,g=V.r,b=V.color,f=[],k=Math.round(180/p),x=0;p>x;x++)f[x]=new r({highlightStyle:{x:c,y:u,r0:y,r:g,startAngle:k*x*2,endAngle:k*x*2+k,color:a.alpha(b,(x+1)/p),brushType:"fill"}});var _=[0,c,u];return setInterval(function(){e(d),_[0]-=.3;for(var i=0;p>i;i++)f[i].rotation=_,e(f[i]);e(s),t()},V.timeInterval)},t}),i("zrender/loadingEffect/Whirling",["require","./Base","../tool/util","../tool/area","../shape/Ring","../shape/Droplet","../shape/Circle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/area"),o=e("../shape/Ring"),r=e("../shape/Droplet"),s=e("../shape/Circle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888",textAlign:"start"},backgroundColor:"rgba(250, 250, 250, 0.8)"}),l=this.createTextShape(i.textStyle),h=10,m=a.getTextWidth(l.highlightStyle.text,l.highlightStyle.textFont),V=a.getTextHeight(l.highlightStyle.text,l.highlightStyle.textFont),U=n.merge(this.options.effect||{},{r:18,colorIn:"#fff",colorOut:"#555",colorWhirl:"#6cf",timeInterval:50}),d=this.getLocation(this.options.textStyle,m+h+2*U.r,Math.max(2*U.r,V));U.x=d.x+U.r,U.y=l.highlightStyle.y=d.y+d.height/2,l.highlightStyle.x=U.x+U.r+h;var p=this.createBackgroundShape(i.backgroundColor),c=new r({highlightStyle:{a:Math.round(U.r/2),b:Math.round(U.r-U.r/6),brushType:"fill",color:U.colorWhirl}}),u=new s({highlightStyle:{r:Math.round(U.r/6),brushType:"fill",color:U.colorIn}}),y=new o({highlightStyle:{r0:Math.round(U.r-U.r/3),r:U.r,brushType:"fill",color:U.colorOut}}),g=[0,U.x,U.y];return c.highlightStyle.x=u.highlightStyle.x=y.highlightStyle.x=g[1],c.highlightStyle.y=u.highlightStyle.y=y.highlightStyle.y=g[2],setInterval(function(){e(p),e(y),g[0]-=.3,c.rotation=g,e(c),e(u),e(l),t()},U.timeInterval)},t}),i("echarts/theme/macarons",[],function(){var e={color:["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3","#e5cf0d","#97b552","#95706d","#dc69aa","#07a2a4","#9a7fd1","#588dd5","#f5994e","#c05050","#59678c","#c9ab00","#7eb00a","#6f5553","#c14089"],title:{textStyle:{fontWeight:"normal",color:"#008acd"}},dataRange:{itemWidth:15,color:["#5ab1ef","#e0ffff"]},toolbox:{color:["#1e90ff","#1e90ff","#1e90ff","#1e90ff"],effectiveColor:"#ff4500"},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#008acd"},crossStyle:{color:"#008acd"},shadowStyle:{color:"rgba(200,200,200,0.2)"}}},dataZoom:{dataBackgroundColor:"#efefff",fillerColor:"rgba(182,162,222,0.2)",handleColor:"#008acd"},grid:{borderColor:"#eee"},categoryAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitLine:{lineStyle:{color:["#eee"]}}},valueAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.1)","rgba(200,200,200,0.1)"]}},splitLine:{lineStyle:{color:["#eee"]}}},polar:{axisLine:{lineStyle:{color:"#ddd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(200,200,200,0.2)"]}},splitLine:{lineStyle:{color:"#ddd"}}},timeline:{lineStyle:{color:"#008acd"},controlStyle:{normal:{color:"#008acd"},emphasis:{color:"#008acd"}},symbol:"emptyCircle",symbolSize:3},bar:{itemStyle:{normal:{barBorderRadius:5},emphasis:{barBorderRadius:5}}},line:{smooth:!0,symbol:"emptyCircle",symbolSize:3},k:{itemStyle:{normal:{color:"#d87a80",color0:"#2ec7c9",lineStyle:{color:"#d87a80",color0:"#2ec7c9"}}}},scatter:{symbol:"circle",symbolSize:4},radar:{symbol:"emptyCircle",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:"#ddd"},label:{textStyle:{color:"#d87a80"}}},emphasis:{areaStyle:{color:"#fe994e"}}}},force:{itemStyle:{normal:{linkStyle:{color:"#1e90ff"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}},emphasis:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}}}},gauge:{axisLine:{lineStyle:{color:[[.2,"#2ec7c9"],[.8,"#5ab1ef"],[1,"#d87a80"]],width:10}},axisTick:{splitNumber:10,length:15,lineStyle:{color:"auto"}},splitLine:{length:22,lineStyle:{color:"auto"}},pointer:{width:5}},textStyle:{fontFamily:"微软雅黑, Arial, Verdana, sans-serif"}};return e}),i("echarts/theme/infographic",[],function(){var e={color:["#C1232B","#B5C334","#FCCE10","#E87C25","#27727B","#FE8463","#9BCA63","#FAD860","#F3A43B","#60C0DD","#D7504B","#C6E579","#F4E001","#F0805A","#26C0C0"],title:{textStyle:{fontWeight:"normal",color:"#27727B"}},dataRange:{x:"right",y:"center",itemWidth:5,itemHeight:25,color:["#C1232B","#FCCE10"]},toolbox:{color:["#C1232B","#B5C334","#FCCE10","#E87C25","#27727B","#FE8463","#9BCA63","#FAD860","#F3A43B","#60C0DD"],effectiveColor:"#ff4500"},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#27727B",type:"dashed"},crossStyle:{color:"#27727B"},shadowStyle:{color:"rgba(200,200,200,0.3)"}}},dataZoom:{dataBackgroundColor:"rgba(181,195,52,0.3)",fillerColor:"rgba(181,195,52,0.2)",handleColor:"#27727B"},grid:{borderWidth:0},categoryAxis:{axisLine:{lineStyle:{color:"#27727B"}},splitLine:{show:!1}},valueAxis:{axisLine:{show:!1},splitArea:{show:!1},splitLine:{lineStyle:{color:["#ccc"],type:"dashed"}}},polar:{axisLine:{lineStyle:{color:"#ddd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(200,200,200,0.2)"]}},splitLine:{lineStyle:{color:"#ddd"}}},timeline:{lineStyle:{color:"#27727B"},controlStyle:{normal:{color:"#27727B"},emphasis:{color:"#27727B"}},symbol:"emptyCircle",symbolSize:3},line:{itemStyle:{normal:{borderWidth:2,borderColor:"#fff",lineStyle:{width:3}},emphasis:{borderWidth:0}},symbol:"circle",symbolSize:3.5},k:{itemStyle:{normal:{color:"#C1232B",color0:"#B5C334",lineStyle:{width:1,color:"#C1232B",color0:"#B5C334"}}}},scatter:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(200,200,200,0.5)"},emphasis:{borderWidth:0}},symbol:"star4",symbolSize:4},radar:{symbol:"emptyCircle",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:"#ddd"},label:{textStyle:{color:"#C1232B"}}},emphasis:{areaStyle:{color:"#fe994e"},label:{textStyle:{color:"rgb(100,0,0)"}}}}},force:{itemStyle:{normal:{linkStyle:{color:"#27727B"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}},emphasis:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}}}},gauge:{center:["50%","80%"],radius:"100%",startAngle:180,endAngle:0,axisLine:{show:!0,lineStyle:{color:[[.2,"#B5C334"],[.8,"#27727B"],[1,"#C1232B"]],width:"40%"}},axisTick:{splitNumber:2,length:5,lineStyle:{color:"#fff"}},axisLabel:{textStyle:{color:"#fff",fontWeight:"bolder"}},splitLine:{length:"5%",lineStyle:{color:"#fff"}},pointer:{width:"40%",length:"80%",color:"#fff"},title:{offsetCenter:[0,-20],textStyle:{color:"auto",fontSize:20}},detail:{offsetCenter:[0,0],textStyle:{color:"auto",fontSize:40}}},textStyle:{fontFamily:"微软雅黑, Arial, Verdana, sans-serif"}};return e}),i("zrender/dep/excanvas",["require"],function(){return document.createElement("canvas").getContext?G_vmlCanvasManager=!1:!function(){function e(){return this.context_||(this.context_=new f(this))}function t(e,t){var i=O.call(arguments,2);return function(){return e.apply(t,i.concat(O.call(arguments)))}}function i(e){return String(e).replace(/&/g,"&").replace(/"/g,""")}function n(e,t,i){e.namespaces[t]||e.namespaces.add(t,i,"#default#VML")}function a(e){if(n(e,"g_vml_","urn:schemas-microsoft-com:vml"),n(e,"g_o_","urn:schemas-microsoft-com:office:office"),!e.styleSheets.ex_canvas_){var t=e.createStyleSheet();t.owningElement.id="ex_canvas_",t.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}function o(e){var t=e.srcElement;switch(e.propertyName){case"width":t.getContext().clearRect(),t.style.width=t.attributes.width.nodeValue+"px",t.firstChild.style.width=t.clientWidth+"px";break;case"height":t.getContext().clearRect(),t.style.height=t.attributes.height.nodeValue+"px",t.firstChild.style.height=t.clientHeight+"px"}}function r(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width=t.clientWidth+"px",t.firstChild.style.height=t.clientHeight+"px")}function s(){return[[1,0,0],[0,1,0],[0,0,1]]}function l(e,t){for(var i=s(),n=0;3>n;n++)for(var a=0;3>a;a++){for(var o=0,r=0;3>r;r++)o+=e[n][r]*t[r][a];i[n][a]=o}return i}function h(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.lineWidth=e.lineWidth,t.miterLimit=e.miterLimit,t.shadowBlur=e.shadowBlur,t.shadowColor=e.shadowColor,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY,t.strokeStyle=e.strokeStyle,t.globalAlpha=e.globalAlpha,t.font=e.font,t.textAlign=e.textAlign,t.textBaseline=e.textBaseline,t.scaleX_=e.scaleX_,t.scaleY_=e.scaleY_,t.lineScale_=e.lineScale_}function m(e){var t=e.indexOf("(",3),i=e.indexOf(")",t+1),n=e.substring(t+1,i).split(",");return(4!=n.length||"a"!=e.charAt(3))&&(n[3]=1),n}function V(e){return parseFloat(e)/100}function U(e,t,i){return Math.min(i,Math.max(t,e))}function d(e){var t,i,n,a,o,r;if(a=parseFloat(e[0])/360%360,0>a&&a++,o=U(V(e[1]),0,1),r=U(V(e[2]),0,1),0==o)t=i=n=r;else{var s=.5>r?r*(1+o):r+o-r*o,l=2*r-s;t=p(l,s,a+1/3),i=p(l,s,a),n=p(l,s,a-1/3)}return"#"+D[Math.floor(255*t)]+D[Math.floor(255*i)]+D[Math.floor(255*n)]}function p(e,t,i){return 0>i&&i++,i>1&&i--,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function c(e){if(e in R)return R[e];var t,i=1;if(e=String(e),"#"==e.charAt(0))t=e;else if(/^rgb/.test(e)){for(var n,a=m(e),t="#",o=0;3>o;o++)n=-1!=a[o].indexOf("%")?Math.floor(255*V(a[o])):+a[o],t+=D[U(n,0,255)];i=+a[3]}else if(/^hsl/.test(e)){var a=m(e);t=d(a),i=a[3]}else t=H[e]||e;return R[e]={color:t,alpha:i}}function u(e){if(Y[e])return Y[e];var t,i=document.createElement("div"),n=i.style;try{n.font=e,t=n.fontFamily.split(",")[0]}catch(a){}return Y[e]={style:n.fontStyle||G.style,variant:n.fontVariant||G.variant,weight:n.fontWeight||G.weight,size:n.fontSize||G.size,family:t||G.family}}function y(e,t){var i={};for(var n in e)i[n]=e[n];var a=parseFloat(t.currentStyle.fontSize),o=parseFloat(e.size);return i.size="number"==typeof e.size?e.size:-1!=e.size.indexOf("px")?o:-1!=e.size.indexOf("em")?a*o:-1!=e.size.indexOf("%")?a/100*o:-1!=e.size.indexOf("pt")?o/.75:a,i}function g(e){return e.style+" "+e.variant+" "+e.weight+" "+e.size+"px '"+e.family+"'"}function b(e){return Q[e]||"square"}function f(e){this.m_=s(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.strokeStyle="#000",this.fillStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=1*A,this.globalAlpha=1,this.font="12px 微软雅黑",this.textAlign="left",this.textBaseline="alphabetic",this.canvas=e;var t="width:"+e.clientWidth+"px;height:"+e.clientHeight+"px;overflow:hidden;position:absolute",i=e.ownerDocument.createElement("div");i.style.cssText=t,e.appendChild(i);var n=i.cloneNode(!1);n.style.backgroundColor="#fff",n.style.filter="alpha(opacity=0)",e.appendChild(n),this.element_=i,this.scaleX_=1,this.scaleY_=1,this.lineScale_=1}function k(e,t,i,n){e.currentPath_.push({type:"bezierCurveTo",cp1x:t.x,cp1y:t.y,cp2x:i.x,cp2y:i.y,x:n.x,y:n.y}),e.currentX_=n.x,e.currentY_=n.y}function x(e,t){var i=c(e.strokeStyle),n=i.color,a=i.alpha*e.globalAlpha,o=e.lineScale_*e.lineWidth;1>o&&(a*=o),t.push("')}function _(e,t,i,n){var a=e.fillStyle,o=e.scaleX_,r=e.scaleY_,s=n.x-i.x,l=n.y-i.y;if(a instanceof v){var h=0,m={x:0,y:0},V=0,U=1;if("gradient"==a.type_){var d=a.x0_/o,p=a.y0_/r,u=a.x1_/o,y=a.y1_/r,g=L(e,d,p),b=L(e,u,y),f=b.x-g.x,k=b.y-g.y;h=180*Math.atan2(f,k)/Math.PI,0>h&&(h+=360),1e-6>h&&(h=0)}else{var g=L(e,a.x0_,a.y0_);m={x:(g.x-i.x)/s,y:(g.y-i.y)/l},s/=o*A,l/=r*A;var x=C.max(s,l);V=2*a.r0_/x,U=2*a.r1_/x-V}var _=a.colors_;_.sort(function(e,t){return e.offset-t.offset});for(var W=_.length,X=_[0].color,K=_[W-1].color,I=_[0].alpha*e.globalAlpha,J=_[W-1].alpha*e.globalAlpha,S=[],E=0;W>E;E++){var F=_[E];S.push(F.offset*U+V+" "+F.color)}t.push('')}else if(a instanceof w){if(s&&l){var T=-i.x,z=-i.y;t.push("')}}else{var M=c(e.fillStyle),O=M.color,P=M.alpha*e.globalAlpha;t.push('')}}function L(e,t,i){var n=e.m_;return{x:A*(t*n[0][0]+i*n[1][0]+n[2][0])-M,y:A*(t*n[0][1]+i*n[1][1]+n[2][1])-M}}function W(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1][0])&&isFinite(e[1][1])&&isFinite(e[2][0])&&isFinite(e[2][1])}function X(e,t,i){if(W(t)&&(e.m_=t,e.scaleX_=Math.sqrt(t[0][0]*t[0][0]+t[0][1]*t[0][1]),e.scaleY_=Math.sqrt(t[1][0]*t[1][0]+t[1][1]*t[1][1]),i)){var n=t[0][0]*t[1][1]-t[0][1]*t[1][0];e.lineScale_=z(T(n))}}function v(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,this.y1_=0,this.r1_=0,this.colors_=[]}function w(e,t){switch(I(e),t){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=t;break;default:K("SYNTAX_ERR")}this.src_=e.src,this.width_=e.width,this.height_=e.height}function K(e){throw new J(e)}function I(e){e&&1==e.nodeType&&"IMG"==e.tagName||K("TYPE_MISMATCH_ERR"),"complete"!=e.readyState&&K("INVALID_STATE_ERR")}function J(e){this.code=this[e],this.message=e+": DOM Exception "+this.code}var C=Math,S=C.round,E=C.sin,F=C.cos,T=C.abs,z=C.sqrt,A=10,M=A/2,O=(+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1],Array.prototype.slice);a(document);var P={init:function(e){var i=e||document;i.createElement("canvas"),i.attachEvent("onreadystatechange",t(this.init_,this,i))},init_:function(e){for(var t=e.getElementsByTagName("canvas"),i=0;iN;N++)for(var B=0;16>B;B++)D[16*N+B]=N.toString(16)+B.toString(16);var H={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},R={},G={style:"normal",variant:"normal",weight:"normal",size:12,family:"微软雅黑"},Y={},Q={butt:"flat",round:"round"},Z=f.prototype;Z.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null),this.element_.innerHTML=""},Z.beginPath=function(){this.currentPath_=[]},Z.moveTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:"moveTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Z.lineTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:"lineTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Z.bezierCurveTo=function(e,t,i,n,a,o){var r=L(this,a,o),s=L(this,e,t),l=L(this,i,n);k(this,s,l,r)},Z.quadraticCurveTo=function(e,t,i,n){var a=L(this,e,t),o=L(this,i,n),r={x:this.currentX_+2/3*(a.x-this.currentX_),y:this.currentY_+2/3*(a.y-this.currentY_)},s={x:r.x+(o.x-this.currentX_)/3,y:r.y+(o.y-this.currentY_)/3};k(this,r,s,o)},Z.arc=function(e,t,i,n,a,o){i*=A;var r=o?"at":"wa",s=e+F(n)*i-M,l=t+E(n)*i-M,h=e+F(a)*i-M,m=t+E(a)*i-M;s!=h||o||(s+=.125);var V=L(this,e,t),U=L(this,s,l),d=L(this,h,m);this.currentPath_.push({type:r,x:V.x,y:V.y,radius:i,xStart:U.x,yStart:U.y,xEnd:d.x,yEnd:d.y})},Z.rect=function(e,t,i,n){this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath()},Z.strokeRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.stroke(),this.currentPath_=a},Z.fillRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.fill(),this.currentPath_=a},Z.createLinearGradient=function(e,t,i,n){var a=new v("gradient");return a.x0_=e,a.y0_=t,a.x1_=i,a.y1_=n,a},Z.createRadialGradient=function(e,t,i,n,a,o){var r=new v("gradientradial");return r.x0_=e,r.y0_=t,r.r0_=i,r.x1_=n,r.y1_=a,r.r1_=o,r},Z.drawImage=function(e){var t,i,n,a,o,r,s,l,h=e.runtimeStyle.width,m=e.runtimeStyle.height;e.runtimeStyle.width="auto",e.runtimeStyle.height="auto";var V=e.width,U=e.height;if(e.runtimeStyle.width=h,e.runtimeStyle.height=m,3==arguments.length)t=arguments[1],i=arguments[2],o=r=0,s=n=V,l=a=U;else if(5==arguments.length)t=arguments[1],i=arguments[2],n=arguments[3],a=arguments[4],o=r=0,s=V,l=U;else{if(9!=arguments.length)throw Error("Invalid number of arguments");o=arguments[1],r=arguments[2],s=arguments[3],l=arguments[4],t=arguments[5],i=arguments[6],n=arguments[7],a=arguments[8]}var d=L(this,t,i),p=[],c=10,u=10,y=b=1;if(p.push(" '),(o||r)&&p.push('
    '),p.push('
    '),(o||r)&&p.push("
    "),p.push("
    "),this.element_.insertAdjacentHTML("BeforeEnd",p.join(""))},Z.stroke=function(e){var t=[],i=10,n=10;t.push("o.x)&&(o.x=l.x),(null==a.y||l.yo.y)&&(o.y=l.y))}t.push(' ">'),e?_(this,t,a,o):x(this,t),t.push(""),this.element_.insertAdjacentHTML("beforeEnd",t.join(""))},Z.fill=function(){this.stroke(!0)},Z.closePath=function(){this.currentPath_.push({type:"close"})},Z.save=function(){var e={};h(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=l(s(),this.m_)},Z.restore=function(){this.aStack_.length&&(h(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},Z.translate=function(e,t){var i=[[1,0,0],[0,1,0],[e,t,1]];X(this,l(i,this.m_),!1)},Z.rotate=function(e){var t=F(e),i=E(e),n=[[t,i,0],[-i,t,0],[0,0,1]];X(this,l(n,this.m_),!1)},Z.scale=function(e,t){var i=[[e,0,0],[0,t,0],[0,0,1]];X(this,l(i,this.m_),!0)},Z.transform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,l(r,this.m_),!0)},Z.setTransform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,r,!0)},Z.drawText_=function(e,t,n,a,o){var r=this.m_,s=1e3,l=0,h=s,m={x:0,y:0},V=[],U=y(u(this.font),this.element_),d=g(U),p=this.element_.currentStyle,c=this.textAlign.toLowerCase();switch(c){case"left":case"center":case"right":break;case"end":c="ltr"==p.direction?"right":"left";break;case"start":c="rtl"==p.direction?"right":"left";break;default:c="left"}switch(this.textBaseline){case"hanging":case"top":m.y=U.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":m.y=-U.size/2.25}switch(c){case"right":l=s,h=.05;break;case"center":l=h=s/2}var b=L(this,t+m.x,n+m.y);V.push(''),o?x(this,V):_(this,V,{x:-l,y:0},{x:h,y:U.size});var f=r[0][0].toFixed(3)+","+r[1][0].toFixed(3)+","+r[0][1].toFixed(3)+","+r[1][1].toFixed(3)+",0,0",k=S(b.x/A)+","+S(b.y/A);V.push('','',''),this.element_.insertAdjacentHTML("beforeEnd",V.join(""))},Z.fillText=function(e,t,i,n){this.drawText_(e,t,i,n,!1)},Z.strokeText=function(e,t,i,n){this.drawText_(e,t,i,n,!0)},Z.measureText=function(e){if(!this.textMeasureEl_){var t='';this.element_.insertAdjacentHTML("beforeEnd",t),this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";try{this.textMeasureEl_.style.font=this.font}catch(n){}return this.textMeasureEl_.appendChild(i.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},Z.clip=function(){},Z.arcTo=function(){},Z.createPattern=function(e,t){return new w(e,t)},v.prototype.addColorStop=function(e,t){t=c(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var q=J.prototype=new Error;q.INDEX_SIZE_ERR=1,q.DOMSTRING_SIZE_ERR=2,q.HIERARCHY_REQUEST_ERR=3,q.WRONG_DOCUMENT_ERR=4,q.INVALID_CHARACTER_ERR=5,q.NO_DATA_ALLOWED_ERR=6,q.NO_MODIFICATION_ALLOWED_ERR=7,q.NOT_FOUND_ERR=8,q.NOT_SUPPORTED_ERR=9,q.INUSE_ATTRIBUTE_ERR=10,q.INVALID_STATE_ERR=11,q.SYNTAX_ERR=12,q.INVALID_MODIFICATION_ERR=13,q.NAMESPACE_ERR=14,q.INVALID_ACCESS_ERR=15,q.VALIDATION_ERR=16,q.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=P,CanvasRenderingContext2D=f,CanvasGradient=v,CanvasPattern=w,DOMException=J}(),G_vmlCanvasManager}),i("zrender/mixin/Eventful",["require"],function(){var e=function(){this._handlers={}};return e.prototype.one=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!0,ctx:i||this}),this):this},e.prototype.bind=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!1,ctx:i||this}),this):this},e.prototype.unbind=function(e,t){var i=this._handlers;if(!e)return this._handlers={},this;if(t){if(i[e]){for(var n=[],a=0,o=i[e].length;o>a;a++)i[e][a].h!=t&&n.push(i[e][a]);i[e]=n}i[e]&&0===i[e].length&&delete i[e]}else delete i[e];return this},e.prototype.dispatch=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>3&&(t=Array.prototype.slice.call(t,1));for(var n=this._handlers[e],a=n.length,o=0;a>o;){switch(i){case 1:n[o].h.call(n[o].ctx);break;case 2:n[o].h.call(n[o].ctx,t[1]);break;case 3:n[o].h.call(n[o].ctx,t[1],t[2]);break;default:n[o].h.apply(n[o].ctx,t)}n[o].one?(n.splice(o,1),a--):o++}}return this},e.prototype.dispatchWithContext=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>4&&(t=Array.prototype.slice.call(t,1,t.length-1));for(var n=t[t.length-1],a=this._handlers[e],o=a.length,r=0;o>r;){switch(i){case 1:a[r].h.call(n);break;case 2:a[r].h.call(n,t[1]);break;case 3:a[r].h.call(n,t[1],t[2]);break;default:a[r].h.apply(n,t)}a[r].one?(a.splice(r,1),o--):r++}}return this},e}),i("zrender/tool/log",["require","../config"],function(e){var t=e("../config");return function(){if(0!==t.debugMode)if(1==t.debugMode)for(var e in arguments)throw new Error(arguments[e]);else if(t.debugMode>1)for(var e in arguments)console.log(arguments[e])}}),i("zrender/tool/guid",[],function(){var e=2311;return function(){return"zrender__"+e++}}),i("zrender/Handler",["require","./config","./tool/env","./tool/event","./tool/util","./tool/vector","./tool/matrix","./mixin/Eventful"],function(e){"use strict";function t(e,t){return function(i,n){return e.call(t,i,n)}}function i(e,t){return function(i,n,a){return e.call(t,i,n,a)}}function n(e){for(var i=d.length;i--;){var n=d[i];e["_"+n+"Handler"]=t(c[n],e)}}function a(e,t,i){if(this._draggingTarget&&this._draggingTarget.id==e.id||e.isSilent())return!1;var n=this._event;if(e.isCover(t,i)){e.hoverable&&this.storage.addHover(e);for(var a=e.parent;a;){if(a.clipShape&&!a.clipShape.isCover(this._mouseX,this._mouseY))return!1;a=a.parent}return this._lastHover!=e&&(this._processOutShape(n),this._processDragLeave(n),this._lastHover=e,this._processDragEnter(n)),this._processOverShape(n),this._processDragOver(n),this._hasfound=1,!0}return!1}var o=e("./config"),r=e("./tool/env"),s=e("./tool/event"),l=e("./tool/util"),h=e("./tool/vector"),m=e("./tool/matrix"),V=o.EVENT,U=e("./mixin/Eventful"),d=["resize","click","dblclick","mousewheel","mousemove","mouseout","mouseup","mousedown","touchstart","touchend","touchmove"],p=function(e){if(window.G_vmlCanvasManager)return!0;e=e||window.event;var t=e.toElement||e.relatedTarget||e.srcElement||e.target;return t&&t.className.match(o.elementClassName)},c={resize:function(e){e=e||window.event,this._lastHover=null,this._isMouseDown=0,this.dispatch(V.RESIZE,e)},click:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.CLICK,e),this._mousemoveHandler(e)}},dblclick:function(e,t){if(p(e)||t){e=e||window.event,e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.DBLCLICK,e),this._mousemoveHandler(e)}},mousewheel:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.wheelDelta||-e.detail,n=i>0?1.1:1/1.1,a=!1,o=this._mouseX,r=this._mouseY;this.painter.eachBuildinLayer(function(t){var i=t.position;if(t.zoomable){t.__zoom=t.__zoom||1;var l=t.__zoom;l*=n,l=Math.max(Math.min(t.maxZoom,l),t.minZoom),n=l/t.__zoom,t.__zoom=l,i[0]-=(o-i[0])*(n-1),i[1]-=(r-i[1])*(n-1),t.scale[0]*=n,t.scale[1]*=n,t.dirty=!0,a=!0,s.stop(e)}}),a&&this.painter.refresh(),this._dispatchAgency(this._lastHover,V.MOUSEWHEEL,e),this._mousemoveHandler(e)}},mousemove:function(e,t){if((p(e)||t)&&!this.painter.isLoading()){e=this._zrenderEventFixed(e),this._lastX=this._mouseX,this._lastY=this._mouseY,this._mouseX=s.getX(e),this._mouseY=s.getY(e);var i=this._mouseX-this._lastX,n=this._mouseY-this._lastY;this._processDragStart(e),this._hasfound=0,this._event=e,this._iterateAndFindHover(),this._hasfound||((!this._draggingTarget||this._lastHover&&this._lastHover!=this._draggingTarget)&&(this._processOutShape(e), this._processDragLeave(e)),this._lastHover=null,this.storage.delHover(),this.painter.clearHover());var a="default";if(this._draggingTarget)this.storage.drift(this._draggingTarget.id,i,n),this._draggingTarget.modSelf(),this.storage.addHover(this._draggingTarget),this._clickThreshold++;else if(this._isMouseDown){var o=!1;this.painter.eachBuildinLayer(function(e){e.panable&&(a="move",e.position[0]+=i,e.position[1]+=n,o=!0,e.dirty=!0)}),o&&this.painter.refresh()}this._draggingTarget||this._hasfound&&this._lastHover.draggable?a="move":this._hasfound&&this._lastHover.clickable&&(a="pointer"),this.root.style.cursor=a,this._dispatchAgency(this._lastHover,V.MOUSEMOVE,e),(this._draggingTarget||this._hasfound||this.storage.hasHoverShape())&&this.painter.refreshHover()}},mouseout:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.toElement||e.relatedTarget;if(i!=this.root)for(;i&&9!=i.nodeType;){if(i==this.root)return void this._mousemoveHandler(e);i=i.parentNode}e.zrenderX=this._lastX,e.zrenderY=this._lastY,this.root.style.cursor="default",this._isMouseDown=0,this._processOutShape(e),this._processDrop(e),this._processDragEnd(e),this.painter.isLoading()||this.painter.refreshHover(),this.dispatch(V.GLOBALOUT,e)}},mousedown:function(e,t){if(p(e)||t){if(this._clickThreshold=0,2==this._lastDownButton)return this._lastDownButton=e.button,void(this._mouseDownTarget=null);this._lastMouseDownMoment=new Date,e=this._zrenderEventFixed(e),this._isMouseDown=1,this._mouseDownTarget=this._lastHover,this._dispatchAgency(this._lastHover,V.MOUSEDOWN,e),this._lastDownButton=e.button}},mouseup:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e),this.root.style.cursor="default",this._isMouseDown=0,this._mouseDownTarget=null,this._dispatchAgency(this._lastHover,V.MOUSEUP,e),this._processDrop(e),this._processDragEnd(e))},touchstart:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._lastTouchMoment=new Date,this._mobileFindFixed(e),this._mousedownHandler(e))},touchmove:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._mousemoveHandler(e),this._isDragging&&s.stop(e))},touchend:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e,!0),this._mouseupHandler(e);var i=new Date;i-this._lastTouchMoment=0;o--){var r=n[o];if(t!==r.zlevel&&(i=this.painter.getLayer(r.zlevel,i),a[0]=this._mouseX,a[1]=this._mouseY,i.needTransform&&(m.invert(e,i.transform),h.applyTransform(a,a,e))),this._findHover(r,a[0],a[1]))break}}}();var y=[{x:10},{x:-20},{x:10,y:10},{y:-20}];return u.prototype._mobileFindFixed=function(e){this._lastHover=null,this._mouseX=e.zrenderX,this._mouseY=e.zrenderY,this._event=e,this._iterateAndFindHover();for(var t=0;!this._lastHover&&ts;s++){var h=e[s];if(n!==h.zlevel&&(i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),n=h.zlevel,i=this.getLayer(n),i.isBuildin||r("ZLevel "+n+" has been used by unkown layer "+i.id),o=i.ctx,i.unusedCount=0,(i.dirty||t)&&i.clear(),i.needTransform&&(o.save(),i.setTransform(o))),(i.dirty||t)&&!h.invisible&&(!h.onbrush||h.onbrush&&!h.onbrush(o,!1)))if(a.catchBrushException)try{h.brush(o,!1,this.refreshNextFrame)}catch(m){r(m,"brush error of "+h.type,h)}else h.brush(o,!1,this.refreshNextFrame);h.__dirty=!1}i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),this.eachBuildinLayer(this._postProcessLayer)},h.prototype.getLayer=function(e){var t=this._layers[e];return t||(t=new l(e,this),t.isBuildin=!0,this._layerConfig[e]&&o.merge(t,this._layerConfig[e],!0),t.updateTransform(),this.insertLayer(e,t),t.initContext()),t},h.prototype.insertLayer=function(e,t){if(this._layers[e])return void r("ZLevel "+e+" has been used already");if(!n(t))return void r("Layer of zlevel "+e+" is not valid");var i=this._zlevelList.length,a=null,o=-1;if(i>0&&e>this._zlevelList[0]){for(o=0;i-1>o&&!(this._zlevelList[o]e);o++);a=this._layers[this._zlevelList[o]]}this._zlevelList.splice(o+1,0,e);var s=a?a.dom:this._bgDom;s.nextSibling?s.parentNode.insertBefore(t.dom,s.nextSibling):s.parentNode.appendChild(t.dom),this._layers[e]=t},h.prototype.eachLayer=function(e,t){for(var i=0;in;n++){var o=e[n],r=o.zlevel,s=t[r];if(s){if(s.elCount++,s.dirty)continue;s.dirty=o.__dirty}}this.eachBuildinLayer(function(e,t){i[t]!==e.elCount&&(e.dirty=!0)})},h.prototype.refreshShapes=function(e,t){for(var i=0,n=e.length;n>i;i++){var a=e[i];a.modSelf()}return this.refresh(t),this},h.prototype.setLoadingEffect=function(e){return this._loadingEffect=e,this},h.prototype.clear=function(){return this.eachBuildinLayer(this._clearLayer),this},h.prototype._clearLayer=function(e){e.clear()},h.prototype.modLayer=function(e,t){if(t){this._layerConfig[e]?o.merge(this._layerConfig[e],t,!0):this._layerConfig[e]=t;var i=this._layers[e];i&&o.merge(i,this._layerConfig[e],!0)}},h.prototype.delLayer=function(e){var t=this._layers[e];t&&(this.modLayer(e,{position:t.position,rotation:t.rotation,scale:t.scale}),t.dom.parentNode.removeChild(t.dom),delete this._layers[e],this._zlevelList.splice(o.indexOf(this._zlevelList,e),1))},h.prototype.refreshHover=function(){this.clearHover();for(var e=this.storage.getHoverShapes(!0),t=0,i=e.length;i>t;t++)this._brushHover(e[t]);var n=this._layers.hover.ctx;return n.flush&&n.flush(),this.storage.delHover(),this},h.prototype.clearHover=function(){var e=this._layers.hover;return e&&e.clear(),this},h.prototype.showLoading=function(e){return this._loadingEffect&&this._loadingEffect.stop(),e&&this.setLoadingEffect(e),this._loadingEffect.start(this),this.loading=!0,this},h.prototype.hideLoading=function(){return this._loadingEffect.stop(),this.clearHover(),this.loading=!1,this},h.prototype.isLoading=function(){return this.loading},h.prototype.resize=function(){var e=this._domRoot;e.style.display="none";var t=this._getWidth(),i=this._getHeight();if(e.style.display="",this._width!=t||i!=this._height){this._width=t,this._height=i,e.style.width=t+"px",e.style.height=i+"px";for(var n in this._layers)this._layers[n].resize(t,i);this.refresh(null,!0)}return this},h.prototype.clearLayer=function(e){var t=this._layers[e];t&&t.clear()},h.prototype.dispose=function(){this.isLoading()&&this.hideLoading(),this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},h.prototype.getDomHover=function(){return this._layers.hover.dom},h.prototype.toDataURL=function(e,t,i){if(window.G_vmlCanvasManager)return null;var n=new l("image",this);this._bgDom.appendChild(n.dom),n.initContext();var o=n.ctx;n.clearColor=t||"#fff",n.clear();var s=this;this.storage.iterShape(function(e){if(!e.invisible&&(!e.onbrush||e.onbrush&&!e.onbrush(o,!1)))if(a.catchBrushException)try{e.brush(o,!1,s.refreshNextFrame)}catch(t){r(t,"brush error of "+e.type,e)}else e.brush(o,!1,s.refreshNextFrame)},{normal:"up",update:!0});var h=n.dom.toDataURL(e,i);return o=null,this._bgDom.removeChild(n.dom),h},h.prototype.getWidth=function(){return this._width},h.prototype.getHeight=function(){return this._height},h.prototype._getWidth=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientWidth||parseInt(t.width,10))-parseInt(t.paddingLeft,10)-parseInt(t.paddingRight,10)).toFixed(0)-0},h.prototype._getHeight=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientHeight||parseInt(t.height,10))-parseInt(t.paddingTop,10)-parseInt(t.paddingBottom,10)).toFixed(0)-0},h.prototype._brushHover=function(e){var t=this._layers.hover.ctx;if(!e.onbrush||e.onbrush&&!e.onbrush(t,!0)){var i=this.getLayer(e.zlevel);if(i.needTransform&&(t.save(),i.setTransform(t)),a.catchBrushException)try{e.brush(t,!0,this.refreshNextFrame)}catch(n){r(n,"hoverBrush error of "+e.type,e)}else e.brush(t,!0,this.refreshNextFrame);i.needTransform&&t.restore()}},h.prototype._shapeToImage=function(t,i,n,a,o){var r=document.createElement("canvas"),s=r.getContext("2d");r.style.width=n+"px",r.style.height=a+"px",r.setAttribute("width",n*o),r.setAttribute("height",a*o),s.clearRect(0,0,n*o,a*o);var l={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],i&&i.brush(s,!1);var h=e("./shape/Image"),m=new h({id:t,style:{x:0,y:0,image:r}});return null!=l.position&&(m.position=i.position=l.position),null!=l.rotation&&(m.rotation=i.rotation=l.rotation),null!=l.scale&&(m.scale=i.scale=l.scale),m},h.prototype._createShapeToImageProcessor=function(){if(window.G_vmlCanvasManager)return i;var e=this;return function(t,i,n,o){return e._shapeToImage(t,i,n,o,a.devicePixelRatio)}},h}),i("zrender/Storage",["require","./tool/util","./Group"],function(e){"use strict";function t(e,t){return e.zlevel==t.zlevel?e.z==t.z?e.__renderidx-t.__renderidx:e.z-t.z:e.zlevel-t.zlevel}var i=e("./tool/util"),n=e("./Group"),a={hover:!1,normal:"down",update:!1},o=function(){this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],this._shapeListOffset=0};return o.prototype.iterShape=function(e,t){if(t||(t=a),t.hover)for(var i=0,n=this._hoverElements.length;n>i;i++){var o=this._hoverElements[i];if(o.updateTransform(),e(o))return this}switch(t.update&&this.updateShapeList(),t.normal){case"down":for(var n=this._shapeList.length;n--;)if(e(this._shapeList[n]))return this;break;default:for(var i=0,n=this._shapeList.length;n>i;i++)if(e(this._shapeList[i]))return this}return this},o.prototype.getHoverShapes=function(e){for(var i=[],n=0,a=this._hoverElements.length;a>n;n++){i.push(this._hoverElements[n]);var o=this._hoverElements[n].hoverConnect;if(o){var r;o=o instanceof Array?o:[o];for(var s=0,l=o.length;l>s;s++)r=o[s].id?o[s]:this.get(o[s]),r&&i.push(r)}}if(i.sort(t),e)for(var n=0,a=i.length;a>n;n++)i[n].updateTransform();return i},o.prototype.getShapeList=function(e){return e&&this.updateShapeList(),this._shapeList},o.prototype.updateShapeList=function(){this._shapeListOffset=0;for(var e=0,i=this._roots.length;i>e;e++){var n=this._roots[e];this._updateAndAddShape(n)}this._shapeList.length=this._shapeListOffset;for(var e=0,i=this._shapeList.length;i>e;e++)this._shapeList[e].__renderidx=e;this._shapeList.sort(t)},o.prototype._updateAndAddShape=function(e,t){if(!e.ignore)if(e.updateTransform(),e.clipShape&&(e.clipShape.parent=e,e.clipShape.updateTransform(),t?(t=t.slice(),t.push(e.clipShape)):t=[e.clipShape]),"group"==e.type){for(var i=0;i0},o.prototype.addRoot=function(e){this._elements[e.id]||(e instanceof n&&e.addChildrenToStorage(this),this.addToMap(e),this._roots.push(e))},o.prototype.delRoot=function(e){if("undefined"==typeof e){for(var t=0;tt;t++)this.delRoot(e[t]);else{var r;r="string"==typeof e?this._elements[e]:e;var s=i.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof n&&r.delChildrenFromStorage(this))}},o.prototype.addToMap=function(e){return e instanceof n&&(e._storage=this),e.modSelf(),this._elements[e.id]=e,this},o.prototype.get=function(e){return this._elements[e]},o.prototype.delFromMap=function(e){var t=this._elements[e];return t&&(delete this._elements[e],t instanceof n&&(t._storage=null)),this},o.prototype.dispose=function(){this._elements=this._renderList=this._roots=this._hoverElements=null},o}),i("zrender/animation/Animation",["require","./Clip","../tool/color","../tool/util","../tool/event"],function(e){"use strict";function t(e,t){return e[t]}function i(e,t,i){e[t]=i}function n(e,t,i){return(t-e)*i+e}function a(e,t,i,a,o){var r=e.length;if(1==o)for(var s=0;r>s;s++)a[s]=n(e[s],t[s],i);else for(var l=e[0].length,s=0;r>s;s++)for(var h=0;l>h;h++)a[s][h]=n(e[s][h],t[s][h],i)}function o(e){switch(typeof e){case"undefined":case"string":return!1}return"undefined"!=typeof e.length}function r(e,t,i,n,a,o,r,l,h){var m=e.length;if(1==h)for(var V=0;m>V;V++)l[V]=s(e[V],t[V],i[V],n[V],a,o,r);else for(var U=e[0].length,V=0;m>V;V++)for(var d=0;U>d;d++)l[V][d]=s(e[V][d],t[V][d],i[V][d],n[V][d],a,o,r)}function s(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}function l(e){if(o(e)){var t=e.length;if(o(e[0])){for(var i=[],n=0;t>n;n++)i.push(c.call(e[n]));return i}return c.call(e)}return e}function h(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Math.floor(e[2]),"rgba("+e.join(",")+")"}var m=e("./Clip"),V=e("../tool/color"),U=e("../tool/util"),d=e("../tool/event").Dispatcher,p=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},c=Array.prototype.slice,u=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0,d.call(this)};u.prototype={add:function(e){this._clips.push(e)},remove:function(e){if(e.__inStep)e.__needsRemove=!0;else{var t=U.indexOf(this._clips,e);t>=0&&this._clips.splice(t,1)}},_update:function(){for(var e=(new Date).getTime(),t=e-this._time,i=this._clips,n=i.length,a=[],o=[],r=0;n>r;r++){var s=i[r];s.__inStep=!0;var l=s.step(e);s.__inStep=!1,l&&(a.push(l),o.push(s))}for(var r=0;n>r;)i[r].__needsRemove?(i[r]=i[n-1],i.pop(),n--):r++;n=a.length;for(var r=0;n>r;r++)o[r].fire(a[r]);this._time=e,this.onframe(t),this.dispatch("frame",t),this.stage.update&&this.stage.update()},start:function(){function e(){t._running&&(p(e),t._update())}var t=this;this._running=!0,this._time=(new Date).getTime(),p(e)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var i=new y(e,t.loop,t.getter,t.setter);return i.animation=this,i},constructor:u},U.merge(u.prototype,d.prototype,!0);var y=function(e,n,a,o){this._tracks={},this._target=e,this._loop=n||!1,this._getter=a||t,this._setter=o||i,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};return y.prototype={when:function(e,t){for(var i in t)this._tracks[i]||(this._tracks[i]=[],0!==e&&this._tracks[i].push({time:0,value:l(this._getter(this._target,i))})),this._tracks[i].push({time:parseInt(e,10),value:t[i]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var t=this,i=this._setter,l=this._getter,U="spline"===e,d=function(){if(t._clipCount--,0===t._clipCount){t._tracks={};for(var e=t._doneList.length,i=0;e>i;i++)t._doneList[i].call(t)}},p=function(p,c){var u=p.length;if(u){var y=p[0].value,g=o(y),b=!1,f=g&&o(y[0])?2:1;p.sort(function(e,t){return e.time-t.time});var k;if(u){k=p[u-1].time;for(var x=[],_=[],L=0;u>L;L++){x.push(p[L].time/k);var W=p[L].value;"string"==typeof W&&(W=V.toArray(W),0===W.length&&(W[0]=W[1]=W[2]=0,W[3]=1),b=!0),_.push(W)}var X,L,v,w,K,I,J,C=0,S=0;if(b)var E=[0,0,0,0];var F=function(e,o){if(S>o){for(X=Math.min(C+1,u-1),L=X;L>=0&&!(x[L]<=o);L--);L=Math.min(L,u-2)}else{for(L=C;u>L&&!(x[L]>o);L++);L=Math.min(L-1,u-2)}C=L,S=o;var m=x[L+1]-x[L];if(0!==m){if(v=(o-x[L])/m,U)if(K=_[L],w=_[0===L?L:L-1],I=_[L>u-2?u-1:L+1],J=_[L>u-3?u-1:L+2],g)r(w,K,I,J,v,v*v,v*v*v,l(e,c),f);else{var V;b?(V=r(w,K,I,J,v,v*v,v*v*v,E,1),V=h(E)):V=s(w,K,I,J,v,v*v,v*v*v),i(e,c,V)}else if(g)a(_[L],_[L+1],v,l(e,c),f);else{var V;b?(a(_[L],_[L+1],v,E,1),V=h(E)):V=n(_[L],_[L+1],v),i(e,c,V)}for(L=0;L=t[1]&&(e=t[1]),e},t.prototype.getLocation=function(e,t,i){var n=null!=e.x?e.x:"center";switch(n){case"center":n=Math.floor((this.canvasWidth-t)/2);break;case"left":n=0;break;case"right":n=this.canvasWidth-t}var a=null!=e.y?e.y:"center";switch(a){case"center":a=Math.floor((this.canvasHeight-i)/2);break;case"top":a=0;break;case"bottom":a=this.canvasHeight-i}return{x:n,y:a,width:t,height:i}},t}),i("zrender/Layer",["require","./mixin/Transformable","./tool/util","./config"],function(e){function t(){return!1}function i(e,t,i){var n=document.createElement(t),a=i.getWidth(),o=i.getHeight();return n.style.position="absolute",n.style.left=0,n.style.top=0,n.style.width=a+"px",n.style.height=o+"px",n.width=a*r.devicePixelRatio,n.height=o*r.devicePixelRatio,n.setAttribute("data-zr-dom-id",e),n}var n=e("./mixin/Transformable"),a=e("./tool/util"),o=window.G_vmlCanvasManager,r=e("./config"),s=function(e,a){this.id=e,this.dom=i(e,"canvas",a),this.dom.onselectstart=t,this.dom.style["-webkit-user-select"]="none",this.dom.style["user-select"]="none",this.dom.style["-webkit-touch-callout"]="none",this.dom.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",this.dom.className=r.elementClassName,o&&o.initElement(this.dom),this.domBack=null,this.ctxBack=null,this.painter=a,this.unusedCount=0,this.config=null,this.dirty=!0,this.elCount=0,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.zoomable=!1,this.panable=!1,this.maxZoom=1/0,this.minZoom=0,n.call(this)};return s.prototype.initContext=function(){this.ctx=this.dom.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctx.scale(e,e)},s.prototype.createBackBuffer=function(){if(!o){this.domBack=i("back-"+this.id,"canvas",this.painter),this.ctxBack=this.domBack.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctxBack.scale(e,e)}},s.prototype.resize=function(e,t){var i=r.devicePixelRatio;this.dom.style.width=e+"px",this.dom.style.height=t+"px",this.dom.setAttribute("width",e*i),this.dom.setAttribute("height",t*i),1!=i&&this.ctx.scale(i,i),this.domBack&&(this.domBack.setAttribute("width",e*i),this.domBack.setAttribute("height",t*i),1!=i&&this.ctxBack.scale(i,i))},s.prototype.clear=function(){var e=this.dom,t=this.ctx,i=e.width,n=e.height,a=this.clearColor&&!o,s=this.motionBlur&&!o,l=this.lastFrameAlpha,h=r.devicePixelRatio;if(s&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(e,0,0,i/h,n/h)),t.clearRect(0,0,i/h,n/h),a&&(t.save(),t.fillStyle=this.clearColor,t.fillRect(0,0,i/h,n/h),t.restore()),s){var m=this.domBack;t.save(),t.globalAlpha=l,t.drawImage(m,0,0,i/h,n/h),t.restore()}},a.merge(s.prototype,n.prototype),s}),i("zrender/shape/Text",["require","../tool/area","./Base","../tool/util"],function(e){ var t=e("../tool/area"),i=e("./Base"),n=function(e){i.call(this,e)};return n.prototype={type:"text",brush:function(e,i){var n=this.style;if(i&&(n=this.getHighlightStyle(n,this.highlightStyle||{})),"undefined"!=typeof n.text&&n.text!==!1){e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.textFont&&(e.font=n.textFont),e.textAlign=n.textAlign||"start",e.textBaseline=n.textBaseline||"middle";var a,o=(n.text+"").split("\n"),r=t.getTextHeight("国",n.textFont),s=this.getRect(n),l=n.x;a="top"==n.textBaseline?s.y:"bottom"==n.textBaseline?s.y+r:s.y+r/2;for(var h=0,m=o.length;m>h;h++){if(n.maxWidth)switch(n.brushType){case"fill":e.fillText(o[h],l,a,n.maxWidth);break;case"stroke":e.strokeText(o[h],l,a,n.maxWidth);break;case"both":e.fillText(o[h],l,a,n.maxWidth),e.strokeText(o[h],l,a,n.maxWidth);break;default:e.fillText(o[h],l,a,n.maxWidth)}else switch(n.brushType){case"fill":e.fillText(o[h],l,a);break;case"stroke":e.strokeText(o[h],l,a);break;case"both":e.fillText(o[h],l,a),e.strokeText(o[h],l,a);break;default:e.fillText(o[h],l,a)}a+=r}e.restore()}},getRect:function(e){if(e.__rect)return e.__rect;var i=t.getTextWidth(e.text,e.textFont),n=t.getTextHeight(e.text,e.textFont),a=e.x;"end"==e.textAlign||"right"==e.textAlign?a-=i:"center"==e.textAlign&&(a-=i/2);var o;return o="top"==e.textBaseline?e.y:"bottom"==e.textBaseline?e.y-n:e.y-n/2,e.__rect={x:a,y:o,width:i,height:n},e.__rect}},e("../tool/util").inherits(n,i),n}),i("zrender/shape/Rectangle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"rectangle",_buildRadiusPath:function(e,t){var i,n,a,o,r=t.x,s=t.y,l=t.width,h=t.height,m=t.radius;"number"==typeof m?i=n=a=o=m:m instanceof Array?1===m.length?i=n=a=o=m[0]:2===m.length?(i=a=m[0],n=o=m[1]):3===m.length?(i=m[0],n=o=m[1],a=m[2]):(i=m[0],n=m[1],a=m[2],o=m[3]):i=n=a=o=0;var V;i+n>l&&(V=i+n,i*=l/V,n*=l/V),a+o>l&&(V=a+o,a*=l/V,o*=l/V),n+a>h&&(V=n+a,n*=h/V,a*=h/V),i+o>h&&(V=i+o,i*=h/V,o*=h/V),e.moveTo(r+i,s),e.lineTo(r+l-n,s),0!==n&&e.quadraticCurveTo(r+l,s,r+l,s+n),e.lineTo(r+l,s+h-a),0!==a&&e.quadraticCurveTo(r+l,s+h,r+l-a,s+h),e.lineTo(r+o,s+h),0!==o&&e.quadraticCurveTo(r,s+h,r,s+h-o),e.lineTo(r,s+i),0!==i&&e.quadraticCurveTo(r,s,r+i,s)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y)),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("zrender/tool/area",["require","./util","./curve"],function(e){"use strict";function t(e){return e%=C,0>e&&(e+=C),e}function i(e,t,i,o){if(!t||!e)return!1;var r=e.type;L=L||W.getContext();var s=n(e,t,i,o);if("undefined"!=typeof s)return s;if(e.buildPath&&L.isPointInPath)return a(e,L,t,i,o);switch(r){case"ellipse":return!0;case"trochoid":var l="out"==t.location?t.r1+t.r2+t.d:t.r1-t.r2+t.d;return d(t,i,o,l);case"rose":return d(t,i,o,t.maxr);default:return!1}}function n(e,t,i,n){var a=e.type;switch(a){case"bezier-curve":return"undefined"==typeof t.cpX2?l(t.xStart,t.yStart,t.cpX1,t.cpY1,t.xEnd,t.yEnd,t.lineWidth,i,n):s(t.xStart,t.yStart,t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd,t.lineWidth,i,n);case"line":return r(t.xStart,t.yStart,t.xEnd,t.yEnd,t.lineWidth,i,n);case"polyline":return m(t.pointList,t.lineWidth,i,n);case"ring":return V(t.x,t.y,t.r0,t.r,i,n);case"circle":return d(t.x,t.y,t.r,i,n);case"sector":var o=t.startAngle*Math.PI/180,h=t.endAngle*Math.PI/180;return t.clockWise||(o=-o,h=-h),p(t.x,t.y,t.r0,t.r,o,h,!t.clockWise,i,n);case"path":return t.pathArray&&k(t.pathArray,Math.max(t.lineWidth,5),t.brushType,i,n);case"polygon":case"star":case"isogon":return c(t.pointList,i,n);case"text":var u=t.__rect||e.getRect(t);return U(u.x,u.y,u.width,u.height,i,n);case"rectangle":case"image":return U(t.x,t.y,t.width,t.height,i,n)}}function a(e,t,i,n,a){return t.beginPath(),e.buildPath(t,i),t.closePath(),t.isPointInPath(n,a)}function o(e,t,n,a){return!i(e,t,n,a)}function r(e,t,i,n,a,o,r){if(0===a)return!1;var s=Math.max(a,5),l=0,h=e;if(r>t+s&&r>n+s||t-s>r&&n-s>r||o>e+s&&o>i+s||e-s>o&&i-s>o)return!1;if(e===i)return Math.abs(o-e)<=s/2;l=(t-n)/(e-i),h=(e*n-i*t)/(e-i);var m=l*o-r+h,V=m*m/(l*l+1);return s/2*s/2>=V}function s(e,t,i,n,a,o,r,s,l,h,m){if(0===l)return!1;var V=Math.max(l,5);if(m>t+V&&m>n+V&&m>o+V&&m>s+V||t-V>m&&n-V>m&&o-V>m&&s-V>m||h>e+V&&h>i+V&&h>a+V&&h>r+V||e-V>h&&i-V>h&&a-V>h&&r-V>h)return!1;var U=X.cubicProjectPoint(e,t,i,n,a,o,r,s,h,m,null);return V/2>=U}function l(e,t,i,n,a,o,r,s,l){if(0===r)return!1;var h=Math.max(r,5);if(l>t+h&&l>n+h&&l>o+h||t-h>l&&n-h>l&&o-h>l||s>e+h&&s>i+h&&s>a+h||e-h>s&&i-h>s&&a-h>s)return!1;var m=X.quadraticProjectPoint(e,t,i,n,a,o,s,l,null);return h/2>=m}function h(e,i,n,a,o,r,s,l,h){if(0===s)return!1;var m=Math.max(s,5);l-=e,h-=i;var V=Math.sqrt(l*l+h*h);if(V-m>n||n>V+m)return!1;if(Math.abs(a-o)>=C)return!0;if(r){var U=a;a=t(o),o=t(U)}else a=t(a),o=t(o);a>o&&(o+=C);var d=Math.atan2(h,l);return 0>d&&(d+=C),d>=a&&o>=d||d+C>=a&&o>=d+C}function m(e,t,i,n){for(var t=Math.max(t,10),a=0,o=e.length-1;o>a;a++){var s=e[a][0],l=e[a][1],h=e[a+1][0],m=e[a+1][1];if(r(s,l,h,m,t,i,n))return!0}return!1}function V(e,t,i,n,a,o){var r=(a-e)*(a-e)+(o-t)*(o-t);return n*n>r&&r>i*i}function U(e,t,i,n,a,o){return a>=e&&e+i>=a&&o>=t&&t+n>=o}function d(e,t,i,n,a){return i*i>(n-e)*(n-e)+(a-t)*(a-t)}function p(e,t,i,n,a,o,r,s,l){return h(e,t,(i+n)/2,a,o,r,n-i,s,l)}function c(e,t,i){for(var n=e.length,a=0,o=0,r=n-1;n>o;o++){var s=e[r][0],l=e[r][1],h=e[o][0],m=e[o][1];a+=u(s,l,h,m,t,i),r=o}return 0!==a}function u(e,t,i,n,a,o){if(o>t&&o>n||t>o&&n>o)return 0;if(n==t)return 0;var r=t>n?1:-1,s=(o-t)/(n-t),l=s*(i-e)+e;return l>a?r:0}function y(){var e=E[0];E[0]=E[1],E[1]=e}function g(e,t,i,n,a,o,r,s,l,h){if(h>t&&h>n&&h>o&&h>s||t>h&&n>h&&o>h&&s>h)return 0;var m=X.cubicRootAt(t,n,o,s,h,S);if(0===m)return 0;for(var V,U,d=0,p=-1,c=0;m>c;c++){var u=S[c],g=X.cubicAt(e,i,a,r,u);l>g||(0>p&&(p=X.cubicExtrema(t,n,o,s,E),E[1]1&&y(),V=X.cubicAt(t,n,o,s,E[0]),p>1&&(U=X.cubicAt(t,n,o,s,E[1]))),d+=2==p?uV?1:-1:uU?1:-1:U>s?1:-1:uV?1:-1:V>s?1:-1)}return d}function b(e,t,i,n,a,o,r,s){if(s>t&&s>n&&s>o||t>s&&n>s&&o>s)return 0;var l=X.quadraticRootAt(t,n,o,s,S);if(0===l)return 0;var h=X.quadraticExtremum(t,n,o);if(h>=0&&1>=h){for(var m=0,V=X.quadraticAt(t,n,o,h),U=0;l>U;U++){var d=X.quadraticAt(e,i,a,S[U]);r>d||(m+=S[U]V?1:-1:V>o?1:-1)}return m}var d=X.quadraticAt(e,i,a,S[0]);return r>d?0:t>o?1:-1}function f(e,i,n,a,o,r,s,l){if(l-=i,l>n||-n>l)return 0;var h=Math.sqrt(n*n-l*l);if(S[0]=-h,S[1]=h,Math.abs(a-o)>=C){a=0,o=C;var m=r?1:-1;return s>=S[0]+e&&s<=S[1]+e?m:0}if(r){var h=a;a=t(o),o=t(h)}else a=t(a),o=t(o);a>o&&(o+=C);for(var V=0,U=0;2>U;U++){var d=S[U];if(d+e>s){var p=Math.atan2(l,d),m=r?1:-1;0>p&&(p=C+p),(p>=a&&o>=p||p+C>=a&&o>=p+C)&&(p>Math.PI/2&&p<1.5*Math.PI&&(m=-m),V+=m)}}return V}function k(e,t,i,n,a){var o=0,m=0,V=0,U=0,d=0,p=!0,c=!0;i=i||"fill";for(var y="stroke"===i||"both"===i,k="fill"===i||"both"===i,x=0;x0&&(k&&(o+=u(m,V,U,d,n,a)),0!==o))return!0;U=L[L.length-2],d=L[L.length-1],p=!1,c&&"A"!==_.command&&(c=!1,m=U,V=d)}switch(_.command){case"M":m=L[0],V=L[1];break;case"L":if(y&&r(m,V,L[0],L[1],t,n,a))return!0;k&&(o+=u(m,V,L[0],L[1],n,a)),m=L[0],V=L[1];break;case"C":if(y&&s(m,V,L[0],L[1],L[2],L[3],L[4],L[5],t,n,a))return!0;k&&(o+=g(m,V,L[0],L[1],L[2],L[3],L[4],L[5],n,a)),m=L[4],V=L[5];break;case"Q":if(y&&l(m,V,L[0],L[1],L[2],L[3],t,n,a))return!0;k&&(o+=b(m,V,L[0],L[1],L[2],L[3],n,a)),m=L[2],V=L[3];break;case"A":var W=L[0],X=L[1],v=L[2],w=L[3],K=L[4],I=L[5],J=Math.cos(K)*v+W,C=Math.sin(K)*w+X;c?(c=!1,U=J,d=C):o+=u(m,V,J,C);var S=(n-W)*w/v+W;if(y&&h(W,X,w,K,K+I,1-L[7],t,S,a))return!0;k&&(o+=f(W,X,w,K,K+I,1-L[7],S,a)),m=Math.cos(K+I)*v+W,V=Math.sin(K+I)*w+X;break;case"z":if(y&&r(m,V,U,d,t,n,a))return!0;p=!0}}return k&&(o+=u(m,V,U,d,n,a)),0!==o}function x(e,t){var i=e+":"+t;if(v[i])return v[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");for(var n=0,a=0,o=e.length;o>a;a++)n=Math.max(L.measureText(e[a]).width,n);return L.restore(),v[i]=n,++K>J&&(K=0,v={}),n}function _(e,t){var i=e+":"+t;if(w[i])return w[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");var n=(L.measureText("国").width+2)*e.length;return L.restore(),w[i]=n,++I>J&&(I=0,w={}),n}var L,W=e("./util"),X=e("./curve"),v={},w={},K=0,I=0,J=5e3,C=2*Math.PI,S=[-1,-1,-1],E=[-1,-1];return{isInside:i,isOutside:o,getTextWidth:x,getTextHeight:_,isInsidePath:k,isInsidePolygon:c,isInsideSector:p,isInsideCircle:d,isInsideLine:r,isInsideRect:U,isInsidePolyline:m,isInsideCubicStroke:s,isInsideQuadraticStroke:l}}),i("zrender/shape/Base",["require","../tool/matrix","../tool/guid","../tool/util","../tool/log","../mixin/Transformable","../mixin/Eventful","../tool/area","../tool/color"],function(e){function t(t,n,a,o,r,s,l){r&&(t.font=r),t.textAlign=s,t.textBaseline=l;var h=i(n,a,o,r,s,l);n=(n+"").split("\n");var m=e("../tool/area").getTextHeight("国",r);switch(l){case"top":o=h.y;break;case"bottom":o=h.y+m;break;default:o=h.y+m/2}for(var V=0,U=n.length;U>V;V++)t.fillText(n[V],a,o),o+=m}function i(t,i,n,a,o,r){var s=e("../tool/area"),l=s.getTextWidth(t,a),h=s.getTextHeight("国",a);switch(t=(t+"").split("\n"),o){case"end":case"right":i-=l;break;case"center":i-=l/2}switch(r){case"top":break;case"bottom":n-=h*t.length;break;default:n-=h*t.length/2}return{x:i,y:n,width:l,height:h*t.length}}var n=window.G_vmlCanvasManager,a=e("../tool/matrix"),o=e("../tool/guid"),r=e("../tool/util"),s=e("../tool/log"),l=e("../mixin/Transformable"),h=e("../mixin/Eventful"),m=function(e){e=e||{},this.id=e.id||o();for(var t in e)this[t]=e[t];this.style=this.style||{},this.highlightStyle=this.highlightStyle||null,this.parent=null,this.__dirty=!0,this.__clipShapes=[],l.call(this),h.call(this)};m.prototype.invisible=!1,m.prototype.ignore=!1,m.prototype.zlevel=0,m.prototype.draggable=!1,m.prototype.clickable=!1,m.prototype.hoverable=!0,m.prototype.z=0,m.prototype.brush=function(e,t){var i=this.beforeBrush(e,t);switch(e.beginPath(),this.buildPath(e,i),i.brushType){case"both":e.fill();case"stroke":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},m.prototype.beforeBrush=function(e,t){var i=this.style;return this.brushTypeOnly&&(i.brushType=this.brushTypeOnly),t&&(i=this.getHighlightStyle(i,this.highlightStyle||{},this.brushTypeOnly)),"stroke"==this.brushTypeOnly&&(i.strokeColor=i.strokeColor||i.color),e.save(),this.doClip(e),this.setContext(e,i),this.setTransform(e),i},m.prototype.afterBrush=function(e){e.restore()};var V=[["color","fillStyle"],["strokeColor","strokeStyle"],["opacity","globalAlpha"],["lineCap","lineCap"],["lineJoin","lineJoin"],["miterLimit","miterLimit"],["lineWidth","lineWidth"],["shadowBlur","shadowBlur"],["shadowColor","shadowColor"],["shadowOffsetX","shadowOffsetX"],["shadowOffsetY","shadowOffsetY"]];m.prototype.setContext=function(e,t){for(var i=0,n=V.length;n>i;i++){var a=V[i][0],o=t[a],r=V[i][1];"undefined"!=typeof o&&(e[r]=o)}};var U=a.create();return m.prototype.doClip=function(e){if(this.__clipShapes&&!n)for(var t=0;t=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height},m.prototype.drawText=function(e,i,n){if("undefined"!=typeof i.text&&i.text!==!1){var a=i.textColor||i.color||i.strokeColor;e.fillStyle=a;var o,r,s,l,h=10,m=i.textPosition||this.textPosition||"top";switch(m){case"inside":case"top":case"bottom":case"left":case"right":if(this.getRect){var V=(n||i).__rect||this.getRect(n||i);switch(m){case"inside":s=V.x+V.width/2,l=V.y+V.height/2,o="center",r="middle","stroke"!=i.brushType&&a==i.color&&(e.fillStyle="#fff");break;case"left":s=V.x-h,l=V.y+V.height/2,o="end",r="middle";break;case"right":s=V.x+V.width+h,l=V.y+V.height/2,o="start",r="middle";break;case"top":s=V.x+V.width/2,l=V.y-h,o="center",r="bottom";break;case"bottom":s=V.x+V.width/2,l=V.y+V.height+h,o="center",r="top"}}break;case"start":case"end":var U=i.pointList||[[i.xStart||0,i.yStart||0],[i.xEnd||0,i.yEnd||0]],d=U.length;if(2>d)return;var p,c,u,y;switch(m){case"start":p=U[1][0],c=U[0][0],u=U[1][1],y=U[0][1];break;case"end":p=U[d-2][0],c=U[d-1][0],u=U[d-2][1],y=U[d-1][1]}s=c,l=y;var g=Math.atan((u-y)/(c-p))/Math.PI*180;0>c-p?g+=180:0>u-y&&(g+=360),h=5,g>=30&&150>=g?(o="center",r="bottom",l-=h):g>150&&210>g?(o="right",r="middle",s-=h):g>=210&&330>=g?(o="center",r="top",l+=h):(o="left",r="middle",s+=h);break;case"specific":s=i.textX||0,l=i.textY||0,o="start",r="middle"}null!=s&&null!=l&&t(e,i.text,s,l,i.textFont,i.textAlign||o,i.textBaseline||r)}},m.prototype.modSelf=function(){this.__dirty=!0,this.style&&(this.style.__rect=null),this.highlightStyle&&(this.highlightStyle.__rect=null)},m.prototype.isSilent=function(){return!(this.hoverable||this.draggable||this.clickable||this.onmousemove||this.onmouseover||this.onmouseout||this.onmousedown||this.onmouseup||this.onclick||this.ondragenter||this.ondragover||this.ondragleave||this.ondrop)},r.merge(m.prototype,l.prototype,!0),r.merge(m.prototype,h.prototype,!0),m}),i("zrender/tool/curve",["require","./vector"],function(e){function t(e){return e>-u&&u>e}function i(e){return e>u||-u>e}function n(e,t,i,n,a){var o=1-a;return o*o*(o*e+3*a*t)+a*a*(a*n+3*o*i)}function a(e,t,i,n,a){var o=1-a;return 3*(((t-e)*o+2*(i-t)*a)*o+(n-i)*a*a)}function o(e,i,n,a,o,r){var s=a+3*(i-n)-e,l=3*(n-2*i+e),h=3*(i-e),m=e-o,V=l*l-3*s*h,U=l*h-9*s*m,d=h*h-3*l*m,p=0;if(t(V)&&t(U))if(t(l))r[0]=0;else{var c=-h/l;c>=0&&1>=c&&(r[p++]=c)}else{var u=U*U-4*V*d;if(t(u)){var b=U/V,c=-l/s+b,f=-b/2;c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f)}else if(u>0){var k=Math.sqrt(u),x=V*l+1.5*s*(-U+k),_=V*l+1.5*s*(-U-k);x=0>x?-Math.pow(-x,g):Math.pow(x,g),_=0>_?-Math.pow(-_,g):Math.pow(_,g);var c=(-l-(x+_))/(3*s);c>=0&&1>=c&&(r[p++]=c)}else{var L=(2*V*l-3*s*U)/(2*Math.sqrt(V*V*V)),W=Math.acos(L)/3,X=Math.sqrt(V),v=Math.cos(W),c=(-l-2*X*v)/(3*s),f=(-l+X*(v+y*Math.sin(W)))/(3*s),w=(-l+X*(v-y*Math.sin(W)))/(3*s);c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f),w>=0&&1>=w&&(r[p++]=w)}}return p}function r(e,n,a,o,r){var s=6*a-12*n+6*e,l=9*n+3*o-3*e-9*a,h=3*n-3*e,m=0;if(t(l)){if(i(s)){var V=-h/s;V>=0&&1>=V&&(r[m++]=V)}}else{var U=s*s-4*l*h;if(t(U))r[0]=-s/(2*l);else if(U>0){var d=Math.sqrt(U),V=(-s+d)/(2*l),p=(-s-d)/(2*l);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function s(e,t,i,n,a,o){var r=(t-e)*a+e,s=(i-t)*a+t,l=(n-i)*a+i,h=(s-r)*a+r,m=(l-s)*a+s,V=(m-h)*a+h;o[0]=e,o[1]=r,o[2]=h,o[3]=V,o[4]=V,o[5]=m,o[6]=l,o[7]=n}function l(e,t,i,a,o,r,s,l,h,m,V){var U,d=.005,p=1/0;b[0]=h,b[1]=m;for(var y=0;1>y;y+=.05){f[0]=n(e,i,o,s,y),f[1]=n(t,a,r,l,y);var g=c.distSquare(b,f);p>g&&(U=y,p=g)}p=1/0;for(var x=0;32>x&&!(u>d);x++){var _=U-d,L=U+d;f[0]=n(e,i,o,s,_),f[1]=n(t,a,r,l,_);var g=c.distSquare(f,b);if(_>=0&&p>g)U=_,p=g;else{k[0]=n(e,i,o,s,L),k[1]=n(t,a,r,l,L);var W=c.distSquare(k,b);1>=L&&p>W?(U=L,p=W):d*=.5}}return V&&(V[0]=n(e,i,o,s,U),V[1]=n(t,a,r,l,U)),Math.sqrt(p)}function h(e,t,i,n){var a=1-n;return a*(a*e+2*n*t)+n*n*i}function m(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}function V(e,n,a,o,r){var s=e-2*n+a,l=2*(n-e),h=e-o,m=0;if(t(s)){if(i(l)){var V=-h/l;V>=0&&1>=V&&(r[m++]=V)}}else{var U=l*l-4*s*h;if(t(U)){var V=-l/(2*s);V>=0&&1>=V&&(r[m++]=V)}else if(U>0){var d=Math.sqrt(U),V=(-l+d)/(2*s),p=(-l-d)/(2*s);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function U(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}function d(e,t,i,n,a){var o=(t-e)*n+e,r=(i-t)*n+t,s=(r-o)*n+o;a[0]=e,a[1]=o,a[2]=s,a[3]=s,a[4]=r,a[5]=i}function p(e,t,i,n,a,o,r,s,l){var m,V=.005,U=1/0;b[0]=r,b[1]=s;for(var d=0;1>d;d+=.05){f[0]=h(e,i,a,d),f[1]=h(t,n,o,d);var p=c.distSquare(b,f);U>p&&(m=d,U=p)}U=1/0;for(var y=0;32>y&&!(u>V);y++){var g=m-V,x=m+V;f[0]=h(e,i,a,g),f[1]=h(t,n,o,g);var p=c.distSquare(f,b);if(g>=0&&U>p)m=g,U=p;else{k[0]=h(e,i,a,x),k[1]=h(t,n,o,x);var _=c.distSquare(k,b);1>=x&&U>_?(m=x,U=_):V*=.5}}return l&&(l[0]=h(e,i,a,m),l[1]=h(t,n,o,m)),Math.sqrt(U)}var c=e("./vector"),u=1e-4,y=Math.sqrt(3),g=1/3,b=c.create(),f=c.create(),k=c.create();return{cubicAt:n,cubicDerivativeAt:a,cubicRootAt:o,cubicExtrema:r,cubicSubdivide:s,cubicProjectPoint:l,quadraticAt:h,quadraticDerivativeAt:m,quadraticRootAt:V,quadraticExtremum:U,quadraticSubdivide:d,quadraticProjectPoint:p}}),i("zrender/mixin/Transformable",["require","../tool/matrix","../tool/vector"],function(e){"use strict";function t(e){return e>-s&&s>e}function i(e){return e>s||-s>e}var n=e("../tool/matrix"),a=e("../tool/vector"),o=[0,0],r=n.translate,s=5e-5,l=function(){this.position||(this.position=[0,0]),"undefined"==typeof this.rotation&&(this.rotation=[0,0,0]),this.scale||(this.scale=[1,1,0,0]),this.needLocalTransform=!1,this.needTransform=!1};return l.prototype={constructor:l,updateNeedTransform:function(){this.needLocalTransform=i(this.rotation[0])||i(this.position[0])||i(this.position[1])||i(this.scale[0]-1)||i(this.scale[1]-1)},updateTransform:function(){this.updateNeedTransform();var e=this.parent&&this.parent.needTransform;if(this.needTransform=this.needLocalTransform||e,this.needTransform){var t=this.transform||n.create();if(n.identity(t),this.needLocalTransform){var a=this.scale;if(i(a[0])||i(a[1])){o[0]=-a[2]||0,o[1]=-a[3]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.scale(t,t,a),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}if(this.rotation instanceof Array){if(0!==this.rotation[0]){o[0]=-this.rotation[1]||0,o[1]=-this.rotation[2]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.rotate(t,t,this.rotation[0]),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}}else 0!==this.rotation&&n.rotate(t,t,this.rotation);(i(this.position[0])||i(this.position[1]))&&r(t,t,this.position)}e&&(this.needLocalTransform?n.mul(t,this.parent.transform,t):n.copy(t,this.parent.transform)),this.transform=t,this.invTransform=this.invTransform||n.create(),n.invert(this.invTransform,t)}},setTransform:function(e){if(this.needTransform){var t=this.transform;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},lookAt:function(){var e=a.create();return function(i){this.transform||(this.transform=n.create());var o=this.transform;if(a.sub(e,i,this.position),!t(e[0])||!t(e[1])){a.normalize(e,e);var r=this.scale;o[2]=e[0]*r[1],o[3]=e[1]*r[1],o[0]=e[1]*r[0],o[1]=-e[0]*r[0],o[4]=this.position[0],o[5]=this.position[1],this.decomposeTransform()}}}(),decomposeTransform:function(){if(this.transform){var e=this.transform,t=e[0]*e[0]+e[1]*e[1],n=this.position,a=this.scale,o=this.rotation;i(t-1)&&(t=Math.sqrt(t));var r=e[2]*e[2]+e[3]*e[3];i(r-1)&&(r=Math.sqrt(r)),n[0]=e[4],n[1]=e[5],a[0]=t,a[1]=r,a[2]=a[3]=0,o[0]=Math.atan2(-e[1]/r,e[0]/t),o[1]=o[2]=0}},transformCoordToLocal:function(e,t){var i=[e,t];return this.needTransform&&this.invTransform&&a.applyTransform(i,i,this.invTransform),i}},l}),i("zrender/Group",["require","./tool/guid","./tool/util","./mixin/Transformable","./mixin/Eventful"],function(e){var t=e("./tool/guid"),i=e("./tool/util"),n=e("./mixin/Transformable"),a=e("./mixin/Eventful"),o=function(e){e=e||{},this.id=e.id||t();for(var i in e)this[i]=e[i];this.type="group",this.clipShape=null,this._children=[],this._storage=null,this.__dirty=!0,n.call(this),a.call(this)};return o.prototype.ignore=!1,o.prototype.children=function(){return this._children.slice()},o.prototype.childAt=function(e){return this._children[e]},o.prototype.addChild=function(e){e!=this&&e.parent!=this&&(e.parent&&e.parent.removeChild(e),this._children.push(e),e.parent=this,this._storage&&this._storage!==e._storage&&(this._storage.addToMap(e),e instanceof o&&e.addChildrenToStorage(this._storage)))},o.prototype.removeChild=function(e){var t=i.indexOf(this._children,e);t>=0&&this._children.splice(t,1),e.parent=null,this._storage&&(this._storage.delFromMap(e.id),e instanceof o&&e.delChildrenFromStorage(this._storage))},o.prototype.clearChildren=function(){for(var e=0;et)){t=Math.min(t,1);var n="string"==typeof this.easing?i[this.easing]:this.easing,a="function"==typeof n?n(t):t;return this.fire("frame",a),1==t?this.loop?(this.restart(),"restart"):(this.__needsRemove=!0,"destroy"):null}},restart:function(){var e=(new Date).getTime(),t=(e-this._startTime)%this._life;this._startTime=(new Date).getTime()-t+this.gap,this.__needsRemove=!1},fire:function(e,t){for(var i=0,n=this._targetPool.length;n>i;i++)this["on"+e]&&this["on"+e](this._targetPool[i],t)},constructor:t},t}),i("zrender/animation/easing",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return 0===e?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return 1===e?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)))},ElasticOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*e)*Math.sin(2*(e-t)*Math.PI/n)+1)},ElasticInOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),(e*=2)<1?-.5*i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n):i*Math.pow(2,-10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return 1/2.75>e?7.5625*e*e:2/2.75>e?7.5625*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return.5>t?.5*e.BounceIn(2*t):.5*e.BounceOut(2*t-1)+.5}};return e}),i("echarts/chart/base",["require","zrender/shape/Image","../util/shape/Icon","../util/shape/MarkLine","../util/shape/Symbol","zrender/shape/Polyline","zrender/shape/ShapeBundle","../config","../util/ecData","../util/ecAnimation","../util/ecEffect","../util/accMath","../component/base","../layout/EdgeBundling","zrender/tool/util","zrender/tool/area"],function(e){function t(e){return null!=e.x&&null!=e.y}function i(e,t,i,n,a){p.call(this,e,t,i,n,a);var o=this;this.selectedMap={},this.lastShapeList=[],this.shapeHandler={onclick:function(){o.isClick=!0},ondragover:function(e){var t=e.target;t.highlightStyle=t.highlightStyle||{};var i=t.highlightStyle,n=i.brushTyep,a=i.strokeColor,r=i.lineWidth;i.brushType="stroke",i.strokeColor=o.ecTheme.calculableColor||h.calculableColor,i.lineWidth="icon"===t.type?30:10,o.zr.addHoverShape(t),setTimeout(function(){i&&(i.brushType=n,i.strokeColor=a,i.lineWidth=r)},20)},ondrop:function(e){null!=m.get(e.dragged,"data")&&(o.isDrop=!0)},ondragend:function(){o.isDragend=!0}}}var n=e("zrender/shape/Image"),a=e("../util/shape/Icon"),o=e("../util/shape/MarkLine"),r=e("../util/shape/Symbol"),s=e("zrender/shape/Polyline"),l=e("zrender/shape/ShapeBundle"),h=e("../config"),m=e("../util/ecData"),V=e("../util/ecAnimation"),U=e("../util/ecEffect"),d=e("../util/accMath"),p=e("../component/base"),c=e("../layout/EdgeBundling"),u=e("zrender/tool/util"),y=e("zrender/tool/area");return i.prototype={setCalculable:function(e){return e.dragEnableTime=this.ecTheme.DRAG_ENABLE_TIME||h.DRAG_ENABLE_TIME,e.ondragover=this.shapeHandler.ondragover,e.ondragend=this.shapeHandler.ondragend,e.ondrop=this.shapeHandler.ondrop,e},ondrop:function(e,t){if(this.isDrop&&e.target&&!t.dragIn){var i,n=e.target,a=e.dragged,o=m.get(n,"seriesIndex"),r=m.get(n,"dataIndex"),s=this.series,l=this.component.legend;if(-1===r){if(m.get(a,"seriesIndex")==o)return t.dragOut=t.dragIn=t.needRefresh=!0,void(this.isDrop=!1);i={value:m.get(a,"value"),name:m.get(a,"name")},this.type===h.CHART_TYPE_PIE&&i.value<0&&(i.value=0);for(var V=!1,U=s[o].data,p=0,c=U.length;c>p;p++)U[p].name===i.name&&"-"===U[p].value&&(s[o].data[p].value=i.value,V=!0);!V&&s[o].data.push(i),l&&l.add(i.name,a.style.color||a.style.strokeColor)}else i=s[o].data[r]||"-",null!=i.value?(s[o].data[r].value="-"!=i.value?d.accAdd(s[o].data[r].value,m.get(a,"value")):m.get(a,"value"),(this.type===h.CHART_TYPE_FUNNEL||this.type===h.CHART_TYPE_PIE)&&(l&&1===l.getRelatedAmount(i.name)&&this.component.legend.del(i.name),i.name+=this.option.nameConnector+m.get(a,"name"),l&&l.add(i.name,a.style.color||a.style.strokeColor))):s[o].data[r]="-"!=i?d.accAdd(s[o].data[r],m.get(a,"value")):m.get(a,"value");t.dragIn=t.dragIn||!0,this.isDrop=!1;var u=this;setTimeout(function(){u.zr.trigger("mousemove",e.event)},300)}},ondragend:function(e,t){if(this.isDragend&&e.target&&!t.dragOut){var i=e.target,n=m.get(i,"seriesIndex"),a=m.get(i,"dataIndex"),o=this.series;if(null!=o[n].data[a].value){o[n].data[a].value="-";var r=o[n].data[a].name,s=this.component.legend;s&&0===s.getRelatedAmount(r)&&s.del(r)}else o[n].data[a]="-";t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},onlegendSelected:function(e,t){var i=e.selected;for(var n in this.selectedMap)this.selectedMap[n]!=i[n]&&(t.needRefresh=!0),this.selectedMap[n]=i[n]},_buildPosition:function(){this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this._sIndex2ColorMap={},this.selectedMap={},this.xMarkMap={};for(var e,t,i,n,a=this.series,o={top:[],bottom:[],left:[],right:[],other:[]},r=0,s=a.length;s>r;r++)a[r].type===this.type&&(a[r]=this.reformOption(a[r]),this.legendHoverLink=a[r].legendHoverLink||this.legendHoverLink,e=a[r].xAxisIndex,t=a[r].yAxisIndex,i=this.component.xAxis.getAxis(e),n=this.component.yAxis.getAxis(t),i.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[i.getPosition()].push(r):n.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[n.getPosition()].push(r):o.other.push(r));for(var l in o)o[l].length>0&&this._buildSinglePosition(l,o[l]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){switch(e){case"bottom":case"top":this._buildHorizontal(t,a,n,this.xMarkMap);break;case"left":case"right":this._buildVertical(t,a,n,this.xMarkMap);break;case"other":this._buildOther(t,a,n,this.xMarkMap)}for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n,a,o=this.series,r=0,s={},l="__kener__stack__",m=this.component.legend,V=[],U=0,d=0,p=e.length;p>d;d++){if(t=o[e[d]],n=t.name,this._sIndex2ShapeMap[e[d]]=this._sIndex2ShapeMap[e[d]]||this.query(t,"symbol")||this._symbol[d%this._symbol.length],m){if(this.selectedMap[n]=m.isSelected(n),this._sIndex2ColorMap[e[d]]=m.getColor(n),a=m.getItemShape(n)){var c=a.style;if(this.type==h.CHART_TYPE_LINE)c.iconType="legendLineIcon",c.symbol=this._sIndex2ShapeMap[e[d]];else if(t.itemStyle.normal.barBorderWidth>0){var u=a.highlightStyle;c.brushType="both",c.x+=1,c.y+=1,c.width-=2,c.height-=2,c.strokeColor=u.strokeColor=t.itemStyle.normal.barBorderColor,u.lineWidth=3}m.setItemShape(n,a)}}else this.selectedMap[n]=!0,this._sIndex2ColorMap[e[d]]=this.zr.getColor(e[d]);this.selectedMap[n]&&(i=t.stack||l+e[d],null==s[i]?(s[i]=r,V[r]=[e[d]],r++):V[s[i]].push(e[d])),U=Math.max(U,t.data.length)}return{locationMap:V,maxDataLength:U}},_calculMarkMapXY:function(e,t,i){for(var n=this.series,a=0,o=t.length;o>a;a++)for(var r=0,s=t[a].length;s>r;r++){var l=t[a][r],h="xy"==i?0:"",m=this.component.grid,V=e[l];if("-1"!=i.indexOf("x")){V["counter"+h]>0&&(V["average"+h]=V["sum"+h]/V["counter"+h]);var U=this.component.xAxis.getAxis(n[l].xAxisIndex||0).getCoord(V["average"+h]);V["averageLine"+h]=[[U,m.getYend()],[U,m.getY()]],V["minLine"+h]=[[V["minX"+h],m.getYend()],[V["minX"+h],m.getY()]],V["maxLine"+h]=[[V["maxX"+h],m.getYend()],[V["maxX"+h],m.getY()]],V.isHorizontal=!1}if(h="xy"==i?1:"","-1"!=i.indexOf("y")){V["counter"+h]>0&&(V["average"+h]=V["sum"+h]/V["counter"+h]);var d=this.component.yAxis.getAxis(n[l].yAxisIndex||0).getCoord(V["average"+h]);V["averageLine"+h]=[[m.getX(),d],[m.getXend(),d]],V["minLine"+h]=[[m.getX(),V["minY"+h]],[m.getXend(),V["minY"+h]]],V["maxLine"+h]=[[m.getX(),V["maxY"+h]],[m.getXend(),V["maxY"+h]]],V.isHorizontal=!0}}},addLabel:function(e,t,i,n,a){var o=[i,t],r=this.deepMerge(o,"itemStyle.normal.label"),s=this.deepMerge(o,"itemStyle.emphasis.label"),l=r.textStyle||{},h=s.textStyle||{}; if(r.show){var m=e.style;m.text=this._getLabelText(t,i,n,"normal"),m.textPosition=null==r.position?"horizontal"===a?"right":"top":r.position,m.textColor=l.color,m.textFont=this.getFont(l),m.textAlign=l.align,m.textBaseline=l.baseline}if(s.show){var V=e.highlightStyle;V.text=this._getLabelText(t,i,n,"emphasis"),V.textPosition=r.show?e.style.textPosition:null==s.position?"horizontal"===a?"right":"top":s.position,V.textColor=h.color,V.textFont=this.getFont(h),V.textAlign=h.align,V.textBaseline=h.baseline}return e},_getLabelText:function(e,t,i,n){var a=this.deepQuery([t,e],"itemStyle."+n+".label.formatter");a||"emphasis"!==n||(a=this.deepQuery([t,e],"itemStyle.normal.label.formatter"));var o=this.getDataFromOption(t,"-");return a?"function"==typeof a?a.call(this.myChart,{seriesName:e.name,series:e,name:i,value:o,data:t,status:n}):"string"==typeof a?a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",e.name).replace("{b0}",i).replace("{c0}",this.numAddCommas(o)):void 0:o instanceof Array?null!=o[2]?this.numAddCommas(o[2]):o[0]+" , "+o[1]:this.numAddCommas(o)},buildMark:function(e){var t=this.series[e];this.selectedMap[t.name]&&(t.markLine&&this._buildMarkLine(e),t.markPoint&&this._buildMarkPoint(e))},_buildMarkPoint:function(e){for(var t,i,n=(this.markAttachStyle||{})[e],a=this.series[e],o=u.clone(a.markPoint),r=0,s=o.data.length;s>r;r++)t=o.data[r],i=this.getMarkCoord(e,t),t.x=null!=t.x?t.x:i[0],t.y=null!=t.y?t.y:i[1],!t.type||"max"!==t.type&&"min"!==t.type||(t.value=i[3],t.name=t.name||t.type,t.symbolSize=t.symbolSize||y.getTextWidth(i[3],this.getFont())/2+5);for(var l=this._markPoint(e,o),r=0,s=l.length;s>r;r++){var m=l[r];m.zlevel=a.zlevel,m.z=a.z+1;for(var V in n)m[V]=u.clone(n[V]);this.shapeList.push(m)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var r=0,s=l.length;s>r;r++)this.zr.addShape(l[r])},_buildMarkLine:function(e){for(var t,i=(this.markAttachStyle||{})[e],n=this.series[e],a=u.clone(n.markLine),o=0,r=a.data.length;r>o;o++){var s=a.data[o];!s.type||"max"!==s.type&&"min"!==s.type&&"average"!==s.type?t=[this.getMarkCoord(e,s[0]),this.getMarkCoord(e,s[1])]:(t=this.getMarkCoord(e,s),a.data[o]=[u.clone(s),{}],a.data[o][0].name=s.name||s.type,a.data[o][0].value="average"!==s.type?t[3]:+t[3].toFixed(null!=a.precision?a.precision:this.deepQuery([this.ecTheme,h],"markLine.precision")),t=t[2],s=[{},{}]),null!=t&&null!=t[0]&&null!=t[1]&&(a.data[o][0].x=null!=s[0].x?s[0].x:t[0][0],a.data[o][0].y=null!=s[0].y?s[0].y:t[0][1],a.data[o][1].x=null!=s[1].x?s[1].x:t[1][0],a.data[o][1].y=null!=s[1].y?s[1].y:t[1][1])}var m=this._markLine(e,a),V=a.large;if(V){var U=new l({style:{shapeList:m}}),d=m[0];if(d){u.merge(U.style,d.style),u.merge(U.highlightStyle={},d.highlightStyle),U.style.brushType="stroke",U.zlevel=n.zlevel,U.z=n.z+1,U.hoverable=!1;for(var p in i)U[p]=u.clone(i[p])}this.shapeList.push(U),this.zr.addShape(U),U._mark="largeLine";var c=a.effect;c.show&&(U.effect=c)}else{for(var o=0,r=m.length;r>o;o++){var y=m[o];y.zlevel=n.zlevel,y.z=n.z+1;for(var p in i)y[p]=u.clone(i[p]);this.shapeList.push(y)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var o=0,r=m.length;r>o;o++)this.zr.addShape(m[o])}},_markPoint:function(e,t){var i=this.series[e],n=this.component;u.merge(u.merge(t,u.clone(this.ecTheme.markPoint||{})),u.clone(h.markPoint)),t.name=i.name;var a,o,r,s,l,V,U,d=[],p=t.data,c=n.dataRange,y=n.legend,g=this.zr.getWidth(),b=this.zr.getHeight();if(t.large)a=this.getLargeMarkPointShape(e,t),a._mark="largePoint",a&&d.push(a);else for(var f=0,k=p.length;k>f;f++)null!=p[f].x&&null!=p[f].y&&(r=null!=p[f].value?p[f].value:"",y&&(o=y.getColor(i.name)),c&&(o=isNaN(r)?o:c.getColor(r),s=[p[f],t],l=this.deepQuery(s,"itemStyle.normal.color")||o,V=this.deepQuery(s,"itemStyle.emphasis.color")||l,null==l&&null==V)||(o=null==o?this.zr.getColor(e):o,p[f].tooltip=p[f].tooltip||t.tooltip||{trigger:"item"},p[f].name=null!=p[f].name?p[f].name:"",p[f].value=r,a=this.getSymbolShape(t,e,p[f],f,p[f].name,this.parsePercent(p[f].x,g),this.parsePercent(p[f].y,b),"pin",o,"rgba(0,0,0,0)","horizontal"),a._mark="point",U=this.deepMerge([p[f],t],"effect"),U.show&&(a.effect=U),i.type===h.CHART_TYPE_MAP&&(a._geo=this.getMarkGeo(p[f])),m.pack(a,i,e,p[f],f,p[f].name,r),d.push(a)));return d},_markLine:function(){function e(e,t){e[t]=e[t]instanceof Array?e[t].length>1?e[t]:[e[t][0],e[t][0]]:[e[t],e[t]]}return function(i,n){var a=this.series[i],o=this.component,r=o.dataRange,s=o.legend;u.merge(u.merge(n,u.clone(this.ecTheme.markLine||{})),u.clone(h.markLine));var l=s?s.getColor(a.name):this.zr.getColor(i);e(n,"symbol"),e(n,"symbolSize"),e(n,"symbolRotate");for(var V=n.data,U=[],d=this.zr.getWidth(),p=this.zr.getHeight(),y=0;yy;y++){var K=U[y],I=K.rawEdge||K,g=I.rawData,x=null!=g.value?g.value:"",J=this.getMarkLineShape(n,i,g,y,K.points,W,I.color);J._mark="line";var C=this.deepMerge([g[0],g[1],n],"effect");C.show&&(J.effect=C,J.effect.large=n.large),a.type===h.CHART_TYPE_MAP&&(J._geo=[this.getMarkGeo(g[0]),this.getMarkGeo(g[1])]),m.pack(J,a,i,g[0],y,g[0].name+(""!==g[1].name?" > "+g[1].name:""),x),v.push(J)}return v}}(),getMarkCoord:function(){return[0,0]},getSymbolShape:function(e,t,i,o,r,s,l,h,V,U,d){var p=[i,e],c=this.getDataFromOption(i,"-");h=this.deepQuery(p,"symbol")||h;var u=this.deepQuery(p,"symbolSize");u="function"==typeof u?u(c):u,"number"==typeof u&&(u=[u,u]);var y=this.deepQuery(p,"symbolRotate"),g=this.deepMerge(p,"itemStyle.normal"),b=this.deepMerge(p,"itemStyle.emphasis"),f=null!=g.borderWidth?g.borderWidth:g.lineStyle&&g.lineStyle.width;null==f&&(f=h.match("empty")?2:0);var k=null!=b.borderWidth?b.borderWidth:b.lineStyle&&b.lineStyle.width;null==k&&(k=f+2);var x=this.getItemStyleColor(g.color,t,o,i),_=this.getItemStyleColor(b.color,t,o,i),L=u[0],W=u[1],X=new a({style:{iconType:h.replace("empty","").toLowerCase(),x:s-L,y:l-W,width:2*L,height:2*W,brushType:"both",color:h.match("empty")?U:x||V,strokeColor:g.borderColor||x||V,lineWidth:f},highlightStyle:{color:h.match("empty")?U:_||x||V,strokeColor:b.borderColor||g.borderColor||_||x||V,lineWidth:k},clickable:this.deepQuery(p,"clickable")});return h.match("image")&&(X.style.image=h.replace(new RegExp("^image:\\/\\/"),""),X=new n({style:X.style,highlightStyle:X.highlightStyle,clickable:this.deepQuery(p,"clickable")})),null!=y&&(X.rotation=[y*Math.PI/180,s,l]),h.match("star")&&(X.style.iconType="star",X.style.n=h.replace("empty","").replace("star","")-0||5),"none"===h&&(X.invisible=!0,X.hoverable=!1),X=this.addLabel(X,e,i,r,d),h.match("empty")&&(null==X.style.textColor&&(X.style.textColor=X.style.strokeColor),null==X.highlightStyle.textColor&&(X.highlightStyle.textColor=X.highlightStyle.strokeColor)),m.pack(X,e,t,i,o,r),X._x=s,X._y=l,X._dataIndex=o,X._seriesIndex=t,X},getMarkLineShape:function(e,t,i,n,a,r,l){var h=null!=i[0].value?i[0].value:"-",m=null!=i[1].value?i[1].value:"-",V=[i[0].symbol||e.symbol[0],i[1].symbol||e.symbol[1]],U=[i[0].symbolSize||e.symbolSize[0],i[1].symbolSize||e.symbolSize[1]];U[0]="function"==typeof U[0]?U[0](h):U[0],U[1]="function"==typeof U[1]?U[1](m):U[1];var d=[this.query(i[0],"symbolRotate")||e.symbolRotate[0],this.query(i[1],"symbolRotate")||e.symbolRotate[1]],p=[i[0],i[1],e],c=this.deepMerge(p,"itemStyle.normal");c.color=this.getItemStyleColor(c.color,t,n,i);var u=this.deepMerge(p,"itemStyle.emphasis");u.color=this.getItemStyleColor(u.color,t,n,i);var y=c.lineStyle,g=u.lineStyle,b=y.width;null==b&&(b=c.borderWidth);var f=g.width;null==f&&(f=null!=u.borderWidth?u.borderWidth:b+2);var k=this.deepQuery(p,"smoothness");this.deepQuery(p,"smooth")||(k=0);var x=r?s:o,_=new x({style:{symbol:V,symbolSize:U,symbolRotate:d,brushType:"both",lineType:y.type,shadowColor:y.shadowColor||y.color||c.borderColor||c.color||l,shadowBlur:y.shadowBlur,shadowOffsetX:y.shadowOffsetX,shadowOffsetY:y.shadowOffsetY,color:c.color||l,strokeColor:y.color||c.borderColor||c.color||l,lineWidth:b,symbolBorderColor:c.borderColor||c.color||l,symbolBorder:c.borderWidth},highlightStyle:{shadowColor:g.shadowColor,shadowBlur:g.shadowBlur,shadowOffsetX:g.shadowOffsetX,shadowOffsetY:g.shadowOffsetY,color:u.color||c.color||l,strokeColor:g.color||y.color||u.borderColor||c.borderColor||u.color||c.color||l,lineWidth:f,symbolBorderColor:u.borderColor||c.borderColor||u.color||c.color||l,symbolBorder:null==u.borderWidth?c.borderWidth+2:u.borderWidth},clickable:this.deepQuery(p,"clickable")}),L=_.style;return r?(L.pointList=a,L.smooth=k):(L.xStart=a[0][0],L.yStart=a[0][1],L.xEnd=a[1][0],L.yEnd=a[1][1],L.curveness=k,_.updatePoints(_.style)),_=this.addLabel(_,e,i[0],i[0].name+" : "+i[1].name)},getLargeMarkPointShape:function(e,t){var i,n,a,o,s,l,h=this.series[e],m=this.component,V=t.data,U=m.dataRange,d=m.legend,p=[V[0],t];if(d&&(n=d.getColor(h.name)),!U||(a=null!=V[0].value?V[0].value:"",n=isNaN(a)?n:U.getColor(a),o=this.deepQuery(p,"itemStyle.normal.color")||n,s=this.deepQuery(p,"itemStyle.emphasis.color")||o,null!=o||null!=s)){n=this.deepMerge(p,"itemStyle.normal").color||n;var c=this.deepQuery(p,"symbol")||"circle";c=c.replace("empty","").replace(/\d/g,""),l=this.deepMerge([V[0],t],"effect");var u=window.devicePixelRatio||1;return i=new r({style:{pointList:V,color:n,strokeColor:n,shadowColor:l.shadowColor||n,shadowBlur:(null!=l.shadowBlur?l.shadowBlur:8)*u,size:this.deepQuery(p,"symbolSize"),iconType:c,brushType:"fill",lineWidth:1},draggable:!1,hoverable:!1}),l.show&&(i.effect=l),i}},backupShapeList:function(){this.shapeList&&this.shapeList.length>0?(this.lastShapeList=this.shapeList,this.shapeList=[]):this.lastShapeList=[]},addShapeList:function(){var e,t,i=this.option.animationThreshold/(this.canvasSupported?2:4),n=this.lastShapeList,a=this.shapeList,o=n.length>0,r=o?this.query(this.option,"animationDurationUpdate"):this.query(this.option,"animationDuration"),s=this.query(this.option,"animationEasing"),l={},m={};if(this.option.animation&&!this.option.renderAsImage&&a.lengthV;V++)t=this._getAnimationKey(n[V]),t.match("undefined")?this.zr.delShape(n[V].id):(t+=n[V].type,l[t]?this.zr.delShape(n[V].id):l[t]=n[V]);for(var V=0,U=a.length;U>V;V++)t=this._getAnimationKey(a[V]),t.match("undefined")?this.zr.addShape(a[V]):(t+=a[V].type,m[t]=a[V]);for(t in l)m[t]||this.zr.delShape(l[t].id);for(t in m)l[t]?(this.zr.delShape(l[t].id),this._animateMod(l[t],m[t],r,s,0,o)):(e=this.type!=h.CHART_TYPE_LINE&&this.type!=h.CHART_TYPE_RADAR||0===t.indexOf("icon")?0:r/2,this._animateMod(!1,m[t],r,s,e,o));this.zr.refresh(),this.animationEffect()}else{this.motionlessOnce=!1,this.zr.delShape(n);for(var V=0,U=a.length;U>V;V++)this.zr.addShape(a[V])}},_getAnimationKey:function(e){return this.type!=h.CHART_TYPE_MAP&&this.type!=h.CHART_TYPE_TREEMAP&&this.type!=h.CHART_TYPE_VENN&&this.type!=h.CHART_TYPE_TREE?m.get(e,"seriesIndex")+"_"+m.get(e,"dataIndex")+(e._mark?e._mark:"")+(this.type===h.CHART_TYPE_RADAR?m.get(e,"special"):""):m.get(e,"seriesIndex")+"_"+m.get(e,"dataIndex")+(e._mark?e._mark:"undefined")},_animateMod:function(e,t,i,n,a,o){switch(t.type){case"polyline":case"half-smooth-polygon":V.pointList(this.zr,e,t,i,n);break;case"rectangle":V.rectangle(this.zr,e,t,i,n);break;case"image":case"icon":V.icon(this.zr,e,t,i,n,a);break;case"candle":o?this.zr.addShape(t):V.candle(this.zr,e,t,i,n);break;case"ring":case"sector":case"circle":o?"sector"===t.type?V.sector(this.zr,e,t,i,n):this.zr.addShape(t):V.ring(this.zr,e,t,i+(m.get(t,"dataIndex")||0)%20*100,n);break;case"text":V.text(this.zr,e,t,i,n);break;case"polygon":o?V.pointList(this.zr,e,t,i,n):V.polygon(this.zr,e,t,i,n);break;case"ribbon":V.ribbon(this.zr,e,t,i,n);break;case"gauge-pointer":V.gaugePointer(this.zr,e,t,i,n);break;case"mark-line":V.markline(this.zr,e,t,i,n);break;case"bezier-curve":case"line":V.line(this.zr,e,t,i,n);break;default:this.zr.addShape(t)}},animationMark:function(e,t,i){for(var i=i||this.shapeList,n=0,a=i.length;a>n;n++)i[n]._mark&&this._animateMod(!1,i[n],e,t,0,!0);this.animationEffect(i)},animationEffect:function(e){if(!e&&this.clearEffectShape(),e=e||this.shapeList,null!=e){var t=h.EFFECT_ZLEVEL;this.canvasSupported&&this.zr.modLayer(t,{motionBlur:!0,lastFrameAlpha:this.option.effectBlendAlpha||h.effectBlendAlpha});for(var i,n=0,a=e.length;a>n;n++)i=e[n],i._mark&&i.effect&&i.effect.show&&U[i._mark]&&(U[i._mark](this.zr,this.effectList,i,t),this.effectList[this.effectList.length-1]._mark=i._mark)}},clearEffectShape:function(e){var t=this.effectList;if(this.zr&&t&&t.length>0){e&&this.zr.modLayer(h.EFFECT_ZLEVEL,{motionBlur:!1}),this.zr.delShape(t);for(var i=0;il;l++)this.zr.addShape(this.shapeList[l]);this.zr.refreshNextFrame()}n[i].data=r}},delMark:function(e,t,i){i=i.replace("mark","").replace("large","").toLowerCase();var n=this.series[e];if(this.selectedMap[n.name]){for(var a=!1,o=[this.shapeList,this.effectList],r=2;r--;)for(var s=0,l=o[r].length;l>s;s++)if(o[r][s]._mark==i&&m.get(o[r][s],"seriesIndex")==e&&m.get(o[r][s],"name")==t){this.zr.delShape(o[r][s].id),o[r].splice(s,1),a=!0;break}a&&this.zr.refreshNextFrame()}}},u.inherits(i,p),i}),i("zrender/shape/Circle",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"circle",buildPath:function(e,t){e.moveTo(t.x+t.r,t.y),e.arc(t.x,t.y,t.r,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/util/accMath",[],function(){function e(e,t){var i=e.toString(),n=t.toString(),a=0;try{a=n.split(".")[1].length}catch(o){}try{a-=i.split(".")[1].length}catch(o){}return(i.replace(".","")-0)/(n.replace(".","")-0)*Math.pow(10,a)}function t(e,t){var i=e.toString(),n=t.toString(),a=0;try{a+=i.split(".")[1].length}catch(o){}try{a+=n.split(".")[1].length}catch(o){}return(i.replace(".","")-0)*(n.replace(".","")-0)/Math.pow(10,a)}function i(e,t){var i=0,n=0;try{i=e.toString().split(".")[1].length}catch(a){}try{n=t.toString().split(".")[1].length}catch(a){}var o=Math.pow(10,Math.max(i,n));return(Math.round(e*o)+Math.round(t*o))/o}function n(e,t){return i(e,-t)}return{accDiv:e,accMul:t,accAdd:i,accSub:n}}),i("echarts/util/shape/Icon",["require","zrender/tool/util","zrender/shape/Star","zrender/shape/Heart","zrender/shape/Droplet","zrender/shape/Image","zrender/shape/Base"],function(e){function t(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o),e.moveTo(i+13*a,n+10*o),e.lineTo(i+13*a,n+t.height)}function i(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o)}function n(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+4*a,n+15*o),e.lineTo(i+9*a,n+13*o),e.lineTo(i+14*a,n+8*o),e.lineTo(i+11*a,n+5*o),e.lineTo(i+6*a,n+10*o),e.lineTo(i+4*a,n+15*o),e.moveTo(i+5*a,n),e.lineTo(i+11*a,n),e.moveTo(i+5*a,n+o),e.lineTo(i+11*a,n+o),e.moveTo(i,n+2*o),e.lineTo(i+t.width,n+2*o),e.moveTo(i,n+5*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+13*a,n+t.height),e.lineTo(i+t.width,n+5*o)}function a(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+3*o),e.lineTo(i+6*a,n+3*o),e.moveTo(i+3*a,n),e.lineTo(i+3*a,n+6*o),e.moveTo(i+3*a,n+8*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n+3*o),e.lineTo(i+8*a,n+3*o)}function o(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+6*a,n),e.lineTo(i+2*a,n+3*o),e.lineTo(i+6*a,n+6*o),e.moveTo(i+2*a,n+3*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+14*a,n+11*o),e.moveTo(i+2*a,n+5*o),e.lineTo(i+2*a,n+13*o),e.lineTo(i+14*a,n+13*o),e.moveTo(i+10*a,n+10*o),e.lineTo(i+14*a,n+13*o),e.lineTo(i+10*a,n+t.height)}function r(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16,r=t.width/2;e.lineWidth=1.5,e.arc(i+r,n+r,r-a,0,2*Math.PI/3),e.moveTo(i+3*a,n+t.height),e.lineTo(i+0*a,n+12*o),e.lineTo(i+5*a,n+11*o),e.moveTo(i,n+8*o),e.arc(i+r,n+r,r-a,Math.PI,5*Math.PI/3),e.moveTo(i+13*a,n),e.lineTo(i+t.width,n+4*o),e.lineTo(i+11*a,n+5*o)}function s(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+2*a,n+14*o),e.lineTo(i+7*a,n+6*o),e.lineTo(i+11*a,n+11*o),e.lineTo(i+15*a,n+2*o)}function l(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+3*a,n+14*o),e.lineTo(i+3*a,n+6*o),e.lineTo(i+4*a,n+6*o),e.lineTo(i+4*a,n+14*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+7*a,n+2*o),e.lineTo(i+8*a,n+2*o),e.lineTo(i+8*a,n+14*o),e.moveTo(i+11*a,n+14*o),e.lineTo(i+11*a,n+9*o),e.lineTo(i+12*a,n+9*o),e.lineTo(i+12*a,n+14*o)}function h(e,t){var i=t.x,n=t.y,a=t.width-2,o=t.height-2,r=Math.min(a,o)/2;n+=2,e.moveTo(i+r+3,n+r-3),e.arc(i+r+3,n+r-3,r-1,0,-Math.PI/2,!0),e.lineTo(i+r+3,n+r-3),e.moveTo(i+r,n),e.lineTo(i+r,n+r),e.arc(i+r,n+r,r,-Math.PI/2,2*Math.PI,!0),e.lineTo(i+r,n+r),e.lineWidth=1.5}function m(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;n-=o,e.moveTo(i+1*a,n+2*o),e.lineTo(i+15*a,n+2*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+2*a,n+3*o),e.moveTo(i+3*a,n+6*o),e.lineTo(i+13*a,n+6*o),e.lineTo(i+12*a,n+7*o),e.lineTo(i+4*a,n+7*o),e.moveTo(i+5*a,n+10*o),e.lineTo(i+11*a,n+10*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+9*a,n+14*o),e.lineTo(i+8*a,n+15*o),e.lineTo(i+7*a,n+15*o)}function V(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=a/16,s=o/16,l=2*Math.min(r,s);e.moveTo(i+r+l,n+s+l),e.arc(i+r,n+s,l,Math.PI/4,3*Math.PI),e.lineTo(i+7*r-l,n+6*s-l),e.arc(i+7*r,n+6*s,l,Math.PI/4*5,4*Math.PI),e.arc(i+7*r,n+6*s,l/2,Math.PI/4*5,4*Math.PI),e.moveTo(i+7*r-l/2,n+6*s+l),e.lineTo(i+r+l,n+14*s-l),e.arc(i+r,n+14*s,l,-Math.PI/4,2*Math.PI),e.moveTo(i+7*r+l/2,n+6*s),e.lineTo(i+14*r-l,n+10*s-l/2),e.moveTo(i+16*r,n+10*s),e.arc(i+14*r,n+10*s,l,0,3*Math.PI),e.lineWidth=1.5}function U(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.min(a,o)/2;e.moveTo(i+a,n+o/2),e.arc(i+r,n+r,r,0,2*Math.PI),e.arc(i+r,n,r,Math.PI/4,Math.PI/5*4),e.arc(i,n+r,r,-Math.PI/3,Math.PI/3),e.arc(i+a,n+o,r,Math.PI,Math.PI/2*3),e.lineWidth=1.5}function d(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(o/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i,n+r*l+s,a,2)}function p(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(a/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i+r*l+s,n,2,o)}function c(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+15*a,n+t.height),e.lineTo(i+15*a,n),e.lineTo(i+a,n),e.moveTo(i+3*a,n+3*a),e.lineTo(i+13*a,n+3*a),e.moveTo(i+3*a,n+6*a),e.lineTo(i+13*a,n+6*a),e.moveTo(i+3*a,n+9*a),e.lineTo(i+13*a,n+9*a),e.moveTo(i+3*a,n+12*a),e.lineTo(i+9*a,n+12*a)}function u(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n),e.lineTo(i,n),e.moveTo(i+4*a,n),e.lineTo(i+4*a,n+8*o),e.lineTo(i+12*a,n+8*o),e.lineTo(i+12*a,n),e.moveTo(i+6*a,n+11*o),e.lineTo(i+6*a,n+13*o),e.lineTo(i+10*a,n+13*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o)}function y(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o/2),e.lineTo(i+a,n+o/2),e.moveTo(i+a/2,n),e.lineTo(i+a/2,n+o)}function g(e,t){var i=t.width/2,n=t.height/2,a=Math.min(i,n);e.moveTo(t.x+i+a,t.y+n),e.arc(t.x+i,t.y+n,a,0,2*Math.PI),e.closePath()}function b(e,t){e.rect(t.x,t.y,t.width,t.height),e.closePath()}function f(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o+r),e.lineTo(a-r,o+r),e.lineTo(a,o-r),e.closePath()}function k(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o),e.lineTo(a,o+r),e.lineTo(a-r,o),e.lineTo(a,o-r),e.closePath()}function x(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+8*a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+8*a,n+t.height/4*3),e.lineTo(i+15*a,n+t.height),e.lineTo(i+8*a,n),e.closePath()}function _(t,i){var n=e("zrender/shape/Star"),a=i.width/2,o=i.height/2;n.prototype.buildPath(t,{x:i.x+a,y:i.y+o,r:Math.min(a,o),n:i.n||5})}function L(t,i){var n=e("zrender/shape/Heart");n.prototype.buildPath(t,{x:i.x+i.width/2,y:i.y+.2*i.height,a:i.width/2,b:.8*i.height})}function W(t,i){var n=e("zrender/shape/Droplet");n.prototype.buildPath(t,{x:i.x+.5*i.width,y:i.y+.5*i.height,a:.5*i.width,b:.8*i.height})}function X(e,t){var i=t.x,n=t.y-t.height/2*1.5,a=t.width/2,o=t.height/2,r=Math.min(a,o);e.arc(i+a,n+o,r,Math.PI/5*4,Math.PI/5),e.lineTo(i+a,n+o+1.5*r),e.closePath()}function v(t,i,n){var a=e("zrender/shape/Image");this._imageShape=this._imageShape||new a({style:{}});for(var o in i)this._imageShape.style[o]=i[o];this._imageShape.brush(t,!1,n)}function w(e){I.call(this,e)}var K=e("zrender/tool/util"),I=e("zrender/shape/Base");return w.prototype={type:"icon",iconLibrary:{mark:t,markUndo:i,markClear:n,dataZoom:a,dataZoomReset:o,restore:r,lineChart:s,barChart:l,pieChart:h,funnelChart:m,forceChart:V,chordChart:U,stackChart:d,tiledChart:p,dataView:c,saveAsImage:u,cross:y,circle:g,rectangle:b,triangle:f,diamond:k,arrow:x,star:_,heart:L,droplet:W,pin:X,image:v},brush:function(t,i,n){var a=i?this.highlightStyle:this.style;a=a||{};var o=a.iconType||this.style.iconType;if("image"===o){var r=e("zrender/shape/Image");r.prototype.brush.call(this,t,i,n)}else{var a=this.beforeBrush(t,i);switch(t.beginPath(),this.buildPath(t,a,n),a.brushType){case"both":t.fill();case"stroke":a.lineWidth>0&&t.stroke();break;default:t.fill()}this.drawText(t,a,this.style),this.afterBrush(t)}},buildPath:function(e,t,i){this.iconLibrary[t.iconType]?this.iconLibrary[t.iconType].call(this,e,t,i):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y),e.closePath())},getRect:function(e){return e.__rect?e.__rect:(e.__rect={x:Math.round(e.x),y:Math.round(e.y-("pin"==e.iconType?e.height/2*1.5:0)),width:e.width,height:e.height*("pin"===e.iconType?1.25:1)},e.__rect)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.__rect;n||(n=this.style.__rect=this.getRect(this.style));var a=n.height<8||n.width<8?4:0;return e>=n.x-a&&e<=n.x+n.width+a&&t>=n.y-a&&t<=n.y+n.height+a}},K.inherits(w,I),w}),i("echarts/util/shape/MarkLine",["require","zrender/shape/Base","./Icon","zrender/shape/Line","zrender/shape/BezierCurve","zrender/tool/area","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/curve"],function(e){function t(e){i.call(this,e),this.style.curveness>0&&this.updatePoints(this.style),this.highlightStyle.curveness>0&&this.updatePoints(this.highlightStyle)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/Line"),o=new a({}),r=e("zrender/shape/BezierCurve"),s=new r({}),l=e("zrender/tool/area"),h=e("zrender/shape/util/dashedLineTo"),m=e("zrender/tool/util"),V=e("zrender/tool/curve");return t.prototype={type:"mark-line",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildPath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i,0),this.brushSymbol(e,i,1),this.drawText(e,i,this.style),e.restore()},buildPath:function(e,t){var i=t.lineType||"solid";if(e.moveTo(t.xStart,t.yStart),t.curveness>0){var n=null;switch(i){case"dashed":n=[5,5];break;case"dotted":n=[1,1]}n&&e.setLineDash&&e.setLineDash(n),e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)}else if("solid"==i)e.lineTo(t.xEnd,t.yEnd);else{var a=(t.lineWidth||1)*("dashed"==t.lineType?5:1);h(e,t.xStart,t.yStart,t.xEnd,t.yEnd,a)}},updatePoints:function(e){var t=e.curveness||0,i=1,n=e.xStart,a=e.yStart,o=e.xEnd,r=e.yEnd,s=(n+o)/2-i*(a-r)*t,l=(a+r)/2-i*(o-n)*t;e.cpX1=s,e.cpY1=l},brushSymbol:function(e,t,i){if("none"!=t.symbol[i]){e.save(),e.beginPath(),e.lineWidth=t.symbolBorder,e.strokeStyle=t.symbolBorderColor;var a=t.symbol[i].replace("empty","").toLowerCase();t.symbol[i].match("empty")&&(e.fillStyle="#fff");var o=t.xStart,r=t.yStart,s=t.xEnd,l=t.yEnd,h=0===i?o:s,m=0===i?r:l,U=t.curveness||0,d=null!=t.symbolRotate[i]?t.symbolRotate[i]-0:0;if(d=d/180*Math.PI,"arrow"==a&&0===d)if(0===U){var p=0===i?-1:1;d=Math.PI/2+Math.atan2(p*(l-r),p*(s-o))}else{var c=t.cpX1,u=t.cpY1,y=V.quadraticDerivativeAt,g=y(o,c,s,i),b=y(r,u,l,i);d=Math.PI/2+Math.atan2(b,g)}e.translate(h,m),0!==d&&e.rotate(d);var f=t.symbolSize[i];n.prototype.buildPath(e,{x:-f,y:-f,width:2*f,height:2*f,iconType:a}),e.closePath(),e.fill(),e.stroke(),e.restore()}},getRect:function(e){return e.curveness>0?s.getRect(e):o.getRect(e),e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?this.style.curveness>0?l.isInside(s,this.style,e,t):l.isInside(o,this.style,e,t):!1}},m.inherits(t,i),t}),i("echarts/util/shape/Symbol",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=new n({}),o=e("zrender/tool/util");return t.prototype={type:"symbol",buildPath:function(e,t){var i=t.pointList,n=i.length;if(0!==n)for(var a,o,r,s,l,h=1e4,m=Math.ceil(n/h),V=i[0]instanceof Array,U=t.size?t.size:2,d=U,p=U/2,c=2*Math.PI,u=0;m>u;u++){e.beginPath(),a=u*h,o=a+h,o=o>n?n:o;for(var y=a;o>y;y++)if(t.random&&(r=t["randomMap"+y%20]/100,d=U*r*r,p=d/2),V?(s=i[y][0],l=i[y][1]):(s=i[y].x,l=i[y].y),3>d)e.rect(s-p,l-p,d,d);else switch(t.iconType){case"circle":e.moveTo(s,l),e.arc(s,l,p,0,c,!0);break;case"diamond":e.moveTo(s,l-p),e.lineTo(s+p/3,l-p/3),e.lineTo(s+p,l),e.lineTo(s+p/3,l+p/3),e.lineTo(s,l+p),e.lineTo(s-p/3,l+p/3),e.lineTo(s-p,l),e.lineTo(s-p/3,l-p/3),e.lineTo(s,l-p);break;default:e.rect(s-p,l-p,d,d)}if(e.closePath(),m-1>u)switch(t.brushType){case"both":e.fill(),t.lineWidth>0&&e.stroke();break;case"stroke":t.lineWidth>0&&e.stroke();break;default:e.fill()}}},getRect:function(e){return e.__rect||a.getRect(e)},isCover:e("./normalIsCover")},o.inherits(t,i),t}),i("zrender/shape/Polyline",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","./Polygon","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return o.prototype={type:"polyline",buildPath:function(e,t){var n=t.pointList;if(!(n.length<2)){var o=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length));if(t.smooth&&"spline"!==t.smooth){t.controlPointList||this.updateControlPoints(t);var r=t.controlPointList;e.moveTo(n[0][0],n[0][1]);for(var s,l,h,m=0;o-1>m;m++)s=r[2*m],l=r[2*m+1],h=n[m+1],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(n=i(n),o=n.length),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var V=(t.lineWidth||1)*("dashed"==t.lineType?5:1);e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)a(e,n[m-1][0],n[m-1][1],n[m][0],n[m][1],V)}}else{e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)e.lineTo(n[m][0],n[m][1])}}},updateControlPoints:function(e){e.controlPointList=n(e.pointList,e.smooth,!1,e.smoothConstraint)},getRect:function(t){return e("./Polygon").prototype.getRect(t)}},e("../tool/util").inherits(o,t),o}),i("zrender/shape/ShapeBundle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={constructor:i,type:"shape-bundle",brush:function(e,t){var i=this.beforeBrush(e,t);e.beginPath();for(var n=0;n0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},getRect:function(e){if(e.__rect)return e.__rect;for(var t=1/0,i=-(1/0),n=1/0,a=-(1/0),o=0;oh;h++)o[h]=[r[h][0],l];else for(var m=r[0][0],h=0;s>h;h++)o[h]=[m,r[h][1]];"half-smooth-polygon"==i.type&&(o[s-1]=p.clone(r[s-1]),o[s-2]=p.clone(r[s-2])),t={style:{pointList:o}}}o=t.style.pointList;var V=o.length;i.style.pointList=V==s?o:s>V?o.concat(r.slice(V)):o.slice(0,s),e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{pointList:r}).during(function(){i.updateControlPoints&&i.updateControlPoints(i.style)}).done(function(){i.__animating=!1}).start(a)}function i(e,t){for(var i=arguments.length,n=2;i>n;n++){var a=arguments[n];e.style[a]=t.style[a]}}function n(e,t,n,a,o){var r=n.style;t||(t={position:n.position,style:{x:r.x,y:"vertical"==n._orient?r.y+r.height:r.y,width:"vertical"==n._orient?r.width:0,height:"vertical"!=n._orient?r.height:0}});var s=r.x,l=r.y,h=r.width,m=r.height,V=[n.position[0],n.position[1]];i(n,t,"x","y","width","height"),n.position=t.position,e.addShape(n),(V[0]!=t.position[0]||V[1]!=t.position[1])&&e.animate(n.id,"").when(a,{position:V}).start(o),n.__animating=!0,e.animate(n.id,"style").when(a,{x:s,y:l,width:h,height:m}).done(function(){n.__animating=!1}).start(o)}function a(e,t,i,n,a){if(!t){var o=i.style.y;t={style:{y:[o[0],o[0],o[0],o[0]]}}}var r=i.style.y;i.style.y=t.style.y,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{y:r}).done(function(){i.__animating=!1}).start(a)}function o(e,t,i,n,a){var o=i.style.x,r=i.style.y,s=i.style.r0,l=i.style.r;i.__animating=!0,"r"!=i._animationAdd?(i.style.r0=0,i.style.r=0,i.rotation=[2*Math.PI,o,r],e.addShape(i),e.animate(i.id,"style").when(n,{r0:s,r:l}).done(function(){i.__animating=!1}).start(a),e.animate(i.id,"").when(n,{rotation:[0,o,r]}).start(a)):(i.style.r0=i.style.r,e.addShape(i),e.animate(i.id,"style").when(n,{r0:s}).done(function(){i.__animating=!1}).start(a))}function r(e,t,n,a,o){t||(t="r"!=n._animationAdd?{ style:{startAngle:n.style.startAngle,endAngle:n.style.startAngle}}:{style:{r0:n.style.r}});var r=n.style.startAngle,s=n.style.endAngle;i(n,t,"startAngle","endAngle"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{startAngle:r,endAngle:s}).done(function(){n.__animating=!1}).start(o)}function s(e,t,n,a,o){t||(t={style:{x:"left"==n.style.textAlign?n.style.x+100:n.style.x-100,y:n.style.y}});var r=n.style.x,s=n.style.y;i(n,t,"x","y"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{x:r,y:s}).done(function(){n.__animating=!1}).start(o)}function l(t,i,n,a,o){var r=e("zrender/shape/Polygon").prototype.getRect(n.style),s=r.x+r.width/2,l=r.y+r.height/2;n.scale=[.1,.1,s,l],t.addShape(n),n.__animating=!0,t.animate(n.id,"").when(a,{scale:[1,1,s,l]}).done(function(){n.__animating=!1}).start(o)}function h(e,t,n,a,o){t||(t={style:{source0:0,source1:n.style.source1>0?360:-360,target0:0,target1:n.style.target1>0?360:-360}});var r=n.style.source0,s=n.style.source1,l=n.style.target0,h=n.style.target1;t.style&&i(n,t,"source0","source1","target0","target1"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{source0:r,source1:s,target0:l,target1:h}).done(function(){n.__animating=!1}).start(o)}function m(e,t,i,n,a){t||(t={style:{angle:i.style.startAngle}});var o=i.style.angle;i.style.angle=t.style.angle,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{angle:o}).done(function(){i.__animating=!1}).start(a)}function V(e,t,i,a,o,r){if(i.style._x=i.style.x,i.style._y=i.style.y,i.style._width=i.style.width,i.style._height=i.style.height,t)n(e,t,i,a,o);else{var s=i._x||0,l=i._y||0;i.scale=[.01,.01,s,l],e.addShape(i),i.__animating=!0,e.animate(i.id,"").delay(r).when(a,{scale:[1,1,s,l]}).done(function(){i.__animating=!1}).start(o||"QuinticOut")}}function U(e,t,n,a,o){t||(t={style:{xStart:n.style.xStart,yStart:n.style.yStart,xEnd:n.style.xStart,yEnd:n.style.yStart}});var r=n.style.xStart,s=n.style.xEnd,l=n.style.yStart,h=n.style.yEnd;i(n,t,"xStart","xEnd","yStart","yEnd"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{xStart:r,xEnd:s,yStart:l,yEnd:h}).done(function(){n.__animating=!1}).start(o)}function d(e,t,i,n,a){a=a||"QuinticOut",i.__animating=!0,e.addShape(i);var o=i.style,r=function(){i.__animating=!1},s=o.xStart,l=o.yStart,h=o.xEnd,m=o.yEnd;if(o.curveness>0){i.updatePoints(o);var V={p:0},U=o.cpX1,d=o.cpY1,p=[],u=[],y=c.quadraticSubdivide;e.animation.animate(V).when(n,{p:1}).during(function(){y(s,U,h,V.p,p),y(l,d,m,V.p,u),o.cpX1=p[1],o.cpY1=u[1],o.xEnd=p[2],o.yEnd=u[2],e.modShape(i)}).done(r).start(a)}else e.animate(i.id,"style").when(0,{xEnd:s,yEnd:l}).when(n,{xEnd:h,yEnd:m}).done(r).start(a)}var p=e("zrender/tool/util"),c=e("zrender/tool/curve");return{pointList:t,rectangle:n,candle:a,ring:o,sector:r,text:s,polygon:l,ribbon:h,gaugePointer:m,icon:V,line:U,markline:d}}),i("echarts/util/ecEffect",["require","../util/ecData","zrender/shape/Circle","zrender/shape/Image","zrender/tool/curve","../util/shape/Icon","../util/shape/Symbol","zrender/shape/ShapeBundle","zrender/shape/Polyline","zrender/tool/vector","zrender/tool/env"],function(e){function t(e,t,i,n){var a,r=i.effect,l=r.color||i.style.strokeColor||i.style.color,m=r.shadowColor||l,V=r.scaleSize,U=r.bounceDistance,d="undefined"!=typeof r.shadowBlur?r.shadowBlur:V;"image"!==i.type?(a=new h({zlevel:n,style:{brushType:"stroke",iconType:"droplet"!=i.style.iconType?i.style.iconType:"circle",x:d+1,y:d+1,n:i.style.n,width:i.style._width*V,height:i.style._height*V,lineWidth:1,strokeColor:l,shadowColor:m,shadowBlur:d},draggable:!1,hoverable:!1}),"pin"==i.style.iconType&&(a.style.y+=a.style.height/2*1.5),p&&(a.style.image=e.shapeToImage(a,a.style.width+2*d+2,a.style.height+2*d+2).style.image,a=new s({zlevel:a.zlevel,style:a.style,draggable:!1,hoverable:!1}))):a=new s({zlevel:n,style:i.style,draggable:!1,hoverable:!1}),o.clone(i,a),a.position=i.position,t.push(a),e.addShape(a);var c="image"!==i.type?window.devicePixelRatio||1:1,u=(a.style.width/c-i.style._width)/2;a.style.x=i.style._x-u,a.style.y=i.style._y-u,"pin"==i.style.iconType&&(a.style.y-=i.style.height/2*1.5);var y=100*(r.period+10*Math.random());e.modShape(i.id,{invisible:!0});var g=a.style.x+a.style.width/2/c,b=a.style.y+a.style.height/2/c;"scale"===r.type?(e.modShape(a.id,{scale:[.1,.1,g,b]}),e.animate(a.id,"",r.loop).when(y,{scale:[1,1,g,b]}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()):e.animate(a.id,"style",r.loop).when(y,{y:a.style.y-U}).when(2*y,{y:a.style.y}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()}function i(e,t,i,n){var a=i.effect,o=a.color||i.style.strokeColor||i.style.color,r=a.scaleSize,s=a.shadowColor||o,l="undefined"!=typeof a.shadowBlur?a.shadowBlur:2*r,h=window.devicePixelRatio||1,V=new m({zlevel:n,position:i.position,scale:i.scale,style:{pointList:i.style.pointList,iconType:i.style.iconType,color:o,strokeColor:o,shadowColor:s,shadowBlur:l*h,random:!0,brushType:"fill",lineWidth:1,size:i.style.size},draggable:!1,hoverable:!1});t.push(V),e.addShape(V),e.modShape(i.id,{invisible:!0});for(var U=Math.round(100*a.period),d={},p={},c=0;20>c;c++)V.style["randomMap"+c]=0,d={},d["randomMap"+c]=100,p={},p["randomMap"+c]=0,V.style["randomMap"+c]=100*Math.random(),e.animate(V.id,"style",!0).when(U,d).when(2*U,p).when(3*U,d).when(4*U,d).delay(Math.random()*U*c).start()}function n(e,t,i,n,a){var s=i.effect,h=i.style,m=s.color||h.strokeColor||h.color,V=s.shadowColor||h.strokeColor||m,c=h.lineWidth*s.scaleSize,u="undefined"!=typeof s.shadowBlur?s.shadowBlur:c,y=new r({zlevel:n,style:{x:u,y:u,r:c,color:m,shadowColor:V,shadowBlur:u},hoverable:!1}),g=0;if(p&&!a){var n=y.zlevel;y=e.shapeToImage(y,2*(c+u),2*(c+u)),y.zlevel=n,y.hoverable=!1,g=u}a||(o.clone(i,y),y.position=i.position,t.push(y),e.addShape(y));var b=function(){a||(i.effect.show=!1,e.delShape(y.id)),y.effectAnimator=null};if(i instanceof U){for(var f=[0],k=0,x=h.pointList,_=h.controlPointList,L=1;L0){var F=h.cpX1-g,T=h.cpY1-g;y.effectAnimator=e.animation.animate(y,{loop:s.loop}).when(E,{p:1}).during(function(t,i){y.style.x=l.quadraticAt(K,F,J,i),y.style.y=l.quadraticAt(I,T,C,i),a||e.modShape(y)}).done(b).start()}else y.effectAnimator=e.animation.animate(y.style,{loop:s.loop}).when(E,{x:J,y:C}).during(function(){a||e.modShape(y)}).done(b).start();y.effectAnimator.duration=E}return y}function a(e,t,i,a){var o=new V({style:{shapeList:[]},zlevel:a,hoverable:!1}),r=i.style.shapeList,s=i.effect;o.position=i.position;for(var l=0,h=[],m=0;ml&&(l=d.duration),0===m&&(o.style.color=U.style.color,o.style.shadowBlur=U.style.shadowBlur,o.style.shadowColor=U.style.shadowColor),h.push(d)}t.push(o),e.addShape(o);var p=function(){for(var e=0;e=0;o--)t=s.type==i.CHART_TYPE_PIE||s.type==i.CHART_TYPE_FUNNEL?n.get(s.shapeList[o],"name"):(n.get(s.shapeList[o],"series")||{}).name,t!=a||s.shapeList[o].invisible||s.shapeList[o].__animating||s.zr.addHoverShape(s.shapeList[o])},t&&t.bind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink)}var i=e("../config"),n=e("../util/ecData"),a=e("../util/ecQuery"),o=e("../util/number"),r=e("zrender/tool/util");return t.prototype={canvasSupported:e("zrender/tool/env").canvasSupported,_getZ:function(e){if(null!=this[e])return this[e];var t=this.ecTheme[this.type];return t&&null!=t[e]?t[e]:(t=i[this.type],t&&null!=t[e]?t[e]:0)},getZlevelBase:function(){return this._getZ("zlevel")},getZBase:function(){return this._getZ("z")},reformOption:function(e){return e=r.merge(r.merge(e||{},r.clone(this.ecTheme[this.type]||{})),r.clone(i[this.type]||{})),this.z=e.z,this.zlevel=e.zlevel,e},reformCssArray:function(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+""){case"4":return e;case"3":return[e[0],e[1],e[2],e[1]];case"2":return[e[0],e[1],e[0],e[1]];case"1":return[e[0],e[0],e[0],e[0]];case"0":return[0,0,0,0]}},getShapeById:function(e){for(var t=0,i=this.shapeList.length;i>t;t++)if(this.shapeList[t].id===e)return this.shapeList[t];return null},getFont:function(e){var t=this.getTextStyle(r.clone(e));return t.fontStyle+" "+t.fontWeight+" "+t.fontSize+"px "+t.fontFamily},getTextStyle:function(e){return r.merge(r.merge(e||{},this.ecTheme.textStyle),i.textStyle)},getItemStyleColor:function(e,t,i,n){return"function"==typeof e?e.call(this.myChart,{seriesIndex:t,series:this.series[t],dataIndex:i,data:n}):e},getDataFromOption:function(e,t){return null!=e?null!=e.value?e.value:e:t},subPixelOptimize:function(e,t){return e=t%2===1?Math.floor(e)+.5:Math.round(e)},resize:function(){this.refresh&&this.refresh(),this.clearEffectShape&&this.clearEffectShape(!0);var e=this;setTimeout(function(){e.animationEffect&&e.animationEffect()},200)},clear:function(){this.clearEffectShape&&this.clearEffectShape(),this.zr&&this.zr.delShape(this.shapeList),this.shapeList=[]},dispose:function(){this.onbeforDispose&&this.onbeforDispose(),this.clear(),this.shapeList=null,this.effectList=null,this.messageCenter&&this.messageCenter.unbind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink),this.onafterDispose&&this.onafterDispose()},query:a.query,deepQuery:a.deepQuery,deepMerge:a.deepMerge,parsePercent:o.parsePercent,parseCenter:o.parseCenter,parseRadius:o.parseRadius,numAddCommas:o.addCommas,getPrecision:o.getPrecision},t}),i("echarts/layout/EdgeBundling",["require","../data/KDTree","zrender/tool/vector"],function(e){function t(e,t){e=e.array,t=t.array;var i=t[0]-e[0],n=t[1]-e[1],a=t[2]-e[2],o=t[3]-e[3];return i*i+n*n+a*a+o*o}function i(e){this.points=[e.mp0,e.mp1],this.group=e}function n(e){var t=e.points;t[0][1]0&&t(e[o],n[a-1])||(n[a++]=U(e[o]));return i[0]&&!t(n[0],i[0])&&(n=n.reverse()),n}for(var a=this._iterate(e),o=0;o++f&&(f=W,k=L,V(g,c),V(y,p),b=u)}if(k){s+=f;var X;k.group||(X=new a,o.push(X),X.addEdge(k)),X=k.group,V(X.mp0,y),V(X.mp1,g),X.ink=b,k.group.addEdge(m)}else{var X=new a;o.push(X),V(X.mp0,m.getStartPoint()),V(X.mp1,m.getEndPoint()),X.ink=m.ink,X.addEdge(m)}}}return{groups:o,edges:i,savedInk:s}},_calculateEdgeEdgeInk:function(){var e=[],t=[];return function(i,n,a,o){e[0]=i.getStartPoint(),e[1]=n.getStartPoint(),t[0]=i.getEndPoint(),t[1]=n.getEndPoint(),this._calculateMeetPoints(e,t,a,o);var r=m(e[0],a)+m(a,o)+m(o,t[0])+m(e[1],a)+m(o,t[1]);return r}}(),_calculateGroupEdgeInk:function(e,t,i,n){for(var a=[],o=[],r=0;rl;l++)s.add(e,e,i[l]);s.scale(e,e,1/r),r=n.length;for(var l=0;r>l;l++)s.add(t,t,n[l]);s.scale(t,t,1/r),this._limitTurningAngle(i,e,t,a),this._limitTurningAngle(n,t,e,o)}}(),_limitTurningAngle:function(){var e=l(),t=l(),i=l(),n=l();return function(a,o,r,l){var V=Math.cos(this.maxTurningAngle),U=Math.tan(this.maxTurningAngle);s.sub(e,o,r),s.normalize(e,e),s.copy(l,o);for(var d=0,p=0;py){s.scaleAndAdd(i,o,e,u*y);var g=m(i,c),b=g/U;s.scaleAndAdd(n,i,e,-b);var f=h(n,o);f>d&&(d=f,s.copy(l,n))}}}}()},o}),i("zrender/shape/Star",["require","../tool/math","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=t.sin,n=t.cos,a=Math.PI,o=e("./Base"),r=function(e){o.call(this,e)};return r.prototype={type:"star",buildPath:function(e,t){var o=t.n;if(o&&!(2>o)){var r=t.x,s=t.y,l=t.r,h=t.r0;null==h&&(h=o>4?l*n(2*a/o)/n(a/o):l/3);var m=a/o,V=-a/2,U=r+l*n(V),d=s+l*i(V);V+=m;var p=t.pointList=[];p.push([U,d]);for(var c,u=0,y=2*o-1;y>u;u++)c=u%2===0?h:l,p.push([r+c*n(V),s+c*i(V)]),V+=m;p.push([U,d]),e.moveTo(p[0][0],p[0][1]);for(var u=0;ur;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"Q":for(var r=0;4>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"A":var s=o[0],l=o[1],h=o[2],m=o[3];e[0]=Math.min(e[0],e[0],s-h),e[1]=Math.min(e[1],e[1],l-m),i[0]=Math.max(i[0],i[0],s+h),i[1]=Math.max(i[1],i[1],l+m)}}return{x:e[0],y:e[1],width:i[0]-e[0],height:i[1]-e[1]}},n.prototype.begin=function(e){return this._ctx=e||null,this.pathCommands.length=0,this},n.prototype.moveTo=function(e,t){return this.pathCommands.push(new i("M",[e,t])),this._ctx&&this._ctx.moveTo(e,t),this},n.prototype.lineTo=function(e,t){return this.pathCommands.push(new i("L",[e,t])),this._ctx&&this._ctx.lineTo(e,t),this},n.prototype.bezierCurveTo=function(e,t,n,a,o,r){return this.pathCommands.push(new i("C",[e,t,n,a,o,r])),this._ctx&&this._ctx.bezierCurveTo(e,t,n,a,o,r),this},n.prototype.quadraticCurveTo=function(e,t,n,a){return this.pathCommands.push(new i("Q",[e,t,n,a])),this._ctx&&this._ctx.quadraticCurveTo(e,t,n,a),this},n.prototype.arc=function(e,t,n,a,o,r){return this.pathCommands.push(new i("A",[e,t,n,n,a,o-a,0,r?0:1])),this._ctx&&this._ctx.arc(e,t,n,a,o,r),this},n.prototype.arcTo=function(e,t,i,n,a){return this._ctx&&this._ctx.arcTo(e,t,i,n,a),this},n.prototype.rect=function(e,t,i,n){return this._ctx&&this._ctx.rect(e,t,i,n),this},n.prototype.closePath=function(){return this.pathCommands.push(new i("z")),this._ctx&&this._ctx.closePath(),this},n.prototype.isEmpty=function(){return 0===this.pathCommands.length},n.PathSegment=i,n}),i("zrender/shape/Line",["require","./Base","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/dashedLineTo"),n=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return n.prototype={type:"line",buildPath:function(e,t){if(t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var n=(t.lineWidth||1)*("dashed"==t.lineType?5:1);i(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}}else e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=e.lineWidth||1;return e.__rect={x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t},e.__rect}},e("../tool/util").inherits(n,t),n}),i("zrender/shape/BezierCurve",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return i.prototype={type:"bezier-curve",buildPath:function(e,t){e.moveTo(t.xStart,t.yStart),"undefined"!=typeof t.cpX2&&"undefined"!=typeof t.cpY2?e.bezierCurveTo(t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd):e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=Math.min(e.xStart,e.xEnd,e.cpX1),i=Math.min(e.yStart,e.yEnd,e.cpY1),n=Math.max(e.xStart,e.xEnd,e.cpX1),a=Math.max(e.yStart,e.yEnd,e.cpY1),o=e.cpX2,r=e.cpY2;"undefined"!=typeof o&&"undefined"!=typeof r&&(t=Math.min(t,o),i=Math.min(i,r),n=Math.max(n,o),a=Math.max(a,r));var s=e.lineWidth||1;return e.__rect={x:t-s,y:i-s,width:n-t+s,height:a-i+s},e.__rect}},e("../tool/util").inherits(i,t),i}),i("zrender/shape/util/dashedLineTo",[],function(){var e=[5,5];return function(t,i,n,a,o,r){if(t.setLineDash)return e[0]=e[1]=r,t.setLineDash(e),t.moveTo(i,n),void t.lineTo(a,o);r="number"!=typeof r?5:r;var s=a-i,l=o-n,h=Math.floor(Math.sqrt(s*s+l*l)/r);s/=h,l/=h;for(var m=!0,V=0;h>V;++V)m?t.moveTo(i,n):t.lineTo(i,n),m=!m,i+=s,n+=l;t.lineTo(a,o)}}),i("zrender/shape/Polygon",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){t.call(this,e)};return o.prototype={type:"polygon",buildPath:function(e,t){var o=t.pointList;if(!(o.length<2)){if(t.smooth&&"spline"!==t.smooth){var r=n(o,t.smooth,!0,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var s,l,h,m=o.length,V=0;m>V;V++)s=r[2*V],l=r[2*V+1],h=o[(V+1)%m],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(o=i(o,!0)),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var U=t._dashLength||(t.lineWidth||1)*("dashed"==t.lineType?5:1);t._dashLength=U,e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)a(e,o[V-1][0],o[V-1][1],o[V][0],o[V][1],U);a(e,o[o.length-1][0],o[o.length-1][1],o[0][0],o[0][1],U)}}else{e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)e.lineTo(o[V][0],o[V][1]);e.lineTo(o[0][0],o[0][1])}e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;for(var t=Number.MAX_VALUE,i=Number.MIN_VALUE,n=Number.MAX_VALUE,a=Number.MIN_VALUE,o=e.pointList,r=0,s=o.length;s>r;r++)o[r][0]i&&(i=o[r][0]),o[r][1]a&&(a=o[r][1]);var l;return l="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(t-l/2),y:Math.round(n-l/2),width:i-t+l,height:a-n+l},e.__rect}},e("../tool/util").inherits(o,t),o}),i("echarts/util/shape/normalIsCover",[],function(){return function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)}}),i("zrender/shape/util/smoothSpline",["require","../../tool/vector"],function(e){function t(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}var i=e("../../tool/vector");return function(e,n){for(var a=e.length,o=[],r=0,s=1;a>s;s++)r+=i.distance(e[s-1],e[s]);var l=r/5;l=a>l?a:l;for(var s=0;l>s;s++){var h,m,V,U=s/(l-1)*(n?a:a-1),d=Math.floor(U),p=U-d,c=e[d%a];n?(h=e[(d-1+a)%a],m=e[(d+1)%a],V=e[(d+2)%a]):(h=e[0===d?d:d-1],m=e[d>a-2?a-1:d+1],V=e[d>a-3?a-1:d+2]);var u=p*p,y=p*u;o.push([t(h[0],c[0],m[0],V[0],p,u,y),t(h[1],c[1],m[1],V[1],p,u,y)])}return o}}),i("zrender/shape/util/smoothBezier",["require","../../tool/vector"],function(e){var t=e("../../tool/vector");return function(e,i,n,a){var o,r,s,l,h=[],m=[],V=[],U=[],d=!!a;if(d){s=[1/0,1/0],l=[-(1/0),-(1/0)];for(var p=0,c=e.length;c>p;p++)t.min(s,s,e[p]),t.max(l,l,e[p]);t.min(s,s,a[0]),t.max(l,l,a[1])}for(var p=0,c=e.length;c>p;p++){var o,r,u=e[p];if(n)o=e[p?p-1:c-1],r=e[(p+1)%c];else{if(0===p||p===c-1){h.push(t.clone(e[p]));continue}o=e[p-1],r=e[p+1]}t.sub(m,r,o),t.scale(m,m,i);var y=t.distance(u,o),g=t.distance(u,r),b=y+g;0!==b&&(y/=b,g/=b),t.scale(V,m,-y),t.scale(U,m,g);var f=t.add([],u,V),k=t.add([],u,U);d&&(t.max(f,f,s),t.min(f,f,l),t.max(k,k,s),t.min(k,k,l)),h.push(f),h.push(k)}return n&&h.push(t.clone(h.shift())),h}}),i("echarts/util/ecQuery",["require","zrender/tool/util"],function(e){function t(e,t){if("undefined"!=typeof e){if(!t)return e;t=t.split(".");for(var i=t.length,n=0;i>n;){if(e=e[t[n]],"undefined"==typeof e)return;n++}return e}}function i(e,i){for(var n,a=0,o=e.length;o>a;a++)if(n=t(e[a],i),"undefined"!=typeof n)return n}function n(e,i){for(var n,o=e.length;o--;){var r=t(e[o],i);"undefined"!=typeof r&&("undefined"==typeof n?n=a.clone(r):a.merge(n,r,!0))}return n}var a=e("zrender/tool/util");return{query:t,deepQuery:i,deepMerge:n}}),i("echarts/util/number",[],function(){function e(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}function t(t,i){return"string"==typeof t?e(t).match(/%$/)?parseFloat(t)/100*i:parseFloat(t):t}function i(e,i){return[t(i[0],e.getWidth()),t(i[1],e.getHeight())]}function n(e,i){i instanceof Array||(i=[0,i]);var n=Math.min(e.getWidth(),e.getHeight())/2;return[t(i[0],n),t(i[1],n)]}function a(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:""))}function o(e){for(var t=1,i=0;Math.round(e*t)/t!==e;)t*=10,i++;return i}return{parsePercent:t,parseCenter:i,parseRadius:n,addCommas:a,getPrecision:o}}),i("echarts/data/KDTree",["require","./quickSelect"],function(e){function t(e,t){this.left=null,this.right=null,this.axis=e,this.data=t}var i=e("./quickSelect"),n=function(e,t){e.length&&(t||(t=e[0].array.length),this.dimension=t,this.root=this._buildTree(e,0,e.length-1,0),this._stack=[],this._nearstNList=[])};return n.prototype._buildTree=function(e,n,a,o){if(n>a)return null;var r=Math.floor((n+a)/2);r=i(e,n,a,r,function(e,t){return e.array[o]-t.array[o]});var s=e[r],l=new t(o,s);return o=(o+1)%this.dimension,a>n&&(l.left=this._buildTree(e,n,r-1,o),l.right=this._buildTree(e,r+1,a,o)),l},n.prototype.nearest=function(e,t){var i=this.root,n=this._stack,a=0,o=1/0,r=null;for(i.data!==e&&(o=t(i.data,e),r=i),e.array[i.axis]s,h=!1;s*=s,o>s&&(s=t(i.data,e),o>s&&i.data!==e&&(o=s,r=i),h=!0),l?(h&&i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(h&&i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right))}return r.data},n.prototype._addNearest=function(e,t,i){for(var n=this._nearstNList,a=e-1;a>0&&!(t>=n[a-1].dist);a--)n[a].dist=n[a-1].dist,n[a].node=n[a-1].node;n[a].dist=t,n[a].node=i},n.prototype.nearestN=function(e,t,i,n){if(0>=t)return n.length=0,n;for(var a=this.root,o=this._stack,r=0,s=this._nearstNList,l=0;t>l;l++)s[l]||(s[l]={}),s[l].dist=0,s[l].node=null;var h=i(a.data,e),m=0;for(a.data!==e&&(m++,this._addNearest(m,h,a)),e.array[a.axis]h,U=!1;h*=h,(t>m||hm||hm&&m++,this._addNearest(m,h,a)),U=!0),V?(U&&a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(U&&a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right))}for(var l=0;m>l;l++)n[l]=s[l].node.data;return n.length=m,n},n}),i("echarts/data/quickSelect",["require"],function(){function e(e,t){return e-t}function t(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function i(e,i,n,a,o){for(var r=i;n>i;){var r=Math.round((n+i)/2),s=e[r];t(e,r,n),r=i;for(var l=i;n-1>=l;l++)o(s,e[l])>=0&&(t(e,l,r),r++);if(t(e,n,r),r===a)return r;a>r?i=r+1:n=r-1}return i}function n(t,n,a,o,r){return arguments.length<=3&&(o=n,r=2==arguments.length?e:a,n=0,a=t.length-1),i(t,n,a,o,r)}return n}),i("echarts/component/dataView",["require","./base","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._tDom=document.createElement("div"),this._textArea=document.createElement("textArea"),this._buttonRefresh=document.createElement("button"),this._buttonRefresh.setAttribute("type","button"),this._buttonClose=document.createElement("button"),this._buttonClose.setAttribute("type","button"),this._hasShow=!1,this._zrHeight=n.getHeight(),this._zrWidth=n.getWidth(),this._tDom.className="echarts-dataview",this.hide(),this.dom.firstChild.appendChild(this._tDom),window.addEventListener?(this._tDom.addEventListener("click",this._stop),this._tDom.addEventListener("mousewheel",this._stop),this._tDom.addEventListener("mousemove",this._stop),this._tDom.addEventListener("mousedown",this._stop),this._tDom.addEventListener("mouseup",this._stop),this._tDom.addEventListener("touchstart",this._stop),this._tDom.addEventListener("touchmove",this._stop),this._tDom.addEventListener("touchend",this._stop)):(this._tDom.attachEvent("onclick",this._stop),this._tDom.attachEvent("onmousewheel",this._stop),this._tDom.attachEvent("onmousemove",this._stop),this._tDom.attachEvent("onmousedown",this._stop),this._tDom.attachEvent("onmouseup",this._stop))}var i=e("./base"),n=e("../config"),a=e("zrender/tool/util");return t.prototype={type:n.COMPONENT_TYPE_DATAVIEW,_lang:["Data View","close","refresh"],_gCssText:"position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;",hide:function(){this._sizeCssText="width:"+this._zrWidth+"px;height:0px;background-color:#f0ffff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},show:function(e){this._hasShow=!0;var t=this.query(this.option,"toolbox.feature.dataView.lang")||this._lang;this.option=e,this._tDom.innerHTML='

    '+(t[0]||this._lang[0])+"

    ";var i=this.query(this.option,"toolbox.feature.dataView.optionToContent");"function"!=typeof i?this._textArea.value=this._optionToContent():(this._textArea=document.createElement("div"),this._textArea.innerHTML=i(this.option)),this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;",this._tDom.appendChild(this._textArea),this._buttonClose.style.cssText="float:right;padding:1px 6px;",this._buttonClose.innerHTML=t[1]||this._lang[1];var n=this;this._buttonClose.onclick=function(){n.hide()},this._tDom.appendChild(this._buttonClose),this.query(this.option,"toolbox.feature.dataView.readOnly")===!1?(this._buttonRefresh.style.cssText="float:right;margin-right:10px;padding:1px 6px;",this._buttonRefresh.innerHTML=t[2]||this._lang[2],this._buttonRefresh.onclick=function(){n._save()},this._textArea.readOnly=!1,this._textArea.style.cursor="default"):(this._buttonRefresh.style.cssText="display:none", this._textArea.readOnly=!0,this._textArea.style.cursor="text"),this._tDom.appendChild(this._buttonRefresh),this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},_optionToContent:function(){var e,t,i,a,o,r,s=[],l="";if(this.option.xAxis)for(s=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],e=0,a=s.length;a>e;e++)if("category"==(s[e].type||"category")){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}if(this.option.yAxis)for(s=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],e=0,a=s.length;a>e;e++)if("category"==s[e].type){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}var h,m=this.option.series;for(e=0,a=m.length;a>e;e++){for(r=[],t=0,i=m[e].data.length;i>t;t++)o=m[e].data[t],h=m[e].type==n.CHART_TYPE_PIE||m[e].type==n.CHART_TYPE_MAP?(o.name||"-")+":":"",m[e].type==n.CHART_TYPE_SCATTER&&(o=this.getDataFromOption(o).join(", ")),r.push(h+this.getDataFromOption(o));l+=(m[e].name||"-")+" : \n",l+=r.join(m[e].type==n.CHART_TYPE_SCATTER?"\n":", "),l+="\n\n"}return l},_save:function(){var e=this.query(this.option,"toolbox.feature.dataView.contentToOption");if("function"!=typeof e){for(var t=this._textArea.value.split("\n"),i=[],a=0,o=t.length;o>a;a++)t[a]=this._trim(t[a]),""!==t[a]&&i.push(t[a]);this._contentToOption(i)}else e(this._textArea,this.option);this.hide();var r=this;setTimeout(function(){r.messageCenter&&r.messageCenter.dispatch(n.EVENT.DATA_VIEW_CHANGED,null,{option:r.option},r.myChart)},r.canvasSupported?800:100)},_contentToOption:function(e){var t,i,a,o,r,s,l,h=[],m=0;if(this.option.xAxis)for(h=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],t=0,o=h.length;o>t;t++)if("category"==(h[t].type||"category")){for(s=e[m].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}if(this.option.yAxis)for(h=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],t=0,o=h.length;o>t;t++)if("category"==h[t].type){for(s=e[m].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}var V=this.option.series;for(t=0,o=V.length;o>t;t++)if(m++,V[t].type==n.CHART_TYPE_SCATTER)for(var i=0,a=V[t].data.length;a>i;i++)s=e[m],l=s.replace(" ","").split(","),"undefined"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l,m++;else{s=e[m].split(",");for(var i=0,a=V[t].data.length;a>i;i++)l=(s[i]||"").replace(/.*:/,""),l=this._trim(l),l="-"!=l&&""!==l?l-0:"-","undefined"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l;m++}},_trim:function(e){var t=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)","g");return e.replace(t,"")},_stop:function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},resize:function(){this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._tDom.offsetHeight>10&&(this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText,this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;")},dispose:function(){window.removeEventListener?(this._tDom.removeEventListener("click",this._stop),this._tDom.removeEventListener("mousewheel",this._stop),this._tDom.removeEventListener("mousemove",this._stop),this._tDom.removeEventListener("mousedown",this._stop),this._tDom.removeEventListener("mouseup",this._stop),this._tDom.removeEventListener("touchstart",this._stop),this._tDom.removeEventListener("touchmove",this._stop),this._tDom.removeEventListener("touchend",this._stop)):(this._tDom.detachEvent("onclick",this._stop),this._tDom.detachEvent("onmousewheel",this._stop),this._tDom.detachEvent("onmousemove",this._stop),this._tDom.detachEvent("onmousedown",this._stop),this._tDom.detachEvent("onmouseup",this._stop)),this._buttonRefresh.onclick=null,this._buttonClose.onclick=null,this._hasShow&&(this._tDom.removeChild(this._textArea),this._tDom.removeChild(this._buttonRefresh),this._tDom.removeChild(this._buttonClose)),this._textArea=null,this._buttonRefresh=null,this._buttonClose=null,this.dom.firstChild.removeChild(this._tDom),this._tDom=null}},a.inherits(t,i),e("../component").define("dataView",t),t}),i("echarts/util/shape/Cross",["require","zrender/shape/Base","zrender/shape/Line","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Line"),a=e("zrender/tool/util");return t.prototype={type:"cross",buildPath:function(e,t){var i=t.rect;t.xStart=i.x,t.xEnd=i.x+i.width,t.yStart=t.yEnd=t.y,n.prototype.buildPath(e,t),t.xStart=t.xEnd=t.x,t.yStart=i.y,t.yEnd=i.y+i.height,n.prototype.buildPath(e,t)},getRect:function(e){return e.rect},isCover:e("./normalIsCover")},a.inherits(t,i),t}),i("zrender/shape/Sector",["require","../tool/math","../tool/computeBoundingBox","../tool/vector","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=e("../tool/computeBoundingBox"),n=e("../tool/vector"),a=e("./Base"),o=n.create(),r=n.create(),s=n.create(),l=n.create(),h=function(e){a.call(this,e)};return h.prototype={type:"sector",buildPath:function(e,i){var n=i.x,a=i.y,o=i.r0||0,r=i.r,s=i.startAngle,l=i.endAngle,h=i.clockWise||!1;s=t.degreeToRadian(s),l=t.degreeToRadian(l),h||(s=-s,l=-l);var m=t.cos(s),V=t.sin(s);e.moveTo(m*o+n,V*o+a),e.lineTo(m*r+n,V*r+a),e.arc(n,a,r,s,l,!h),e.lineTo(t.cos(l)*o+n,t.sin(l)*o+a),0!==o&&e.arc(n,a,o,l,s,h),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var a=e.x,h=e.y,m=e.r0||0,V=e.r,U=t.degreeToRadian(e.startAngle),d=t.degreeToRadian(e.endAngle),p=e.clockWise;return p||(U=-U,d=-d),m>1?i.arc(a,h,m,U,d,!p,o,s):(o[0]=s[0]=a,o[1]=s[1]=h),i.arc(a,h,V,U,d,!p,r,l),n.min(o,o,r),n.max(s,s,l),e.__rect={x:o[0],y:o[1],width:s[0]-o[0],height:s[1]-o[1]},e.__rect}},e("../tool/util").inherits(h,a),h}),i("echarts/util/shape/Candle",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"candle",_numberOrder:function(e,t){return t-e},buildPath:function(e,t){var i=n.clone(t.y).sort(this._numberOrder);e.moveTo(t.x,i[3]),e.lineTo(t.x,i[2]),e.moveTo(t.x-t.width/2,i[2]),e.rect(t.x-t.width/2,i[2],t.width,i[1]-i[2]),e.moveTo(t.x,i[1]),e.lineTo(t.x,i[0])},getRect:function(e){if(!e.__rect){var t=0;("stroke"==e.brushType||"fill"==e.brushType)&&(t=e.lineWidth||1);var i=n.clone(e.y).sort(this._numberOrder);e.__rect={x:Math.round(e.x-e.width/2-t/2),y:Math.round(i[3]-t/2),width:e.width+t,height:i[0]-i[3]+t}}return e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),i("zrender/tool/computeBoundingBox",["require","./vector","./curve"],function(e){function t(e,t,i){if(0!==e.length){for(var n=e[0][0],a=e[0][0],o=e[0][1],r=e[0][1],s=1;sa&&(a=l[0]),l[1]r&&(r=l[1])}t[0]=n,t[1]=o,i[0]=a,i[1]=r}}function i(e,t,i,n,a,r){var s=[];o.cubicExtrema(e[0],t[0],i[0],n[0],s);for(var l=0;l=2*Math.PI)return m[0]=e-i,m[1]=t-i,V[0]=e+i,void(V[1]=t+i);if(r[0]=Math.cos(n)*i+e,r[1]=Math.sin(n)*i+t,s[0]=Math.cos(o)*i+e,s[1]=Math.sin(o)*i+t,a.min(m,r,s),a.max(V,r,s),n%=2*Math.PI,0>n&&(n+=2*Math.PI),o%=2*Math.PI,0>o&&(o+=2*Math.PI),n>o&&!h?o+=2*Math.PI:o>n&&h&&(n+=2*Math.PI),h){var U=o;o=n,n=U}for(var d=0;o>d;d+=Math.PI/2)d>n&&(l[0]=Math.cos(d)*i+e,l[1]=Math.sin(d)*i+t,a.min(m,l,m),a.max(V,l,V))};return t.cubeBezier=i,t.quadraticBezier=n,t.arc=h,t}),i("echarts/util/shape/Chain",["require","zrender/shape/Base","./Icon","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/matrix"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/util/dashedLineTo"),o=e("zrender/tool/util"),r=e("zrender/tool/matrix");return t.prototype={type:"chain",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildLinePath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i),e.restore()},buildLinePath:function(e,t){var i=t.x,n=t.y+5,o=t.width,r=t.height/2-10;if(e.moveTo(i,n),e.lineTo(i,n+r),e.moveTo(i+o,n),e.lineTo(i+o,n+r),e.moveTo(i,n+r/2),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var s=(t.lineWidth||1)*("dashed"==t.lineType?5:1);a(e,i,n+r/2,i+o,n+r/2,s)}}else e.lineTo(i+o,n+r/2)},brushSymbol:function(e,t){var i=t.y+t.height/4;e.save();for(var a,o=t.chainPoint,r=0,s=o.length;s>r;r++){if(a=o[r],"none"!=a.symbol){e.beginPath();var l=a.symbolSize;n.prototype.buildPath(e,{iconType:a.symbol,x:a.x-l,y:i-l,width:2*l,height:2*l,n:a.n}),e.fillStyle=a.isEmpty?"#fff":t.strokeColor,e.closePath(),e.fill(),e.stroke()}a.showLabel&&(e.font=a.textFont,e.fillStyle=a.textColor,e.textAlign=a.textAlign,e.textBaseline=a.textBaseline,a.rotation?(e.save(),this._updateTextTransform(e,a.rotation),e.fillText(a.name,a.textX,a.textY),e.restore()):e.fillText(a.name,a.textX,a.textY))}e.restore()},_updateTextTransform:function(e,t){var i=r.create();if(r.identity(i),0!==t[0]){var n=t[1]||0,a=t[2]||0;(n||a)&&r.translate(i,i,[-n,-a]),r.rotate(i,i,t[0]),(n||a)&&r.translate(i,i,[n,a])}e.transform.apply(e,i)},isCover:function(e,t){var i=this.style;return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?!0:!1}},o.inherits(t,i),t}),i("zrender/shape/Ring",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ring",buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,2*Math.PI,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/component/axis",["require","./base","zrender/shape/Line","../config","../util/ecData","zrender/tool/util","zrender/tool/color","./categoryAxis","./valueAxis","../component"],function(e){function t(e,t,n,a,o,r){i.call(this,e,t,n,a,o),this.axisType=r,this._axisList=[],this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Line"),a=e("../config"),o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.COMPONENT_TYPE_AXIS,axisBase:{_buildAxisLine:function(){var e=this.option.axisLine.lineStyle.width,t=e/2,i={_axisShape:"axisLine",zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1},a=this.grid;switch(this.option.position){case"left":i.style={xStart:a.getX()-t,yStart:a.getYend(),xEnd:a.getX()-t,yEnd:a.getY(),lineCap:"round"};break;case"right":i.style={xStart:a.getXend()+t,yStart:a.getYend(),xEnd:a.getXend()+t,yEnd:a.getY(),lineCap:"round"};break;case"bottom":i.style={xStart:a.getX(),yStart:a.getYend()+t,xEnd:a.getXend(),yEnd:a.getYend()+t,lineCap:"round"};break;case"top":i.style={xStart:a.getX(),yStart:a.getY()-t,xEnd:a.getXend(),yEnd:a.getY()-t,lineCap:"round"}}var o=i.style;""!==this.option.name&&(o.text=this.option.name,o.textPosition=this.option.nameLocation,o.textFont=this.getFont(this.option.nameTextStyle),this.option.nameTextStyle.align&&(o.textAlign=this.option.nameTextStyle.align),this.option.nameTextStyle.baseline&&(o.textBaseline=this.option.nameTextStyle.baseline),this.option.nameTextStyle.color&&(o.textColor=this.option.nameTextStyle.color)),o.strokeColor=this.option.axisLine.lineStyle.color,o.lineWidth=e,this.isHorizontal()?o.yStart=o.yEnd=this.subPixelOptimize(o.yEnd,e):o.xStart=o.xEnd=this.subPixelOptimize(o.xEnd,e),o.lineType=this.option.axisLine.lineStyle.type,i=new n(i),this.shapeList.push(i)},_axisLabelClickable:function(e,t){return e?(o.pack(t,void 0,-1,void 0,-1,t.style.text),t.hoverable=!0,t.clickable=!0,t.highlightStyle={color:s.lift(t.style.color,1),brushType:"fill"},t):t},refixAxisShape:function(e,t){if(this.option.axisLine.onZero){var i;if(this.isHorizontal()&&null!=t)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.yStart=this.shapeList[n].style.yEnd=this.subPixelOptimize(t,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.yEnd-this.shapeList[n].style.yStart,this.shapeList[n].style.yStart=t-i,this.shapeList[n].style.yEnd=t,this.zr.modShape(this.shapeList[n].id));if(!this.isHorizontal()&&null!=e)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.xStart=this.shapeList[n].style.xEnd=this.subPixelOptimize(e,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.xEnd-this.shapeList[n].style.xStart,this.shapeList[n].style.xStart=e,this.shapeList[n].style.xEnd=e+i,this.zr.modShape(this.shapeList[n].id))}},getPosition:function(){return this.option.position},isHorizontal:function(){return"bottom"===this.option.position||"top"===this.option.position}},reformOption:function(e){if(!e||e instanceof Array&&0===e.length?e=[{type:a.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]),"xAxis"===this.axisType){(!e[0].position||"bottom"!=e[0].position&&"top"!=e[0].position)&&(e[0].position="bottom"),e.length>1&&(e[1].position="bottom"===e[0].position?"top":"bottom");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"category",e[t].xAxisIndex=t,e[t].yAxisIndex=-1}else{(!e[0].position||"left"!=e[0].position&&"right"!=e[0].position)&&(e[0].position="left"),e.length>1&&(e[1].position="left"===e[0].position?"right":"left");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"value",e[t].xAxisIndex=-1,e[t].yAxisIndex=t}return e},refresh:function(t){var i;t&&(this.option=t,"xAxis"===this.axisType?(this.option.xAxis=this.reformOption(t.xAxis),i=this.option.xAxis):(this.option.yAxis=this.reformOption(t.yAxis),i=this.option.yAxis),this.series=t.series);for(var n=e("./categoryAxis"),a=e("./valueAxis"),o=Math.max(i&&i.length||0,this._axisList.length),r=0;o>r;r++)!this._axisList[r]||!t||i[r]&&this._axisList[r].type==i[r].type||(this._axisList[r].dispose&&this._axisList[r].dispose(),this._axisList[r]=!1),this._axisList[r]?this._axisList[r].refresh&&this._axisList[r].refresh(i?i[r]:!1,this.series):i&&i[r]&&(this._axisList[r]="category"===i[r].type?new n(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase):new a(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase,this.series))},getAxis:function(e){return this._axisList[e]},getAxisCount:function(){return this._axisList.length},clear:function(){for(var e=0,t=this._axisList.length;t>e;e++)this._axisList[e].dispose&&this._axisList[e].dispose();this._axisList=[]}},r.inherits(t,i),e("../component").define("axis",t),t}),i("echarts/component/grid",["require","./base","zrender/shape/Rectangle","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("../config");a.grid={zlevel:0,z:0,x:80,y:60,x2:80,y2:60,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"};var o=e("zrender/tool/util");return t.prototype={type:a.COMPONENT_TYPE_GRID,getX:function(){return this._x},getY:function(){return this._y},getWidth:function(){return this._width},getHeight:function(){return this._height},getXend:function(){return this._x+this._width},getYend:function(){return this._y+this._height},getArea:function(){return{x:this._x,y:this._y,width:this._width,height:this._height}},getBbox:function(){return[[this._x,this._y],[this.getXend(),this.getYend()]]},refixAxisShape:function(e){for(var t,i,n,o=e.xAxis._axisList.concat(e.yAxis?e.yAxis._axisList:[]),r=o.length;r--;)n=o[r],n.type==a.COMPONENT_TYPE_AXIS_VALUE&&n._min<0&&n._max>=0&&(n.isHorizontal()?t=n.getCoord(0):i=n.getCoord(0));if("undefined"!=typeof t||"undefined"!=typeof i)for(r=o.length;r--;)o[r].refixAxisShape(t,i)},refresh:function(e){if(e||this._zrWidth!=this.zr.getWidth()||this._zrHeight!=this.zr.getHeight()){this.clear(),this.option=e||this.option,this.option.grid=this.reformOption(this.option.grid);var t=this.option.grid;this._zrWidth=this.zr.getWidth(),this._zrHeight=this.zr.getHeight(),this._x=this.parsePercent(t.x,this._zrWidth),this._y=this.parsePercent(t.y,this._zrHeight);var i=this.parsePercent(t.x2,this._zrWidth),a=this.parsePercent(t.y2,this._zrHeight);this._width="undefined"==typeof t.width?this._zrWidth-this._x-i:this.parsePercent(t.width,this._zrWidth),this._width=this._width<=0?10:this._width,this._height="undefined"==typeof t.height?this._zrHeight-this._y-a:this.parsePercent(t.height,this._zrHeight),this._height=this._height<=0?10:this._height,this._x=this.subPixelOptimize(this._x,t.borderWidth),this._y=this.subPixelOptimize(this._y,t.borderWidth),this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._x,y:this._y,width:this._width,height:this._height,brushType:t.borderWidth>0?"both":"fill",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}})),this.zr.addShape(this.shapeList[0])}}},o.inherits(t,i),e("../component").define("grid",t),t}),i("echarts/component/dataZoom",["require","./base","zrender/shape/Rectangle","zrender/shape/Polygon","../util/shape/Icon","../config","../util/date","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},this._fillerSize=30,this._isSilence=!1,this._zoom={},this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this._handleSize=this.zoomOption.handleSize,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom.show&&this._buildShape(),this._syncData()}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Polygon"),o=e("../util/shape/Icon"),r=e("../config");r.dataZoom={zlevel:0,z:4,show:!1,orient:"horizontal",backgroundColor:"rgba(0,0,0,0)",dataBackgroundColor:"#eee",fillerColor:"rgba(144,197,237,0.2)",handleColor:"rgba(70,130,180,0.8)",handleSize:8,showDetail:!0,realtime:!0};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_DATAZOOM,_buildShape:function(){this._buildBackground(),this._buildFiller(),this._buildHandle(),this._buildFrame();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncFrameShape()},_getLocation:function(){var e,t,i,n,a=this.component.grid;return"horizontal"==this.zoomOption.orient?(i=this.zoomOption.width||a.getWidth(),n=this.zoomOption.height||this._fillerSize,e=null!=this.zoomOption.x?this.zoomOption.x:a.getX(),t=null!=this.zoomOption.y?this.zoomOption.y:this.zr.getHeight()-n-2):(i=this.zoomOption.width||this._fillerSize,n=this.zoomOption.height||a.getHeight(),e=null!=this.zoomOption.x?this.zoomOption.x:2,t=null!=this.zoomOption.y?this.zoomOption.y:a.getY()),{x:e,y:t,width:i,height:n}},_getZoom:function(){var e=this.option.series,t=this.option.xAxis;!t||t instanceof Array||(t=[t],this.option.xAxis=t);var i=this.option.yAxis;!i||i instanceof Array||(i=[i],this.option.yAxis=i);var n,a,o=[],s=this.zoomOption.xAxisIndex;if(t&&null==s){n=[];for(var l=0,h=t.length;h>l;l++)("category"==t[l].type||null==t[l].type)&&n.push(l)}else n=s instanceof Array?s:null!=s?[s]:[];if(s=this.zoomOption.yAxisIndex,i&&null==s){a=[];for(var l=0,h=i.length;h>l;l++)"category"==i[l].type&&a.push(l)}else a=s instanceof Array?s:null!=s?[s]:[];for(var m,l=0,h=e.length;h>l;l++)if(m=e[l],m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR||m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_K){for(var V=0,U=n.length;U>V;V++)if(n[V]==(m.xAxisIndex||0)){o.push(l);break}for(var V=0,U=a.length;U>V;V++)if(a[V]==(m.yAxisIndex||0)){o.push(l);break}null==this.zoomOption.xAxisIndex&&null==this.zoomOption.yAxisIndex&&m.data&&this.getDataFromOption(m.data[0])instanceof Array&&(m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR)&&o.push(l)}var d=null!=this._zoom.start?this._zoom.start:null!=this.zoomOption.start?this.zoomOption.start:0,p=null!=this._zoom.end?this._zoom.end:null!=this.zoomOption.end?this.zoomOption.end:100;d>p&&(d+=p,p=d-p,d-=p);var c=Math.round((p-d)/100*("horizontal"==this.zoomOption.orient?this._location.width:this._location.height));return{start:d,end:p,start2:0,end2:100,size:c,xAxisIndex:n,yAxisIndex:a,seriesIndex:o,scatterMap:this._zoom.scatterMap||{}}},_backupData:function(){this._originalData={xAxis:{},yAxis:{},series:{}};for(var e=this.option.xAxis,t=this._zoom.xAxisIndex,i=0,n=t.length;n>i;i++)this._originalData.xAxis[t[i]]=e[t[i]].data;for(var a=this.option.yAxis,o=this._zoom.yAxisIndex,i=0,n=o.length;n>i;i++)this._originalData.yAxis[o[i]]=a[o[i]].data;for(var s,l=this.option.series,h=this._zoom.seriesIndex,i=0,n=h.length;n>i;i++)s=l[h[i]],this._originalData.series[h[i]]=s.data,s.data&&this.getDataFromOption(s.data[0])instanceof Array&&(s.type==r.CHART_TYPE_SCATTER||s.type==r.CHART_TYPE_LINE||s.type==r.CHART_TYPE_BAR)&&(this._backupScale(),this._calculScatterMap(h[i]))},_calculScatterMap:function(t){this._zoom.scatterMap=this._zoom.scatterMap||{},this._zoom.scatterMap[t]=this._zoom.scatterMap[t]||{};var i=e("../component"),n=i.get("axis"),a=l.clone(this.option.xAxis);"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value");var o=new n(this.ecTheme,null,!1,{xAxis:a,series:this.option.series},this,"xAxis"),r=this.option.series[t].xAxisIndex||0;this._zoom.scatterMap[t].x=o.getAxis(r).getExtremum(),o.dispose(),a=l.clone(this.option.yAxis),"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value"),o=new n(this.ecTheme,null,!1,{yAxis:a,series:this.option.series},this,"yAxis"),r=this.option.series[t].yAxisIndex||0,this._zoom.scatterMap[t].y=o.getAxis(r).getExtremum(),o.dispose()},_buildBackground:function(){var e=this._location.width,t=this._location.height;this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x,y:this._location.y,width:e,height:t,color:this.zoomOption.backgroundColor}}));for(var i=0,o=this._originalData.xAxis,s=this._zoom.xAxisIndex,l=0,h=s.length;h>l;l++)i=Math.max(i,o[s[l]].length);for(var m=this._originalData.yAxis,V=this._zoom.yAxisIndex,l=0,h=V.length;h>l;l++)i=Math.max(i,m[V[l]].length);for(var U,d=this._zoom.seriesIndex[0],p=this._originalData.series[d],c=Number.MIN_VALUE,u=Number.MAX_VALUE,l=0,h=p.length;h>l;l++)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),c=Math.max(c,U),u=Math.min(u,U);var y=c-u,g=[],b=e/(i-(i>1?1:0)),f=t/(i-(i>1?1:0)),k=1;"horizontal"==this.zoomOption.orient&&1>b?k=Math.floor(3*i/e):"vertical"==this.zoomOption.orient&&1>f&&(k=Math.floor(3*i/t));for(var l=0,h=i;h>l;l+=k)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),g.push("horizontal"==this.zoomOption.orient?[this._location.x+b*l,this._location.y+t-1-Math.round((U-u)/y*(t-10))]:[this._location.x+1+Math.round((U-u)/y*(e-10)),this._location.y+f*(h-l-1)]);"horizontal"==this.zoomOption.orient?(g.push([this._location.x+e,this._location.y+t]),g.push([this._location.x,this._location.y+t])):(g.push([this._location.x,this._location.y]),g.push([this._location.x,this._location.y+t])),this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:g,color:this.zoomOption.dataBackgroundColor},hoverable:!1}))},_buildFiller:function(){this._fillerShae={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,_type:"filler"},this._fillerShae.style="horizontal"==this.zoomOption.orient?{x:this._location.x+Math.round(this._zoom.start/100*this._location.width)+this._handleSize,y:this._location.y,width:this._zoom.size-2*this._handleSize,height:this._location.height,color:this.zoomOption.fillerColor,text:":::",textPosition:"inside"}:{x:this._location.x,y:this._location.y+Math.round(this._zoom.start/100*this._location.height)+this._handleSize,width:this._location.width,height:this._zoom.size-2*this._handleSize,color:this.zoomOption.fillerColor,text:"::",textPosition:"inside"},this._fillerShae.highlightStyle={brushType:"fill",color:"rgba(0,0,0,0)"},this._fillerShae=new n(this._fillerShae),this.shapeList.push(this._fillerShae)},_buildHandle:function(){var e=this.zoomOption.showDetail?this._getDetail():{start:"",end:""};this._startShape={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,style:{iconType:"rectangle",x:this._location.x,y:this._location.y,width:this._handleSize,height:this._handleSize,color:this.zoomOption.handleColor,text:"=",textPosition:"inside"},highlightStyle:{text:e.start,brushType:"fill",textPosition:"left"},ondrift:this._ondrift,ondragend:this._ondragend},"horizontal"==this.zoomOption.orient?(this._startShape.style.height=this._location.height,this._endShape=l.clone(this._startShape),this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="right"):(this._startShape.style.width=this._location.width,this._endShape=l.clone(this._startShape),this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startShape.highlightStyle.textPosition="bottom",this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="top"),this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_buildFrame:function(){var e=this.subPixelOptimize(this._location.x,1),t=this.subPixelOptimize(this._location.y,1);this._startFrameShape={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:e,y:t,width:this._location.width-(e>this._location.x?1:0),height:this._location.height-(t>this._location.y?1:0),lineWidth:1,brushType:"stroke",strokeColor:this.zoomOption.handleColor}},this._endFrameShape=l.clone(this._startFrameShape),this._startFrameShape=new n(this._startFrameShape),this._endFrameShape=new n(this._endFrameShape),this.shapeList.push(this._startFrameShape),this.shapeList.push(this._endFrameShape)},_syncHandleShape:function(){"horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._zoom.start=(this._startShape.style.x-this._location.x)/this._location.width*100,this._zoom.end=(this._endShape.style.x+this._handleSize-this._location.x)/this._location.width*100):(this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._zoom.start=(this._location.y+this._location.height-this._startShape.style.y)/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-this._endShape.style.y-this._handleSize)/this._location.height*100),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFillerShape:function(){var e,t;"horizontal"==this.zoomOption.orient?(e=this._startShape.style.x,t=this._endShape.style.x,this._fillerShae.style.x=Math.min(e,t)+this._handleSize,this._fillerShae.style.width=Math.abs(e-t)-this._handleSize,this._zoom.start=(Math.min(e,t)-this._location.x)/this._location.width*100,this._zoom.end=(Math.max(e,t)+this._handleSize-this._location.x)/this._location.width*100):(e=this._startShape.style.y,t=this._endShape.style.y,this._fillerShae.style.y=Math.min(e,t)+this._handleSize,this._fillerShae.style.height=Math.abs(e-t)-this._handleSize,this._zoom.start=(this._location.y+this._location.height-Math.max(e,t))/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-Math.min(e,t)-this._handleSize)/this._location.height*100),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFrameShape:function(){"horizontal"==this.zoomOption.orient?(this._startFrameShape.style.width=this._fillerShae.style.x-this._location.x,this._endFrameShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endFrameShape.style.width=this._location.x+this._location.width-this._endFrameShape.style.x):(this._startFrameShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startFrameShape.style.height=this._location.y+this._location.height-this._startFrameShape.style.y,this._endFrameShape.style.height=this._fillerShae.style.y-this._location.y),this.zr.modShape(this._startFrameShape.id),this.zr.modShape(this._endFrameShape.id)},_syncShape:function(){this.zoomOption.show&&("horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._location.x+this._zoom.start/100*this._location.width,this._endShape.style.x=this._location.x+this._zoom.end/100*this._location.width-this._handleSize,this._fillerShae.style.x=this._startShape.style.x+this._handleSize,this._fillerShae.style.width=this._endShape.style.x-this._startShape.style.x-this._handleSize):(this._startShape.style.y=this._location.y+this._location.height-this._zoom.start/100*this._location.height,this._endShape.style.y=this._location.y+this._location.height-this._zoom.end/100*this._location.height-this._handleSize,this._fillerShae.style.y=this._endShape.style.y+this._handleSize,this._fillerShae.style.height=this._startShape.style.y-this._endShape.style.y-this._handleSize),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refresh())},_syncData:function(e){var t,i,n,a,o;for(var s in this._originalData){t=this._originalData[s];for(var l in t)o=t[l],null!=o&&(a=o.length,i=Math.floor(this._zoom.start/100*a),n=Math.ceil(this._zoom.end/100*a),this.getDataFromOption(o[0])instanceof Array&&this.option[s][l].type!=r.CHART_TYPE_K?(this._setScale(),this.option[s][l].data=this._synScatterData(l,o)):this.option[s][l].data=o.slice(i,n))}this._isSilence||!this.zoomOption.realtime&&!e||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart)},_synScatterData:function(e,t){if(0===this._zoom.start&&100==this._zoom.end&&0===this._zoom.start2&&100==this._zoom.end2)return t;var i,n,a,o,r,s=[],l=this._zoom.scatterMap[e]; "horizontal"==this.zoomOption.orient?(i=l.x.max-l.x.min,n=this._zoom.start/100*i+l.x.min,a=this._zoom.end/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start2/100*i+l.y.min,r=this._zoom.end2/100*i+l.y.min):(i=l.x.max-l.x.min,n=this._zoom.start2/100*i+l.x.min,a=this._zoom.end2/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start/100*i+l.y.min,r=this._zoom.end/100*i+l.y.min);var h;(h=l.x.dataMappingMethods)&&(n=h.coord2Value(n),a=h.coord2Value(a)),(h=l.y.dataMappingMethods)&&(o=h.coord2Value(o),r=h.coord2Value(r));for(var m,V=0,U=t.length;U>V;V++)m=t[V].value||t[V],m[0]>=n&&m[0]<=a&&m[1]>=o&&m[1]<=r&&s.push(t[V]);return s},_setScale:function(){var e=0!==this._zoom.start||100!==this._zoom.end||0!==this._zoom.start2||100!==this._zoom.end2,t={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var i in t)for(var n=0,a=t[i].length;a>n;n++)t[i][n].scale=e||t[i][n]._scale},_backupScale:function(){var e={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var t in e)for(var i=0,n=e[t].length;n>i;i++)e[t][i]._scale=e[t][i].scale},_getDetail:function(){for(var e=["xAxis","yAxis"],t=0,i=e.length;i>t;t++){var n=this._originalData[e[t]];for(var a in n){var o=n[a];if(null!=o){var r=o.length,l=Math.floor(this._zoom.start/100*r),h=Math.ceil(this._zoom.end/100*r);return h-=h>0?1:0,{start:this.getDataFromOption(o[l]),end:this.getDataFromOption(o[h])}}}}e="horizontal"==this.zoomOption.orient?"xAxis":"yAxis";var m=this._zoom.seriesIndex[0],V=this.option.series[m][e+"Index"]||0,U=this.option[e][V].type,d=this._zoom.scatterMap[m][e.charAt(0)].min,p=this._zoom.scatterMap[m][e.charAt(0)].max,c=p-d;if("value"==U)return{start:d+c*this._zoom.start/100,end:d+c*this._zoom.end/100};if("time"==U){p=d+c*this._zoom.end/100,d+=c*this._zoom.start/100;var u=s.getAutoFormatter(d,p).formatter;return{start:s.format(u,d),end:s.format(u,p)}}return{start:"",end:""}},__ondrift:function(e,t,i){this.zoomOption.zoomLock&&(e=this._fillerShae);var n="filler"==e._type?this._handleSize:0;if("horizontal"==this.zoomOption.orient?e.style.x+t-n<=this._location.x?e.style.x=this._location.x+n:e.style.x+t+e.style.width+n>=this._location.x+this._location.width?e.style.x=this._location.x+this._location.width-e.style.width-n:e.style.x+=t:e.style.y+i-n<=this._location.y?e.style.y=this._location.y+n:e.style.y+i+e.style.height+n>=this._location.y+this._location.height?e.style.y=this._location.y+this._location.height-e.style.height-n:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(),this.zoomOption.realtime&&this._syncData(),this.zoomOption.showDetail){var a=this._getDetail();this._startShape.style.text=this._startShape.highlightStyle.text=a.start,this._endShape.style.text=this._endShape.highlightStyle.text=a.end,this._startShape.style.textPosition=this._startShape.highlightStyle.textPosition,this._endShape.style.textPosition=this._endShape.highlightStyle.textPosition}return!0},__ondragend:function(){this.zoomOption.showDetail&&(this._startShape.style.text=this._endShape.style.text="=",this._startShape.style.textPosition=this._endShape.style.textPosition="inside",this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.refreshNextFrame()),this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.zoomOption.realtime&&this._syncData(),t.dragOut=!0,t.dragIn=!0,this._isSilence||this.zoomOption.realtime||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart),t.needRefresh=!1,this.isDragend=!1)},ondataZoom:function(e,t){t.needRefresh=!0},absoluteZoom:function(e){this._zoom.start=e.start,this._zoom.end=e.end,this._zoom.start2=e.start2,this._zoom.end2=e.end2,this._syncShape(),this._syncData(!0)},rectZoom:function(e){if(!e)return this._zoom.start=this._zoom.start2=0,this._zoom.end=this._zoom.end2=100,this._syncShape(),this._syncData(!0),this._zoom;var t=this.component.grid.getArea(),i={x:e.x,y:e.y,width:e.width,height:e.height};if(i.width<0&&(i.x+=i.width,i.width=-i.width),i.height<0&&(i.y+=i.height,i.height=-i.height),i.x>t.x+t.width||i.y>t.y+t.height)return!1;i.xt.x+t.width&&(i.width=t.x+t.width-i.x),i.y+i.height>t.y+t.height&&(i.height=t.y+t.height-i.y);var n,a=(i.x-t.x)/t.width,o=1-(i.x+i.width-t.x)/t.width,r=1-(i.y+i.height-t.y)/t.height,s=(i.y-t.y)/t.height;return"horizontal"==this.zoomOption.orient?(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*a,this._zoom.end-=n*o,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*r,this._zoom.end2-=n*s):(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*r,this._zoom.end-=n*s,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*a,this._zoom.end2-=n*o),this._syncShape(),this._syncData(!0),this._zoom},syncBackupData:function(e){for(var t,i,n=this._originalData.series,a=e.series,o=0,r=a.length;r>o;o++){i=a[o].data||a[o].eventList,t=n[o]?Math.floor(this._zoom.start/100*n[o].length):0;for(var s=0,l=i.length;l>s;s++)n[o]&&(n[o][s+t]=i[s])}},syncOption:function(e){this.silence(!0),this.option=e,this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom&&this.option.dataZoom.show&&this._buildShape(),this._syncData(),this.silence(!1)},silence:function(e){this._isSilence=e},getRealDataIndex:function(e,t){if(!this._originalData||0===this._zoom.start&&100==this._zoom.end)return t;var i=this._originalData.series;return i[e]?Math.floor(this._zoom.start/100*i[e].length)+t:-1},resize:function(){this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this.option.dataZoom.show&&this._buildShape()}},l.inherits(t,i),e("../component").define("dataZoom",t),t}),i("echarts/component/categoryAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o,r){if(a.data.length<1)return void console.error("option.data.length < 1.");i.call(this,e,t,n,a,o),this.grid=this.component.grid;for(var s in r)this[s]=r[s];this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.categoryAxis={zlevel:0,z:0,show:!0,position:"bottom",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!0,interval:"auto",inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,interval:"auto",rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("zrender/tool/util"),l=e("zrender/tool/area");return t.prototype={type:r.COMPONENT_TYPE_AXIS_CATEGORY,_getReformedLabel:function(e){var t=this.getDataFromOption(this.option.data[e]),i=this.option.data[e].formatter||this.option.axisLabel.formatter;return i&&("function"==typeof i?t=i.call(this.myChart,t):"string"==typeof i&&(t=i.replace("{value}",t))),t},_getInterval:function(){var e=this.option.axisLabel.interval;if("auto"==e){var t=this.option.axisLabel.textStyle.fontSize,i=this.option.data,n=this.option.data.length;if(this.isHorizontal())if(n>3){var a,o,r=this.getGap(),h=!1,m=Math.floor(.5/r);for(m=1>m?1:m,e=Math.floor(15/r);!h&&n>e;){e+=m,h=!0,a=Math.floor(r*e);for(var V=Math.floor((n-1)/e)*e;V>=0;V-=e){if(0!==this.option.axisLabel.rotate)o=t;else if(i[V].textStyle)o=l.getTextWidth(this._getReformedLabel(V),this.getFont(s.merge(i[V].textStyle,this.option.axisLabel.textStyle)));else{var U=this._getReformedLabel(V)+"",d=(U.match(/\w/g)||"").length,p=U.length-d;o=d*t*2/3+p*t}if(o>a){h=!1;break}}}}else e=1;else if(n>3){var r=this.getGap();for(e=Math.floor(11/r);t>r*e-6&&n>e;)e++}else e=1}else e="function"==typeof e?1:e-0+1;return e},_buildShape:function(){if(this._interval=this._getInterval(),this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width,l="function"==typeof n.interval?n.interval:"auto"==n.interval&&"function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,h=l?1:"auto"==n.interval?this._interval:n.interval-0+1,m=n.onGap,V=m?this.getGap()/2:"undefined"==typeof m&&this.option.boundaryGap?this.getGap()/2:0,U=V>0?-h:0;if(this.isHorizontal())for(var d,p="bottom"==this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(d=this.subPixelOptimize(this.getCoordByIndex(c)+(c>=0?V:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:d,yStart:p,xEnd:d,yEnd:p+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)));else for(var u,y="left"==this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-(c>=0?V:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:y+o,yEnd:u,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)))},_buildAxisLabel:function(){var e,t,i=this.option.data,a=this.option.data.length,o=this.option.axisLabel,r=o.rotate,l=o.margin,h=o.clickable,m=o.textStyle,V="function"==typeof o.interval?o.interval:!1;if(this.isHorizontal()){var U,d;"bottom"==this.option.position?(U=this.grid.getYend()+l,d="top"):(U=this.grid.getY()-l,d="bottom");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||""===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoordByIndex(p),y:U,color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||"center",textBaseline:t.baseline||d}},r&&(e.style.textAlign=r>0?"bottom"==this.option.position?"right":"left":"bottom"==this.option.position?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}else{var c,u;"left"==this.option.position?(c=this.grid.getX()-l,u="right"):(c=this.grid.getXend()+l,u="left");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||""===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:c,y:this.getCoordByIndex(p),color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||u,textBaseline:t.baseline||0===p&&""!==this.option.name?"bottom":p==a-1&&""!==this.option.name?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}},_buildSplitLine:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length,h="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,m=n.onGap,V=m?this.getGap()/2:"undefined"==typeof m&&this.option.boundaryGap?this.getGap()/2:0;if(i-=m||"undefined"==typeof m&&this.option.boundaryGap?1:0,this.isHorizontal())for(var U,d=this.grid.getY(),p=this.grid.getYend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(U=this.subPixelOptimize(this.getCoordByIndex(c)+V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:d,xEnd:U,yEnd:p,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)));else for(var u,y=this.grid.getX(),g=this.grid.getXend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:g,yEnd:u,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)))},_buildSplitArea:function(){var e,t=this.option.data,i=this.option.splitArea,n=i.areaStyle.color;if(n instanceof Array){var a=n.length,r=this.option.data.length,s="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,l=i.onGap,h=l?this.getGap()/2:"undefined"==typeof l&&this.option.boundaryGap?this.getGap()/2:0;if(this.isHorizontal())for(var m,V=this.grid.getY(),U=this.grid.getHeight(),d=this.grid.getX(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(m=r>p?this.getCoordByIndex(p)+h:this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:d,y:V,width:m-d,height:U,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),d=m);else for(var c,u=this.grid.getX(),y=this.grid.getWidth(),g=this.grid.getYend(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(c=r>p?this.getCoordByIndex(p)-h:this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:u,y:c,width:y,height:g-c,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),g=c)}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:n}},this.shapeList.push(new o(e))},refresh:function(e){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=this.getTextStyle(this.option.axisLabel.textStyle)),this.clear(),this._buildShape()},getGap:function(){var e=this.option.data.length,t=this.isHorizontal()?this.grid.getWidth():this.grid.getHeight();return this.option.boundaryGap?t/e:t/(e>1?e-1:1)},getCoord:function(e){for(var t=this.option.data,i=t.length,n=this.getGap(),a=this.option.boundaryGap?n/2:0,o=0;i>o;o++){if(this.getDataFromOption(t[o])==e)return a=this.isHorizontal()?this.grid.getX()+a:this.grid.getYend()-a;a+=n}},getCoordByIndex:function(e){if(0>e)return this.isHorizontal()?this.grid.getX():this.grid.getYend();if(e>this.option.data.length-1)return this.isHorizontal()?this.grid.getXend():this.grid.getY();var t=this.getGap(),i=this.option.boundaryGap?t/2:0;return i+=e*t,i=this.isHorizontal()?this.grid.getX()+i:this.grid.getYend()-i},getNameByIndex:function(e){return this.getDataFromOption(this.option.data[e])},getIndexByName:function(e){for(var t=this.option.data,i=t.length,n=0;i>n;n++)if(this.getDataFromOption(t[n])==e)return n;return-1},getValueFromCoord:function(){return""},isMainAxis:function(e){return e%this._interval===0}},s.inherits(t,i),e("../component").define("categoryAxis",t),t}),i("echarts/component/valueAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/date","zrender/tool/util","../util/smartSteps","../util/accMath","../util/smartLogSteps","../component"],function(e){function t(e,t,n,a,o,r,s){if(!s||0===s.length)return void console.err("option.series.length == 0.");i.call(this,e,t,n,a,o),this.series=s,this.grid=this.component.grid;for(var l in r)this[l]=r[l];this.refresh(a,s)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.valueAxis={zlevel:0,z:0,show:!0,position:"left",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:[0,0],axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_AXIS_VALUE,_buildShape:function(){if(this._hasData=!1,this._calculateValue(),this._hasData&&this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width;if(this.isHorizontal())for(var l,h="bottom"===this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,m=0;i>m;m++)l=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:l,yStart:h,xEnd:l,yEnd:h+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e));else for(var V,U="left"===this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,m=0;i>m;m++)V=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:V,xEnd:U+o,yEnd:V,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e))},_buildAxisLabel:function(){var e,t=this._valueList,i=this._valueList.length,a=this.option.axisLabel.rotate,o=this.option.axisLabel.margin,r=this.option.axisLabel.clickable,s=this.option.axisLabel.textStyle;if(this.isHorizontal()){var l,h;"bottom"===this.option.position?(l=this.grid.getYend()+o,h="top"):(l=this.grid.getY()-o,h="bottom");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoord(t[m]),y:l,color:"function"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||"center",textBaseline:s.baseline||h}},a&&(e.style.textAlign=a>0?"bottom"===this.option.position?"right":"left":"bottom"===this.option.position?"left":"right",e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}else{var V,U;"left"===this.option.position?(V=this.grid.getX()-o,U="right"):(V=this.grid.getXend()+o,U="left");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:V,y:this.getCoord(t[m]),color:"function"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||U,textBaseline:s.baseline||(0===m&&""!==this.option.name?"bottom":m===i-1&&""!==this.option.name?"top":"middle")}},a&&(e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}},_buildSplitLine:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length;if(this.isHorizontal())for(var h,m=this.grid.getY(),V=this.grid.getYend(),U=0;i>U;U++)h=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:h,yStart:m,xEnd:h,yEnd:V,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e));else for(var d,p=this.grid.getX(),c=this.grid.getXend(),U=0;i>U;U++)d=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:p,yStart:d,xEnd:c,yEnd:d,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e))},_buildSplitArea:function(){var e,t=this.option.splitArea.areaStyle.color;if(t instanceof Array){var i=t.length,n=this._valueList,a=this._valueList.length;if(this.isHorizontal())for(var r,s=this.grid.getY(),l=this.grid.getHeight(),h=this.grid.getX(),m=0;a>=m;m++)r=a>m?this.getCoord(n[m]):this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:h,y:s,width:r-h,height:l,color:t[m%i]}},this.shapeList.push(new o(e)),h=r;else for(var V,U=this.grid.getX(),d=this.grid.getWidth(),p=this.grid.getYend(),m=0;a>=m;m++)V=a>m?this.getCoord(n[m]):this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:U,y:V,width:d,height:p-V,color:t[m%i]}},this.shapeList.push(new o(e)),p=V}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:t}},this.shapeList.push(new o(e))},_calculateValue:function(){if(isNaN(this.option.min-0)||isNaN(this.option.max-0)){for(var e,t,i={},n=this.component.legend,a=0,o=this.series.length;o>a;a++)!(this.series[a].type!=r.CHART_TYPE_LINE&&this.series[a].type!=r.CHART_TYPE_BAR&&this.series[a].type!=r.CHART_TYPE_SCATTER&&this.series[a].type!=r.CHART_TYPE_K&&this.series[a].type!=r.CHART_TYPE_EVENTRIVER||n&&!n.isSelected(this.series[a].name)||(e=this.series[a].xAxisIndex||0,t=this.series[a].yAxisIndex||0,this.option.xAxisIndex!=e&&this.option.yAxisIndex!=t||!this._calculSum(i,a)));var s;for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)if(!isNaN(s[l])){this._hasData=!0,this._min=s[l],this._max=s[l];break}if(this._hasData)break}for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)isNaN(s[l])||(this._min=Math.min(this._min,s[l]),this._max=Math.max(this._max,s[l]))}var m="log"!==this.option.type?this.option.boundaryGap:[0,0],V=Math.abs(this._max-this._min);this._min=isNaN(this.option.min-0)?this._min-Math.abs(V*m[0]):this.option.min-0,this._max=isNaN(this.option.max-0)?this._max+Math.abs(V*m[1]):this.option.max-0,this._min===this._max&&(0===this._max?this._max=1:this._max>0?this._min=this._max/this.option.splitNumber!=null?this.option.splitNumber:5:this._max=this._max/this.option.splitNumber!=null?this.option.splitNumber:5),"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._reformValue(this.option.scale)}else this._hasData=!0,this._min=this.option.min-0,this._max=this.option.max-0,"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._customerValue()},_calculSum:function(e,t){var i,n,a=this.series[t].name||"kener";if(this.series[t].stack){var o="__Magic_Key_Positive__"+this.series[t].stack,l="__Magic_Key_Negative__"+this.series[t].stack;e[o]=e[o]||[],e[l]=e[l]||[],e[a]=e[a]||[],n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),"-"!==i&&(i-=0,i>=0?null!=e[o][h]?e[o][h]+=i:e[o][h]=i:null!=e[l][h]?e[l][h]+=i:e[l][h]=i,this.option.scale&&e[a].push(i))}else if(e[a]=e[a]||[],this.series[t].type!=r.CHART_TYPE_EVENTRIVER){n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),this.series[t].type===r.CHART_TYPE_K?(e[a].push(i[0]),e[a].push(i[1]),e[a].push(i[2]),e[a].push(i[3])):i instanceof Array?(-1!=this.option.xAxisIndex&&e[a].push("time"!=this.option.type?i[0]:s.getNewDate(i[0])),-1!=this.option.yAxisIndex&&e[a].push("time"!=this.option.type?i[1]:s.getNewDate(i[1]))):e[a].push(i)}else{n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)for(var V=n[h].evolution,U=0,d=V.length;d>U;U++)e[a].push(s.getNewDate(V[U].time))}},_reformValue:function(t){var i=e("../util/smartSteps"),n=this.option.splitNumber;!t&&this._min>=0&&this._max>=0&&(this._min=0),!t&&this._min<=0&&this._max<=0&&(this._max=0);var a=i(this._min,this._max,n);n=null!=n?n:a.secs,this._min=a.min,this._max=a.max,this._valueList=a.pnts,this._reformLabelData()},_reformTimeValue:function(){var e=null!=this.option.splitNumber?this.option.splitNumber:5,t=s.getAutoFormatter(this._min,this._max,e),i=t.formatter,n=t.gapValue;this._valueList=[s.getNewDate(this._min)];var a;switch(i){case"week":a=s.nextMonday(this._min);break;case"month":a=s.nextNthOnMonth(this._min,1);break;case"quarter":a=s.nextNthOnQuarterYear(this._min,1);break;case"half-year":a=s.nextNthOnHalfYear(this._min,1);break;case"year":a=s.nextNthOnYear(this._min,1);break;default:72e5>=n?a=(Math.floor(this._min/n)+1)*n:(a=s.getNewDate(this._min- -n),a.setHours(6*Math.round(a.getHours()/6)),a.setMinutes(0),a.setSeconds(0))}for(a-this._min=0&&(("month"==i||"quarter"==i||"half-year"==i||"year"==i)&&t.setDate(1),!(this._max-t=a;a++)this._valueList.push(t.accAdd(this._min,t.accMul(n,a)));this._reformLabelData()},_reformLogValue:function(){var t=this.option,i=e("../util/smartLogSteps")({dataMin:this._min,dataMax:this._max,logPositive:t.logPositive,logLabelBase:t.logLabelBase,splitNumber:t.splitNumber});this._min=i.dataMin,this._max=i.dataMax,this._valueList=i.tickList,this._dataMappingMethods=i.dataMappingMethods,this._reformLabelData(i.labelFormatter)},_reformLabelData:function(e){this._valueLabel=[];var t=this.option.axisLabel.formatter;if(t)for(var i=0,n=this._valueList.length;n>i;i++)"function"==typeof t?this._valueLabel.push(e?t.call(this.myChart,this._valueList[i],e):t.call(this.myChart,this._valueList[i])):"string"==typeof t&&this._valueLabel.push(e?s.format(t,this._valueList[i]):t.replace("{value}",this._valueList[i]));else for(var i=0,n=this._valueList.length;n>i;i++)this._valueLabel.push(e?e(this._valueList[i]):this.numAddCommas(this._valueList[i]))},getExtremum:function(){this._calculateValue();var e=this._dataMappingMethods;return{min:this._min,max:this._max,dataMappingMethods:e?l.merge({},e):null}},refresh:function(e,t){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=l.merge(this.option.axisLabel.textStyle||{},this.ecTheme.textStyle),this.series=t),this.zr&&(this.clear(),this._buildShape())},getCoord:function(e){this._dataMappingMethods&&(e=this._dataMappingMethods.value2Coord(e)),e=ethis._max?this._max:e;var t;return t=this.isHorizontal()?this.grid.getX()+(e-this._min)/(this._max-this._min)*this.grid.getWidth():this.grid.getYend()-(e-this._min)/(this._max-this._min)*this.grid.getHeight()},getCoordSize:function(e){return Math.abs(this.isHorizontal()?e/(this._max-this._min)*this.grid.getWidth():e/(this._max-this._min)*this.grid.getHeight())},getValueFromCoord:function(e){var t;return this.isHorizontal()?(e=ethis.grid.getXend()?this.grid.getXend():e,t=this._min+(e-this.grid.getX())/this.grid.getWidth()*(this._max-this._min)):(e=ethis.grid.getYend()?this.grid.getYend():e,t=this._max-(e-this.grid.getY())/this.grid.getHeight()*(this._max-this._min)),this._dataMappingMethods&&(t=this._dataMappingMethods.coord2Value(t)),t.toFixed(2)-0},isMaindAxis:function(e){for(var t=0,i=this._valueList.length;i>t;t++)if(this._valueList[t]===e)return!0;return!1}},l.inherits(t,i),e("../component").define("valueAxis",t),t}),i("echarts/util/date",[],function(){function e(e,t,i){i=i>1?i:2;for(var n,a,o,r,s=0,l=m.length;l>s;s++)if(n=m[s].value,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,Math.round(a/n)<=1.2*i){o=m[s].formatter,r=m[s].value;break}return null==o&&(o="year",n=317088e5,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,r=Math.round(a/(i-1)/n)*n),{formatter:o,gapValue:r}}function t(e){return 10>e?"0"+e:e}function i(e,i){("week"==e||"month"==e||"quarter"==e||"half-year"==e||"year"==e)&&(e="MM - dd\nyyyy");var n=h(i),a=n.getFullYear(),o=n.getMonth()+1,r=n.getDate(),s=n.getHours(),l=n.getMinutes(),m=n.getSeconds();return e=e.replace("MM",t(o)),e=e.toLowerCase(),e=e.replace("yyyy",a),e=e.replace("yy",a%100),e=e.replace("dd",t(r)),e=e.replace("d",r),e=e.replace("hh",t(s)),e=e.replace("h",s),e=e.replace("mm",t(l)),e=e.replace("m",l),e=e.replace("ss",t(m)),e=e.replace("s",m)}function n(e){return e=h(e),e.setDate(e.getDate()+8-e.getDay()),e}function a(e,t,i){return e=h(e),e.setMonth(Math.ceil((e.getMonth()+1)/i)*i),e.setDate(t),e}function o(e,t){return a(e,t,1)}function r(e,t){return a(e,t,3)}function s(e,t){return a(e,t,6)}function l(e,t){return a(e,t,12)}function h(e){return e instanceof Date?e:new Date("string"==typeof e?e.replace(/-/g,"/"):e)}var m=[{formatter:"hh : mm : ss",value:1e3},{formatter:"hh : mm : ss",value:5e3},{formatter:"hh : mm : ss",value:1e4},{formatter:"hh : mm : ss",value:15e3},{formatter:"hh : mm : ss",value:3e4},{formatter:"hh : mm\nMM - dd",value:6e4},{formatter:"hh : mm\nMM - dd",value:3e5},{formatter:"hh : mm\nMM - dd",value:6e5},{formatter:"hh : mm\nMM - dd",value:9e5},{formatter:"hh : mm\nMM - dd",value:18e5},{formatter:"hh : mm\nMM - dd",value:36e5},{formatter:"hh : mm\nMM - dd",value:72e5},{formatter:"hh : mm\nMM - dd",value:216e5},{formatter:"hh : mm\nMM - dd",value:432e5},{formatter:"MM - dd\nyyyy",value:864e5},{formatter:"week",value:6048e5},{formatter:"month",value:26784e5},{formatter:"quarter",value:8208e6},{formatter:"half-year",value:16416e6},{formatter:"year",value:32832e6}];return{getAutoFormatter:e,getNewDate:h,format:i,nextMonday:n,nextNthPerNmonth:a,nextNthOnMonth:o,nextNthOnQuarterYear:r,nextNthOnHalfYear:s,nextNthOnYear:l}}),i("echarts/util/smartSteps",[],function(){function e(e){return X.log(I(e))/X.LN10}function t(e){return X.pow(10,e)}function i(e){return e===w(e)}function n(e,t,n,a){b=a||{},f=b.steps||L,k=b.secs||W,n=v(+n||0)%99,e=+e||0,t=+t||0,x=_=0,"min"in b&&(e=+b.min||0,x=1),"max"in b&&(t=+b.max||0,_=1),e>t&&(t=[e,e=t][0]);var o=t-e;if(x&&_)return g(e,t,n);if((n||5)>o){if(i(e)&&i(t))return d(e,t,n);if(0===o)return p(e,t,n)}return h(e,t,n)}function a(e,i,n,a){a=a||0;var s=o((i-e)/n,-1),l=o(e,-1,1),h=o(i,-1),m=X.min(s.e,l.e,h.e);0===l.c?m=X.min(s.e,h.e):0===h.c&&(m=X.min(s.e,l.e)),r(s,{c:0,e:m}),r(l,s,1),r(h,s),a+=m,e=l.c,i=h.c;for(var V=(i-e)/n,U=t(a),d=0,p=[],c=n+1;c--;)p[c]=(e+V*c)*U;if(0>a){d=u(U),V=+(V*U).toFixed(d),e=+(e*U).toFixed(d),i=+(i*U).toFixed(d);for(var c=p.length;c--;)p[c]=p[c].toFixed(d),0===+p[c]&&(p[c]="0")}else e*=U,i*=U,V*=U;return k=0,f=0,b=0,{min:e,max:i,secs:n,step:V,fix:d,exp:a,pnts:p}}function o(n,a,o){a=v(a%10)||2,0>a&&(i(n)?a=(""+I(n)).replace(/0+$/,"").length||1:(n=n.toFixed(15).replace(/0+$/,""),a=n.replace(".","").replace(/^[-0]+/,"").length,n=+n));var r=w(e(n))-a+1,s=+(n*t(-r)).toFixed(15)||0;return s=o?w(s):K(s),!s&&(r=0),(""+I(s)).length>a&&(r+=1,s/=10),{c:s,e:r}}function r(e,i,n){var a=i.e-e.e;a&&(e.e+=a,e.c*=t(-a),e.c=n?w(e.c):K(e.c))}function s(e,t,i){e.et[n];)n++;if(!t[n])for(i/=10,e.e+=1,n=0;i>t[n];)n++;return e.c=t[n],e}function h(e,t,n){var s,h=n||+k.slice(-1),p=l((t-e)/h,f),u=o(t-e),g=o(e,-1,1),b=o(t,-1);if(r(u,p),r(g,p,1),r(b,p),n?s=V(g,b,h):h=m(g,b),i(e)&&i(t)&&e*t>=0){if(h>t-e)return d(e,t,h);h=U(e,t,n,g,b,h)}var L=c(e,t,g.c,b.c);return g.c=L[0],b.c=L[1],(x||_)&&y(e,t,g,b),a(g.c,b.c,h,b.e)}function m(e,i){for(var n,a,o,r,s=[],h=k.length;h--;)n=k[h],a=l((i.c-e.c)/n,f),a=a.c*t(a.e),o=w(e.c/a)*a,r=K(i.c/a)*a,s[h]={min:o,max:r,step:a,span:r-o};return s.sort(function(e,t){var i=e.span-t.span;return 0===i&&(i=e.step-t.step),i}),s=s[0],n=s.span/s.step,e.c=s.min,i.c=s.max,3>n?2*n:n}function V(e,i,n){for(var a,o,r=i.c,s=(i.c-e.c)/n-1;r>e.c;)s=l(s+1,f),s=s.c*t(s.e),a=s*n,o=K(i.c/s)*s,r=o-a;var h=e.c-r,m=o-i.c,V=h-m;return V>1.1*s&&(V=v(V/s/2)*s,r+=V,o+=V),e.c=r,i.c=o,s}function U(e,n,a,o,r,s){var l=r.c-o.c,h=l/s*t(r.e);if(!i(h)&&(h=w(h),l=h*s,n-e>l&&(h+=1,l=h*s,!a&&h*(s-1)>=n-e&&(s-=1,l=h*s)),l>=n-e)){var m=l-(n-e);o.c=v(e-m/2),r.c=v(n+m/2),o.e=0,r.e=0}return s}function d(e,t,i){if(i=i||5,x)t=e+i;else if(_)e=t-i;else{var n=i-(t-e),o=v(e-n/2),r=v(t+n/2),s=c(e,t,o,r);e=s[0],t=s[1]}return a(e,t,i)}function p(e,t,i){i=i||5;var n=X.min(I(t/i),i)/2.1;return x?t=e+n:_?e=t-n:(e-=n,t+=n),h(e,t,i)}function c(e,t,i,n){ return e>=0&&0>i?(n-=i,i=0):0>=t&&n>0&&(i-=n,n=0),[i,n]}function u(e){return e=(+e).toFixed(15).split("."),e.pop().replace(/0+$/,"").length}function y(e,t,i,n){if(x){var a=o(e,4,1);i.e-a.e>6&&(a={c:0,e:i.e}),s(i,a),s(n,a),n.c+=a.c-i.c,i.c=a.c}else if(_){var r=o(t,4);n.e-r.e>6&&(r={c:0,e:n.e}),s(i,r),s(n,r),i.c+=r.c-n.c,n.c=r.c}}function g(e,t,i){var n=i?[i]:k,s=t-e;if(0===s)return t=o(t,3),i=n[0],t.c=v(t.c+i/2),a(t.c-i,t.c,i,t.e);I(t/s)<1e-6&&(t=0),I(e/s)<1e-6&&(e=0);var l,h,m,V=[[5,10],[10,2],[50,10],[100,2]],U=[],d=[],p=o(t-e,3),c=o(e,-1,1),u=o(t,-1);r(c,p,1),r(u,p),s=u.c-c.c,p.c=s;for(var y=n.length;y--;){i=n[y],l=K(s/i),h=l*i-s,m=3*(h+3),m+=2*(i-n[0]+2),i%5===0&&(m-=10);for(var g=V.length;g--;)l%V[g][0]===0&&(m/=V[g][1]);d[y]=[i,l,h,m].join(),U[y]={secs:i,step:l,delta:h,score:m}}return U.sort(function(e,t){return e.score-t.score}),U=U[0],c.c=v(c.c-U.delta/2),u.c=v(u.c+U.delta/2),a(c.c,u.c,U.secs,p.e)}var b,f,k,x,_,L=[10,20,25,50],W=[4,5,6],X=Math,v=X.round,w=X.floor,K=X.ceil,I=X.abs;return n}),i("echarts/util/smartLogSteps",["require","./number"],function(e){function t(e){return i(),u=e||{},n(),a(),[o(),i()][0]}function i(){U=u=g=c=b=f=y=k=d=p=null}function n(){d=u.logLabelBase,null==d?(p="plain",d=10,c=I):(d=+d,1>d&&(d=10),p="exponent",c=L(d)),y=u.splitNumber,null==y&&(y=E);var e=parseFloat(u.dataMin),t=parseFloat(u.dataMax);isFinite(e)||isFinite(t)?isFinite(e)?isFinite(t)?e>t&&(t=[e,e=t][0]):t=e:e=t:e=t=1,U=u.logPositive,null==U&&(U=t>0||0===e),b=U?e:-t,f=U?t:-e,S>b&&(b=S),S>f&&(f=S)}function a(){function e(){y>m&&(y=m);var e=w(l(m/y)),t=v(l(m/e)),i=e*t,n=(i-U)/2,a=w(l(r-n));V(a-r)&&(a-=1),g=-a*c;for(var s=a;o>=s-e;s+=e)k.push(W(d,s))}function t(){for(var e=i(h,0),t=e+2;t>e&&a(e+1)+n(e+1)*Ct&&a(l-1)+n(l-1)*C>o;)l--;g=-(a(e)*I+n(e)*J);for(var m=e;l>=m;m++){var V=a(m),U=n(m);k.push(W(10,V)*W(2,U))}}function i(e,t){return 3*e+t}function n(e){return e-3*a(e)}function a(e){return w(l(e/3))}k=[];var o=l(L(f)/c),r=l(L(b)/c),s=v(o),h=w(r),m=s-h,U=o-r;"exponent"===p?e():F>=m&&y>F?t():e()}function o(){for(var e=[],t=0,i=k.length;i>t;t++)e[t]=(U?1:-1)*k[t];!U&&e.reverse();var n=s(),a=n.value2Coord,o=a(e[0]),l=a(e[e.length-1]);return o===l&&(o-=1,l+=1),{dataMin:o,dataMax:l,tickList:e,logPositive:U,labelFormatter:r(),dataMappingMethods:n}}function r(){if("exponent"===p){var e=d,t=c;return function(i){if(!isFinite(parseFloat(i)))return"";var n="";return 0>i&&(i=-i,n="-"),n+e+m(L(i)/t)}}return function(e){return isFinite(parseFloat(e))?x.addCommas(h(e)):""}}function s(){var e=U,t=g;return{value2Coord:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)?e&&S>i?i=S:!e&&i>-S&&(i=-S):i=S,i=X(i),(e?1:-1)*(L(i)+t))},coord2Value:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)||(i=S),e?W(K,i-t):-W(K,-i+t))}}}function l(e){return+Number(+e).toFixed(14)}function h(e){return Number(e).toFixed(15).replace(/\.?0*$/,"")}function m(e){e=h(Math.round(e));for(var t=[],i=0,n=e.length;n>i;i++){var a=e.charAt(i);t.push(T[a]||"")}return t.join("")}function V(e){return e>-S&&S>e}var U,d,p,c,u,y,g,b,f,k,x=e("./number"),_=Math,L=_.log,W=_.pow,X=_.abs,v=_.ceil,w=_.floor,K=_.E,I=_.LN10,J=_.LN2,C=J/I,S=1e-9,E=5,F=2,T={0:"⁰",1:"¹",2:"²",3:"³",4:"⁴",5:"⁵",6:"⁶",7:"⁷",8:"⁸",9:"⁹","-":"⁻"};return t}),i("echarts/chart/line",["require","./base","zrender/shape/Polyline","../util/shape/Icon","../util/shape/HalfSmoothPolygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o),this.refresh(a)}function i(e,t,i){var n=t.x,a=t.y,r=t.width,s=t.height,l=s/2;t.symbol.match("empty")&&(e.fillStyle="#fff"),t.brushType="both";var h=t.symbol.replace("empty","").toLowerCase();h.match("star")?(l=h.replace("star","")-0||5,a-=1,h="star"):("rectangle"===h||"arrow"===h)&&(n+=(r-s)/2,r=s);var m="";if(h.match("image")&&(m=h.replace(new RegExp("^image:\\/\\/"),""),h="image",n+=Math.round((r-s)/2)-1,r=s+=2),h=o.prototype.iconLibrary[h]){var V=t.x,U=t.y;e.moveTo(V,U+l),e.lineTo(V+5,U+l),e.moveTo(V+t.width-5,U+l),e.lineTo(V+t.width,U+l);var d=this;h(e,{x:n+4,y:a+4,width:r-8,height:s-8,n:l,image:m},function(){d.modSelf(),i()})}else e.moveTo(n,a+l),e.lineTo(n+r,a+l)}var n=e("./base"),a=e("zrender/shape/Polyline"),o=e("../util/shape/Icon"),r=e("../util/shape/HalfSmoothPolygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var s=e("../config");s.line={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,dataFilter:"nearest",itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1}}},symbolSize:2,showAllSymbol:!1};var l=e("../util/ecData"),h=e("zrender/tool/util"),m=e("zrender/tool/color");return t.prototype={type:s.CHART_TYPE_LINE,_buildShape:function(){this.finalPLMap={},this._buildPosition()},_buildHorizontal:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.xAxis.getAxis(c.xAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){o=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.yAxis.getAxis(d[i[f][0]].yAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==U?(U>=0?(s-=x>0?a.getCoordSize(U):l-a.getCoord(U),r=s):0>U&&(h+=x>0?a.getCoordSize(U):a.getCoord(U)-m,r=h),y[p].push([o,r,g,u.getNameByIndex(g),o,l]),n[p].min>U&&(n[p].min=U,n[p].minY=r,n[p].minX=o),n[p].max0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getY();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),"-"==U&&this.deepQuery([V,c,this.option],"calculable")&&(L=this.deepQuery([V,c],"symbolSize"),s+=2*L+5,r=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,"horizontal")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,"y"),this._buildBorkenLine(e,this.finalPLMap,u,"horizontal")},_buildVertical:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.yAxis.getAxis(c.yAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){r=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.xAxis.getAxis(d[i[f][0]].xAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==U?(U>=0?(s+=x>0?a.getCoordSize(U):a.getCoord(U)-l,o=s):0>U&&(h-=x>0?a.getCoordSize(U):m-a.getCoord(U),o=h),y[p].push([o,r,g,u.getNameByIndex(g),l,r]),n[p].min>U&&(n[p].min=U,n[p].minX=o,n[p].minY=r),n[p].max0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getXend();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),"-"==U&&this.deepQuery([V,c,this.option],"calculable")&&(L=this.deepQuery([V,c],"symbolSize"),s-=2*L+5,o=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,"vertical")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,"x"),this._buildBorkenLine(e,this.finalPLMap,u,"vertical")},_buildOther:function(e,t,i,n){for(var a,o=this.series,r={},s=0,l=i.length;l>s;s++)for(var h=0,m=i[s].length;m>h;h++){var V=i[s][h],U=o[V];a=this.component.xAxis.getAxis(U.xAxisIndex||0);var d=this.component.yAxis.getAxis(U.yAxisIndex||0),p=d.getCoord(0);r[V]=r[V]||[],n[V]=n[V]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var c=0,u=U.data.length;u>c;c++){var y=U.data[c],g=this.getDataFromOption(y,"-");if(g instanceof Array){var b=a.getCoord(g[0]),f=d.getCoord(g[1]);r[V].push([b,f,c,g[0],b,p]),n[V].min0>g[0]&&(n[V].min0=g[0],n[V].minY0=f,n[V].minX0=b),n[V].max0g[1]&&(n[V].min1=g[1],n[V].minY1=f,n[V].minX1=b),n[V].max10&&(this.finalPLMap[k]=this.finalPLMap[k]||[],this.finalPLMap[k].push(r[k]),r[k]=[]);this._calculMarkMapXY(n,i,"xy"),this._buildBorkenLine(e,this.finalPLMap,a,"other")},_buildBorkenLine:function(e,t,i,n){for(var o,s="other"==n?"horizontal":n,V=this.series,U=e.length-1;U>=0;U--){var d=e[U],p=V[d],c=t[d];if(p.type===this.type&&null!=c)for(var u=this._getBbox(d,s),y=this._sIndex2ColorMap[d],g=this.query(p,"itemStyle.normal.lineStyle.width"),b=this.query(p,"itemStyle.normal.lineStyle.type"),f=this.query(p,"itemStyle.normal.lineStyle.color"),k=this.getItemStyleColor(this.query(p,"itemStyle.normal.color"),d,-1),x=null!=this.query(p,"itemStyle.normal.areaStyle"),_=this.query(p,"itemStyle.normal.areaStyle.color"),L=0,W=c.length;W>L;L++){var X=c[L],v="other"!=n&&this._isLarge(s,X);if(v)X=this._getLargePointList(s,X,p.dataFilter);else for(var w=0,K=X.length;K>w;w++)o=p.data[X[w][2]],(this.deepQuery([o,p,this.option],"calculable")||this.deepQuery([o,p],"showAllSymbol")||"categoryAxis"===i.type&&i.isMainAxis(X[w][2])&&"none"!=this.deepQuery([o,p],"symbol"))&&this.shapeList.push(this._getSymbol(d,X[w][2],X[w][3],X[w][0],X[w][1],s));var I=new a({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:X,strokeColor:f||k||y,lineWidth:g,lineType:b,smooth:this._getSmooth(p.smooth),smoothConstraint:u,shadowColor:this.query(p,"itemStyle.normal.lineStyle.shadowColor"),shadowBlur:this.query(p,"itemStyle.normal.lineStyle.shadowBlur"),shadowOffsetX:this.query(p,"itemStyle.normal.lineStyle.shadowOffsetX"),shadowOffsetY:this.query(p,"itemStyle.normal.lineStyle.shadowOffsetY")},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});if(l.pack(I,V[d],d,0,L,V[d].name),this.shapeList.push(I),x){var J=new r({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:h.clone(X).concat([[X[X.length-1][4],X[X.length-1][5]],[X[0][4],X[0][5]]]),brushType:"fill",smooth:this._getSmooth(p.smooth),smoothConstraint:u,color:_?_:m.alpha(y,.5)},highlightStyle:{brushType:"fill"},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});l.pack(J,V[d],d,0,L,V[d].name),this.shapeList.push(J)}}}},_getBbox:function(e,t){var i=this.component.grid.getBbox(),n=this.xMarkMap[e];return null!=n.minX0?[[Math.min(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.min(n.minY0,n.maxY0,n.minY1,n.maxY1)],[Math.max(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.max(n.minY0,n.maxY0,n.minY1,n.maxY1)]]:("horizontal"===t?(i[0][1]=Math.min(n.minY,n.maxY),i[1][1]=Math.max(n.minY,n.maxY)):(i[0][0]=Math.min(n.minX,n.maxX),i[1][0]=Math.max(n.minX,n.maxX)),i)},_isLarge:function(e,t){return t.length<2?!1:"horizontal"===e?Math.abs(t[0][0]-t[1][0])<.5:Math.abs(t[0][1]-t[1][1])<.5},_getLargePointList:function(e,t,i){var n;n="horizontal"===e?this.component.grid.getWidth():this.component.grid.getHeight();var a=t.length,o=[];if("function"!=typeof i)switch(i){case"min":i=function(e){return Math.max.apply(null,e)};break;case"max":i=function(e){return Math.min.apply(null,e)};break;case"average":i=function(e){for(var t=0,i=0;is;s++){var l=Math.floor(a/n*s),h=Math.min(Math.floor(a/n*(s+1)),a);if(!(l>=h)){for(var m=l;h>m;m++)r[m-l]="horizontal"===e?t[m][1]:t[m][0];r.length=h-l;for(var V=i(r),U=-1,d=1/0,m=l;h>m;m++){var p="horizontal"===e?t[m][1]:t[m][0],c=Math.abs(p-V);d>c&&(U=m,d=c)}var u=t[U].slice();"horizontal"===e?u[1]=V:u[0]=V,o.push(u)}}return o},_getSmooth:function(e){return e?.3:0},_getCalculableItem:function(e,t,i,n,a,o){var r=this.series,l=r[e].calculableHolderColor||this.ecTheme.calculableHolderColor||s.calculableHolderColor,h=this._getSymbol(e,t,i,n,a,o);return h.style.color=l,h.style.strokeColor=l,h.rotation=[0,0],h.hoverable=!1,h.draggable=!1,h.style.text=void 0,h},_getSymbol:function(e,t,i,n,a,o){var r=this.series,s=r[e],l=s.data[t],h=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],this._sIndex2ColorMap[e],"#fff","vertical"===o?"horizontal":"vertical");return h.zlevel=s.zlevel,h.z=s.z+1,this.deepQuery([l,s,this.option],"calculable")&&(this.setCalculable(h),h.draggable=!0),h},getMarkCoord:function(e,t){var i=this.series[e],n=this.xMarkMap[e],a=this.component.xAxis.getAxis(i.xAxisIndex),o=this.component.yAxis.getAxis(i.yAxisIndex);if(t.type&&("max"===t.type||"min"===t.type||"average"===t.type)){var r=null!=t.valueIndex?t.valueIndex:null!=n.maxX0?"1":"";return[n[t.type+"X"+r],n[t.type+"Y"+r],n[t.type+"Line"+r],n[t.type+r]]}return["string"!=typeof t.xAxis&&a.getCoordByIndex?a.getCoordByIndex(t.xAxis||0):a.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&o.getCoordByIndex?o.getCoordByIndex(t.yAxis||0):o.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ontooltipHover:function(e,t){for(var i,n,a=e.seriesIndex,o=e.dataIndex,r=a.length;r--;)if(i=this.finalPLMap[a[r]])for(var s=0,l=i.length;l>s;s++){n=i[s];for(var h=0,m=n.length;m>h;h++)o===n[h][2]&&t.push(this._getSymbol(a[r],n[h][2],n[h][3],n[h][0],n[h][1],"horizontal"))}},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}function n(e){e.style.controlPointList=null}for(var a=this.series,o={},r=0,s=e.length;s>r;r++)o[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(U=this.shapeList[r]._seriesIndex,o[U]&&!o[U][3]){if(this.shapeList[r]._main&&this.shapeList[r].style.pointList.length>1){if(d=this.shapeList[r].style.pointList,h=Math.abs(d[0][0]-d[1][0]),V=Math.abs(d[0][1]-d[1][1]),p="horizontal"===this.shapeList[r]._orient,o[U][2]){if("half-smooth-polygon"===this.shapeList[r].type){var u=d.length;this.shapeList[r].style.pointList[u-3]=d[u-2],this.shapeList[r].style.pointList[u-3][p?0:1]=d[u-4][p?0:1],this.shapeList[r].style.pointList[u-2]=d[u-1]}this.shapeList[r].style.pointList.pop(),p?(l=h,m=0):(l=0,m=-V)}else{if(this.shapeList[r].style.pointList.shift(),"half-smooth-polygon"===this.shapeList[r].type){var y=this.shapeList[r].style.pointList.pop();p?y[0]=d[0][0]:y[1]=d[0][1],this.shapeList[r].style.pointList.push(y)}p?(l=-h,m=0):(l=0,m=V)}this.shapeList[r].style.controlPointList=null,this.zr.modShape(this.shapeList[r])}else{if(o[U][2]&&this.shapeList[r]._dataIndex===a[U].data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!o[U][2]&&0===this.shapeList[r]._dataIndex){this.zr.delShape(this.shapeList[r].id);continue}}this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).during(n).done(i).start()}c||t&&t()}},o.prototype.iconLibrary.legendLineIcon=i,h.inherits(t,n),e("../chart").define("line",t),t}),i("echarts/util/shape/HalfSmoothPolygon",["require","zrender/shape/Base","zrender/shape/util/smoothBezier","zrender/tool/util","zrender/shape/Polygon"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/smoothBezier"),a=e("zrender/tool/util");return t.prototype={type:"half-smooth-polygon",buildPath:function(t,i){var a=i.pointList;if(!(a.length<2))if(i.smooth){var o=n(a.slice(0,-2),i.smooth,!1,i.smoothConstraint);t.moveTo(a[0][0],a[0][1]);for(var r,s,l,h=a.length,m=0;h-3>m;m++)r=o[2*m],s=o[2*m+1],l=a[m+1],t.bezierCurveTo(r[0],r[1],s[0],s[1],l[0],l[1]);t.lineTo(a[h-2][0],a[h-2][1]),t.lineTo(a[h-1][0],a[h-1][1]),t.lineTo(a[0][0],a[0][1])}else e("zrender/shape/Polygon").prototype.buildPath(t,i)}},a.inherits(t,i),t}),i("echarts/chart/bar",["require","./base","zrender/shape/Rectangle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var a=e("../config");a.bar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,barMinHeight:0,barGap:"30%",barCategoryGap:"20%",itemStyle:{normal:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}},emphasis:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}}}};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_BAR,_buildShape:function(){this._buildPosition()},_buildNormal:function(e,t,i,o,r){for(var s,l,h,m,V,U,d,p,c,u,y,g,b=this.series,f=i[0][0],k=b[f],x="horizontal"==r,_=this.component.xAxis,L=this.component.yAxis,W=x?_.getAxis(k.xAxisIndex):L.getAxis(k.yAxisIndex),X=this._mapSize(W,i),v=X.gap,w=X.barGap,K=X.barWidthMap,I=X.barMaxWidthMap,J=X.barWidth,C=X.barMinHeightMap,S=X.interval,E=this.deepQuery([this.ecTheme,a],"island.r"),F=0,T=t;T>F&&null!=W.getNameByIndex(F);F++){x?m=W.getCoordByIndex(F)-v/2:V=W.getCoordByIndex(F)+v/2;for(var z=0,A=i.length;A>z;z++){var M=b[i[z][0]].yAxisIndex||0,O=b[i[z][0]].xAxisIndex||0;s=x?L.getAxis(M):_.getAxis(O),d=U=c=p=s.getCoord(0);for(var P=0,D=i[z].length;D>P;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,"-"),o[f]=o[f]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),"-"!==g&&(g>0?(l=P>0?s.getCoordSize(g):x?d-s.getCoord(g):s.getCoord(g)-d,1===D&&C[f]>l&&(l=C[f]),x?(U-=l,V=U):(m=U,U+=l)):0>g?(l=P>0?s.getCoordSize(g):x?s.getCoord(g)-c:c-s.getCoord(g),1===D&&C[f]>l&&(l=C[f]),x?(V=p,p+=l):(p-=l,m=p)):(l=0,x?(U-=l,V=U):(m=U,U+=l)),o[f][F]=x?m+h/2:V-h/2,o[f].min>g&&(o[f].min=g,x?(o[f].minY=V,o[f].minX=o[f][F]):(o[f].minX=m+l,o[f].minY=o[f][F])),o[f].maxP;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,"-"),h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),"-"==g&&this.deepQuery([y,k,this.option],"calculable")&&(x?(U-=E,V=U):(m=U,U+=E),u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:E,x?E:h,x?"vertical":"horizontal"),u.hoverable=!1,u.draggable=!1,u.style.lineWidth=1,u.style.brushType="stroke",u.style.strokeColor=k.calculableHolderColor||this.ecTheme.calculableHolderColor||a.calculableHolderColor,this.shapeList.push(new n(u)));x?m+=h+w:V-=h+w}}this._calculMarkMapXY(o,i,x?"y":"x")},_buildHorizontal:function(e,t,i,n){return this._buildNormal(e,t,i,n,"horizontal")},_buildVertical:function(e,t,i,n){return this._buildNormal(e,t,i,n,"vertical")},_buildOther:function(e,t,i,a){for(var o=this.series,r=0,s=i.length;s>r;r++)for(var l=0,h=i[r].length;h>l;l++){var m=i[r][l],V=o[m],U=V.xAxisIndex||0,d=this.component.xAxis.getAxis(U),p=d.getCoord(0),c=V.yAxisIndex||0,u=this.component.yAxis.getAxis(c),y=u.getCoord(0);a[m]=a[m]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var g=0,b=V.data.length;b>g;g++){var f=V.data[g],k=this.getDataFromOption(f,"-");if(k instanceof Array){var x,_,L=d.getCoord(k[0]),W=u.getCoord(k[1]),X=[f,V],v=this.deepQuery(X,"barWidth")||10,w=this.deepQuery(X,"barHeight");null!=w?(x="horizontal",k[0]>0?(v=L-p,L-=v):v=k[0]<0?p-L:0,_=this._getBarItem(m,g,k[0],L,W-w/2,v,w,x)):(x="vertical",k[1]>0?w=y-W:k[1]<0?(w=W-y,W-=w):w=0,_=this._getBarItem(m,g,k[0],L-v/2,W,v,w,x)),this.shapeList.push(new n(_)),L=d.getCoord(k[0]),W=u.getCoord(k[1]),a[m].min0>k[0]&&(a[m].min0=k[0],a[m].minY0=W,a[m].minX0=L),a[m].max0k[1]&&(a[m].min1=k[1],a[m].minY1=W,a[m].minX1=L),a[m].max1=a&&(d=Math.floor(t.length/n),a=1);else if(n="string"==typeof U&&U.match(/%$/)?(e.getGap()*(100-parseFloat(U))/100).toFixed(2)-0:e.getGap()-U,"string"==typeof V&&V.match(/%$/)?(V=parseFloat(V)/100,a=+((n-m)/((t.length-1)*V+t.length-h)).toFixed(2),V=a*V):(V=parseFloat(V),a=+((n-m-V*(t.length-1))/(t.length-h)).toFixed(2)),0>=a)return this._mapSize(e,t,!0)}else if(n=h>1?"string"==typeof U&&U.match(/%$/)?+(e.getGap()*(100-parseFloat(U))/100).toFixed(2):e.getGap()-U:m,a=0,V=h>1?+((n-m)/(h-1)).toFixed(2):0,0>V)return this._mapSize(e,t,!0);return this._recheckBarMaxWidth(t,r,s,l,n,a,V,d)},_findSpecialBarSzie:function(e,t){for(var i,n,a,o,r=this.series,s={},l={},h={},m=0,V=0,U=0,d=e.length;d>U;U++)for(var p={barWidth:!1,barMaxWidth:!1},c=0,u=e[U].length;u>c;c++){var y=e[U][c],g=r[y];if(!t){if(p.barWidth)s[y]=i;else if(i=this.query(g,"barWidth"),null!=i){s[y]=i,V+=i,m++,p.barWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];s[k]=i}}if(p.barMaxWidth)l[y]=n;else if(n=this.query(g,"barMaxWidth"),null!=n){l[y]=n,p.barMaxWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];l[k]=n}}}h[y]=this.query(g,"barMinHeight"),a=null!=a?a:this.query(g,"barGap"),o=null!=o?o:this.query(g,"barCategoryGap")}return{barWidthMap:s,barMaxWidthMap:l,barMinHeightMap:h,sBarWidth:i,sBarMaxWidth:n,sBarWidthCounter:m,sBarWidthTotal:V,barGap:a,barCategoryGap:o}},_recheckBarMaxWidth:function(e,t,i,n,a,o,r,s){for(var l=0,h=e.length;h>l;l++){var m=e[l][0];i[m]&&i[m]0&&b.height>g&&b.width>g?(b.y+=g/2,b.height-=g,b.x+=g/2,b.width-=g):b.brushType="fill",m.highlightStyle.textColor=m.highlightStyle.color,m=this.addLabel(m,U,d,i,h);for(var f=[b,m.highlightStyle],k=0,x=f.length;x>k;k++){var _=f[k].textPosition;if("insideLeft"===_||"insideRight"===_||"insideTop"===_||"insideBottom"===_){var L=5;switch(_){case"insideLeft":f[k].textX=b.x+L,f[k].textY=b.y+b.height/2,f[k].textAlign="left",f[k].textBaseline="middle";break;case"insideRight":f[k].textX=b.x+b.width-L,f[k].textY=b.y+b.height/2,f[k].textAlign="right",f[k].textBaseline="middle";break;case"insideTop":f[k].textX=b.x+b.width/2,f[k].textY=b.y+L/2,f[k].textAlign="center",f[k].textBaseline="top";break;case"insideBottom":f[k].textX=b.x+b.width/2,f[k].textY=b.y+b.height-L/2,f[k].textAlign="center",f[k].textBaseline="bottom"}f[k].textPosition="specific",f[k].textColor=f[k].textColor||"#fff"}}return this.deepQuery([d,U,this.option],"calculable")&&(this.setCalculable(m),m.draggable=!0),o.pack(m,V[e],e,V[e].data[t],t,i),m},getMarkCoord:function(e,t){var i,n,a=this.series[e],o=this.xMarkMap[e],r=this.component.xAxis.getAxis(a.xAxisIndex),s=this.component.yAxis.getAxis(a.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)if(o.isHorizontal){i="string"==typeof t.xAxis&&r.getIndexByName?r.getIndexByName(t.xAxis):t.xAxis||0;var l=o[i];l=null!=l?l:"string"!=typeof t.xAxis&&r.getCoordByIndex?r.getCoordByIndex(t.xAxis||0):r.getCoord(t.xAxis||0),n=[l,s.getCoord(t.yAxis||0)]}else{i="string"==typeof t.yAxis&&s.getIndexByName?s.getIndexByName(t.yAxis):t.yAxis||0;var h=o[i];h=null!=h?h:"string"!=typeof t.yAxis&&s.getCoordByIndex?s.getCoordByIndex(t.yAxis||0):s.getCoord(t.yAxis||0),n=[r.getCoord(t.xAxis||0),h]}else{var m=null!=t.valueIndex?t.valueIndex:null!=o.maxX0?"1":"";n=[o[t.type+"X"+m],o[t.type+"Y"+m],o[t.type+"Line"+m],o[t.type+m]]}return n},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(d=o.get(this.shapeList[r],"seriesIndex"),a[d]&&!a[d][3]&&"rectangle"===this.shapeList[r].type){if(p=o.get(this.shapeList[r],"dataIndex"),U=n[d],a[d][2]&&p===U.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[d][2]&&0===p){this.zr.delShape(this.shapeList[r].id);continue}"horizontal"===this.shapeList[r]._orient?(V=this.component.yAxis.getAxis(U.yAxisIndex||0).getGap(),m=a[d][2]?-V:V,l=0):(h=this.component.xAxis.getAxis(U.xAxisIndex||0).getGap(),l=a[d][2]?h:-h,m=0),this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).done(i).start()}c||t&&t()}},r.inherits(t,i),e("../chart").define("bar",t),t}),i("echarts/chart/scatter",["require","./base","../util/shape/Symbol","../component/axis","../component/grid","../component/dataZoom","../component/dataRange","../config","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/Symbol");e("../component/axis"),e("../component/grid"),e("../component/dataZoom"),e("../component/dataRange");var a=e("../config");a.scatter={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbolSize:4,large:!1,largeThreshold:2e3,itemStyle:{normal:{label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e("zrender/tool/util"),r=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_SCATTER,_buildShape:function(){var e=this.series;this._sIndex2ColorMap={},this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this.selectedMap={},this.xMarkMap={};for(var t,i,n,o,s=this.component.legend,l=[],h=0,m=e.length;m>h;h++)if(t=e[h],i=t.name,t.type===a.CHART_TYPE_SCATTER){if(e[h]=this.reformOption(e[h]),this.legendHoverLink=e[h].legendHoverLink||this.legendHoverLink,this._sIndex2ShapeMap[h]=this.query(t,"symbol")||this._symbol[h%this._symbol.length],s){if(this.selectedMap[i]=s.isSelected(i),this._sIndex2ColorMap[h]=r.alpha(s.getColor(i),.5),n=s.getItemShape(i)){var o=this._sIndex2ShapeMap[h];n.style.brushType=o.match("empty")?"stroke":"both",o=o.replace("empty","").toLowerCase(),o.match("rectangle")&&(n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height),o.match("star")&&(n.style.n=o.replace("star","")-0||5,o="star"),o.match("image")&&(n.style.image=o.replace(new RegExp("^image:\\/\\/"),""),n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height,o="image"),n.style.iconType=o,s.setItemShape(i,n)}}else this.selectedMap[i]=!0,this._sIndex2ColorMap[h]=r.alpha(this.zr.getColor(h),.5);this.selectedMap[i]&&l.push(h)}this._buildSeries(l),this.addShapeList()},_buildSeries:function(e){if(0!==e.length){for(var t,i,n,a,o,r,s,l,h=this.series,m={},V=0,U=e.length;U>V;V++)if(t=e[V],i=h[t],0!==i.data.length){o=this.component.xAxis.getAxis(i.xAxisIndex||0),r=this.component.yAxis.getAxis(i.yAxisIndex||0),m[t]=[];for(var d=0,p=i.data.length;p>d;d++)n=i.data[d],a=this.getDataFromOption(n,"-"),"-"===a||a.length<2||(s=o.getCoord(a[0]),l=r.getCoord(a[1]),m[t].push([s,l,d,n.name||""]));this.xMarkMap[t]=this._markMap(o,r,i.data,m[t]),this.buildMark(t)}this._buildPointList(m)}},_markMap:function(e,t,i,n){for(var a,o={min0:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,sum0:0,counter0:0,average0:0,min1:Number.POSITIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum1:0,counter1:0,average1:0},r=0,s=n.length;s>r;r++)a=i[n[r][2]].value||i[n[r][2]],o.min0>a[0]&&(o.min0=a[0],o.minY0=n[r][1],o.minX0=n[r][0]),o.max0a[1]&&(o.min1=a[1],o.minY1=n[r][1],o.minX1=n[r][0]),o.max1t.largeThreshold)this.shapeList.push(this._getLargeSymbol(t,i,this.getItemStyleColor(this.query(t,"itemStyle.normal.color"),r,-1)||this._sIndex2ColorMap[r]));else for(var s=0,l=i.length;l>s;s++)n=i[s],a=this._getSymbol(r,n[2],n[3],n[0],n[1]),a&&this.shapeList.push(a)},_getSymbol:function(e,t,i,n,a){var o,r=this.series,s=r[e],l=s.data[t],h=this.component.dataRange;if(h){if(o=isNaN(l[2])?this._sIndex2ColorMap[e]:h.getColor(l[2]),!o)return null}else o=this._sIndex2ColorMap[e];var m=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],o,"rgba(0,0,0,0)","vertical");return m.zlevel=s.zlevel,m.z=s.z,m._main=!0,m},_getLargeSymbol:function(e,t,i){return new n({zlevel:e.zlevel,z:e.z,_main:!0,hoverable:!1,style:{pointList:t,color:i,strokeColor:i},highlightStyle:{pointList:[]}})},getMarkCoord:function(e,t){var i,n=this.series[e],a=this.xMarkMap[e],o=this.component.xAxis.getAxis(n.xAxisIndex),r=this.component.yAxis.getAxis(n.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)i=["string"!=typeof t.xAxis&&o.getCoordByIndex?o.getCoordByIndex(t.xAxis||0):o.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&r.getCoordByIndex?r.getCoordByIndex(t.yAxis||0):r.getCoord(t.yAxis||0)];else{var s=null!=t.valueIndex?t.valueIndex:1;i=[a[t.type+"X"+s],a[t.type+"Y"+s],a[t.type+"Line"+s],a[t.type+s]]}return i},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)}},o.inherits(t,i),e("../chart").define("scatter",t),t}),i("echarts/component/dataRange",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../util/shape/HandlePolygon","../config","zrender/tool/util","zrender/tool/event","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var s=this;s._ondrift=function(e,t){return s.__ondrift(this,e,t)},s._ondragend=function(){return s.__ondragend()},s._dataRangeSelected=function(e){return s.__dataRangeSelected(e)},s._dispatchHoverLink=function(e){return s.__dispatchHoverLink(e)},s._onhoverlink=function(e){return s.__onhoverlink(e); },this._selectedMap={},this._range={},this.refresh(a),t.bind(r.EVENT.HOVER,this._onhoverlink)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/HandlePolygon"),r=e("../config");r.dataRange={zlevel:0,z:4,show:!0,orient:"vertical",x:"left",y:"bottom",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,precision:0,splitNumber:5,splitList:null,calculable:!1,selectedMode:!0,hoverLink:!0,realtime:!0,color:["#006edd","#e0ffff"],textStyle:{color:"#333"}};var s=e("zrender/tool/util"),l=e("zrender/tool/event"),h=e("zrender/tool/area"),m=e("zrender/tool/color");return t.prototype={type:r.COMPONENT_TYPE_DATARANGE,_textGap:10,_buildShape:function(){if(this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._isContinuity()?this._buildGradient():this._buildItem(),this.dataRangeOption.show)for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncShapeFromRange()},_buildItem:function(){var e,t,i,o,r=this._valueTextList,s=r.length,l=this.getFont(this.dataRangeOption.textStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this.dataRangeOption.itemWidth,d=this.dataRangeOption.itemHeight,p=this.dataRangeOption.itemGap,c=h.getTextHeight("国",l);"vertical"==this.dataRangeOption.orient&&"right"==this.dataRangeOption.x&&(m=this._itemGroupLocation.x+this._itemGroupLocation.width-U);var u=!0;this.dataRangeOption.text&&(u=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(m,V,this.dataRangeOption.text[0]),"horizontal"==this.dataRangeOption.orient?m+=h.getTextWidth(this.dataRangeOption.text[0],l)+this._textGap:(V+=c+this._textGap,i.style.y+=c/2+this._textGap,i.style.textBaseline="bottom"),this.shapeList.push(new n(i))));for(var y=0;s>y;y++)e=r[y],o=this.getColorByIndex(y),t=this._getItemShape(m,V,U,d,this._selectedMap[y]?o:"#ccc"),t._idx=y,t.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(t.clickable=!0,t.onclick=this._dataRangeSelected),this.shapeList.push(new a(t)),u&&(i={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:m+U+5,y:V,color:this._selectedMap[y]?this.dataRangeOption.textStyle.color:"#ccc",text:r[y],textFont:l,textBaseline:"top"},highlightStyle:{brushType:"fill"}},"vertical"==this.dataRangeOption.orient&&"right"==this.dataRangeOption.x&&(i.style.x-=U+10,i.style.textAlign="right"),i._idx=y,i.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(i.clickable=!0,i.onclick=this._dataRangeSelected),this.shapeList.push(new n(i))),"horizontal"==this.dataRangeOption.orient?m+=U+(u?5:0)+(u?h.getTextWidth(e,l):0)+p:V+=d+p;!u&&this.dataRangeOption.text[1]&&("horizontal"==this.dataRangeOption.orient?m=m-p+this._textGap:V=V-p+this._textGap,i=this._getTextShape(m,V,this.dataRangeOption.text[1]),"horizontal"!=this.dataRangeOption.orient&&(i.style.y-=5,i.style.textBaseline="top"),this.shapeList.push(new n(i)))},_buildGradient:function(){var t,i,o=this.getFont(this.dataRangeOption.textStyle),r=this._itemGroupLocation.x,s=this._itemGroupLocation.y,l=this.dataRangeOption.itemWidth,m=this.dataRangeOption.itemHeight,V=h.getTextHeight("国",o),U=10,d=!0;this.dataRangeOption.text&&(d=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[0]),"horizontal"==this.dataRangeOption.orient?r+=h.getTextWidth(this.dataRangeOption.text[0],o)+this._textGap:(s+=V+this._textGap,i.style.y+=V/2+this._textGap,i.style.textBaseline="bottom"),this.shapeList.push(new n(i))));for(var p=e("zrender/tool/color"),c=1/(this.dataRangeOption.color.length-1),u=[],y=0,g=this.dataRangeOption.color.length;g>y;y++)u.push([y*c,this.dataRangeOption.color[y]]);"horizontal"==this.dataRangeOption.orient?(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l*U,height:m,color:p.getLinearGradient(r,s,r+l*U,s,u)},hoverable:!1},r+=l*U+this._textGap):(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l,height:m*U,color:p.getLinearGradient(r,s,r,s+m*U,u)},hoverable:!1},s+=m*U+this._textGap),this.shapeList.push(new a(t)),this._calculableLocation=t.style,this.dataRangeOption.calculable&&(this._buildFiller(),this._bulidMask(),this._bulidHandle()),this._buildIndicator(),!d&&this.dataRangeOption.text[1]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[1]),this.shapeList.push(new n(i)))},_buildIndicator:function(){var e,t,i=this._calculableLocation.x,n=this._calculableLocation.y,a=this._calculableLocation.width,r=this._calculableLocation.height,s=5;"horizontal"==this.dataRangeOption.orient?"bottom"!=this.dataRangeOption.y?(e=[[i,n+r],[i-s,n+r+s],[i+s,n+r+s]],t="bottom"):(e=[[i,n],[i-s,n-s],[i+s,n-s]],t="top"):"right"!=this.dataRangeOption.x?(e=[[i+a,n],[i+a+s,n-s],[i+a+s,n+s]],t="right"):(e=[[i,n],[i-s,n-s],[i-s,n+s]],t="left"),this._indicatorShape={style:{pointList:e,color:"#fff",__rect:{x:Math.min(e[0][0],e[1][0]),y:Math.min(e[0][1],e[1][1]),width:s*("horizontal"==this.dataRangeOption.orient?2:1),height:s*("horizontal"==this.dataRangeOption.orient?1:2)}},highlightStyle:{brushType:"fill",textPosition:t,textColor:this.dataRangeOption.textStyle.color},hoverable:!1},this._indicatorShape=new o(this._indicatorShape)},_buildFiller:function(){this._fillerShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:this._calculableLocation.x,y:this._calculableLocation.y,width:this._calculableLocation.width,height:this._calculableLocation.height,color:"rgba(255,255,255,0)"},highlightStyle:{strokeColor:"rgba(255,255,255,0.5)",lineWidth:1},draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,onmousemove:this._dispatchHoverLink,_type:"filler"},this._fillerShape=new a(this._fillerShape),this.shapeList.push(this._fillerShape)},_bulidHandle:function(){var e,t,i,n,a,r,s,l,m=this._calculableLocation.x,V=this._calculableLocation.y,U=this._calculableLocation.width,d=this._calculableLocation.height,p=this.getFont(this.dataRangeOption.textStyle),c=h.getTextHeight("国",p),u=Math.max(h.getTextWidth(this._textFormat(this.dataRangeOption.max),p),h.getTextWidth(this._textFormat(this.dataRangeOption.min),p))+2;"horizontal"==this.dataRangeOption.orient?"bottom"!=this.dataRangeOption.y?(e=[[m,V],[m,V+d+c],[m-c,V+d+c],[m-1,V+d],[m-1,V]],t=m-u/2-c,i=V+d+c/2+2,n={x:m-u-c,y:V+d,width:u+c,height:c},a=[[m+U,V],[m+U,V+d+c],[m+U+c,V+d+c],[m+U+1,V+d],[m+U+1,V]],r=m+U+u/2+c,s=i,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m,V+d],[m,V-c],[m-c,V-c],[m-1,V],[m-1,V+d]],t=m-u/2-c,i=V-c/2-2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m+U,V-c],[m+U+c,V-c],[m+U+1,V],[m+U+1,V+d]],r=m+U+u/2+c,s=i,l={x:m+U,y:V-c,width:u+c,height:c}):(u+=c,"right"!=this.dataRangeOption.x?(e=[[m,V],[m+U+c,V],[m+U+c,V-c],[m+U,V-1],[m,V-1]],t=m+U+u/2+c/2,i=V-c/2,n={x:m+U,y:V-c,width:u+c,height:c},a=[[m,V+d],[m+U+c,V+d],[m+U+c,V+c+d],[m+U,V+1+d],[m,V+d+1]],r=t,s=V+d+c/2,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m+U,V],[m-c,V],[m-c,V-c],[m,V-1],[m+U,V-1]],t=m-u/2-c/2,i=V-c/2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m-c,V+d],[m-c,V+c+d],[m,V+1+d],[m+U,V+d+1]],r=t,s=V+d+c/2,l={x:m-u-c,y:V+d,width:u+c,height:c})),this._startShape={style:{pointList:e,text:this._textFormat(this.dataRangeOption.max),textX:t,textY:i,textFont:p,color:this.getColor(this.dataRangeOption.max),rect:n,x:e[0][0],y:e[0][1],_x:e[0][0],_y:e[0][1]}},this._startShape.highlightStyle={strokeColor:this._startShape.style.color,lineWidth:1},this._endShape={style:{pointList:a,text:this._textFormat(this.dataRangeOption.min),textX:r,textY:s,textFont:p,color:this.getColor(this.dataRangeOption.min),rect:l,x:a[0][0],y:a[0][1],_x:a[0][0],_y:a[0][1]}},this._endShape.highlightStyle={strokeColor:this._endShape.style.color,lineWidth:1},this._startShape.zlevel=this._endShape.zlevel=this.getZlevelBase(),this._startShape.z=this._endShape.z=this.getZBase()+1,this._startShape.draggable=this._endShape.draggable=!0,this._startShape.ondrift=this._endShape.ondrift=this._ondrift,this._startShape.ondragend=this._endShape.ondragend=this._ondragend,this._startShape.style.textColor=this._endShape.style.textColor=this.dataRangeOption.textStyle.color,this._startShape.style.textAlign=this._endShape.style.textAlign="center",this._startShape.style.textPosition=this._endShape.style.textPosition="specific",this._startShape.style.textBaseline=this._endShape.style.textBaseline="middle",this._startShape.style.width=this._endShape.style.width=0,this._startShape.style.height=this._endShape.style.height=0,this._startShape.style.textPosition=this._endShape.style.textPosition="specific",this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_bulidMask:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;this._startMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:e,y:t,width:"horizontal"==this.dataRangeOption.orient?0:i,height:"horizontal"==this.dataRangeOption.orient?n:0,color:"#ccc"},hoverable:!1},this._endMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:"horizontal"==this.dataRangeOption.orient?e+i:e,y:"horizontal"==this.dataRangeOption.orient?t:t+n,width:"horizontal"==this.dataRangeOption.orient?0:i,height:"horizontal"==this.dataRangeOption.orient?n:0,color:"#ccc"},hoverable:!1},this._startMask=new a(this._startMask),this._endMask=new a(this._endMask),this.shapeList.push(this._startMask),this.shapeList.push(this._endMask)},_buildBackground:function(){var e=this.reformCssArray(this.dataRangeOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.dataRangeOption.borderWidth?"fill":"both",color:this.dataRangeOption.backgroundColor,strokeColor:this.dataRangeOption.borderColor,lineWidth:this.dataRangeOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this._valueTextList,t=e.length,i=this.dataRangeOption.itemGap,n=this.dataRangeOption.itemWidth,a=this.dataRangeOption.itemHeight,o=0,r=0,s=this.getFont(this.dataRangeOption.textStyle),l=h.getTextHeight("国",s),m=10;if("horizontal"==this.dataRangeOption.orient){if(this.dataRangeOption.text||this._isContinuity())o=(this._isContinuity()?n*m+i:t*(n+i))+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[0]?h.getTextWidth(this.dataRangeOption.text[0],s)+this._textGap:0)+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[1]?h.getTextWidth(this.dataRangeOption.text[1],s)+this._textGap:0);else{n+=5;for(var V=0;t>V;V++)o+=n+h.getTextWidth(e[V],s)+i}o-=i,r=Math.max(l,a)}else{var U;if(this.dataRangeOption.text||this._isContinuity())r=(this._isContinuity()?a*m+i:t*(a+i))+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[0]?this._textGap+l:0)+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[1]?this._textGap+l:0),U=Math.max(h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[0]||"",s),h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[1]||"",s)),o=Math.max(n,U);else{r=(a+i)*t,n+=5,U=0;for(var V=0;t>V;V++)U=Math.max(U,h.getTextWidth(e[V],s));o=n+U}r-=i}var d,p=this.reformCssArray(this.dataRangeOption.padding),c=this.zr.getWidth();switch(this.dataRangeOption.x){case"center":d=Math.floor((c-o)/2);break;case"left":d=p[3]+this.dataRangeOption.borderWidth;break;case"right":d=c-o-p[1]-this.dataRangeOption.borderWidth;break;default:d=this.parsePercent(this.dataRangeOption.x,c),d=isNaN(d)?0:d}var u,y=this.zr.getHeight();switch(this.dataRangeOption.y){case"top":u=p[0]+this.dataRangeOption.borderWidth;break;case"bottom":u=y-r-p[2]-this.dataRangeOption.borderWidth;break;case"center":u=Math.floor((y-r)/2);break;default:u=this.parsePercent(this.dataRangeOption.y,y),u=isNaN(u)?0:u}if(this.dataRangeOption.calculable){var g=Math.max(h.getTextWidth(this.dataRangeOption.max,s),h.getTextWidth(this.dataRangeOption.min,s))+l;"horizontal"==this.dataRangeOption.orient?(g>d&&(d=g),d+o+g>c&&(d-=g)):(l>u&&(u=l),u+r+l>y&&(u-=l))}return{x:d,y:u,width:o,height:r}},_getTextShape:function(e,t,i){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:"horizontal"==this.dataRangeOption.orient?e:this._itemGroupLocation.x+this._itemGroupLocation.width/2,y:"horizontal"==this.dataRangeOption.orient?this._itemGroupLocation.y+this._itemGroupLocation.height/2:t,color:this.dataRangeOption.textStyle.color,text:i,textFont:this.getFont(this.dataRangeOption.textStyle),textBaseline:"horizontal"==this.dataRangeOption.orient?"middle":"top",textAlign:"horizontal"==this.dataRangeOption.orient?"left":"center"},hoverable:!1}},_getItemShape:function(e,t,i,n,a){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:e,y:t+1,width:i,height:n-2,color:a},highlightStyle:{strokeColor:a,lineWidth:1}}},__ondrift:function(e,t,i){var n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;return"horizontal"==this.dataRangeOption.orient?e.style.x+t<=n?e.style.x=n:e.style.x+t+e.style.width>=n+o?e.style.x=n+o-e.style.width:e.style.x+=t:e.style.y+i<=a?e.style.y=a:e.style.y+i+e.style.height>=a+r?e.style.y=a+r-e.style.height:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(e),this.dataRangeOption.realtime&&this._dispatchDataRange(),!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,this.dataRangeOption.realtime||this._dispatchDataRange(),t.needRefresh=!1,this.isDragend=!1)},_syncShapeFromRange:function(){var e=this.dataRangeOption.range||{},t=e.start,i=e.end;if(t>i&&(t=[i,i=t][0]),this._range.end=null!=t?t:null!=this._range.end?this._range.end:0,this._range.start=null!=i?i:null!=this._range.start?this._range.start:100,100!=this._range.start||0!==this._range.end){if("horizontal"==this.dataRangeOption.orient){var n=this._fillerShape.style.width;this._fillerShape.style.x+=n*(100-this._range.start)/100,this._fillerShape.style.width=n*(this._range.start-this._range.end)/100}else{var a=this._fillerShape.style.height;this._fillerShape.style.y+=a*(100-this._range.start)/100,this._fillerShape.style.height=a*(this._range.start-this._range.end)/100}this.zr.modShape(this._fillerShape.id),this._syncHandleShape()}},_syncHandleShape:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;"horizontal"==this.dataRangeOption.orient?(this._startShape.style.x=this._fillerShape.style.x,this._startMask.style.width=this._startShape.style.x-e,this._endShape.style.x=this._fillerShape.style.x+this._fillerShape.style.width,this._endMask.style.x=this._endShape.style.x,this._endMask.style.width=e+i-this._endShape.style.x,this._range.start=Math.ceil(100-(this._startShape.style.x-e)/i*100),this._range.end=Math.floor(100-(this._endShape.style.x-e)/i*100)):(this._startShape.style.y=this._fillerShape.style.y,this._startMask.style.height=this._startShape.style.y-t,this._endShape.style.y=this._fillerShape.style.y+this._fillerShape.style.height,this._endMask.style.y=this._endShape.style.y,this._endMask.style.height=t+n-this._endShape.style.y,this._range.start=Math.ceil(100-(this._startShape.style.y-t)/n*100),this._range.end=Math.floor(100-(this._endShape.style.y-t)/n*100)),this._syncShape()},_syncFillerShape:function(e){var t,i,n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;"horizontal"==this.dataRangeOption.orient?(t=this._startShape.style.x,i=this._endShape.style.x,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.x=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.x=t),this._fillerShape.style.x=t,this._fillerShape.style.width=i-t,this._startMask.style.width=t-n,this._endMask.style.x=i,this._endMask.style.width=n+o-i,this._range.start=Math.ceil(100-(t-n)/o*100),this._range.end=Math.floor(100-(i-n)/o*100)):(t=this._startShape.style.y,i=this._endShape.style.y,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.y=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.y=t),this._fillerShape.style.y=t,this._fillerShape.style.height=i-t,this._startMask.style.height=t-a,this._endMask.style.y=i,this._endMask.style.height=a+r-i,this._range.start=Math.ceil(100-(t-a)/r*100),this._range.end=Math.floor(100-(i-a)/r*100)),this._syncShape()},_syncShape:function(){this._startShape.position=[this._startShape.style.x-this._startShape.style._x,this._startShape.style.y-this._startShape.style._y],this._startShape.style.text=this._textFormat(this._gap*this._range.start+this.dataRangeOption.min),this._startShape.style.color=this._startShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.start+this.dataRangeOption.min),this._endShape.position=[this._endShape.style.x-this._endShape.style._x,this._endShape.style.y-this._endShape.style._y],this._endShape.style.text=this._textFormat(this._gap*this._range.end+this.dataRangeOption.min),this._endShape.style.color=this._endShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.end+this.dataRangeOption.min),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._startMask.id),this.zr.modShape(this._endMask.id),this.zr.modShape(this._fillerShape.id),this.zr.refreshNextFrame()},_dispatchDataRange:function(){this.messageCenter.dispatch(r.EVENT.DATA_RANGE,null,{range:{start:this._range.end,end:this._range.start}},this.myChart)},__dataRangeSelected:function(e){if("single"===this.dataRangeOption.selectedMode)for(var t in this._selectedMap)this._selectedMap[t]=!1;var i=e.target._idx;this._selectedMap[i]=!this._selectedMap[i];var n,a;this._useCustomizedSplit()?(n=this._splitList[i].max,a=this._splitList[i].min):(n=(this._colorList.length-i)*this._gap+this.dataRangeOption.min,a=n-this._gap),this.messageCenter.dispatch(r.EVENT.DATA_RANGE_SELECTED,e.event,{selected:this._selectedMap,target:i,valueMax:n,valueMin:a},this.myChart),this.messageCenter.dispatch(r.EVENT.REFRESH,null,null,this.myChart)},__dispatchHoverLink:function(e){var t,i;if(this.dataRangeOption.calculable){var n,a=this.dataRangeOption.max-this.dataRangeOption.min;n="horizontal"==this.dataRangeOption.orient?(1-(l.getX(e.event)-this._calculableLocation.x)/this._calculableLocation.width)*a:(1-(l.getY(e.event)-this._calculableLocation.y)/this._calculableLocation.height)*a,t=n-.05*a,i=n+.05*a}else if(this._useCustomizedSplit()){var o=e.target._idx;i=this._splitList[o].max,t=this._splitList[o].min}else{var o=e.target._idx;i=(this._colorList.length-o)*this._gap+this.dataRangeOption.min,t=i-this._gap}this.messageCenter.dispatch(r.EVENT.DATA_RANGE_HOVERLINK,e.event,{valueMin:t,valueMax:i},this.myChart)},__onhoverlink:function(e){if(this.dataRangeOption.show&&this.dataRangeOption.hoverLink&&this._indicatorShape&&e&&null!=e.seriesIndex&&null!=e.dataIndex){var t=e.value;if(""===t||isNaN(t))return;tthis.dataRangeOption.max&&(t=this.dataRangeOption.max),this._indicatorShape.position="horizontal"==this.dataRangeOption.orient?[(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.width,0]:[0,(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.height],this._indicatorShape.style.text=this._textFormat(e.value),this._indicatorShape.style.color=this.getColor(t),this.zr.addHoverShape(this._indicatorShape)}},_textFormat:function(e,t){var i=this.dataRangeOption;if(e!==-Number.MAX_VALUE&&(e=(+e).toFixed(i.precision)),null!=t&&t!==Number.MAX_VALUE&&(t=(+t).toFixed(i.precision)),i.formatter){if("string"==typeof i.formatter)return i.formatter.replace("{value}",e===-Number.MAX_VALUE?"min":e).replace("{value2}",t===Number.MAX_VALUE?"max":t);if("function"==typeof i.formatter)return i.formatter.call(this.myChart,e,t)}return null==t?e:e===-Number.MAX_VALUE?"< "+t:t===Number.MAX_VALUE?"> "+e:e+" - "+t},_isContinuity:function(){var e=this.dataRangeOption;return!(e.splitList?e.splitList.length>0:e.splitNumber>0)||e.calculable},_useCustomizedSplit:function(){var e=this.dataRangeOption;return e.splitList&&e.splitList.length>0},_buildColorList:function(e){if(this._colorList=m.getGradientColors(this.dataRangeOption.color,Math.max((e-this.dataRangeOption.color.length)/(this.dataRangeOption.color.length-1),0)+1),this._colorList.length>e){for(var t=this._colorList.length,i=[this._colorList[0]],n=t/(e-1),a=1;e-1>a;a++)i.push(this._colorList[Math.floor(a*n)]);i.push(this._colorList[t-1]),this._colorList=i}if(this._useCustomizedSplit())for(var o=this._splitList,a=0,t=o.length;t>a;a++)o[a].color&&(this._colorList[a]=o[a].color)},_buildGap:function(e){if(!this._useCustomizedSplit()){var t=this.dataRangeOption.precision;for(this._gap=(this.dataRangeOption.max-this.dataRangeOption.min)/e;this._gap.toFixed(t)-0!=this._gap&&5>t;)t++;this.dataRangeOption.precision=t,this._gap=((this.dataRangeOption.max-this.dataRangeOption.min)/e).toFixed(t)-0}},_buildDataList:function(e){for(var t=this._valueTextList=[],i=this.dataRangeOption,n=this._useCustomizedSplit(),a=0;e>a;a++){this._selectedMap[a]=!0;var o="";if(n){var r=this._splitList[e-1-a];o=null!=r.label?r.label:null!=r.single?this._textFormat(r.single):this._textFormat(r.min,r.max)}else o=this._textFormat(a*this._gap+i.min,(a+1)*this._gap+i.min);t.unshift(o)}},_buildSplitList:function(){if(this._useCustomizedSplit())for(var e=this.dataRangeOption.splitList,t=this._splitList=[],i=0,n=e.length;n>i;i++){var a=e[i];if(!a||null==a.start&&null==a.end)throw new Error("Empty item exists in splitList!");var o={label:a.label,color:a.color};o.min=a.start,o.max=a.end,o.min>o.max&&(o.min=[o.max,o.max=o.min][0]),o.min===o.max&&(o.single=o.max),null==o.min&&(o.min=-Number.MAX_VALUE),null==o.max&&(o.max=Number.MAX_VALUE),t.push(o)}},refresh:function(e){if(e){this.option=e,this.option.dataRange=this.reformOption(this.option.dataRange);var t=this.dataRangeOption=this.option.dataRange;if(!this._useCustomizedSplit()&&(null==t.min||null==t.max))throw new Error("option.dataRange.min or option.dataRange.max has not been defined.");this.myChart.canvasSupported||(t.realtime=!1);var i=this._isContinuity()?100:this._useCustomizedSplit()?t.splitList.length:t.splitNumber;this._buildSplitList(),this._buildColorList(i),this._buildGap(i),this._buildDataList(i)}this.clear(),this._buildShape()},getColor:function(e){if(isNaN(e))return null;var t;if(this._useCustomizedSplit()){for(var i=this._splitList,n=0,a=i.length;a>n;n++)if(i[n].min<=e&&i[n].max>=e){t=n;break}}else{if(this.dataRangeOption.min==this.dataRangeOption.max)return this._colorList[0];if(ethis.dataRangeOption.max&&(e=this.dataRangeOption.max),this.dataRangeOption.calculable&&(e-(this._gap*this._range.start+this.dataRangeOption.min)>5e-5||e-(this._gap*this._range.end+this.dataRangeOption.min)<-5e-5))return null;t=this._colorList.length-Math.ceil((e-this.dataRangeOption.min)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._colorList.length),t==this._colorList.length&&t--}return this._selectedMap[t]?this._colorList[t]:null},getColorByIndex:function(e){return e>=this._colorList.length?e=this._colorList.length-1:0>e&&(e=0),this._colorList[e]},onbeforDispose:function(){this.messageCenter.unbind(r.EVENT.HOVER,this._onhoverlink)}},s.inherits(t,i),e("../component").define("dataRange",t),t}),i("echarts/util/shape/HandlePolygon",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=e("zrender/tool/util");return t.prototype={type:"handle-polygon",buildPath:function(e,t){n.prototype.buildPath(e,t)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.rect;return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height?!0:!1}},a.inherits(t,i),t}),i("echarts/chart/k",["require","./base","../util/shape/Candle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/Candle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var a=e("../config");a.k={zlevel:0,z:2,clickable:!0,hoverable:!0,legendHoverLink:!1,xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{color:"#fff",color0:"#00aa11",lineStyle:{width:1,color:"#ff3200",color0:"#00aa11"},label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e("../util/ecData"),r=e("zrender/tool/util");return t.prototype={type:a.CHART_TYPE_K,_buildShape:function(){var e=this.series;this.selectedMap={};for(var t,i={top:[],bottom:[]},n=0,o=e.length;o>n;n++)e[n].type===a.CHART_TYPE_K&&(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,t=this.component.xAxis.getAxis(e[n].xAxisIndex),t.type===a.COMPONENT_TYPE_AXIS_CATEGORY&&i[t.getPosition()].push(n));for(var r in i)i[r].length>0&&this._buildSinglePosition(r,i[r]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){this._buildHorizontal(t,a,n);for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n=this.series,a=this.component.legend,o=[],r=0,s=0,l=e.length;l>s;s++)t=n[e[s]],i=t.name,this.selectedMap[i]=a?a.isSelected(i):!0,this.selectedMap[i]&&o.push(e[s]),r=Math.max(r,t.data.length);return{locationMap:o,maxDataLength:r}},_buildHorizontal:function(e,t,i){for(var n,a,o,r,s,l,h,m,V,U,d=this.series,p={},c=0,u=i.length;u>c;c++){n=i[c],a=d[n],o=a.xAxisIndex||0,r=this.component.xAxis.getAxis(o),h=a.barWidth||Math.floor(r.getGap()/2),U=a.barMaxWidth,U&&h>U&&(h=U),s=a.yAxisIndex||0,l=this.component.yAxis.getAxis(s),p[n]=[];for(var y=0,g=t;g>y&&null!=r.getNameByIndex(y);y++)m=a.data[y],V=this.getDataFromOption(m,"-"),"-"!==V&&4==V.length&&p[n].push([r.getCoordByIndex(y),h,l.getCoord(V[0]),l.getCoord(V[1]),l.getCoord(V[2]),l.getCoord(V[3]),y,r.getNameByIndex(y)])}this._buildKLine(e,p)},_buildKLine:function(e,t){for(var i,n,o,r,s,l,h,m,V,U,d,p,c,u,y,g,b,f=this.series,k=0,x=e.length;x>k;k++)if(b=e[k],d=f[b],u=t[b],this._isLarge(u)&&(u=this._getLargePointList(u)),d.type===a.CHART_TYPE_K&&null!=u){p=d,i=this.query(p,"itemStyle.normal.lineStyle.width"),n=this.query(p,"itemStyle.normal.lineStyle.color"),o=this.query(p,"itemStyle.normal.lineStyle.color0"),r=this.query(p,"itemStyle.normal.color"),s=this.query(p,"itemStyle.normal.color0"),l=this.query(p,"itemStyle.emphasis.lineStyle.width"),h=this.query(p,"itemStyle.emphasis.lineStyle.color"),m=this.query(p,"itemStyle.emphasis.lineStyle.color0"),V=this.query(p,"itemStyle.emphasis.color"),U=this.query(p,"itemStyle.emphasis.color0");for(var _=0,L=u.length;L>_;_++)y=u[_],c=d.data[y[6]],p=c,g=y[3]a;a++)n[a]=e[Math.floor(i/t*a)];return n},_getCandle:function(e,t,i,a,r,s,l,h,m,V,U,d,p,c,u){var y=this.series,g=y[e],b=g.data[t],f=[b,g],k={zlevel:g.zlevel,z:g.z,clickable:this.deepQuery(f,"clickable"),hoverable:this.deepQuery(f,"hoverable"),style:{x:a,y:[s,l,h,m],width:r,color:V,strokeColor:d,lineWidth:U,brushType:"both"},highlightStyle:{color:p,strokeColor:u,lineWidth:c},_seriesIndex:e};return k=this.addLabel(k,g,b,i),o.pack(k,g,e,b,t,i),k=new n(k)},getMarkCoord:function(e,t){var i=this.series[e],n=this.component.xAxis.getAxis(i.xAxisIndex),a=this.component.yAxis.getAxis(i.yAxisIndex);return["string"!=typeof t.xAxis&&n.getCoordByIndex?n.getCoordByIndex(t.xAxis||0):n.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&a.getCoordByIndex?a.getCoordByIndex(t.yAxis||0):a.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){p--,0===p&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p=0,r=0,s=this.shapeList.length;s>r;r++)if(U=this.shapeList[r]._seriesIndex,a[U]&&!a[U][3]&&"candle"===this.shapeList[r].type){if(d=o.get(this.shapeList[r],"dataIndex"),V=n[U],a[U][2]&&d===V.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[U][2]&&0===d){this.zr.delShape(this.shapeList[r].id);continue}h=this.component.xAxis.getAxis(V.xAxisIndex||0).getGap(),l=a[U][2]?h:-h,m=0,p++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).done(i).start()}p||t&&t()}},r.inherits(t,i),e("../chart").define("k",t),t}),i("echarts/chart/pie",["require","./base","zrender/shape/Text","zrender/shape/Ring","zrender/shape/Circle","zrender/shape/Sector","zrender/shape/Polyline","../config","../util/ecData","zrender/tool/util","zrender/tool/math","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r.shapeHandler.onmouseover=function(e){var t=e.target,i=h.get(t,"seriesIndex"),n=h.get(t,"dataIndex"),a=h.get(t,"special"),o=[t.style.x,t.style.y],s=t.style.startAngle,l=t.style.endAngle,m=((l+s)/2+360)%360,V=t.highlightStyle.color,U=r.getLabel(i,n,a,o,m,V,!0);U&&r.zr.addHoverShape(U);var d=r.getLabelLine(i,n,o,t.style.r0,t.style.r,m,V,!0);d&&r.zr.addHoverShape(d)},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Ring"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Sector"),s=e("zrender/shape/Polyline"),l=e("../config");l.pie={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,center:["50%","50%"],radius:[0,"75%"],clockWise:!0,startAngle:90,minAngle:0,selectedOffset:10,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!1},labelLine:{show:!1,length:20,lineStyle:{width:1,type:"solid"}}}}};var h=e("../util/ecData"),m=e("zrender/tool/util"),V=e("zrender/tool/math"),U=e("zrender/tool/color");return t.prototype={type:l.CHART_TYPE_PIE,_buildShape:function(){var e=this.series,t=this.component.legend;this.selectedMap={},this._selected={};var i,n,r;this._selectedMode=!1;for(var s,m=0,V=e.length;V>m;m++)if(e[m].type===l.CHART_TYPE_PIE){if(e[m]=this.reformOption(e[m]),this.legendHoverLink=e[m].legendHoverLink||this.legendHoverLink,s=e[m].name||"",this.selectedMap[s]=t?t.isSelected(s):!0,!this.selectedMap[s])continue;i=this.parseCenter(this.zr,e[m].center),n=this.parseRadius(this.zr,e[m].radius),this._selectedMode=this._selectedMode||e[m].selectedMode,this._selected[m]=[],this.deepQuery([e[m],this.option],"calculable")&&(r={zlevel:e[m].zlevel,z:e[m].z,hoverable:!1,style:{x:i[0],y:i[1],r0:n[0]<=10?0:n[0]-10,r:n[1]+10,brushType:"stroke",lineWidth:1,strokeColor:e[m].calculableHolderColor||this.ecTheme.calculableHolderColor||l.calculableHolderColor}},h.pack(r,e[m],m,void 0,-1),this.setCalculable(r),r=n[0]<=10?new o(r):new a(r),this.shapeList.push(r)),this._buildSinglePie(m),this.buildMark(m)}this.addShapeList()},_buildSinglePie:function(e){for(var t,i=this.series,n=i[e],a=n.data,o=this.component.legend,r=0,s=0,l=0,h=Number.NEGATIVE_INFINITY,m=[],V=0,U=a.length;U>V;V++)t=a[V].name, this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t]&&!isNaN(a[V].value)&&(0!==+a[V].value?r++:s++,l+=+a[V].value,h=Math.max(h,+a[V].value));if(0!==l){for(var d,p,c,u,y,g,b=100,f=n.clockWise,k=(n.startAngle.toFixed(2)-0+360)%360,x=n.minAngle||.01,_=360-x*r-.01*s,L=n.roseType,V=0,U=a.length;U>V;V++)if(t=a[V].name,this.selectedMap[t]&&!isNaN(a[V].value)){if(p=o?o.getColor(t):this.zr.getColor(V),b=a[V].value/l,d="area"!=L?f?k-b*_-(0!==b?x:.01):b*_+k+(0!==b?x:.01):f?k-360/U:360/U+k,d=d.toFixed(2)-0,b=(100*b).toFixed(2),c=this.parseCenter(this.zr,n.center),u=this.parseRadius(this.zr,n.radius),y=+u[0],g=+u[1],"radius"===L?g=a[V].value/h*(g-y)*.8+.2*(g-y)+y:"area"===L&&(g=Math.sqrt(a[V].value/h)*(g-y)+y),f){var W;W=k,k=d,d=W}this._buildItem(m,e,V,b,a[V].selected,c,y,g,k,d,p),f||(k=d)}this._autoLabelLayout(m,c,g);for(var V=0,U=m.length;U>V;V++)this.shapeList.push(m[V]);m=null}},_buildItem:function(e,t,i,n,a,o,r,s,l,m,V){var U=this.series,d=((m+l)/2+360)%360,p=this.getSector(t,i,n,a,o,r,s,l,m,V);h.pack(p,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(p);var c=this.getLabel(t,i,n,o,d,V,!1),u=this.getLabelLine(t,i,o,r,s,d,V,!1);u&&(h.pack(u,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(u)),c&&(h.pack(c,U[t],t,U[t].data[i],i,U[t].data[i].name,n),c._labelLine=u,e.push(c))},getSector:function(e,t,i,n,a,o,s,l,h,m){var d=this.series,p=d[e],c=p.data[t],u=[c,p],y=this.deepMerge(u,"itemStyle.normal")||{},g=this.deepMerge(u,"itemStyle.emphasis")||{},b=this.getItemStyleColor(y.color,e,t,c)||m,f=this.getItemStyleColor(g.color,e,t,c)||("string"==typeof b?U.lift(b,-.2):b),k={zlevel:p.zlevel,z:p.z,clickable:this.deepQuery(u,"clickable"),style:{x:a[0],y:a[1],r0:o,r:s,startAngle:l,endAngle:h,brushType:"both",color:b,lineWidth:y.borderWidth,strokeColor:y.borderColor,lineJoin:"round"},highlightStyle:{color:f,lineWidth:g.borderWidth,strokeColor:g.borderColor,lineJoin:"round"},_seriesIndex:e,_dataIndex:t};if(n){var x=((k.style.startAngle+k.style.endAngle)/2).toFixed(2)-0;k.style._hasSelected=!0,k.style._x=k.style.x,k.style._y=k.style.y;var _=this.query(p,"selectedOffset");k.style.x+=V.cos(x,!0)*_,k.style.y-=V.sin(x,!0)*_,this._selected[e][t]=!0}else this._selected[e][t]=!1;return this._selectedMode&&(k.onclick=this.shapeHandler.onclick),this.deepQuery([c,p,this.option],"calculable")&&(this.setCalculable(k),k.draggable=!0),(this._needLabel(p,c,!0)||this._needLabelLine(p,c,!0))&&(k.onmouseover=this.shapeHandler.onmouseover),k=new r(k)},getLabel:function(e,t,i,a,o,r,s){var l=this.series,h=l[e],U=h.data[t];if(this._needLabel(h,U,s)){var d,p,c,u=s?"emphasis":"normal",y=m.merge(m.clone(U.itemStyle)||{},h.itemStyle),g=y[u].label,b=g.textStyle||{},f=a[0],k=a[1],x=this.parseRadius(this.zr,h.radius),_="middle";g.position=g.position||y.normal.label.position,"center"===g.position?(d=f,p=k,c="center"):"inner"===g.position||"inside"===g.position?(x=(x[0]+x[1])*(g.distance||.5),d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),r="#fff",c="center"):(x=x[1]- -y[u].labelLine.length,d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),c=o>=90&&270>=o?"right":"left"),"center"!=g.position&&"inner"!=g.position&&"inside"!=g.position&&(d+="left"===c?20:-20),U.__labelX=d-("left"===c?5:-5),U.__labelY=p;var L=new n({zlevel:h.zlevel,z:h.z+1,hoverable:!1,style:{x:d,y:p,color:b.color||r,text:this.getLabelText(e,t,i,u),textAlign:b.align||c,textBaseline:b.baseline||_,textFont:this.getFont(b)},highlightStyle:{brushType:"fill"}});return L._radius=x,L._labelPosition=g.position||"outer",L._rect=L.getRect(L.style),L._seriesIndex=e,L._dataIndex=t,L}},getLabelText:function(e,t,i,n){var a=this.series,o=a[e],r=o.data[t],s=this.deepQuery([r,o],"itemStyle."+n+".label.formatter");return s?"function"==typeof s?s.call(this.myChart,{seriesIndex:e,seriesName:o.name||"",series:o,dataIndex:t,data:r,name:r.name,value:r.value,percent:i}):"string"==typeof s?(s=s.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}"),s=s.replace("{a0}",o.name).replace("{b0}",r.name).replace("{c0}",r.value).replace("{d0}",i)):void 0:r.name},getLabelLine:function(e,t,i,n,a,o,r,l){var h=this.series,U=h[e],d=U.data[t];if(this._needLabelLine(U,d,l)){var p=l?"emphasis":"normal",c=m.merge(m.clone(d.itemStyle)||{},U.itemStyle),u=c[p].labelLine,y=u.lineStyle||{},g=i[0],b=i[1],f=a,k=this.parseRadius(this.zr,U.radius)[1]- -u.length,x=V.cos(o,!0),_=V.sin(o,!0);return new s({zlevel:U.zlevel,z:U.z+1,hoverable:!1,style:{pointList:[[g+f*x,b-f*_],[g+k*x,b-k*_],[d.__labelX,d.__labelY]],strokeColor:y.color||r,lineType:y.type,lineWidth:y.width},_seriesIndex:e,_dataIndex:t})}},_needLabel:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".label.show")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".labelLine.show")},_autoLabelLayout:function(e,t,i){for(var n=[],a=[],o=0,r=e.length;r>o;o++)("outer"===e[o]._labelPosition||"outside"===e[o]._labelPosition)&&(e[o]._rect._y=e[o]._rect.y,e[o]._rect.xa;a++)if(e[a]._rect.y+=n,e[a].style.y+=n,e[a]._labelLine&&(e[a]._labelLine.style.pointList[1][1]+=n,e[a]._labelLine.style.pointList[2][1]+=n),a>t&&i>a+1&&e[a+1]._rect.y>e[a]._rect.y+e[a]._rect.height)return void o(a,n/2);o(i-1,n/2)}function o(t,i){for(var n=t;n>=0&&(e[n]._rect.y-=i,e[n].style.y-=i,e[n]._labelLine&&(e[n]._labelLine.style.pointList[1][1]-=i,e[n]._labelLine.style.pointList[2][1]-=i),!(n>0&&e[n]._rect.y>e[n-1]._rect.y+e[n-1]._rect.height));n--);}function r(e,t,i,n,a){for(var o,r,s,l=i[0],h=i[1],m=a>0?t?Number.MAX_VALUE:0:t?Number.MAX_VALUE:0,V=0,U=e.length;U>V;V++)r=Math.abs(e[V]._rect.y-h),s=e[V]._radius-n,o=n+s>r?Math.sqrt((n+s+20)*(n+s+20)-Math.pow(e[V]._rect.y-h,2)):Math.abs(e[V]._rect.x+(a>0?0:e[V]._rect.width)-l),t&&o>=m&&(o=m-10),!t&&m>=o&&(o=m+10),e[V]._rect.x=e[V].style.x=l+o*a,e[V]._labelLine&&(e[V]._labelLine.style.pointList[2][0]=l+(o-5)*a,e[V]._labelLine.style.pointList[1][0]=l+(o-20)*a),m=o}e.sort(function(e,t){return e._rect.y-t._rect.y});for(var s,l=0,h=e.length,m=[],V=[],U=0;h>U;U++)s=e[U]._rect.y-l,0>s&&a(U,h,-s,n),l=e[U]._rect.y+e[U]._rect.height;this.zr.getHeight()-l<0&&o(h-1,l-this.zr.getHeight());for(var U=0;h>U;U++)e[U]._rect.y>=t[1]?V.push(e[U]):m.push(e[U]);r(V,!0,t,i,n),r(m,!1,t,i,n)},reformOption:function(e){var t=m.merge;return e=t(t(e||{},m.clone(this.ecTheme.pie||{})),m.clone(l.pie)),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),e.itemStyle.emphasis.label.textStyle=this.getTextStyle(e.itemStyle.emphasis.label.textStyle),this.z=e.z,this.zlevel=e.zlevel,e},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){s--,0===s&&t&&t()}for(var n=this.series,a={},o=0,r=e.length;r>o;o++)a[e[o][0]]=e[o];var s=0,h={},m={},V={},U=this.shapeList;this.shapeList=[];for(var d,p,c,u={},o=0,r=e.length;r>o;o++)d=e[o][0],p=e[o][2],c=e[o][3],n[d]&&n[d].type===l.CHART_TYPE_PIE&&(p?(c||(h[d+"_"+n[d].data.length]="delete"),u[d]=1):c?u[d]=0:(h[d+"_-1"]="delete",u[d]=-1),this._buildSinglePie(d));for(var y,g,o=0,r=this.shapeList.length;r>o;o++)switch(d=this.shapeList[o]._seriesIndex,y=this.shapeList[o]._dataIndex,g=d+"_"+y,this.shapeList[o].type){case"sector":h[g]=this.shapeList[o];break;case"text":m[g]=this.shapeList[o];break;case"polyline":V[g]=this.shapeList[o]}this.shapeList=[];for(var b,o=0,r=U.length;r>o;o++)if(d=U[o]._seriesIndex,a[d]){if(y=U[o]._dataIndex+u[d],g=d+"_"+y,b=h[g],!b)continue;if("sector"===U[o].type)"delete"!=b?(s++,this.zr.animate(U[o].id,"style").when(400,{startAngle:b.style.startAngle,endAngle:b.style.endAngle}).done(i).start()):(s++,this.zr.animate(U[o].id,"style").when(400,u[d]<0?{startAngle:U[o].style.startAngle}:{endAngle:U[o].style.endAngle}).done(i).start());else if("text"===U[o].type||"polyline"===U[o].type)if("delete"===b)this.zr.delShape(U[o].id);else switch(U[o].type){case"text":s++,b=m[g],this.zr.animate(U[o].id,"style").when(400,{x:b.style.x,y:b.style.y}).done(i).start();break;case"polyline":s++,b=V[g],this.zr.animate(U[o].id,"style").when(400,{pointList:b.style.pointList}).done(i).start()}}this.shapeList=U,s||t&&t()},onclick:function(e){var t=this.series;if(this.isClick&&e.target){this.isClick=!1;for(var i,n=e.target,a=n.style,o=h.get(n,"seriesIndex"),r=h.get(n,"dataIndex"),s=0,m=this.shapeList.length;m>s;s++)if(this.shapeList[s].id===n.id){if(o=h.get(n,"seriesIndex"),r=h.get(n,"dataIndex"),a._hasSelected)n.style.x=n.style._x,n.style.y=n.style._y,n.style._hasSelected=!1,this._selected[o][r]=!1;else{var U=((a.startAngle+a.endAngle)/2).toFixed(2)-0;n.style._hasSelected=!0,this._selected[o][r]=!0,n.style._x=n.style.x,n.style._y=n.style.y,i=this.query(t[o],"selectedOffset"),n.style.x+=V.cos(U,!0)*i,n.style.y-=V.sin(U,!0)*i}this.zr.modShape(n.id)}else this.shapeList[s].style._hasSelected&&"single"===this._selectedMode&&(o=h.get(this.shapeList[s],"seriesIndex"),r=h.get(this.shapeList[s],"dataIndex"),this.shapeList[s].style.x=this.shapeList[s].style._x,this.shapeList[s].style.y=this.shapeList[s].style._y,this.shapeList[s].style._hasSelected=!1,this._selected[o][r]=!1,this.zr.modShape(this.shapeList[s].id));this.messageCenter.dispatch(l.EVENT.PIE_SELECTED,e.event,{selected:this._selected,target:h.get(n,"name")},this.myChart),this.zr.refreshNextFrame()}}},m.inherits(t,i),e("../chart").define("pie",t),t}),i("echarts/chart/radar",["require","./base","zrender/shape/Polygon","../component/polar","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Polygon");e("../component/polar");var a=e("../config");a.radar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,polarIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid"}},emphasis:{label:{show:!1}}},symbolSize:2};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_RADAR,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._radarDataCounter=0;for(var e,t=this.series,i=this.component.legend,n=0,o=t.length;o>n;n++)t[n].type===a.CHART_TYPE_RADAR&&(this.serie=this.reformOption(t[n]),this.legendHoverLink=t[n].legendHoverLink||this.legendHoverLink,e=this.serie.name||"",this.selectedMap[e]=i?i.isSelected(e):!0,this.selectedMap[e]&&(this._queryTarget=[this.serie,this.option],this.deepQuery(this._queryTarget,"calculable")&&this._addDropBox(n),this._buildSingleRadar(n),this.buildMark(n)));this.addShapeList()},_buildSingleRadar:function(e){for(var t,i,n,a,o=this.component.legend,r=this.serie.data,s=this.deepQuery(this._queryTarget,"calculable"),l=0;lr;r++)n=this.getDataFromOption(t.value[r]),i="-"!=n?o.getVector(e,r,n):!1,i&&a.push(i);return a},_addSymbol:function(e,t,i,n,a){for(var r,s=this.series,l=this.component.polar,h=0,m=e.length;m>h;h++)r=this.getSymbolShape(this.deepMerge([s[n].data[i],s[n]]),n,s[n].data[i].value[h],h,l.getIndicatorText(a,h),e[h][0],e[h][1],this._symbol[this._radarDataCounter%this._symbol.length],t,"#fff","vertical"),r.zlevel=this.getZlevelBase(),r.z=this.getZBase()+1,o.set(r,"data",s[n].data[i]),o.set(r,"value",s[n].data[i].value),o.set(r,"dataIndex",i),o.set(r,"special",h),this.shapeList.push(r)},_addDataShape:function(e,t,i,a,r,l){var h=this.series,m=[i,this.serie],V=this.getItemStyleColor(this.deepQuery(m,"itemStyle.normal.color"),a,r,i),U=this.deepQuery(m,"itemStyle.normal.lineStyle.width"),d=this.deepQuery(m,"itemStyle.normal.lineStyle.type"),p=this.deepQuery(m,"itemStyle.normal.areaStyle.color"),c=this.deepQuery(m,"itemStyle.normal.areaStyle"),u={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:c?"both":"stroke",color:p||V||("string"==typeof t?s.alpha(t,.5):t),strokeColor:V||t,lineWidth:U,lineType:d},highlightStyle:{brushType:this.deepQuery(m,"itemStyle.emphasis.areaStyle")||c?"both":"stroke",color:this.deepQuery(m,"itemStyle.emphasis.areaStyle.color")||p||V||("string"==typeof t?s.alpha(t,.5):t),strokeColor:this.getItemStyleColor(this.deepQuery(m,"itemStyle.emphasis.color"),a,r,i)||V||t,lineWidth:this.deepQuery(m,"itemStyle.emphasis.lineStyle.width")||U,lineType:this.deepQuery(m,"itemStyle.emphasis.lineStyle.type")||d}};o.pack(u,h[a],a,i,r,i.name,this.component.polar.getIndicator(h[a].polarIndex)),l&&(u.draggable=!0,this.setCalculable(u)),u=new n(u),this.shapeList.push(u)},_addDropBox:function(e){var t=this.series,i=this.deepQuery(this._queryTarget,"polarIndex");if(!this._dropBoxList[i]){var n=this.component.polar.getDropBox(i);n.zlevel=this.getZlevelBase(),n.z=this.getZBase(),this.setCalculable(n),o.pack(n,t,e,void 0,-1),this.shapeList.push(n),this._dropBoxList[i]=!0}},ondragend:function(e,t){var i=this.series;if(this.isDragend&&e.target){var n=e.target,a=o.get(n,"seriesIndex"),r=o.get(n,"dataIndex");this.component.legend&&this.component.legend.del(i[a].data[r].name),i[a].data.splice(r,1),t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},ondrop:function(t,i){var n=this.series;if(this.isDrop&&t.target){var a,r,s=t.target,l=t.dragged,h=o.get(s,"seriesIndex"),m=o.get(s,"dataIndex"),V=this.component.legend;if(-1===m)a={value:o.get(l,"value"),name:o.get(l,"name")},n[h].data.push(a),V&&V.add(a.name,l.style.color||l.style.strokeColor);else{var U=e("../util/accMath");a=n[h].data[m],V&&V.del(a.name),a.name+=this.option.nameConnector+o.get(l,"name"),r=o.get(l,"value");for(var d=0;dh;h++)t=m.polar2cartesian(s,o*Math.PI/180+r*h),l.push({vector:[t[1],-t[0]]})},_getRadius:function(){var e=this.polar[this._index];return this.parsePercent(e.radius,Math.min(this.zr.getWidth(),this.zr.getHeight())/2)},_buildSpiderWeb:function(e){var t=this.polar[e],i=t.__ecIndicator,n=t.splitArea,a=t.splitLine,o=this.getCenter(e),r=t.splitNumber,s=a.lineStyle.color,l=a.lineStyle.width,h=a.show,m=this.deepQuery(this._queryTarget,"axisLine");this._addArea(i,r,o,n,s,l,h),m.show&&this._addLine(i,o,m)},_addAxisLabel:function(t){for(var i,a,o,r,a,s,l,m,V,U,d=e("../util/accMath"),p=this.polar[t],c=this.deepQuery(this._queryTarget,"indicator"),u=p.__ecIndicator,y=this.deepQuery(this._queryTarget,"splitNumber"),g=this.getCenter(t),b=0;b=x;x+=U+1)r=h.merge({},o),l=d.accAdd(s.min,d.accMul(s.step,x)),l="function"==typeof k?k(l):"string"==typeof k?k.replace("{a}","{a0}").replace("{a0}",l):this.numAddCommas(l),r.text=l,r.x=x*a[0]/y+Math.cos(m)*V+g[0],r.y=x*a[1]/y+Math.sin(m)*V+g[1],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:r,draggable:!1,hoverable:!1}))}},_buildText:function(e){for(var t,i,a,o,r,s,l,h=this.polar[e],m=h.__ecIndicator,V=this.deepQuery(this._queryTarget,"indicator"),U=this.getCenter(e),d=0,p=0,c=0;c0?"left":Math.round(t[0])<0?"right":"center",null==o.margin?t=this._mapVector(t,U,1.1):(s=o.margin,d=t[0]>0?s:-s,p=t[1]>0?s:-s,d=0===t[0]?0:d,p=0===t[1]?0:p,t=this._mapVector(t,U,1)),i.textAlign=a,i.x=t[0]+d,i.y=t[1]+p,r=o.rotate?[o.rotate/180*Math.PI,t[0],t[1]]:[0,0,0],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:i,draggable:!1,hoverable:!1,rotation:r})))},getIndicatorText:function(e,t){return this.polar[e]&&this.polar[e].__ecIndicator[t]&&this.polar[e].__ecIndicator[t].text},getDropBox:function(e){var t,i,e=e||0,n=this.polar[e],a=this.getCenter(e),o=n.__ecIndicator,r=o.length,s=[],l=n.type;if("polygon"==l){for(var h=0;r>h;h++)t=o[h].vector,s.push(this._mapVector(t,a,1.2));i=this._getShape(s,"fill","rgba(0,0,0,0)","",1)}else"circle"==l&&(i=this._getCircle("",1,1.2,a,"fill","rgba(0,0,0,0)"));return i},_addArea:function(e,t,i,n,a,o,r){for(var s,l,h,m,V=this.deepQuery(this._queryTarget,"type"),U=0;t>U;U++)l=(t-U)/t,r&&("polygon"==V?(m=this._getPointList(e,l,i),s=this._getShape(m,"stroke","",a,o)):"circle"==V&&(s=this._getCircle(a,o,l,i,"stroke")),this.shapeList.push(s)),n.show&&(h=(t-U-1)/t,this._addSplitArea(e,n,l,h,i,U))},_getCircle:function(e,t,i,n,a,o){var s=this._getRadius();return new r({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:s*i,brushType:a,strokeColor:e,lineWidth:t,color:o},hoverable:!1,draggable:!1})},_getRing:function(e,t,i,n){var a=this._getRadius();return new s({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:t*a,r0:i*a,color:e,brushType:"fill"},hoverable:!1,draggable:!1})},_getPointList:function(e,t,i){for(var n,a=[],o=e.length,r=0;o>r;r++)n=e[r].vector,a.push(this._mapVector(n,i,t));return a},_getShape:function(e,t,i,n,a){return new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:t,color:i,strokeColor:n,lineWidth:a},hoverable:!1,draggable:!1})},_addSplitArea:function(e,t,i,n,a,o){var r,s,l,h,m,V=e.length,U=t.areaStyle.color,d=[],V=e.length,p=this.deepQuery(this._queryTarget,"type");if("string"==typeof U&&(U=[U]),s=U.length,r=U[o%s],"polygon"==p)for(var c=0;V>c;c++)d=[],l=e[c].vector,h=e[(c+1)%V].vector,d.push(this._mapVector(l,a,i)),d.push(this._mapVector(l,a,n)),d.push(this._mapVector(h,a,n)),d.push(this._mapVector(h,a,i)),m=this._getShape(d,"fill",r,"",1),this.shapeList.push(m);else"circle"==p&&(m=this._getRing(r,i,n,a),this.shapeList.push(m))},_mapVector:function(e,t,i){return[e[0]*i+t[0],e[1]*i+t[1]]},getCenter:function(e){var e=e||0;return this.parseCenter(this.zr,this.polar[e].center)},_addLine:function(e,t,i){for(var n,a,o=e.length,r=i.lineStyle,s=r.color,l=r.width,h=r.type,m=0;o>m;m++)a=e[m].vector,n=this._getLine(t[0],t[1],a[0]+t[0],a[1]+t[1],s,l,h),this.shapeList.push(n)},_getLine:function(e,t,i,n,o,r,s){return new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:e,yStart:t,xEnd:i,yEnd:n,strokeColor:o,lineWidth:r,lineType:s},hoverable:!1})},_adjustIndicatorValue:function(t){for(var i,n,a,o=this.polar[t],r=this.deepQuery(this._queryTarget,"indicator"),s=r.length,l=o.__ecIndicator,h=this._getSeriesData(t),m=o.boundaryGap,V=o.splitNumber,U=o.scale,d=e("../util/smartSteps"),p=0;s>p;p++){if("number"==typeof r[p].max)i=r[p].max,n=r[p].min||0,a={max:i,min:n};else{var c=this._findValue(h,p,V,m);n=c.min,i=c.max}!U&&n>=0&&i>=0&&(n=0),!U&&0>=n&&0>=i&&(i=0);var u=d(n,i,V,a);l[p].value={min:u.min,max:u.max,step:u.step}}},_getSeriesData:function(e){for(var t,i,n,a=[],o=this.component.legend,r=0;ro||void 0===o)&&(o=e),(r>e||void 0===r)&&(r=e)}var o,r,s;if(e&&0!==e.length){if(1==e.length&&(r=0),1!=e.length)for(var l=0;l0?r=o/i:o/=i),{max:o,min:r}}},getVector:function(e,t,i){e=e||0,t=t||0;var n=this.polar[e].__ecIndicator;if(!(t>=n.length)){var a,o=this.polar[e].__ecIndicator[t],r=this.getCenter(e),s=o.vector,l=o.value.max,h=o.value.min;if("undefined"==typeof i)return r;switch(i){case"min":i=h;break;case"max":i=l;break;case"center":i=(l+h)/2}return a=l!=h?(i-h)/(l-h):.5,this._mapVector(s,r,a)}},isInside:function(e){var t=this.getNearestIndex(e);return t?t.polarIndex:-1},getNearestIndex:function(e){for(var t,i,n,a,o,r,s,l,h,V=0;Va[0])return{polarIndex:V,valueIndex:Math.floor((h+l/2)/l)%s}}},getIndicator:function(e){var e=e||0;return this.polar[e].indicator},refresh:function(e){e&&(this.option=e,this.polar=this.option.polar,this.series=this.option.series),this.clear(),this._buildShape()}},h.inherits(t,i),e("../component").define("polar",t),t}),i("echarts/util/coordinates",["require","zrender/tool/math"],function(e){function t(e,t){return[e*n.sin(t),e*n.cos(t)]}function i(e,t){return[Math.sqrt(e*e+t*t),Math.atan(t/e)]}var n=e("zrender/tool/math");return{polar2cartesian:t,cartesian2polar:i}}),i("echarts/chart/chord",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Sector","../util/shape/Ribbon","../util/shape/Icon","zrender/shape/BezierCurve","../config","../util/ecData","zrender/tool/util","zrender/tool/vector","../data/Graph","../layout/Chord","../chart"],function(e){"use strict";function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.scaleLineLength=4,this.scaleUnitAngle=4,this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Sector"),r=e("../util/shape/Ribbon"),s=e("../util/shape/Icon"),l=e("zrender/shape/BezierCurve"),h=e("../config");h.chord={zlevel:0,z:2,clickable:!0,radius:["65%","75%"],center:["50%","50%"],padding:2,sort:"none",sortSub:"none",startAngle:90,clockWise:!0,ribbonType:!0,minRadius:10,maxRadius:20,symbol:"circle",showScale:!1,showScaleText:!1,itemStyle:{normal:{borderWidth:0,borderColor:"#000",label:{show:!0,rotate:!1,distance:5},chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999",opacity:.5}},emphasis:{borderWidth:0,borderColor:"#000",chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999"}}}};var m=e("../util/ecData"),V=e("zrender/tool/util"),U=e("zrender/tool/vector"),d=e("../data/Graph"),p=e("../layout/Chord");return t.prototype={type:h.CHART_TYPE_CHORD,_init:function(){var e=this.series;this.selectedMap={};for(var t={},i={},n=0,a=e.length;a>n;n++)if(e[n].type===this.type){var o=this.isSelected(e[n].name);this.selectedMap[e[n].name]=o,o&&this.buildMark(n),this.reformOption(e[n]),t[e[n].name]=e[n]}for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type)if(e[n].insertToSerie){var r=t[e[n].insertToSerie];e[n]._referenceSerie=r}else i[e[n].name]=[e[n]];for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type&&e[n].insertToSerie){for(var s=e[n]._referenceSerie;s&&s._referenceSerie;)s=s._referenceSerie;i[s.name]&&this.selectedMap[e[n].name]&&i[s.name].push(e[n])}for(var l in i)this._buildChords(i[l]);this.addShapeList()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t){var i=this._getNodeCategory(e,t);return[t,i,e]},_getEdgeQueryTarget:function(e,t,i){return i=i||"normal",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].chordStyle]},_buildChords:function(e){for(var t=[],i=e[0],n=function(e){return e.layout.size>0},a=function(e){return function(t){return e.getEdge(t.node2,t.node1)}},o=0;oa;a++){var r=n[a];if(r&&!r.ignore){var s=this._getNodeCategory(t,r),l=s?s.name:r.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=i.addNode(r.name,r);h.rawIndex=a}}}for(var a=0,o=e.links.length;o>a;a++){var m=e.links[a],V=m.source,U=m.target;"number"==typeof V&&(V=n[V],V&&(V=V.name)),"number"==typeof U&&(U=n[U],U&&(U=U.name));var p=i.addEdge(V,U,m);p&&(p.rawIndex=a)}return i.eachNode(function(e){var i=e.data.value;if(null==i)if(i=0,t.ribbonType)for(var n=0;n0&&(p.style.brushType="both"),p.highlightStyle.lineWidth>0&&(p.highlightStyle.brushType="both"),m.pack(p,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(p),i.shape=p},this)},_buildNodeIcons:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),o=this.parseRadius(this.zr,n.radius),r=o[1];i.eachNode(function(i){var o=i.layout.startAngle,l=i.layout.endAngle,h=(o+l)/2,V=r*Math.cos(h),U=r*Math.sin(h),d=this._getNodeQueryTarget(n,i.data),p=this._getNodeCategory(n,i.data),c=this.deepQuery(d,"itemStyle.normal.color");c||(c=this.getColor(p?p.name:i.id));var u=new s({zlevel:e.zlevel,z:e.z+1,style:{x:-i.layout.size,y:-i.layout.size,width:2*i.layout.size,height:2*i.layout.size,iconType:this.deepQuery(d,"symbol"),color:c,brushType:"both",lineWidth:this.deepQuery(d,"itemStyle.normal.borderWidth"),strokeColor:this.deepQuery(d,"itemStyle.normal.borderColor")},highlightStyle:{color:this.deepQuery(d,"itemStyle.emphasis.color"),lineWidth:this.deepQuery(d,"itemStyle.emphasis.borderWidth"),strokeColor:this.deepQuery(d,"itemStyle.emphasis.borderColor")},clickable:n.clickable,position:[V+a[0],U+a[1]]});m.pack(u,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(u),i.shape=u},this)},_buildLabels:function(e,t,i,a){var o=this.query(a,"itemStyle.normal.label.rotate"),r=this.query(a,"itemStyle.normal.label.distance"),s=this.parseCenter(this.zr,a.center),l=this.parseRadius(this.zr,a.radius),h=a.clockWise,m=h?1:-1; i.eachNode(function(t){var i=t.layout.startAngle/Math.PI*180*m,h=t.layout.endAngle/Math.PI*180*m,V=(i*-m+h*-m)/2;V%=360,0>V&&(V+=360);var d=90>=V||V>=270;V=V*Math.PI/180;var p=[Math.cos(V),-Math.sin(V)],c=0;c=a.ribbonType?a.showScaleText?35+r:r:r+t.layout.size;var u=U.scale([],p,l[1]+c);U.add(u,u,s);var y={zlevel:e.zlevel,z:e.z+1,hoverable:!1,style:{text:null==t.data.label?t.id:t.data.label,textAlign:d?"left":"right"}};o?(y.rotation=d?V:Math.PI+V,y.style.x=d?l[1]+c:-l[1]-c,y.style.y=0,y.position=s.slice()):(y.style.x=u[0],y.style.y=u[1]),y.style.color=this.deepQuery([t.data,a],"itemStyle.normal.label.textStyle.color")||"#000000",y.style.textFont=this.getFont(this.deepQuery([t.data,a],"itemStyle.normal.label.textStyle")),y=new n(y),this.shapeList.push(y),t.labelShape=y},this)},_buildRibbons:function(e,t,i,n){var a=e[t],o=this.parseCenter(this.zr,n.center),s=this.parseRadius(this.zr,n.radius);i.eachEdge(function(l,h){var V,U=i.getEdge(l.node2,l.node1);if(U&&!l.shape){if(U.shape)return void(l.shape=U.shape);var d=l.layout.startAngle/Math.PI*180,p=l.layout.endAngle/Math.PI*180,c=U.layout.startAngle/Math.PI*180,u=U.layout.endAngle/Math.PI*180;V=this.getColor(1===e.length?l.layout.weight<=U.layout.weight?l.node1.id:l.node2.id:a.name);var y,g,b=this._getEdgeQueryTarget(a,l.data),f=this._getEdgeQueryTarget(a,l.data,"emphasis"),k=new r({zlevel:a.zlevel,z:a.z,style:{x:o[0],y:o[1],r:s[0],source0:d,source1:p,target0:c,target1:u,brushType:"both",opacity:this.deepQuery(b,"opacity"),color:V,lineWidth:this.deepQuery(b,"borderWidth"),strokeColor:this.deepQuery(b,"borderColor"),clockWise:n.clockWise},clickable:n.clickable,highlightStyle:{brushType:"both",opacity:this.deepQuery(f,"opacity"),lineWidth:this.deepQuery(f,"borderWidth"),strokeColor:this.deepQuery(f,"borderColor")}});l.layout.weight<=U.layout.weight?(y=U.node1,g=U.node2):(y=l.node1,g=l.node2),m.pack(k,a,t,l.data,null==l.rawIndex?h:l.rawIndex,l.data.name||y.id+"-"+g.id,y.id,g.id),this.shapeList.push(k),l.shape=k}},this)},_buildEdgeCurves:function(e,t,i,n,a){var o=e[t],r=this.parseCenter(this.zr,n.center);i.eachEdge(function(e,i){var n=a.getNodeById(e.node1.id),s=a.getNodeById(e.node2.id),h=n.shape,V=s.shape,U=this._getEdgeQueryTarget(o,e.data),d=this._getEdgeQueryTarget(o,e.data,"emphasis"),p=new l({zlevel:o.zlevel,z:o.z,style:{xStart:h.position[0],yStart:h.position[1],xEnd:V.position[0],yEnd:V.position[1],cpX1:r[0],cpY1:r[1],lineWidth:this.deepQuery(U,"width"),strokeColor:this.deepQuery(U,"color"),opacity:this.deepQuery(U,"opacity")},highlightStyle:{lineWidth:this.deepQuery(d,"width"),strokeColor:this.deepQuery(d,"color"),opacity:this.deepQuery(d,"opacity")}});m.pack(p,o,t,e.data,null==e.rawIndex?i:e.rawIndex,e.data.name||e.node1.id+"-"+e.node2.id,e.node1.id,e.node2.id),this.shapeList.push(p),e.shape=p},this)},_buildScales:function(e,t,i){var o,r,s=e.clockWise,l=this.parseCenter(this.zr,e.center),h=this.parseRadius(this.zr,e.radius),m=s?1:-1,V=0,d=-(1/0);e.showScaleText&&(i.eachNode(function(e){var t=e.data.value;t>d&&(d=t),V+=t}),d>1e10?(o="b",r=1e-9):d>1e7?(o="m",r=1e-6):d>1e4?(o="k",r=.001):(o="",r=1));var p=V/(360-e.padding);i.eachNode(function(t){for(var i=t.layout.startAngle/Math.PI*180,V=t.layout.endAngle/Math.PI*180,d=i;;){if(s&&d>V||!s&&V>d)break;var c=d/180*Math.PI,u=[Math.cos(c),Math.sin(c)],y=U.scale([],u,h[1]+1);U.add(y,y,l);var g=U.scale([],u,h[1]+this.scaleLineLength);U.add(g,g,l);var b=new a({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{xStart:y[0],yStart:y[1],xEnd:g[0],yEnd:g[1],lineCap:"round",brushType:"stroke",strokeColor:"#666",lineWidth:1}});this.shapeList.push(b),d+=m*this.scaleUnitAngle}if(e.showScaleText)for(var f=i,k=5*p*this.scaleUnitAngle,x=0;;){if(s&&f>V||!s&&V>f)break;var c=f;c%=360,0>c&&(c+=360);var _=90>=c||c>=270,L=new n({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{x:_?h[1]+this.scaleLineLength+4:-h[1]-this.scaleLineLength-4,y:0,text:Math.round(10*x)/10+o,textAlign:_?"left":"right"},position:l.slice(),rotation:_?[-c/180*Math.PI,0,0]:[-(c+180)/180*Math.PI,0,0]});this.shapeList.push(L),x+=k*r,f+=m*this.scaleUnitAngle*5}},this)},refresh:function(e){if(e&&(this.option=e,this.series=e.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this.backupShapeList(),this._init()},reformOption:function(e){var t=V.merge;e=t(t(e||{},this.ecTheme.chord),h.chord),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),this.z=e.z,this.zlevel=e.zlevel}},V.inherits(t,i),e("../chart").define("chord",t),t}),i("echarts/util/shape/Ribbon",["require","zrender/shape/Base","zrender/shape/util/PathProxy","zrender/tool/util","zrender/tool/area"],function(e){function t(e){i.call(this,e),this._pathProxy=new n}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/PathProxy"),a=e("zrender/tool/util"),o=e("zrender/tool/area");return t.prototype={type:"ribbon",buildPath:function(e,t){var i=t.clockWise||!1,n=this._pathProxy;n.begin(e);var a=t.x,o=t.y,r=t.r,s=t.source0/180*Math.PI,l=t.source1/180*Math.PI,h=t.target0/180*Math.PI,m=t.target1/180*Math.PI,V=a+Math.cos(s)*r,U=o+Math.sin(s)*r,d=a+Math.cos(l)*r,p=o+Math.sin(l)*r,c=a+Math.cos(h)*r,u=o+Math.sin(h)*r,y=a+Math.cos(m)*r,g=o+Math.sin(m)*r;n.moveTo(V,U),n.arc(a,o,t.r,s,l,!i),n.bezierCurveTo(.7*(a-d)+d,.7*(o-p)+p,.7*(a-c)+c,.7*(o-u)+u,c,u),(t.source0!==t.target0||t.source1!==t.target1)&&(n.arc(a,o,t.r,h,m,!i),n.bezierCurveTo(.7*(a-y)+y,.7*(o-g)+g,.7*(a-V)+V,.7*(o-U)+U,V,U))},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.getRect(this.style);return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?o.isInsidePath(this._pathProxy.pathCommands,0,"fill",e,t):void 0}},a.inherits(t,i),t}),i("echarts/data/Graph",["require","zrender/tool/util"],function(e){var t=e("zrender/tool/util"),i=function(e){this._directed=e||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={}};i.prototype.isDirected=function(){return this._directed},i.prototype.addNode=function(e,t){if(this._nodesMap[e])return this._nodesMap[e];var n=new i.Node(e,t);return this.nodes.push(n),this._nodesMap[e]=n,n},i.prototype.getNodeById=function(e){return this._nodesMap[e]},i.prototype.addEdge=function(e,t,n){if("string"==typeof e&&(e=this._nodesMap[e]),"string"==typeof t&&(t=this._nodesMap[t]),e&&t){var a=e.id+"-"+t.id;if(this._edgesMap[a])return this._edgesMap[a];var o=new i.Edge(e,t,n);return this._directed&&(e.outEdges.push(o),t.inEdges.push(o)),e.edges.push(o),e!==t&&t.edges.push(o),this.edges.push(o),this._edgesMap[a]=o,o}},i.prototype.removeEdge=function(e){var i=e.node1,n=e.node2,a=i.id+"-"+n.id;this._directed&&(i.outEdges.splice(t.indexOf(i.outEdges,e),1),n.inEdges.splice(t.indexOf(n.inEdges,e),1)),i.edges.splice(t.indexOf(i.edges,e),1),i!==n&&n.edges.splice(t.indexOf(n.edges,e),1),delete this._edgesMap[a],this.edges.splice(t.indexOf(this.edges,e),1)},i.prototype.getEdge=function(e,t){return"string"!=typeof e&&(e=e.id),"string"!=typeof t&&(t=t.id),this._directed?this._edgesMap[e+"-"+t]:this._edgesMap[e+"-"+t]||this._edgesMap[t+"-"+e]},i.prototype.removeNode=function(e){if("string"!=typeof e||(e=this._nodesMap[e])){delete this._nodesMap[e.id],this.nodes.splice(t.indexOf(this.nodes,e),1);for(var i=0;in;)e.call(t,this.nodes[n],n)?n++:(this.removeNode(this.nodes[n]),i--)},i.prototype.filterEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;)e.call(t,this.edges[n],n)?n++:(this.removeEdge(this.edges[n]),i--)},i.prototype.eachNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;n++)this.nodes[n]&&e.call(t,this.nodes[n],n)},i.prototype.eachEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;n++)this.edges[n]&&e.call(t,this.edges[n],n)},i.prototype.clear=function(){this.nodes.length=0,this.edges.length=0,this._nodesMap={},this._edgesMap={}},i.prototype.breadthFirstTraverse=function(e,t,i,n){if("string"==typeof t&&(t=this._nodesMap[t]),t){var a="edges";"out"===i?a="outEdges":"in"===i&&(a="inEdges");for(var o=0;or;r++){var s=o.addNode(e[r].id,e[r]);s.data.value=0,n&&(s.data.outValue=s.data.inValue=0)}for(var r=0;a>r;r++)for(var l=0;a>l;l++){var h=t[r][l];n&&(o.nodes[r].data.outValue+=h,o.nodes[l].data.inValue+=h),o.nodes[r].data.value+=h,o.nodes[l].data.value+=h}for(var r=0;a>r;r++)for(var l=r;a>l;l++){var h=t[r][l];if(0!==h){var m=o.nodes[r],V=o.nodes[l],U=o.addEdge(m,V,{});if(U.data.weight=h,r!==l&&n&&t[l][r]){var d=o.addEdge(V,m,{});d.data.weight=t[l][r]}}}return o}},i}),i("echarts/layout/Chord",["require"],function(){var e=function(e){e=e||{},this.sort=e.sort||null,this.sortSub=e.sortSub||null,this.padding=.05,this.startAngle=e.startAngle||0,this.clockWise=null==e.clockWise?!1:e.clockWise,this.center=e.center||[0,0],this.directed=!0};e.prototype.run=function(e){e instanceof Array||(e=[e]);var n=e.length;if(n){for(var a=e[0],o=a.nodes.length,r=[],s=0,l=0;o>l;l++){var h=a.nodes[l],m={size:0,subGroups:[],node:h};r.push(m);for(var V=0,U=0;Ul;l++){var m=r[l];m.node.layout.startAngle=f,m.node.layout.endAngle=f+k*m.size*b,m.node.layout.subGroups=[];for(var u=0;un;n++){var o=i[n];if(o.type===d.CHART_TYPE_FORCE){if(i[n]=this.reformOption(i[n]),e=i[n].name||"",this.selectedMap[e]=t?t.isSelected(e):!0,!this.selectedMap[e])continue;this.buildMark(n),this._initSerie(o,n);break}}this.animationEffect()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t,i){i=i||"normal";var n=this._getNodeCategory(e,t)||{};return[t.itemStyle&&t.itemStyle[i],n&&n.itemStyle&&n.itemStyle[i],e.itemStyle[i].nodeStyle]},_getEdgeQueryTarget:function(e,t,i){return i=i||"normal",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].linkStyle]},_initSerie:function(e,t){this._temperature=1,e.matrix?this._graph=this._getSerieGraphFromDataMatrix(e):e.links&&(this._graph=this._getSerieGraphFromNodeLinks(e)),this._buildLinkShapes(e,t),this._buildNodeShapes(e,t);var i=e.roam===!0||"move"===e.roam,n=e.roam===!0||"scale"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:i,zoomable:n}),(this.query("markPoint.effect.show")||this.query("markLine.effect.show"))&&this.zr.modLayer(d.EFFECT_ZLEVEL,{panable:i,zoomable:n}),this._initLayout(e),this._step()},_getSerieGraphFromDataMatrix:function(e){for(var t=[],i=0,n=[],a=0;an;n++){var o=i[n];if(o&&!o.ignore){var r=this._getNodeCategory(e,o),l=r?r.name:o.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=t.addNode(o.name,o);h.rawIndex=n}}}for(var n=0,a=e.links.length;a>n;n++){var m=e.links[n],V=m.source,U=m.target;"number"==typeof V&&(V=i[V],V&&(V=V.name)),"number"==typeof U&&(U=i[U],U&&(U=U.name));var d=t.addEdge(V,U,m);d&&(d.rawIndex=n)}return t.eachNode(function(e){var t=e.data.value;if(null==t){t=0;for(var i=0;ih;h++){var m=t.nodes[h];l=Math.max(m.layout.size,l),s=Math.min(m.layout.size,s)}for(var V=l-s,h=0;i>h;h++){var m=t.nodes[h];V>0?(m.layout.size=(m.layout.size-s)*(a-n)/V+n,m.layout.mass=m.layout.size/a):(m.layout.size=(a-n)/2,m.layout.mass=.5)}for(var h=0;i>h;h++){var m=t.nodes[h];if("undefined"!=typeof this.__nodePositionMap[m.id])m.layout.position=y.create(),y.copy(m.layout.position,this.__nodePositionMap[m.id]);else if("undefined"!=typeof m.data.initial)m.layout.position=y.create(),y.copy(m.layout.position,m.data.initial);else{var U=this._layout.center,d=Math.min(this._layout.width,this._layout.height);m.layout.position=o(U[0],U[1],.8*d)}var p=m.shape.style,c=m.layout.size;p.width=p.width||2*c,p.height=p.height||2*c,p.x=-p.width/2,p.y=-p.height/2,y.copy(m.shape.position,m.layout.position)}i=t.edges.length,l=-(1/0);for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight>l&&(l=u.layout.weight)}for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight/=l}this._layout.init(t,e.useWorker)},_buildNodeShapes:function(e,t){var i=this._graph,n=this.query(e,"categories");i.eachNode(function(i){var a=this._getNodeCategory(e,i.data),o=[i.data,a,e],r=this._getNodeQueryTarget(e,i.data),s=this._getNodeQueryTarget(e,i.data,"emphasis"),l=new U({style:{x:0,y:0,color:this.deepQuery(r,"color"),brushType:"both",strokeColor:this.deepQuery(r,"strokeColor")||this.deepQuery(r,"borderColor"),lineWidth:this.deepQuery(r,"lineWidth")||this.deepQuery(r,"borderWidth")},highlightStyle:{color:this.deepQuery(s,"color"),strokeColor:this.deepQuery(s,"strokeColor")||this.deepQuery(s,"borderColor"),lineWidth:this.deepQuery(s,"lineWidth")||this.deepQuery(s,"borderWidth")},clickable:e.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()});l.style.color||(l.style.color=this.getColor(a?a.name:i.id)),l.style.iconType=this.deepQuery(o,"symbol");var h=this.deepQuery(o,"symbolSize")||0;"number"==typeof h&&(h=[h,h]),l.style.width=2*h[0],l.style.height=2*h[1],l.style.iconType.match("image")&&(l.style.image=l.style.iconType.replace(new RegExp("^image:\\/\\/"),""),l=new V({style:l.style,highlightStyle:l.highlightStyle,clickable:l.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(o,"itemStyle.normal.label.show")&&(l.style.text=null==i.data.label?i.id:i.data.label,l.style.textPosition=this.deepQuery(o,"itemStyle.normal.label.position"),l.style.textColor=this.deepQuery(o,"itemStyle.normal.label.textStyle.color"),l.style.textFont=this.getFont(this.deepQuery(o,"itemStyle.normal.label.textStyle")||{})),this.deepQuery(o,"itemStyle.emphasis.label.show")&&(l.highlightStyle.textPosition=this.deepQuery(o,"itemStyle.emphasis.label.position"),l.highlightStyle.textColor=this.deepQuery(o,"itemStyle.emphasis.label.textStyle.color"),l.highlightStyle.textFont=this.getFont(this.deepQuery(o,"itemStyle.emphasis.label.textStyle")||{})),this.deepQuery(o,"draggable")&&(this.setCalculable(l),l.dragEnableTime=0,l.draggable=!0,l.ondragstart=this.shapeHandler.ondragstart,l.ondragover=null);var m="";if("undefined"!=typeof i.category){var a=n[i.category];m=a&&a.name||""}p.pack(l,e,t,i.data,i.rawIndex,i.data.name||"",i.category),this.shapeList.push(l),this.zr.addShape(l),i.shape=l},this)},_buildLinkShapes:function(e,t){for(var i=this._graph,n=i.edges.length,a=0;n>a;a++){var o=i.edges[a],r=o.data,s=o.node1,l=o.node2,V=i.getEdge(l,s),d=this._getEdgeQueryTarget(e,r),u=this.deepQuery(d,"type");e.linkSymbol&&"none"!==e.linkSymbol&&(u="line");var y="line"===u?h:m,g=new y({style:{xStart:0,yStart:0,xEnd:0,yEnd:0},clickable:this.query(e,"clickable"),highlightStyle:{},zlevel:this.getZlevelBase(),z:this.getZBase()});if(V&&V.shape&&(g.style.offset=4,V.shape.style.offset=4),c.merge(g.style,this.query(e,"itemStyle.normal.linkStyle"),!0),c.merge(g.highlightStyle,this.query(e,"itemStyle.emphasis.linkStyle"),!0),"undefined"!=typeof r.itemStyle&&(r.itemStyle.normal&&c.merge(g.style,r.itemStyle.normal,!0),r.itemStyle.emphasis&&c.merge(g.highlightStyle,r.itemStyle.emphasis,!0)),g.style.lineWidth=g.style.lineWidth||g.style.width,g.style.strokeColor=g.style.strokeColor||g.style.color,g.highlightStyle.lineWidth=g.highlightStyle.lineWidth||g.highlightStyle.width,g.highlightStyle.strokeColor=g.highlightStyle.strokeColor||g.highlightStyle.color,p.pack(g,e,t,o.data,null==o.rawIndex?a:o.rawIndex,o.data.name||s.id+" - "+l.id,s.id,l.id),this.shapeList.push(g),this.zr.addShape(g),o.shape=g,e.linkSymbol&&"none"!==e.linkSymbol){var b=new U({style:{x:-5,y:0,width:e.linkSymbolSize[0],height:e.linkSymbolSize[1],iconType:e.linkSymbol,brushType:"fill",color:g.style.strokeColor},highlightStyle:{brushType:"fill"},position:[0,0],rotation:0,zlevel:this.getZlevelBase(),z:this.getZBase()});g._symbolShape=b,this.shapeList.push(b),this.zr.addShape(b)}}},_updateLinkShapes:function(){for(var e=y.create(),t=y.create(),i=y.create(),n=y.create(),a=this._graph.edges,o=0,r=a.length;r>o;o++){var s=a[o],l=s.node1.shape,h=s.node2.shape;y.copy(i,l.position),y.copy(n,h.position);var m=s.shape.style;if(y.sub(e,i,n),y.normalize(e,e),m.offset?(t[0]=e[1],t[1]=-e[0],y.scaleAndAdd(i,i,t,m.offset),y.scaleAndAdd(n,n,t,m.offset)):"bezier-curve"===s.shape.type&&(m.cpX1=(i[0]+n[0])/2-(n[1]-i[1])/4,m.cpY1=(i[1]+n[1])/2-(i[0]-n[0])/4),m.xStart=i[0],m.yStart=i[1],m.xEnd=n[0],m.yEnd=n[1],s.shape.modSelf(),s.shape._symbolShape){var V=s.shape._symbolShape;y.copy(V.position,n),y.scaleAndAdd(V.position,V.position,e,h.style.width/2+2);var U=Math.atan2(e[1],e[0]);V.rotation=Math.PI/2-U,V.modSelf()}}},_syncNodePositions:function(){for(var e=this._graph,t=0;t.01?this._layout.step(this._steps):this.messageCenter.dispatch(d.EVENT.FORCE_LAYOUT_END,{},{},this.myChart)},refresh:function(e){if(e&&(this.option=e,this.series=this.option.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this._init()},dispose:function(){this.clear(),this.shapeList=null,this.effectList=null,this._layout.dispose(),this._layout=null,this.__nodePositionMap={}},getPosition:function(){var e=[];return this._graph.eachNode(function(t){t.layout&&e.push({name:t.data.name,position:Array.prototype.slice.call(t.layout.position)})}),e}},c.inherits(t,r),e("../chart").define("force",t),t}),i("echarts/layout/Force",["require","./forceLayoutWorker","zrender/tool/vector"],function(e){function t(){if("undefined"!=typeof Worker&&"undefined"!=typeof Blob)try{var e=new Blob([n.getWorkerCode()]);i=window.URL.createObjectURL(e)}catch(t){i=""}return i}var i,n=e("./forceLayoutWorker"),a=e("zrender/tool/vector"),o=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},r="undefined"==typeof Float32Array?Array:Float32Array,s=function(e){"undefined"==typeof i&&t(),e=e||{},this.width=e.width||500,this.height=e.height||500,this.center=e.center||[this.width/2,this.height/2],this.ratioScaling=e.ratioScaling||!1,this.scaling=e.scaling||1,this.gravity="undefined"!=typeof e.gravity?e.gravity:1,this.large=e.large||!1,this.preventNodeOverlap=e.preventNodeOverlap||!1,this.preventNodeEdgeOverlap=e.preventNodeEdgeOverlap||!1,this.maxSpeedIncrease=e.maxSpeedIncrease||1,this.onupdate=e.onupdate||function(){},this.temperature=e.temperature||1,this.coolDown=e.coolDown||.99,this._layout=null,this._layoutWorker=null;var n=this,a=this._$onupdate;this._$onupdate=function(e){a.call(n,e)}};return s.prototype.updateConfig=function(){var e=this.width,t=this.height,i=Math.min(e,t),n={center:this.center,width:this.ratioScaling?e:i,height:this.ratioScaling?t:i,scaling:this.scaling||1,gravity:this.gravity||1,barnesHutOptimize:this.large,preventNodeOverlap:this.preventNodeOverlap,preventNodeEdgeOverlap:this.preventNodeEdgeOverlap,maxSpeedIncrease:this.maxSpeedIncrease};if(this._layoutWorker)this._layoutWorker.postMessage({cmd:"updateConfig",config:n});else for(var a in n)this._layout[a]=n[a]},s.prototype.init=function(e,t){if(this._layoutWorker&&(this._layoutWorker.terminate(),this._layoutWorker=null),i&&t)try{this._layoutWorker||(this._layoutWorker=new Worker(i),this._layoutWorker.onmessage=this._$onupdate),this._layout=null}catch(a){this._layoutWorker=null,this._layout||(this._layout=new n)}else this._layout||(this._layout=new n);this.temperature=1,this.graph=e;for(var o=e.nodes.length,s=new r(2*o),l=new r(o),h=new r(o),m=0;o>m;m++){var V=e.nodes[m];s[2*m]=V.layout.position[0],s[2*m+1]=V.layout.position[1],l[m]="undefined"==typeof V.layout.mass?1:V.layout.mass,h[m]="undefined"==typeof V.layout.size?1:V.layout.size,V.layout.__index=m}o=e.edges.length;for(var U=new r(2*o),d=new r(o),m=0;o>m;m++){var p=e.edges[m];U[2*m]=p.node1.layout.__index,U[2*m+1]=p.node2.layout.__index,d[m]=p.layout.weight||1}this._layoutWorker?this._layoutWorker.postMessage({cmd:"init",nodesPosition:s,nodesMass:l,nodesSize:h,edges:U,edgesWeight:d}):(this._layout.initNodes(s,l,h),this._layout.initEdges(U,d)),this.updateConfig()},s.prototype.step=function(e){var t=this.graph.nodes;if(this._layoutWorker){for(var i=new r(2*t.length),n=0;nn;n++)this.temperature*=this.coolDown}else{o(this._$onupdate);for(var n=0;nn;n++)this._layout.temperature=this.temperature,this._layout.update(),this.temperature*=this.coolDown}},s.prototype._$onupdate=function(e){if(this._layoutWorker){for(var t=new Float32Array(e.data),i=0;i0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a),e},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},set:function(e,t,i){return e[0]=t,e[1]=i,e}}:e("zrender/tool/vector");var l="undefined"==typeof Float32Array?Array:Float32Array;if(t.prototype.beforeUpdate=function(){for(var e=0;e=e&&this.bbox[1]<=t&&this.bbox[3]>=t},t.prototype.setBBox=function(e,t,i,n){this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n,this.size=(i-e+n-t)/2},t.prototype._newSubRegion=function(){var e=this.subRegions[this.nSubRegions];return e||(e=new t,this.subRegions[this.nSubRegions]=e),this.nSubRegions++,e},t.prototype._addNodeToSubRegion=function(e){var t=this.findSubRegion(e.position[0],e.position[1]),i=this.bbox;if(!t){var n=(i[0]+i[2])/2,a=(i[1]+i[3])/2,o=(i[2]-i[0])/2,r=(i[3]-i[1])/2,s=e.position[0]>=n?1:0,l=e.position[1]>=a?1:0,t=this._newSubRegion();t.setBBox(s*o+i[0],l*r+i[1],(s+1)*o+i[0],(l+1)*r+i[1])}t.addNode(e)},t.prototype._updateCenterOfMass=function(e){null==this.centerOfMass&&(this.centerOfMass=r.create());var t=this.centerOfMass[0]*this.mass,i=this.centerOfMass[1]*this.mass;t+=e.position[0]*e.mass,i+=e.position[1]*e.mass,this.mass+=e.mass,this.centerOfMass[0]=t/this.mass,this.centerOfMass[1]=i/this.mass},a.prototype.nodeToNodeRepulsionFactor=function(e,t,i){return i*i*e/t},a.prototype.edgeToNodeRepulsionFactor=function(e,t,i){return i*e/t},a.prototype.attractionFactor=function(e,t,i){return e*t/i},a.prototype.initNodes=function(e,t,n){this.temperature=1;var a=e.length/2;this.nodes.length=0;for(var o="undefined"!=typeof n,r=0;a>r;r++){var s=new i;s.position[0]=e[2*r],s.position[1]=e[2*r+1],s.mass=t[r],o&&(s.size=n[r]),this.nodes.push(s)}this._massArr=t,o&&(this._sizeArr=n)},a.prototype.initEdges=function(e,t){var i=e.length/2;this.edges.length=0;for(var a="undefined"!=typeof t,o=0;i>o;o++){var r=e[2*o],s=e[2*o+1],l=this.nodes[r],h=this.nodes[s];if(l&&h){l.outDegree++,h.inDegree++;var m=new n(l,h);a&&(m.weight=t[o]),this.edges.push(m)}}},a.prototype.update=function(){var e=this.nodes.length;if(this.updateBBox(),this._k=.4*this.scaling*Math.sqrt(this.width*this.height/e),this.barnesHutOptimize){this._rootRegion.setBBox(this.bbox[0],this.bbox[1],this.bbox[2],this.bbox[3]),this._rootRegion.beforeUpdate();for(var t=0;e>t;t++)this._rootRegion.addNode(this.nodes[t]);this._rootRegion.afterUpdate()}else{var i=0,n=this._rootRegion.centerOfMass;r.set(n,0,0);for(var t=0;e>t;t++){var a=this.nodes[t];i+=a.mass,r.scaleAndAdd(n,n,a.position,a.mass); }i>0&&r.scale(n,n,1/i)}this.updateForce(),this.updatePosition()},a.prototype.updateForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];r.copy(i.forcePrev,i.force),r.copy(i.speedPrev,i.speed),r.set(i.force,0,0)}this.updateNodeNodeForce(),this.gravity>0&&this.updateGravityForce(),this.updateEdgeForce(),this.preventNodeEdgeOverlap&&this.updateNodeEdgeForce()},a.prototype.updatePosition=function(){for(var e=this.nodes.length,t=r.create(),i=0;e>i;i++){var n=this.nodes[i],a=n.speed;r.scale(n.force,n.force,1/30);var o=r.len(n.force)+.1,s=Math.min(o,500)/o;r.scale(n.force,n.force,s),r.add(a,a,n.force),r.scale(a,a,this.temperature),r.sub(t,a,n.speedPrev);var l=r.len(t);if(l>0){r.scale(t,t,1/l);var h=r.len(n.speedPrev);h>0&&(l=Math.min(l/h,this.maxSpeedIncrease)*h,r.scaleAndAdd(a,n.speedPrev,t,l))}var m=r.len(a),s=Math.min(m,100)/(m+.1);r.scale(a,a,s),r.add(n.position,n.position,a)}},a.prototype.updateNodeNodeForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];if(this.barnesHutOptimize)this.applyRegionToNodeRepulsion(this._rootRegion,i);else for(var n=t+1;e>n;n++){var a=this.nodes[n];this.applyNodeToNodeRepulsion(i,a,!1)}}},a.prototype.updateGravityForce=function(){for(var e=0;ethis.barnesHutTheta*t.size*t.size){var a=this._k*this._k*(i.mass+t.mass)/(n+1);r.scaleAndAdd(i.force,i.force,e,2*a)}else for(var o=0;o0?o=this.nodeToNodeRepulsionFactor(s,l,this._k):0>=l&&(o=this._k*this._k*10*s)):o=this.nodeToNodeRepulsionFactor(s,l,this._k),n||r.scaleAndAdd(t.force,t.force,e,2*o),r.scaleAndAdd(i.force,i.force,e,2*-o)}}}}(),a.prototype.applyEdgeAttraction=function(){var e=r.create();return function(t){var i=t.node1,n=t.node2;r.sub(e,i.position,n.position);var a,o=r.len(e);a=0===this.edgeWeightInfluence?1:1==this.edgeWeightInfluence?t.weight:Math.pow(t.weight,this.edgeWeightInfluence);var s;if(!(this.preventOverlap&&(o=o-i.size-n.size,0>=o))){var s=this.attractionFactor(a,o,this._k);r.scaleAndAdd(i.force,i.force,e,-s),r.scaleAndAdd(n.force,n.force,e,s)}}}(),a.prototype.applyNodeGravity=function(){var e=r.create();return function(t){r.sub(e,this.center,t.position),this.width>this.height?e[1]*=this.width/this.height:e[0]*=this.height/this.width;var i=r.len(e)/100;this.strongGravity?r.scaleAndAdd(t.force,t.force,e,i*this.gravity*t.mass):r.scaleAndAdd(t.force,t.force,e,this.gravity*t.mass/(i+1))}}(),a.prototype.applyEdgeToNodeRepulsion=function(){var e=r.create(),t=r.create(),i=r.create();return function(n,a){var o=n.node1,s=n.node2;if(o!==a&&s!==a){r.sub(e,s.position,o.position),r.sub(t,a.position,o.position);var l=r.len(e);r.scale(e,e,1/l);var h=r.dot(e,t);if(!(0>h||h>l)){r.scaleAndAdd(i,o.position,e,h);var m=r.dist(i,a.position)-a.size,V=this.edgeToNodeRepulsionFactor(a.mass,Math.max(m,.1),100);r.sub(e,a.position,i),r.normalize(e,e),r.scaleAndAdd(a.force,a.force,e,V),r.scaleAndAdd(o.force,o.force,e,-V),r.scaleAndAdd(s.force,s.force,e,-V)}}}}(),a.prototype.updateBBox=function(){for(var e=1/0,t=1/0,i=-(1/0),n=-(1/0),a=0;an;n++){var o=h.nodes[n];o.position[0]=t[2*n],o.position[1]=t[2*n+1]}}else switch(e.data.cmd){case"init":h||(h=new a),h.initNodes(e.data.nodesPosition,e.data.nodesMass,e.data.nodesSize),h.initEdges(e.data.edges,e.data.edgesWeight);break;case"updateConfig":if(h)for(var r in e.data.config)h[r]=e.data.config[r];break;case"update":var s=e.data.steps;if(h){var i=h.nodes.length,t=new Float32Array(2*i);h.temperature=e.data.temperature;for(var n=0;s>n;n++)h.update(),h.temperature*=e.data.coolDown;for(var n=0;i>n;n++){var o=h.nodes[n];t[2*n]=o.position[0],t[2*n+1]=o.position[1]}self.postMessage(t.buffer,[t.buffer])}else{var l=new Float32Array;self.postMessage(l.buffer,[l.buffer])}}}}return a}),i("echarts/chart/map",["require","./base","zrender/shape/Text","zrender/shape/Path","zrender/shape/Circle","zrender/shape/Rectangle","zrender/shape/Line","zrender/shape/Polygon","zrender/shape/Ellipse","zrender/shape/Image","../component/dataRange","../component/roamController","../layer/heatmap","../config","../util/ecData","zrender/tool/util","zrender/config","zrender/tool/event","../util/mapData/params","../util/mapData/textFixed","../util/mapData/geoCoord","../util/projection/svg","../util/projection/normal","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._onmousewheel=function(e){return r.__onmousewheel(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onroamcontroller=function(e){return r.__onroamcontroller(e)},r._ondrhoverlink=function(e){return r.__ondrhoverlink(e)},this._isAlive=!0,this._selectedMode={},this._activeMapType={},this._clickable={},this._hoverable={},this._showLegendSymbol={},this._selected={},this._mapTypeMap={},this._mapDataMap={},this._nameMap={},this._specialArea={},this._refreshDelayTicket,this._mapDataRequireCounter,this._markAnimation=!1,this._hoverLinkMap={},this._roamMap={},this._scaleLimitMap={},this._mx,this._my,this._mousedown,this._justMove,this._curMapType,this.refresh(a),this.zr.on(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.on(c.EVENT.MOUSEDOWN,this._onmousedown),t.bind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),t.bind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Path"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Rectangle"),s=e("zrender/shape/Line"),l=e("zrender/shape/Polygon"),h=e("zrender/shape/Ellipse"),m=e("zrender/shape/Image");e("../component/dataRange"),e("../component/roamController");var V=e("../layer/heatmap"),U=e("../config");U.map={zlevel:0,z:2,mapType:"china",showLegendSymbol:!0,dataRangeHoverLink:!0,hoverable:!0,clickable:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"#ccc"},label:{show:!1,textStyle:{color:"rgb(139,69,19)"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"rgba(255,215,0,0.8)"},label:{show:!1,textStyle:{color:"rgb(100,0,0)"}}}}};var d=e("../util/ecData"),p=e("zrender/tool/util"),c=e("zrender/config"),u=e("zrender/tool/event"),y=e("../util/mapData/params").params,g=e("../util/mapData/textFixed"),b=e("../util/mapData/geoCoord");return t.prototype={type:U.CHART_TYPE_MAP,_buildShape:function(){var e=this.series;this.selectedMap={},this._activeMapType={};for(var t,i,n,a,o=this.component.legend,r={},s={},l={},h={},m=0,V=e.length;V>m;m++)if(e[m].type==U.CHART_TYPE_MAP&&(e[m]=this.reformOption(e[m]),i=e[m].mapType,s[i]=s[i]||{},s[i][m]=!0,l[i]=l[i]||e[m].mapValuePrecision,this._scaleLimitMap[i]=this._scaleLimitMap[i]||{},e[m].scaleLimit&&p.merge(this._scaleLimitMap[i],e[m].scaleLimit,!0),this._roamMap[i]=e[m].roam||this._roamMap[i],(null==this._hoverLinkMap[i]||this._hoverLinkMap[i])&&(this._hoverLinkMap[i]=e[m].dataRangeHoverLink),this._nameMap[i]=this._nameMap[i]||{},e[m].nameMap&&p.merge(this._nameMap[i],e[m].nameMap,!0),this._activeMapType[i]=!0,e[m].textFixed&&p.merge(g,e[m].textFixed,!0),e[m].geoCoord&&p.merge(b,e[m].geoCoord,!0),this._selectedMode[i]=this._selectedMode[i]||e[m].selectedMode,(null==this._hoverable[i]||this._hoverable[i])&&(this._hoverable[i]=e[m].hoverable),(null==this._clickable[i]||this._clickable[i])&&(this._clickable[i]=e[m].clickable),(null==this._showLegendSymbol[i]||this._showLegendSymbol[i])&&(this._showLegendSymbol[i]=e[m].showLegendSymbol),h[i]=h[i]||e[m].mapValueCalculation,t=e[m].name,this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t])){r[i]=r[i]||{},n=e[m].data;for(var d=0,c=n.length;c>d;d++){a=this._nameChange(i,n[d].name),r[i][a]=r[i][a]||{seriesIndex:[],valueMap:{},precision:0};for(var u in n[d])"value"!=u?r[i][a][u]=n[d][u]:isNaN(n[d].value)||(null==r[i][a].value&&(r[i][a].value=0),r[i][a].precision=Math.max(this.getPrecision(+n[d].value),r[i][a].precision),r[i][a].value+=+n[d].value,r[i][a].valueMap[m]=+n[d].value);r[i][a].seriesIndex.push(m)}}this._mapDataRequireCounter=0;for(var f in r)this._mapDataRequireCounter++;this._clearSelected(),0===this._mapDataRequireCounter&&(this.clear(),this.zr&&this.zr.delShape(this.lastShapeList),this.lastShapeList=[]);for(var f in r){for(var c in r[f]){"average"==h[f]&&(r[f][c].value/=r[f][c].seriesIndex.length);var k=r[f][c].value;null!=k&&(r[f][c].value=k.toFixed(null==l[f]?r[f][c].precision:l[f])-0)}this._mapDataMap[f]=this._mapDataMap[f]||{},this._mapDataMap[f].mapData?this._mapDataCallback(f,r[f],s[f])(this._mapDataMap[f].mapData):y[f.replace(/\|.*/,"")].getGeoJson&&(this._specialArea[f]=y[f.replace(/\|.*/,"")].specialArea||this._specialArea[f],y[f.replace(/\|.*/,"")].getGeoJson(this._mapDataCallback(f,r[f],s[f])))}},_mapDataCallback:function(t,i,n){var a=this;return function(o){a._isAlive&&null!=a._activeMapType[t]&&(-1!=t.indexOf("|")&&(o=a._getSubMapData(t,o)),a._mapDataMap[t].mapData=o,o.firstChild?(a._mapDataMap[t].rate=1,a._mapDataMap[t].projection=e("../util/projection/svg")):(a._mapDataMap[t].rate=.75,a._mapDataMap[t].projection=e("../util/projection/normal")),a._buildMap(t,a._getProjectionData(t,o,n),i,n),a._buildMark(t,n),--a._mapDataRequireCounter<=0&&(a.addShapeList(),a.zr.refreshNextFrame()),a._buildHeatmap(t))}},_clearSelected:function(){for(var e in this._selected)this._activeMapType[this._mapTypeMap[e]]||(delete this._selected[e],delete this._mapTypeMap[e])},_getSubMapData:function(e,t){for(var i=e.replace(/^.*\|/,""),n=t.features,a=0,o=n.length;o>a;a++)if(n[a].properties&&n[a].properties.name==i){n=n[a],"United States of America"==i&&n.geometry.coordinates.length>1&&(n={geometry:{coordinates:n.geometry.coordinates.slice(5,6),type:n.geometry.type},id:n.id,properties:n.properties,type:n.type});break}return{type:"FeatureCollection",features:[n]}},_getProjectionData:function(e,t,i){var n,a=this._mapDataMap[e].projection,o=[],r=this._mapDataMap[e].bbox||a.getBbox(t,this._specialArea[e]);n=this._mapDataMap[e].hasRoam?this._mapDataMap[e].transform:this._getTransform(r,i,this._mapDataMap[e].rate);var s,l=this._mapDataMap[e].lastTransform||{scale:{}};n.left!=l.left||n.top!=l.top||n.scale.x!=l.scale.x||n.scale.y!=l.scale.y?(s=a.geoJson2Path(t,n,this._specialArea[e]),l=p.clone(n)):(n=this._mapDataMap[e].transform,s=this._mapDataMap[e].pathArray),this._mapDataMap[e].bbox=r,this._mapDataMap[e].transform=n,this._mapDataMap[e].lastTransform=l,this._mapDataMap[e].pathArray=s;for(var h=[n.left,n.top],m=0,V=s.length;V>m;m++)o.push(this._getSingleProvince(e,s[m],h));if(this._specialArea[e])for(var U in this._specialArea[e])o.push(this._getSpecialProjectionData(e,t,U,this._specialArea[e][U],h));if("china"==e){var d=this.geo2pos(e,b["南海诸岛"]||y["南海诸岛"].textCoord),c=n.scale.x/10.5,u=[32*c+d[0],83*c+d[1]];g["南海诸岛"]&&(u[0]+=g["南海诸岛"][0],u[1]+=g["南海诸岛"][1]),o.push({name:this._nameChange(e,"南海诸岛"),path:y["南海诸岛"].getPath(d,c),position:h,textX:u[0],textY:u[1]})}return o},_getSpecialProjectionData:function(t,i,n,a,o){i=this._getSubMapData("x|"+n,i);var r=e("../util/projection/normal"),s=r.getBbox(i),l=this.geo2pos(t,[a.left,a.top]),h=this.geo2pos(t,[a.left+a.width,a.top+a.height]),m=Math.abs(h[0]-l[0]),V=Math.abs(h[1]-l[1]),U=s.width,d=s.height,p=m/.75/U,c=V/d;p>c?(p=.75*c,m=U*p):(c=p,p=.75*c,V=d*c);var u={OffsetLeft:l[0],OffsetTop:l[1],scale:{x:p,y:c}},y=r.geoJson2Path(i,u);return this._getSingleProvince(t,y[0],o)},_getSingleProvince:function(e,t,i){var n,a=t.properties.name,o=g[a]||[0,0];if(b[a])n=this.geo2pos(e,b[a]);else if(t.cp)n=[t.cp[0]+o[0],t.cp[1]+o[1]];else{var r=this._mapDataMap[e].bbox;n=this.geo2pos(e,[r.left+r.width/2,r.top+r.height/2]),n[0]+=o[0],n[1]+=o[1]}return t.name=this._nameChange(e,a),t.position=i,t.textX=n[0],t.textY=n[1],t},_getTransform:function(e,t,i){var n,a,o,r,s,l,h,m=this.series,V=this.zr.getWidth(),U=this.zr.getHeight(),d=Math.round(.02*Math.min(V,U));for(var p in t)n=m[p].mapLocation||{},o=n.x||o,s=n.y||s,l=n.width||l,h=n.height||h;a=this.parsePercent(o,V),a=isNaN(a)?d:a,r=this.parsePercent(s,U),r=isNaN(r)?d:r,l=null==l?V-a-2*d:this.parsePercent(l,V),h=null==h?U-r-2*d:this.parsePercent(h,U);var c=e.width,u=e.height,y=l/i/c,g=h/u;if(y>g?(y=g*i,l=c*y):(g=y,y=g*i,h=u*g),isNaN(o))switch(o=o||"center",o+""){case"center":a=Math.floor((V-l)/2);break;case"right":a=V-l}if(isNaN(s))switch(s=s||"center",s+""){case"center":r=Math.floor((U-h)/2);break;case"bottom":r=U-h}return{left:a,top:r,width:l,height:h,baseScale:1,scale:{x:y,y:g}}},_buildMap:function(e,t,i,m){for(var V,c,u,y,g,b,f,k,x,_,L,W=this.series,X=this.component.legend,v=this.component.dataRange,w=0,K=t.length;K>w;w++){if(k=p.clone(t[w]),x={name:k.name,path:k.path,position:p.clone(k.position)},c=k.name,u=i[c]){g=[u],V="";for(var I=0,J=u.seriesIndex.length;J>I;I++){var C=W[u.seriesIndex[I]];g.push(C),V+=C.name+" ",X&&this._showLegendSymbol[e]&&X.hasColor(C.name)&&this.shapeList.push(new o({zlevel:C.zlevel,z:C.z+1,position:p.clone(k.position),_mapType:e,style:{x:k.textX+3+7*I,y:k.textY-10,r:3,color:X.getColor(C.name)},hoverable:!1}))}y=u.value}else{u={name:c,value:"-"},V="",g=[];for(var S in m)g.push(W[S]);y="-"}switch(this.ecTheme.map&&g.push(this.ecTheme.map),g.push(U.map),b=v&&!isNaN(y)?v.getColor(y):null,k.color=k.color||b||this.getItemStyleColor(this.deepQuery(g,"itemStyle.normal.color"),u.seriesIndex,-1,u)||this.deepQuery(g,"itemStyle.normal.areaStyle.color"),k.strokeColor=k.strokeColor||this.deepQuery(g,"itemStyle.normal.borderColor"),k.lineWidth=k.lineWidth||this.deepQuery(g,"itemStyle.normal.borderWidth"),x.color=this.getItemStyleColor(this.deepQuery(g,"itemStyle.emphasis.color"),u.seriesIndex,-1,u)||this.deepQuery(g,"itemStyle.emphasis.areaStyle.color")||k.color,x.strokeColor=this.deepQuery(g,"itemStyle.emphasis.borderColor")||k.strokeColor,x.lineWidth=this.deepQuery(g,"itemStyle.emphasis.borderWidth")||k.lineWidth,k.brushType=x.brushType=k.brushType||"both",k.lineJoin=x.lineJoin="round",k._name=x._name=c,f=this.deepQuery(g,"itemStyle.normal.label.textStyle"),L={zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:p.clone(k.position),_mapType:e,_geo:this.pos2geo(e,[k.textX,k.textY]),style:{brushType:"fill",x:k.textX,y:k.textY,text:this.getLabelText(c,y,g,"normal"),_name:c,textAlign:"center",color:this.deepQuery(g,"itemStyle.normal.label.show")?this.deepQuery(g,"itemStyle.normal.label.textStyle.color"):"rgba(0,0,0,0)",textFont:this.getFont(f)}},L._style=p.clone(L.style),L.highlightStyle=p.clone(L.style),this.deepQuery(g,"itemStyle.emphasis.label.show")?(L.highlightStyle.text=this.getLabelText(c,y,g,"emphasis"),L.highlightStyle.color=this.deepQuery(g,"itemStyle.emphasis.label.textStyle.color")||L.style.color,f=this.deepQuery(g,"itemStyle.emphasis.label.textStyle")||f,L.highlightStyle.textFont=this.getFont(f)):L.highlightStyle.color="rgba(0,0,0,0)",_={zlevel:this.getZlevelBase(),z:this.getZBase(),position:p.clone(k.position),style:k,highlightStyle:x,_style:p.clone(k),_mapType:e},null!=k.scale&&(_.scale=p.clone(k.scale)),L=new n(L),_.style.shapeType){case"rectangle":_=new r(_);break;case"line":_=new s(_);break;case"circle":_=new o(_);break;case"polygon":_=new l(_);break;case"ellipse":_=new h(_);break;default:_=new a(_),_.buildPathArray&&(_.style.pathArray=_.buildPathArray(_.style.path))}(this._selectedMode[e]&&this._selected[c]&&u.selected!==!1||u.selected===!0)&&(L.style=L.highlightStyle,_.style=_.highlightStyle),L.clickable=_.clickable=this._clickable[e]&&(null==u.clickable||u.clickable),this._selectedMode[e]&&(this._selected[c]=null!=this._selected[c]?this._selected[c]:u.selected,this._mapTypeMap[c]=e,(null==u.selectable||u.selectable)&&(_.clickable=L.clickable=!0,_.onclick=L.onclick=this.shapeHandler.onclick)),this._hoverable[e]&&(null==u.hoverable||u.hoverable)?(L.hoverable=_.hoverable=!0,_.hoverConnect=L.id,L.hoverConnect=_.id):L.hoverable=_.hoverable=!1,d.pack(L,{name:V,tooltip:this.deepQuery(g,"tooltip")},0,u,0,c),this.shapeList.push(L),d.pack(_,{name:V,tooltip:this.deepQuery(g,"tooltip")},0,u,0,c),this.shapeList.push(_)}},_buildMark:function(e,t){this._seriesIndexToMapType=this._seriesIndexToMapType||{},this.markAttachStyle=this.markAttachStyle||{};var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];"none"==e&&(i=[0,0]);for(var n in t)this._seriesIndexToMapType[n]=e,this.markAttachStyle[n]={position:i,_mapType:e},this.buildMark(n)},_buildHeatmap:function(e){for(var t=this.series,i=0,n=t.length;n>i;i++)if(t[i].heatmap){var a=t[i].heatmap.data;if(t[i].heatmap.needsTransform===!1){for(var o=[],r=0,s=a.length;s>r;++r)o.push([a[r][3],a[r][4],a[r][2]]);var l=[0,0]}else{var h=t[i].heatmap._geoData;if(void 0===h){t[i].heatmap._geoData=[];for(var r=0,s=a.length;s>r;++r)t[i].heatmap._geoData[r]=a[r];h=t[i].heatmap._geoData}for(var s=a.length,U=0;s>U;++U)a[U]=this.geo2pos(e,[h[U][0],h[U][1]]);var l=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]}var d=new V(t[i].heatmap),p=d.getCanvas(a[0][3]?o:a,this.zr.getWidth(),this.zr.getHeight()),c=new m({zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:l,scale:[1,1],hoverable:!1,style:{x:0,y:0,image:p,width:p.width,height:p.height}});c.type="heatmap",c._mapType=e,this.shapeList.push(c),this.zr.addShape(c)}},getMarkCoord:function(e,t){return t.geoCoord||b[t.name]?this.geo2pos(this._seriesIndexToMapType[e],t.geoCoord||b[t.name]):[0,0]},getMarkGeo:function(e){return e.geoCoord||b[e.name]},_nameChange:function(e,t){return this._nameMap[e][t]||t},getLabelText:function(e,t,i,n){var a=this.deepQuery(i,"itemStyle."+n+".label.formatter");return a?"function"==typeof a?a.call(this.myChart,e,t):"string"==typeof a?(a=a.replace("{a}","{a0}").replace("{b}","{b0}"),a=a.replace("{a0}",e).replace("{b0}",t)):void 0:e},_findMapTypeByPos:function(e,t){var i,n,a,o,r;for(var s in this._mapDataMap)if(i=this._mapDataMap[s].transform,i&&this._roamMap[s]&&this._activeMapType[s]&&(n=i.left,a=i.top,o=i.width,r=i.height,e>=n&&n+o>=e&&t>=a&&a+r>=t))return s},__onmousewheel:function(e){function t(e,t){for(var i=0;in;n++){var o=this.shapeList[n];if(o.__animating)return}var r,s,l=e.event,h=u.getX(l),m=u.getY(l),V=u.getDelta(l),d=e.mapTypeControl;d||(d={},s=this._findMapTypeByPos(h,m),s&&this._roamMap[s]&&"move"!=this._roamMap[s]&&(d[s]=!0));var p=!1;for(s in d)if(d[s]){p=!0;var c=this._mapDataMap[s].transform,y=c.left,g=c.top,b=c.width,f=c.height,k=this.pos2geo(s,[h-y,m-g]);if(V>0){if(r=1.2,null!=this._scaleLimitMap[s].max&&c.baseScale>=this._scaleLimitMap[s].max)continue}else if(r=1/1.2,null!=this._scaleLimitMap[s].min&&c.baseScale<=this._scaleLimitMap[s].min)continue;c.baseScale*=r,c.scale.x*=r,c.scale.y*=r,c.width=b*r,c.height=f*r,this._mapDataMap[s].hasRoam=!0,this._mapDataMap[s].transform=c,k=this.geo2pos(s,k),c.left-=k[0]-(h-y),c.top-=k[1]-(m-g),this._mapDataMap[s].transform=c,this.clearEffectShape(!0);for(var n=0,a=this.shapeList.length;a>n;n++){var o=this.shapeList[n];if(o._mapType==s){var x=o.type,_=o.style;switch(o.position[0]=c.left,o.position[1]=c.top,x){case"path":case"symbol":case"circle":case"rectangle":case"polygon":case"line":case"ellipse":case"heatmap":o.scale[0]*=r,o.scale[1]*=r;break;case"mark-line":i(_,r);break;case"polyline":t(_,r);break;case"shape-bundle":for(var L=0;L<_.shapeList.length;L++){var W=_.shapeList[L];"mark-line"==W.type?i(W.style,r):"polyline"==W.type&&t(W.style,r)}break;case"icon":case"image":k=this.geo2pos(s,o._geo),_.x=_._x=k[0]-_.width/2,_.y=_._y=k[1]-_.height/2;break;default:k=this.geo2pos(s,o._geo),_.x=k[0],_.y=k[1],"text"==x&&(o._style.x=o.highlightStyle.x=k[0],o._style.y=o.highlightStyle.y=k[1])}this.zr.modShape(o.id)}}}if(p){u.stop(l),this.zr.refreshNextFrame();var X=this;clearTimeout(this._refreshDelayTicket),this._refreshDelayTicket=setTimeout(function(){X&&X.shapeList&&X.animationEffect()},100),this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"scale"},this.myChart)}}},__onmousedown:function(e){if(!(this.shapeList.length<=0)){var t=e.target;if(!t||!t.draggable){var i=e.event,n=u.getX(i),a=u.getY(i),o=this._findMapTypeByPos(n,a);if(o&&this._roamMap[o]&&"scale"!=this._roamMap[o]){this._mousedown=!0,this._mx=n,this._my=a,this._curMapType=o,this.zr.on(c.EVENT.MOUSEUP,this._onmouseup);var r=this;setTimeout(function(){r.zr.on(c.EVENT.MOUSEMOVE,r._onmousemove)},100)}}}},__onmousemove:function(e){if(this._mousedown&&this._isAlive){var t=e.event,i=u.getX(t),n=u.getY(t),a=this._mapDataMap[this._curMapType].transform;a.hasRoam=!0,a.left-=this._mx-i,a.top-=this._my-n,this._mx=i,this._my=n,this._mapDataMap[this._curMapType].transform=a;for(var o=0,r=this.shapeList.length;r>o;o++)this.shapeList[o]._mapType==this._curMapType&&(this.shapeList[o].position[0]=a.left,this.shapeList[o].position[1]=a.top,this.zr.modShape(this.shapeList[o].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"move"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),this._justMove=!0,u.stop(t)}},__onmouseup:function(e){var t=e.event;this._mx=u.getX(t),this._my=u.getY(t),this._mousedown=!1;var i=this;setTimeout(function(){i._justMove&&i.animationEffect(),i._justMove=!1,i.zr.un(c.EVENT.MOUSEMOVE,i._onmousemove),i.zr.un(c.EVENT.MOUSEUP,i._onmouseup)},120)},__onroamcontroller:function(e){var t=e.event;t.zrenderX=this.zr.getWidth()/2,t.zrenderY=this.zr.getHeight()/2;var i=e.mapTypeControl,n=0,a=0,o=e.step;switch(e.roamType){case"scaleUp":return t.zrenderDelta=1,void this.__onmousewheel({event:t,mapTypeControl:i});case"scaleDown":return t.zrenderDelta=-1,void this.__onmousewheel({event:t,mapTypeControl:i});case"up":n=-o;break;case"down":n=o;break;case"left":a=-o;break;case"right":a=o}var r,s;for(s in i)this._mapDataMap[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,r.hasRoam=!0,r.left-=a,r.top-=n,this._mapDataMap[s].transform=r);for(var l=0,h=this.shapeList.length;h>l;l++)s=this.shapeList[l]._mapType,i[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,this.shapeList[l].position[0]=r.left,this.shapeList[l].position[1]=r.top,this.zr.modShape(this.shapeList[l].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"move"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),clearTimeout(this.dircetionTimer);var m=this;this.dircetionTimer=setTimeout(function(){m.animationEffect()},150)},__ondrhoverlink:function(e){for(var t,i,n=0,a=this.shapeList.length;a>n;n++)t=this.shapeList[n]._mapType,this._hoverLinkMap[t]&&this._activeMapType[t]&&(i=d.get(this.shapeList[n],"value"),null!=i&&i>=e.valueMin&&i<=e.valueMax&&this.zr.addHoverShape(this.shapeList[n]))},onclick:function(e){if(this.isClick&&e.target&&!this._justMove&&"icon"!=e.target.type){this.isClick=!1;var t=e.target,i=t.style._name,n=this.shapeList.length,a=t._mapType||"";if("single"==this._selectedMode[a])for(var o in this._selected)if(this._selected[o]&&this._mapTypeMap[o]==a){for(var r=0;n>r;r++)this.shapeList[r].style._name==o&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));o!=i&&(this._selected[o]=!1)}this._selected[i]=!this._selected[i];for(var r=0;n>r;r++)this.shapeList[r].style._name==i&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this._selected[i]?this.shapeList[r].highlightStyle:this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));this.messageCenter.dispatch(U.EVENT.MAP_SELECTED,e.event,{selected:this._selected,target:i},this.myChart),this.zr.refreshNextFrame();var s=this;setTimeout(function(){s.zr.trigger(c.EVENT.MOUSEMOVE,e.event)},100)}},refresh:function(e){e&&(this.option=e,this.series=e.series),this._mapDataRequireCounter>0?this.clear():this.backupShapeList(),this._buildShape(),this.zr.refreshHover()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)},pos2geo:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.pos2geo(this._mapDataMap[e].transform,t):null},getGeoByPos:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];return t instanceof Array?(t[0]-=i[0],t[1]-=i[1]):(t.x-=i[0],t.y-=i[1]),this.pos2geo(e,t)},geo2pos:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.geo2pos(this._mapDataMap[e].transform,t):null},getPosByGeo:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=this.geo2pos(e,t);return i[0]+=this._mapDataMap[e].transform.left,i[1]+=this._mapDataMap[e].transform.top,i},getMapPosition:function(e){return this._mapDataMap[e].transform?[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]:null},onbeforDispose:function(){this._isAlive=!1,this.zr.un(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.un(c.EVENT.MOUSEDOWN,this._onmousedown),this.messageCenter.unbind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),this.messageCenter.unbind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}},p.inherits(t,i),e("../chart").define("map",t),t}),i("zrender/shape/Path",["require","./Base","./util/PathProxy","../tool/util"],function(e){var t=e("./Base"),i=e("./util/PathProxy"),n=i.PathSegment,a=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},o=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(a(e)*a(t))},r=function(e,t){return(e[0]*t[1]0&&""===d[0]&&d.shift();for(var p=0;p0&&!isNaN(d[0]);){var c,u,y,g,b,f,k,x,_=null,L=[],W=h,X=m;switch(U){case"l":h+=d.shift(),m+=d.shift(),_="L",L.push(h,m);break;case"L":h=d.shift(),m=d.shift(),L.push(h,m);break;case"m":h+=d.shift(),m+=d.shift(),_="M",L.push(h,m),U="l";break;case"M":h=d.shift(),m=d.shift(),_="M",L.push(h,m),U="L";break;case"h":h+=d.shift(),_="L",L.push(h,m);break;case"H":h=d.shift(),_="L",L.push(h,m);break;case"v":m+=d.shift(),_="L",L.push(h,m);break;case"V":m=d.shift(),_="L",L.push(h,m);break;case"C":L.push(d.shift(),d.shift(),d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case"c":L.push(h+d.shift(),m+d.shift(),h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="C",L.push(h,m);break;case"S":c=h,u=m,y=l[l.length-1],"C"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,d.shift(),d.shift()),h=d.shift(),m=d.shift(),_="C",L.push(h,m);break;case"s":c=h,u=m,y=l[l.length-1],"C"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="C",L.push(h,m);break;case"Q":L.push(d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case"q":L.push(h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="Q",L.push(h,m);break;case"T":c=h,u=m,y=l[l.length-1],"Q"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h=d.shift(),m=d.shift(),_="Q",L.push(c,u,h,m);break;case"t":c=h,u=m,y=l[l.length-1],"Q"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h+=d.shift(),m+=d.shift(),_="Q",L.push(c,u,h,m);break;case"A":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h=d.shift(),m=d.shift(),_="A",L=this._convertPoint(W,X,h,m,k,x,g,b,f);break;case"a":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h+=d.shift(),m+=d.shift(),_="A",L=this._convertPoint(W,X,h,m,k,x,g,b,f)}for(var v=0,w=L.length;w>v;v+=2)L[v]+=t,L[v+1]+=i;l.push(new n(_||U,L))}("z"===U||"Z"===U)&&l.push(new n("z",[]))}return l},_convertPoint:function(e,t,i,n,a,s,l,h,m){var V=m*(Math.PI/180),U=Math.cos(V)*(e-i)/2+Math.sin(V)*(t-n)/2,d=-1*Math.sin(V)*(e-i)/2+Math.cos(V)*(t-n)/2,p=U*U/(l*l)+d*d/(h*h);p>1&&(l*=Math.sqrt(p),h*=Math.sqrt(p));var c=Math.sqrt((l*l*h*h-l*l*d*d-h*h*U*U)/(l*l*d*d+h*h*U*U));a===s&&(c*=-1),isNaN(c)&&(c=0);var u=c*l*d/h,y=c*-h*U/l,g=(e+i)/2+Math.cos(V)*u-Math.sin(V)*y,b=(t+n)/2+Math.sin(V)*u+Math.cos(V)*y,f=r([1,0],[(U-u)/l,(d-y)/h]),k=[(U-u)/l,(d-y)/h],x=[(-1*U-u)/l,(-1*d-y)/h],_=r(k,x);return o(k,x)<=-1&&(_=Math.PI),o(k,x)>=1&&(_=0),0===s&&_>0&&(_-=2*Math.PI),1===s&&0>_&&(_+=2*Math.PI),[g,b,l,h,f,_,V,s]},buildPath:function(e,t){var i=t.path,n=t.x||0,a=t.y||0;t.pathArray=t.pathArray||this.buildPathArray(i,n,a);for(var o=t.pathArray,r=t.pointList=[],s=[],l=0,h=o.length;h>l;l++){"M"==o[l].command.toUpperCase()&&(s.length>0&&r.push(s),s=[]);for(var m=o[l].points,V=0,U=m.length;U>V;V+=2)s.push([m[V],m[V+1]])}s.length>0&&r.push(s);for(var l=0,h=o.length;h>l;l++){var d=o[l].command,m=o[l].points;switch(d){case"L":e.lineTo(m[0],m[1]);break;case"M":e.moveTo(m[0],m[1]);break;case"C":e.bezierCurveTo(m[0],m[1],m[2],m[3],m[4],m[5]);break;case"Q":e.quadraticCurveTo(m[0],m[1],m[2],m[3]);break;case"A":var p=m[0],c=m[1],u=m[2],y=m[3],g=m[4],b=m[5],f=m[6],k=m[7],x=u>y?u:y,_=u>y?1:u/y,L=u>y?y/u:1;e.translate(p,c),e.rotate(f),e.scale(_,L),e.arc(0,0,x,g,g+b,1-k),e.scale(1/_,1/L),e.rotate(-f),e.translate(-p,-c);break;case"z":e.closePath()}}},getRect:function(e){if(e.__rect)return e.__rect;var t;t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0;for(var i=Number.MAX_VALUE,n=Number.MIN_VALUE,a=Number.MAX_VALUE,o=Number.MIN_VALUE,r=e.x||0,s=e.y||0,l=e.pathArray||this.buildPathArray(e.path),h=0;hn&&(n=m[V])):(m[V]+so&&(o=m[V]));var U;return U=i===Number.MAX_VALUE||n===Number.MIN_VALUE||a===Number.MAX_VALUE||o===Number.MIN_VALUE?{x:0,y:0,width:0,height:0}:{x:Math.round(i-t/2),y:Math.round(a-t/2),width:n-i+t,height:o-a+t},e.__rect=U,U}},e("../tool/util").inherits(s,t),s}),i("zrender/shape/Ellipse",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ellipse",buildPath:function(e,t){var i=.5522848,n=t.x,a=t.y,o=t.a,r=t.b,s=o*i,l=r*i;e.moveTo(n-o,a),e.bezierCurveTo(n-o,a-l,n-s,a-r,n,a-r),e.bezierCurveTo(n+s,a-r,n+o,a-l,n+o,a),e.bezierCurveTo(n+o,a+l,n+s,a+r,n,a+r),e.bezierCurveTo(n-s,a+r,n-o,a+l,n-o,a),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.a-t/2), y:Math.round(e.y-e.b-t/2),width:2*e.a+t,height:2*e.b+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/component/roamController",["require","./base","zrender/shape/Rectangle","zrender/shape/Sector","zrender/shape/Circle","../config","zrender/tool/util","zrender/tool/color","zrender/tool/event","../component"],function(e){function t(e,t,n,a,o){if(this.rcOption={},a.roamController&&a.roamController.show){if(!a.roamController.mapTypeControl)return void console.error("option.roamController.mapTypeControl has not been defined.");i.call(this,e,t,n,a,o),this.rcOption=a.roamController;var r=this;this._drictionMouseDown=function(e){return r.__drictionMouseDown(e)},this._drictionMouseUp=function(e){return r.__drictionMouseUp(e)},this._drictionMouseMove=function(e){return r.__drictionMouseMove(e)},this._drictionMouseOut=function(e){return r.__drictionMouseOut(e)},this._scaleHandler=function(e){return r.__scaleHandler(e)},this.refresh(a)}}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Sector"),o=e("zrender/shape/Circle"),r=e("../config");r.roamController={zlevel:0,z:4,show:!0,x:"left",y:"top",width:80,height:120,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,handleColor:"#6495ed",fillerColor:"#fff",step:15,mapTypeControl:null};var s=e("zrender/tool/util"),l=e("zrender/tool/color"),h=e("zrender/tool/event");return t.prototype={type:r.COMPONENT_TYPE_ROAMCONTROLLER,_buildShape:function(){if(this.rcOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){this.shapeList.push(this._getDirectionShape("up")),this.shapeList.push(this._getDirectionShape("down")),this.shapeList.push(this._getDirectionShape("left")),this.shapeList.push(this._getDirectionShape("right")),this.shapeList.push(this._getScaleShape("scaleUp")),this.shapeList.push(this._getScaleShape("scaleDown"))},_getDirectionShape:function(e){var t=this._itemGroupLocation.r,i=this._itemGroupLocation.x+t,n=this._itemGroupLocation.y+t,o={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:i,y:n,r:t,startAngle:-45,endAngle:45,color:this.rcOption.handleColor,text:">",textX:i+t/2+4,textY:n-.5,textAlign:"center",textBaseline:"middle",textPosition:"specific",textColor:this.rcOption.fillerColor,textFont:Math.floor(t/2)+"px arial"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:"fill"},clickable:!0};switch(e){case"up":o.rotation=[Math.PI/2,i,n];break;case"left":o.rotation=[Math.PI,i,n];break;case"down":o.rotation=[-Math.PI/2,i,n]}return o=new a(o),o._roamType=e,o.onmousedown=this._drictionMouseDown,o.onmouseup=this._drictionMouseUp,o.onmousemove=this._drictionMouseMove,o.onmouseout=this._drictionMouseOut,o},_getScaleShape:function(e){var t=this._itemGroupLocation.width,i=this._itemGroupLocation.height-t;i=0>i?20:i;var n=Math.min(t/2-5,i)/2,a=this._itemGroupLocation.x+("scaleDown"===e?t-n:n),r=this._itemGroupLocation.y+this._itemGroupLocation.height-n,s={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:a,y:r,r:n,color:this.rcOption.handleColor,text:"scaleDown"===e?"-":"+",textX:a,textY:r-2,textAlign:"center",textBaseline:"middle",textPosition:"specific",textColor:this.rcOption.fillerColor,textFont:Math.floor(n)+"px verdana"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:"fill"},clickable:!0};return s=new o(s),s._roamType=e,s.onmousedown=this._scaleHandler,s},_buildBackground:function(){var e=this.reformCssArray(this.rcOption.padding);this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.rcOption.borderWidth?"fill":"both",color:this.rcOption.backgroundColor,strokeColor:this.rcOption.borderColor,lineWidth:this.rcOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.rcOption.padding),i=this.rcOption.width,n=this.rcOption.height,a=this.zr.getWidth(),o=this.zr.getHeight();switch(this.rcOption.x){case"center":e=Math.floor((a-i)/2);break;case"left":e=t[3]+this.rcOption.borderWidth;break;case"right":e=a-i-t[1]-t[3]-2*this.rcOption.borderWidth;break;default:e=this.parsePercent(this.rcOption.x,a)}var r;switch(this.rcOption.y){case"top":r=t[0]+this.rcOption.borderWidth;break;case"bottom":r=o-n-t[0]-t[2]-2*this.rcOption.borderWidth;break;case"center":r=Math.floor((o-n)/2);break;default:r=this.parsePercent(this.rcOption.y,o)}return{x:e,y:r,r:i/2,width:i,height:n}},__drictionMouseDown:function(e){this.mousedown=!0,this._drictionHandlerOn(e)},__drictionMouseUp:function(e){this.mousedown=!1,this._drictionHandlerOff(e)},__drictionMouseMove:function(e){this.mousedown&&this._drictionHandlerOn(e)},__drictionMouseOut:function(e){this._drictionHandlerOff(e)},_drictionHandlerOn:function(e){this._dispatchEvent(e.event,e.target._roamType),clearInterval(this.dircetionTimer);var t=this;this.dircetionTimer=setInterval(function(){t._dispatchEvent(e.event,e.target._roamType)},100),h.stop(e.event)},_drictionHandlerOff:function(){clearInterval(this.dircetionTimer)},__scaleHandler:function(e){this._dispatchEvent(e.event,e.target._roamType),h.stop(e.event)},_dispatchEvent:function(e,t){this.messageCenter.dispatch(r.EVENT.ROAMCONTROLLER,e,{roamType:t,mapTypeControl:this.rcOption.mapTypeControl,step:this.rcOption.step},this.myChart)},refresh:function(e){e&&(this.option=e||this.option,this.option.roamController=this.reformOption(this.option.roamController),this.rcOption=this.option.roamController),this.clear(),this._buildShape()}},s.inherits(t,i),e("../component").define("roamController",t),t}),i("echarts/layer/heatmap",["require"],function(){function e(e){if(this.option=e,e)for(var i in t)this.option[i]=void 0!==e[i]?e[i]:t[i];else this.option=t}var t={blurSize:30,gradientColors:["blue","cyan","lime","yellow","red"],minAlpha:.05,valueScale:1,opacity:1},i=20,n=256;return e.prototype={getCanvas:function(e,t,a){var o=this._getBrush(),r=this._getGradient(),s=i+this.option.blurSize,l=document.createElement("canvas");l.width=t,l.height=a;for(var h=l.getContext("2d"),m=e.length,V=0;m>V;++V){var U=e[V],d=U[0],p=U[1],c=U[2],u=Math.min(1,Math.max(c*this.option.valueScale||this.option.minAlpha,this.option.minAlpha));h.globalAlpha=u,h.drawImage(o,d-s,p-s)}for(var y=h.getImageData(0,0,l.width,l.height),g=y.data,m=g.length/4;m--;){var b=4*m+3,u=g[b]/256,f=Math.floor(u*(n-1));g[b-3]=r[4*f],g[b-2]=r[4*f+1],g[b-1]=r[4*f+2],g[b]*=this.option.opacity}return h.putImageData(y,0,0),l},_getBrush:function(){if(!this._brushCanvas){this._brushCanvas=document.createElement("canvas");var e=i+this.option.blurSize,t=2*e;this._brushCanvas.width=t,this._brushCanvas.height=t;var n=this._brushCanvas.getContext("2d");n.shadowOffsetX=t,n.shadowBlur=this.option.blurSize,n.shadowColor="black",n.beginPath(),n.arc(-e,e,i,0,2*Math.PI,!0),n.closePath(),n.fill()}return this._brushCanvas},_getGradient:function(){if(!this._gradientPixels){var e=n,t=document.createElement("canvas");t.width=1,t.height=e;for(var i=t.getContext("2d"),a=i.createLinearGradient(0,0,0,e),o=this.option.gradientColors.length,r=0;o>r;++r)"string"==typeof this.option.gradientColors[r]?a.addColorStop((r+1)/o,this.option.gradientColors[r]):a.addColorStop(this.option.gradientColors[r].offset,this.option.gradientColors[r].color);i.fillStyle=a,i.fillRect(0,0,1,e),this._gradientPixels=i.getImageData(0,0,1,e).data}return this._gradientPixels}},e}),i("echarts/util/mapData/params",["require"],function(e){function t(e){if(!e.UTF8Encoding)return e;for(var t=e.features,n=0;n>1^-(1&r),s=s>>1^-(1&s),r+=n,s+=a,n=r,a=s,i.push([r/1024,s/1024])}return i}var n={none:{getGeoJson:function(e){e({type:"FeatureCollection",features:[{type:"Feature",geometry:{coordinates:[],encodeOffsets:[],type:"Polygon"},properties:{}}]})}},world:{getGeoJson:function(i){e(["./geoJson/world_geo"],function(e){i(t(e))})}},china:{getGeoJson:function(i){e(["./geoJson/china_geo"],function(e){i(t(e))})}},"南海诸岛":{textCoord:[126,25],getPath:function(e,t){for(var i=[[[0,3.5],[7,11.2],[15,11.9],[30,7],[42,.7],[52,.7],[56,7.7],[59,.7],[64,.7],[64,0],[5,0],[0,3.5]],[[13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1]],[[12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2]],[[16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6]],[[6,64.4],[8,70],[9,70],[8,64.4],[6,64.4]],[[23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6]],[[37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7]],[[48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1]],[[51,35],[51,28.7],[53,28.7],[53,35],[51,35]],[[52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4]],[[58,12.6],[62,7],[63,7],[60,12.6],[58,12.6]],[[0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4],[1,92.4],[1,3.5],[0,3.5]]],n="",a=e[0],o=e[1],r=0,s=i.length;s>r;r++){n+="M "+((i[r][0][0]*t+a).toFixed(2)-0)+" "+((i[r][0][1]*t+o).toFixed(2)-0)+" ";for(var l=1,h=i[r].length;h>l;l++)n+="L "+((i[r][l][0]*t+a).toFixed(2)-0)+" "+((i[r][l][1]*t+o).toFixed(2)-0)+" "}return n+" Z"}},"新疆":{getGeoJson:function(i){e(["./geoJson/xin_jiang_geo"],function(e){i(t(e))})}},"西藏":{getGeoJson:function(i){e(["./geoJson/xi_zang_geo"],function(e){i(t(e))})}},"内蒙古":{getGeoJson:function(i){e(["./geoJson/nei_meng_gu_geo"],function(e){i(t(e))})}},"青海":{getGeoJson:function(i){e(["./geoJson/qing_hai_geo"],function(e){i(t(e))})}},"四川":{getGeoJson:function(i){e(["./geoJson/si_chuan_geo"],function(e){i(t(e))})}},"黑龙江":{getGeoJson:function(i){e(["./geoJson/hei_long_jiang_geo"],function(e){i(t(e))})}},"甘肃":{getGeoJson:function(i){e(["./geoJson/gan_su_geo"],function(e){i(t(e))})}},"云南":{getGeoJson:function(i){e(["./geoJson/yun_nan_geo"],function(e){i(t(e))})}},"广西":{getGeoJson:function(i){e(["./geoJson/guang_xi_geo"],function(e){i(t(e))})}},"湖南":{getGeoJson:function(i){e(["./geoJson/hu_nan_geo"],function(e){i(t(e))})}},"陕西":{getGeoJson:function(i){e(["./geoJson/shan_xi_1_geo"],function(e){i(t(e))})}},"广东":{getGeoJson:function(i){e(["./geoJson/guang_dong_geo"],function(e){i(t(e))})}},"吉林":{getGeoJson:function(i){e(["./geoJson/ji_lin_geo"],function(e){i(t(e))})}},"河北":{getGeoJson:function(i){e(["./geoJson/he_bei_geo"],function(e){i(t(e))})}},"湖北":{getGeoJson:function(i){e(["./geoJson/hu_bei_geo"],function(e){i(t(e))})}},"贵州":{getGeoJson:function(i){e(["./geoJson/gui_zhou_geo"],function(e){i(t(e))})}},"山东":{getGeoJson:function(i){e(["./geoJson/shan_dong_geo"],function(e){i(t(e))})}},"江西":{getGeoJson:function(i){e(["./geoJson/jiang_xi_geo"],function(e){i(t(e))})}},"河南":{getGeoJson:function(i){e(["./geoJson/he_nan_geo"],function(e){i(t(e))})}},"辽宁":{getGeoJson:function(i){e(["./geoJson/liao_ning_geo"],function(e){i(t(e))})}},"山西":{getGeoJson:function(i){e(["./geoJson/shan_xi_2_geo"],function(e){i(t(e))})}},"安徽":{getGeoJson:function(i){e(["./geoJson/an_hui_geo"],function(e){i(t(e))})}},"福建":{getGeoJson:function(i){e(["./geoJson/fu_jian_geo"],function(e){i(t(e))})}},"浙江":{getGeoJson:function(i){e(["./geoJson/zhe_jiang_geo"],function(e){i(t(e))})}},"江苏":{getGeoJson:function(i){e(["./geoJson/jiang_su_geo"],function(e){i(t(e))})}},"重庆":{getGeoJson:function(i){e(["./geoJson/chong_qing_geo"],function(e){i(t(e))})}},"宁夏":{getGeoJson:function(i){e(["./geoJson/ning_xia_geo"],function(e){i(t(e))})}},"海南":{getGeoJson:function(i){e(["./geoJson/hai_nan_geo"],function(e){i(t(e))})}},"台湾":{getGeoJson:function(i){e(["./geoJson/tai_wan_geo"],function(e){i(t(e))})}},"北京":{getGeoJson:function(i){e(["./geoJson/bei_jing_geo"],function(e){i(t(e))})}},"天津":{getGeoJson:function(i){e(["./geoJson/tian_jin_geo"],function(e){i(t(e))})}},"上海":{getGeoJson:function(i){e(["./geoJson/shang_hai_geo"],function(e){i(t(e))})}},"香港":{getGeoJson:function(i){e(["./geoJson/xiang_gang_geo"],function(e){i(t(e))})}},"澳门":{getGeoJson:function(i){e(["./geoJson/ao_men_geo"],function(e){i(t(e))})}}};return{decode:t,params:n}}),i("echarts/util/mapData/textFixed",[],function(){return{"广东":[0,-10],"香港":[10,10],"澳门":[-10,18],"黑龙江":[0,20],"天津":[5,5],"深圳市":[-35,0],"红河哈尼族彝族自治州":[0,20],"楚雄彝族自治州":[-5,15],"石河子市":[-5,5],"五家渠市":[0,-10],"昌吉回族自治州":[10,10],"昌江黎族自治县":[0,20],"陵水黎族自治县":[0,20],"东方市":[0,20],"渭南市":[0,20]}}),i("echarts/util/mapData/geoCoord",[],function(){return{Russia:[100,60],"United States of America":[-99,38]}}),i("echarts/util/projection/svg",["require","zrender/shape/Path"],function(e){function t(e){return parseFloat(e||0)}function i(e){for(var i=e.firstChild;"svg"!=i.nodeName.toLowerCase()||1!=i.nodeType;)i=i.nextSibling;var n=t(i.getAttribute("x")),a=t(i.getAttribute("y")),o=t(i.getAttribute("width")),r=t(i.getAttribute("height"));return{left:n,top:a,width:o,height:r}}function n(e,t){function i(e){var t=e.tagName;if(m[t]){var o=m[t](e,n);o&&(o.scale=n,o.properties={name:e.getAttribute("name")||""},o.id=e.id,s(o,e),a.push(o))}for(var r=e.childNodes,l=0,h=r.length;h>l;l++)i(r[l])}var n=[t.scale.x,t.scale.y],a=[];return i(e),a}function a(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]/e.scale.x,i[1]/e.scale.y]}function o(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]*e.scale.x,i[1]*e.scale.y]}function r(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function s(e,t){var i=t.getAttribute("fill"),n=t.getAttribute("stroke"),a=t.getAttribute("stroke-width"),o=t.getAttribute("opacity");i&&"none"!=i?(e.color=i,n?(e.brushType="both",e.strokeColor=n):e.brushType="fill"):n&&"none"!=n&&(e.strokeColor=n,e.brushType="stroke"),a&&"none"!=a&&(e.lineWidth=parseFloat(a)),o&&"none"!=o&&(e.opacity=parseFloat(o))}function l(e){for(var t=r(e).replace(/,/g," ").split(/\s+/),i=[],n=0;no;o++)if(n=a[o],!n.properties.name||!t[n.properties.name])switch(n.type){case"Feature":r[n.geometry.type](n.geometry.coordinates);break;case"GeometryCollection":i=n.geometries;for(var l=0,h=i.length;h>l;l++)r[i[l].type](i[l].coordinates)}return e.srcSize={left:1*r.xmin.toFixed(4),top:1*r.ymin.toFixed(4),width:1*(r.xmax-r.xmin).toFixed(4),height:1*(r.ymax-r.ymin).toFixed(4)},e}function i(e,i,n){function a(e,t){c=e.type,u=e.coordinates,o._bbox={xmin:360,xmax:-360,ymin:180,ymax:-180},y=o[c](u),m.push({path:y,cp:o.makePoint(t.properties.cp?t.properties.cp:[(o._bbox.xmin+o._bbox.xmax)/2,(o._bbox.ymin+o._bbox.ymax)/2]),properties:t.properties,id:t.id})}n=n||{},o.scale=null,o.offset=null,e.srcSize||t(e,n),i.offset={x:e.srcSize.left,y:e.srcSize.top,left:i.OffsetLeft||0,top:i.OffsetTop||0},o.scale=i.scale,o.offset=i.offset;for(var r,s,l,h=e.features,m=[],V=0,U=h.length;U>V;V++)if(l=h[V],!l.properties.name||!n[l.properties.name])if("Feature"==l.type)a(l.geometry,l);else if("GeometryCollection"==l.type){r=l.geometries;for(var d=0,p=r.length;p>d;d++)s=r[d],a(s,s)}var c,u,y;return m}function n(e,t){var i,n;return t instanceof Array?(i=1*t[0],n=1*t[1]):(i=1*t.x,n=1*t.y),i=i/e.scale.x+e.offset.x-168.5,i=i>180?i-360:i,n=90-(n/e.scale.y+e.offset.y),[i,n]}function a(e,t){return o.offset=e.offset,o.scale=e.scale,o.makePoint(t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y])}var o={formatPoint:function(e){return[(e[0]<-168.5&&e[1]>63.8?e[0]+360:e[0])+168.5,90-e[1]]},makePoint:function(e){var t=this,i=t.formatPoint(e);t._bbox.xmin>e[0]&&(t._bbox.xmin=e[0]),t._bbox.xmaxe[1]&&(t._bbox.ymin=e[1]),t._bbox.ymaxn;n++)t=o.makePoint(e[n]),i=0===n?"M"+t.join(","):i+"L"+t.join(",");return i},Polygon:function(e){for(var t="",i=0,n=e.length;n>i;i++)t=t+o.LineString(e[i])+"z";return t},MultiPoint:function(e){for(var t=[],i=0,n=e.length;n>i;i++)t.push(o.Point(e[i]));return t},MultiLineString:function(e){for(var t="",i=0,n=e.length;n>i;i++)t+=o.LineString(e[i]);return t},MultiPolygon:function(e){for(var t="",i=0,n=e.length;n>i;i++)t+=o.Polygon(e[i]);return t}},r={formatPoint:o.formatPoint,makePoint:function(e){var t=this,i=t.formatPoint(e),n=i[0],a=i[1];t.xmin>n&&(t.xmin=n),t.xmaxa&&(t.ymin=a),t.ymaxt;t++)this.makePoint(e[t])},Polygon:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPoint:function(e){for(var t=0,i=e.length;i>t;t++)this.Point(e[t])},MultiLineString:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPolygon:function(e){for(var t=0,i=e.length;i>t;t++)this.Polygon(e[t])}};return{getBbox:e,geoJson2Path:i,pos2geo:n,geo2pos:a}}),i("echarts/util/mapData/geoJson/an_hui_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3415",properties:{name:"六安市",cp:[116.3123,31.8329],childNum:6},geometry:{type:"Polygon",coordinates:["@@„„nJ‚UXUVƒ°U„ÑnU@mlLVaVln@@bn@VU@xlb@lšLnKlšƒVI„JšUVxnI@lVL@b„ްVX@˜b„x„nVVUnVVnU‚›@kX@VwV@„al¥UUnUWa@ƒ@wĸU„LU¥lKUa@aUI@alLVaUƒ¯anƒWkUKm@XV@VaXlW@aU_UWVUƒI¯@ma¯W¯™™I@UU@WWU@U@@UU@VkV@@WUUm@UaU@„lK@IUK„L@KWmXUWaXI@ƒ@a@a@U@U@KV¥lw„k°b²JVIVKlV@UX„la„Ul`œUVLVVVUšJ„U@Lnm@_VK@KUIW@™J@Xk@WW@U—ƒmm™XmWk@kK@aUUƒVmmkUwUmWL™@WmU@™UJmUULkKWakLWVkIƒlƒwULƒW@X°lUJ@°ULƒWV—wmJ@bmb¯Vkm@@WkWm¯wƒL@lkXƒWmXym¯UImJUbkV™@Vn¯„@V@lUbƒ@mk@maUxmlUbULWn@J—LmKUkWKkwUKƒbm„X„WxkVUKmLkVV@JUUWL@xkJUUƒV@X@VVlUbVX@xk¤šx‚¼œxWxn„‚nn@Þ¼„JVb°aVn„@šmlnXU„JlbVlkz@‚lUŽlXJmxVxXnWxXÈWlUŽ@šUxU@VX@xUL@šUÆmLnV@lWXk@@JlbXblnlJ"],encodeOffsets:[[118710,33351]]}},{type:"Feature",id:"3408",properties:{name:"安庆市",cp:[116.7517,30.5255],childNum:9},geometry:{type:"Polygon",coordinates:["@@n°‚znW„XlW@k„K°xXn‚l@Xn@l‚°Una@anI˜xXU„ŽVK@¯VIkW¯X@‚„VK„x„klJXUlKXblLVKnVVIšŽV@Xn‚@šŽXKVnVxlŽnn„UlmV@²óUkV™lW„b„lƒšƒn@VVVIn@lw@WVIXblV„@Èx‚aUaVIVVnKVLšK„ƒln@b²K@»U£ƒÑķƒġÝÅb™K™a@Im@ۍ„@kWÓkkmKÅnóJƒUÅ£›W@w„ĕ@wĉţ¯¯ƒUkK±l¯Uƒ¥UÑkÝUķ»Ý¥¯™JƒIUŽVbUl¯ÈV¼VJU¼Vb@bkLUl@„VJ@bUXǚ@lkVmXmKkLVxš‚Ž„VƒL@VkVVVlzW˜kbmLUUUbVbUV™šlÒnJlUnLllUL@bU„Vx„l‚LXVƦÈVU¦WJ"],encodeOffsets:[[118834,31759]]}},{type:"Feature",id:"3411",properties:{name:"滁州市",cp:[118.1909,32.536],childNum:7},geometry:{type:"Polygon",coordinates:["@@š„@`nnl@„xšK@X°KXV˜IXVlbXVWnX‚lL@šÈ»‚LVan@VJ„êVVn@‚X@laÞbVaƒyn@„_‚xnWVXnWl@VnUVkI@l‚nXKVLVV@V@kW@LlVô„@J@bVnnKnkVa@»lç@ƒnwšKma™UUUVњ@n™mWXalI@alVn@VwUaVU„@„nlaôJnU„VVXlJšaXXVK@UšV@VWx@nXVWšXVšUlLUbV‚ULVVnUVbUbVbš@@a„KÆnnKVK@U@UU@@a„@Vƒ°¯ÈJVIlķ@aa˜UaVKU_@mkxUI@aƒUlyU@@™wkKWmUbUnUVWbkJW_J@bƒn@Vm@@KULk@V@@bVbÅm@LW@UVVbkK@UkKWL@VULUKWIUJUbkK@_WVXU›Jka@XƒVa@kšy@aVIUUW@@m„UlLœKWÑUKVan@UkVmmIXKƒaVaUwVU@UmykU¯@±UUL@WUIVUU@KkIWaƒaU@kUUaǃUó»mKƒk¯@y@kWK@bkI¯`mn™l¯XWlkVUzUJlbUbVJl@nnm„@VULV`XnWƗbmUUn™JmUknƒJ¯km@ƒyk@kU›xL@VUbmnn¤lX@`™z@JmaULUVl@Xn@xllkXWa—aW@UVmUbƒ@mVXšWxXbWbUŽƒÒnVVnVVUL"],encodeOffsets:[[120004,33520]]}},{type:"Feature",id:"3418",properties:{name:"宣城市",cp:[118.8062,30.6244],childNum:7},geometry:{type:"Polygon",coordinates:["@@Vb@„XL˜JXxlIXxlVlV@I²¤šnlUnVšU@VULWVUJ@Lnb@lV@UnV@@VVVlLnbnJ‚UVkUUVWn@@anUVnVJVIV‚@@nUJVbUb‚„@VUbVK@bn@VbnIlxkllXVlXKWUXUlL°¤UVVb@bš„UlkXW‚ƒxXz@‚„Ila„UlƒnUlJVInVÆJ„U„LVUnV„K°@VnlVnxV@XLlK@wVL@KnUlJXU˜bnKVLX„lUw@VWlLXKm@@a„@VLnmlIVVnKn@škVašVlwk@@a@k@ƒVIUa™@maUa@wna@kmWƒ™UUmVUIVǗ@aƒKm™aƒ™kU™J@InmUUaVa„k‚lX@Vk@m@VU@wnK@alKVUkUkKƒbmUkmƒ@U£WVk@@UÝbbƒaÇx@b@WVUa¯ƒ@wVwUUV@VwnK@KWaŁ@KšIUyUI@WmXó™UbWaKm™@km@IUyƒIUaWKƒx@zUKUL@llVUnkLVVkJWX@VUKUVƒIkVWakb@VWb@n@JkXUlmL@xkL@`VxšLUÈUJ@Vm@@bmIUlUL@VUVVbknm@mKUw™KVÈ@J@LV±kkJUIƒl"],encodeOffsets:[[120803,31247]]}},{type:"Feature",id:"3412",properties:{name:"阜阳市",cp:[115.7629,32.9919],childNum:6},geometry:{type:"Polygon",coordinates:["@@V™nƒš@ša„k°aš±@‚¥@UUI@aUmlwUUx›b@¥XU@mmI@a@Kn@@_W@@W„I@mšUVVXUl@XaV@‚K@I@a„LX@aVI°K@KVL„UUw‚yXkšK@kšKÆbXnlK@k@a„JlU@w@U@»@aXKWƒn_‚JXkVKnƒ@°LlKXƒW@¯Uƒ@aUK@kmJUw™VƒIUJ™„kŽmL™K@kka@wUVm@@am@UkUbkK@nmVƒÒ¯VU„WVVmIƒƒULk@ƒƒma@kkKƒƒ@nUbUamU™`UUVUkKVkkƒW@@bkmƒnƒmUXVKXVƒL@VƒbU„m‚™bVXJ@nmKÅI@KWKUXVJUL@VUKUX@KUKWL@LUJmaXXm@kVVV@L@VUL@VlK@L@V@LUK@VUb@UUU@°@nVxU`‚Lkn@`@XVJ@X™Vm„k@UKmV¯LVVn±Wm@Ub@JlLUl„@VLk„@lmVVn@bnV@V°IV™šaVJXI°K°V@XXVlVVU„nšKVlUš„bWXnV@bV`U„„@@m@@‚ƒ@nxmn@bXVlL@¤nb„Ul¦šVVUnJVU„Vl@@bÞL"],encodeOffsets:[[118418,34392]]}},{type:"Feature",id:"3413",properties:{name:"宿州市",cp:[117.5208,33.6841],childNum:5},geometry:{type:"Polygon",coordinates:["@@@UWU@bkW@aWU@aUIkWV™lLXb„lVIUVV@‚mn@V_n@VaUK@I‚@UašanJVU„@lV„UVnnKVVlaUa„I@wnK‚Lnll@nVlk@wVKXkl@@b„bUJ@V‚U@U„UUyVk@aVUXwlWXX‚WU¹@aU™@WUI@mlUšn„J@Il@šaXbV@VKl@XxVL@W„IšJlb„@„al@„IUUm@@aVK@¥¯—@mUķ¯bWƒk£Vm@akm@VaÅ@UVWaƒ@UJWkƒJ—UƒbWbU@UlƒXk@ƒamV@K¯nk@ƒlU@Uxmz@bU`ÇbUbÅVm£U@Ww™x@akLUK@UlakwUJWVkLmaUal@n_ƒmVUnKVUUmÅXWa™@kJmx@XUJ@bVLXxl@VVUVV„UbkLWbU@@lUVV„VVX„›K@XkJ@nU@@bV@VxUVlb„U@xXLWŽn@UxVbVĊ„V@b@XV`mnkJ@kUKmbƒaU@VbnbÆx@XU@@`k@@bl„™@@bkL@WƒakXWaU@Vmkx@XWW@@wUUUbƒJ™U¯V™@¯ÞU@WxXŽlL@bkb@ŽlVlnb™JW@kkU@mbkaWJ—IVlmz¯`UnU@mb™@@„ƒ`@bkVlœnV@b@šV@„aVxn@Vx‚KXnl@nbVK„bVK@a„_V@Vƒ„w@W„LlwnK@UmIU@VWš@šUÈ@lKnal„wš@@V°@šaUmlUUw@„ƒV@@UXK"],encodeOffsets:[[119836,35061]]}},{type:"Feature",id:"3410",properties:{name:"黄山市",cp:[118.0481,29.9542],childNum:5},geometry:{type:"Polygon",coordinates:["@@lXnlWX@VUJVnUJVzXJVx„kVJlI²l‚U@K@IUǚLVxnLn@lmUaVU@UVKVknJ@an@@UVIVǙKUw@_lK@wnKVklW@I@mXa@UlaXblU„JVUVL@UXWlIUUlKVmkU@kVKVL@y„wXLVb„JVz@Jlnš@nŽ‚LXbVaôšnW@la@UVWUa@@a@mk@WIk@VwUa¯¥m@UUVK@ImK@aX£ƒkK›ÅV™a™™ƒ_@±ƒakXWW—LƒƒƒnU@@a@¯mK@L™JUWwUV™VmbXX@lWLn`mzUJUb™Lƒ„k@makVWmkX™ambkKknƒaƒ@ƒaƒb@‚U@Unm@—ƒWVƒ@VbUbUJWIk@@lmL@°UVUVm„nš™@@kmWkb@xƒ_m@@aU@b@JlŽUz™lWxXn„@‚b²@l`„IVl„UlL@VšK„nVbUl@VlIn@@b„bVWUk‚@@bX@Valb@bnb°Vn@„xVKlbVnV@V‚x„L@ln@UXVV‚L˜"],encodeOffsets:[[120747,31095]]}},{type:"Feature",id:"3414",properties:{name:"巢湖市",cp:[117.7734,31.4978],childNum:5},geometry:{type:"Polygon",coordinates:["@@VV@blL@ŽXlWnnšnŽ˜„@VXXl@@WšIX@VJ@LšxŎxlnšŽ@bXJVblX@VVbUVn@VbUVlb@LnJVbVLV‚XLšÒVL„ÒšV„bVIVylUXk°Wšknm°_lJ@aXL@l‚z°@„lnLô¼V‚È„VUUaVKU@WW@@UUa@knmVLlaV@„a@kšak±@UmwkKmk™lj™ÝUUkL@mlIVmnÝWkkUÝ@KƑĉ™a@»ƒmma@mX™¤¯Uƒw@ƒ@UU@bU±±L@akmƒ„™LUKmLUUUJVbbÇwƒ@kUWaUJ@Xkxm@UJUUm@™„k„ƒ‚ƒakXUšVl±ôU@kn"],encodeOffsets:[[119847,32007]]}},{type:"Feature",id:"3416",properties:{name:"亳州市",cp:[116.1914,33.4698],childNum:4},geometry:{type:"Polygon",coordinates:["@@lU@Un@@anUlw@KVmUwlaX_lKna@KU@@kWKUU@ankW™XK˜@@V²VVIÈU@al@VaÈamK@wU™@klaUƒV@XƒVUU»WUUbkmUkVmk@aÈw@mWU@VkIkVWKUÑķXȭºU¯lƒ@kkLWmÅa™L@l™LWlzVxƒVUK@L¯LUJ@bWƒK@b@JLU@Wbk@WVUU™V@nƒJ@XX@@`m@@L@bnJ@nWV@¦œa‚wVVkxVn@bVJ@V¦@Ž™²¯bƒl™b™@m„UšUŽƒŽ@¼ƒ¦Xb‚UV`@nnxUxWLkUkVWKkV@XV@@VVL@VX„@lVV@L@blL@`šL@xXKVL‚@„VnUš@lwnU@ml@XnV@@UVW°LnalƒUI@aUK@a‚a@U„kXW@I@mWL@UXK@UVW@U‚@@k„Wn‚@@V„@XblaVxšL@bVKXb„IlJ"],encodeOffsets:[[119183,34594]]}},{type:"Feature",id:"3417",properties:{name:"池州市",cp:[117.3889,30.2014],childNum:4},geometry:{type:"Polygon",coordinates:["@@„V°°ĊŤ@xƒĖ@xœXƤ„VôIÆmnLllXÔ@lƒÜŽn@@JšbšLÆaĢÞĸ„°VVUUKVanK@UV@VL„VVn„ln@‚xnklxXamk@WV@Xa˜@naVk„Klk™@mkUWwkJWw—IWK@ƒUaUwWIUyVIUmVI@UXWmkkW‚—KUUVWm@@kƒKw@U‚UUmkaULƒwm@¯Uma@akaUbW@@a@VlUXƒa@am@kJ@UVkUaƒm™L@UkKƒVUkƒJk_±@aƒ@WmXwÇkkaVaUa±ƒœwV@VkƒwnyUaW@UU¯amLk@m™@kmmU™™¯K@L@lUX¯ƒWlkXƒŽVb„bƒVUL@J@LVKnlJXnlb@`nXlalV@bnL@Vnb˜¼@lXbWlkL™K@zUJmIUxUVUVmX","@@llUL@VlxšL@a@UƒwXa¯@"],encodeOffsets:[[119543,30781],[120061,31152]]}},{type:"Feature",id:"3401",properties:{name:"合肥市",cp:[117.29,32.0581],childNum:4},geometry:{type:"Polygon",coordinates:["@@„L„xV‚ĊLÞkšVlVVXaWaXwW™nU„@‚anVVUX@˜bXblWkk@wWmk@VUVKnb@Išy@_kWm£nmVa@U‚KœwlVl@„zn@°l„IlmnVšIVmnV˜aXÅWmU_VK@Unƒmmk@UIVakaƒa™UƒÑUK™ÑWKUUKUamI@KkaVUUam@VUUa@UkWUaWI@a™kmōw™wUL@`mn@KƒV™IUVUUUK›Vk_ƒVkbWƒ@VkUULUJ±I¯aƒlkxU¦@L@V@V@b@b@„WJXbWVXn@LƒKVL@JkLƒŽV@Vbn@VV@XU@UlV@@VV@V@XXV@@VšJ°š°Xnb°@„JUVVXV`@bkXWŽUbU@WŽn@VLXlm„°bV„UbkK@bVJ@bVbkLV¦ƒKķV@x@„XbmVVVk¦"],encodeOffsets:[[119678,33323]]}},{type:"Feature",id:"3403",properties:{name:"蚌埠市",cp:[117.4109,33.1073],childNum:4},geometry:{type:"Polygon",coordinates:["@@VÒXLlUlJ@UXV@nÇx@bnlUVllnVaXVV¼UVW„U@V„²wVV@Vl@„VnwlIš@XbÆWVnUVmLUV„nm`k@VbnblKXUVIlxkb@VVLlK@bšwXxV@n¤ÆUVaÈaV_@anyVwV@„kl@°m@LnU„bl@„WVkV@Xa„a˜V„IXl‚IV‚„@XbVUÆ@XKWwUkmW@_UmnIlJXkWKXmV@‚w@_XV@Kl@kU@KlX@@UUUUKWLm@klJVUUmk@mXUWmXwƒ`m@„zUbÝakbW@m@UUƒéUIm@UbKǼ@™kKWXmWUkaWU—JWU¯L@W™Lƒwk@mm@_™ƒÅl™UVkmWUnV@VWLUb™bƑĬ¯l"],encodeOffsets:[[119543,33722]]}},{type:"Feature",id:"3402",properties:{name:"芜湖市",cp:[118.3557,31.0858],childNum:4},geometry:{type:"Polygon",coordinates:["@@„bVaV@XllLXU°ŽlL@V@VUnVl¯Ikš›VUVU@@b@lUXUWmb„n@¼šbƒĊ‚LÞ@lVXlmÞUnkJ@nlKVVšÞXklWVaVI@aUKn»lL@Kn@‚XXwlm@mn°@„V@Wy„wXlWVk™ƒ@aUaVU¯£kKWVXVWLUkkWlkkwmJUam@@aULVa@UƒVaUaVI@m‚@UUJUIUmmV@bm@UXVVUlVmImakKUU@UU@VmU@@kma@KVIXUVK@U™VmUkV™m±£@JkU@nlšk‚ƒLUlmb—@WbU@@XnlWb"],encodeOffsets:[[120814,31585]]}},{type:"Feature",id:"3406",properties:{name:"淮北市",cp:[116.6968,33.6896],childNum:3},geometry:{type:"MultiPolygon",coordinates:[["@@lnnK@¦n@@V‚V„@@VV@nIV„V@VW²a@b@bVnUVVV@V™z@lš@°UšV„IVaVV@x@ŽXX@WlwUnV@XblW„b@XlK@aš@kƒ@al@@_V@@WÅwmaUaV@„bnaVL@llInmU_@W@aƒUUĉUaVwm@XWK@wƒVkaVUUwU@@aV@@mlI@WœLWƒUUUƒVU@kV@XalKVaUƒVUUUk@WwUK@aVI@WƒUk@@UUU±xkb@lVš@xnLÇbUbk@@bÇVUJ±U@U—@WLXšml@bVVXL@lV@@LmbkLW`kbVxUn@LkxmV@bm@@VkV"],["@@VVVkV@¥@UV@U@VUUJƒkWakKUšlXVJ@bXV@blX@aXV@V"]],encodeOffsets:[[[119183,34594]],[[119836,35061]]]}},{type:"Feature",id:"3404",properties:{name:"淮南市",cp:[116.7847,32.7722],childNum:2},geometry:{type:"Polygon",coordinates:["@@°kƒīšaVaXK@U‚UVmnXUlšVÆkVKUUUmmU„ÑkU™UÝlĉKUƒwƒKƒbU@UxW@@lœmVUUVmUUƒmƒw—aW„kL¯K@Žm„ULWlIm`X„WL@b@¼@V@xkVƒI@b@l@lk„V°Ȯ¹ĸW"],encodeOffsets:[[119543,33722]]}},{type:"Feature",id:"3405",properties:{name:"马鞍山市",cp:[118.6304,31.5363],childNum:2},geometry:{type:"Polygon",coordinates:["@@šNJnllLnxV@laXLVKma„aXbVI„bVKVVVIVyn@n_ƒƒW@@ƒ„UnJlUVVXlLnaUWlV@VV„IXW@_W@XK@K@UVUUwVamÑXmmwƒw™KUnUK™çU@ƒJƒU¯@mŽ@nknWxWm@@LkKm¼VL@bUJUbkXWl"],encodeOffsets:[[121219,32288]]}},{type:"Feature",id:"3407",properties:{name:"铜陵市",cp:[117.9382,30.9375],childNum:3},geometry:{type:"MultiPolygon",coordinates:[["@@„ÒV¤@¼V²@aVV@Ž@„„x°Vš£nW‚@nbnaVXVW@k@aV@VUœUl™°JUkVm@U@UkK¯WVkKWkU@Ubƒakwmlwm@ƒkUmƒUUKU@@VmLUbVLUV¯U"],["@@LllUL@VlxšL@a@UƒwXamK"]],encodeOffsets:[[[120522,31529]],[[120094,31146]]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ao_men_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"8200",properties:{name:"澳门",cp:[113.5715,22.1583],childNum:1},geometry:{type:"Polygon",coordinates:["@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW"],encodeOffsets:[[116325,22699]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/bei_jing_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"110228",properties:{name:"密云县",cp:[117.0923,40.5121],childNum:1},geometry:{type:"Polygon",coordinates:["@@vIHZDZQtDLNMXIbHRCXXITbJ@H`LGPRDDJNCLHTOCWFGvGBUJMKGFO^IHWXITQCI’Y^AXGfRˆDXF`DJOLB~G\\DZIHHpErUVMhHb]\\M†BVF@FTP`@zTbD\\@~M\\K`H^EVODWICAakAQXoIcCOCIgGYNWFWNGGKKGaJEGMEIKYJUT_J_Go@_SyQaSFMEGTcYOQLIIi@EKAUPCV[EEXQCW|aMUMAaYCYNIDGGACIMGGSKDQGaF_C[GaB@GOIiOKAYL“mI@CN]F[SWWAcKKI@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]CMSIWGEUFgDIQ[MeDMJS@RR@LphFPCHaBAJKF@J]IBJO@HlO@@RKAMPJHCNDJTHFP@ZGNANBRFH@J_fM^ONJNF\\VTDJHDON@XRND\\XRCPVETCLBVKDFJINHRGPRV@\\CLJN@VbXbLVT"],encodeOffsets:[[119561,41684]]}},{type:"Feature",id:"110116",properties:{name:"怀柔区",cp:[116.6377,40.6219],childNum:1},geometry:{type:"Polygon",coordinates:["@@JHTVHXCHPfnDJGHNDJSB[JSBGVSAOH@PMPuDEHHXZN@PHF@ZLJ@LHVYJA\\OFWP]BMtMBSRGV[JeVAPQVIFENMD¡–@^NV\\JH@NNL@NM\\kTQ\\I^FNIpBHGTBFFAZQfKDIXQTLXFXNNVMVHRGpCFLlRLEVBBH`IVO\\G`RDPAXLXBXORHZEHTDLLN@VGTMrQNFPeASKG@GMOAKBYMK@GTUHUXSHMVDNMOUEOZMJML@^KRACMZEZMRQLUHE@OFENPR@DI\\ChMHIDG\\GJMDWHCKGMDCIQCHO_K@GaIJSWWQDaGWJMNCKRsCYGYuJUSaKaW@UIMDK@[QUHOGQJMEILCAUDKFSOUQD[WMC‚Q@WPMGCCIUSE[IMPMN]`e@IEGAQBMHM@YEOSGCIDMIGNOLB@QP@GkP@AI^J@ILEBIbADGEOog@KQQWSekWQQUOFKZLF@PUNmIaHIUeBCTSHENcJa@_IWSaGu`GLSBKJQFOXGDXVQVOBIHcDSJWBEFGTMH[^mLaXcHiKElTRKtFXZ`MHMPCNRDxZˆB\\ICIHK@KŽHbIVFZ@BPnGTGbDXRDJaZKRiGEFSFEJhjFNZFjn"],encodeOffsets:[[119314,41552]]}},{type:"Feature",id:"110111",properties:{name:"房山区",cp:[115.8453,39.7163],childNum:1},geometry:{type:"Polygon",coordinates:["@@h@bl@HRJDZ``TA\\VVD^H`\\pF\\JŒ`JGv@ZO\\GPSTEjPTR`FnEbDTDHEhLFMTK@ETSPULKEI@OVISKSJACEQNQbV˜IXGDIN@dMB[IIBcN]ZHNLP@XOWCFWŠCNRHTpATD@^NVNLED@Rh@jCEF}E[OOHUEW]W@QGGDIQSH_MmFmCUT_K]i@MHCMW—FCF‹E{BMHMPOHKS]CFNGBELDH_@BcAKOACESAOBELaXAROB@FODMEDWJAG[aE@UM@DImEWJMC@OeCA{aE[@{L@MINUCQXKfUJORCHqJBF@TCXWNQX]M[EAJO@@KMBQJIC]EWMCCUBEBFHKDOTMBGNGF]MWDBRDdMDQVyE@LPVHDCP@JVVMTG~HNSH[CmRUvHPHBbA\\PTNRC\\YNJ€PRARPJDDR"],encodeOffsets:[[118343,40770]]}},{type:"Feature",id:"110229",properties:{name:"延庆县",cp:[116.1543,40.5286],childNum:1},geometry:{type:"Polygon",coordinates:["@@^AXOPEB[ZIGU@KKI@YGE@OYMGWFGvCNO@OPGTBHUTA\\ITACIGMIHmCOeDGGWSUIGimYEEMgiFITEFEjHLQbYCIWQaCSHmHAOY@UEaJG@LGLDJ[J‡AwYQCDMNONGY_EWLsSQFkMO[NWAIGaIYL@HMBOKiOQDWEUDMQSF_QIUBWdg@[NaAKQ@M]OQ@WhgLUMMFYQDIRCEUZOOCIOJ[KIUMKL@HIDKVEBM`HJAJSJUdBLGNEdMBMO[BYEWJSNKNaD]PE\\SjOT_RQVEZPpƒNQXfŠNA~lNG`@PNLp¼RFLfbdKbATUh@FSNWjGFZVLFHVA~X¨PPROfFJbNJPLFbENJPrEFNPFRHDDJdENJLVEPBJTVTHGHFRFH@PXP\\ORQHW\\BjWFDERLPPBbB\\E`B\\D\\L`@F]FCnJ^AZL"],encodeOffsets:[[119262,41751]]}},{type:"Feature",id:"110109",properties:{name:"门头沟区",cp:[115.8,39.9957],childNum:1},geometry:{type:"Polygon",coordinates:["@@V@XMnGPY²‰JQNEhH\\AZMPDVTTDZCPiJkHSHCjIdFtEHITCNITQEKUAMCEIKCECABYESKFWAKBEIIHABGDCKCAIHMHALKEI\\CFIBILIJQZS]BBEECS@E@@C]COKI@CABAAEEDMGƒCH]A[M@CJWH—JaUMRFRBDTITLUJ@PFJKLOVST@FSLENgKGFSCaCmF_ESQiOSFOT[HYPu@IH‹_[IoE_[]GUC[USB__CYQI@Gakg@qZeHQNMNV\\FVLPgJAFJPRLCH[XcPELUT[JiV_EELFTADBXRTRLJC@fHXHHbPd`fR@NfT`@TLplHMpCEJHJBVLFŽ@JT‚VnG^KXDXHNVGRLRXFJVdDHSNWLGfEzA"],encodeOffsets:[[118635,41113]]}},{type:"Feature",id:"110114",properties:{name:"昌平区",cp:[116.1777,40.2134],childNum:1},geometry:{type:"Polygon",coordinates:["@@VNLJI\\JPPDYPFVQDCJZRNEVNhKXgR@^P@NLRbB\\Mh@XcVARJE`RTCNFV€XRCjPPLNA@GZKbJJHXB\\MNPjLdGbWnK\\]NGHSFEXATIdCJGPARUWUHCPWRELITAHKv_E@iYCaW_BQ\\Y@QIO@QDCIGZCEMWGFMFAFgHEDOCSqKCCFGAMKEAC@ODGCGs@WH@KQA@EE@CE@GEA@EH@GGUEEJEAYD@JM@@DAA@FHD@FTJEHUC@JUBKCKG@G[CIIQReAYhO@OXGDO@@FF@IHJFCPEBACBIAAKDOABXARHPNEHGbQAAKQFGIAM[C@WHKaGiCEGOA‹HUKCIokSCUSOCYN[BgGMFIR±ŠOZmHWNU@ShbbXDHVXXGJ^lZ@PZ\\Nb@\\FHJAD"], encodeOffsets:[[118750,41232]]}},{type:"Feature",id:"110115",properties:{name:"大兴区",cp:[116.4716,39.6352],childNum:1},geometry:{type:"Polygon",coordinates:["@@F\\E~DFN@BDFEpHFCHBBEGCDCJBHUDSBB@ELCPbF@B\\J@BJVAFJ\\ADKTCBGECFMT@BMN@@FH@DaNBEnvB@FPBATK@FHEFIAKFBFL@@PKBFJHC@FXBRAFCDMPDTOL@JIVFDHH@DDH@BGRFCDLD@N^@@CNA@KNOAEBCECFEGCFGMGFIPMOEJOLBADBBHGG@GCHIECY@INC@DMGS\\AIOZAAEYA@GT@KKMBEETCGMVINFxA@MJADB@FlA@HJA@NND@DFA@DVAZBBOFKH_JA@K^GBC@EFE„G@gAENMXKJigC@IbSJMqGOP£RGSMGE@kbQFDPEFiBSGGSBK]I{CDWCIDOic[C_G@SuSO@EWKCO@MNY@\\uZOPENQD[LKESSKGBKEG@EJGAGHoH¥CqhifeJkX_XFFGHFNEDFPENKHM^IFIVL^S`DVEnNnG`RTCJHH@R^XFXGVPP"],encodeOffsets:[[119042,40704]]}},{type:"Feature",id:"110113",properties:{name:"顺义区",cp:[116.7242,40.1619],childNum:1},geometry:{type:"Polygon",coordinates:["@@EhEBENXHFNYDJHCD@RJP@R[ZARX`DbjZF@bHXT`Jb@dIFMTGDSfAJVbGnJVM@OKELYPERVXRflXTT@NIfC\\NJRhCVEHFJXNT^DTeZEHYCOhuAMJELOdAVPTMOWBWNMNEJgl]@WGUFIC[T{EEDEHGCIGMI@SECUQI[D{A{GQESPUH]CsiMCmHUeoHENcAaDGCMDGMQCACCBaCGLMAHB@DIEQLOAAEEJ@CW@CDINGAAGKQOCgV@LG@BEGDKNeREFBNCFIDOPKD[@YRW@GFWDAFE@EHDDrLDTCPGF","@@KrJEH[\\B@FF@CHFBHUN‹AJKADGECBCMAG^E@EbI@BEGP"],encodeOffsets:[[119283,41084],[119377,41046]]}},{type:"Feature",id:"110117",properties:{name:"平谷区",cp:[117.1706,40.2052],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZJZRafFLjn€VGNJ@LLBdXX\\T^EDMJ@”nZKLBjPPJ@HbA\\H`DbERHLCFK^BZaFWXQLAGMHa\\OLO@SBIpBdCLƒVQfElO@GSAKEDQTC@GEBKG@ORIJBDAPDFA@CaOq@GGQAAEJK@KMUGAAGEAa@MGMBGCGSIIW@WSUCMDOJeWOM@IUF{WMWaDIMgIoRoCOKeEOEAG_I[cg@wLIFENQFDVTFJ@HNDJGHCFFFS|D\\EJHV@Xk^IhMFMNAXPX"],encodeOffsets:[[119748,41190]]}},{type:"Feature",id:"110112",properties:{name:"通州区",cp:[116.7297,39.8131],childNum:1},geometry:{type:"Polygon",coordinates:["@@FDAJTGDNDCTDDEDBBE@DT@@EHCDGJ@EIZ@@FDBR@ATFBBVFFE@@HNA\\VE@CLIFNJFNJBCP]A@LJFA@HJEDD\\C@DBCHLAEPF@@DH@APHAERDF\\GIxDTM@CFLBBFJ@CNUPMHECGDBF]BMFPDLRBHHBJMDCX@@DFIBFPBRKJF@CGANBHKbDDABDRDHNNCHDbCdBFMpGHiOYMefKJMC}HWAUNW\\NNBNA„kNU|]HMTMN@MZBLFFF@RIRUT‘BMFIEGaAGGAOIIUGTSFcYKS@MSLYPKRUBU]EWDOI]CKGASgW@MTWKIMCS@uMAKKADMECGAKVUTSDy@IjWLMNBF@hƒHEF@FAD]H@LIBG`ELAPYAUB@CEB@CMC@MIB@GkB@ECAIB@NwBMEUJHNSDFFNALLS@@HZBBFYBJP[BHTCND@JMZ@FDGJHDH@GHAABCKAIPPFONEJNHEHHDEFFDADBFMP@L"],encodeOffsets:[[119329,40782]]}},{type:"Feature",id:"110105",properties:{name:"朝阳区",cp:[116.4977,39.949],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@bFGHBHFBFIVFHHG@@FFB@HDFF@@FRB@LXGt@DHCH@PBDLFBNF@BEXCHEX@ZQ\\@LCPOJCDEAMFEfQLMHCAFH@@KhUNE^AAEHCFDNGVODMI@AEKADEN@CSJw[HCEFQGBBOG@@CE@FOKBDGCAD@C[FCGIB@IE@K^BDOIAEMMIJEDKF@[UMB@GF@EEAUEABSQ@CA@EY@FJI@CHGD@FS@@CAFCACFSCCDCMSHBIECMB@D]@@MKCDCQEAHG@CCG@CGUEIJK@SPOCCNEDQBDNDB@DJCDLFCBBALJB@BVGPBKVO@KHCCCD@FE@BNA@FNCTDDJA@FGB@NBDW@CL@hT@@ZHHQDDDAFSAANBC@HG@EFS@@DE@@PCB@Ue@CADNJB@FCBWA@LI^ix@FIHrH"],["@@HUN‹AJKADGECBCMAG^E@EbI@BEGPKrJEH[\\B@FF@CHFB"]],encodeOffsets:[[[119169,40992]],[[119398,41063]]]}},{type:"Feature",id:"110108",properties:{name:"海淀区",cp:[116.2202,40.0239],childNum:1},geometry:{type:"Polygon",coordinates:["@@plDJVLŒGPBFHjDbHGL@X\\DBNHJREBLRBHaFGŽMGOBQAWPBLCBBAJBDFADOIEJGE@@EP@HCPWP@ZgfBRQJJ\\D@HLHLDVA@IVDFGSI@EGC@EBB@CN@@IZCAGHGaEqGJG@EjwJ]@K@GSA@e_I@NE@CA@Kg@KC@ENCFƒAKQAW@WIMK@V‹@I@@F@^EDFB@HcIaDYCBRRDCHD@EFLN@FE@CJUPEJOJMTBPEDIFCMIAKNOGMRFJNDVBFLSRMJSDGJsFcEiJGDGTIlOjYD"],encodeOffsets:[[118834,41050]]}},{type:"Feature",id:"110106",properties:{name:"丰台区",cp:[116.2683,39.8309],childNum:1},geometry:{type:"Polygon",coordinates:["@@hMN@NFTQCFRCBJFA@HJ@@HJ@HJ\\FTACDŒ@@UNLXJX@@MA@@IECAQlDFEHBDI~D@GXCFMVDFCH@@NF@ANJC@FnAB@AMF@@EDCDDLGP@LUOAUH@AIABKAAEDCKID@CCACMWA@EGDEILA@OK@AELEJBFEEGL@BSOA@EuAFmMACbG@@EM@ANS@ENFDAHSDCL[BEIUBAII@A[E@OaKD@FAACTGVIACDHDAFGAEDoGEFACM@i€g@@QFCMKMU@]SCoBGSMQ‰DEXXDWPO@MKYGM^AdJJA\\cNB\\G^„DNHFCBFABDBJ@PL^D@DF@T@FDAF^A"],encodeOffsets:[[118958,40846]]}},{type:"Feature",id:"110107",properties:{name:"石景山区",cp:[116.1887,39.9346],childNum:1},geometry:{type:"Polygon",coordinates:["@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD"],encodeOffsets:[[118940,40953]]}},{type:"Feature",id:"110102",properties:{name:"西城区",cp:[116.3631,39.9353],childNum:1},geometry:{type:"Polygon",coordinates:["@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLE„MD@FLDh@@LDBF@@M`J@fTB@H"],encodeOffsets:[[119175,40932]]}},{type:"Feature",id:"110101",properties:{name:"东城区",cp:[116.418,39.9367],childNum:1},geometry:{type:"Polygon",coordinates:["@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@A‘C@PG@C^TBAJEB@TADC^IB@J"],encodeOffsets:[[119182,40921]]}},{type:"Feature",id:"110104",properties:{name:"宣武区",cp:[116.3603,39.8852],childNum:1},geometry:{type:"Polygon",coordinates:["@@RBX@RFFCŽBFU@aK@WA}CCJGAEFkCBRFD@JB@@N"],encodeOffsets:[[119118,40855]]}},{type:"Feature",id:"110103",properties:{name:"崇文区",cp:[116.4166,39.8811],childNum:1},geometry:{type:"Polygon",coordinates:["@@XBL@@bEV’D@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H"],encodeOffsets:[[119175,40829]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/china_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"xin_jiang",properties:{name:"新疆",cp:[84.9023,41.748],childNum:18},geometry:{type:"Polygon",coordinates:["@@@›ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړ›υࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ—݇ȂóƩƧ@ѵȂυœƥŌਗ—॥ɛóʵѵƧѹ˜݇̍ࢯ˜əɞυ˜ρͩ̏óਙƨƧŋôōóš̍ͩóʵן›óŋړͪƧѶ@ɜԭ—ԫƦɛȄ̍›ɝȄöςƩȂ̏œñȀ̏œƩóóŎə˜@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝœóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜ˜óƨ̒Ŏ̑߼@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨ߼˜ôƧƧó̐ƥóŏѺǿƦȁφƧς˜ƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ—@ɝƨŋ̒օςʵôƧ"],encodeOffsets:[[98730,43786]]}},{type:"Feature",id:"xi_zang",properties:{name:"西藏",cp:[88.7695,31.6846],childNum:7},geometry:{type:"Polygon",coordinates:["@@ôŌנœôʶ̎ͪô™óŎƨŌਚƧ̐ôςͪφ—ɚɝࢰ—݈̎Ѻ—Ѷƨôʶ०ɜਘ˜Ʀŋφ›Ѷȁ̍—ôŏɚŋ@̑ə—@ŏò̍ɜ›óƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦœôŏô—@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒—óʶѶôôО̒›ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥœ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧ›ѵӏ@ɛõŏɛȄôӒƧŌѵǿɝ˜Ƨŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óœѵó̑ͪࢯОóɜן˜Ƨ̏ƥȄ߻̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞ˜ôƪ"],encodeOffsets:[[80911,35146]]}},{type:"Feature",id:"nei_meng_gu",properties:{name:"内蒙古",cp:[117.5977,44.3408],childNum:12},geometry:{type:"Polygon",coordinates:["@@ኊȁ૊ö߼ƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@߼ʶԮӒ߼̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।œѶɚöɞɜʴڔôôȂ̎—ѺȀς—ƨ˜ƪóԪ—ɜôɛОਕڔԭ˜ѵ̍ѹȂԫ›ɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ˜̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏›@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ—̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@š@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ›̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛ›ƥƧ̑óρŐ@Ƨ̏˜ɝəɛ˜߻ͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪœ@ʴƩ—ƧƦôƨɛȄə›Ƨŋυ›óͩѵ@ɝǿóŌן̍ɛ˜óО̍œ̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑˜ρȁυô̍օѹœóȃə™@ȂσʵѷƪòƩ̍—ôó߻ۯôʳƧ™óšõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ"],encodeOffsets:[[99540,43830]]}},{type:"Feature",id:"qing_hai",properties:{name:"青海",cp:[96.2402,35.4199],childNum:8},geometry:{type:"Polygon",coordinates:["@@ƨ@ôƪ݈ȁƪ˜@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶ›ƪȁςœɜͩφ˜ςŋɞôѶɛƨŌɞ—@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦôœ̒ȁɜ›ςͩ̒œɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞœôƧƦ@ñȃòñƥóυôôѹѵ—@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑›ôʵɞƧ̑ѵôƩɞƧ̑œóНѵóôʵ̑˜ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨó˜óŐƥ›ƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛœñ̎@Őɚ˜@̒əŌóŐ̎˜"],encodeOffsets:[[91890,36945]]}},{type:"Feature",id:"si_chuan",properties:{name:"四川",cp:[102.9199,30.1904],childNum:21},geometry:{type:"Polygon",coordinates:["@@ô˜ôŋó̑Ԯ̒ɛОמͪƨōöͫ߼ƥôȃƨóóñôƧóƧôōڔŏƨŐ@Ŏô˜òƥѺŎ@ōɜóנ˜ôǿô›ƦôԮ̍ɜôɚ›Ƨ—ñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚ—ôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎə—óɜƧôƩƧρ˜óôôô@ŎƧƨƨƪѹ˜ó̍̍Ʃ@̏ѹНôޟ̍Ʃóƪυɝɛ—əƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏—õóɛͨƨȂѵОɛʵ@̏ƩŐó߼Ƨల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒œóƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶ˜óѺφóƦôñòòȄ"],encodeOffsets:[[104220,34336]]}},{type:"Feature",id:"hei_long_jiang",properties:{name:"黑龙江",cp:[128.1445,48.5156],childNum:13},geometry:{type:"Polygon",coordinates:["@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨ—óȁφӑóóƨ˜óǿ̎̑ôНɞ—ó̑ɜə߼›̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశ˜ôȂςƨφ@נɞ݈˜̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧ›ƩͩƧó߻ʸ̍ʷѹƥɞڕõ̍öɝυ—̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍›̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@™óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘς˜ñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ"],encodeOffsets:[[124380,54630]]}},{type:"Feature",id:"gan_su",properties:{name:"甘肃",cp:[95.7129,40.166],childNum:14},geometry:{type:"Polygon",coordinates:["@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎›ôƥƪóõ›ö@ô—ƨ˜ôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥ୾ӑó̑óŋôʵóɛړ@@ƩöóƩóρ—ɛƨ̑@óʷƥƥ̎ɛƧ›ôōƧǿôͩѵôɝȃɞȁõƧρóó—@ōƧŏړŐóŎôƨóƨôòƧôóȄ߻ƦõͬƧŎםͩɜНԭ̑ô̒óŌó—ƥ@óƨɝ›σԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑›ρͪɛœ̑Ȃó›ƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝ˜ƧŋѵɜɝóρŌυ—ɛͪρ›ƩȂѵœ@Ȁڕó@ȄɜʶφࡔڔœƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ"],encodeOffsets:[[98730,43740]]}},{type:"Feature",id:"yun_nan",properties:{name:"云南",cp:[101.8652,25.1807],childNum:16},geometry:{type:"Polygon",coordinates:["@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ›@ʶƨŐô߻ƪŏ@̐ɜʶѶНƧȁɜͧöô̐˜ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜ˜φɞôƩ̎ƪóޠѺО@̐̎ƪô̎Ѻ—ƧƩƨƧ@ōóóôóς—ƪƨƨóôɛó̑ԭ—ƥŌɛǿɝƨɛͩô›@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞ—ƨ̑ɜ—òôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υ—óŌƥʳɚӑóНƥô̑›óӒѵʵѹœƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨס›ρȁƧœƨȂóʶó@@ʴƨôôφ̎Ŏ@Ȁƨ—ƪɚƨœóƨôôôςóޤƧŌƩŋƧԪ"],encodeOffsets:[[100530,28800]]}},{type:"Feature",id:"guang_xi",properties:{name:"广西",cp:[108.2813,23.6426],childNum:14},geometry:{type:"Polygon",coordinates:["@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφ›óȄ̎›ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨ›ρ۫ô›ɚƨƨНƪŐ̎›ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍›óƧó—@ȁƩ˜ρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړœ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛ˜Ƨ̒ɝ˜óōƥͪ"],encodeOffsets:[[107011,25335]]}},{type:"Feature",id:"hu_nan",properties:{name:"湖南",cp:[111.5332,27.3779],childNum:14},geometry:{type:"Polygon",coordinates:["@@@քɜОƨ@öŐמóƪôƩɚ̒Ő߼ȁςͩɜòƪ—ɜȀò—ñɝò—Ѻͪ@ŏƨŋóɝôǿƨ™ɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦ›óͩɜ—ɛóñԭɛōυȂ̍ƧƦō@ɛƥ—ɛȀ̑œóʷóō̍œƩŏƧОəƧóœς۬Ƨœ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧ˜ƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ"],encodeOffsets:[[111870,29161]]}},{type:"Feature",id:"shan_xi_1",properties:{name:"陕西",cp:[109.5996,35.6396],childNum:10},geometry:{type:"Polygon",coordinates:["@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨœ̍ɜƦƦôʸ̒@ɜƧς˜ƪôõô@ƪڔ@ôɜóʶôŌô̒୽Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶô™ƨšóʴ߼۰óô̎˜ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəœɛóԭ̎ƥóóœóȀן—ɛô@ŎѹōñƦ"],encodeOffsets:[[108001,33705]]}},{type:"Feature",id:"guang_dong",properties:{name:"广东",cp:[113.4668,22.8076],childNum:21},geometry:{type:"Polygon",coordinates:["@@@Ȃô˜ôƨ̎œ@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒›ɜǿƦ˜@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧ߼ɜςȃñȄƦŎ̒ōôòƨəƨ˜ɚН@əƨ̏ƪʵυŌəɛóəԭŏəœóŏѹœρʵɝƦ̏™ƥʳѶ›öō̑óóŋρȀυƧƥɛѹōƧôן—ɛŏѵ@óŋôʵɝ›ƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@","@@X¯aWĀ„@l"],encodeOffsets:[[112411,21916],[116325,22697]]}},{type:"Feature",id:"ji_lin",properties:{name:"吉林",cp:[126.4746,43.5938],childNum:9},geometry:{type:"Polygon",coordinates:["@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎œôȂѺôòŌôƧ̒Őƨ̏̎ȁφ˜@ŋƩͩםȃƨ—@ȁ̑ʶ@Ōóôɛœƥѹ̑—συ݇@ɜρƧȃࢯƨôœəȂɛōƩɛ̏υρóõœƪʴυφ@ʶôŌóœρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩœôɚφȁƦôɜƧôʶφȄ"],encodeOffsets:[[126181,47341]]}},{type:"Feature",id:"he_bei",properties:{name:"河北",cp:[115.4004,37.9688],childNum:11},geometry:{type:"MultiPolygon",coordinates:[["@@Ʃ̒̏ŌѺ̒Ʃ˜óȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎›ôНɜ—נ̎ôŋɞȀѶ@ôͪφœƨŌɚœɜȃóƧƨƥƪ˜@ʳƩ›ɞρ݈@υНφʵɜ˜ƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@œƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυœ̍̎ɛŋôōɝ@óƧ̍›ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóšॡȄɛʶɜȀ@ɞςѶƧœƥςɛŐ@ɚɜɜ@Ŏôôςœƪς"],["@@õə@Ƨɛ˜@ŐóƦφô"]],encodeOffsets:[[[117271,40455]],[[120061,41040]]]}},{type:"Feature",id:"hu_bei",properties:{name:"湖北",cp:[112.2363,31.1572],childNum:17},geometry:{type:"Polygon",coordinates:["@@ñȄυƦöŐƩ˜óנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ—̍ʵƧšóȀôɞƧŌ@Őѹͩñ˜òɞñ˜ɛǿƩ˜ɛñρͪ߻Ȃ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó›̑ѺƧ›ôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎"],encodeOffsets:[[112860,31905]]}},{type:"Feature",id:"gui_zhou",properties:{name:"贵州",cp:[106.6113,26.9385],childNum:9},geometry:{type:"Polygon",coordinates:["@@ɜȀƦŋԮ˜ô̒ɚ˜ôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦœóȂô@ôŏ@ōô—ƨʶѸô@ʶƨ˜ɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨ—ôɝƧʵ̍œôȃυœ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóœɜͪɞƧ"],encodeOffsets:[[106651,27901]]}},{type:"Feature",id:"shan_dong",properties:{name:"山东",cp:[118.7402,36.4307],childNum:17},geometry:{type:"Polygon",coordinates:["@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨ߻ӑɜНԩ˜óô̑óƧʳə™óɛƧ@õȀƧœ̍ȃɛŐóŏυО̍—óɝƩ—ԩ@ƧɚԫȄɚʶƨ˜ɞʶԪ̐ړɛƪ̒"],encodeOffsets:[[118261,37036]]}},{type:"Feature",id:"jiang_xi",properties:{name:"江西",cp:[116.0156,27.29],childNum:11},geometry:{type:"Polygon",coordinates:["@@ƧȄôɚəȄ̎ʶԬ˜ԮͪςóƨŐƪ›τɞƦōƥƧ@ŏςôóŐôô̒ʷѶ—ƪƩƩǿ@ō̒ɛôυ@—Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧ›ôʳƥōòȃρȄ߻ɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛ˜ôͪƥœ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ"],encodeOffsets:[[117e3,29025]]}},{type:"Feature",id:"he_nan",properties:{name:"河南",cp:[113.4668,33.8818],childNum:17},geometry:{type:"Polygon",coordinates:["@@φ˜̎ƪ̐˜ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃô™ƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧ—əʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ—@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐"],encodeOffsets:[[113040,35416]]}},{type:"Feature",id:"liao_ning",properties:{name:"辽宁",cp:[122.3438,41.0889],childNum:14},geometry:{type:"Polygon",coordinates:["@@ƨʴƧôôӔƨô̎ƩɞН̎ͪ߼ͪɜ—ɞɚ̐—@ƨςŏ̒ôƦƨɜœô̎ƪôςǿƨͩɞȀƨ@@ɛςփô›óŋ@ʵφυƩʳö›॥փρѹס@əɛ@ͩࢯ@ѹʵρ—ƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛ—υʶφО"],encodeOffsets:[[122131,42301]]}},{type:"Feature",id:"shan_xi_2",properties:{name:"山西",cp:[112.4121,37.6611],childNum:11},geometry:{type:"Polygon",coordinates:["@@ɚѺñŌɚšôȄѺ›̎ֆφóςȂ̒—ɜƨɚ@@Ȁƨŋôȃƪ—ѹ̑̐ŋƪ̑Ʃρρ›óó@ōɛɛ@əɜŏƦρƨ›ρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏—̍Ʃυ—Ƨô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ"],encodeOffsets:[[113581,39645]]}},{type:"Feature",id:"an_hui",properties:{name:"安徽",cp:[117.2461,32.0361],childNum:17},geometry:{type:"Polygon",coordinates:["@@ó̎̑Ő@ƨƪ˜Ѷǿɜ̑φ—Ʀʵ̐˜Ƨѵôóƪôôυς—ƨȂɞŏ@̍ԫôò̑ƥ—óȃѶͩƧƥôŏѺœôŏƦ—@›ƥͩƧ—ôȁυó@̑ƧɛѵʵƩƪѵ˜̑ʸóóôŏρó@ŐƦƨƥŎσɝƩœ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτ˜ö̒ƨŌ@ɞôŌ̎óƨəφȂ"],encodeOffsets:[[119431,34741]]}},{type:"Feature",id:"fu_jian",properties:{name:"福建",cp:[118.3008,25.9277],childNum:9},geometry:{type:"Polygon",coordinates:["@@̎›óȁƨӑ̒—̎ɚƨͩφŐƨɝ̎ŋóŏρ—@ōƨ›òʳəóƨō̏˜õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑—Ƨ̐@ɚəОƧ—Ƨɚóñ̑ŎóʴƨœƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ"],encodeOffsets:[[121321,28981]]}},{type:"Feature",id:"zhe_jiang",properties:{name:"浙江",cp:[120.498,29.0918],childNum:11},geometry:{type:"Polygon",coordinates:["@@Ѷʶƨɜ@̒φôóȂƨ˜Ʀͪ@œ̐˜Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑›@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑˜ƧӒôȂ̍œ@˜óφ̑ɜ@ŎƪȀ"],encodeOffsets:[[121051,30105]]}},{type:"Feature",id:"jiang_su",properties:{name:"江苏",cp:[120.0586,32.915],childNum:13},geometry:{type:"Polygon",coordinates:["@@ôɞ̎˜φНôŐɜŏ̎Ȅƨ›öǿƨ@ôɜɚšƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧ›ɝρσȁѷ̎̏—ƥ˜óŐѹ›óŐƨƦѵͪôȄƦ˜ñ̒Ԭó@̎ɝŐƧȁρ˜óφƩóóôƨѶ̏—ƥʶυ˜ɛ̒ѵȀ"],encodeOffsets:[[119161,35460]]}},{type:"Feature",id:"chong_qing",properties:{name:"重庆",cp:[107.7539,30.1904],childNum:40},geometry:{type:"Polygon",coordinates:["@@əȂòɜƨ˜ѺɛƦȁ̐@ƪ—õŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨœ̒ѹôœƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ—@ʵѷóƧʵó˜@ŎóŐó@ôȁƥ›ó̒υôóʶə˜ƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ"],encodeOffsets:[[111150,32446]]}},{type:"Feature",id:"ning_xia",properties:{name:"宁夏",cp:[105.9961,37.3096],childNum:5},geometry:{type:"Polygon",coordinates:["@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧ—ó˜ôœó@ƩôóƦ̍œóȀƨŎɛӒôŐυͪɛ@@Ȁə@"],encodeOffsets:[[106831,38340]]}},{type:"Feature",id:"hai_nan",properties:{name:"海南",cp:[109.9512,19.2041],childNum:18},geometry:{type:"Polygon",coordinates:["@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦ˜ԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ"],encodeOffsets:[[111240,19846]]}},{type:"Feature",id:"tai_wan",properties:{name:"台湾",cp:[121.0254,23.5986],childNum:1},geometry:{type:"Polygon",coordinates:["@@ô—ƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ"],encodeOffsets:[[124831,25650]]}},{type:"Feature",id:"bei_jing",properties:{name:"北京",cp:[116.4551,40.2539],childNum:19},geometry:{type:"Polygon",coordinates:["@@óóó›υóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎œôƨɞ@óŎɜŌ̎̍φ›Ƨŋƨʵ"],encodeOffsets:[[120241,41176]]}},{type:"Feature",id:"tian_jin",properties:{name:"天津",cp:[117.4219,39.4189],childNum:18},geometry:{type:"Polygon",coordinates:["@@ôôɜ—@ƨöɚôœôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@›ƧóəН̏óѷɜ@ŎƦƨóО"],encodeOffsets:[[119610,40545]]}},{type:"Feature",id:"shang_hai",properties:{name:"上海",cp:[121.4648,31.2891],childNum:19},geometry:{type:"Polygon",coordinates:["@@ɞςƨœɛȀôŐڔɛóυô̍ןŏ̑̒"],encodeOffsets:[[123840,31771]]}},{type:"Feature",id:"xiang_gang",properties:{name:"香港",cp:[114.2578,22.3242],childNum:1},geometry:{type:"Polygon",coordinates:["@@óɛƩ@ρ@óœôȀɚŎƨ@ö@@ōƨ@"],encodeOffsets:[[117361,22950]]}},{type:"Feature",id:"ao_men",properties:{name:"澳门",cp:[113.5547,22.1484],childNum:1},geometry:{type:"Polygon",coordinates:["@@X¯aWĀ„@l"],encodeOffsets:[[116325,22697]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/chong_qing_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"500242",properties:{name:"酉阳土家族苗族自治县",cp:[108.8196,28.8666],childNum:1},geometry:{type:"Polygon",coordinates:["@@XJ°œlJX@lbl@XbV@VLnJlxnbšƒUU@IVK@lVIVwnJlU@n@J@L@Jn@l_nWVLVln@@blLšmV@@xœÔ‚`nœ™xV‚ÈLlx„LVxVVšƒV_U»VWn_m¥XwVmnX°ƒlmUUVwÞaVƒk@a@mmIUa@™mwk@™ƒm@@U¯a@UV@@K™@ykkmwkV@kU@ƒÑƒVkKWLÅamaUm@kyU@WkU@Ua™IUašVaUUmUUa@aVLXKWa¯UUbmJXnWnX`l@@xkzWÆ@V„LU¦‚x@b@JkIkJ@LmbUamJwm@óxƒnk@V„@x„ŽVnUVmVUVŽUbVlUbkXWŽ"],encodeOffsets:[[110914,29695]]}},{type:"Feature",id:"500236",properties:{name:"奉节县",cp:[109.3909,30.9265],childNum:1},geometry:{type:"Polygon",coordinates:["@@WVXb‚UnK@x@b‚²kxmKkl¯_ƒVV°™VU@bnKVVV@@nkŽ@n›bn‚@š°@VLČUš@°WV@V™nU@InKVl@nU„b˜KnX„WlknLlKUwnalLša„VlUXmWk@UU@UWWIUyķ¹XaWW@X™ƒKUIVm„U@W@UVU@KV@n»VkUkÇmUmVIUmULUbm@ƒwUaƒKkkm¯ÑUL@bWVnx@VmxUI@„klmkkK@aƒK@IlJ@I¯ƒk@mak@mnkJVL@bV@Ub„„W`UUUV™I@VƒU@VVbUJVLUVVbUX„VVxk¦VJUnVxnVVUšJV@Ubl@@bXV@L"],encodeOffsets:[[111781,31658]]}},{type:"Feature",id:"500238",properties:{name:"巫溪县",cp:[109.3359,31.4813],childNum:1},geometry:{type:"Polygon",coordinates:["@@nLWbX‚VLVU„V@KšIVl@b„@lbšU„VnU@JÆU@V@n°KĢUl@VbÞKšVš@„_„V‚KXU‚U@KXƒ@wlkkU@mWKUU@UôJ@XV@œaVmÞIVaVLƒƒ@»kmƒ@ƒUkL™U@aU@WWƒLUUU™™KkbƒwWa@KU@kaƒXmW—LƒamVk@UmL@JmVUšU@¯X™@ċVUK¯@ÅnWK™LkKULWK@UXK@wW@™LkV@bVLƒlXn›`¯xU„°LnŽlV@n°Lnl"],encodeOffsets:[[111488,32361]]}},{type:"Feature",id:"500234",properties:{name:"开县",cp:[108.4131,31.2561],childNum:1},geometry:{type:"Polygon",coordinates:["@@n@na‚I„wš@@VVK„LVbVxnVÆUnanKWXamKmk¯K@mkUm¯KVƒ°w@Wm@UIUUlKUU@a¯KWanwmUXamKkUWUnU@KƒkUwWKXaWLUWkImaUUUƒƒKka±k@lƒ¯w™wmbUƒ™ƒkXm@UJkIW‚XXƒbƒmƒ„UJ™XUV@°šKlšlVXV@xmbnV@blV@VšœU`UL@V™a@bULlb°VXbܚ@V@bƒL@J„xnLVb@lVb@V@@z˜bXWšX„KVLV‚š@@bUVVL@b„„lVna@ll@„zl@@J"],encodeOffsets:[[111150,32434]]}},{type:"Feature",id:"500243",properties:{name:"彭水苗族土家族自治县",cp:[108.2043,29.3994],childNum:1},geometry:{type:"Polygon",coordinates:["@@„Jlb@nVV@bXb@ÆlL„Ul`nVKU¼VxkbW„nlUxlXX‚@°°WnnJ@VUn@J„k°L@VlV@nUJ„x@bVVVz@VnLla„KnalVlIUŽ„¼@nV@@anKUwVal@UlJœƒlI@akU@UWXKVI‚¯Uak@@KmkXWÜkXWykIWwXw@laXamkVUUym_XmlkkmmakwmIUKU@Wak@kaW@kI¯›WIk¦VŽƒUUƒmaUV@XkVUV±aUb¯b¯¥m@@ImJ—@mƒmL@kUKUkkJƒbV¦"],encodeOffsets:[[110408,29729]]}},{type:"Feature",id:"500235",properties:{name:"云阳县",cp:[108.8306,31.0089],childNum:1},geometry:{type:"Polygon",coordinates:["@@lb„LV„VVnblJVXXKWbXLVx„l@LmVXVVl‚nLWbnVmxXb°L@bVVkLVVVJn@@X‚‚œ_Wm„kUK@alUšKX@@xWL@VXLVKlLšKXLÆm@™mœa@ml@mU@UUmL@aVšUU¯„U°`lknLlw±@a@wmLVWaXU@KWU@ak@VaU@™IUVmUUwVmUIl¥UwƒUVWUaVUUKVIUa@UUUUJƒUUm™kƒ„nl@„@VWV@L¯aUb™Ulxƒ@@b@VULUx@VUxVV™U@bU@mxU„U@mUVŽklkkƒ@WxknlxK@amLƒKU„K"],encodeOffsets:[[111016,31742]]}},{type:"Feature",id:"500101",properties:{name:"万州区",cp:[108.3911,30.6958],childNum:1},geometry:{type:"Polygon",coordinates:["@@ĸĊVI„ƒ„n„aWWXlJVIn@lWš„V„našx°xk„l@²Ž‚LVƒ„LnK@b‚LkwlmXw„@lllkUnVV@VƒnwV@@ašVUUVw@UVwVK@U@a„@kwšVVa°b@KXU@U@ƒmk„ƒÇсaml™kUVmn@VULU˜m@kUVkUaƒwUWm@Uw¯„mKUUmVUUULUKU„W@XbWVkaWwkUU™ƒ™k@maUbmbVlk¦ƒxUVUIWVU„kJVVkL@UmJ™UUVU@lLUVU„lx„@@VbƒJ™U™L¯¤@Vƒ„"],encodeOffsets:[[110464,31551]]}},{type:"Feature",id:"500229",properties:{name:"城口县",cp:[108.7756,31.9098],childNum:1},geometry:{type:"Polygon",coordinates:["@@VK@w¯L@m@UÅV@ImVƒU™Vkaƒ@@aUk™J@LƒUUVUKmLmbÅVmUUwUaƒKUL@U™@ƒxJmbm@nVJ@X@VkV‚n™lƒLXx™@ƒb@bUVƒLU`UnƒbU@@ŽmVVX@JX@VLVVšklV—„‚`@bUL@V„LVKn@‚U@„UJkn@lmLmK@X@Jn@mb„nÞWVXnJ‚k„KČÑÆ@VK@knaÜmXlUČW°kôÇÆ@a@yÞ_VmƒUnU@K"],encodeOffsets:[[111893,32513]]}},{type:"Feature",id:"500116",properties:{name:"江津区",cp:[106.2158,28.9874],childNum:1},geometry:{type:"Polygon",coordinates:["@@„InWUUlU@LVašlX@°²lÒXxlK@Ul@@Un@UaVJ@I@W@UƒUUVUwVIUKUa‚UUVwn@Üx@XUlnn‚bœJ@¥VklKUUlk@ynU@kVƒUUVWnI@¥V£VWVIUKU@UVƒa@n@Vm@@nlUaVkUwƒJ@blLkLW@XWmXkmmLn™@m@U@UVm@™„UVUUlakUVa„ƒVkV@@wnaWUk@VwkƒlmVIkUUxmJ@U„™@KƒIkx±V@IUm@K@IUKkbWKUbn„m„@bmVnbmb@xkxUJ@ULW`@bX@WVXL@Vƒš¯„mk¯@UJ@VmLUaWnX@WJ@nkKkxW@UIV@@KkImmkK@UW@XaWIU@U‚ƒIkbWb„xXŽlLVbnV@bWlX@VxVLnl@nÆÞVÜ"],encodeOffsets:[[108585,30032]]}},{type:"Feature",id:"500240",properties:{name:"石柱土家族自治县",cp:[108.2813,30.1025],childNum:1},geometry:{type:"Polygon",coordinates:["@@„š@kl@š¼UbmVXJ@bV@nxVIVJULVVk@@LWbnJVU@bVbUJ@blLXnWV—@mbnV‚@V„„bn@VJVLnaVanbl@„šVšlVXxlbXUWaX@VƒUUVwUUVm@I@WmI@a„mlLœ™lK@alwnUV@kóVaƒÝk@UlbVK@™VU»VUUVWUƒ@U`ULkwm@@KmU@knKƒ»VkJkUmbƒLkbmK@UUyUU@aƒwm@@XXJ@VVLVVUbVnUJVX@K„„k`WXXJWXUbmW@bkL™Um`Xnƒb@JVL@LU@™°VVXKVnUxVLUbmJ"],encodeOffsets:[[110588,30769]]}},{type:"Feature",id:"500237",properties:{name:"巫山县",cp:[109.8853,31.1188],childNum:1},geometry:{type:"Polygon",coordinates:["@@kVƒU™bkKmbVxkLmKkllbV@@LXb„xlašLVšVV„KXXV@@bšVlK„V„@ln@¼°KXa„U@Ulw°JXalIUa„ÝWXW@kVU@ƒVUVWUUUamUw@aVamwn@VUUƒlLXWm£@wÇĉkKklmLUÒ¯ƒWn™@ğ±kwmaWm¼U@@LUV@V@XƒVUnVJ„LWš@‚XXWbĸºVzXJVXV@@VXlWn"],encodeOffsets:[[112399,31917]]}},{type:"Feature",id:"500102",properties:{name:"涪陵区",cp:[107.3364,29.6796],childNum:1},geometry:{type:"Polygon",coordinates:["@@nèVblĖVVnLšŽ„@šx‚V„n@nšJ@L„UVVX@lbUJV@@nn@VVVK@z„˜V@nzVJVUlmX@@_VVVbnaVal@@knW@wnaƒVK@aVI„J@£kUVW@‚wXUVJ„amƒ@Ikƒƒƒƒ_X¥ƒ@WwkKkwmŽ™šƒkUxƒnÅmm¥™WV@Um@UlVL@JU@@Xƒ@UVkKVk™KVk™Kkb@bmJVXU„VVUbU@@`W_UV¯b"],encodeOffsets:[[109508,30207]]}},{type:"Feature",id:"500230",properties:{name:"丰都县",cp:[107.8418,29.9048],childNum:1},geometry:{type:"Polygon",coordinates:["@@Þè@XUK@LlV@blbUJ@„„V@bnV‚@VVVXU@ƒlbXal@VXnKV@maXUރ@amk@aVKXV‚anbš£°mnIVaUKVwUmWLUUš¯V@@KUK@I„aWmn_šVlK@anXVaXWWIXWl_ƒƒ@LUWVIUmVaUUUK@UWI@Wn@VI@mkU@U¯Kƒl@ImVÅLƒwU¤óbUU@wWXkmm@LU@@VUIWVUL@JUnƒaƒx@Jn„ƒbUIWVx@ŽUXlV@¤ƒIUJ@bUL„Žmb@xmX@lk@UbmbUaUU@`W@kn"],encodeOffsets:[[110048,30713]]}},{type:"Feature",id:"500232",properties:{name:"武隆县",cp:[107.655,29.35],childNum:1},geometry:{type:"Polygon",coordinates:["@@l„„w„bVm@IVKXUVJ@UV@@KnnWlX@xVVôaV£„xÆKnUVm@UmIXm¯¯@WkWVwmkXƒlaUwV»ULmk_ƒVkK@ÅWa@aUU@mkaƒIƒb@‚n¼ƒnm‚_@mmK@UƒLUVVmI@aUJ@XWJ@U`UIkm±kk@@lULmUmKUnVšnlUVmI@VkVlx™bkIƒVmLUxkKUŽ‚Xš‚n¦Æn„mVw„lš™nlxlLXx„@W¦„`„„"],encodeOffsets:[[110262,30291]]}},{type:"Feature",id:"500119",properties:{name:"南川区",cp:[107.1716,29.1302],childNum:1},geometry:{type:"Polygon",coordinates:["@@VšUbVJVUn@VLX@WVXVVI@VUVWxU@mš@ĊX@@¼V°aVUX`@_V@VaUUVƒUWnI@alašLUlšLUllLVU„@@WV@@IUKVkn@@VlLVwnK„UlJšakwlU@UnJVUmkU™VmXa@wVK@UUw™@VƒVI@akƒ@alInwlKXUmaUW@wWLk™™KVak_ÇaUƒƒV@šXbƒLVxUlWIk@UK@V™@ƒkU@VbUVUlVnƒLUV@lVXmxkV@L@V@Vk@WbUwmL@JUI@xVxkx"],encodeOffsets:[[109463,29830]]}},{type:"Feature",id:"500241",properties:{name:"秀山土家族苗族自治县",cp:[109.0173,28.5205],childNum:1},geometry:{type:"Polygon",coordinates:["@@XlV@lzn@VŽnbÆbXKlL„U„ÒV@@llUnxll@zšŽ@LU@@V°b@Vn@š„l@VÑUƒnK@UšU@aUaƒkVm@K¯wƒklmnn„Ul`nI@almkIUwmWVkUaƒkkJmUUa@K@aU@@_m@@wUyVUUa@Umƒ@awl@Wka±„UkUykIWV™b@bUVk@›aU@UXU‚UIWakUWmUxUV@nUVWbšŽ@XXVVŽmXXŽ@VƒbVLkVWx"],encodeOffsets:[[111330,29183]]}},{type:"Feature",id:"500114",properties:{name:"黔江区",cp:[108.7207,29.4708],childNum:1},geometry:{type:"Polygon",coordinates:["@@VX@V@LV@VJUL@lVnnxlb@VXV‚XV@@W„@UIVK@kUKna@£VWUaVUUalIVJVIUW„_lm@bXKV@mn@J„UUw@KnIVll@VanLVmUkVKXLVKUIVamw@UaU_lw„KlwUWV_Ua@aUa@KUšwm›_›Ó@wU@™nkK@am@UkUKmXk`m@@I@K@I@mkVmIUxUJ@kUL@JVV™„lnklWnn`VzUVnlWbkb@WxXxlJXzWŽÛlWXnl@Ll@Vb°UJWLX@VlV@bkJ"],encodeOffsets:[[111106,30420]]}},{type:"Feature",id:"500117",properties:{name:"合川区",cp:[106.3257,30.108],childNum:1},geometry:{type:"Polygon",coordinates:["@@XKVXlK„ƒVL@UnV@aValXXK„U@WVwUaVU@IV@@aVW„L@U@anVV@@bVK@UVL@bnJWL@VnUnb˜@@JnIlVl‚@@bXIWbn@UKVLVKXLlaV@VVnK@bVL„m„IVƒ@KmknUUWVI@aVJ@_„WU_VmUwƒU@K™ƒVak@am¯mJU_UJUkU@WkIV`UI@JV@LmmU@@mƒbUzś™@„VK@nUKƒ„ƒb™akb@UWK@bkVVbV„Û@@`ƒXk@WŽ@n@lXL@bmb@VVJUn@JnUlnUlmX@`XLlbkJW@kzlb@`@b@b"],encodeOffsets:[[108529,31101]]}},{type:"Feature",id:"500222",properties:{name:"綦江县",cp:[106.6553,28.8171],childNum:1},geometry:{type:"Polygon",coordinates:["@@@¦‚@X„lVX@@UVKl„VUX@lanVlUVbXWVXVƒ„VVUnKVUlwUwU@UJ@nmVkUV™lwXam@VaUUUw@W@kk»mV@UmKkwVKVUU@@LUKVI@mV@XVWxnXVKUUUK@wWU@UUWnUlLXa‚mUI„am@wI@K@amIm‚UUkI@m‚akUkKWUUanƒ@wƒamLVxk@UVmUUL@Vm@kV@I@ak@@bWVXJlLVbVL@š@bn@@`Un„@WbUKULWVXbƒ@UVmbX„WVƒb@bVmxUKUƒV@šUn@V@V@nmšnKlnnWWXX@lKkK@a„IVxUlVb‚k@mn@@U@m„bVUV@VLUJUXU¤"],encodeOffsets:[[109137,29779]]}},{type:"Feature",id:"500233",properties:{name:"忠县",cp:[107.8967,30.3223],childNum:1},geometry:{type:"Polygon",coordinates:["@@VLÞĊ„U@Wš@¼V‚„@lk@w²mlšVUœ„llšVnI@VlKUUlIVƒXUVJVU„wl¥UkUKUIm@ƒaUƒ@mUna˜@XUWmkK@aVIUa@aUVmIXa@Kl@UUVKUIUJmwU@@aWInUVa™»k@@lƒ™¯n™¤mabWUUL@bnl@b݄WVnbU@mLUWk@Wbka@„WVUU@UmUmVkUULV„lVUx„l@L@VƒbÈÒlb"],encodeOffsets:[[110239,31146]]}},{type:"Feature",id:"500228",properties:{name:"梁平县",cp:[107.7429,30.6519],childNum:1},geometry:{type:"Polygon",coordinates:["@@XLV@VV@b°°nšƒnkb@bƒšnJWVXblIUVšxWnUJnVVLVU„JlUnLVK@UnUVJš²nKVbVKla@aXlJ„k„Klb„ƒ@U°£šKšV„IUa@ƒ@kwVƒVUkKV@VUkk›ƒUVk™±n@xklƒ@U@»™‚@XƒVÝĉUJnxWb@UX›KkVUbUKWUkVmkkLU`›b"],encodeOffsets:[[109980,31247]]}},{type:"Feature",id:"500113",properties:{name:"巴南区",cp:[106.7322,29.4214],childNum:1},geometry:{type:"Polygon",coordinates:["@@nxnVlJlUXLƒ¦@x@Vl@nKVVX@V_V@@KlVXU„@lKlxXIl@ÈĊ@Vl@n_VJlŽnVlnb„²VVVJVVmUUkĕUamçU@»W@@ĉn™V@XwVU@UUJWUXUW@UKm@UVUIVaU™UVmLUVƒUU„UWWXUakVmUkbW@UVkƒUL@VW@kUWƒ@mJUXVVU„@lmV@zklVVkLUl@¦›I"],encodeOffsets:[[108990,30061]]}},{type:"Feature",id:"500223",properties:{name:"潼南县",cp:[105.7764,30.1135],childNum:1},geometry:{type:"Polygon",coordinates:["@@@a@a@_kalyX@lIkaWK@_nWVkkmmV@IVmUI@Una@aWK@k@mkbWaknmJUk@mk@@kUal@Uaš@Wa@aXLlwUKlkkƒ@KmI@VUJ@Lk@@VUUmL@amJU£kKUaWakLmU@bVVUbnbWV@xkL@bUb‚xUxVbXJVbUVWIUVU@kLWxkKWV@n¯VUbU@@VVX@VmaUL@VUK@VVbn@lVnI‚@@lnLULm@Ub@Žl@na„@lK@XVVkJ@b@zl@@VnV@bVb@J@bnXV`lXXmVI@W@InbV@@aVKUblKVLUanLlmnLlK"],encodeOffsets:[[108529,31101]]}},{type:"Feature",id:"500118",properties:{name:"永川区",cp:[105.8643,29.2566],childNum:1},geometry:{type:"Polygon",coordinates:["@@@b܄nWVLX„lxV„VxXxlVn@@bVblK@a@UnLVJV@@UnLVU@VXaVKVXš@n`WUÿ@IUKlaUUUkWyUÛÅÝ@mmkUKUwW@Xk@amUUakKWƒwXaƒK@VVLklƒXVlkxV„UL@bm@Vxn`ƒIVxUVkLVšUšl@@lkXmmƒVUn@VV@Xb"],encodeOffsets:[[108192,30038]]}},{type:"Feature",id:"500231",properties:{name:"垫江县",cp:[107.4573,30.2454],childNum:1},geometry:{type:"Polygon",coordinates:["@@šĊ°¤nҘ¼œaV_lKnllUXVVLValUœLVW‚@XamwVIUKkaÇфa@U@KƒkVwkUUƒVKlVnU@aƒU@ƒVIka@akU@KVL@WÝçUV@Vmbů@L™KƒnnJW„ƒVkxlL@VX@VxmnXVWxUb@bkn"],encodeOffsets:[[109812,30961]]}},{type:"Feature",id:"500112",properties:{name:"渝北区",cp:[106.7212,29.8499],childNum:1},geometry:{type:"Polygon",coordinates:["@@@bVVXL‚a@lnbWn@L„@XVlK@VVLUVlbkLUKVVVL@VšnX‚VL@VV@UbVb@x@¦UxVb@bUJƒL@L„VVxlK@™nk@U@W„UVLlKXV„@VblU@UUKVU@wn@VJVanLlkX@VaVK™¯@a@U@U@ƒVaUK„kUUƒ±maUkm@UUkbm@@Vk@@JƒwU@Ub@I@JmwUL@aƒ@@KkVÇLkƒWkƒ@kUU@@xUVmKUnllUb"],encodeOffsets:[[109013,30381]]}},{type:"Feature",id:"500115",properties:{name:"长寿区",cp:[107.1606,29.9762],childNum:1},geometry:{type:"Polygon",coordinates:["@@VVšU„bX‚lX„¥l@XnVmlxUx„@@blVnnôĀlm@aVaXwWUnmUwW@@UkKlw„UXƒmI„mšL@Kưna@UUImyU@ƒ—@yULUUm@@mU@VIkaW@UUƒV@K™I@mƒmU™wƒ@™mKUnU‚UIƒlVLUb@„@V@V@bš°ULUbW@klmKUbUIm@@xUVVL"],encodeOffsets:[[109429,30747]]}},{type:"Feature",id:"500225",properties:{name:"大足县",cp:[105.7544,29.6136],childNum:1},geometry:{type:"Polygon",coordinates:["@@XUmaVaUU@anVlKXbValU@aV@@IXKš@@bV@VxVK@UXLlUšJXa@_‚@@aVK—ÅWVkwWaƒƒwUa@am@kUWLU@kWmX@ykI@W@UV@na@LlLV@UƒkwWƒUKmXX`mIVl@bXLWVkbkkƒx@`VXm@@J@U@UUKUxk@WbUIVl@VXLW„ƒJUkUlUImxXlmb@X@VUJUnVbšW@UV@@VVX@bnW@LVxUnlJUV@n„@VxVIn@l`„UVVVL"],encodeOffsets:[[108270,30578]]}},{type:"Feature",id:"500224",properties:{name:"铜梁县",cp:[106.0291,29.8059],childNum:1},geometry:{type:"Polygon",coordinates:["@@VblLV¤nI@bnKVV@Ul@@KVI@UnJ@Ll„klVLkxWK@bXb™@Vbk@Vb@ll@@nVlnIlmXblaXl@„W@_Ü@UƒUalU@aXL@Vlašb„a„ƒVL@mUL@ƒUUƒƒÇXUW›X_WaƒƒUƒ»m_™@UWULWb@UUVmK@VU@UImK@V@bkL„x‚„XblxXU˜ÆUL@b@@`Wb™IkVWK@VULUwU@@a™@WL@JU@@bkVUb"],encodeOffsets:[[108316,30527]]}},{type:"Feature",id:"500226",properties:{name:"荣昌县",cp:[105.5127,29.4708],childNum:1},geometry:{type:"Polygon",coordinates:["@@VI@U@WnaWknwVJVkVl„IXƒWK@UUkVJXal@VwVL@V@V@In@UW@_„wlllaXUWK@aUknJW_ۃ@aWaU@@UVm„UUaUImJVnÅUmVUm`kUUVWLnVU@VVmXƒK@„nxmŽULkx™ImJ@nU`@X@Vkn@`@nlV@nVJVaX„VLnK@bVV@nV@lbXWš@"],encodeOffsets:[[108012,30392]]}},{type:"Feature",id:"500227",properties:{name:"璧山县",cp:[106.2048,29.5807],childNum:1},geometry:{type:"Polygon",coordinates:["@@XzVlVVkbVL@JVĀXŽ‚¼V„„„XbW`XœWVȎ„„VVšŽVkV@@UXa@alK@IƒƒU@UKWUyUI@wVUUWVak@VUkƒW¹@WXI@yVIUK@kWwkѯ±W@™kUb@KkVVVmXƒJ"],encodeOffsets:[[108585,30032]]}},{type:"Feature",id:"500109",properties:{name:"北碚区",cp:[106.5674,29.8883],childNum:1},geometry:{type:"Polygon",coordinates:["@@X‚VLV@„„@JkL@bWb@VU@UlƜVy„a@nV@nn@KU@IVJU_lJXV@VlVIV`nIn°@b‚lUbš„„KVI@aUaVw@¥@wUaVaU@@UUKW™m@UUKUUVLlKkaVUUK@UkLWUƒ@@KXmma@kbWKUU@aUamLnÞ@VWLk@@Wm@ULU@@U™KUVWI"],encodeOffsets:[[108855,30449]]}},{type:"Feature",id:"500110",properties:{name:"万盛区",cp:[106.908,28.9325],childNum:1},geometry:{type:"Polygon",coordinates:["@@VIV@@wVJ@InKVxXal@@U@U@KlUnwUW@kVU„KUmVkUa@I@KW@@bk@@mƒU@m@k@a@aƒIUxmJk@ƒwULƒwkKmVVX@VXV@xVLVVULmWXwWUU@@nUJVL@KV@UVULlxnL@VnUl¼@l@XVxVVUbn@WbkxUšlVnU@m"],encodeOffsets:[[109452,29779]]}},{type:"Feature",id:"500107",properties:{name:"九龙坡区",cp:[106.3586,29.4049],childNum:1},geometry:{type:"Polygon",coordinates:["@@XK‚L@Vš@XbV@lW@UV@@VXIV@U™VKlL@KnnJ@VV@VU@I„@@mVUVWUUmL@V¯LUK@UV@UU@a@U@yU@WLUK@X@KUVmL@ƒ@aXI@w@ammVk@WÛwm@UxVVVbVLUJVxVU„V@V@X@JUIVbm@@Vk@@VkL@lVLUJ@zWJ@X"],encodeOffsets:[[108799,30241]]}},{type:"Feature",id:"500106",properties:{name:"沙坪坝区",cp:[106.3696,29.6191],childNum:1},geometry:{type:"Polygon",coordinates:["@@Xºl„UVl@UbVXUV@xVJVzXJVUšL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@k„ƒUK@UmIm@LkKULVšU@WJ@UU@@VkXU@Wa™@@UKWL"],encodeOffsets:[[108799,30241]]}},{type:"Feature",id:"500108",properties:{name:"南岸区",cp:[106.6663,29.5367],childNum:1},geometry:{type:"Polygon",coordinates:["@@VV„JVL@bUVVnl`XIlwXJlw°nnl‚IXW@UÇĉk@WJkwkLƒ@WVkU@LU@U`W@UXUV@n"],encodeOffsets:[[109092,30241]]}},{type:"Feature",id:"500105",properties:{name:"江北区",cp:[106.8311,29.6191],childNum:1},geometry:{type:"Polygon",coordinates:["@@nLVU@wV@lV„@Xll„ÈKlU@L„@@bVKnx@I@JVaV@„x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUKƒ@UU™@ƒ„@l"],encodeOffsets:[[109013,30319]]}},{type:"Feature",id:"500104",properties:{name:"大渡口区",cp:[106.4905,29.4214],childNum:1},geometry:{type:"Polygon",coordinates:["@@k@@U@w„¥WKkVkImUmwa@b@xWJ@b@„nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U"],encodeOffsets:[[109080,30190]]}},{type:"Feature",id:"500111",properties:{name:"双桥区",cp:[105.7874,29.4928],childNum:1},geometry:{type:"Polygon",coordinates:["@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK"],encodeOffsets:[[108372,30235]]}},{type:"Feature",id:"500103",properties:{name:"渝中区",cp:[106.5344,29.5477],childNum:1},geometry:{type:"Polygon",coordinates:["@@VLš@VV„@VL@aUKƒIUUƒ@@JUVU@"],encodeOffsets:[[109036,30257]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/fu_jian_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3507",properties:{name:"南平市",cp:[118.136,27.2845],childNum:10},geometry:{type:"Polygon",coordinates:["@@@knyƒk@ƒKU¥šwV@nkƒWƒzUmk@@lKUa@aVI@UƒKUamKUUVaUI‚@Xƒ@UV@K±IUVVlUbUbUL@KWUXmWk@KkXmmkŃKUƒ™a@amUƒbkUkKWUnwUƒÇwV™UUƒÝUKV£U™@ƒnKWwXLVKm¥@wUXkmWk@ƒ@wX@lU„@šyVImaXwVƒƒ@kŽƒnU@mbk@mlUXƒmU@mV@n@bnW@bUIWJ—ImVUKWbUK@nkKƒaU@W_VUUmWmL@UU@™bUWUL@V@bmVUz@`mUUVVbXL@V™L@lmLUxmVamXkW@xWbU„VbUxkU±@ÅUmmkLUbW@@`kLknVlV@lbXxlVUXVV™ŽU„U@UbWŽkIWVUUUJkI@llbUxVL@V™VƒUU°ULUmWXUV@VULWb@™xm@UaVLVKUa@ƒw@V›bkmVambUUm@@VkK@„@b„xlxX@‚„n¤@Xƒ@@lkLWV@Žn„V„kb@bWJXLWx@nkxmm™bXn@VWVUn@VnJ@bVXl@„™VJXnWbX`lL„UlJVI@Žœ@VXV@Vl@bn@@Æmn@VšxXU@mVIlxšVššnI„l@nVJ‚aXI@mlU@aXkVm°klmnVV_naš°@V@xܦXK„V‚nnUlVXbVK‚LXKV@naV@@VVl@@lXblXšWnLlbVK²nš@@‚VLUnlV@lƒXxô°‚V@UnaUUlKXLVUVVUbVVlUnJVX„@VW@an@lb„@nl@VU@anƒšUVW@kƒaUm@InVVKVU@kUW@Uam@km@kVa@a@™nwšU@WlI@mVI@WXaW_nƒ@™nƒlkkW@U‚¥@kV@Uw@wUƒ@@IXK‚¥VIn@nU@`@Xl@VV„LnašW‚bVaUwnU„@VIšKlV"],encodeOffsets:[[122119,28086]]}},{type:"Feature",id:"3504",properties:{name:"三明市",cp:[117.5317,26.3013],childNum:11},geometry:{type:"Polygon",coordinates:["@@lL@Un@VVna‚bnUlœa@U‚x@„VbULUKVbn@šw‚@XaVK@UVUXWVnVKV¯„VšU@UUKVwka@klJVIVVXUlJXVaV@VƒšUUVWkUWwkaU@UklmlK@_X@ValKnnÆV²@lVVwUaVƒXa@wlXnW‚bnUVwnK@kšK@UWKUaVUnV@_VynU@a@UVKVXšaV@@VnKnXVV‚UX`V@„blL@mVLXaVLnU˜JXIVJ@amX@a@mnUV@„nVWnkl@naV@„ml„@@KmKUam@UU@ƒ@UlKU™Vk™U™K@aVaUwV™U¥UIkJ@wmI@‚mbkwkVW@UXƒKULU`™IVKUa@LƒkkVmUU@WlULUWÅU@I@ƒWW™nU@@w@a@ƒUam_XyVIVWkkƒ@mwVKXUV@nw˜VXkWƒÅ™U@ƒaƒU¯KUnƒK@ƒ¯šmUƒLXŽVLnWVbVbUVm@Ub¯¼W@amƒ`kb™amLUUUƒ™aUXV`@x@XmJ@n@L@xkJUU@kU@mWm@kUUwUUVWl@VUkIƒy@kkaVUUm™IWVXbWxU@k„mVkK@nWVX¦WxU@@bkx@VU@WŽk@™kUbmJUUmkUW@_kKWKƒ@knV¤kIUKWLUbV‚@Wbk@@VWL@VkI@lUXVxUVU@@mWIƒV@a¯nUaƒaUV@„ƒJ™b@bÞ°VbUš@X™aUVmL@‚VXblŽnV„°˜n@Vnx„@VUUUlK@InJVb@„Vlnn@V™L@VWJU„x@XlJUVVVl@LUUUJ@Lƒ„@lUL°¦k˜V„VnV@„xV„„l@blLnlšLVaXll@šnVUn@‚xn@nml°‚X@lb"], encodeOffsets:[[119858,27754]]}},{type:"Feature",id:"3508",properties:{name:"龙岩市",cp:[116.8066,25.2026],childNum:7},geometry:{type:"Polygon",coordinates:["@@ša„I@ƒVU„bVb°m@b„UXJ@nV@VUUwVW@klJ@UXK@Ul@Xa‚@UVaXKVLlJU£lm„@XLlL@`VXnlVVnIVašll@XV@@Ulw@aV@XwW¥XU@mlLnUlƒV@XwWaXUšJVnUVlb@l„zlJUVk@UXVVVxlVn@nXV@@lVVlI@w@K@mnI@W@wU_VWšbV„VVnKšbla„_n‚bX@°»Van@VUUaUamXUKW„K@a@Ukƒ@wWkXƒWW@wUU™Kw@_lyƒwUkU@@Uƒ@kamVmƒXašUVUka@Wk@»UUUVƒKkbWU™VUbk@mkƒxkƒƒKnIVUmW@kUKmXUmVaU@kU@m@KUWVkIWJ@ŽU@UI@wUUUa@KW»nU@mVkUmm@XwWU@ƒUUmL@ƒw@mnƒVUU@aWak@@amxU@UxULWVXbVLU`mbUImVU„ƒbn‚V@@bVn@bnVWxLmyUbƒIUKƒ@aƒVm™akbV‚UXW„UlKWbkV@„WLUlk@@nšbƒb@lkKmU@ƒUIWJkw¯UUVVxm@@XkbWx—›XKƒlUzWJkUUL@bmKkVƒ@@VUIUlWV@X„K@VkbWx°xUb@LUbk@@VWb@LXJ@VWXU@@bUVV„VVn@VVlLn„@l„@‚xk¦Vx@bVJXbƒn@JlnXxV@@„nJ@X@V@lmx„bUn@xVL@VVKlL@l„„nLVaVL@xkl@LƒxVl°š„X„WVX„Vl„œJWnxlJ"],encodeOffsets:[[119194,26657]]}},{type:"Feature",id:"3509",properties:{name:"宁德市",cp:[119.6521,26.9824],childNum:9},geometry:{type:"Polygon",coordinates:["@@@LVKVaVaUkVU²J@LVU„@@W‚VJUbVVnLVb„L@VUJ@bVbkL@Žl@Vn„y„XmlU@™xV¦„L@Ž„lmz@lnL@bVVšbVb@l„nšKVk„Vl¤@zXV@šl@XJVLVKnXVK‚VnU@wUm@šKUƒ@UlVlw@U@U@ƒUaUKlU@kXKlmXIWKXaVIVUVK@KU@@k„JVUnLVJUL@V‚IVa@VnLšKUnl`Vb„V„V@š‚Vbn@Vzn@lKnVlI„VVKUalkXJl@XXVWVLVUUmVU@Unm„£lK@Uk@WUXK@U@WVwVkšƒĠkĢǰaUÅUwmaţƒɱUÇa™w„±V¹XalKôx„@„UVaÜʓͿVóbÅLƒJm„¯Vk¦ƒŽk@mamXkKUƒUL›akbk@mV@LkJWb@Vk„mXk@UVmaUV@amLUKUamI@KUaU@WbU@UUUƒUIWJUkm@šƒw™Kk„VJm@kxǁVƒUK@mUVUkmlkkVm@amwƒLVWU@UbVLkšUbƒ@VƒmK@XaVWU_VJnwV@@kUmWakxƒ@kwWakIWxnbUJ™zƒ@kVW@@x@„XllnVW@xn¦ULWKXxmL@„VšU¤VL„ÞVVUšÈxV„mxXVlLlV„anV@bšbV„„LlÆnnlW@LXlWnXV"],encodeOffsets:[[121816,27816]]}},{type:"Feature",id:"3501",properties:{name:"福州市",cp:[119.4543,25.9222],childNum:9},geometry:{type:"Polygon",coordinates:["@@lxna@nJ@xlIVJV¦UšVxUb@bšLšVUlVškL@V@„VVn@Vb‚Ln‚@LU„lJXblx„@lwXbVn@lU@mxUIV`UXWb@‚nLU„„@Val™UKVaV@UX„Knx‚bn@lUkllnUVnV‚@VLU„È‚lwn@UIlƒšL„x‚™n@VlXIVJV„VVV@XaV@Vb@LnJVbVLnK@bVUnbVUl@nWlƒ@UXalI@KnUl@laœbVKV„lLnWnbl@„l¥°Unƒ„IÆKôa΀U„a@UUwÇWǓIUWUÅVkƨm@ƒ@£@KmLU¤ULˣJ™kUƒVǟUUķ@ĉVƒKUk@Ѱwôǚç@īšé@Åţ¥mīÛkm¼Å@ƒVķVó°ō¦U°ƒn@bVJXVVL@bUŽƒakLmx@xmxXzW`XbWnXV@bWLÛ@™aƒ@ƒaXbWVkaÝwU@mlWKkLWWkLUKULW@kVmVUU݁UamV—¤›n@xUVUzkJV¦lJU„"],encodeOffsets:[[121253,26511]]}},{type:"Feature",id:"3506",properties:{name:"漳州市",cp:[117.5757,24.3732],childNum:10},geometry:{type:"Polygon",coordinates:["@@@bl@Xb@bVVUŽm„@n„x‚@nKVV@„XVWxn@VnUl@nmVX¼@LVbVV@xVJV@@XIlJXU‚V@Ln‚@lVV@UbVnnWVL@lnXUVmJ„Ll„„wnll@VašUXVla„LVUVV@¼Xl@lbUV™VWbn„nUlb„@@VV@„aVUšmlUašUny@kU@Wkk@WaUVk@@ammk@@U@UlU@aUa@wl@šmXLllnL‚U@anVnU@L@VVV@KlXnWVnVanUšw@w@wm›nÅ@wƒaUam@Uk„mUl@@a„a@U@¥škôK‚wȯ°w@ŻkwǕaK›ÑÛk@ĕōřċ£ĵƒUKW»kÅŻLU@Ulġw@¤Vz™VUbkKUbmLmlULU¼UxmbXl@bWVƒb@bUnV‚UšVbULU@@VkbVL@`U@WX@ŽXV@b°„@b¯š@¤@Xm@@b@`U„VVUL"],encodeOffsets:[[119712,24953]]}},{type:"Feature",id:"3505",properties:{name:"泉州市",cp:[118.3228,25.1147],childNum:9},geometry:{type:"Polygon",coordinates:["@@Vl„xkz@`‚xšLVV@xXXW„Xl@xl„@V@bnV°™@„„LVm°L„V„bV@ƚX„Wl—UmxU@WVULnx„@llUXUJWzn`Vb@„@b@xV@šmXX@„@JÆVVXVKXkV@nVlU„l@KVbULšJV_VK„LVWX@lUVƒkIU¥lIVyVU@wœm˜£nUVWU@aƒm@UmWw@UX@@am™VUn@@aUUlUVanaWUXWmUnkšK@VšUlVVUUwš@XLWWX™ma@knm‚bVb„VXbVL‚@XJlInlšL„w˜mXóšw@çV»ÇçŋaķƧóƅóKġ°nÅUķƑUÇW@—¯xǰöÆlV„n@llšaš@„Lšbƒ`™@™„VšXVƒVx@V@bULVJUk‚Ç@ƒ¼ƒXUKk@mmULkaWbk@ƒx@UkL@a@K@U@UmKmbU@kV@UmVUbUmmXkW@LUU@U@KmVmU@bVmKkkWK™nk@@xVb@bkV@V@Vl@nn@bl@VUXbl@XlV@@lmz™VVbkŽ™nUVƒb"],encodeOffsets:[[120398,25797]]}},{type:"Feature",id:"3503",properties:{name:"莆田市",cp:[119.0918,25.3455],childNum:2},geometry:{type:"Polygon",coordinates:["@@VbނVVnUlUX@VKVLlKXXlKXL‚‚nkV@ÞxlbXUWa„b„@šbÜ@XK@aWUXmWaX_Wynw@wnwlK„bV@aUKWUUI@a„mV¯Ŏ¥ô¯ĸU„UÆ@n»¯aƿé@ţ¯nĉĬÝK™óó@™ÑU¼@è™xWô—nƒx™KmkkJWI@UKWaƒUUaamn@lnbWšXXWK™@VxUVkU™V@U™LmlnVWXXVmbUbkVVV@bm@UVnš@bW@@VXx‚n@V„n@bV‚UX"],encodeOffsets:[[121388,26264]]}},{type:"Feature",id:"3502",properties:{name:"厦门市",cp:[118.1689,24.6478],childNum:1},geometry:{type:"Polygon",coordinates:["@@@VlUV@nanL@V@V@L@blK@V„wl@XalbVKnnl@VL„W„»È@lVUIVK@a@UUw„WUU™šƒš@„_™aƒK™@™bkkm@UƒkõŁxóL™l@¦@Vƒb@bk@VŽƒnVln@Vb„b@xmÆnœ@x@x™x"],encodeOffsets:[[120747,25465]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/gan_su_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6209",properties:{name:"酒泉市",cp:[96.2622,40.4517],childNum:8},geometry:{type:"Polygon",coordinates:["@@ÇnÅaĉ@ƒU¯¥›UŹ‚ƒ£™WUýUU±JkkUw‚yÞIČxĊĕĊ¯š¥ÆUkţ™UÅÓ±¼™IUx¯UƒÒƑ‚ݐŰƒKÝnğ°ÅU@Žƒ@Vn@þš¼¯šWnŎ°XLWlnVnbWnƒVXxmbƒa—bóUƒlǕUUa™IUmlU™ƒš¥™kƒ¥ĉwkkƒÝɛa@¯™™U¯°mVƒkVnKlƒōÑÇÑU@kl™UġŽkUŻnUW™@š¯ƒk»šmWV£UKnUƒmUw‚w@ƒUIVaX™šwm»Èmmwn¯ċ™¯LĉŽUƒJUalka±Va@U‚k@ƒÛф¯WmnUaɝ¤Ûmƒn¯m±x@wóxÛLġÒUx¯VƒÈ™JUbóz݃ÇKĉ¯ōlÝUŎWl¯nťbÝ@¯ǩLġmV@ƯĢkÆm™ĊkVťLɃmÝXó°@„ĢbVŽóVݦɱ@Ƨaġ„UV„ĠÇÈV¼UVţwmbJÇwˋa™XmǯKkkmŽƒbXšm¼V¼Ǭڲ¤ôŰÆƴô̐ŤǪnɆӨ¼ɆLÆłUĊšxŎƞȘǔˎǬǪnƨŮǬö°»šġ„„ÞÜÆĸÒĊ„ǀbƾèôÈ@¼¯þŤĸƧ°Vb@lÈĊ‚šʠń̐„ȘKǀŽֲॗţÿǕý@ʊǓƨóÆÑǖŃôw@΋ʈƆÅÈVVĊV„óĊÅ@ÞƒĬV@Þīš@°Ž„V@ĸ̃°XτƜĠ@ÈaÜ¥Őƅ‚™nğóĕVġUůƿŋ—ĕƒa±V—UťÇğÑ"],encodeOffsets:[[101892,40821]]}},{type:"Feature",id:"6207",properties:{name:"张掖市",cp:[99.7998,38.7433],childNum:9},geometry:{type:"Polygon",coordinates:["@@ÈÒŎÒk„mLUŽlŽU„¯nV°šš@°ɜb„ÞĠaÈ»ĸl‚š„LVUÈ@Ċ@ýUm„@@ÆVĠ¯Þm„LƯޏƒ„ѰVVwšJ²»ÆÔšVlŤÅV™¦ĉ°ĉĖċwÝJzVxll²IVVVþšX„¤źœV°¦„VĊ@ÆbÈmǔLĸĠ¯Ģaô¯ĸmÆÛUƒlÇĸk°XyĊUǔV„ǩnmV»ƒa@ýnK°n@l¥@»ż„Ċ¤m皃@£ČU@mƒmVkÞUƐ±²¹°‚ĠwÅƑŃU¯™›V¯aÈŁšƒÇ»™ġn_°xŎKlxœklx„@Þw‚„„@Æm²b‚DzLlkšWXať¯ĊaœÑšK±w@wƒUÅçV±Uk™@@„¯š¯xƒU™±±UU°ōxVxÅÔō°ó¯UÝ¦óbÝþƒ@ĉÈóUV‚Ux„„@VŽUVÝwÅÈǎóVkk¯JǐkmmL@„™KÇx@bkš™@U°ķ²ó`ƒš™šmn¯°ƒUwlÅkUƒ`™¦ɛô™Žķz@ŽÅnǰU¼¯KmVk²ƒJƒ¼ƏÞķôš¤ULƒ@mnğ`™šÇnUxÇ@Ûÿ™U@ƒƒkŻŽ@x@móJkŃ¥VŹĉóÒĉlċ°ķ„Uƽ܃@›x"],encodeOffsets:[[99720,40090]]}},{type:"Feature",id:"6230",properties:{name:"甘南藏族自治州",cp:[102.9199,34.6893],childNum:9},geometry:{type:"Polygon",coordinates:["@@ލš™nKlnšwX¥WÝXk˜xÞUnƒ°aĊVnUUKlÞĶWXnĠ¥ô»„™@nmVL@¤°™Vz„JšanU@aÆwna@k›ƒU¯šyX_›aĉb™ƒ„wƒéXkWwÅaš¯V¥mƒ¯UƒƒI@ƒš@„mšb°aÈçšUš¥@»‚knwɜƇ°I°ÑÈmVU™¯Xa@w‚W@wšV¯Č¥l¯Uwnm@k˜aUaóKkk@™Ça™b@ށÒWa¯IÇxÛam¼™VUƒxÒl‚@zÝÒ¯bÝaĉVĉwDށW›zJ™mJn²mܯUƒ¯ĉ@ġ¤Åb@²nšmlƒ@@Ž„„U„ƒLVxšV™„U¼Ålma™b@ƒ°™l@WIUƒ¯@mƒ™@™™ó„™„@U›zţyƒXÇU™ÇVUUVLkbWakVWmUbkkƒKUÆ»nƒ°Knk@aƒUVmšnk»l¯Ģ›lw@_kKVU@ƒnaƒ@lUk@¯¥mV@kmbW™b¯Åõa@mkU@kƒÇŽkU@›`@™óó—bl¼Uxƒn„¼šlVȄx@blVkVVnƒ`XÈġÈ@ǃK£ÝJmUUnUĖmlU„mKUn™VÅaUw›Uĉ`¯n¯wW¼nxVŽ™š@bĉnƒ‚kIċŘkXUŽ±Ò™xšÈ@ŽX°`l„œV˜IȯĊV„ƒšVVan@VašUVażVmšblkÈW„ƒWIXa„alL@wVb„„V„¦lL@lĠ™n҄U‚nk‚šL@ÆÞkšÞšK‚bñþW¦Û„ċVƒ„ULUºkÈlŎUxÆxÞUUxšÒ‚x„@XbšL@lÆ@„ÒlXVln@„bm¼ƒJ@„Ån„šƒx@bnšĠm„xVXmbÈè@ŽĊ£ČW˜w"],encodeOffsets:[[105210,36349]]}},{type:"Feature",id:"6206",properties:{name:"武威市",cp:[103.0188,38.1061],childNum:4},geometry:{type:"Polygon",coordinates:["@@±¯¥@klwU»ƒƒÞÝmwKm¯™™ç@™kVÇUL¯lVUKġ„ġm@a@U„@X£°l°LŎÇ@aōVÝw™ÔƒKUŽÅš„WJ¯lm@ÛVWa™@klĉUmaƒLUanaƒ™ƒk¯J„™™±KkXóÜÅxƒ²Ç‚@„„nUÒĊb°@™ÆkL™Ž™XÇÆ@xÝn—xWxţ„¯¤ƒI@Æn„ƒVV„VlU²Æè„V@x²x™L›ÒĉbŦ°Wb™Xklބš@l¤šXĊ`„wl@ĢÈŎm@bšnV‚Ubƒ„@șÆÛLƒèǚUÒŦlĸ™`°ĮʟÆǓbĉôϚĊƚĢnŤé΀ÑĸĀĊ¦„@@l°lœ¦Ȯ¦ɆÞĊKŤ™ĵĸů„»mفyġ™ķŭ@Çɱȭ¯mƧUĊķnŁŻ»UaU™˜ƛɞÝƨů"],encodeOffsets:[[106336,38543]]}},{type:"Feature",id:"6212",properties:{name:"陇南市",cp:[105.304,33.5632],childNum:9},geometry:{type:"Polygon",coordinates:["@@šÈÞ@l`UmVƒ¼œŽ‚@nnÆwVlnVVa„LVƒÈ_‚ÿރ@n„a„xÆ@„lš_š@VxnK@llLnxmÈŎJnbUxšI°Žl@n¦‚lÈIlmX¥„k°@šk‚J„k²é˜@klaUaVaU@@ÝnIWnmnx‚k„ºÞ„„aV™°„V@nw‚KšxôbÞ£šVšU„bšþšLn»mƒVw„IšJ°Ž@„nb@°°I„ġUkÇKVƒ™™@ů»lƒ„Lnmƒ£@anK@Ñ܍n@»mL@£™yk„UUmbUÞÝ@kyÇbó»™XUxƒWVzb±mÝbXaƒwUamL¯»@wUKVwm¯ĵJ°ÅUWVk„KVk°wÈVšVуlUšƒ¥škmVamknƒUw¯¯ƒbċ¥ÅKƒk™Kk„™VċVk£kKVw‚Ñ„a@kóyÛ¯ÇVk™ów›š—Xō¥Ç¼ów™Ž¯U±‚k„ƒ@x›IĉÒÅVmÈnšÜ@n°„bUbÝV‚ŽUnnJ¯Į@‚m¦nV܃@„„L°JXb‚Ñ@šaÈb@šllôLVb—b@lmnVxk°ċ¦U°™Ž@xX@xWbš°UVÇn¯Ò¯Jɛƈmxl@¼"],encodeOffsets:[[106527,34943]]}},{type:"Feature",id:"6210",properties:{name:"庆阳市",cp:[107.5342,36.2],childNum:8},geometry:{type:"Polygon",coordinates:["@@kw‚ĉ—»VamƒƒV¯wƒIóVkl¯™Km™Vō¯ÝWkL@bÝKō¦@Ž™„@š™Lx›@b@l™a@km@@l¯nm@UaÅ@ƒ„óWUXm¥™nƒw`@UUxķôǰğ¦@„VJš_n‚‚IVŽnalxkX„JWn¯šnVƒLšxl¤nnVbklVX@xnxmV@bUK@nm@@xƒV—°±aÅnƒŽkUWnUaƒx@m™n@ƒ¯LƒššmUĀlU@lV@blLUblxklkIÇx¯°‚UXbšaVŽUnšV@°‚LUlnbšX@`°nVmbnÆmV‚kLmK™¦UŽ@X„y@kl@U„°K@¼XbW„ƒš@b„WnLVa„VšƒVz@xlVČ¥lbUxލlV„U@nÆWôn²™VJlU„Ƨ„LnmÜLXa˜n@mœw@wlUlV²mšblwšVȃlLލ„±@lVnUlxnkma@mškšJ@kXV‚U@mn@š¼VXUƒVƒlLnmVbôaVnWV»ÈUl°È¯ÆIn›ÆU@kk»mKkÆġk¯@»mƒk—¯@óÇlÇ@—Vykkl™Uml¯Þ™@w"],encodeOffsets:[[111229,36383]]}},{type:"Feature",id:"6204",properties:{name:"白银市",cp:[104.8645,36.5076],childNum:6},geometry:{type:"Polygon",coordinates:["@@VKUȚl@šè°šnŽ‚LnxÝބ„V¼kx@l‚¦²°ĊóĠ„™Ċ»š@ÈxšaĊxlwÈVŤa@¯²aÇ£ƒJk£lƒnUÞ@°šô™@y„wl»lIX¥Ǫnw@ÑÞWla„ÅlL@ƒUwĉakƒl@ƒš¯mwna°J„V¯nUVÓÞÑm£²óWaUƒÇ@óÝUçV»ÈkkW@¯‚xV@XlK@wX@Vmm_@wÈݙKU¯ÇwVwÅK¯VƒkƒJ™™™XkWVaƒImޝUk„ÇlVšœĀV°mxóšk„@¼ó„WxĉÜU@Ub‚zÛJÇk@‚ÆnVlԙ@kŽ„x™ô@ĬWL¯ƒƒK@aÛImm™@ƒIUaƒ@™™UŽÇêU¤VÒÇx¯ÒV„šš™lk@Wbĉ¦UbkWV_‚y¯Lƒaó„kŽ@b@nmbkx„°"],encodeOffsets:[[106077,37885]]}},{type:"Feature",id:"6211",properties:{name:"定西市",cp:[104.5569,35.0848],childNum:7},geometry:{type:"Polygon",coordinates:["@@„a‚V²wVJV_@„LlanÅllŦçÜӚ_šlnƒWaôk„xUš„bmV@È°lèšnk°l¦„`@nnL‚@ÈlÜIyVaV@ĊÛXwôƒ@»lƒô™nwU¯›ÿU™Èklƒ°Vn„JUblXšWšš„I„l°U„ƒVƒš—@aVVVmnL@„lƒ„UUw‚mkƒš£„bV¥VUVwۂƒlaÇÝރmk£ƒLUy¯L@WlkKW_XaWƒ—mƒ„ġU@a™k™‚ƒakXkmVwmŹVƒU™b™WƒónmwnWW£„KÈnV¥ƒ¥„ƒÆ_k™lW„bU¯„V°aôbnaVwmaōInÇmwkK@kmLUw™@™`ƒkÅ@ƒwƒb@m݄ĀÇ`U„ƒKUbmUUkÅxmm@›„»nUVk_Ý@™Ç™¦™VÇè¯b™aƒn™@@„„JV„°Žn„U¦™°ÆbXxWl„êƒxš„ĊaœbW`™zV°œ„@lmbÅx@bmV™bƒI™`™¦@ÒUVUI@ƃL@bš¼@ššŽ@„šlmxnL„°ULƒŽƒÞğޛ°kLUŽƒL™°™xVŽ„n„KVƒl@šzX@"],encodeOffsets:[[106122,36794]]}},{type:"Feature",id:"6205",properties:{name:"天水市",cp:[105.6445,34.6289],childNum:6},geometry:{type:"Polygon",coordinates:["@@UyȍVƒVUnn@ƒVU„`UblzšJnk‚@Vb„KU„°l„wš„„W°„nkVŽ‚UÈlš£°V@n¥šV„kl™kU˜±U„ƒn™ƒlw¯UkwmKUlmkUmnkym@ō@U„mWÈU°l°anlJškUKlU„¯Èm@kmWV»kkÝLUWUx±b™@¯ma@ƒ¯™IƒJUxn„m¼™K™ýƒa™V™Uݤóa™wLmxU@¯ƒUšƒb݃ƒ¹lmwmnXŽmJ@ÞV@UbVbkblŽ—@±êƒlI™l¯@ƒlW¦knÇJkm¥k@¯™Jmbóa¯bƒUV°ƒakXlšÅ`ƒ„„¦U¦ÇmƒLX¤mXnxm‚„ôšXša„VźUnŽUxlnlW„bššl@bĢV„ƒ˜nX„WbX`lLXk@ްKVz„Kl¤„nÞ݂Èkb„‚܁"],encodeOffsets:[[108180,35984]]}},{type:"Feature",id:"6201",properties:{name:"兰州市",cp:[103.5901,36.3043],childNum:5},geometry:{type:"MultiPolygon",coordinates:[["@@lW²LššƒŽ°I„l„šmbVb„KnbĊVlkš@XbÜU@Žkn°‚XIƒÆ™V„LšÓÞxŎUlôƒ„b°KzU`lXVaĊ¥Xal@šk™™Uƒ°ÑÈwUтV£ÈéVšš„@Vb„Jš@nnÜJ@b„L°„XK@īšóƒwlš@kÓmUÅmK@mƒ_k¥l¯™mkçǯ@nUƒaV™ƒwólXbm„™k™`ÛÔťèkkmÆkbƒK@U`UI±xUƒbWlX„mbVbÅÒólkƒƒIWJkšƒ@ƒz—Kݼ™@™xUx󎃄¯LWb@ŽÅ҄„±¦U`nbťĀUšVb„LšŽ„U"],["@@ƒ¯lwna@mōȯK¯kW¤ƒ@@V@bĢñVLU‚°k"]],encodeOffsets:[[[105188,37649]],[[106077,37885]]]}},{type:"Feature",id:"6208",properties:{name:"平凉市",cp:[107.0728,35.321],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÆLUxÈxV°šLÇÞ@xn`Ü@X@nĊŽÆwnJmwUx‚aUkšw@V@w„aVmlLXÝl@X‚VĢmV°@nl@UUUWK@w„ÿVI²Òlmš@nÝĊýVV@nšJ°„„šUłm@kV¼nK›ĢȤôK„blnKllVk²aĠ¥È¯ĸóVw@V‚_„xšmn¦VWôX„ƒÆ@Vbn@°m@kn@@lšb@k‚aœ@‚wšK@™šƒ@UlKVaƒWX™W²¹lӄw@_°›n@@_lKōķW™@ŽmLUWƒn™»Û@›l_Ç`ƒÛmm°ÅbWb@š—VWbƒUUKDŽÅaġlmkUġlƒ»—Lƒl™Um¦@ޝU™¤ÇkVUml¯ƒƒX™ƒƒx¯kVƒƒLUa@ml™IkyVaƒ_UV@„mmUVU„ÇŽVzUxUVU¦ƒa™¤l„nVxƒVk„@ƒmKUnUU@b™˜U„ƒ„","@@@Žż@™mlkƒġk"],encodeOffsets:[[107877,36338],[108439,36265]]}},{type:"Feature",id:"6229",properties:{name:"临夏回族自治州",cp:[103.2715,35.5737],childNum:8},geometry:{type:"Polygon",coordinates:["@@š@ż»˜L„y„@l™XI„Jl„ôkÆÑUanaWƒXkW@™yk@U„ƒLƒmUšwš¯„KVlKœ¯Ġ݄݄VKƒ¯mKnw™k@ƒ™@™™»@a„K@ÅVJVU@њ¥š_Uy¯š@£UKmn@‚ƒšó¼ğ¦WmĵXݎkŽVLmVĉU¯bm„ÝV—wWlXÞW¦™xkmmL™šÝŽœ„±U@Vގ™š@„ÅÈW°X„ܼƨyUĮnŽWŽnXÝxUx°lVXJlôV"],encodeOffsets:[[105548,37075]]}},{type:"Feature",id:"6203",properties:{name:"金昌市",cp:[102.074,38.5126],childNum:2},geometry:{type:"Polygon",coordinates:["@@šĢȼ™„Çł°bœU°šV‚ƒń‚ÆǖŰnšÆ„ōĬǔaʠůĭš_kķÆ¥VÑș„çÜKšÅ@DŽƒVaU™m@aōnġÇk@ƒxĉ_™Wk£™@݃±KÈ±aÅnƒ@ƒÝxƒ@kw›lkwōL¯wm`"],encodeOffsets:[[103849,38970]]}},{type:"Feature",id:"6202",properties:{name:"嘉峪关市",cp:[98.1738,39.8035],childNum:1},geometry:{type:"Polygon",coordinates:["@@llĊx„¦šl™¦š„kVVnšJVbǖV„kôV˜a„bnaWw„UXmmamUXkWKō¯Xm°™™»ĉÇ@UVƒK™ķkǼğb"],encodeOffsets:[[100182,40664]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/guang_dong_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4418",properties:{name:"清远市",cp:[112.9175,24.3292],childNum:8},geometry:{type:"Polygon",coordinates:["@@lǯkÿƒaV¯™VaÈU„¥ÆÇ„Ilxšmnb‚Uœxl™„Uôl°kš„„Wl„š@ô™VwUanUl@„xVkšaX¥‚kU»„aš¯±@kka@ƒUwmUkwƒJk™˜„±k@ƒ™™L@ÝWUwV݃—xÇU¯ŽÇX@m™Åƒ@@yĉ£VmUwȗ»ÇšUn„lUnWU¯`Ukƒ@@„™x„Ž@bÇxX¼ƒVVš¯LšĀk‚ÝLƒ„¯@VŽƒĀ¯lnĊW¦kVÇôkUDŽUK@ţ™U@a™™ó܃UU»ƒ@™¦k@Vx„KVb„n‚š@„Æ™„l„@xšƒbWšnlU„lxÈlV„ȰƄ@¼™„@x„šWxœŎ‚V„šK°„š¥ššnƒÆkŎ@ÈÑm™„K@¥šk@™ô@„nôV"],encodeOffsets:[[115707,25527]]}},{type:"Feature",id:"4402",properties:{name:"韶关市",cp:[113.7964,24.7028],childNum:8},geometry:{type:"Polygon",coordinates:["@@W™Xk±Ñ@ƒUw™mUwĉwlmn@Æwn£mkIš¥ÇÅ@¥šaƒón£nWWwš£V`Þ@šnVml@xô¼„IV¥ƒkUmkamUkVWwÛ»móƒ£UVÅKmn@x™@kbmm¯a™Xka›VĉaUb݃ƒ²—‚lš„IlxnVVx@„lb@l²™°ƒbV¼lW¦™bUlƒwk@mVVbUxóš™@kƒƒX™ƒ¯lókƒVkš›wVma™nkwƒJÅȃ¦ÇVUbšŽU°„bl°ŽkÈ@x™¦ÆÜ™°@„°„¦óa™VUôlUlbXl@nÜV„„nKlŽnIVÞ°Wš„°U@bnm@¥šIVƒ²Ulƒ°VnalzXyl_Vyƒ¦lƒœLlxš„@ŽÞbšKm„knVWanwƒÑVwČº˜@n_ÞV„aVŽÜIœl@„˜KȚ„VJ@aš£È@˜™@km™„aV¯W@_ƒa¯KmbkÇkLmwƒ@Å¥"],encodeOffsets:[[117147,25549]]}},{type:"Feature",id:"4408",properties:{name:"湛江市",cp:[110.3577,20.9894],childNum:6},geometry:{type:"Polygon",coordinates:["@@@ƒkXƒ™@a„UUċlk„Jƒk„™@wVJXUWk°W@nKnwlUlš²ƒ„blU@‚lI„l@„XbW„šxnm@lW@w„wU‚JX¯VU°`ŎóˋkÝÝkÅ@ÇmğÈřmw™aĵV›xUہ»°™ĠǷnýmóX¥ɅĵҏÇ@°²ĊU˱ĮU¤Ç°™Ā¯ɐnżUĊĊĬV@脎@ԃÒU¼l¤nƒĠb„êVĠ°Èy„zVaV‚nUÆL„ašbVl„wÆ@"],encodeOffsets:[[113040,22416]]}},{type:"Feature",id:"4414",properties:{name:"梅州市",cp:[116.1255,24.1534],childNum:8},geometry:{type:"Polygon",coordinates:["@@„‚nԚlW¼x‚¦@lœVl™lLkè„a@zš¤ƒĖ„¼UxlnUKUbÝlU¼lb@„Vx„V„klJÈwV¯š@ĠlÛ˚nƒbkšÆźÞƒUÈôklmšL„¥‚LœW˜„„™nKUkVa°V„x@IVV@x°bUk„a™a@mV@„@y„w‚L„ÑUwVUšV„‚„U‚bÞVVann‚@XwÇÿš¯²aVamkXaÆ»@»nw@¥›UXaƒkbWa¯KUw@¥m@kwmLU»UU™J@kmU@UUWUƒ@ƒyƒanwmçÛl¯ƒŽ¯UƒmKUmƒwVkmÝXbW@XWÝbƒk¯@±‚w@»U@W¯Å@ƒÇ¥UƒU@ƒƒ™IU™ƒakJƒĀ„ꃰšþƒXkamŽ@Žƒ_J°m‚@X"],encodeOffsets:[[118125,24419]]}},{type:"Feature",id:"4416",properties:{name:"河源市",cp:[114.917,23.9722],childNum:6},geometry:{type:"Polygon",coordinates:["@@°VlmX¹laĢÒlm„@„„šV𣂂@¦Ģklynn¼lW°z„W„„°VbÈV@lÆbnn‚JškX„šVÆašÅ„W@™ƒUUw@ƒkaV»ÞkVaVLkmVwƒ»„ĕ™£@yƒblçkKkš›U@k¥‚wX»™kmӃ@Wn¯‚I„`@nlb„W™ý„¯ƒé„ÿlI@™XUmWUwƒ@@UJU„Ç„mKUV@x™„ţk¯¯LWƒƒnUxK@ű»Vwa¯š@¤WX@ŽÛ¦@¤ÇIȼWxXŽƒ@Wx—w›ŽUnVbÅèmVa±²UWl@Žk„lȄ¤nôܼXxlUnVlbVn„lU¦ƒJó»@wnkmU™‚Ý@U_™¤XxmXm¤„ô™b@¦Èƙ¦lJn"],encodeOffsets:[[117057,25167]]}},{type:"Feature",id:"4412",properties:{name:"肇庆市",cp:[112.1265,23.5822],childNum:7},geometry:{type:"Polygon",coordinates:["@@l@š¥„@V¼„Vôۚš@bšV@ŤVLȃlVÈólUX¥mĉ°k„ÿU°@„ƒÞKl™ÿ°KU™„UW»Èw@aƒšw@ƒ„@nm@w›£kÓVUVn„Kš™k¥™£Vamƒ@nkKkbÆǫma—kmLU¥™UmƒÛwmVU™mUƒJ—ÇaUxÇIn`mb@Þ¯b@„nJ@nl„U‚V„lVU„L›W¯—Û`Ç_¯`mš¯I™bĉWċzx±J™x𐝯Uƒƒ_k@™šƒJ@Umb„šXôlLš˜n¦@¼ĊxlUXŽ˜xUbL‚Ġ„UnVĊwlšUš„b@lW„X„‚m²˜@ÞWxXš‚Unb"],encodeOffsets:[[114627,24818]]}},{type:"Feature",id:"4413",properties:{name:"惠州市",cp:[114.6204,23.1647],childNum:4},geometry:{type:"Polygon",coordinates:["@@lbšW°bnnlaš@@wnmÆLVUkÇlƒ@Xk‚V²±‚bnUÆçUaVmœ˜xXw„@WXwÇ»ÈJ@£Ü¥@XW@£°™‚bUx²¼@ƂLVw„mX„°K°Ťlšƒ@wVUnLȃVƒVIky±wkƒKU¯ƒÅkƒ™XġÑۃlwUwlm@m„nKWašÅm›¯óÇmğb¯alĉUwķbmb@lÞÒVn—šmĀŹ@VŽƒbVŽUnmakLm`@xĉkklVÔVJVn—lV„UnmJmaLUbl‚™zmŽkL™a™‚ō@@zš‚V¦UŽV²kJ„nÜU@˜VXUށL@„lJƒL@bݤUnVŽ—b@xVnlK²„Vx°V„xlI„lkVl²k¤@n"],encodeOffsets:[[116776,24492]]}},{type:"Feature",id:"4409",properties:{name:"茂名市",cp:[111.0059,22.0221],childNum:5},geometry:{type:"Polygon",coordinates:["@@‚LnÇlk„KnkÆL„ƒUm™ÈxlUœJló°n@ššanŽš„„a@ƒ˜@X_@mÝóóU@a™aU¯mL¯ƒƒkV¯™ÇVwkw@V±Ŏ£@™™@šalw±Vk@m„Åm¯™ÿŃƧIÇ`ōô¯_UVW°IV‚ƒx@xkX@Žmn™wXƒWa@ƒƒkkJ@kVƒa±„k™kVmxmL@‚¯XXlWVUI@xƒš„lƒIklVȃV@b„šlW@„@nUxVblVxkôlx™n„‚y„šnIƻư„aXwlK„bVnƒŽXb‚L„¤„k‚L—èƒVV¼ƒŽ²IlĠVX„ynz°KVx°@VlœLlblKœš"],encodeOffsets:[[113761,23237]]}},{type:"Feature",id:"4407",properties:{name:"江门市",cp:[112.6318,22.1484],childNum:5},geometry:{type:"Polygon",coordinates:["@@lUXx°JWnnƚXVš„W„X@„šºVLV¯nU‚Vnb™ô„x‚aXmW™XIšŽUb°xlK„l¯œK˜xXÞ°ŽšXÈ¥Ü@„ĉޏU™‚çš»nóƒVma—x‚¯UÅU¥Ý¯@ƒƒç@ș@çĉÅUmU籃ĉKÝxÝ_ÅJƒk¯»ó¯nmèkǀšŽWxœ¼mnUÜġ°@¦@ƒxƒLkŽÇaVnUxV„™šVlnIlbnÆÆKX¦"],encodeOffsets:[[114852,22928]]}},{type:"Feature",id:"4417",properties:{name:"阳江市",cp:[111.8298,22.0715],childNum:4},geometry:{type:"Polygon",coordinates:["@@°„nKV°šb@bôVÞô@n„VlÒôÆUnlnn@lmkmVkƒaÈkÆÆ„™k¥‚ÅÞ»ÆKXkW¥ÅLmÅkamJUkš™UƒVwUmÈbl„K„w‚@@¥Ģ¯VÛnm›»Xw™lƿ™@kbW™—aʵ@óL›l¯ƽ@™ƒƒLn°ƒÆ@nUl‚²kx™b@‚š@šō¤U²@ŽlxUxšÈU°lŽ„"],encodeOffsets:[[114053,22782]]}},{type:"Feature",id:"4453",properties:{name:"云浮市",cp:[111.7859,22.8516],childNum:5},geometry:{type:"Polygon",coordinates:["@@@V„Iš™l@„`V„°Å™šw²I‚wČyĊXša°Jn™°_È`Ü_°˜œX‚KVƒkUUƒVkƒ@mmI@ƒ°a@Ýnam_ÈJVwlĉX@„šlUšómaUmVU°UK™¹@ƒƒWƒXU™™WmÅXm¯IWwkVWlÅLݼÆl¦ƒšÅÅÇl„bUllnknm@kmVmóÅkуUW`—@@„ƒb™ƒm™b@™¯mkô›IkVÇwnš„VƒÅKmlƒLklmȁKƒšVĊK°²„`n˜¤n„U„bWl„xVx™LUx@°nXm`VklVxmnnx"],encodeOffsets:[[114053,23873]]}},{type:"Feature",id:"4401",properties:{name:"广州市",cp:[113.5107,23.2196],childNum:13},geometry:{type:"Polygon",coordinates:["@@Ș¼VxUnĊ¤@z„@šÆ@nÈW°ÈV˜w„ŽUÞVxÞX@ŽšK„šl@ބVaĊbœU@ml£k±lUƒkkJƒw¯UUw±ƒkLUm@w˜aUVmÞ£@a„KkI@ƒ‚KVUW@—ÛVƒmlIU±VU¥™@yğzƧǃƒšƽĠřšÅnī±m@ƒ²¯lƒ°@nÝÆóUll@XnÝVU¦mVV°—„V¼™Jƒn„b@°mbn„ƒ‚@²¯‚¯wVwƒ@@nmxX¤¯L@ŽVLU„m@@l"],encodeOffsets:[[115673,24019]]}},{type:"Feature",id:"4415",properties:{name:"汕尾市",cp:[115.5762,23.0438],childNum:4},geometry:{type:"Polygon",coordinates:["@@@‚„@VxnXWV@š„bVššJ„„V@ÞÅU¥Ċxš£UWU‚wÅUU¥WVUkĊÇnkV`°LV™„wƒƒnU@™„ƒlbĊ¯„Vnalšš@@çkUÝ¥ġaó¯ÅaÅLŻÆUýmy¯ó@ĉÆó„ȯw™ÆXbmLƒ‚@nknVxkx܄ĢҚW„Æl„V°„Ll‚²xlz"],encodeOffsets:[[118193,23806]]}},{type:"Feature",id:"4452",properties:{name:"揭阳市",cp:[116.1255,23.313],childNum:5},geometry:{type:"Polygon",coordinates:["@@V„Ȧ„Æ@X°V@@¼‚x²°@„lÞaWXX@‚aÞWlnUŽ„xVnnL„‚°V„@k‚mĢl@„ak™@mlk°aXƒ±„nwm±™²¯JV²@ƒwW˜—_mƒa„V»ƒU@m¯ĉUф™šJl™„ašbVn„lĸLlƅÛDZwÝ@ĉxó@è™@k™mbƒUĉ°kaƒ„@šmV„„ƒxUš¯KU_mlĉÈVlXUV¦ÆVxVŽVX™¤ĉwV¦ÝÆ"],encodeOffsets:[[118384,24036]]}},{type:"Feature",id:"4404",properties:{name:"珠海市",cp:[113.7305,22.1155],childNum:1},geometry:{type:"Polygon",coordinates:["@@„è@„Þ°V¦VƁ°˜wnb„UÆ»nçÆ@nxܤ²llU°VnÈJސ°UôéšķUklƒô£VVˌKÞV°£n¥ƒ£ȗ™Ýy¯¯mÅkw¯bÇĔğ@Ýn¯ĊƒVğōŁŻƒķJ@Ț","@@X¯kmèVbnJ‚™"],encodeOffsets:[[115774,22602],[116325,22697]]}},{type:"Feature",id:"4406",properties:{name:"佛山市",cp:[112.8955,23.1097],childNum:1},geometry:{type:"Polygon",coordinates:["@@Èb˜Ž„InVVšnUÜxn„šVV¦nK˜lnbÅǬlalL@mn„Ubš¤l¦™šƒLUmUVlԜ¤@xmnVl°_XVVmƒkVmș@kn@VƒUK@°KW£nw@m„@Ux°x°@±„mƒna@¯ƒa„mšIU»˜ƒU¯nUV¥ÞUWmk@Vk¯™Ukn›ÑWݐƒĊÛ@Ǧ™W¯Wݗw›Lk°ƒkL¯wVa™WJXšWnbƒwkVƒ™W@kĊ"],encodeOffsets:[[115088,23316]]}},{type:"Feature",id:"4451",properties:{name:"潮州市",cp:[116.7847,23.8293],childNum:3},geometry:{type:"Polygon",coordinates:["@@°ŽÜknèmx„b„z„@V‚VX@VnV@lšIVVV¼nKlxn@@¦Vx°LXbla„ŽWbœV°£¯™W@nW@™‚aUñVœwWš»@¥ŤÅUÝǓÝóV@ńǎkUVmƒIUwÅVWÇX¹›—@W„¯bkl@nlšƒb@‚kġށn@l"],encodeOffsets:[[119161,24306]]}},{type:"Feature",id:"4405",properties:{name:"汕头市",cp:[117.1692,23.3405],childNum:2},geometry:{type:"Polygon",coordinates:["@@‚@U±°Iš±n²mx²ƒ˜@œWºXÈÆUVx„JUnlVȍ@ŃôUǔÞVçn»VyĢÛVm@»kaÝUǼóšÛÈķKċ¥X„¥Wwğk™ƒ¯@ƒwķKƒkUm™aƒbkš™IƒšVÒ°Ċ@n„VU¼ƒ‚„bn˜`X—„x"],encodeOffsets:[[119251,24059]]}},{type:"Feature",id:"4403",properties:{name:"深圳市",cp:[114.5435,22.5439],childNum:1},geometry:{type:"Polygon",coordinates:["@@ÞLš„@xšbV„šVšK°™X°Kô¥Vw@anU„胐š‚lkĊl@wn_lKnbVmU„aUź@nÿ˜™UmÝѯUƒbk„@ÆkxŻ@™aÇX—wƒJƒƒ¯LķÝUĕ™ó™ĸóêWº@b²nmĬ™Æ"],encodeOffsets:[[116404,23265]]}},{type:"Feature",id:"4419",properties:{name:"东莞市",cp:[113.8953,22.901],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ŏ@ššblKnšykVa‚KnbnIVmUƒ˜kUmUIUә„ƒçmV@bUxó¦¯LW‚¯š™L™UUƒ™a@w™ƒÝKğŚ™ƾ„„ƨÈĠy"],encodeOffsets:[[116573,23670]]}},{type:"Feature",id:"4420",properties:{name:"中山市",cp:[113.4229,22.478],childNum:1},geometry:{type:"Polygon",coordinates:["@@‚XœÒlmšV°ôÞÅ@m„¯°k„±‚@@aX¹¯VݏÇIUmV¯kk‚±Û£mw@‚Őmèżmô™¼èVš"],encodeOffsets:[[115887,23209]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/guang_xi_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4510",properties:{name:"百色市",cp:[106.6003,23.9227],childNum:12},geometry:{type:"Polygon",coordinates:["@@lklWXL@VšI‚l@XnJn@VUUalk@mK@kny@UlU@a°™„ƒUU@VmaU@Ua@UWw@ƒn@KmLm@alkšmnI‚m@an@VIUamWÅImwU@@a@K„X@JVL„UVmUaVkUa@m„@@Ulmkk°ƒUaVUlKXbVwVIkaVmUk@KVk@a„aW¯m@w„¥laœX@KmaškVmnUl@nxVKšInU@yVaVIV@na°KlxX@@_lmXšUV`VIV™V@„n@lšbn@@WUkValK@²yl@„„VUV@@K°L@KU@@UVaXIVVV@naVkVa@K@UUK@UUa™LWa—w@m@K@UVVƒ@mVUUVKnL„mVL„K‚bVK@UUIk›mI@mUIVK@IUK@VkLƒ@WU@mU@WmUk@ƒI@VƒJk@WwX_@amK@UUWkIƒ„ƒK@LVb@mVmakL@J@bU@Ux@xƒbmI@`ƒIwm@UbmKUaUWa¯UkJWV@XƒJUU¯LUmV@ma@kkamKwƒLUUmWVkkm@aVUUkVKnVVUmXK@UW@km@Ukkm@@W@U™kUy@I@aUUmbƒ¤U@kUmL@bmJU@Ua@wkLWWkL@Uƒ@VaU@ƒLUakKWbkUWVkKkLVLUV@JVbƒz@Vƒ„@ƒVmUU@kVmK¯@VƒU_™VWakVmIUKUaU@@bml@XU@@V@LmKUV„mVUKƒƒKƒbkaUXƒKUL@x@V@l@„mxU¦„V@ŽlL@V@Ln@@VV@„nlKUaV@nLUbmJnL@VWLkbmV„@@L„W‚„XLlx„VVIVV@x@V²blUVm„LVUœK@kWWXUlV@Xl`„LX„l@@VšŽƒn@VnbVš@lVUVUÈVbš@@`UXU`l@@XUVm@kš@xmVknUJVXUbmKULmbx@VlJ@LVbkKUbVLÇUUVƒUVmU@VaUkUKƒVUwmLkUUVVlƒbka™XmwƒKUšVVU@@V±Uk@VWUUm»XamU™bƒKk™`ƒ„™U@UnWW_kKmbUVUVmnUV@„nJVUlšUbU@UV@n@JmI@VmbnVUXlx¯ŽkKmnVV@L@V™bkV™Umm™@Ub¯LmlUƒL@VWLkmkLmmn£WmnKU_mW™š™bnbmxƒ@U¦UJU„@Xmlk¦@‚mnUUm@@Jn@lV„ÔVJnIVW„I@a„ƒÆK@I@aVK„IlŽÞnnl@nl`nbÆX²l@xV„@llbVn²ŽVVl@nn„V@IlW@Un@@kVa°KšnÈmVaVXUlaVƒÈU„VlwôUlynIVašan@lVXb‚Iš@n¥la@Kš_n‚@bÆx@XnJV„nKVz@`VXVšU`@bƒ¦UV@VšIlx„UnV‚K„XÈbšVllšbVbnVn@"],encodeOffsets:[[109126,25684]]}},{type:"Feature",id:"4512",properties:{name:"河池市",cp:[107.8638,24.5819],childNum:11},geometry:{type:"Polygon",coordinates:["@@lLVl„bVV@nXVlI@JVX„mšn„W°b„IVV@‚ln„@nalVUb„nW‚@kVkÒlbVKn²°bUŽlV²@˜X@`nb„aUI@ƒ°wlU@aXJVI@aVK@wUamIXm‚@XUV@@bV@Vm„ImnUUwVaVKXU‚nVK@akƒVwV@nL@UV`n@@X‚lnIUJl@X¦˜V@aUIVm@anƒV@UwnL@VlbVL@KVVXUWƒ„wUUVUka@UVJnUlbnalbVVn@°„„LV`Þ@šXVxV@@bVlUVVbXnWlXnmlš@XXWVXJmbUI@V„llUVkn@@VWV@Vnb„@VXUJVnn`lLVk„a„»lVšLnw@WV@lInw@WnU@U@m‚knUVó„K‚wUmUXUƒU@@wVJVIl@XKVVVbVI„J@Un@lŽVLnm„b@U@Ul@nUš°VUVJnnVJV@„@mVU@ƒ@wkUVwkKWk™yUUkU@alkÈ@lJ@x„Ilƒ@UUWVkUw@Kn@@kmaƒVUl™UUL™ÇƒUUKl@UUmL@aXU@mlUUwmKkUUVKVUƒaƒKUnK@U@Vl@XUWU„KlwX@šb@K‚@XkV@UwWJka@aUwmV@U™@@U@wUm@»kLWVkIWŽXnmV@VkbmKƒLUbk™Va@aƒa@@aVU@aVak£@ƒ±UkVU¯V™UUƒJVƒUIƒ@kxmUmWUbL›w@K@aU@@aVU@Kma@aka@_VWkk@UWVUKULWKULUš@KUnƒwVaUKƒxU@UmaƒL—m@kVmVa@UkƒmI@ƒ@KmIkxU@@K™U@mmakI@VƒLkmWkkJ™_U‚@V@L@n˜xXbšKVb@VVL@V@LUbUlmbU@UUWJUb@VV@@L¯K@LU@UVƒƒk@±z@‚kLUbVl@Xm@™akm@ƒU@UšUJU_™VWŽkn@`W@kw¯LmbU@UJUb@zmV™JULmwk@mVUn™lnb@L›Wkbƒ¦@x°nXŽƒb@bUl@LVlUnlbUJUxWakLUVVb¯„llkn@Vƒ@@nVbUlVbUnƒVUK@IƒW@L@bV@nxÆJnXVbUJm@@bnmJ™nkl@b‚nnK@L„m‚@Xx@VVbV@nb@UVVƒ„¯š@bkV@Vmz@lnLl@kŽVbUVm@mI@Wk™J@UWKkXkl"],encodeOffsets:[[109126,25684]]}},{type:"Feature",id:"4503",properties:{name:"桂林市",cp:[110.5554,25.318],childNum:13},geometry:{type:"Polygon",coordinates:["@@nU@J‚X@`XLm¦Vb`lšVXXWš@VblČnVšŽlanLnmVLšK@_Vaƒ¥@kUa„@VmVb„aV@XVVzlVVK@knKVmX£VKšLlbnš@b@llL@xĊôXaV@°È@¤„bn„V@@Wl_„V„U@W„nVamw„wVbn@„K‚VšLX@VmVUxlV@šnVV_nK@m‚I@Wn@@IšUĊ@@wVWX@@I°VVm@wmU@m@IUƒV™kƒlkUmmkÅV@@aV@@Wn_UKla@kšaV„šlVanb@k„@@KlVn@@aV@nIWW™UUaVU@™kKmwU@UImKk@UU@w@W@‚™k@™UkWƒ@mk_W@Ua@a™ƒƒ@—¯ƒmV£@mƒUUam@—kWakƒVama@UUm@nw@alaUmnUlVlIœV‚™šLVyk£Vm@k@UUJkƒK@kmKUw™KkWK@UXImyVwnI@m‚ƒkUlkUKkUVmƒw@kkJWUÈm@_k@@aƒaW@U„UJUwU@@IWKkƒmUUV@nVl@bVb@bU‚UXƒakw@ƒWUkbkKƒbm@™xUlkLm@@wmKUX@‚™UaVW™XVmU@@UUUƒxkmWXkKkUWaUaUb™L@`UL@LV`UXmK@VmakLVbkL‚xUJUIVbUVVb¯KƒV@Xnl@lVXbmÒnV@L@VWKkVUIWJkIƒŽUamUUbm@U„kU@JUbW@X„WxUam@kbVVUnUJmUUV@bƒU@UUV™@ƒVk@ƒbƒmULV¦U@V„U`VLUL@xVbn@UJ@nWJXXVŽVV@bkxVbUx‚Lšš@x„¦@šU‚lXUVVlULV@@šnŽU„ƒb@xl„nJVnlVknUlVUbmŽU@ƒbVš„x"],encodeOffsets:[[112399,26500]]}},{type:"Feature",id:"4501",properties:{name:"南宁市",cp:[108.479,23.1152],childNum:7},geometry:{type:"Polygon",coordinates:["@@lKnbnU‚@Ua@K„L„ƒlJVX@VnL@bW`Xxl@„I@U„Jl@nV@X‚V@nXV„@lK@UVL@JULVJ@nnJlœVJ@VULaƒLUKƒnmKULVVUŽ@nU„š`lIXlln„K@UlJnb@nšV@LV@lwnJ@L@„nJl„@VUbUn@l˜n„KnbVŽV@„wVLUb„xVm@LV™VKXLVKVLXU@VllUX@`lb@bnb‚L@ŽUV@bV@@b@Lœx‚KVanXVƒUUmVUUUaVUky‚UUa„ImK@mUUVUkKU_@W@UVVVIUW„UVaVU@UUKnƒ@k@al@ll@bnL@b„VUV˜X@Vœ@@b‚Knblmn@V_@aUalL@a@akK@kVKUKlwUUnV¥VmU_VWVIVaX@Va„alńK@LVJnalL@LnK„wlVUw‚mX@VXšƒlLUVnblaUmVUVwXU@Wm¯Va@ÞKnw@w™mšk„»‚UVW²a@_mW@U@I„y„LVUUKW@@™„LX@VUV@@yVU@UV@nwUUmJka@IU@ƒmƒVkaW@UwUX@`ƒ@kLWUk@mƒkUUm@k‚UUWkUƒkWxk@@VƒK@nV@UVaƒUUJmIkVƒ@UamLUbkVmamLka™@ƒ‚kmL¯WI@wJmwƒx@akU@aUKmbkaW_nW@_U@Wm@a@wkwUKmƒk@ƒbkb›w@mKUkkU@J@bW@kVWz@bVUa›VUx@„ULkJWbXVVXƒ`@œmJUVU@@Lk@WbU@UJlnXlm„Vx@Ln@‚b@K„LX„WJUUW@kƒaUVUbmV@nnV@n@lVLƒVmLX‚mXkV±@kxÅL›šUbJWIÅJ@I‚mXalkUamKkškL±aVwKƒUU@mÞnbWJX„m„@lbmKULWUUVkaƒbnn@Vl@VVV@VƒbVbnLWLXJWxXLV@@VV"],encodeOffsets:[[109958,23806]]}},{type:"Feature",id:"4502",properties:{name:"柳州市",cp:[109.3799,24.9774],childNum:7},geometry:{type:"Polygon",coordinates:["@@ƒwU™„aV@nVaUVklmkUUmmIkƒ@w„aVƒm@™U@VKUkVUkWV@™ƒ¥@w™™KVwUalw@aUUUWWXI@mVIm@Ua@wVKUKV_UƒV@U¥VK„n„al@„Uš@VU@V„V@aVUnVVIVmUUlan@VbXwWƒX@Va@IlVVƒn@VanVVb„lJXIVJlUXL@U@KmUnÑWakU@mkƒJUI@mk™@wUmmUV@JXaWIXWmaUIƒJƒkk@W„nJ@„ƒaUak@›kkJ@kUKU_ƒ@myUóWUkm¥kUmL@KUKm@k_UmVa@ƒk@@UmU@mm_—JWIUVUŽWLUlbVUJÇVUIVwƒKUVk@mU@n@lUL@Km@@l@L™VƒzJmUU¤m@UbV²U`U@@¼Vn@x@Vš@@VnUVx@blbXIVxU@Wl@@L™aW@kxƒLXVWVk@@U@VmLVŽ„L„bUVULVV‚lnLVxkV@nWV@bnKVVk@VL„VšÈVKšVVk„Unb@lm@@LVxUlVX@Vk„ƒJ@wkIÇ@kl@blVVVšzXllLUxlV@x@„UV@nƒ‚U@UImmUIUV™¯mVk@@V@VƒamnUKkm@@VƒIUJUaUUWLk@UJUI@xV@V„VWVnxƒLUômVV„@VkVVVUnV@UVkL@VVV@bVxla@bkXVJVn„`nU@bƒb@bVL@VnJ@„l@šV„aU@@_lW@UUU@Unƒlll@XLl@@UX@°bVWVanLlknVV@VVX@VVƒnUŽVLmbXJ@nllXX@`VXƒlmaXVWk@Wkƒw—J@„VL@J‚bnU@bn@@bVKUnVJVIVVVL²a@bV@@Vl@nUVakalmš„UL@VUL@V‚a@mXl@nK@UlK„L@Vl@@nkllb@š„Vnn@‚šnV„™V°l„šVInwlKXxlU°Žn@@ƒ‚I@UnVlakUJWkUK@anUWK@_ÞJ@U"],encodeOffsets:[[112399,26500]]}},{type:"Feature",id:"4514",properties:{name:"崇左市",cp:[107.3364,22.4725],childNum:7},geometry:{type:"Polygon",coordinates:["@@@JVzšl@V@Xn@ll@VlnX@@VWLnŽUVmUULVlUV@blnUlnXVV„K‚xnLlb@lnbU@Vn°KVV„I@WXUlI°VXb‚VVbnLVan@‚x„J@_nJ„a@wVwV@@a@IU@UU@WKXwWIXKmKUa„a@U‚UUUk@@Umm„albVUXVVKnL‚a@knƒWƒXImanÝV@„V‚LUx²blKl™nLVbklWbn@JÆIXJ‚IVaœ™ÆKlw²@lUnWWnK„UUK@k@mmU@mnUVaVU„b@lVXVXIWƒƒK@Lam@@KUwnƒWkkmVIV@Xal@@KV@VUnI@›„_UWWUkam@kkm@ka@mƒk@wkJWIUU@WXkW™XkWWLUUƒ@UakLƒW™XV±VIVWUU@anUWaUK@IU@Vak@@UUKWaƒ@m@ak@@wUkla@mUaUklakwVƒ¯¯@WWUkLkKmaƒ™kLUnV`UxWX@Jkn@bmlƒakkk@ƒb@l¯bm„ƒbJ›b@VXn„bVV@„ƒbƒJUkkKWVU@mœÛVUUW@UVUJWXkVkKmUL@WW@U„Vl@XXKW„XJ@XVlmbUxnnm@UlVnV@XVm¦VJb@šmLkKÇbXblVkn@l@bWnX`V@@IVV@ŽV„V°n@@_naÆVVbUVVbUJnzlVUl‚XkV@Vlx@X„VnxƒbƒKUK@b¯VVUV™L"],encodeOffsets:[[109227,23440]]}},{type:"Feature",id:"4513",properties:{name:"来宾市",cp:[109.7095,23.8403],childNum:6},geometry:{type:"Polygon",coordinates:["@@nVlw„@VJU„„IVVUšV°lU²V@„l¤Ub@bUV@b‚@„b@bUblšVa„KnLla@UnUWmXlJXUlKV@V_U±Van@V£nV‚I„yšU@K@kn@@LVK@k@mnVl@VU„LUxVJÈUVIU‚aVkXKVVUXJ˜In`@nnV@Vl@@„UbVnl`n@VL@LnKlVn¦VlôXV‚nz„@V`VL@llIœll@Vb„b@ƒmIXƒl@„l„IVJnbWXXJWb@IU‚nVVn@xlš@nVJ„I@W„U°LUaVUUaVJVIwlKUalKnb@UnLVWU_@KVK@_šKVa„@VKU¯VLVKn@la„aUkU@maVU„J@k™@Um@XmbkyVaUIUU@KV@laVn@KXKWUkUk@ƒaW™UUVw@aXKmƒVaUUkšmIƒlUU@wUa™xUmmU™¯™U@WƒLUmVIUym@UVmUa@wmw@çm@aWLU„™JUIUamKmL@™aƒx¯¥ƒkU¥U@±„k„UVmKU_mJUbkKm„ƒLÅǙ_@WWUXUmaVUkK™„UWW@nVxkUƒxmL@KkKmbUI@KƒLkƃbUbW@UbUJUXV`UnU¦mŽVVkxVLUL@llL@b@bkKVb@bU`m@knmaL@a›@@U—WVUƒU@amK@akkk@@b@lm„VL@VUVUbƒVVXUJUU@V@XV`lLUVVV@nnLƒJVbVlzUVVbVVnUVVU„"],encodeOffsets:[[111083,24599]]}},{type:"Feature",id:"4509",properties:{name:"玉林市",cp:[110.2148,22.3792],childNum:6},geometry:{type:"Polygon",coordinates:["@@VJUXVVXlWX@V™xVnX@@`ššULWŽUXÅbWK@mULUUmJ@n¯b@l@VULVx„x‚XU`VXXJVI„V@nm`@nUŽVXn@lWVn@b@Jn@nU@Lm`@Xn@WJƒ¦U@@VnL„lV@@Xl`nIlJnkVL„w@KVK@UšaVL@bVKX™lUUKVK@I„VšL„a@U@WšLUlVL@bU@@blb@VlbUxVbXUVJ@xVL„U„lV@VU„bVLnKl„XJ@L‚b@an@VanL@`VLšKV_UWl@U_„a@WVInlVUUUVm@I@W@wVakIWm@U@ƒXwlaVbnI@ƒm»Va@aXaVLšU„»@aVa@k™KkL@KmU@WƒzUK@wU@VWUUVUUKUa@mKmbUK@_nWVaUkVaUaVUVLXKVƒVUVmVI@UkKkLm`UkW@UwWW_„UaU@WakXmK@xUXƒJkƒUUWUk@Wl—mJ@km@@aUKzmyVk„a@kkWVUU¯lmU@@w‚kkmV@Vk@mÅIƒ‚Ukƒaƒ@Ub@m@UUU`mUbWaWmb™X™XKWIXUWm@љ@y@UkIUJUUWLUWƒL@UkVUxW@kaWbKWnXxW¦n„m`XLVlUbVbUx™I@JmLUKUb@VW@@bkL@b@VlU@xkš@L@lƒxXxWXX°V@VVVbUVV@UVVbULVnVJUb²b‚aUb@VVVVInlV@VnXaVUšlI„VUb"],encodeOffsets:[[112478,22872]]}},{type:"Feature",id:"4504",properties:{name:"梧州市",cp:[110.9949,23.5052],childNum:6},geometry:{type:"Polygon",coordinates:["@@VbXblVlLXWln„wVV@VV@UnšWUXVbš‚@VWXa@kVK„UaVaVkšUlyX@Vaƒ—VmUwUaVU@UÈymI@aU°@š™nWV@VaVaw@IV@VmnLVK@kmmna@™„™VbVI@aV@XbW`U„„LUVVx„@VbUV@bl@VLXblJn¦lL„°°@n™@K@UlLnK„a°LWbnJ„¦UÒV„UllLlVnKnbWnn„V`„w‚@@Xa±™n™l@XKV_„WVkVa@kVyUa@wU£UW@UIVW‚@@a—wWaX_WKkVmUULmak@UJUI@±m»™—k@m»VyUIm™nmmwnkUmVaVIUn_mW@»Vk„@VwkmmUXa@IƒaVm—mƒ@Wm_U@mIUWóLmUk@laXmmkUK@UmKULUUmWULƒ@VakU™@Ub@bƒ¼™VUKWb@bUbn¼@„mJUakbWx@„@VXnlJUb@x@X@JUnVVUVmkUJ@XƒbV`k@VXU`™LUK@_mKUbm@@b@„U`@nlV@b„UnbVbn@@`VbUbVV¯bm@@mJXb@bVnUllVXUlbUl@LU¦VVmŽkLVb@b™l@V@XlK@V@nUJUz„°mށwmLmlXbWVU@UUUlƒIU@VVmV@@¦‚bXbWxX„WlXVWL@LUmkbU@@LVVVJUblzna@WVnš@@lƒIUVnbV@Vlƒbkbm@ULUKV°ULƒ@"],encodeOffsets:[[112973,24863]]}},{type:"Feature",id:"4511",properties:{name:"贺州市",cp:[111.3135,24.4006],childNum:4},geometry:{type:"Polygon",coordinates:["@@nL@xn@lKVkšwn@„alLlaXV@„lx„bVWV@aUa@aUk@mVUnVl„XL@JV@VxVIVƒX@„b@bl@@`ÇnXVlI@l„xUnlVVLkllV„@nmJUxnzWJ@VXLlŽšLVxnL@l„LlŽVI@V@lUnl¤Uz™Kš@„Vl@š„L‚l„Lnš‚b@VnVVU@k„a‚Knxn@VkVJ@ńUlakmWIUaVanm@_UK@UVWUa@klXam™U@Vmƒ™VIXW„@lUVknVlKVLXŽVXšW@b@VlšnnVL@KXL‚Kn@lb@UnW°@Va„X„WVb°aVa@I¯aUkUaVKVwƒaXk@a„a‚™@wkm@alanUVw@alK@Umkw@UƒaUmU@WXUaUK@UW@UaVWI@¥Xa@w@WWšVƒXwƒU@mKUXUWVU@a¯kl@akU@UULmK¯VUVW@U_m`U@@xVbUz@lUbUlƒXU`WLk@mš²šWb@ށ@ƒxU_mƒXmmamLkUkKVkUƒVу¥mIXa¯KƒbmLkK@V@Lmš¯@ƒ¯kKm¥kIWaUKk@@aVUUaƒ@UwVUƒKVƒX_WaU@@bUJUaƒš@šmbnn@lULmKUnU@@J‚xUbUbU@mX™š¯@VŽ@bnJÇz@VUVVbVxUn„˜UbW@kz™VUlUbVbƒŽUL@lWb"],encodeOffsets:[[113220,24947]]}},{type:"Feature",id:"4507",properties:{name:"钦州市",cp:[109.0283,22.0935],childNum:3},geometry:{type:"Polygon",coordinates:["@@@IlVVlnL‚@œxla„al@n„VLlx@x@bXnV@@`mXX`lbnaVL@blV@b„wnx‚I@xXJ°nK‚l„š@lbnKnblUVanKVb„@lUnJVI„VUb@V‚U@m„L@Ul@Xw„llVVXV@lVnlVn„l@XVlK„@@_VWVxX@lb„U„nV@@JlbnIlmnVV@UwVK@U@k°a@mnIVVVK@nXLÆaVWXVK™™@_W@Umšw@UXWWkUUVWUIVaƒUkJ™UVWbUmU@mkUJUU@UVab±aVaUIUmVKUaVUU@VUUaUUU@W¯XWWw„w@k@Kl™@wkV@U@alK@aX@@UmIUWUIƒ@mmkXU`U_WJUnUJmUk@@amLU@UVW@UkU@@VƒbUWVUk@@wmKkUWLUWX@JmIƒlUkkKWKkLWU@UKWa@bU@@a@_UKWƒUUUmJmw@nV_@ġğKóLmbU¼VÆ@xUXƒ@Um@wklVnUn›lkaUV@„lV²WVklWXXbWlkVkIm`UUƒLƒUU@UWƒx@XU@@lWLU@kbUbV`UXllUV@bmb@LnKVbULm‚šnVVIV`X@"],encodeOffsets:[[110881,22742]]}},{type:"Feature",id:"4508",properties:{name:"贵港市",cp:[109.9402,23.3459],childNum:3},geometry:{type:"Polygon",coordinates:["@@n@VzUJ‚nVŽ„K@XšVš°nVVnšwVb@xVV„knJl™VVUbn„WL@bUxVVXš„bl@lVXkWƒXwWaa@¥‚@nUUUV@„JVkVVV@XUWanknK‚xnƒ¯VyVI@m@UkL@W@Ušk@aUalKnUUV¥@KVkkaWVkUVkUm@aWanI@n@°aUUVaUa@_m@UamaƒV@akU@mV_@ƒa@KWIkƒmLUKƒaUVU@ƒkƒVUK@wUIWVUaVwka@Uka@aV@@aUKVk™K@X@Vƒb™KƒU@JULVLkVWšUL@aUK™b@VUL@LƒxUKmlkImJk_@WU@ƒkmK@UV@„¥XIm@@Wn_@KmVm@@I@aUmkXm@UWV@mn_@mƒUUJWIUWV_WƒwU@mUknVVmxU@@VUV@zU@UVW@ƒK@šX@VLUVƒKƒz@J@VnX@`±bUXVƒ¼™lšn@xmxÝL@‚Ubn°@XWVUxUVVnkbWVXV@Xš`ÆÈ„KnƒlLVanIV`nLVUlƒ²ƒV@V¦„l°¦„w‚b@šnKnLVbVJšIVƒXK@b‚n@ènx@xVbUnV‚"],encodeOffsets:[[112568,24255]]}},{type:"Feature",id:"4506",properties:{name:"防城港市",cp:[108.0505,21.9287],childNum:3},geometry:{type:"Polygon",coordinates:["@@XV@X°°U„lxkbVlVb@nkbVl@xl@@b@n„‚XbVL@Vl@UbV@@JVLXbmV@bVVUXUJU²šW„XlKVb„@VVXKlXšWlXXWV@VXJlI@x„l@nlbn@lln@lbXalIVK@ƒVwœUVb‚U@aXylUX@@aW@U_UJmU™nVKUamL@Kna@aVUkkVWU_ValaV@XK@kV@@W„wVXV@„V„KVVn_lJlUXkWaXWlkXU‚±kU@ƒVUlbœkVmUmlk™¯Ý™™W@mb@¦VxULm™kJUU@ma¯wƒmkX@VóJ±bUVUXÝWk™lWXXlƒxUaƒbƒIğ™Ç@U@mVUKkkm@UJm@XnWV@x"],encodeOffsets:[[110070,22174]]}},{type:"Feature",id:"4505",properties:{name:"北海市",cp:[109.314,21.6211],childNum:2},geometry:{type:"Polygon",coordinates:["@@VaVLnK@IšJVwUaVaUkWKn_mƒX¥WwXm‚LXalbU£UyV„Å@ݙwm@™°l›LÅUƒmk™mwÛaƑLÝUUm@ȣƃV_„Ó@£UƒƒUVƒ„™¼U°W̄™ÞVbXbôx@b@bmV@ǃ™UÝ@@ĢU`m@ŽnxnIVV‚VX„VL@`@bV@@aXbVL‚@XVlKXLlLVl„knJ@I‚WVXXKlVnL@xl@UVVX„a@UV@VlX@VUV@nK@bl@nVVIVmXIV`V_lWnn„@VJVXnJ"],encodeOffsets:[[112242,22444]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/gui_zhou_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5203",properties:{name:"遵义市",cp:[106.908,28.1744],childNum:14},geometry:{type:"MultiPolygon",coordinates:[["@@@UnUlJn„w‚JU°VL@bnVšU„wlJ@XƒŽXVlU@klVUJknl„UllL@bUJ@xULUlƒ„UblVkblbnw‚UXmla@„wV@VK@L@UXaVKVLXWƒUVa@U@Im@@W@£UKUakKWIXU@al@@llUnL@W@Un@@VlUV@VIUanKl@Xb@lmxVb@b°bb@nlJVVnnJ@b@L‚V@ln„@LmV@Vx@blnVK„nlJXIlw„J@҄b@nlK@Un@UL@VVVVUUUVK„l„@VUVL„J@UVUUw„@Wm@™„UV„ÈVlbUb@JšLlŽX@@x„„ƒLmŽk@@nlx@bUJUzVJ„@@LVxUV@bWxnLnVVK@_‚K²xVbV@n¥@aVI@b„@l@Va„Knb@n‚`n„mmý„W@ƒU_šwV@VlVV@Vn@n„˜@nI@Jn@°¦VaUU@™„mVVWVaUńU@aVKnƒVbVUmmU@a@kUw™m@aUUmUUJ¯lakU‚aXaWUUaVƒkk„amkmUnVlULƒVlJ@XU@UJWUUw„k@aU@WbkWƒL@U@WU@@XUKmV@aUVwUĕUJUamUUVUÑm™nIVJ@kl@XalJVn@KVLœ¥@UWIXWmU@mVUKnUWLUKUaWUUKVU@U@anUny@UlUkK@w@a@aVUƒ»UkVw@Wmk—JƒÅmUUVmwXalLXWWUnam@XkƒJ@UVU@U@W„@@U@I@Wl@Ènlw@KXLWb„lVUkalKUU„VVaV@@wnIlaUmkUƒKWU@KkUkLWaƒKUUWUn@VƒK@LnnWJUIƒVkUWVnV@V™@@XƒK@VUIUJ@IWJkX@VVJ™IƒVkK@I@UVaUWk@m„@wnUWKk@mxk@@„lV@b„xmb@x@VUmLkUƒJ@nVV@b@VkLVbU`¯I›l@™U_UW@UU@™™ƒK¯wm@™xƒL¯¥kIƒ™ƒ‚@bkbƒ@Ua@ƒm@kkW@XVbmV@ŽkV@bWbUbV@„¦ƒxXlmVk@ƒ¦™bkaWL@KUImK@wUK@VUI™b@bmK@LÅy@akXW@kbWlXblL@ŽULUbƒ`@U™kUymX¯@mšUJUUJƒL@Lm@@WX@lU„VlšXll„@l@Èk°V°Ž„X@VU@UVll@XUJVXUVm@@VXLWlnV@Xƒšk@mVULnxV@@bm‚kL@VWLUbU@UVm@ƒb@ķ¥UnmJ@UUVƒkkJUšlÔU`UIW@ƒ°kLUlUI@WVI™U@mWKkXk@ƒ‚WU@bXšW„@J@xX@l@LVl@xšLVxXX@x‚KnxVknb‚KVV@U„L„WlXU`@nUlšX@llVXšVU„KlkUKlI@anKVLXKVaUIVWV_VK@VnLlU„»VKVL„m"],["@@@KlKkUUVVX"]], encodeOffsets:[[[108799,29239]],[[110532,27822]]]}},{type:"Feature",id:"5226",properties:{name:"黔东南苗族侗族自治州",cp:[108.4241,26.4166],childNum:17},geometry:{type:"MultiPolygon",coordinates:[["@@VV@XkV@bUbWJU¼Vb@Vnb@bš„@J@bƒL@LV@UVƒlUI@a™KULVb@bkJmx„šlLVxknVJk„‚xnKmnnL@bn`WIXlWLU@UxVbUVmKV„XI@JVIVJ@U„L@Wš@@UmUXUlV„UVJXImm@K„L@UVmVXV‚„LXblKlV@LXV„LlVVnkbmJ@xnXl@šbXa‚@Vana„ÒšL„m‚VnIl‚Þ¦°k@b„@@lV„nJlUnš‚VX_„@lVlK„šV„UUxVLVWVIXJšUlnnWlI@KUaUUVKn@VaVXV@na@ƒmw¯@mUkJUamI@lk@@am@@I„ƒUmVImUUw˜™@anUVaUU@LU@WaWUXWW„wV@VwnU@L@ynbl@@X@a„J@nW@@Vn@„lVLlxnI„lš@@UWKUƒnIlJXIVllIVVš¼XK@aVI„V‚@@bn@VKXLVKVVVInw„J@UWI@mX@WKnI@KmU„UVJUL@V„KW@@k„@aU@@W@InJWUXwWI@Wƒ@¯wkaVaUIl@nŽValIXWWI@UUm@anwWkXWWIUbk@UJmIUamKVUUUVVama¯VkIVVUlKnXVwX@@WVaUUVa@IlƒaVmƒkna›wk™UU@ƒU@mUVƒšUVwœl°LVbnJVU™¯la@mX@@UWKXU@aV_V@@JlkUƒ¯@V™nK@km¯k„U@ƒWUW@mmƒU@™kmlU@wkL@WƒUkL@VmLƒJ@b@V@bknUUVK@UVKUK@Uk@Wa@LUVVnUbmVk@@UU@@aƒV¯K@U@UU@WmUL@aU@WV—w@ƒ˜I„xXll@UX‚K@KXXVJna@wWaƒ£naUKV„m@UU@mUmalm@@XkVm@U@VƒLmWU@kkWxU@@bVV@VkXVlƒVƒ@UUk@@ƒmI@KUw„m@UmVƒUUwU@lwkV@IUa@mUaVIVKVa@w@U@™UJkb@n@bmJ@XmlVUxWXkJmUkUUVW™xUlU@ƒaULUšmbU@@‚WXkmƒL@xUV@nUxÇm@„XLWbnlƒnV‚nnUV˜U‚nVVz„@lbUVVlULVb@V@nUJkwm@Ux@bWbUK@UULka›JbƒU™U@U@lUK@XUJmn™J@bU@UwWa™x@zkJWnUJUUVšVV@bXn@xVb@J™L™m@X™w@`@bkb@VmXUV¯L@mW@@n@V@‚ƒL@K—IW@@aƒaUx¯@U„m@XbW@@L„V@bnVWVkKUzlV@bÆa@lnI@VV@@LnVVKUaV_VJVbnU@bn@‚‚nX@yVIVxXKVLlUVaXU°J","@@@KlKkUUVVX"],["@@UUVUkUmV@ln@VXVK@K"]],encodeOffsets:[[[110318,27214],[110532,27822]],[[112219,27394]]]}},{type:"Feature",id:"5224",properties:{name:"毕节地区",cp:[105.1611,27.0648],childNum:8},geometry:{type:"Polygon",coordinates:["@@UkVƒ@k‚W@Xn@@K„KVIVVIn™°@nWVzšl@V„_VaVK@kKWaXklaX@lW@bÆz@KnL@ašaVJ@UVL@xnLVJ@LXKlbša„¥l@nUWk„wƒ¥U@VaXa@amLkUƒKmƒ¯kƒmkIUaƒKUIWƒkKm@anw@mlwXIƒmƒUk¯@a@amUƒ`kkKWVkxmUUak_mJmw@w„mXUW¯X›_@WnI@aVwkWWýŃU@WLkU™aUbVV@lUVVnm@kUmV¯™kK™LƒwmVUUaWV™aaWw¯wƒÈ@VULUVUUƒK@nWJkI™l@Umxnbm@kbUJƒa¯bUbVxmLUV™aU@VUUWxkVVV@bUV@XWbnlUbƒbUJlbUV¯b@z„`WbXnmbƒaƒwUwVWUƒbUxmbU@Uam™@Vƒk™VaƒwVaUƒWI@mUKóz@lUlÅ@WIƒb@xXxml@XklULWKUmwUa¯KUXWJkaULmKkLWbkKUVƒImƒƒWa@kUaULƒW¯LƒK¯@kbƒL@b™x@J@bmnnlUšlzU`U@@Uƒb@„m‚n¦°bU„Vx@bkVm¼mx@mk™mVV@bkxVn„aVV@bU@mL@b²`lIVV@lXLlš„bVxn@@bl@XllIVšnbVšn°°wlbXw@mVa°lVnU@mš™VLVbn@@b„@@WVnUV@Xlxn`VznJVb@L@bV`V@šUnwšU„@WUXKV@UUlmUUlaXalLšm„bšIVbnJVIlVVaUUnWVXn‚VL‚k@ƒnWnblnlb²x„xVKVXlVXLVW„LlUVJna@wVL„¼@JVX@`@nnx@nWJU@Vx@XXKšŽUblxUš°„LVKVVlL@KnbVUnJ„IlUšƒnKl£VW„x„IlJ@nšVÞUVVnb‚VX@V_°lnK","@@@UmWUwkU@Um@@VkL@V@„„‚V„VkV@nbVa@ƒ"],encodeOffsets:[[108552,28412],[107213,27445]]}},{type:"Feature",id:"5227",properties:{name:"黔南布依族苗族自治州",cp:[107.2485,25.8398],childNum:12},geometry:{type:"Polygon",coordinates:["@@‚V@IöalK@UV@@KUaVIVVœLlaVbVWnX@‚@LnUlxl@naVLXVVaVU„J@lUUanWWI„@VlV@Xbƒb@V„n@VmVVbk@kU@V›V@X„J@zn`ULW@kK@_WVUK@LUb@Jlxn@nnWlU@@b„x@XVVU@UbVb‚@n`VI@VVLUlUIUV@KmL@VV@XIV@@lVLVmXV„@WLXLW@U`šnkb@Vl@UL@VVV„L„llX@`lIXb„J˜IXW„L‚aVL@ŽXXW‚Ģ™b@bmK@L@°@Vnxmxšn„K@xVn@VkL@V™Lƒakbl`VnnxVnUlššV@@VVXV`@šœk°JV_UalK@U@aUU@m„IlVnK‚V@U@wnaƒw@akU@ƒl@nwl@XLmV@xnƒl@VXUb@V@JlL„UšJUI@UlWUƒnLVUUaVwV@XKWkXJm_@amKnmmLwlƒUIlmUwkKƒ™nwlI@aUaVKšL@bVJ„kVUU@@K„K@a@I™ƒ@ama@UUaV»XIVa@alU@WUU¯IWVUbkVUKWLUwUJ@zmWm@@amVUaUIU`VbULmU@KU@@UmJ@kÅb@akUVylLXUmU@aƒU@KX@Wan@Vƒ°@Vw„b@bX@˜J@L„K@@U@mX@@n°KVUnW@Ula@a@_šx@WšnšK@IUa@wWm@aUUU™VVVIXmlI@yšwXbVxV@@ašInmVI@WVL@k@VšV„V‚aœIlbVK@VVLXa@aVwn@lxVI@m@UUaVKUkVUkaƒ@UymUV—VUmmU„mmkXaWK@ƒÈnVw@mVU@w„KlnXW@V@naV™VKUk@KVIUWƒ@mk@KXU@Um@@lVƒk@UVJna@UWaƒL@a@ƒXa@kmmVUUk@mkkƒamJ—ImJUUmIm±aUUkambkamVUU@VlbUbVVƒxX„WVUU@VUakU@UmUV‚U@mnUVVnUbVJ@b—UW¥kLVamVkUaWJU_UVWKk@@nl„UVVJUXm@Vm@UnVlmbnmJUbULU@@UUKWVIWxnJVb@xUL@bUJWIkxƒbkb@xVJƒbmU@kW±LkKUkVa@a¯am¥ULkalÑlKXUWƒXƒaVakImVƒ@ka@UUƒJ¯aƒX™mmb—KWU@wUUƒaUa™KmU@UXlWb—¼WLUKUb°„UlVbkbVL@VƒšƒJ@nVlUbUXmJ@VX@lbUbU@@bWb@VnLVJ@bVVUz„ŽVL@lnL@b™VVVULmKUk™Jkbm@ƒxVb@V—kƒKVnnV@b@ŽWXU‚„nV„l‚VVXVJUXlVXbWV@VU@Ubk@@KWbUUmL@JnXV°XJ@_‚`UbkXVVlÆkbƒ@VLXVV@‚V@k„KXX@`V@@n"],encodeOffsets:[[108912,26905]]}},{type:"Feature",id:"5222",properties:{name:"铜仁地区",cp:[108.6218,28.0096],childNum:10},geometry:{type:"Polygon",coordinates:["@@°a@aÈbVUlU@aVKnVV„VUlyX¹lWVa@U™VƒnUVU@m™@mUl@„mÞw„@‚xnIVbna@KVI‚J@kwV¥ƒUXÇVkVW@kkKWU@aXUWmnIVa°VXbmL@VVbnVVVUb™VbšJVbVKXkVKVanU@aWnWUWa@U™nk@mVIVK@wXxlLXbVJVlKœbl@VI@mšaXalVV„VbX@@ašalnkx@b@V‚b@Vnx@bVVUXn¤WXn@Vl@Vlzn@š`@I@KUU@ƒV£namVkXa@aVK‚nnU@anVlKƒa@UUU@amk@»kƒU¯@aš„VWnkWmkImU@akaVm@»VUV@UKnkW¯XWlkUKnIWaš@nmlIXmWUnwUwWm@wULmaUJkIUaƒaWa—klwkwmJmU@bkJ@XUJ¯W@XbWbUKUkWJUUVKnn@UmmXUWa@mU@@UI@WmXVykwm@kaULWwU@¯ƒlKUUVU@mU@UkmaUbmV@b—š‚xVnVUJVnƒ„@Jn@@bl@@knJVblInV°@nx@„mbU@UWUbm@ULVVVb@LkJmXkm™VWIUJUXUKVwƒV™UƒŽkLkUƒ@W`Um™kVmIUƒ@kƒ@@a¯lÝ¥kmJUƒn™KƒÑmbUb@Wb™ak@mWU@UbƒUVVkLlbUVƒkXaWK@LkxÇmk@@X@J@Vƒ@@X@VUV@V„IWln@mbXVWXkKWbnxVUnV„ƘInl@XUxVl„¼UV@b@b@xlLkV@VmzmV@b@VUVVLXVVbVLXKmVVLU‚@nnVWXXJ@V›¦UK@LUmkIWbk@@lUImJnšVÒVUnVVbVIVĖUxV‚@bnUVL@WV@@X@V„KlXXaV@@bƒlVxXVVIV@@WkI„UVKUkVmlnnŽƒbllU„VbXVWbblVkb°ŽVInVVV@bšnVx@l@bnVVnUŽUam„UL@bƒVVÆUbUXU‚ƒn@šVVUb"],encodeOffsets:[[110667,29785]]}},{type:"Feature",id:"5223",properties:{name:"黔西南布依族苗族自治州",cp:[105.5347,25.3949],childNum:8},geometry:{type:"Polygon",coordinates:["@@VL@Vl@@IXW@kVUVbnW@XlKVVnU„VlL@b„aVbƒb@xX‚°ÔUxV@kbm@VxkxWJœ„V¦ƒŽ@ÈnšVKšxWXJmV@n„Ò@xVbn@@blLk`VX@bššla²JVUlnn@U±lw@wnw@mlwVIX@@m@klKnk‚a„KnwmmXkƍVm„Uš¥l@nb°n@„aVwVmVIVnI@a„¯@mšU°ƒl@@VnI@JV@UV@b@IUbVJmXöºƒzllUbVa@aXUl@„U@llLnKVaUa@UmK@UšwV„bnKV@VwVK@UXƒV@Vbn@‚w@U„WnX‚@„a@m„I„™@UUKlaUaVk¯ƒVaVLXK˜»XaWk¯mƒkğwmW@mIƒVkwƒJUIšÇVwU™UkVKkƒm@UkmU@WÅwm£Vƒ„m¤¯IkJWa™_™lUbmJzÝJk„ƒUÇVU„ƒ‚@bU„Ýn™m¯LUb@`mL@VkL@VƒUmmk@UU±Umka@kUƒ@ķymUkk@mmkÝmUaUakImV@V@VÅLƒ¦ƒJUXmJXšWb@n°Æœx‚¼nV@LlbUŽUbmL¯@ÞbV¤nbVx@bUVlblIœ™@KVVUnVJUn@VlLUlmLUUUxmK@I@@VW@@bU@UJmUkLVVUl@b@V"],encodeOffsets:[[107157,25965]]}},{type:"Feature",id:"5202",properties:{name:"六盘水市",cp:[104.7546,26.0925],childNum:5},geometry:{type:"MultiPolygon",coordinates:[["@@ôyVL@nXJV„Ub„x‚bUŽlšU„@ŽšnŽVbV@naVw„a‚VUXVx„x„bnaWmXaƒ_@y°aVUkaVI„aVamkXa@WVU@aUUlUXwVV@UVšbVUnKUwVa°a„bVIlan@manw@VšklJXI@m„LVVVUVK@U„ǃk@KUa@UkaVU@UVWV_XWVXVWlLXKlLXaÆKšwVL@akKm@Uwƒ@@XUVk@VUI@wWK@aUV™I@UkK@ƒmL™Wƒ@kImJƒUÅVmkXUW@UJkx@nmx@xkxV²m@kmUV±Ikb™™@aUWl_kK@am@Ua@wƒÑ@mnUWIX™wULm™@DŽU¥›ƒXIlwUwn@laU@Vw¯ÓW@w„aUaƒb@akKƒUmVUUkL@WmXUaUV@lWX@Jk@@UUKULmLUJmzkKmVX°VšUnWKUL™ƒƒL@mU@UnVJ@b@„UV@Xƒ`m_@l@@bmbXJmnnš@°˜wnn@ŽVLX@V‚@nVl@nk@@b‚l@nn°WlXzW`XXVKnUlxVbUb@‚V„Xb@Ž‚VxÈbVlnbmn@ŽkVUL@„ƒŽmLUVVL"],["@@@ƒ@UmWUwkU@Um@@VkL@V@„„‚@„V@VkV@nbVa"]],encodeOffsets:[[[107089,27181]],[[107213,27479]]]}},{type:"Feature",id:"5204",properties:{name:"安顺市",cp:[105.9082,25.9882],childNum:6},geometry:{type:"Polygon",coordinates:["@@lL@bUK™xÅLWbkKWLkKUXUWWXU`UX@VUVlb@VVb@L„l°xXx‚bšbXUVb‚VnU„xšKlL°šnUlVn@UmVU@kUUVašblVXKV@ƄXþlXUxnU@mVK@_@ml@UU„@šblU@KnLVyUw„@@UmkšWVw@UVK@VXzVK@n„VVUUW@kVJnlaš@nKW™kaWL@U—™õb@JU@mU@@_WWƒL@lUU@WUUK„@lakÅUUlWVa_@`WIU¯mW@InKVVXa@Ll@VaV@@UXUWakUVWUIUW‚UkUƒƒmVXW@@amUUm„L˜l@UUa„wn@lašIVlnLVKUUšU@amK@kUKƒVyUU@aUImK@UXa@aV@VakaW@@UnIVWVaUkƒb@mWƒX@Vxm@UaU@W„@VULUxU@mLƒaUŽ™x@VnL@VVbUbmLkK@kƒVk@WV@bUbVakk„yõ¹nWUIVa@J@aVUU@@ImJ@Uk@¯„™V@nƒ°@bmJUUJUnUxƒbm@¯Žmak@™¦ƒVUnŎWlnnmxƒLbmlkL@l@nWVnlÆU„VnIlJ„@šXnK@„lL@VšJVU@bXL@xVJUl@VU@W„@Vxn@"],encodeOffsets:[[108237,26792]]}},{type:"Feature",id:"5201",properties:{name:"贵阳市",cp:[106.6992,26.7682],childNum:5},geometry:{type:"Polygon",coordinates:["@@nŽlLX„VJ„LVblJ„n°ln„„LlVnKlU@nUUa@WlX@l„n@‚Vb„@la@a„„šlJ°¦„Kšwn@°x„LVkUmmwUmk_la„bšK@UlK@UUm@wƒL™mnwmw@U@¯@KnL@aša‚ġXWW@UKbƒKWX—JƒIWakJ@_kWƒkƒKUU@UVKk@@Ula™mV_X@WKXKƒ@WUUnUK@kU@WJU@@UnK@LVUVJVkUK@UUJm_@UaVaV@UU@Wƒw@aV@Xkmmm@kw@IVa@KVLXU@`lLX@VKm_@yƒI@WœU@UlVl@UanU@Uƒm@U„aWaU@Ukƒ@XJmXVbkV@ŽƒIUVUbWUUKmbk@kwmV@K@mWUXUakb›KUUUJVb@LU@@VkL˜š@VXKlbXšmL™@kbm‚UI@lVXUVƒU@mULWy@UUL@VUx™Xnl@Vƒ@VxUzmK@LkV™aƒ@VVk@@n@`UL@nmV@bmJ@Xœ`WX°WVƒn@xnxnIl`VbnVlwXUlLl‚„_nV@b@bl°„V„nWJkx@nmx@b"],encodeOffsets:[[108945,27760]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hai_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"469003",properties:{name:"儋州市",cp:[109.3291,19.5653],childNum:1},geometry:{type:"Polygon",coordinates:["@@஼jpnr’``ŽpRVHʘ̤žZt^JÖA˜[†CâlTébQhRPOhMBcRSQiROE[FYdGNOEIH]MgEAMLLIAG_WMCSL@ED]PCLYC[ZIHgjSxJTMbHNEFCMEE_HSDFHSLECRNSFDRICHNADGPI\\RZGIJTIAHLDQOHG`GTNCOIC@eIGDWHIS[kiE[FMbECZS@KKS[FDWsCeRuU_DUQNOE[LKGUBM¨EDQP@HWHGDImXƒCog_~‹I_fGDG|QDUWKBC\\ore|}[KLsISBHVXHCN`lNdQLOnFJSXcUEJMCKSHOUMDIm_‹DI`kNDIGEYFM\\YPEEIPMSGLIKOVAU_EBGQ@CIk`WGGDUM_XcIOLCJphHT_NCISG_R@V]\\OjSGAQSAKF]@q^mGFKSW^cQUC[]T}SGD@^_ˆaRUTO@OHATŸ”"],encodeOffsets:[[111506,20018]]}},{type:"Feature",id:"469005",properties:{name:"文昌市",cp:[110.8905,19.7823],childNum:1},geometry:{type:"Polygon",coordinates:["@@€hIJ¤Ī¯LQDaFßL[VQìw€G‚F~Z^Ab[€¹ZYöpFº lN®D´INQQk]U‘[GSU©S_­c‹}aoSiA£cŁ¡©EiQeU­qWoESKSSOmwŸćõWkàmJMAAMMCWHGoM]gA[FGZLZCTURFNBncVOXCdGB@TSbk\\gDOKMNKWQHIvXDJ\\VDTXPERHJMFNj@OwX@LOTGzL^GHN^@RPHPE^KTDhhtBjZL[Pg@MNGLEdHV[HbRb@JHEV_NKLBRTPZhERHJcH^HDRlZJOPGdDJPOpXTETaV[GOZXTARQTRLBLWDa^QAF`ENUPBP…\\Eji`yºEvåà"],encodeOffsets:[[113115,20665]]}},{type:"Feature",id:"469033",properties:{name:"乐东黎族自治县",cp:[109.0283,18.6301],childNum:1},geometry:{type:"Polygon",coordinates:["@@ªVLP`@PEdNRAHOPEAKHEVL`GZBJfvdTAXNNTZJFPrHHNpKTD\\ILHbEVd^J‚OHLh@NNBnHP`\\xH@NBRLJTlŽNv_^CTLd@bNDVFbxdFV€UPBTKOGEOUO@OEBXQP[H_EI\\EbeYa@UO_J‹MEJ_IEDKJUGMDcNUd_FMTEJSGoZ]EIYGO[YW‘gEQ]a@WHEDQKUSDUGAbYBUpSCYNiWqOSQEoF[UcQISWWNMSDe_cLQ_UBiKQOOASQAWgS­ā]ZaŽSPÝZ]XMXSŒ[^oVËNgNKlE RôEø"],encodeOffsets:[[111263,19164]]}},{type:"Feature",id:"4602",properties:{name:"三亚市",cp:[109.3716,18.3698],childNum:1},geometry:{type:"Polygon",coordinates:["@@®ĂhTBXTRPBRPjLVAR`dKf`TC‚NXMTXRJVdE\\FpTRrPjXZMTDVoZABaVHTCLVCRGF@X^bFR’hZXP\\ZHHMA[^wBWXJlW¤EJ[bCTOF‹WWMm@ILMGWQ@DQ^QNWFSHEbF`OXNbO„VNKTEPDTLTCCVTREfvfEHNbRAENH^RJXCFHNFRpVGHWISDOTMVCZeGamaLoLÛD¹¹ėgsia{OųE—Tt‰lɂwr}jŸR±E{L}j]HąKÃT[P"],encodeOffsets:[[111547,18737]]}},{type:"Feature",id:"469036",properties:{name:"琼中黎族苗族自治县",cp:[109.8413,19.0736],childNum:1},geometry:{type:"Polygon",coordinates:["@@bRFnHNbHŒgN@NPEnbXP@bND`NT\\@\\QZb@`@J]V@XhžDpW„nCJGHGXO@CR§FANHVKLF\\MPVR`CvVfQtDPKpGHG@S`WJP~^dSTHWX\\RHTFACQTIAUPOU@MG__IaYSFQK‘NSbORHXCZeTFJg„B`YBMNMFi~IVDV[tGJWXGDQRGF]ˆJrALgESLSAYDGIaFeXQLS\\MKSLSQYJY}eKO[EHiGSaK[Yw[bmdURgEK^_kcSGEOHKIAS]aFSU@Y]IWFUTYlkP_CUOUEkmYbSQK@EMWUuAU\\M@EpK^_ZMDQ^OXwC_ZODBrERURGVVZ\\DTXcFWNIAWJWAYUUFYEWLQQaCIZeDM`cLKRGpanJZQd"],encodeOffsets:[[112153,19488]]}},{type:"Feature",id:"469007",properties:{name:"东方市",cp:[108.8498,19.0414],childNum:1},geometry:{type:"Polygon",coordinates:["@@ºŸx‹JYZQ”IŠYXLl@dR\\WZEn]bA\\S~F`KXaDeTiNO^EEKWEDQXITBXaWaDQMUJOIaTWf@NJV@dSxGZ‰Fu_@WMKAUˆ}AQ@MwG_[GOAmMMg@GKP]IUcaFKG[JSCoLGMqGEOYIMSWMSBucIeYA_HUKGFBLOFGPQBcMOF_@KO©UAtERadwZQ\\@ÊJÒgòUĪRlR°KĮVŽLJ"],encodeOffsets:[[111208,19833]]}},{type:"Feature",id:"4601",properties:{name:"海口市",cp:[110.3893,19.8516],childNum:1},geometry:{type:"Polygon",coordinates:["@@ńZƂt̬æßFuz¹j_Fi†[AOVOFME_RBb]XCAKQKRSBQWSPY\\HbUFSWSPoIOcCOHIPkYCQ]GdGGIFQYgSOAQLK`MFUIGa@aQ\\GGUFcHKNMh@\\OYKAigsCgLSF]GOQO]@GM]HyKSHKPW@Pxi@EMINYREXWRQ@MQcFGWIAwXGRH\\yDI`KJIdOCGRNPNtd\\UTMbQYi@]JeYOWaL[EcICMUJqWGDNZEXGJWFEXNbZRELFV]XQbAZFrYVUBCLNFCHmJaMIDDHXHEhQNXZ_TARFHVB@DTQIRR@YHAJVnAbKFUEMLd\\c^ÍÞ"],encodeOffsets:[[112711,20572]]}},{type:"Feature",id:"469006",properties:{name:"万宁市",cp:[110.3137,18.8388],childNum:1},geometry:{type:"Polygon",coordinates:["@@^J@ZTVbET^JBGLFPTHld]`FLQhcVanx\\\\ZbLHTGj\\FLP~fIZRZPVTQFSVAFJE^NDLEE[~LjsxVTG\\NZZNGlLRRGLJTV@hPZANN^@T\\NEPPbDZXO`d^HSvcJDIV\\XZAJUFCLNP@PQ¤@[ïKLÑIÏ]ÇE±I{uƒ­YśUćFcYUmsVeBSVgB[RO@aYYPO^]@UVaNeDShMLG\\EfFVE\\F`"],encodeOffsets:[[112657,19182]]}},{type:"Feature",id:"469027",properties:{name:"澄迈县",cp:[109.9937,19.7314],childNum:1},geometry:{type:"Polygon",coordinates:["@@T\\GJCXJH@fJDDPNCNJENN^NLHBNSx@DDYbBLLDRbjZTj@`XXTlG^Xr@PJLW\\WLTlWR@HDJTD@X_PO@STMDNTMVV@NLDM`M\\XM\\JNBH[PYZ‡úYzŸ`Ċ\\ÎÝd]c[NKVFLEBaUmBIZGQ@JQSR@CUAEGBQ`SWYRMFgWGCGJCbNnIDGMEDKVAZUEqBYRa^WEUFKYQMaFWXEHIFWMYHCrXVIIiaK@aMCUYNSIISTwXALKH@XWXIEIJQCG[IEQDE_XSBaa[AIPW@]RS[FWS[CD]PEBYNGFSaSyJG]@ugEUDQlGHiBKHUIoNSKqHFaPMICK]UUHIPDJMuCA[SCPIDIOILGAEmU[POPBVSJDREBGS[QXWSGcT}]IO_X@TGHoHOLCX\\ELT@LYTD‚aFENF\\lj"],encodeOffsets:[[112385,19987]]}},{type:"Feature",id:"469030",properties:{name:"白沙黎族自治县",cp:[109.3703,19.211],childNum:1},geometry:{type:"Polygon",coordinates:["@@D\\RV]dTXELnHr]^@LETBBRTHPi^[@U`QTHDJ`MGSogDIPKdJ`WVNHCXHl_DJR@AH`FBVPUJLHKNTJOFFZON[ZEHFCJlMJ_ŒCn`CJVNGPLTNDFIdVTWEIPmRKMc_kDMWGGUTAtJLK~\\f{pqD[LAVXRCH{HC`eŒJ`}@W^U@I@_Ya[R[@MSC_aMO@aWFmMOM@‹haGGMEmaQ[@MESHaIQJQ……MckBIw[AOSKKAMPSDSLOAV_@@`KJRbKRDfMdHZERgAWVsDMTUHqOUr@VQXTT@Tƒfg‚L^NH\\@heTCZaESNObHPƒHeZF\\X^ElM^F^"],encodeOffsets:[[111665,19890]]}},{type:"Feature",id:"469002",properties:{name:"琼海市",cp:[110.4208,19.224],childNum:1},geometry:{type:"Polygon",coordinates:["@@TP\\pATHTGlZDJGAQjE\\Rb@jVBDCN`JZ[NCNHNXbULPrP\\KNbMTLjJJRFP`“pNLZz^FLRHjVPZ@hxVKbHBHMNNJFRlLzGPnNHhIrHHADcPWdUAmEMVQDSKYHY\\EhBN^HpXGNDBNNBnIß‹Å_g{³So]ã@ORO@KMEDIVYB[WJUICudGTc]P_YWaCOOMFS[]@MMYBgOU@ISHKQQkKMHYY[MSHwUit}KF\\KFMCF]EIUBETSROUKTLT[NKTWREfJbCHBZKTFTKh"],encodeOffsets:[[112763,19595]]}},{type:"Feature",id:"469031",properties:{name:"昌江黎族自治县",cp:[109.0407,19.2137],childNum:1},geometry:{type:"Polygon",coordinates:["@@`ZĤd–`òüˆ˜ “BSPGP@VSbQ`‡@]HC~T^SE]N]FkW]E[fY„GGOPaTMbFDYfS@g[MGK]h„e@SSSRW@UVqrPVGNStCXUhBFQGYNcCeLQQaLI@_`@EUwcEaCUaMc@SK]Du`MSkKI‡~BVNL@X`‚EvYŠwHcTU@MIe@SXJbIPNVCRXbWbSAWJCRXFFL]FMPSjCfWb_L}E[TaBm^YF[XcQk@WK‰Z“JYRIZwŒ¹ "],encodeOffsets:[[111208,19833]]}},{type:"Feature",id:"469028",properties:{name:"临高县",cp:[109.6957,19.8063],childNum:1},geometry:{type:"Polygon",coordinates:["@@jD`hNd\\^dZädĒH´Op@ˆùZY\\OAGIMN[[W_NCNMKU@NUMSNCTSP@`O@WSCCI@GXQSkXKX[IK@OWqH]SkWW@_SiiYQaKCAKZaCCw@MTGAMKM]FMMIMDSM_HGHRPKCBGSJJIYH[QOJCHMBDGQJECMTDQKFGTCEGTF`NFEDMFaGSNwIiTGhYJD\\KZODC^@FTKND`XBHKJNKFBNhG^FJMPcHEZF\\QPRjQTAdgNOPgQaRSê"],encodeOffsets:[[112122,20431]]}},{type:"Feature",id:"469034",properties:{name:"陵水黎族自治县",cp:[109.9924,18.5415],childNum:1},geometry:{type:"Polygon",coordinates:["@@R]NC`YL]FoN@V[vBXVFNL@TRZalnVFVP`DlOZkVSXEE_F[EUFeH[NKTgfCbMVU^@P]ZObZP@\\QhATUfAtUasñiāEoI]eYǯ@aKmaeƒWuCºKÜKpnbHbYfUDSNCPJTRAHJTDJSfDNLHXC``VBNGTYCQDIXMDSP@xLNEFRNXBIpVNLXah@RgF@`qOML@LJNSPLbaHAh@Jdj"],encodeOffsets:[[112409,19261]]}},{type:"Feature",id:"469026",properties:{name:"屯昌县",cp:[110.0377,19.362],childNum:1},geometry:{type:"Polygon",coordinates:["@@\\OnVBFKHPJCJOJTDB\\vDINOCGJVVL^JDONEbrGTLpMVJLGjAHGRkVChF@vH^zIbTETMHAZOFC^\\DXT\\EffAP\\PdAV@UIYfS|S@YPICMeM@sC[_A]VQEwyHSMuNcAUlQJMVGMS@mVBZPFO\\CSFQK[LqDMACiUa@[QiFBRIHYCHkGSBS[oSOqB‡IE^QHCRWHIXsHU\\UC}JEjMNAN_ZƒAIhSEYfWDQGaPMTL’ERZTJb``NHV@"],encodeOffsets:[[112513,19852]]}},{type:"Feature",id:"469025",properties:{name:"定安县",cp:[110.3384,19.4698],childNum:1},geometry:{type:"Polygon",coordinates:["@@JjDNdJ\\FbKPXfZ^Ij@RZNaVSc[MsMOHQPDJcLIJ_zCG[HQxWJBHXdENRR@XQFWZQQGOFSWUCI[WCJuRGLXNMPLhCl[Ta@SqGgJMGOmyHkKEQMINMAGaGULgwY@UOGiKQ]EYyMK”oO_QEIIKiNSMa[LqOKOaVMWMGMDY\\_IKrL\\ERT[DEPYOUA@nNTUHINkRBVMdNvGTxzRF^U`BD\\@tfNDNOJ@Z{TeTJZ@VU€cB[OBOeeQT@^OXBJb\\AbWTF`RCJFH\\RDJIJFXW@WLGBKxWTSJJMTVZND@bbL"],encodeOffsets:[[112903,20139]]}},{type:"Feature",id:"469035",properties:{name:"保亭黎族苗族自治县",cp:[109.6284,18.6108],childNum:1},geometry:{type:"Polygon",coordinates:["@@FJp@fxpQ\\ApN\\GNPNBM`HLMrXLXj\\PEHnI@WUCEM\\GTc\\GZYHTPBHRCPTd€H\\K\\@HXi–BJILJJAVNTOZJNtFPC`YxDPWci@IBgbGKaTOIM@KNKrP@_hE@QbgKWUMJoWAQMFEKM@wTONCJWRCZDHSAM_UD_GWMKeCITSCGIQBGXUHQoMEEGWDQIG]FMQBMaFGueFeSQDUSDSKOCSFMLƒUaPWM_PaEGFETMX]RCRR@HXKN@JNnXXEŒSPaDI\\£FkXWIAX]xB\\GN"],encodeOffsets:[[112031,19071]]}},{type:"Feature",id:"469001",properties:{name:"五指山市",cp:[109.5282,18.8299],childNum:1},geometry:{type:"Polygon",coordinates:["@@TCNOLBTLBPx\\AJdl†NR†RIbJTGNF\\@RcIYbmHoLQdKN_fCJYbDRRXKZFVEZVXBXIJBXMdESW[CUYHUVQFQAqsEIMPYMSBUIIJKAIj•GW[@[LGScDOGQOAGSYZ[HSd[HFNVD@XmJFG[OWiWKNqGKN_MAMO[HoM[BoRewo@Y^HpITSFENc`MVCdHNIVCLJFI`NFIŒP`@VZbaf[FFJG`O\\WRFA@PVPFPPH"],encodeOffsets:[[111973,19401]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hei_long_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2311",properties:{name:"黑河市",cp:[127.1448,49.2957],childNum:6},geometry:{type:"Polygon",coordinates:["@@VÈÞ@Žkx˜nXްVÈa°V@kôw„b‚š„JVškXlVUx„„@ŽlL@xkVV°ƒ„VbxlVUnVxk@ƒ„ƒKkŽVb„Il„@°kVl„@„™lÆnkll@@V„VXƒŽš@V„²bUlƒVlV„U„VÇn@nkJšŽlkVbœ@›x²V@n°VUnlKU„n`@n°bWLnVUblVUVVbknV`°kkŽl@@V°@nz„J@XšxlWXb°n@bƒĠlbXb™bVbƒJ@Všb„a@„„@lbUbšVmnœ@lšVmnIW‚œ@WbÞ@„n@x°@š„ĢaƐéϚnœ„‚lȝĠŻÈwm@ôçU™mm£Xy°UV™›@wÈ£Ǫ¯kõÝçUњ™Uķ‚ƒĢkVфÆšÞU°nŎ¥ČUĊx°m°¦żVƐœx°ƒÇ£@y„UônރÆ@Èĉ°Kô¦šW„kWU—bÇ»@™ÈĕWÇÈ£ŤU@›n£ÆUUKVamanwŃmÝJ¯k@JƒIkaVaUUÇbkaÆÑkWmÝUۙ™Ý@™ƒwnU±ƒ@kkV¯KUkƒJƒ¼U¦ƒšÅ@ówķaķůV¥Uaó@Åwmƒƒ_kVƒwĉ‚ĉmmn_V»™a@U™ƒVwķóƒ‚U¦LǫéóXÇmōLǓÇķxÝkƒƒĉ™kmakbUͰ@W¼„@bƒšÈÆ@Ė™L„l@„°J¯„mkl¯L݃±L—amJ@¼ƒ„™VƧUó„™UX˜ċb¯ńVbkÆÝI@llx„k°V²šV@Uxގ˜L@b„@b™`ƒšÇzkókݤ@ğ¯Wƒ™LĉǙLmmnċVkbUaƒL@ޝ„‚bU°ğL݂Ý@"],encodeOffsets:[[127744,50102]]}},{type:"Feature",id:"2327",properties:{name:"大兴安岭地区",cp:[124.1016,52.2345],childNum:3},geometry:{type:"Polygon",coordinates:["@@k›ƒϙmƏêġb™ƒ¯@@wƒmÝ@XV@IlŽl@bUxl¯VlV™bV@ULVlUV™_kx™VVV™ÈÝJ@„¯šU„™lm¯x@xóÒĉ¼m„¯Wƒxţ@Uz¯ƒWwnUwťƒ@knƒWƒ£óVƒUUwğyó¦WI—Vmm™I@±kwÇ@@bƒ@ĉ¼ó@¯wó@¯aó¼›KՃaUwmWUwÅI@aƒKó@Ua™LƒaƒVÅwō¼UUÝl±I—¤VxÇx@zkJmnn‚mbnz™xlŽƒl¯ČkJl™°@„kb„Žmx@x™@kêmVnŽWxôXšxU°„bWLóJnÇWĵ„V¦™ŽƒUUb™b™ÆġK™šk¯™VU±aXmċÑUwĉKġ„k„™ŽVxk„ÇKkbƒIƒ‚ÛXWl¯bƒŽ™X¯K™bĊš„„ÞVƚnŽĸ²lxUްn°òÈb‚¦—xVbƒŽƒ@¯„Vx@¯VķÞČlĊ°KĸŽȘI°¤ČIôŽò»ƨnȰKǬ¦ôWŎÈƨwlƒnKVXmbX`lbšwkVW‚XXŽ„L°a„ƾaĊ£nƒ°@°¥ŎzÞ¥‚»œalwôkƒJ„a@ĶK„£„bU°ĊxźVÈUĠ¥ƨ™VI@XU°x°Ln¥šw°UmwXm݁V¥Ģް@nU@mÆ£š¯lKœšÜw@aÅU‚¥UaÝIkmV²‚nn@Ķ»@Uk¥VKÞ@ÞÛ@ƒkVmĢa@_ƒJómƒǖ¯Æw—óÇa@alƒUwšwĢřšk@wÆWXUWXƒWa™m@_ƒ»ÇéXaĸwVa@ÝKkUWkX‚kšKXxƒn@lĊV@¯m¯nřÆwš¥"],encodeOffsets:[[130084,52206]]}},{type:"Feature",id:"2301",properties:{name:"哈尔滨市",cp:[127.9688,45.368],childNum:11},geometry:{type:"Polygon",coordinates:["@@°`„_šJlUšŽ@„„@V¦°JUšŽnLôlnŤ@@šÈaUÒVbkbl¤ƒzk°ÇVÛô°IlVUVôU„xÆU„Ž@bźĀ„º@¦šb@l²‚UVlœ@°ÒĠxšnXxÆVô¼Þ@Üx²KލlƒVѰUȰôlwô@²ƒĸ°„lanV@„šVŎUll@bÈnÜm„wĢ@la@ÝÞb°UXb˜lŎ²ÆškšV‚I@ŽnJnĠްknƒÜbĢwna@a˜kÞKƒĀ„a‚™œ‚‚IVbU¥wĠwkô˜xnLƒċVçkaUƒ±IUmnġW„°WôĉšalƒÞÅĵ¯@W¹XÝaƒb¯a±X¯ºLƒaVƒmkLóƒƒbkaƒVUKVkkKV_@aÝykk±L@ƒÅU@yV_™aU¥ówÇx™@UkVƒn@lƒkÅlwšWVwUkĉmkklW@šašbVwnWWƒ—wWL™™@Ušƒ™UƒÇLšÇmƒ„@wƒJĉƒL¥@ƒÝ_@a¯y„UWw¯ƒ¯Uġx¯aÝXVmaU£ó±›¯nwƒa¯óÅVƒXman™„Uƒ›lUXkWa@mkI„›ğaƒm™IklÇU™„kĊƒƒzkKƒš„lU„ōĬlš™„@ŽnX°@llUxʲmKĉVWwk@UbUK@bmVmI—ƒVmwaWxXlWȁšmºšÞÆbUxV@ĵńWÆĉLkWUbƒaWzkbĉ`U„±LklōwUVÝ£™UW`Uwk@mk¯VkaõVX@WbL™K@XƧºWzxƒK@lmX@bkVVÆk¼Vbk@Vn"],encodeOffsets:[[128712,46604]]}},{type:"Feature",id:"2302",properties:{name:"齐齐哈尔市",cp:[124.541,47.5818],childNum:11},geometry:{type:"Polygon",coordinates:["@@Þ@ށĠKV¯a°ƒ@„KVblaČU‚mnnšKĊȚKX„°ŽĠ@Þ£ôllÈy„™š_@a‚ƒ@a—KݍVwU@±™¯Uƒlkw@kÞJlÅUa°ŃČaW—šVôƒƨVšU„ƒ@»nI˜b²Kބ°Klkn°ƒ¯I@ƒƒkšK@ĕÇń™@aƒX»¯@VĵlaÿVamI@aÅÝउýƒĊȗJƒôȁÅkmƑۃ@kxġ@@l™aVk¯»ƒīŹaƒkƒ¥Å¯™JUaWU@@w™aƒ»„KUkÆkUm„UmwÛ±±UUbUŽUXƒwWwÆÝk™lkUanaWwnKl™kal¯ka™ƽa›kÅx™a¯@™amb¯V™lÇwÛĀ™V@x™šmêVƜVV‚aôV„wÈx@šˌx„¦VÞ¯VšlmX@‚ƒL@¯Ua¯LmV@„„°X„ċK™V™ƒ@UƒÈ@‚¥@w—ƒġIU™km¥Źwƒ¦¯lmn@°kxVV@¦óam„n¦l@nx™lĉVóšmx™n™ÒĉĀĊ¼„þ„šǔêÞ°ˌĠÞÒ°ĀɲĀƨźˤȤƨĊ°w@£nymwnkUUV¥ôÑVmkÆmUUVa™mVIkmô„lxkXÞþƒbl„ƒl@kV„ƆƒV„xV@š¼VÒ@šŽUŽšnnނJ"],encodeOffsets:[[127744,50102]]}},{type:"Feature",id:"2310",properties:{name:"牡丹江市",cp:[129.7815,44.7089],childNum:7},geometry:{type:"Polygon",coordinates:["@@U`lLUlVL„Ulb„aô„lKnŽU„„b‚K°¹²W°b„aÞb˜knyUlUkamř²L@m°@lšmš²n`ôÅlK„x„ÜKnxV@„l@œƒ›ÅXyW_k@™wm™ŹĕmƒX™»‚ƒÛ™l°ƒôšÈ„»š—ô˜ô_WW@Uœal»šwU@@wšUVƒš@VƒXI@w‚Ģ͑ÞȻ›aU_@mUkly@¯óV»XmWUXUWmnm¥nUUaWLk»Æ²IÇa™wÅaݰ¯nUa±a™ƒ™@¦õÆğ„@„™@Åb›xU܁nÇłlb¯¦„ôó»mƒ—@±ƒUk@Wwƒa¯xU„V°ƒxXbǎŁUV™™ƒK@¹ƒKUaȯ@ōݙXƒal™ƒlÛkalÇUǫÇńÇakbÝƆ¯nlš¯Ž@¼™VUx@x¯W¼™Æ¯šmĖ„Ĭ¯ČƒVk‚ķÅmxœ°ô²V¤‚bUnÞW°bĢw°V°„XxƒV°z@bÞ`@„‚¦„KĊŽ„I@xƒŽn„™ÈÈK‚„šV™„@VššXK˜xX„mXUx™a™b@‚kXllĊnVlUx™XkxlÆk„m@U„Vlš@ÈwôxV¦šbU`@zÆV@„²KllÞz@b"],encodeOffsets:[[132672,46936]]}},{type:"Feature",id:"2312",properties:{name:"绥化市",cp:[126.7163,46.8018],childNum:10},geometry:{type:"Polygon",coordinates:["@@ऊþÆÞ@bnJUb‚ĀnblŽĊš„„ÞlĸwǔÈŎKÈnôWǬê‚KV¥„ĸôUxš„@VšbU¼m`nnĊŽĊ„xlUšmkaVÿšLšwš@°»UmbKmݙUšwUmVknKUUl¯ƒKU™ƒUȃ‚™nK@ĠkX±lX„°„L@¯¥@wV_m›ĵ¯Ww™L¯ƒUkōƒÇVU™l›w—V󁱃¯aƒVka°wVk°mÞ¯Ŧřƙl™²™Ŏk™U@ƒmUkb¯ƒķޱ„ó@kxȯó¯VUÒk„ÝŽ±LÛwÝ@ó»ÅUWw™mğw¯Ñ›@UkV±@k™a@¥ƒ¹Źÿ@aƒÅVƒwóVVUkU¯JÜóÈUl¯„yk£laUaVÑÇb@™ţ@kmómK™V¯IU¥ƒ@@ƒ™kV™Iƒ`@ô™¼„blU„lƒ™bÈb@xÇKkĢɳaÅɆō@ƒŽVƒK@z™@@¥ÆKnÜ@@aۏUw›wnU‚ķ@ƒ_ƒV°Ž@„klVššnULVVÞbVl@°™@nx™n°LŚÆlV„ȃmU²@VmĠLƒx„n¯xkWƒzšJ‚wnLmbXbW°šÆ‚™²™@™Žšx@JVx„L‚Ā²Æ°I¯º‚È@ÒnÈ"],encodeOffsets:[[128352,48421]]}},{type:"Feature",id:"2307",properties:{name:"伊春市",cp:[129.1992,47.9608],childNum:3},geometry:{type:"Polygon",coordinates:["@@ƒKƒ¯kWW²ğl@ŽmLšÇ„„VVš„Lk°VVmLUlVn™xšVnނLnaVޝ¼™@™x™KUĀlb™n„`n„Æxô@VbU¦ĸŰĸbôxÆ@„™V¥„»„IVl°LUŽll@²„mV„x@ššÞܚÞVnŽlXÅÒlbÈaVVUblb„J@I°lÞIn‚Æ„mxnbUbVLÅVm¤@œţVǤXÈÇĖ@šÈ¼˜aXVÜaXbWŽnzŎašř„KôbšUlw@¯naÆKnUU¯Üa@mkkVUĊm„™żÝ‚ǖŽ‚K„™°L²lÆI@ƒ¯¥ĉƛVaÞk@ÝVaĠlnUVwƒœómaƒ@™wĉ@™a™VƒxamX@aƒ@UaÅLƒaVWƒ_nWm£nWm_ÅV¯ƒm@m„󤁚ݦƒ¯ÅalmX£ƒ™VWUŚw™mÇ@@IV™„WUw@ašI@„k@wŎ»Wƒ„ƒ™ÅVaœK›Ika@¥lUkUlwÅwVyÈwWU@a¯U°m—Ç@UçƒaVa¯mV»ÅwÝUlƒUk™V@k„mUk‚X£šw°@@ǃaÝIƒƒam™Ûam„¯lğmmI@J™U™l±ÅōŽ—kWa¯VÝa@Þkbġ@ƒxÛnÇm@akkōVōl±škšÅšťŚÝ°¯nUl¯xlb„U°b²„ô‚˜Uœxšk‚VÈUŎ„Vl°„šKXxͰnœU`@x°¦@"],encodeOffsets:[[131637,48556]]}},{type:"Feature",id:"2308",properties:{name:"佳木斯市",cp:[133.0005,47.5763],childNum:7},geometry:{type:"Polygon",coordinates:["@@nš„b‚„ÞJ„b@ȯ@™xW¤Vlƒn@lšUVlk„ÞVÆxU¼°nUb„bVèÈ@˜ŽnIn‚@šĢmlUw°™żƒ‚VUn@lnL@VôbšwĊ‚lœ„JķĸĢl„wôwƨxVVUƒŦšxšLź™Èš°`nnĠwŎJސĶwôJ„@¤Xn܄ĸlšn°¼È°lŽ„„Uš‚b„xš@„l@ÞÞÈm°„lôwšL°¼ĸ‚°Þ²nĠ@ôwÞ`ŤI„V„ÒĠU„„@„VJĸbƄ²@°ŽĊKšœ„JĶa̐Ȱ@ô¥°nš¤‚bČUš@Vx„mUw@a݁ţƒÇ™ķƒ@ĕķīU¯²@ÆmVÑô¯X¥ċç@™ĉ»U¥ÝţKWVÅkUVÝŎUmǍÝx¯aķxÛUóL¯a±óōb¯™ƒÑŃVÿƒ_Åķ„a@UƒK@wm@Van@UmmLVa—@VImmXUWƒÝUřƒKUwÝUUƒkVƒk@l¯X›‚Å_ƒJ¯k™Jm„ÅLƒa@¥U@¯Vƒz¯@ƒ`@¼šmxƥšŏKÛk@±laÛ@@Xm@™ƒ@xƽ@WŎnšˣĕÅ@@aÅ@@nÝbǏ¯@ƒ_U›kUWƒkb™wÝU@ç„Wlw@anIƒ¯lyœX°m°VšašÛšm@„mVwÞK°ƒšXlaXmm_ƒ@UƒkwÝK@ƒVI™ƒXmV»ƒI@aƒ¯ğW™bġaU_¯JU¯ġŽƒ„ĉ„k„ō`±nÝÆk„™bóĊ¯Xƒ‚ĢX‚mVn²JV„lbUè„ČmK—wlóğx‚xV¦UaJ›šƒbƑÿÝL—l@bmbġx"],encodeOffsets:[[132615,47740]]}},{type:"Feature",id:"2303",properties:{name:"鸡西市",cp:[132.7917,45.7361],childNum:4},geometry:{type:"Polygon",coordinates:["@@‚LšKVVnkšbVšÈb‚²U°VnklVlaÈL@anU°ÜmXV`œnôLƒèšxlŽšLX„˜L²ašVVmÈX@ķ˜lnU„Èl`ȹš@ŤŽ°U@x„KnnV„mlnnUl‚lVnnaŎwlVÞ҄@n¦šLVްlšwVk„Lšaގl„n҄š@xmLÞ¤Wnœ¼‚WÈLVVUxlÈô„„WVaU_VKšKXUÆbn™‚nôK„bÞw°bÆWXamVwœK˜™Uw¯WUk„UlJUwVUa™@@kmyzm›ĉw@kVwškƒW¯ÅKU_Vmƒƒ™xU@aW@@kK@w„a@Kƒ@@kVUƒaky°_Vm™kna¯K@™ƒL™wġk@@IÇóX™ƒwVakmV@mwXUWanƒlĉ@ǙUw™KƒƒóšܛNJۄm°@›w—Å@ƒ±b¯Wƒ¹„WVwŹĕ¯kVmōb¯w@aƒwmV™UUb™V™IkaVwķ™xk¼›b@VXXó`󗙘ƒ¼Çó™¯„kŽÜš„š¼WŽn„źĖnššxl@X`WzœÆ"],encodeOffsets:[[133921,46716]]}},{type:"Feature",id:"2305",properties:{name:"双鸭山市",cp:[133.5938,46.7523],childNum:5},geometry:{type:"Polygon",coordinates:["@@™UƒƒUwó™mÑÞÑUÝÝUkmmŃyV¯ī„¥ƒUÿĉ¯mÇkaWbÅX¯aÝxƒaóLmmšÅaWV™LULV`UbƒXóƒkÇVwUUÇKX›»XmÝ£nK@wƒ™mÑkƒÝ™bƒKUl™x¯kU™Km¥ƒ@ÝÑkUōxmbUmkVkmmnkUƒmmƒL@w¯Vţ™@Ǻk_ƒÇmV—k@ĸVx‚VȰlLkllšUbōwƒnVW¼nlUx¯XmWUnÝ@™xÝUó¼¯J@LVbkJWnkb™W¯„ÝLUxƒn@‚™n™Ü™b¯U¯n›Wkz„°mJ@bkxƒX@èÞVšxlaX„lVVœ„`°@ȐÞa@mÆ@@bÆ@ˤĖm™Xōƾ@@wš„n@@WÜ@kb@²ÜlŐLƦ™nw™@»„_°@„y°UV@@¦„bÆKnƒšI°l„IÆ`œ°W@k„llUV„ÞVVx„LƚÞVX„WVnnUJ˜@UbnKVnm@Ubn@@x„L@VƒbÆĸ„`UĀÆ„„Ò°šŎa²ô°bôKÜVĸw°bÞwȎVnÞōVUÆlXU"],encodeOffsets:[[137577,48578]]}},{type:"Feature",id:"2306",properties:{name:"大庆市",cp:[124.7717,46.4282],childNum:5},geometry:{type:"Polygon",coordinates:["@@mÇ@сǰ¹¯J±ÅÿƒKUw‚I@™wšš@š±Å‚™X¯WanamKx™I„ylX°wƒm„wğKUn±@nVDŽUƒÅkƙ¯Kšmmwš@@¯UkÝaUUVK™mU™lk@ƒ¯„U„`ĸ@V‚mœxVxܐ@bÛ@m‚ÅL@¦š@@y„L‚U„Ŏ@ÆɅɴblġÈL@wÇaša„ƒkkVƒaš»@ó¯_ÝJ™wÇaÅXny›U¯¥Å„@w™bÝa™Lmm@@ƒVUŽlbğVmš™¯Xƒm_ƒ`¯_Ux™m™L™a¯b@mƒaó¦Çk™¤V„@bóJknVx™VXx±aƒLUbVxkLVlLWlƒ@nX@VÅbWlÈnƒx„bWšÅbmŽ@xœbml°b™„XbW„XVmnn`ƒLmšnbmb@šk@mwU@@š¯Jlbk°lbkšmLXxmbVbkllšÅނxX„xVWVVa²VܲnxƒVVnÅlVlƒL„¼šb@xV@XŽVbšIư„¦„lźb„Ĭ°¼Ulšb@kĢ@lw„@ƒÜlnȂƄóȘI„ĉ"],encodeOffsets:[[128352,48421]]}},{type:"Feature",id:"2304",properties:{name:"鹤岗市",cp:[130.4407,47.7081],childNum:3},geometry:{type:"Polygon",coordinates:["@@Þ¥‚™ô£nƒn@°„ÆUn`mXn¤mX„`UX„bÆKVb„@@bnW‚b„wšUšbĊ@šx„@nbšWVmƒ_mm@ó»Um„ŘWXkĠ»²¯‚¯nķšwŎ@ĊšŎK°bĸUnјKȦĠÈbÆknJššÆUĢV°IšŽšVƾƒwaV™ƒƒkÇ¯¯»™mķkۃWm@£ƒóIĵxݏōIğxmm¯_Ç™Źš™K™wťŽ„UVUŽƧwóxƒxġkĸķƒIk›ĉ™xóa@UmK@kVmUŻ„¯šVxkŽġn™‚@mmJ¯n°V@bXVÇxUzÆxkxlVkV@¦lbœJ›LUbšÆƒ„X„ō¼@xƒl@™J@bVxƒXUš@JÈ@šn™xVÆUXš‚„W¤knÆb„°"],encodeOffsets:[[132998,49478]]}},{type:"Feature",id:"2309",properties:{name:"七台河市",cp:[131.2756,45.9558],childNum:2},geometry:{type:"Polygon",coordinates:["@@²mŎ_lƒĊƒ„ƒĢV°°IV`ĢbšaĠX„°@b„JU¼Wnš„UJ@„ÞLlxV„„@n`lIUa@K°Iô»ÞVšwÞ@VmnX°WVwmkX»‚U„mŎxVak™lkkKǯUUwÇWUn™U±b—KWƒ™Kk™w„çóK›mU_nW¯ÛmV@bÇKkbkUml¯U±VÇaU™™amlUU™LK›„k@ƒU@mwÛLƒŽƒwkLóÆm_™±™nkޝ@@n±KnŚlbkVV‚mz—lWXº@Ķ°"],encodeOffsets:[[133369,47228]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/he_bei_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1308",properties:{name:"承德市",cp:[117.5757,41.4075],childNum:11},geometry:{type:"Polygon",coordinates:["@@lLnlmxn„„IVVlUnb@VVxXJWL@LގVnnV„J˜_@wkmšK„b‚x„wXk˜WXXšKlb²K@nVVVb„L@WlU²„lKVnUJVz@VVb@lżmVUVnbôaVX@°Ub@lWbXš@b@bVb°x„@VxÈLVlšaÆ@Þb²k°@lVUŽ@Xn@VW‚LXb@¤VXšKVVVLnm°_ƨ¤@aUIVa„alkX›°k„™V@„alwUVy„U@k󙰃na°UVUUmUÆw@mkLVUƒWVI„WšLnn@xlVnK„myU@ƒU°UXaV@U¥ƒU@Uƙ@aVUkWU¯ƒaU@WLUV@bkbmKULmKkUVUkmVIUwlWV²™Uml°U@W„LUwVm@UUK@_ƒKUUÜaXw@ƒVKUU@mVIUUlmnIVVVbÈVlKnbVKš@nI˜@nVnwVLVK„K„„˜Vnb@aUIVW@In™°@lVnIš@lWĢ@°UVL@b„@VyUUƒa@w@WUnU@Wǯ™K@UkkJWaÛbmk@mVaÞU@amkWƒ@mXUKkÿƒ£@a„kl@Um°UXwla„al@nmlXnW°znW@aƒwV™@ƒakbĉ¥VmU@ƒIƒVƒUƒJkUmWU™KbmkUaƒKkUVU@KV@@klw—™WaU@kmƒXVènbmlUUƒKƒX¯JkbƒI@JmIUWU@ƒLml@XkJ@U™kƒK@aVKwWa—IWwƒmUƒ@mU@J@UaċU™aUUƒVkI±ƒk@UUƒ@UbVVm@UVKƒLƒlkIWaULUWƒXUJU„ƒ@WbUb@lkXUxm@@JVn@J@b„nƒb@Vkx@bšLU‚Æn„JšaVXnKVVmzX‚°V@_lJXxWXƒK¯bÅamUƒ@lUI›bñJ@LÇKkIÇ`kxWL@„ƒ@@bUVUb¯xWKk„Å„VlULW@ƒŽn¦Ul@I™lmUUUVm@kWƒnkKma¯XUKWmnwVwÝL„mŽ™VUbUVWb@Lnxm„xVŽmbXx›¦@„nb@`™„ƒVƒ@kbƒLU„mVUlkbVXkºmnm@@xk¦šbĢÜlš"],encodeOffsets:[[118868,42784]]}},{type:"Feature",id:"1307",properties:{name:"张家口市",cp:[115.1477,40.8527],childNum:15},geometry:{type:"Polygon",coordinates:["@@k™ġۙal¥@wn@nml¹UWlaVknUVƒ„Kla„@„Ušƒ@_ma@ƒœ¥WwnaU‚wnƒmw@KXaVUVašUnmWUk°™lƒnUVUXWVw™IWVóKUI@WXƒxUU@mma@kUKWLkw@yk@ƒaVkUUċaUU@Wk@Unm@UVmLm±IUƒkJ™kWƒ@a„I@m@U„ƒVƒ„Ula„@VXVƒXmVwnkWKƒKU_k@m¥ƒmX_™JmnU@km@U@KmU™VƒU@U™@Umk@@LƒmW@Û£Wƒka@wk™@aƒI@mmk@mUa@UmUƒIƒwW@aWUƒbU@kbÇ@kwƒ@makVUk™U@aƒm@aU@mxkUƒbƒKUXUƒ±KXVWLUK@wkU@V™@WXUa@WbUxƒJIƒŽ@¦VèVVX@±ê¯KUIƒ`¯UULVx@Vƒ@UKƒIƒVkLmVkKmš@nUJÝbkIUJVXšVVxVbU„VJ„Un™°bV„mlU°„XnK@Ul@lVÈVUXšx@W„@VXšV‚KÞb„n@VnbV„m`ƒUx™kW@UVkL™Km¼@lUnUJVnV„XV@Vm@@LV„klƒIkl@VƒWlŽULWKUL@mJ„@blbUVUlmzUJUxm@UUbċÜk@Ub@VšLVV„¦ôbVŽmšUKUkU@m„„@VlVn¼WbUJ¯@@„°šnIllÈl˜@nXšWlLœk‚J@bkxlxkxlXUlklJƒšXL@bW„n`@nƎXxlL@xl@Xb‚LœKlVlIXblVUbUJW@lX@VL@VVŽšXšJšw„n@WnL°K„bVbl@VI@K„@U@nmVmV@XUWI@aXm@™VUUkWmn@lmUUk@mUmK@UnwVĉ@ƒƒmU_V@XJôVVUšLVUn@šllUnJl_n@šml@XŽlLlw²LVJUL@VmbVblVXmVnlš@Ť¦„nn@܎@bšl„@@XV`„Unb@VlLVb²J‚Xn¥ÆÑ@¥Þ@"],encodeOffsets:[[118868,42784]]}},{type:"Feature",id:"1306",properties:{name:"保定市",cp:[115.0488,39.0948],childNum:23},geometry:{type:"Polygon",coordinates:["@@VbXWš@@UlV@xVLXKWU²LV„VW„L„alVnwV@@b„n@bšVVllUnb„@lxÈ@laV@„aXV@b‚X„x„J‚nV@VVb@nnl@n„J@blšl@„ašƒU_VWUwVUškUm™Ukb±mVwœU@VIUW@UWk„@VU@ynL„m@IV@‚bnK„LVaVmnIlaXwV@@WVL°@@xnX„@V`V@VbUVVLVKnwnL@ll@@_V@VVnaÆ@œKVXÆ@nƒ@wƒKmU—™Wm@km@kÜKXU@ÑW±nIUwVƒ„Kla@I°wU±kškmm¯mƒ_ƒJnƒaƒwW@IVaUama@wƒUƒmU@mVw@aXk@mWa@£km@aƒ_kVmUnWW@¯bƒkUmk@ƒVÇm@@kUU™KUU™@UVUamVUaWIkb@xU@@amUkKƒVkam@@kVUkUWmKmUkLUb@xmJƒ™U@UImVÛVmnUwƒJƒU@VƒX@UWm@Ub°¦UšmxklmX@`ULU@@UW@@xkn¯@makV™UmxUb™°ƒlUšƒbUbƒnUJƒUUVƒa™LkbUU›JUU@mUUUƒJkaƒ@™xUIWJƒUnƒJ@V™zƒ@kb@`@bln@l™bƒŽ@X@š@š„@Xl‚bnbVb„@„„VJlInlšbVw@U„K„l@lbnan@Vb‚JôLn‚UzlV@lÈLVbVK@LVx—VWXX`WxXz‚bV`UXV¤nx@„bVlVnVlUL"],encodeOffsets:[[117304,40512]]}},{type:"Feature",id:"1302",properties:{name:"唐山市",cp:[118.4766,39.6826],childNum:11},geometry:{type:"Polygon",coordinates:["@@„@VVl@²„lJ„UVVšbČVVb‚@@InV„@‚V„nXx˜JXb‚xUL@b„Lšl@VlI@Wnk„KV@VXnJ@I„Jla°I„W„LVVnkmaUç„WVkôaܯ„@nV°wnJlaV@VUnUUaW¯wXWWwna@£UaWKU¯ƒ¯@aVUkKUamUUƒn»‚an™„IVwUWlkš@„LlWVakU@K„_lƒšbÞU°@šy°n„@„KÈkWW™ţ¥ĉōƒkġWUw¯£¯ƒÇwţwƒ@kK@kƒ¥ÝwÅbǤېťV™lW°@ĸ™x@VVVULVLkl@V@Xƒ`Ub@Xm@UWbƒk@ÆVbnLWV@lnXUbl‚@X¯lmU™VkKWLkK@_UK@U@UmmUxmVXLWVULkU@`W@ULUK@XlJXzV@@xml@VU@UX@Kk@WbUK@Xn`ƒXmJnšmškxUVbUVlVVxUbV@nKlL„kVKÞbVKXI°KVšmVUIUKULVxVJVLkV@Vƒ@UbU@WUU@UbUK@b@nƒV@VkLmb@b"],encodeOffsets:[[120398,41159]]}},{type:"Feature",id:"1309",properties:{name:"沧州市",cp:[116.8286,38.2104],childNum:15},geometry:{type:"Polygon",coordinates:["@@@ln@UȄŽl@Vn„l°aX@mXnVlU„`@bln@¤Xb@nWl@bUx@nnV‚„„V@xnbVbUb@J‚X„x„b‚mXa@k„UVwlW„k„KôVm@w™kkK@kl»Èƒm™VKXkla°@XVV@VI@ml@@Vn@VX@V@J„@VxUzVVšš²blVk¦@šĠ@@»š@VK@VÈLlK@XnJ@alIUl„a„VVbš@„n@a„U@WUIV@mUn@mKXml@lL@LnWšb@XV@@a„VVb„V„@VV„IVWÈb˜IÈ»ƒǟlWšaVUÅUƒƒ™Um@kVU™WVkaUwmaóUƒJUU¯ÑU¥mk™¯UaƒKÅnÇyóXmWÛX¯aċbÛa›J—W™ÝU¯»ƒaóóUm@IƒšVVl@bƒLUJWLX@@xšXUxl¤V@V„nVUV„XVbVš@Ž„@@VVn„°VŽ@ţU¯VƒUmƒUWV@mUXƒaƒbUKUwUaÇKn„ƒVk¦Wb@VnLmV@bkV@n„xW`Å_UVƒV@bƒUklVX@VmlUƒx@VVL@x—VWVL@VW@UUm@"],encodeOffsets:[[118485,39280]]}},{type:"Feature",id:"1301",properties:{name:"石家庄市",cp:[114.4995,38.1006],childNum:19},geometry:{type:"Polygon",coordinates:["@@la„@šy@U„I‚m„VXIVJšw„@lb„IVVnV‚@VVœIVVlašK„bVU„VVI„mVa„aV™„kš¯VanwšVlUnb°@lm@wX@@VV@VK@_nWlknwV™¯¥Van@VX‚@„W@U„V„IVxnmÜUnUVJV@„šnI@wValKnV@k‚mU£na@mVk°K„LVa@UU@UƒmknWWkXU@aWW@@km@UaU@@klK@UkaWaUnamm@U„a¯wWU@UkƒL@ŽUn@x™V™lUXVJUb™LmU@aUWUkmKkLUUm@mW—XƒaƒmmkkWUm@@U¯JUUm™kU¯@mKĉxÝwÝ¥LƒUóŽmwkUUUWVkKm™kKmLX„lxVLVxXJ@nVJnz@VWL@`nX@šƒxƒ@kVUUmJmIXx„JV„ƒnUVƒ@UVV„@LUšƒ`UXVVƒ„ƒlXL@l@b@VmX@b™xn°™UƒbkKWLXlW@@bƒK„mKULmakLUlmb@šXb@xmXU`V„b@`lLx@nWVXL@‚°WlXnlb„KVK„XVb@˜X@l_lJ@V@XnŽ„I"],encodeOffsets:[[116562,39691]]}},{type:"Feature",id:"1305",properties:{name:"邢台市",cp:[114.8071,37.2821],childNum:18},geometry:{type:"Polygon",coordinates:["@@nKlLnšlLXUVVlVnxô„V‚KÞ¦ÞxĊwnL°@lVnšVV°I@Vn@V‚lXnl„n„b˜WnXn@VVlKnLVlVX@bnVšKVaUIVWškšU@wVm@¯@U¥VmU_°lšK„k‚w@LX‚Va„U@wšUƒUUKlUóW@UVUœUlƒ°K„wlKU_na„KVnlKkkšWWa@IœJVa@IlJnU@„KVUUmVlaXUl@lm@kXWÝÑnkƒ™±™k@wğ›@@U@mKĉLmVJ@zmlnŽWLUÝJU_ƒ@@šmJkXUVlbklÝ@Ýa™b¯@¯±JÅwġaUU@ƒkU™@mVI±bUKƒL™WUXƒJkaƒLóKULWbUVkKmnk@@bmLUŽƒl@b@mnmJkUULƒaƒbnŽmn@lVV@¦n@„l@b‚znx@`Vz@b„xnV@xl„lbnKVx"],encodeOffsets:[[116764,38346]]}},{type:"Feature",id:"1304",properties:{name:"邯郸市",cp:[114.4775,36.535],childNum:18},geometry:{type:"Polygon",coordinates:["@@„bVKlVnInm‚@@a„kVnK@al@nmlLVUXaVKôL„Klb„IVWšX„KVL²a‚JnUš@lV@„VVĢbÆx²I°Ž°@šaÞbÞ@lkkaVUlWnI@™„@V`ÞI‚VXKmnk@y‚InUĊKƒÇkUUamUUkƒƒ@aU@U™ƒk@WUwVkVJVkkw°a@„mK@UX@VV„LVW@wšwVa@¯Xm@@lUIWaU@UWkXWmU@UwmUkKmn@lkVƒ²™VƒaULUVmJUUUwƒLma@™UmkIUm›L—mVšmx@b™LUamKÅL@VmbkU¯KÝamzkJUb±Vkb™L@lU@WIkJƒzkKmKƒnUalWkkKW@@nkbk@WW¯XUVUJ@XlJ@Xƒ@XlWLkUƒ`VUnaWa„UV@UVIƒaUxUUmVƒK@I@W@DŽU@@U@bƒ‚@nmKXmx™@UxkVWUX„@`VLlL@`™zX‚Ýb@b‚„@VUVkIUJVz°KVlnLlKnL„xlLVVUVlXUJ@nn‚„I@mVUlbn@@Žm„@bV„nV"],encodeOffsets:[[116528,37885]]}},{type:"Feature",id:"1303",properties:{name:"秦皇岛市",cp:[119.2126,40.0232],childNum:5},geometry:{type:"Polygon",coordinates:["@@lnV@Xb˜škx@lU@@LUVlV„LVbnl‚ašLXVVn‚l„I„V„U„JV@UnĊ¦la„bš@nJ°UmƒV@„wn@VU„JVI°bnWlXnWVLVK²b‚akk„lI@aUaVƒUwVUUalaVwnUVak¥šX@W‚kœLVÓm„mUK@_lWš@n_UK@alÅ@ğÅƑŃݍmƒ@їţÇlƒLƒ@¯m™z¯@ÝV™ak„ƒ`@LlVUbkXƒK™@klVXUxƒJmšbm¼V„nVVblLUV@b„°V°XLVb@¤mbXxWX°xXŽVbmVUVU@kbmI¯xmUƒ@Û°óbUl"],encodeOffsets:[[121411,41254]]}},{type:"Feature",id:"1311",properties:{name:"衡水市",cp:[115.8838,37.7161],childNum:11},geometry:{type:"Polygon",coordinates:["@@„KVlV@X°xƒb@VnnmbVŽXblb@VkL@lV@Vbn@@l‚@XX@bWVXlmXnlV„V@@VUbƒK¯LUl@nmbV¤n@l‚LXnlVUV@ln@lb„UlLnV@bV@@wlaXJVbnUVbVUš@VVšLVVn@VVX@@U‚KXU˜U@wUK@U„wVnk@UUWlk„V@a„UVUÆ`X_ƒw@mlU@anUmK@UXal¥„UmƒÈLVbVxVL„a„bVW@nXU‚Vn„„V°UŤV@Uƒ¯Um@Uƒ@@U™UaƒWVUmUUƒU@k£Vw™W@wW@XKƒIUa@wU@@al@UK@_mKXKƒbUU@aVKmš@Xmƒƒ±@kbÇakLğVaUw@a@ƒmkUJƒk@ykw@£ƒWX@lknk@WVkbUŽVnUVƒL@‚mVkI@JUb›I@JXb™XllkLUmƒLmbV`kLƒx¯Lk„›VUV@VôXkVVL„V™V@xƒVUbW@Kxƒl™L¯kV`UnV¦°@"],encodeOffsets:[[118024,38549]]}},{type:"Feature",id:"1310",properties:{name:"廊坊市",cp:[116.521,39.0509],childNum:9},geometry:{type:"MultiPolygon",coordinates:[["@@la„Ušš@šUnL@VWbklWxnIVV„V@X„JlbUlšXVbn@@K„mV@@X°WVInJmn²@lmVbnL@amKV_kwlmX@@LVamaXaƒaVU@UnJVanLlUkaW@UaVakK@IlKUU@an@ln@alKUƒkIVa@a@klaUKUV@UkUV¯šKVƒV@kUmƒU@@a¯ImJUU@VV@UL@Uƒ@@WXUWa@Ukwm™@ƒX@@w@al@@aVIUmVUUUVWUknK@I@™l¥kU±a™™UUVyUwƒ@@I@UUWm@@Uk@@nUJU@WU¯@kbWlULnšÇ„k¼@llLšl@xUnóŽƒLƒlkXUxƒV@lWb„I„`°nnn™llŽV²¯x@JkbƒLU„VxmJX²@ÒWVÛL@lln@‚Xn˜šnV„L"],["@@@kX@Valaa@KWI@UXW@WanaUIW@UaUKķŽk_W@UVUKUš@bƒ@UamxVXnJUbWVXLVbn@W°kb@U@Wó¼mIU¼k`V„@bVbl@„lX@lUôVlUœIV`lX„Vn@lUlVn@„l@UVaƒIUWl£Um™VWU@@UUKlUUUnƒVL@KšUnLVWUa›@™U"]],encodeOffsets:[[[119037,40467]],[[119970,40776]]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/he_nan_geo",[],function(){ return{type:"FeatureCollection",features:[{type:"Feature",id:"4113",properties:{name:"南阳市",cp:[112.4011,33.0359],childNum:12},geometry:{type:"Polygon",coordinates:["@@lKl@nVV@„bn„@VVnm‚nL‚LXx@š„‚VLlKVU„IXWÜ@șlbl@XUĊUlwnW„LÞw‚m@ÞUVmnVl@nX‚JXLm@VnnJla„I@VkxVb„@VŽln„J@knKVn„@°aVanal@XK°b„‚@š¯VJXIš„VK@al@nV„k‚@nK„a‚b„@XL@blVVKVLXK„@VaVI°mVaX@V_@a@yUkVw„VšIVašJ°™@anIlaV@nKnXÆm@wUUV±UUWUKnaWwXUWmٝVƒam@kakImƒUKƒ»lan@VXXa˜W@@UlUUa@a@UlwUƒV@Xal@@anIVaUK@V™XmwVmUmV„LXl‚@nalLnal@„šnKlkV@@UnJ‚UXnl@nVl¦V@@VnJ@nUVVVVIn@Va„JƗn@@K@m„kƒa@kmWVaUI@a@™k@@aUL@mmaVIUKUVƒ@@IU@mƒUmmL@K@UUUU@mW@@nU@ğ»mVmbk@klW@UXnV@LƒJm„™lUnUJ™UUUWƒƒ@UnkKƒxmLa@ƒ@@lUU™bmUVWk@@nkUmam@UakJU_ƒVm@ÅlÇLUVmVUwULƒKU@ƒk@UƒVUlU@@Uƒ@UaUUWaŎƒzJƒaWLkl™b@bmL@„kKƒabWŽUVƒ_@mV@b¯JmXUbUK™¤ÇLUU@b@JkLWmkUWIkJ@VmX@JUbVXU`¯VV¯blK@LXKl„UV@Um@@Uk@kxWŽkbƒL@KkbmL@‚UXmaU@@l@x@blX@xUJ@bULUlULÇ@@VšnU`W@@nÛ¼U@@VmKUkm@VVX@@xǚ@bUbVb@VX@@x‚LUb@lƒ¼XLlbUlVVU„Ub@n"],encodeOffsets:[[113671,34364]]}},{type:"Feature",id:"4115",properties:{name:"信阳市",cp:[114.8291,32.0197],childNum:9},geometry:{type:"Polygon",coordinates:["@@VllInJlknJVkVU@mXlUÞ`VnV™VU@U@y„@nXlKV„nJVkXKWaXI‚b@yVk„VUkVwn@‚K@nW@k„KlUXVVUlbnUV`n@V_V@llX@@V„b@bV@@nlVUb¯‚WLnbmb@ŽnLnK˜b„U„bVWnLlaX@VVUX@Vln@`kL@ll@VXVJÈIVl@XÞJ°Una„LlylU@UXKlnn@lanLWWnbVI@KXKVL@LVWVL@UVKUIVWX@@XÆJ@In`@lJVI@a„WšÛnK@UlK@UU@VK„nlm„nXal„UllLUbVVšknJ@nV@Vm@a„l@@xnV„„lJVUU@™w@aƒk„@XW@_mWnUlŁUmVKV@VXwW»XƒWaUwnkWUkVUƒU@@@WlaUkkaƒIWVkm¯xmIUmƒLUVƒaUIó»m@mmwXk@a›mk¯¯l™@wƒmkLmmU@UbkUWJ@XUbƒJ@b@l@znÆmK@Xk@Ub@lm@ƒI@akmVKUUVUkU@U±JUbkƒ@IWmkxƒa@UUV™UWVkIUaW@UlLWn@VkJƒI@VkK@L@bmKƒkJmUUaUKWXk¼VxnJ@„V@@VULV¼ƒ@@UkaUlWL@U@W@IkKmL@KULUWULWKUXUJmIƒb—KƒŽƒ²UW™nWKUUkLUƒmUUam@UU™@ƒmUL@xkV@„VV@bmV@Vk@mwkUƒVUx@mbX‚ÇnVb„‚UL¯šWŽnUVLVb@xnlWnU@UVUVVUbVVlVkn@llVUXUWUXVbUJ@bmLUJnb@nVK@bl@@š@bVJUbnX@l„b"],encodeOffsets:[[116551,33385]]}},{type:"Feature",id:"4103",properties:{name:"洛阳市",cp:[112.0605,34.3158],childNum:11},geometry:{type:"Polygon",coordinates:["@@VVUllLXl@LWn@J„@bƒKUVmnL@`VblLnbV@„b@JmL@LnV@VV@¯„VJVnXL˜@nm@aÞ@‚a„k@m„IšmVbXL‚ynLšk°@°aVJnUV@UVVXk@WJ@VXLlUnJVnnƒ°U@»°U„wl@šb„WmUXƒÆ@VLXU@m@U„a@I›mkb™a@naWW@_@WXUV@@U‚ƒ²@„K@I±U@¥kKWLóLlƒa@£Um@kWKXU@mlLXUVKUU±J¯_@`UL¯Wmk@Wa„kkƒlUnƒVUVaU@KUU@mmK@_ƒa@KX@VaUIm±™k„aVKVUkw™@kaƒƒW@kbkL±UUaƒK@UUKVak£ƒ@UmmL@lƒIkmUƒ@Ualw@UƒJkbmIUmn@WKImWk@mUUnÝV@ށnÝxƒKmXkxĉVWVk@kaċšÛ@WXƒJUV@zŽm„VWnbUbVbšLlUnŽ‚lUÒnWV—VWnk@@Vm@kxm@Un™l@Ll@@V@šXnƒškJV„šV@nlVXx˜U@l„n@aš@VLnWĊ¦nxš@lbVKXLl@ރVLƒ„XJl@XXl`lIXVl@Xl‚XUVšK„wV@lanx„zUbVJ@VVX@b"],encodeOffsets:[[114683,35551]]}},{type:"Feature",id:"4117",properties:{name:"驻马店市",cp:[114.1589,32.9041],childNum:10},geometry:{type:"Polygon",coordinates:["@@n@„b°UƂXnVlnLÜ@VLœm@n˜@na@J„„m@k„@lVšVxXX@„V`lLV„XVV@VVÞLVV°„²@lašbnxV@@b„Lšmlm„_VWnIWUna@lšLšbnV°ƒVL@KšV„LVUVaVLXK@mÆXna@wVm„a‚@Xw@KlL@a„@Va@wUkaWnIVƒla@Kn@Vn@VUl@nKVn„J@LnK@aVkVUUWƒ@VakUVanI‚²X‚W@UUU°KnUVLl@XaVK@ašU@KUI@W@_lm@KkLUKV_Uƒ@»@UVJ@XV@@mVL@K@U@Kk@VwUUm@kmWL@VkVkzƒKmb¯VÝI@WUkÇJUIUWk@@klK@_km@UVWUUW@kbmKUXƒaƒV—amLmK@namaXK°VakU@mU@@aƒa@UW@kkU@U`m@U_mVkaUVWUkVƒL@lmX@ށLm@UxVlƒUUl@zaWJXbWLUlmIUƒkLmWƒ@@z@VUVUšUmÝ_kVWŽ@nUVUlmIklmIkJUkƒl@n@Lm@؃IUbm@UJUUVU@mmI@UU@k¥mUk@WmVmI@VU@klmLƒ™k@mbkKmb@WkƒKUŽVnUnnxšW@UVLUbmJ@bk@WbU@V„kx@V@bVbkV@V‚@‚—XWbUWm@kb„¼VLn„lJlb"],encodeOffsets:[[115920,33863]]}},{type:"Feature",id:"4116",properties:{name:"周口市",cp:[114.873,33.6951],childNum:10},geometry:{type:"Polygon",coordinates:["@@lšnb@xlJ@UnLlKXUlJl_„KnV@xVL@bkbVVUè@šWb@„Ubmš„ŽkšVšmbX„VJnUl@„a°@@b„LVbƒlXx˜InmnLVw‚anJÆw²IlmnXVl°VVbÈaVb„@lkn@VWnLlUVmÞUUklƒkƒVkUaVaVaUw™K@kkaVWmw„_„‚l@nU„VVb@b„aV@VV@zXJl@@kl@šlœk°WVnÆbnbUšVJ„Iš@VKVm@k™K@_kK@a@aU@@wW@@k@aUW@IUWVUnLlUlVXKVwmk@W@—VWa„¥@k@lnƒUIÇKUaU@ƒUUVmIUV™Uk¥ƒVma@¯k@Wanwmƒ„@@n@@m@UIVƒkUVamUXWƒaV™U_™@ƒmUVUImW@aUIĉK@VmI™b@lU@@n™JƒkU™@KƒIUmmLk@UVm@UŽm@@LkbU„mJXlbV‚@xUbƒ@@bkK@LWx@ƒbUn@xmbÅW@nWLUKUbUVƒK™U@LUK¯„mU@šVV@xULUŽVL@bU`WšUz¯aUamKUaƒ@@xkX@x"],encodeOffsets:[[116832,34527]]}},{type:"Feature",id:"4114",properties:{name:"商丘市",cp:[115.741,34.2828],childNum:8},geometry:{type:"Polygon",coordinates:["@@XVl@lLȃ„@VkV@V»UanƒWX@VaÆÇô@ÈaVX@xVJXUÞU‚aVLĸbXKl„V@šm°Vn_ny˜XX»mUk¥lK@a„_@yšInaVKVa°_@WXI@ƒ@K‚VnIlbnaV@„l„@‚a@_w@ƒlwUKm™Xa@UV@š»Vƒšw@kUKVUUm@w±VUXUKUwmJUUƒ@km@@±mXkmUI™@mm™KUwkbWakLWaUIkJmŽƒX@l@@VUX@JWbX@VbULWbƒlUVULknlV@bVJk„mb¯KknWmk@@nmVkx™@ƒVmU¯KUnUL™@ƒJUIV™maÅaUm¯X›l™kk@@lk@WI@yUUU@ƒb@aUaƒUmVk@ƒƒ`nxUXlb@lšLVxUbUbVbUll„k„VlÝVUnkVmKUXm@klƒ@ƒnUx@xnxƒn@`VX@V²x@V@b@„Wl@zU`VUVVb„L@Vƒb™W@bkXllkLWV@V„@VVÈwlVœ@@X˜K²Llb„WnnÆL@VnJWn"],encodeOffsets:[[118024,35680]]}},{type:"Feature",id:"4112",properties:{name:"三门峡市",cp:[110.8301,34.3158],childNum:6},geometry:{type:"Polygon",coordinates:["@@WKUmUI°ƒU@@UmU@KnK@IƒaU@makKUa@_‚KnmVU„L@a‚ƒ@IXm@KWkkKVkUU@aUW@UUIVaƒymwkbU@ƒx™LVUWWkk@WUkJk_WWk@WI„ƒUK݄k@WKULka™@mwĉ¥mXUK™@@bƒm@k—VWwkU@m™UUƒlI„™Wm@™@Uk@@KškVmn@lwn@@Ul@Xm˜UXUmVсkmkV™KUaVamaUXnƒ‚@ykLUKƒ@™WwKmKnUm@UmƒƒaU@mUk@kL@lƒxċxUnkVmnXxWb@`kzWJ@V—LmVUn™lmUL@lW@Ub@VšXUbš`VLUbUJ@nmnUlUUm@@bUJlnU„š‚U@lxkbƒ@@XƒJUnƒ@kb¯VVVmlXXlJlzn@VlkVW@bkK™bmškŽUbVb„lƒXVxšKÈnšwÞlĊKlšVnKlwX@lL@xlUnVn„@šl@lmX@ƄÈb°¼ÈwVJlx„_°xšašlšUÈxlUnbVxnL@lllšbm„n@nb‚@@V„L@V„@@„VLšJnIVVlKnV„_"],encodeOffsets:[[114661,35911]]}},{type:"Feature",id:"4107",properties:{name:"新乡市",cp:[114.2029,35.3595],childNum:9},geometry:{type:"Polygon",coordinates:["@@XVlL„K°bUblbUbšl@nX@W„XVVKVkš@@Žmb@„Ubn„W`kL„LƒV@VVLnKlVXIlVš@@a„@l£nWlƒkVa„@°bnUlLVlna‚bnUVUXKlU@ƒ@lk@a„I°y„@ôkUU@wšmôšnkWakml™UkVmkUlmUUm@nkUKWanamU„LXW@U‚VnUln„`l„œblL°KXV@ĠJ@L°„šJšUVw„anK@UUImmƒkK@¯±Um@IVmUmmÅnWaUK¯aUk„w@W±kVƒx™U™VƒwƒnÅJUIWaÝJóI—bm`ÝbÅImJUI¯¥¯@mU¯UƒJmnUVóUkl±V@zXl„bWVXL@bm„mº@@XmJUXU°llk„@nWJk@U„@¦U`m¯ŽWx"],encodeOffsets:[[116100,36349]]}},{type:"Feature",id:"4104",properties:{name:"平顶山市",cp:[112.9724,33.739],childNum:8},geometry:{type:"Polygon",coordinates:["@@l¤UbVL@V„LVb²VlKlaX@„„lbš@lxUVULƒbšln²VJUbW@@L„b@`nL@nVV@LVŽUbUVm„kVl„ƒlXbl@Xn°ŽVK@_°`²IVVV@VUVJnInaWK@Uš@„K„LÆ@nmlXXWVUUw@klKVa@knyVkVanI‚JXUl@XbVUl@@aša@mXk‚bnK@UlK@UUUVaXaWmkUm¥n—WmXaWaœkl@VmÞb„KVL@aVI@mUwVm„@KōméUL™KVaUk@kUK@U˜WXI@VlKXU‚@VVnInVV@VLlK@UUƒkKU_@ƒWWUwU™@klƒn@ƒƒ@Imb—@@m›nUKÛ@mKUkWVXxmbVLXŽVVU²VV@xÅnmWmLU@kbmJ@b¯š™IUb™JƒUUxVl@z@bU`W@Ub¯nUJUbƒ@WLUKULkU@aWKƒ@aƒbmL@ƒlmUk@@bUL™ƒWJUI™°@ƒŽ¯aWLk@mbUb¯b"],encodeOffsets:[[114942,34527]]}},{type:"Feature",id:"4101",properties:{name:"郑州市",cp:[113.4668,34.6234],childNum:8},geometry:{type:"Polygon",coordinates:["@@@nWVUKÅ@W„nVnI‚ŽV@œkƂšwV@šnn@lxÞlnôJ˜zXJl@nalUČVlƒl@²UlkôVVUnm„I°VnV°@°¦VJnIÆJÞan_VmU@ama™@kU˜¥kaUklw@UIV¥kVUI@ƒmmUÅmUlƒwVU@amU—JWbUakVƒ—Vé¯Im`ƒk—@ƒwVWmLkU¯ŽƒXkWmLmx@UUƒbm@@x™J@LbW@UUVWUkVKƒ@ka™IUamKUkkmmLƒUkJUVWXkWmnÅ@ƒKƒL™@@VXLmbmJUIUVU@ULWVkK@nWVXL@lVn@¤„b‚kôKXKlL@¦²V@JƒL±@„@VU@WV@X@`XXmb@Žšblaœn@Jƒb@V"],encodeOffsets:[[115617,35584]]}},{type:"Feature",id:"4105",properties:{name:"安阳市",cp:[114.5325,36.0022],childNum:6},geometry:{type:"Polygon",coordinates:["@@°kVaV¥kVmUkWkWVkVKUwkkmKUU@a„wWWXWakKWkXmlašIVmX¥ƒU@a„@WnK@kƒƒ™V™I¯ƒ@KğI@WU¯LkK›akƒƒ_kmmVU@VWXƒKnVmbXbVLmln@VVknlVUnVlkšlnXbmlmlXblnÈlWbn@@nšK@V„L„bVV°VVzšlnš@V™xƒI™b™ŽU@WLUa¯V™UkWõ@¯kkmxk¼l‚„XUlVbVLnlULmU@lƒLkVUlƒX@xW@¯mUƒ@UmIUW™L@aXa˜kU™¯anƒWk°@k™kKmmUIWaambUkkKmV¯aƒ@UblŽk„mXk¤ƒ@@b™@UbULWVnb@lUVVnmšnVVU„J@bWXX@WJkL@blVU°UV@XlWnXUbW@UVkVšVWbnLUJWLUK@Lnn@blVU‚„nUblxVUVJXU„a˜@Ub„LnUVV@mVIVVn@UbV@‚XbmbUV„_lVXUWanJVI@WkI@WVIVU°WXXl@la@mX@lLXl‚kVbœm‚X„ylIXJV@@kšKla²UVa„IVyÞb°LlVna@UÆKnLVbšK@anwU™"],encodeOffsets:[[117676,36917]]}},{type:"Feature",id:"4102",properties:{name:"开封市",cp:[114.5764,34.6124],childNum:6},geometry:{type:"Polygon",coordinates:["@@lUVbXa˜InV@bUV„x‚knVVÆnn@„VJlUU¦VJ@kxVllb—¦lVš@nb@bVŽUn˜aôJÞIXbVJÆI„m„xšUšV„w‚U²l@XƒxVl°bVLXb‚`XklUnmVblLœ@lmšx°LVK@UXIVašWlL@Ukƒ°KkVaVUXmmI@UÅKmmƒXka±K—L@W›@kUÇxUUƒ@@UXUlKkklW@ašX„a@UƒKUaVUUV_@yXk@ƒ@a@U±w@UUW@_„mmw@wVw„mUaÇbUa¯UUkmWkn±JÅxmIbUxmKmn—JWw„kUaƒK@a¯@ƒbk@mVUIWƒ—Lmwm@Ua@WJUb@LUl™@UUmLUbWJ@VL@VmXWWzUJUꄘ"],encodeOffsets:[[116641,35280]]}},{type:"Feature",id:"4108",properties:{name:"焦作市",cp:[112.8406,35.1508],childNum:8},geometry:{type:"Polygon",coordinates:["@@V@VL@x@bXŽWV@XkššlUŽWX@J„@nI@KlL„KšUVaV@œJlL@KUk@KÞL‚l²_‚@nWlL„UVVš@nLWVUJVn@anV@a„wÞUVLVx„b„@lW„@lbXn‚Vn@@¼šL°mšKVn@bnl@nVK@blb„L„W„U@VWLXV@nlKn@lVVbXw°nV_@¥Vƒl@XI@mlƒkkV¯VWnI@W‚@n¹nƒ@aWKXUƒaWk@yk@k„ċUkVmbk@WI—yóImÝkkwm@™mU@™xŁ›lU@mJƒX™ak@ƒx¯V@¼¯Vm„UmmIkVWK@UXIl@UWVUU@mVUI¯b¯@™lmKzWKUa™nƒJ@nƒlbÝ@@b"],encodeOffsets:[[114728,35888]]}},{type:"Feature",id:"4110",properties:{name:"许昌市",cp:[113.6975,34.0466],childNum:6},geometry:{type:"Polygon",coordinates:["@@lI„VnKlnVlnLVbšJlb„@ULVlUXVVX@‚a@KšI@wn@„aVV‚@nwnKlX„W°lVnKUX„x˜@„ln_°JVIXy‚XnW@U‚K@UXIVanKVVš@Vk@KVaXI‚@Vbn@nx˜KnaU™l™ƒn™Va@ƒXa@™VçUUla@aUK@wmUƒLk`kIWVkLmK@V@XUlƒn@JXV@nm„™bU‚óIƒmUa±@@ÑóVUUk@UlKVU@akWVUUlUUaUK@UUKWbUkÅJ@XWaƒ@XbmJ@nUJ@bUKƒLÝaUnk@›lXbWbXnm˜n¦lVXnWbUbVV@VkL@VmLaWl@n™b@bk@UVWak@WVImJUbUlmz@lUbkL@lVx"],encodeOffsets:[[115797,35089]]}},{type:"Feature",id:"4109",properties:{name:"濮阳市",cp:[115.1917,35.799],childNum:6},geometry:{type:"Polygon",coordinates:["@@lLXbW‚XXƒx@bVVnLllVxULUl‚XXlVlUnlŽU¦Ub¯l˜nœK@V‚bVb@šXbVL„KVxVVnIlašb„a„¥lU@wnalLnVVlVLXnlWVXn@@lVI@WnU@mƒÅW¥—aW_k@WwXy@kmƒ@wU„mš„š¦šlUxVLV@UwšJ°xš@VX„@Vb„@š`VX@VX@llšIVbnJlI„bšV„l„˜J@ƒmѯLóa@ƒƒKUa„k™ƒ™Xƒ@UK@wU@ƒlWUUݯImW¯aƒLUKU@ƒkƒ»k@mƒwƒa@UnKWI@ƒUU@akVWK—k@a±ƒbóUWKXUmk™KUmLƒbUx„„@lmLXŽƒ@@b„VW¦Un™JkbWnXl"],encodeOffsets:[[117642,36501]]}},{type:"Feature",id:"4111",properties:{name:"漯河市",cp:[113.8733,33.6951],childNum:3},geometry:{type:"Polygon",coordinates:["@@@Lƒ‚UnVxnIWa„@Xb@WÆIVlXaVL@VVLVbkVVŽUVlX@bUVkLV‚l@VVôU@Ò²@Vb„nôJVšanƒ@mWU@I„mVk@WkI@wmak™@wlW@w„@VbnLVb°bVyX™V_@aUKVVK@wUU@™™a™K@kmbXVmJUXƒ`kn™nƒK@aU@mw™akb±@¯ƒUUÝKUUU@WU@VkLUKU@mUmJUU@WVkL@UWJ—X@VVL@lVlUbšLVKnêÆŽ"],encodeOffsets:[[116348,34431]]}},{type:"Feature",id:"4106",properties:{name:"鹤壁市",cp:[114.3787,35.744],childNum:3},geometry:{type:"Polygon",coordinates:["@@ó™™n@xVVólƒ@¯zƒJ@bkl@@„kVWLUVmVXbVJnnlLlš¯@Xlm„°bVš—lWb@bšKVXnJ@VV„°nX@@w„WVklU„K@knVVKmkUKUaVkƒWkl»nwlްlö@lXšV°UVbXKV@šša„Jšw@Um™™kUy¯UUUƒaƒK@U™L@mm@XaÇkkmWank"],encodeOffsets:[[117158,36338]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hu_bei_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4228",properties:{name:"恩施土家族苗族自治州",cp:[109.5007,30.2563],childNum:8},geometry:{type:"Polygon",coordinates:["@@VK‚bX@lbUVnL°„@VlVnUl@VUX@„aVƒmaXƒlašUUU@wmaVUn@Vƒnmmk@m™U@kna™aU¥Vam™X_@WƒU™mW@_kƒVaVKnL‚lœ@VVal@k¥@kUW@kUKVUlUVсW@kÇaU»ValmkUVUVak™@aƒV¯_@W‚UkmVUlU@aœƒƒalI@akkVWUaWXUWwœWVbÆ@„„l„alIVK@U™m@UU„W@al²a‚¯UağÇm@ƒbkk@wƒ@@W™aULmxƒIU‚™ƒb¯@U`UX™JmL¯aƒKX›WUL@aknmK™@aWUXaWm@I@UÅmVU@™™aUV@b™VƒI@WkU›bXkm@VakwUKULWKXmJ@XUK@ƒmL@KUwVaUI@KU@mmn™mXka@»V@@UUaƒw¯yVk@ƒUUVmmkÛÈU@mWUnmx„šmlUbV¦UlbWVUL@UUƒ™IUmÇKV„VbUVVxkn™LUxV`VX@š„„kJVVUXWaUVVlUnmKUbkI@WULmK@L@LVlƒLnmUIWV@aknƒ`VXUJIVlUVVbUX@¤mbnLm‚m@UXk@mm@Ukaƒ¥@kV@@KkU@aUKWbkLWVkIVŽk@UbVlmX@bU@@mmL@bn`@Ln@llVLVk„@XVVU@`VXUš‚¼k`VULka@VllVIn¤VU@@bl܃bkx@bkL›škKƒn@bn@@b@JUnV`UnVbVKlVXUlbn@°ƒVx„@@b„nVbUllVn@V—VK@UnW@UVUšlnk‚VÈޚxVb„VVI„xVaÆ@@aka@UVaU@@a„k@Wl@nbVIƎ@Jk@„L@VlXnlla@VJnw@UmwXU@aVK°ÒnllnLlb„xnKVaV@l¦²nVl@llL„x@XVVœ‚͐š@našx@U@al™XUVa‚LÈþV°XxWXkK@šmLnlUb@b‚xnLVlVVkb@UJ@xWXXš"],encodeOffsets:[[112816,32052]]}},{type:"Feature",id:"4203",properties:{name:"十堰市",cp:[110.5115,32.3877],childNum:9},geometry:{type:"MultiPolygon",coordinates:[["@@@a@w@kV@nbVK@ƒnUla„@la„Ål@nlVakwWX@WkLšaVmšwV@anK@UlIXmWkk@@mmLkWlwk@U_mKXwWK@U¯K@UU@ƒVUa™kmƒkI™yUUVUmanU@mlwkƒ@_mWXaƒUWU@ǃ@U@aUaVwUKUIƒVkK@UWIXƒmaV@k@Vm@UnwlƒUamk@V@„ULUamxUJkU@Iƒ`WkkK¯XWak@@W@IUV™LWJkXkaÇVUKƒ@kUmbmUUƒUKƒbkKWUkI@ƒkKÝ@@aƒUm»nI@mƒU@UnWV_@aUmWbkLUl¯b@a›kkk@WkkJm_k@UV±@J@b›nU@@WÝIUJVbXL@nlJkx@„Wn@VkJmb—LmUƒ`VbUL@xVn„@XVƒŽ@„mVVnnJVbU„ƒx@„V„nVUbVVƒx@šn„™bUK@bƒ„@bƒJ„šm²„VU‚lbXzVJV„„JVbn@@Xmb@V@bVJÈ@‚Vnkn@°aVVV@šX„KnalLVmšUnnVKVlnLWlXX„Klk°š™šXŽWškLUVVV@nU@ml¯nmbk@W`Å@mb—LWm¯UƒxnêVèk@mbƒVƒnUK™@kKmXk@@JUI›lÛLllnbVnlJ@LULnlÆaVLnŽV@nkVJ„@lkô@²bÆm°w„L„WV@VXšKšVXI@W°ÆVšK„b°U„JVIVV„¦XKVL@l‚InaVÝnUl@@bX@‚™nmVL@lVL„lVLVUnbVW@xXn˜bœU°¤V@š™„a@kWKUUn@VlnL@UV@Ü»@mX@V_ƒakaÞ@VK‚¯@kkW"],["@@mUkUUm@nllVKXXVK"]],encodeOffsets:[[[113918,33739]],[[113817,32811]]]}},{type:"Feature",id:"4205",properties:{name:"宜昌市",cp:[111.1707,30.7617],childNum:9},geometry:{type:"Polygon",coordinates:["@@°`„U@blšUbUVlVkn‚ŽUbV¼Èb@l‚XUÒkVUVVL@lVX@ll¦k@UbU‚›@kmKULUbl„@`nXšŽ„V@XW`nšUbV¦šbmb@lšV@nnlmnU„m@UVnb@xVV™VkbW„nb‚VnVa@an@UaVU‚JXnWlXX@l„¦@ŽlKÆX„bX‚V@VV„@°¯°xXx‚XV@nV°UVWU_VWXkmaVnWVkn@lln@lb@UVLXWlnX@˜aXUmaVK@UXU„U@WVI‚W„XXV‚U@¥VKœ@‚Uގ„„‚a²LlV@kV@UanKma@UVUnK@UVLXyVL‚knJ@UV@@UXKWUXaV@Vb@mVLnKW„m@aUUm@@UkK@Ula„LXKWaXI@alKlmUk@wVKXL@m@WWn@UVa@K@wna@aW_XWWkXbVW@k@U¯WWwka@UUaVIVƒkU@m±@U@@wVKkaš_@VV@XUVwU¥‚šyUkm@V±ÈUKk»ÇL„m˜mLk@ó£kmWwƒm@U„IkWKXwWU@ƒkLƒwkbmaƒbkK@VƒLkmWIUKkUUƒÇIǫJ™XÅJULVŽÇLUVƒ@UK™@kI@WVI@UaƒWmXVVUL`±kÅLmKkƒƒkƒÅ@Ua›XXxWVXŽVbUXll@bkJ„b›„@bkVUVlnV@X"],encodeOffsets:[[112906,30961]]}},{type:"Feature",id:"4206",properties:{name:"襄樊市",cp:[111.9397,31.9263],childNum:7},geometry:{type:"Polygon",coordinates:["@@@Xl@Xb°WlLXl„_@JlVVInwVbVK@ƒ@UnlVbk„mx@VUnl@U@nbW„XJ@VlL„UVJVLUxVb@b@VȄ‚@XV„VWbnX@`l„kx@nmVnbUVVVšzlJn„šlVb„UV@@V°L@VXLWxnLV`l@kxlXnK@nl@XlWn„`Xnl@@UVa@VÈKš£VLVanW°U@UVU„@„`VIn‚mV@„nV@Xa@aVW@UšalkXKšblI„yƍXnlJXbl@@VV@nklU@`„nVK„LVKVb@V„U@UÈK„UVKšIlUX@V`lIVbn@nblVVmV@@XXJšUVV@knKVn@`@X‚VnK„wlLVmUUU@ƒU@aXL@WlU@UUW@UmU@KkLWaXkWmXUWm@U@ƒnk@UmK@U@UaUVUUKV_@al@namWUI@KUƒK@aV@WUIƒbƒ¥ULUJkIm™ƒK@U@K™V@U@a@UkU@K@wVaUwlU@mUƒULmKUkV@@anIWmUK@I¯„mKkl@LUb±lUakLmk@WwUKÝVUIm`¯n@Uk@makJU_@ƒƒJma¯ImwUVkKƒb™aUÅ@wWaU@VU@mXIVmmUkJkwm@mIlUKWzUK@VmLUV@VnbmLVbU@@lkU±KbƒƒÝV›@UL@¦VWUƒWXUJ@XƒVWV@VULnbWV—bW@kmWXUK@Vkam@kkm@UlmXUŽnbWlUXV`UX¯VmUU@Ul@Lll@nnJ@LƒnWmbmš@b™`ƒš","@@kUUm@nllVKXXVKmU"],encodeOffsets:[[113423,32597],[113794,32800]]}},{type:"Feature",id:"4211",properties:{name:"黄冈市",cp:[115.2686,30.6628],childNum:10},geometry:{type:"Polygon",coordinates:["@@VVUnWVXnVJ@„‚U@V@VXŽV@@IVJUnŽ@V@L@KlIVlVanLVbnVlI„ƒn@@a@Kl@@I„JlI@aXU@KlK„kVblJXU„VlU@V„bVkVKXn@VlxVa²I@VlVUxln@bšJXklaVWnLmÅ@y@k@ašI@W@aXIlVVaV@nnlKnLVW@IUa@a@K„UVVlI@wXKVV@IUƒla„@lUXwWƒnƒnalLlxXLll°@XwVKVaXIl™nb˜@nln@Va@U@k°ƒUmÆUVaXI„JV¯ÇUmmkU@WaKmakVm@U@aVKkkmKkVmIkǰ£@aUUVaVVnKlkX‚mkƒ@ƒlUVaX@@Um@‚™UmlUXV„UVU@w‚K²¥Ua@I@UV™l@U™V±UIUǰ»VkUmVI@a@U™m™ĉ™¯V±bŹĖğaÇL¯lmŽkX@‚óĀ@ŽmšÝêb±WkLƒn@xXx@Ž@b@V@LW@UbƒlţXƒ`kxWnXô¯¦ÆV@L@JVLƒxkK@V@bkz°l‚lXz@J„UlVla@XUV„bVKXnW`XXV@laVV@V„X@V¯xƒx@xULVbUJ@n@LU@VmmakbUK@b™IWWUUVkUmkLm@VJkb@nUJƒ@`V@kX™aUaVmmLkUmJ@Uk@U„±lkzmJUb@b„VUxVXU¤ƒL@JƒX@VlL@JkLUVU@mnUl„¦@V"],encodeOffsets:[[117181,32063]]}},{type:"Feature",id:"4210",properties:{name:"荆州市",cp:[113.291,30.0092],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÈJV„lVVLXJln„K@UlL„anbla„xlK@„XVWxXLlƒJ@V„nXxlnô¤l@nKn—‚ƒÈKl¼VL²Ç‚Un@Vl™zŽV¦UxWVU@@U™`lbUL@xV@²@@nlVU„UJVb@VlbXx°XVWX_VKUwVKVa@UVKUUVk@KnblaUU@wnWl@UX@lÆ@@a„IVmUk„™šxVJ„U„bܙ@Uk@WWnk@Vƒ„™Vm@I@m@Un@m™XUlVlUnJ@knJVU°@@aÆLX@ƒllL@¦nJV@XblLVa²U@UlWš@VX@`@LV@@bXJlIXml_lJœU°b„KÆLnVVl‚@ö—Vƒ‚mXaVIĢllUlVnLVlX@@b‚ašnnxšV„L‚bn@°ÆXmmkĉƒ¯w±™™™Uċ@KÝÅƧŃÝ癙Uw¯ƒm™¯k@W‚kV@¯UIUJW¼kb™Uƒwk@W`@¦Uônb@VƚlÈ@VU@ƒƒ£UWWnUÆUnmJkUÇ£VWUI@aUU@WkI@Uƒa@JW@k£kaWVUKmnkKƒb™kkVWb—VmUUmwU@kk›@UakUUa@V@nlx@lUb±lUbnnWLUyk@UamœUK™@mlk@Wb@VXL@x@xWI@a¯Ž¯V@bVn@LkKmL@`XmKmVU@@bkL@V±bk@Uaƒa™L™KUVƒIƒ„™W™XamVVbUK@b@Lm@UWkxULWVUnm@UlUX"],encodeOffsets:[[113918,30764]]}},{type:"Feature",id:"4208",properties:{name:"荆门市",cp:[112.6758,30.9979],childNum:4},geometry:{type:"Polygon",coordinates:["@@n@lxlInVUnWJ@nUVV@Xb@xVƚb„alLVUnx°Jnb„I@„V`lInbl@@V°mn_VJÞUVLXx‚@nllKVb²kVa@KlknL°ƒ@JVLXnmJ@bU@VlnLVKV„@nX@lUšKVaXal@VKn@¥°L@Unw˜bnašV@KV@VUX@lVXI@KW@@IXWV@laVL„„KlaXUVVnkVWV@lwXblIXWVkVmšaU£VaUmVIkU@y@WakKUamU@UUK@kmK@w@@mK@LƒV¯™U@WwkmULƒamVVUU@ƒƒIƒbUKUa™kmƒm@UakLmxU@UÒWlULţÿmwkIUm@a‚kÈblW@UVƒUUk@JW@XkWWUkUKUIlw@aUWknWUUmnIWƒ™aUwVaۚƒaƒVUI™wƒšVlUnƒJ@bÅ@@kVWk@mX@xVVkbma@LUlVVUL@VUbULVxULW`UX@V@lUXWaXlWXX`@bmb@x@LUb@VmŽXX@‚@nWKUL@xVlknkL@bWJXbWLƒKkb@VlL@Vn@VV@bƒnX‚mLUK@nUaU@WbXVWL@VU@@V"],encodeOffsets:[[114548,31984]]}},{type:"Feature",id:"4212",properties:{name:"咸宁市",cp:[114.2578,29.6631],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÞÆ‚LČ@šV‚š²š°xĊ„nlWnŎ¯m@aƒK@„„°‚n„Jšwn™VIUaÆJšÅ@wšwV™XW@aV_l@²V°lĊwlaXLšwlUkalVVaX@lVXI@a˜UXJ@U°UU¥VIVKVklanLVa@VÈIVV@nk@aVa@mV_@a„K@klKUa@UnKWk@@lU@@UW@@nUWUwmaVIXƒ„lV@mLXblJ@kV@kk@KU@WƒkUWVÅwkLmW@UmL@lUL™KULƒak@maUUÝwUJƒIb›KUUƒ@š™aWK@kUWVkUwVw@™mÝ@™I@wkW@a›ww@LU¥™kƒJ@nVJƒIkVVnkV›UkyUIUl@xWUkaW@@°kz„ŽWxkLUWmzk@@bVVVš„b@‚@XlVœ@Vl@bVbUn™`Wn—@Wb„VVI@`„LVbXLV`mnU@@lƒL@LUŽƒak@ƒLk@WbUJn¦@lVb@xVb@n"],encodeOffsets:[[116303,30567]]}},{type:"Feature",id:"4213",properties:{name:"随州市",cp:[113.4338,31.8768],childNum:2},geometry:{type:"Polygon",coordinates:["@@„@nš`lw„k„ƒ„UmUVWX@lk„@VanUĠ¼V@@mX@@nVV‚VXLmJVLnK@b„V@@J„@VUn@VaVUUUVWVLV@@Kk_@almaVkUU@WVƒVUVLXmmk@wUaUKUV@°™@kmaUaÈmW„mUƒVklaX@lVnxl@@UnaUk@ƒVUVwVK„nš@VVn@VbVJUknUmmVmk_Vw„KUUm™Vak¥@UVKVIkW@UmIVWkIVƒkmmLkwmVUƒ@LƒUU@VVXL@JmLUbmK@UUKmkKUUmVUaUnÇlk¯™mJUnmLUaUJUaWL@UkJ™ƒUƒ@ƒaklkU@¯@KWLUmUUWVkbƒLƒŽUKkbU@WX@JX@@LWJkUW@UVU@@L™Umb—amx@V¯K@¦mŽULk@WbUb™LkVW@kVVxUb@x@LlV@V@b@VšU@L@V„LnšlJVIVK„¦„aVJ@XUŽ@b„LV‚@LVJnXmbk@@bU`VLUVV‚b@V@VnL@Vml@„@VXnWVXnWlXblK@LnV@VVX@VkV@XWK@b„VV@VV"],encodeOffsets:[[115830,33154]]}},{type:"Feature",id:"4209",properties:{name:"孝感市",cp:[113.9502,31.1188],childNum:7},geometry:{type:"Polygon",coordinates:["@@VnXK@L@°lVlk„b„@„VšlI@VXKVbVIVbnKVmnI°šlŽÈkVmVbnUVVlLnVL@VnLVanK@IWKUUV@„V@KV„nUlxnKlnU„lJUXnJ@VlXUJUL@Vl¦UbnšVVƒLUxl`UnnnmVVlnVK„bšmVX@a°Ý°LšaXJV@VUnKVXVK@LnKlLUbVVX@VwVJVn„@@UU¥V@@UUK@ƒmaUVUkkJ@L@K@UmVUI@JU@W@U@UV@ƒUIWmXUVmUUÇ@UVmIlmnmakK@akaW@UwVUkKVnUlKVwk™ƒVU_WKUkVW@UXaWkUa@w@VU@XaW±@IkbƒKƒb¯L@WƒXkWƒ@UakL@UV@UmVUmL@UXWVL@ašUƒVUUUVU@yUUƒIUa@wUKWVU@kƒ™™Wk¯UkwVKƒLUx™K@nVxUlUUWVUmw@wƒUUyXWlX¦WbUV@„U‚@blbUVVbXXƒl@lVL@bk@lxkVVnVx™¦ƒ`UnkL@V@L@Ž‚@@xnL@lVL@VnVVblLXb@‚@zlVUJVnUbV¤™bUnUlWXkJWakxU@UXml"],encodeOffsets:[[116033,32091]]}},{type:"Feature",id:"4201",properties:{name:"武汉市",cp:[114.3896,30.6628],childNum:1},geometry:{type:"Polygon",coordinates:["@@nbnm‚knJVUÈ@@Uƒ¥VknmV@VUlK@IkK@U„W@I„KV£UWVwƒU@aVanIly²kVƒl@@VnIlVnKUnVbšblWU@@_„‚VI@mlaUIn@lKVnUlVVXXšJ@aVLlanbUnV@@K@mVIUaVK@w„w°w@UƒW@UUUkbU@WWX_WmULƒaVU@WkbkUƒV@IWyk¯kly@a@UlL„wUK@I@KÅUW@ѱUm@wl¥kaƒ@@_Vw@ķƒa@akw@ƒkKW£XVUVwVwUaU@VUU™™xWKkbĉx¯k±Uk@U`@bWXUš™x@x™ÆÅIVbUJmš™xƒImƒ¯@ƒ™Umx™nUVVbnJV„@Lƒ@@ŽkV@bVnƒ@UVULlx°VXlššl„V@XUVL@xVb„JVV@zUVVVUV„™V@bUKWX@VnKUVVnU@@VlKVb„@lX„W@X°K„a„Lla@JX²Wb@ŽUV@@xVbXlWb@VUXVlXLV`Uš„lŽUxkLmVUŽlLUVVxX@lb@blL"],encodeOffsets:[[117e3,32097]]}},{type:"Feature",id:"4202",properties:{name:"黄石市",cp:[115.0159,29.9213],childNum:3},geometry:{type:"Polygon",coordinates:["@@VšUVV@VbUx„aWUœblUVmnKlX@bXJVIlVUxVVVIU‚zlx¯š@‚VbnL@x‚x@UVaXK„b˜@Xk‚WU_Vm²klW„XVK„Žl@nXV@@w„mlK²X‚aÞén™@ôÿ@lWn°kUKmmUљUmm@ƒwkImWU@UakL@bVLUVċ@™bUK@alIXKWK@™nXnKmkUVwƒ@¯b@L„lUL±W™n@KULUaW@kL@lƒL@bU`@nUb@bmlU@UÇJ@UUbmKkblŽUULUJV¦¯V@VWI—V@bWJkUW@UbkUlbkV"],encodeOffsets:[[117282,30685]]}},{type:"Feature",id:"429021",properties:{name:"神农架林区",cp:[110.4565,31.5802],childNum:1},geometry:{type:"Polygon",coordinates:["@@n`lIXll@lœl@b°aVklKXaVn@bU`mX@V„V@nmJn¼„V@bÞ@lL@„lJXVlL„aVLV„nVnalV„@VLÈUlblWXIšKVU@J„™š_‚@an™na‚X„m@KmI@mkk@KVkWWw¯w¯°ƒ@UUU@WƒaÅWkL@ƒ¥@kWWXkWmIUVVbm@@bUbmUU„ƒbW@UVk@mVkU@U¯ƒmKVUkaW@aULƒÆVbƒb@VÅ@Un@VƒLWl¯Lš„"],encodeOffsets:[[112624,32266]]}},{type:"Feature",id:"429006",properties:{name:"天门市",cp:[113.0273,30.6409],childNum:1},geometry:{type:"Polygon",coordinates:["@@@K@UlKVm„_š¥UwUmlUkwl@@aUK@k„kWWUaVUka@aV@ƒVUXaW¥Xk@WWIklm@ÅxmI™VÝUkxkaƒ„@bWJaUL@„W@™l¯UULU‚ƒbƒkV™Ua¯bm¤UnÇUkmUšUx˜b@VkXÇal@bVnlJnxŤĀVKXkVÑV@nwlKVbn@n„šlVbVL„a„J@„VV‚UnU„bVKlnXxV@°š„U@KnL"],encodeOffsets:[[116056,31636]]}},{type:"Feature",id:"429004",properties:{name:"仙桃市",cp:[113.3789,30.3003],childNum:1},geometry:{type:"Polygon",coordinates:["@@VK°VškX@@ƒVK‚bXI@a„ƒlblwÞVšUnJÆwn@lkXJ@X‚WVz„V@xnx‚VXUVVVkUw@mšLVw„KVU„@Um@alU@„@@KUƒmIUaVUšmnwmw™mb@aW@UkmKkUkVġkUJWbnU„õ˜@UkmUÅKƒL¯a›VkIk`WnkJƒ@xVLUVVbUbk@WlXbm„VxnxUblbUV™@@VUV@nVL"],encodeOffsets:[[115662,31259]]}},{type:"Feature",id:"429005",properties:{name:"潜江市",cp:[112.7637,30.3607],childNum:1},geometry:{type:"Polygon",coordinates:["@@UbVxšbX„mJVnXVlmVX@bkxVJVLVlXXWlX@@IVl„V‚U—aVwV™lnÈVVmn£°aVbUš„l„aVUK@mVU@Uš@VUkaVamwUwnƒWaXkl@VaUaVUUK@w„WI@aU@@K@_UW™@kX@V±VUbkKWaU@mI@¥kK„kW@ÅK@b¯@UVmI@lmIkVkUWVnšm@@V@n@JUnƒšU„@ŽmlXXl@@V"],encodeOffsets:[[115234,31118]]}},{type:"Feature",id:"4207",properties:{name:"鄂州市",cp:[114.7302,30.4102],childNum:1},geometry:{type:"Polygon",coordinates:["@@°¥WóXmlw„_ŤW„kVaX@@K@U@a@WwU@mWk@ƒULƒWkX±lUnV`XWl—@ƒaWLUb@Vw@wmKUa@°™kw‚yVUJUUVwkUUJWI@akWmLUnkV›aXVƒbUxUVWX¤lL@„lx@b„b@ĸUx@`„@lbk¦@x‚n²VƄX@"],encodeOffsets:[[117541,31349]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hu_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4312",properties:{name:"怀化市",cp:[109.9512,27.4438],childNum:12},geometry:{type:"Polygon",coordinates:["@@@n„‚@b@XnJ@k°x@aVUnl‚UXnV@@VnJWUJV„nIVV°ŽUbVVVL@޲LUVa°V@aV@nm‚UXblLXWVXVmVLVK@an_„`@X@l°„VlXXW`nX@Jmn@b„@nV@Lm`„bUb‚n@VUVl@nIVbUlƒV@LkJUnVV@xVblVUbU@ƒzUKU@mx@xUnn@@WV@lbUb@šnVWXX‚V@VIV@VUnJ@VUz@JWbXllI@VXVVL@ŽVn@„„Wlb@„Žl„XVlL„aV@VJ@XX`„kVwVl@bk„‚bUŽlVXIlƒnLVa„mVwV@@nV@XaVJVbX@lwV@n„@nV@VWnIVVUŽÆ@Xx‚a@I„UUKmk@mVƒ„IXmWUš™VJnUVU@anaVwk™›U@UXa@W™@m_@a¯@@K@UVƒ„bnK@blIlbXa@WW_n@VƒU@¯bmyƒUkUJÇÅ@WU@kWKÅwƒnm°KVkmankVWnXVWV@UƒƒwXkV@mƒ„UlLnaƒVaX@VUn@VnVK@xlnXWšU@a™@@klak™Vw™mUaV@™wmIÛ`m—@mVUXmlIXƒV‚I@K@aU@UaV_UK@wkUmmUKWXŽmVkUƒL@mƒƒU_nK‚™@aVU@Ukak»@U™™@ymUƒ„¯™ƒUUƒVKkam@™nka@ƒmwkLWb¯mkaƒ_VaVKUƒ™IUw@kKmU@WK@UnƒmaULkU@wUalWV¹U@@WUI@WU@‚_@W@U@mƒU@WbbUK@Um@@UmbUwWWkk@WU„a@anUUwlWUwUU@wlJVUnnV@@mnI@m‚K@U@w„a@wUm@_mƒVUUaVUkƒƒƒ_kċUk™VWLƒ@mlU@kn¥W@UwUWV@VÝU@lXLWVUbVLXlVIl‚knmU@VUJk@@„ƒ@™kVmwmVkxU@@XmVUb@xnKVLl@VxUxkIU`@bWVXX@JWL@bkb„¤@bmUUU¯Kƒkmb@V™VU„VVn@@„Vb@`lnœxmb„lUn‚bk„@xU„mV@bmWbUV@VJ„Il@nVUb‚K@nn@VbnJVIlJVkXJ@X@lmx@bnnWVXJWXU@UlU@mk@@llb°x„IUbnJ@VWbXVmI@JVX@bk‚@bWL@JUXUK@U@Uƒ`n@@Xm@XVW@@nX@@`ƒImxU@@JUI@KƒLmK@UÅUUV@VW@™¯kUU@UamVUUmJ@n„xmLKƒkmJkwkKm_mKXU@aƒU@b@Wk@ma@zUJVUmbUlU@™xnXlWlXXblK„¤V@@nUVVLkVš„l@Xb@VVK‚nXKVx@znW@X‚@@lVK@X@JXbWbnn@JUamLVVXIVxnK@aWUX@˜x@VnI@WlI@anV„IVxk‚l@lbXXšxVVVJVInbV@@ln¦ml@XXVWbkJWb","@@XLVKVXVKUa@UUUmV@l"],encodeOffsets:[[112050,28384],[112174,27394]]}},{type:"Feature",id:"4311",properties:{name:"永州市",cp:[111.709,25.752],childNum:10},geometry:{type:"Polygon",coordinates:["@@lxUXV‚lXUVnlVĢ„JVbUXVJV@XUW¯„VIUK@klW@Un@„nl@V`XUVL@l@šVx@„XXW`UnUbšxUlVnUšV„lb@VnJšUVVVInJlUšVnwVklKnw„LVJVšV@nIV@nbVa@KVVVUUa„KV_nVVJ@_VW„nV@n¥lI@anƒl¥X_VKlwVlULUVVVš@šU@VXL˜ƒ@IUmn@VU@wmKXUWU@m²šl@VIXWWkWUkWlkIVamUXamUnmWUU@@Un™lK@XJl@kVUk@mWKXkl@@aVU@UVWUUVa„In`VUVLnw@U@K@Uƒƒ@w@UVmUUƒ™°K@UnV@bV@Xk@KVm@amk„aU£VWUUmUUwm`UbULka›KXU@kVmU™@aV_UWVIn@˜y„XXK@klmV„V_kWVUn@WUU@UƒmaU@™wnwWanUmmXkƒam@UakLmK@b™xUUUU@Km¥Vaƒ¯@ƒkUaVUlm„UU@mUUÇmUk™Uyƒb™bUa™XUWWbÅLmL@V™aL@WWXUKmmk@a@UUK™XW¥kU@VƒUkxmVkUWbUJnVJ@nVJXzWxkŽ@lVbUX@VVL@`mbUnšŽUn™VV¼k@Ulm@mwLƒb@lmLUK@UamƒWkƒK@£Ua@ƒ›UkJkUmbVlkX@bWbUŽVŽnnUVl„@bšbVK@VX@lb„V@nU¤šx‚²„Knblb@x„V„ô@šlŽ@b@l@XWxnVl@„VV@XLVl‚LUŽUXV`šbXXmJU@@bm@UUkLW@UlUKWUUb™wUm™L@nklVVmVXXm@@bUKlÆn„‚XkllVUVVL@nUbV‚@V@nnV@xUn¯U@JW@UX@xĉ@™`m@@LV@b"],encodeOffsets:[[113671,26989]]}},{type:"Feature",id:"4305",properties:{name:"邵阳市",cp:[110.9619,26.8121],childNum:10},geometry:{type:"Polygon",coordinates:["@@XIlJšI„VVK@n@VVVKnLVwVmnLVK@U„@šw„J@wVIƚ°X@ÜȄUÈxll@kn@VwVaXJWXn@@WVL@UUKVKV_U@@aVK„x@U„aV@lk„@XylbUaV_šVnal@W„U@a„I@aV@@aVUl@Xm‚UXWaXml@@kk@ma@V_UnUV™UUWJUa@kkaWLUmk@@LUVWUkJWkK@¼UnWJƒIkV@b@JUIm@Ul™V™m@Uw@a@kWƒXWKUknW@ƒWUU@k™mx™UkVmIUJUU™VmI@UkaUƒV™UmVk™wVaVmX_WW@ƒUw@™@kUKWVU_k@ƒmm@@VkX@lVLUJƒX°WVU@UIVWUaƒIUġmkVUkWUVWkwWXk`mI@¥kUVƒUƒUn±@m›XkWknV„UVmmU@@XƒVƒUk`@Xƒƒƒk@¥¯»mbĉó@mkU@kU™ƒƒ™KmX@˜UnmL@lULkKUƒWUU@ƒbUaUnƒ@Vb@l„¦Ub@l™@UKmnƒKUnl„UVVbUVn„@`Vn@xƒb@x@VL@nmJ@nU@mmUVkI@xVVVxkXVxmV@bƒbXVl@Xl‚XVxna@Vn@@VVL‚aXaV@n„‚@@V@X`V@@XVJ@XV@UºkXVb@xlVVKnbm„@VXLV@n‚lL@VxšJV„ULUb„`lb°nXalKnx@„lbšmn@lbULV„„V°š„ƒnV@zšš@Vl¼lb@VUV@bšmLV`„„@n„KlVnU‚XWVLnnlV@xVLU`VbV@"],encodeOffsets:[[113535,28322]]}},{type:"Feature",id:"4310",properties:{name:"郴州市",cp:[113.2361,25.8673],childNum:10},geometry:{type:"Polygon",coordinates:["@@²zVaVlnVl@nšVk„Jl_XJlIVmnL@mV@VXn@lV@‚XzV@lyV¯²U@UlJ@XVKnVVIXl@UVLV`@n@J„I@mlI„KVLnUlVUVVLXašKVLl@nb@ŽW„XV°KUnVV„L@xVJ„L@b@LUVVVU„˜VXbmbVbn@@lUbm@x@XVVVŽ@@˜@bkImx@Vm@Xbƒb@l°XU¤„a‚L„mnL@bl@@™VUX@VxnV˜anLnƒWƒ¥XKVwnUWXmVIUWÆLVx„L„w@wVmlU@¥XƒWUkwlÇn_Uw„WV@VU°wnU—ƒy@aVškVlnL@lVn„w@VlJ@b„X„x@bVKnb@U@WVUl@@Vnbl@XLlK@aVLVKnxÞn@a„LlmUaVU™ƒm@ÅknUmaUKmVk@m™kk@UlWUkVm@w@kUU@W™U¯™¥@w„Ç@aVIlUV@kUWU@UUm»@k@mKVkUKUwƒaUaUa›@k„kUWJkImaU@UK™@maUzk`@zƒy@XmJkL@UUJmUkV@z›@kŽkVmK@¦UbWL@a@UbmKmwUK™Xk›VUUkmVkw@UUKmL@WUIWa—JW_k@@WmI@mk@WkWULUUVKUUVm@šU„bš@‚nUǃ@U@w„™V@Ua@aƒL@ak„›l@k™UƒJƒwó@@L@V@„™`@œƒJ@xnn™šmV@bkJmUó@ƒn—JW„UUmƒU@UV@Lk„WlnnmVXbmxšxV@nbV„V@XVm@UVlXU`ƒUŽkn@lWLƒW—zm@UJVXU`@bVšUn@lWVœLlbVKVan_VxnVVVUXV¤ƒbnl@bUn@LWlU@@amU@V¯L„šVVUn@V@x„„@V@L@VmxUKUVm_ƒJUbVV"],encodeOffsets:[[114930,26747]]}},{type:"Feature",id:"4307",properties:{name:"常德市",cp:[111.4014,29.2676],childNum:8},geometry:{type:"Polygon",coordinates:["@@l™U™mkUwUyV™@VW@¯Va—VmUU@KVUVUVLnaWƒnkUÓV_@mVU@݄w@ƒka@kVmƒUmK@IkaUamKkXWaUW@WUk„™@@KVU@aU@™L@J@XÇVUKVak_mWkLWakVUbmLUUmlUVKUU@kUWW@UImJ@xkLkKm@@Xƒ@ó݃@UUk@UKƒV™ƒULƒKƒXkWWbkaƒIUƒWU@mUk@WLaUJġ™ƒ@@XÈÆVIl‚„Vnz°aV@U„m@X`@XWbkakJ@amLƒaU„@V@L°@@bn`š@@XWb@VœVlšUxmb@bUVmVUI™šXVWnƒJU„@nnlVLƒV@JbWzk`m@UVK²V‚x„k„LVl„@Vn@V„„°xVKVkœVVlUblx@bU„‚Æœ@@nVnUll„kx@VW@@VkLWxUL@bÝ@kKkVõV@bkXVVUVƒ@ƒVkUkV›LkV™a™@@™ƒ¯xUxmX@JVb°WXkK@Vm@k„Vb™bn¤‚xUXkJƒblxnXÆK²l‚_@Wnašn@ŽUL@b‚JnIlV„@lUœ@@¯ô@lWȂIVKVm„U@aXaV@lwVXn@@K@UVKUUnU‚bn@lWšX„ƒlJnUšLšKV@„„l@²a@UlK@aV@naVX„WV_nKlL@KUm@a°U°@VXL@a@wWmXal@„k„@VLn›V@@bl@VnX@mwVa²aVU@mk@"],encodeOffsets:[[114976,30201]]}},{type:"Feature",id:"4331",properties:{name:"湘西土家族苗族自治州",cp:[109.7864,28.6743],childNum:8},geometry:{type:"Polygon",coordinates:["@@@KšL@wnK±nƒnm‚—@WUk„ƒÜÈn@n»@mVamk„mšU„„l@V™nmmU@wUan¯VKšLn„VWlInyWUœI@WWk@KXU˜n@mnUmU@WœƒmkV@ƒkXašaVaUm‚Ikƒƒ@kaƒX@ƒUm@UKWU@UkJWkXa@IVy@UmIUVU@UJU@WXWmU@™VakaU@@Xm@Vm@wnwV@VL„yV@VakUUa@wUUVmlI@K„UVkUamJk@VU@UmVaƒan_@KmUƒ@@anm@ImWX_WWUk¯ƒ@k@Wƒ_m`@bULUKUnUWWXkKWaVmnU@@b¯UUbVޱK@UKUUVa¯UUmJUƒVIXmI@UU@WmVmkUV@b¯w@lmI@W@aƒ@m¯LXbmJVLklWL@V@XXŽmbVVU@@VU²Ul@VlX@bš`Xx›zUmkUVÒlŽ@bXLWxXVlš@V„bkLma@nmVmULVbmVUb@lnzmbUÒVl@°nLV„lJkn@bmJk_ƒVmmkblxÈx@LUb„xVb@V™n@JmLVŽUš@„nV@¦VbnJ@lVVbkx™bm@UxVLV@n`UnVVV„kl°z„xVb@VU@@ÆlXnWm¦nbVK@XVVUVVl@X„KUV@nVL@WnIWŽXLVKVLlxUbVKXVWbn@@UnKVLVb„JšU@aVU°b"],encodeOffsets:[[112354,30325]]}},{type:"Feature",id:"4304",properties:{name:"衡阳市",cp:[112.4121,26.7902],childNum:9},geometry:{type:"Polygon",coordinates:["@@lšV@XV@„mXVlXL„W‚X@l@bVxn@šŽšUVkn@VJ@I@alU„JXIVm@»‚LXllIXVVU@Kl@VnXKlb@lVbXIVVUšmVVU`@nbl@@lXLVVVKVbnXWJ@VXbWxXb„Ul™VK„¦nLVVUVVbšb„K@U˜LnK@Un@VxlUV`UnnL@VVL@JV@VUnxnKVbV@@VšIVUnJUVUl@nW„XllIUa„KVbÞLV¼²`V@VIUwlaVmXa@IWanK@U@m„kVƒVUVaX@lšnaVLÈ@‚¥@kkJUWJUaƒXkaUm‚wVXJ@_lWUU@¥n_‚KkamUK„™@amKƒnKƒbV£¯W@k„aWan@@UnwlJ@a@—@UUU@W‚wn@Va@km@UanaWa—UVƒUUVU@K@aƒKUI@wƒKUUVm¯LWUXƒ@mak@UK™LWbUKVUkUmVUKƒLkJ@nƒJ@I@mU_UK@VWkUJmUUL@WkI@V±VU°kzU@Wy@kUm@UWU@@nmKUnkJWIk`ƒIUlm™k@mUUkUb±yUX@VUV@bk@WlXL@nVlUl‚k@WI@ŽkLmš@VV@XVmnnVWbnVUblJXkVl‚XXlWXUJk@±™@nXVWVnL@xUVm@Vn@J—„WK@U™V™@UUVUVKUkkxULW`k¦m„@bkJm¦U@ƒmUX@`UImUU`ƒLVbUVUU@LUbmaU@mJU@U™UIƒKmxkLUl"],encodeOffsets:[[114222,27484]]}},{type:"Feature",id:"4306",properties:{name:"岳阳市",cp:[113.2361,29.1357],childNum:7},geometry:{type:"Polygon",coordinates:["@@@wUklmUUmU@@UVm@wUaV_mmUKmwkIkJmUUnm@™™@UUƒbUKUƒmÛamm¯xVLkbÇÆƒUƒVUzkVUlƒUUKWLX¦W@ƒVUUUaƒKUbmLKm„@akU@aƒmVaUUVIVWkk@wkƒƒ@@xmLlmÅwmbVlXlÝIWVkK@kkVƒL@VWKU@Ublnaƒƒm@b@bšnW`@XUJk@UUWKƒk@UKƒnn‚@xmLUVm@kbVbV„nV@V„b‚@KnV„LWšXŽÆV̦VblŽš„n„UJWz@ƙVóUVbkV™aÅx@¦lVUbVVknWKƒ„k@ƒwƒK™VU„Å„ƒl@zkb@`m_mJ@xX„mbVbœ@llV@n„@llbXL˜UXalUšl„alVnwnLVKlšVbX@@I„V@blJ@bVL@VVVUXȤ‚VnkVÑXmlbnš‚„VKkÑř@UmaVç@±XUlI„xlV„@VaX¯lUVVUšVJn—V@°°nް„Vxĸł°¦šb²¦lJ@U@aUK@kUm@_m±VIXal@„Kl@„bV@K„K@k„m@UmUUaƒK@_UJƒaXU˜@Xmš_VmUk@WUk›@kU@a@m@UƒaUUU@al@ny‚XXWWwkly@¯n@@bnV@k@mVI‚„œVlUUmlU„JUw„I‚bXƒVaUal@K„b@ƒVKVkXVl@VkUU@ylUœVVaVL"],encodeOffsets:[[116888,29526]]}},{type:"Feature",id:"4309",properties:{name:"益阳市",cp:[111.731,28.3832],childNum:5},geometry:{type:"Polygon",coordinates:["@@„ŽÆxXL@l‚V„@̚VI‚bXKl@nVV@„XVŽ„JlbXalX„W„LVKš„„UVLl@VV„@ôބ@@Wn@lLlK@wnIVJX@VX@lVVUL‚VnkVVnKValUXblKnXl`UbVLÈU@W@IšKV@@bUV@Lš@lƒXV‚@VXXblWnLVblb@JnL„VUn@llb@„ƒx@ÞUV@nU`VÔmlX„mbUKUVUV@LVVUn˜ŽUb@°UXš@U‚VzVxnlVškšVnlVnaWƒ@wnIn`@_la@y„kƃVƒšU„L„xl@„ƒXLlmUUVakU@¥ÆwšblUUaôVšU@ÅXyVImƒ™ƒkUaġ¥ÅUWX™ƒKmU@Lƒa@UmUUƒUalan@VUnK@wm„m‚L@V„lXLVVl@VI@WX_™m@a™¯mKUkwW¥UK@_UWWLUVkUWL@WUIkVƒU@JƒwkLUUmJVI@WkXm@VmkKUIU@mmm_@VUV™@™„kJċwUU@KUWkkW@IWW@km@klwkWVkkU™V¯m@kWLU`mIkmkXm@@`@L@xUKWkU@VL@JUU@mbUKVa¯WVnL@`lXUVkU@xW@UbUWVU@UJ@„lnU@m‚nÈmVƒa@bUL™wUb™@@VkxmUUƒ™UV›K@IƒUƒmk@akm@wmIƒŽkK@b™VWXkm@wULUmm@UVW@Ub„mbkKƒVn„U@Wl„xV„U@UXmWUXmlnbUl¯Lmn"],encodeOffsets:[[113378,28981]]}},{type:"Feature",id:"4301",properties:{name:"长沙市",cp:[113.0823,28.2568],childNum:5},geometry:{type:"Polygon",coordinates:["@@lVUllXkx@lln@‚XX@JlXXl‚V@LVVČxlIšƒš@VU@Un`nnV@VJlLUnn@lW@XUJnIVVlK„x@I„VlUVJ@XXKlVVUXKVX@`VLX¦lxVŽnLš°‚an@„„‚bkmVaV@XL@U„KlU@llLXUÞJWkUknaÆxnŽ‚knK@w„@l„@xllUXUJVVUb„n@blV@bnƒ‚LnKVa„LVbVV„UX@W¥XKVL„VVklUVy„U„VÈÅlaUK°wnnÜbn‚V„VL„aVVš@šn@VmnVlIlJna„@Valkn@na@amwm@„UXw˜K@aUUVUUaVa—wWK@kU@UaW@kKUUƒƒ@k™W¯XWan@k„™mmÅ@@I@U@KmLkaVUƒKkLWVUƒk@UVmU@am@kkk¥ƒUƒVUK™„maUb@ŽUb™I@aƒKkkWm@W¯K¯b@VmaULVxUXlVk@UxVJVbUb@xULƒ@ULWW—LƒĕmxVVL@šVb™KUwƒaŲWwX@@WƒUWLU@VbkV@aU@@VUnmJ@VUn@VƒLUK@U‚mUIk@UÇmU@@UW@J@LƒbUmVI@aUmW@@bkXUx@lmLUbm@UbkJ@V@XmlUbkKm@ma@kUaVU@aUK@mImJUIkVƒUƒVUakbWwka@UWKkLUamKUXm`Å_U˜ƒULmaU@@lUV@X"],encodeOffsets:[[114582,28694]]}},{type:"Feature",id:"4302",properties:{name:"株洲市",cp:[113.5327,27.0319],childNum:6},geometry:{type:"Polygon",coordinates:["@@X‚‚Unw„Ė˜KXXVK„@VK@wVaUaUIVwl@kUVWUwVKnb@U°a°LXŽ‚@Xnll„L@bšJVa@VanbšƒVL„U„V@al@@UV¯ÅÇ@Ummk™w@¯ƒyVwnUVVVUkmWV—nKVUƒa@WXkVKn@lUVU„VVVXIlV°VnI@VlKnV@mwVm@LXKWkU¥wWwƒƒ@k@m„X@KX¯V@VUVa@VnKWkœƒV@VUkm@aWa@wkUWwkmV£VÿXUVL@mVIXaò@nW@ašUš@@am™@aUU„UmXmWUk@ƒƒnUW@_maVm™wUkamaUL@aƒwƒW@akI@UƒxUm@kmKUk™lUŽ@b„zV˜m¯xUVU@ƒXVxm`kÈlxXVW„@¦kVUn@xƒxƒKUwÅKVXUJWnXŽmVUxWL„¦XŽm„mK—bmUUwW@UV@šk@ƒšVLnŽlbLm`@¦VVkX@`WIUށxVnlb„WVbXIV‚lI@l¦Ç@UKmbk™W@UbUVU„ƒl@n@VmLXb@JWbUnkbVxUJUxWXXlWL@V@V@XXJWx„zUVVVVKnXW`@bkIUl‚„nLVJUbUIWVXlWV@XklVbnn@xlš"],encodeOffsets:[[115774,28587]]}},{type:"Feature",id:"4308",properties:{name:"张家界市",cp:[110.5115,29.328],childNum:3},geometry:{type:"Polygon",coordinates:["@@@InWVw°wš„@š@šblUœKlUlV„U„@VUUUlW@aöUlUlLÞ@@aVKXwlK@UX@@UlwkƒVkUm@m›@ÅVƒ@akwVaUk›UUlUL¯wƒƒ@UUmƒ@UkƒKƒlw±UULVn@l_XyWwÅ@VUUmJUXU@@mmƒU@kxW@UaUIWbU@@mU@UxƒnUbmKk„WJkUValƒ@aUkUxƒlW_@WUIU@ƒbkKWUJVnUb™bWb„lU@nl›„@XnVmV@n—mWV@LXl@X›JXVmzkJUXmƒ™KULm°Vb@xnVmnUšk@ƒƒ™VƒnnlUb@nm¼m@Ûǃ„Vl@X˜mnm„²ŽmL@x™K@LUl@nULÆx@V@VXVWbXX˜l„@nLlm@bVKœX‚W„L°bnUš@VaVUš@šmšVw„JnwVK°zn@V‚Vb„a„@Ċ¼"],encodeOffsets:[[113288,30471]]}},{type:"Feature",id:"4313",properties:{name:"娄底市",cp:[111.6431,27.7185],childNum:5},geometry:{type:"Polygon",coordinates:["@@lL„nJ@xln@bnlV„‚„@JœLVUšŽV„nVlw@Uš@VašxVK@a„bnUmÇnV@km@ƒ‚I@VUVVXVaX@@wlVVUkW@_mKXU°‚UbVLnaV@‚V@IUKV@XlVL@w@K@_n@lWlnnJV_XK@l°nšU@WVU@kV@nbVK„V—lƒ@nLlƒ„LXU@ƒlmkw@nW@UKVa¯IVn@@aVUUKl@nXVKVn²a˜ŽXblKnLlmVI@KUU@akLUaVa‚UXm@aƒ@wVUVKnLnWlXl‚n@@U@anUVm@U‚Inm@IUK@UmKVmU_kVUwm@@VmL—K@VƒL™aUaVUUUmKƒ¥ULkšƒVWaXwWa@UXImWUaULUUWKk@WnXbWށVWnk@UV@bU@@bƒJ@bƒV@XkŽmb™UU`VbkaWzƒ@klU@ƒb@VƒwUL@bV@U`ULVL@VUK@Xm@XWWIUbUxm@@lkkÇwƒVÛÇW@¯Å™UJ@xƒI™xƒ@@VULmKUnUxmKULUUm@@‚ULƒU™JkIWJ@b@LJUW„kJWnUV@nn˜Ü_nJšxU@VbšnUxlškb@lš@"],encodeOffsets:[[113682,28699]]}},{type:"Feature",id:"4303",properties:{name:"湘潭市",cp:[112.5439,27.7075],childNum:4},geometry:{type:"Polygon",coordinates:["@@Æ`n_VWnLVblKXL@VlbXxlaVb„U„VlUVJnInJ‚@VL@bUVVb@lnbn@lLVank@W@UlIVan@VanK@kVwlW@aX@Vn@bUJVn„a@K‚IX@@VV@nŽVÈl@VJn@VVL„K@UVm@UnIVm@UV@@blUUaV@XK„V@XW@XxƱ„bVxšLUa@™UKWk™@wmmUalk@WXUWkXUVJVaUImKƒVklJ@aX_mWULUUVUƒyXwWI@W@U@UXKWkXWVwU@±_U»ÝKUaƒLVbkJkƒWmXk@UVVŽmIUV™J@UU@UamLmwUVU@mnJ@VUnmV@b@Vm@kkWmXmKULUV@x„Ž@bWnVUbVblK@bVV@LUJknmKkLWa—±bUmULmWk@VLUV@bm@U°JUbVLX@@mlxkn@„WVƒKk„mK@k„"],encodeOffsets:[[114683,28576]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/jiang_su_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3209",properties:{name:"盐城市",cp:[120.2234,33.5577],childNum:8},geometry:{type:"Polygon",coordinates:["@@„n@‚°ĀÞ°@¦ULWKkx@bkLWb@lUlVXXJVbƒnUKmxXV@bm@@Xš‚„LޚܦXlVnš‚mzVJ@n@‚²ÞôkƃÞaȰĉ‚wnljÜó„éVÛnĊīČlj‚ĉ@ō@KÞUlU@ƒkklÇÈњÑlġXɛ@UġƒƒaU@U_ƒW@n™@kaUL@VW@kKmkUV@bkbWW@bkzma@ƒJWI@KUKULƒ@U¦™`@XUJ™U@KmXƒw¯KXkmy@aUIWJXXmV@K¯UU@@bVL@¤VLXbV@@JVXVK@„„JVn@bkKmakVVXUVVVlI@`U@nzVVƒb@¤n@@UlKXLVVšI@V@nV@V‚@ÈUx@šóVōšƒkÅWó@mU@bk@Ýwk@WbXxm@@J@zV@kVƒbV‚nLWVUX™WUXUŽWLUށ@Wl°z@VkxU@UVWIxWJkbƒĬ„nW@@bUl"], encodeOffsets:[[122344,34504]]}},{type:"Feature",id:"3203",properties:{name:"徐州市",cp:[117.5208,34.3268],childNum:7},geometry:{type:"Polygon",coordinates:["@@XKVX@WnIVx@K°Lnll@@I°K„nVašU°x²mlxš@VanU@aƒk@akmV@@w™@Ua@aUwVwUw@w›@UK@£kaĉlóIÇVkޱ@@kUKmVkIkxW@Ua¯UUm@UVI@WVI„JV@ƒ@Um@Uana„U@m‚I@J@XV@XaVlkXƒVaUUWLUyVIXmWak@ƒXkJókƒJUL@KWkk@ULU@Wa™lUIkJmI™mk„VbVš@lV°kXUKWKULU„mb@VUlVnƒb@VV@IVKUUmU@ak@@bmV@xklƒUƒU@UKmV@nƒJVbkXƒKUamLUJ¯UUVmI™bVV—Ll`@LƒLU`m@kXUVU@V„lxUK@xkIWbUKƒx@V‚kVVn™b¯@@U™@ƒxk‚mbkLÇK™b™@@XnJ@LmVklƒ@@XƒlUƒVkxƒakVVb@bVnUbU@@x˜VUšVb@š„ŽnIĊ`šXVVôJš_„K@xlU²Klk„U„@VaVVÈm@kVUVmnamUUaVƒXIVJ„@‚ç@¥nkVLn›„@@XVK@VUX@JVUV@UnVJVLUJVLUVlšnI„b‚KnU@m°™VanI@anV‚KVL„an„lK„blš„KÞk@¦@¤@„VKnLVK„L„KVzlWšLX@VmV@VbnU°@Ualk™˜WXLVU„KWkUUWšƒ@£Wa"],encodeOffsets:[[121005,35213]]}},{type:"Feature",id:"3206",properties:{name:"南通市",cp:[121.1023,32.1625],childNum:7},geometry:{type:"Polygon",coordinates:["@@VJ@bnzWl°L„xnW@LšVVI@Wš_V¥„@VKVL@LXJ„I‚@nbly@aXXla@aVUnllLX@@UVKlbš@@m„XV`V@„bĢ„lkČÇÆƒȘ¯šwnĕVĉVÿšUƒUĠƒŦğlXÑVǵ@±ōLʵ˝lÇbÝÞ¯xk@Çkķé™n¯@ğŽġƴǫ@kVVlUbƒL@xULǂóLUl¤@nkVV°VLkxVb@l™aUXUKWĖklVX@¤UšƒUkb"],encodeOffsets:[[123087,33385]]}},{type:"Feature",id:"3208",properties:{name:"淮安市",cp:[118.927,33.4039],childNum:5},geometry:{type:"Polygon",coordinates:["@@šnźUôÒɴ胚l¦nĖV‚kbmš„X@xVlVL@xUb@bUJVnUx‚šœ„lKVLÈx‚m„zXV@lW@XV‚b@bȚVxnb‚ƒVIXa°L„aÆVVaXUlK@aXIƄVlXKVUlIXalK@alwXLVK@¥Ý¯¯ÿ@ƒmVk@aX@ƒm„īlaXI‚wXJVUV@lw@U¯yb›UaƒUġUÅaUKVknaġm@kUm@wÆIV±nLÆw„ÇnUUkƒ@ƅÝU¯JÝI¯¦Ul@bƒ@@VVL@l@LƒLÅmƒL@b™@UaVaUWmLUKV¹KƒLWKX¥WI@mXk@UmaUVUU@VmL@W™bkIUWƒUmVóIkbmm™@UbVLUxmJkU@bkJWbnXU`Wz™KUÞÈlVb™Lmx@„kè@Æ"],encodeOffsets:[[121062,33975]]}},{type:"Feature",id:"3205",properties:{name:"苏州市",cp:[120.6519,31.3989],childNum:6},geometry:{type:"Polygon",coordinates:["@@ôèĊVnX°¤²„lxƒÈÜ@²x@J@b@X‚`nIUƙUUV@bl@VVnL@L@xƒJ@X@blJXnW@@`XbW„kVƒ@UbVxƒXUxkV@LóxVbUVWš²šVJĸklUǬ@ĢƳĠ°@šmƒī°»ÈÇ¥ULUU±a@bU@¯ƒU@KnImUVWUk™mXUVU@lIVaUUVWKUbUkWKU¥n£WakJUkUL›K¯L™KkƒVIn@VaUƒVUUƒ›UkVk@ƒU@amUkJƒ@UUlwX¥W@@UkVmk@JUakL›@kk¯ÝmJUn@nmVXlmbVVkn@„UJ@±WUxV¯a¯KōbżÇxUxƒšUUlWL"],encodeOffsets:[[122794,31917]]}},{type:"Feature",id:"3213",properties:{name:"宿迁市",cp:[118.5535,33.7775],childNum:4},geometry:{type:"Polygon",coordinates:["@@XbWnUJVzXKVVUbW„klUWbU@@W@IJ@nƒVmbVbn@@V@„UŽƒIUJ@XUJ@VVn°VVbX@lwlJnUVL@l²@lÈUôJĊklb@¤VLœ@@xVxUxVx@bVbš@@xU@ln„mnX˜mXLVmV@X@lxVnVJôL„LXa‚x@b„@@KVL@bn@@m@™@alLUUVaU¥nIV±‚I@mXI@aWWXU@LlUXWW_XWmaUwǙ@aaWUX@@kWUƒynÇwUKkL›ƒ™VwUmVI@aVa@wUKUk@wƒWn™laUmĕk¥„™ɳçóÑŹV™mmzkVmm@a@Ióƒk@@LWU@`—„WbXLWlkImJVn@`nXVbXŽmL@Vn@‚l@nUVl°Xx°U@LVĠ@z°˜@¦UV@Xn@VJmV"],encodeOffsets:[[121005,34560]]}},{type:"Feature",id:"3207",properties:{name:"连云港市",cp:[119.1248,34.552],childNum:5},geometry:{type:"Polygon",coordinates:["@@@‚lzXxmÆV„„@@¦„@l`XnlKšXXm‚KnLla„b„@„xmbm@kL@V@Vl@@VUXšJX„mbš@@„°Æ@èÈzlW°XĢJlÈ`lInbšWV_@mš™@UUķnƒôw°ÆmnaVƒVÛVmĸ»Ģw±Ý@@mUIny™UmWkۥݙƒK™@Wn@@aWUnwVL„mUaWIUWVk@kkJUVWLUkŃWJ@bkLWVUbÅUƒb¯KWbUJ„WXX`WXkV@KWVXX@bWJ@nJU²mJV¦UbVVkK@b@š@nm@@aUK@Lƒ@@awWbƒKóKUIUmkwW@U@UnWK—nmWƒn@b„l@bmVUb™@kw±n¯w™VUb"],encodeOffsets:[[121253,35264]]}},{type:"Feature",id:"3210",properties:{name:"扬州市",cp:[119.4653,32.8162],childNum:5},geometry:{type:"Polygon",coordinates:["@@VUXblVVV„b@xV@kz„V@l‚wVLUbVV@VU@VbUbl‚b@nkͰIÞV@Ɔ„VlmVƒÈÅxmKU²ÅJ@xVn@lĢnmbUlVLÆbĢV„V‚bœV‚aXk‚@VXKVVWšXVWXUmKU„aWaU@™¥@£XW‚UUV@@ynam_VWkUVUna@ÆV@mnkWmXkWU„W@k„@@akklƒlWUI@UnKl¥™I@VVma@a@I@U@a@anK@UmK@ÅVUnJl™kI@aVwka@mVIUW@UWL@WÅbmIƒƒULka™UWƒUxkLUKWlXL@VƒImƒÅVƒU™mĉL™Uól¯I±l@ÒUbVbUVVXUJUnVV@lnbl@"],encodeOffsets:[[121928,33244]]}},{type:"Feature",id:"3201",properties:{name:"南京市",cp:[118.8062,31.9208],childNum:3},geometry:{type:"Polygon",coordinates:["@@k@ma@kUUVmVIUWVUUaVa@Ѳk°Jôk@Wmk¯KmX¯aUakKƒƒWU„@XU‚LXaV@@mUaVUUl@VmkaUXm@ƒWUUna°IlmV™m™IUW‚@Uk@@aV@VVX@„V‚I°»nm„U@VKVan@m»UaU@U_@WlIUa™aVaUala@¯n@‚ƒkaUkUUWKU@mwkUUmmL@K@ƒLmUUVƒKƒVÅImU—JƒƒVkVVLšèVLVU@W„L„V„š@nVÜULVŽUL@bW@XbWbkJƒUUVUxVXmVk@WUUkVmIƒV@„nbnVWbƒJU„kUULƒa@Jma@XkK@VVL@L@JƒLUVU@V¼ƒnXlƒbm@kbUKmn@lVb@VXXV‚UV@b@LVbÆxXbl@@lV@U„VV@XVK²VlIš`„UbVbUlVVn@WXn@@VUV@„@KmbVLXқLkKƒV@nX@VVUV@b™nVllbšmnb„IWVXU@`lLlknVnmlLlbUmVInK°nUƒU@l@VU@Vn@„ƒ@alI„`VIXaVaVa"],encodeOffsets:[[121928,33244]]}},{type:"Feature",id:"3212",properties:{name:"泰州市",cp:[120.0586,32.5525],childNum:5},geometry:{type:"Polygon",coordinates:["@@lUU@@y@In@WwXal@Þxl@@anVô@ÆX„lŎ™ôU@™Vw@ÇUU@@m@U™JUUWKkL@Vm@@£„aUUmyV@@_kJUUVUUWlUnblL@aUmƒI@ƒULUW@IU@WaUK@£UK@aV@°V@LnUWWXIla„VV™@£UWlkXĕVLVWšb@kUalwUKU¯lU@mk£VôKȁVK@w„KVaUkķlUI±™ğ¥ÝUʚ™Ž¯ôm¦ƒĸ™‚@XXK@VVXUJ@nlbUx@blJkšmIUV@ÆnL@VmL@b@b@V@J@bnb‚U@UšJk¦mL@VVJkXk„ll@bƒ@@lƒXXVWlXnml@nÅU@ŽmbUVlVUXn`mb@zU@V‚VWX@¤š¦V@Xb"],encodeOffsets:[[122592,34015]]}},{type:"Feature",id:"3202",properties:{name:"无锡市",cp:[120.3442,31.5527],childNum:3},geometry:{type:"Polygon",coordinates:["@@nLƒÒlxUVkL™am@™ƒkVWUULUxVVVbUV@bVLU‚nnź™ÞVĠ¦X™VUUaôw@KlUVw„WUwVa„@lUXƒWa@_X@WmkI@a@W„I@w@KmKUUk@@aVUšVVÅmJ_@W@a@I±wÛ@ƑÇkw±ƒ¯£mWĉUóçƒK¯VkUWK@XkV¯UWabƒmUa™UUb™lln@b@xƒbXŽWX`@„VxUblL@bn@Vb@`m@XbWnn@l¤„n@xnVlU„™VLÆWœkV@VbÞJ‚_nƒl@nKVU@aU™U@mVk°WVLUV¯bVXŽ˜bXlVn@VmL@x—V@bl„š‚@œnW@X@VVJ@²VJVU"],encodeOffsets:[[123064,32513]]}},{type:"Feature",id:"3204",properties:{name:"常州市",cp:[119.4543,31.5582],childNum:3},geometry:{type:"Polygon",coordinates:["@@„L˜ŽnxUbVVƒL@xnnW‚nn@VVXn@‚yœImx„„°ƒšL„a‚¥n@VkšKVw„W@nX„VJ@b‚@UVn„ƒ@UnUV@L‚b@`VLklVÞn„Æ@VaXLl™ÈJšmmVUK@aVUUaUUVwVKXVlUš„n@šblKVUkw„ÑmKUVUI@±UI@U@WmX@›™kƒ@a˜U@wnK@UUmWk—aWU°aVUUK¯XUl@nVŽVš@bUVmLk@m„`ÝIUaU@›lÅXUKƒškVmU@wƒmk£m@XmWan@@_Uam@@akKVaUw@ƒW_XW„a@w@akmm@mL@UJmnUKƒ@@XnJWLkKUb@„Vxk„WƒL—aWVUImVULUK@L@lkLVVVllb„m@@°kbVbUbšbVbkJ@XV`V@Vbn¼"],encodeOffsets:[[122097,32389]]}},{type:"Feature",id:"3211",properties:{name:"镇江市",cp:[119.4763,31.9702],childNum:4},geometry:{type:"Polygon",coordinates:["@@šVĊKšn„VÆUn„„J@UWKXkVLlKVwX„šVlbVK„„nJÆaš„ķn¥°óÇIkšWKUbÅ@mƒUÝlkUK@_a@KVUVm„@mƒVU@@aUIWƒ@mƒXUx™LUlm@¦ƒb™K¯„ƒƒnw›Jzm@UW@UmmXmm@w„KUUVamw—ƒKm@UbUL@ŽƒVmn¯¼JƒUW@UUU@@bl@@VŽVXšJšnnU‚‚k¯JmbVV„Xn@VWlbUnk@VVUŽVb@nU@WbKWVƒ@XV„„lLVb°bnW°Lnl@X"],encodeOffsets:[[122097,32997]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/jiang_xi_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3607",properties:{name:"赣州市",cp:[115.2795,25.8124],childNum:18},geometry:{type:"Polygon",coordinates:["@@„`l@Èbln„@„KVLl@„V@bȎlnšKXkVlVL@„lJnb„¦VKVVnX„W@w°@VU„mln„UV`šU„bVUV@„xnKVI°KXKVkVL@al@Xa„LVlULWV™VVL@b„x@VXVmb@x@V™VV@nn¤„šlb°b°KXXWbX`lbXx‚z@x„`VIVUnK„L‚x„WXLVKVbVLVU@wnW°b„@nalX„‚mXVJn@U²mKkVl„U@@xlnœaVmlKnœ@JVLlŽnVššl@XXÆèVlUX@xVLXVšb°W@wnUWmXk@K‚LVwUmUkUKUw@wVaVK@kƒ@WnkUKWkwlmXL@KVUlLVKXmWU„L@ašL@malaVk@aa‚ašƒnXš@VVUblb„Jn˜ƒXa„V‚wn£„K@UWmUk@ƒUaWIV@b™JW@KmmU@aUUUkmKkVKlUU™nKVU„lVaV£Å¥WUUK@UkUUw@m@mIkƒƒUUWƒLƒK¯Uw°¯@wUKUbƒKmƒ@kkKUL@UUKV¥U@manw@k@U@Wm@@U@Wwkm„wWaUU@UUmV¯kwƒ@@kmƒkKkUW@UK@ÅV@XWWkXa@Ul@Va@KVaUUU@ƒaXwla@UkVWaXk@K@lmkUmV@Vmbk@ƒ»XIƒ¥VUkƒVUVU@anKVUƒKUalU@wX@˜™@a@K—@ÝwƒL@ŽUnÇlUIkJmn@ŽƒbVVb@VmnkLƒV¯U@ƒ±l—IWmƒ@kaUI@aÇU@K@KUIkbWbƒJUIUyƒX¯ƒUbU@méUUmUk„WK—xWIkJm@V¥U_UJUwmVkšƒUU@ƒƒƒ@knƒwm@UmkWJkL@n@VW@@‚U@knm@kUml@xÅxƒ@@XUJlb„@VX„JVxn@lbV„@lULnV@VlnV@bWV@bXL@lVLVb„V@blLn@Vl„K@xln@bX@lašLVbnKUVVb„KlXVVkxƒV@nnVUb‚lV@@z—°WWkbƒIk‚WL@LUJ@bUI@b™`@UmI@mkK¯XW™™mUV¯@UUVUUam@@VULWUJƒIm`IUJ›KUkW@Uxn‚WbnnmlXbmIUVmV@Vnb@V™LUKWLnÒVVV@V„UL@„kJUV@bƒÈ@ŽšV°šŽ@XVV@l@xUz"],encodeOffsets:[[116753,26596]]}},{type:"Feature",id:"3608",properties:{name:"吉安市",cp:[114.884,26.9659],childNum:12},geometry:{type:"Polygon",coordinates:["@@lxnb@V@bV@ln@‚n„‚lInš@blVXK‚nk¼@VUKWL@b™L@`UXU`ƒ@V¦XLĠ@lJ„¦@„nV@l°nn@‚mVXnaš@nb‚K„n@l„IVƒš@VanJ@_lKVVnš„L@L‚K@Vn@VbšUVanKlLnbnJVbšnWVnVVanI@‚Vb@L„bVKVanXVbVJVU@aXLll„bôlƼXxVLVK@Xn@ƒxnVVVmb@LnVVKVXV@@mnaVXUVnV˜K@_UaUmšwnKV_‚anKVLš»„K@¯ÝU@›™U@kWlUn™lknK‚VnaUkma@ƒUIUwl»Åw@ƒVwV@n™‚n@ÈXlKVmna@kVw@anm‚@n_WWk@™™mUkUK@Im›kLUn›bkm@wV@kƒlUnLV±m@UInWƒkWmbƒ@¯amX@xUVUKUaULWKƒXwƒKmLUVUJƒ_@wyWwkaW_XaWW¯L¯akaƒ™m£@mUUš@U@wnaWU@Uƒw@aUKšUXUVKUkƒKWbk@@bUKUlWL¯LUJmLƒwU@UVƒa™VU_ƒVkmƒnUV¯@@xƒXmWUUULƒ¥makI@ƒUKUkWl™LkmǍ@aƒUk@UKƒLƒ@kmÇak@ƒ_VlkL@`lbnšlLVanLnbmVÆln@škJlbknmKUbÝmmwULUK@bkLWKULUUma@Kk@UV@L@llbVzšxUxnl@bVLmŽšŽ@IVJXœVlƒLV`@bn²@J™@™V@Xmbñ@WbUJ@bm@@LUĬU‚„¦lV@xXb@blnUV"],encodeOffsets:[[116652,27608]]}},{type:"Feature",id:"3611",properties:{name:"上饶市",cp:[117.8613,28.7292],childNum:12},geometry:{type:"Polygon",coordinates:["@@„„@„V‚š„„I°`nm¤²@bVJUVVXUl@Vmb@xV@XbmVVœ@lkLmbn`VbnU‚@Va„UnbVllUXV„a@w°VW@_VWšLššnVlbšLVbnl„KšnVK@IUW@_@am@™‚ÑUólK@U@WU@VwU@UI@aUU‚aXƒƒ@kwmJV@yX@k‚anƒƒ@mkwVmmI@aUU@aUUW@kVkV@@anKš»„XVWnIVUl`@_„W@wlUœV@UWKnU‚bnްInJl„UV@VnI‚b„Wn@VklL@l@Vn²m@U`kI@bWJƒnV@°VXnJm„XVmx@VVL@bkLmWULUmU@ƒbWXb@llnX@‚xkxVV„nVV@¤nL‚nVxnJVXX@˜ššbn`VI„b„@„blmlLnaV@„blWXnlUnbl@„ƒšKVanUVmm_XK@kWWnašU@UnaWUXa›ƒXamUkKmXUWƒLX¯WakKm™nUWwXa@KW_„aXWW_@WnIVl@XU‚LnWVknK@ImyUUÆbXK„Û@W@IÆUnƒVÝlkVK@mUIVwkUVaUm@aVIVyXIƒaÈwmmk@UnanVUmÅaó»lwšW@kkUVmUK@WKLƒUmWULkamK™Lk@Wa@wk@UU@U@mbUIWVKUXWmkUmVm›U@LkakKƒw@w@U™¯ƒ‚ƒUUn¯l@bmn@xkJWxkL@VkI@mƒkmJUI@V@b@VVxnbWlkÈkVƒLƒbkKmVƒL@V@²nxW‚kLUL@xlKVx„bXmVnšWJ@ޙ°@n™xUKUw±`UImVmnU@kalm@akwƒU@UUJmxU@@Uƒ@kU@Um@@Kn™ƒVm@k™KmkU@@WUnkLWxkVUwmKmLkU™bmKUbVŽ@xUnkJ@n±ŽšUxVXUšWJ@LUb™lUnm@ƒW@nknUJUVm@kXllknVbÆK„VVbš¼V„@šUl"],encodeOffsets:[[119194,29751]]}},{type:"Feature",id:"3604",properties:{name:"九江市",cp:[115.4224,29.3774],childNum:12},geometry:{type:"Polygon",coordinates:["@@WUkVUkmaƒVUb@mVUam_nalK@kU›nUWaU@@wna@UVkUWVUUI@a‚±n£m¯_ƒJ™ƒU@ƒƒƒĉ¦Ul@UV™Km™mLlm@ğ¹m`Uk¯@@UVK¯™@UUK@amkmKkVVUa@UkUƒKƒŽUa™L@VVXUJ™@ƒnƒ@™š™WUbƒnVb¯V@LÅlÝIƒJÅkݙm@Ua™WUU@UmUXmmwVUUKWUX±mUam@kWƒzUaVmÇw@aÅLmKXƒ‚UWKkL@W¯IƒwVw™lkUƒJ@Um@ÛÈWށKUxWkƒaUU@KkLVl@„UKUX±KUb@nVVUbUVmaUlUL@„ƒaUL@‚@nUlWzX`@„V@lx²„@Vlb@bšVÞ@°nl@UxVL@lUbVV@n²xVUVmnUÞb‚a„J@IšV°xnbl@nbÆ@VwnK@VnXlK°xnUlVX„V@Vl@L@lk@W_XK@KƒkWxUL@J„nVx@aX@VVUa˜IXlmL@bVVX@VbnK‚a²XVWƒk°a„@UnV¤nbmLmW@XbmJUbVL„aÞK„L@K@U@aVKlbV@nXlJœxV@VnšŽVȚ„ÞKôbźĕČmV@ĊšŽ²xÆIšV@Þ¦ĸ¼ÞVlŽVÞnxln°Jœk‚LXWVUVUVwnJVI@yn@lXlaXmWI@w—»ma@UmK@akKkXmW@_kaWakKWk@@K@IšWƒkUa„ƒ"],encodeOffsets:[[119487,30319]]}},{type:"Feature",id:"3610",properties:{name:"抚州市",cp:[116.4441,27.4933],childNum:11},geometry:{type:"Polygon",coordinates:["@@°V°UnÜ@n@lnLlV@bšV°L„lnLllVzVVXlV„V@@L@xX@WlX„m@UVƒL@V@n„°škVmVUnKlaXxVbšnlU@lVVnaVI@aX@V„šJš@V„@b„b@šVbš‚@X@lUL@Ž@VlIVm@wUVanLšalVnKnLVxlUXwlKVm@k@Una@mWIXKWUÛVƒk@a@UVWn@@kl@@W„XlW@_Um@UVK@a„LnalInWV@@xnI@¥‚K„—šm@kKmƒnk@mlI„¤laXbVblknV@U‚KXVlUXa‚@@Unw@±mU@ak_±a@ƒUJUIƒVKW_Xa@aWU™šK@mmUVa@IXa@UWmšannlmX¯WKXwVUVwƒ@XUlK@klJXa@kƒkmm@Uwƒw@¯ƒW¯kw@WmbULƒaUUU@mVUU™WmkUb™KmkkK@aƒkUƒ¯¥Uƒl—ƒm@akU@mš@KVIVV@KUkUVUkaƒUWb—„mƒIkaVaUU™@mW™„b‚b@bUlkb‚b@n™K@bƒKXVWnULkKUV@LWKknlxXŽVLml@X„Ž@lULUb@xVxVLVlVnUxK@LWlXnmV@x¯X™aWUUK@wVWUkÅçm`@mn@bUx@lmbUnkLÇWm@mšU@Ux@„Æxk¼VxVJ@„nbVlmbUmLklmškVlX@‚VœšV@°Þ"],encodeOffsets:[[118508,28396]]}},{type:"Feature",id:"3609",properties:{name:"宜春市",cp:[115.0159,28.3228],childNum:10},geometry:{type:"Polygon",coordinates:["@@@VlbnK@b@JšLlUnx±ĀXxÆW„X@lš@V„@@blJ@nX@˜xUbVVUbVV@b—VmnmJœ„@bmbm@klUbƒLmbœš@lVb@xUX@bVVVbV¤@LVV„bXlVw‚LXÜÇn@@V„IlVškUx„x°J@XlKXLV„‚WnLÆK@bÈxUnVb„ylXn@Vbn‚W²XV‚LVVUŽnxWnnV@VVVšXVbn@ޚÆl„IÞJÆk@K°UUa„mVa@UUUš»@wV@VƒkkUKUVW£U@UmW@@aXkVUnVlKVV„UUkVmU™@kWaUanU„VVamIX¥W@@aUaUVW@_mW@UnIVVn@VbVm@bVL@anKVUkƒWK„UXV‚Ikx‚@na„bVK„b@nVJ„_V›@Vw„‚VUVVXUlUUaV@X@VblašbnKlkVaXaƒ¯@m@U„KVUn@WƒXkW@@w@KU@UƒWkUUUykkmKƒk¯K™U@akUmK@k@mmÛ¯V¯U@‚ƒL™¼UKmLbU`mL™xVnVb@`—LmUVUUWmb@nU@UWULmU@KnaUUmU„wmJ¯IUJWIkVkaWVUIUlWaUIUVkKmbUIƒÒlVUnnŽ@VlLUJ@bUX¯@ƒaWVUKUXƒKUbm@UwKWa@a@VkUWn™@Uak@mbX„WJXbm@mL—aWVk@™wƒL@WmanU@knwWmkaWL—KWUXaƒU@¥l„UVVVbnwƒ¥nKV™»@aUk@a@UƒJ@kƒmLma™@mbUWnm@ULǺ@LXnmxUŽm@UbkbW@@akLmWk@UXmJmUkV@VUXVlULmKUxkL@lmXnJ@X‚l°Vnb@bU@WbKUX@VmKUX"],encodeOffsets:[[116652,28666]]}},{type:"Feature",id:"3601",properties:{name:"南昌市",cp:[116.0046,28.6633],childNum:6},geometry:{type:"Polygon",coordinates:["@@šXš™„@„mš@VIUW@UšKVb„„LlV@VVbUŽlUnLnl@bVL@V°šUL@V°@Vln_Ġºn@‚knKnššLVU@VkĊ¥Vk@™Uƒ™»UaƒUÅLUalmkklWn@VUVIlm@m„Xn@VmškVa@KXIV™UWVw‚™²@m@U@VK@k@W™Ua@™ƒa@aUƒ™@™IUƒW@@bUJmbUU@kkV™mUaWwkbmLUVUn™lWbUbklmL™akbUaW@U@VbkVWVUUUVƒUx@‚Uœƒ`UI@mƒaULƒamb@lwJWUƒVXLl„UVmL@bUK@aUnUam@UUmJ@VnX@`UXVŽVb@bX@W¦nJUbƒUmVVbXb@lVšUnVlƒVUUkLmUUVWl@bX@VnV@X¤VUVLllU„U@@x™¼VV@V"],encodeOffsets:[[118249,29700]]}},{type:"Feature",id:"3602",properties:{name:"景德镇市",cp:[117.334,29.3225],childNum:3},geometry:{type:"Polygon",coordinates:["@@VVX@Vbmz„xUlU@mbmL@V²xVbUVVblbX@šVškVykValKVI@bn@n`lVWnX@l„L@™WKnƒVIVa@¯nK@alIXJVIVWUw‚ƒn@nU˜„nK@alI@a@anKm_™a—™W@UWmIUwmmK@£UUƒmUUlwwW@km@kWaX„aV@VnVKnXlK@aUK@UnwWUnƒmIUW@¯mU„XI@alJV_n@m±@U@kkKUlm@ƒXamJ@UVUkƒmI¯JmamVXL@V›UkV@xƒX@`k_UVmJUXƒW™¼mL@bU@UllX@VV@bVV@bnJUnlx@n„Žm„b@lWŽ@zU‚nIlx„@W„bVV@bVJV@UxV@@X@VkLVôÒ‚šn@@b@`VX@J"],encodeOffsets:[[119903,30409]]}},{type:"Feature",id:"3603",properties:{name:"萍乡市",cp:[113.9282,27.4823],childNum:4},geometry:{type:"Polygon",coordinates:["@@VWnL@UVW‚LXaV@@ama¯Uk@WmInW@klKVwnLVKUkVW@UlUnVnIVWl@nXlK@bX@laVan@VnwWm@KȹVK¯m@kmU@ƒƒ¥kIğ@WKU¥„@V_VW@_šK@aXKVL@Ul»mWLkU@am™kJƒm@kmU@@a@UmakwU@›„Xlƒ@VXk`UIW¼kWWX@‚œ@l‚xV¦XlW@Ubn„@ŽmUkL@UmJ¯UkUWVUaƒUlm@UXWl„nUJ@LmLU˜nXll@bUVUUmVUn„Ž@¦šxlŽnn@VÆÈU°kbV„VxllnL@VnVVUl@V„„anL"],encodeOffsets:[[116652,28666]]}},{type:"Feature",id:"3606",properties:{name:"鹰潭市",cp:[117.0813,28.2349],childNum:3},geometry:{type:"Polygon",coordinates:["@@@XV@nlšL@lUnš„mŽ@Ln@@VlV„@@VV@nwVI@V„Vlx@bknlbV@nmnUVJ‚_²‚VxVLšw@mš¯@ÝXIm™nUWƒaUwkL@wVKlKXmw@±@U„KnUlL„a„KlUlÇXkmaUw@U@a@Uƒ™UkwUJ@zWJ™w@WbkVWUL@VmUklUaWakbƒ£kJ@nmln„lL@Ž™nƒ˜L@¦mJ@wU@mXkJmbƒK@bUL@VVn@`kXƒW@Xk@@lm@UX@V@b„lÜUXVWLXJ@nmb@V@l"],encodeOffsets:[[119599,29025]]}},{type:"Feature",id:"3605",properties:{name:"新余市",cp:[114.95,27.8174],childNum:2},geometry:{type:"Polygon",coordinates:["@@m@@WULUKWwÅ»ókƒakkWK@bUVUIUamWUbULƒa@KUa@mJUbmUXU™mUamImakKmLUb™VUam@@UL@KƒKm™UUkL@`mIUb™@U„@V@bVl@bš¼UŽmL„¦mxUaUUƒVkŽ@¦„VWbXV˜LXKlbXnmx@lmVnb@X„Kšxl@XU˜bnKn@WaXIWƒnal@Vbš@XmlV@U@bXb‚LVxn@Va„LVWVLXU„b°@VW@aVIkK@UmVmkU„ÑVJnalLVUVJXbVkVJXUlblUXJVI°JnI"],encodeOffsets:[[118182,28542]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ji_lin_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2224",properties:{name:"延边朝鲜族自治州",cp:[129.397,43.2587],childNum:8},geometry:{type:"Polygon",coordinates:["@@Wxĵ„mš@„ó¤VX@@xܼƨš²xWxƒV„V@„XVƒ„„„ƒbWšXllaÞU°Ċ„@ô¼„LôÝWanV¥ƒÑnĉ°¥šÅX¥°¯@w°w@»°k£°mÈŹ‚mÈbƃŎ¦„K°z@Žkxl¦UbU¤šššklV„KŤÞȰ@@bšV@nVVUlÞ¦lUllœVlU°ÑU¯Vƒ°w„bXxl@V޲„˜@n„ô¼ƒó°™kmVk²ĕ‚w@wV™ÞÞ@@Ġƒö»˜¯œ@‚„šbnb°mÞ¯°V°„ÈJmX¥mam™UřƒUƒlaU¯™ƒ@w™Kk—l±n@@wƒkÝVUUl±¯I¯b™a™lƒ@™kLmakbƒ@ġƒŹé°™Þb°šékƒƒLm™„wX™‚aÅb@bVlƒbVb—ÒVbUb›UUanwƒakbVŽUV›ak„¯„UŽƒLmxV°UxnôŻX@J„Xkl‚bkbĉaƒbƒWU„ƒ@ƒk„WUU¯@@klmƒ@@™Å@aƒwWXlKkI@WbUaVIUanUƒƒ@ĕƒ¯K™„mUnWUwm@£ċèkUmbUmm@@nkJUalwk@@nmWUan_óaWmnw±KœIƒwl@UmƒI@an@@mlUÅmV_™KUkƒ@U`@_ƒKUmU™@U¯™mmb¯@kb™ImV¯ƒƒLkbƒKƒƒÛ@ÇnɱJóaÝĢkb@„›x—ÒÇllœ@‚޲V‚„ÆUVV„UÇ°X„óxlV¯„lV@bƒV@n—x›@—¤@„șŎnxV¼knšJ‚nšKX°˜¦UlnVbUbÆVnÞWVX¦llšb@l°œVJôÒnLVbšbXŽ"],encodeOffsets:[[131086,44798]]}},{type:"Feature",id:"2202",properties:{name:"吉林市",cp:[126.8372,43.6047],childNum:6},geometry:{type:"Polygon",coordinates:["@@ôl‚zšaÈV°„šK@„mŽ—LWl™nšVxUV‚È@ŽÝĬUÈn‚ôLša‚„²VmĀkV@„ĠĊnU@b„V@b˜@nl°UVnÞaôJ@bš™V„¦mlkššbmVXx¯@Vxm„nbƒ„šbÈK‚V@bÈL„wĠyônšmnbÜ@nn„V˜x@n²K‚„„J@k„al@nxÞU„Lź±Vwkw¯LWWUš™kŎīVwƒw„°y„Vĕ°wÈVlkÛ»@wW@Uô£@ƒn™ĶƒXwW™aUamKóÑUI¯›@k™akkW¥XUmÝÅUVaUa‚mVk—¥W¯™Lm™IlmU»mwȚō@ƒ˜£kJUÇk@am¯y¯UVwƒa@wġx¦ƒKƒƒ¯X°Ċ¯¦U°ċWULÅa±b¯@UkÅWmVƒ™ƒkIUlóŽċ¹™`óIƒlX„WŽXxmbUƒLݏƒbƧ@ƒx¯bƒÈ—l@xƒš¯zƒaݤ@nšm„VWb²bmn¯J¯Ò@n„š"],encodeOffsets:[[128701,44303]]}},{type:"Feature",id:"2208",properties:{name:"白城市",cp:[123.0029,45.2637],childNum:5},geometry:{type:"Polygon",coordinates:["@@ó™ǩŁ@WlwUaƑwÛÅÇéĉamKƒōÇ@Iƒ™ôġVƒȁÑŹçƒ™ÝUƧċĉwóóÝ@Ƒ»ğL¯ll²@ƆÅV@¦m‚Åb@nmlU²VxšlUn™@VbnW„bÇbk҃š„n@èlnlšU҄ްLšx@¼ĉb@҄šUŽċxՃènLVxƒÒƒbÅJ±a@_ÅJÅnƒŽVb„Kl„nUÜĊ@„Uš™xXVÆn„mšVššJÞ¯V™ĠwšƒXw°xWL„x„KV¦ôU„wVÝǬóÞޙ¼‚‚„ÞkŽVôȘxބU„lVn¦ÞšĊa°w„b°@šbÆw„lŤL²`„z°@V@@™nJVnl@@¥nUmmn„@mwnmmUnk@mlwUaƒLnƒ›wn¯°anƒWakI„ƒÇmXwÆamUXUlJXa‚UUklKUknmÞV@‚K@VWÞ@VkUwVƒ"],encodeOffsets:[[127350,46553]]}},{type:"Feature",id:"2207",properties:{name:"松原市",cp:[124.0906,44.7198],childNum:5},geometry:{type:"Polygon",coordinates:["@@„šźèȂÒU„óĢ„š@JŎȄ‚‚LnŽĊbÈêÜÆƒxVbkx@XǪłôš„kÞ`„šW„b@n°ašbšKšnVw°`š_X`W„š¦„ĊIkmVšakw‚K„x°UÞb„U@lšƒl@°¦œVW„šaÞbšxÞI@mVI@ƒVkŚUWK„¥nL‚a@ƒ„@ȍ„@°ƒÆ@nU@KÞalkUwVékUWw„™kU›VkkƒJk¯@»ókƒV¯ÆÇI@bĉô¯@™ķw¯nmmÅL¯wƒVƒUÞy@UówÇLkmm@@UóxkkĉmL¯wVwkWWX™mLõm@kűV_ƒƒô»ÛƒÆ¯@™Va™VšaĠVlmğwķUóÝƽ£ÇJkbǫaƽLW@nxݤkzƒy¯XɅm@VšôÇX¯Ė¯ºÝnUŽnLVlUÔmV"],encodeOffsets:[[126068,45580]]}},{type:"Feature",id:"2201",properties:{name:"长春市",cp:[125.8154,44.2584],childNum:5},geometry:{type:"Polygon",coordinates:["@@„U°xÆKnn°mĸxš°@Ċó@aÈJ°Å„Uôl@¼l°„IllœUlVƒšXxlVUêVxkllnÈUVll@Vx²IÞ¤VUlVnIôlރlwô_„›„bVaĶLXÅÞÇ@K˜¯@wÛaƒçn¥š¯WXyW¯XwƒUmmÛ@ma™nómğzƒxÇK@aUÇL™a„ƒmanƒUw°@WwnU™al™nkƒ¥šU™@aóIÝbUm¯Vmk—@@aƒU@amVğĉ@ƒlUnÿ±Uƒ™bóKmVÇÞī@ÇVUUw‚™šmXk˜Kn@ƒ™L¯ƒÇU™byókōè@b‚n@lÝX@x¯ô@ƙUV_maXm@aóƒJWxnX@ŽVVnĖVnUJ@nōÆÇ¼V¼kxƒLklÝw@xƒx@zV`ÅbmxU±xU„nnm‚kn‚ŽğU™bUŽ‚šUb@šÅ°Ü„󼄄U`Ʋ@lön‚KšnXWlXUx°xnKĊllôw@Vn@lnÈKôx@VÝz„V"],encodeOffsets:[[128262,45940]]}},{type:"Feature",id:"2206",properties:{name:"白山市",cp:[127.2217,42.0941],childNum:5},geometry:{type:"Polygon",coordinates:["@@Ušl¦kÒÆ°„IlÒU¤ôz„¼lJš„U„n‚ÆXVl°@²aÆbVKČXV¯°¥¯ĉ°W„„„L‚¥Ģw@x„bUx°V°zn‚‚b@ÈlVŽlIœ@˜w@m„U@akU°ƒkUôwWƒÈ¯VUƒVUƒÅ±U›@kÈk˜Ñœw@ƒlaÞġƒUÞ£@ƅ‚KnÑ̝@W‚aUaVUVkkw@a¯@¯™Ý™ƒVXnW@@WkXmK@xkKUb@bW@Uw¯„mmb@WKUbmUbUaWbƒJĉIVW@I—l±LkšmU™bUm™@ƒnkKWa¯n™@„`Ubma™„ĉL@bƚ—@W`ƒL@n¯‚Xb‚@kb@x™Lƒ„™@V‚kL±™™mlUIU¥mL@lÅx@_laƒƒ@U—aƒV@kmmƒK„£ƒƒLƒƒmKUnÅKVbmXVlèĉUUbml„ĢŤƒIlޝbǦœl‚@ô¼Ģ„@x°„l¤„n„a„l@x™b"],encodeOffsets:[[129567,43262]]}},{type:"Feature",id:"2205",properties:{name:"通化市",cp:[125.9583,41.8579],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÆlXnĠx̰lȰš„K„°kXm‚@¦Vbk„ŤJšnݤk„VÞVVkȄb°y„™@w˜k„ǰa„wƨ@„aސ„K‚VnaWwXWƒ„kôJš_ČºôVkƒ»óyV£kуJůlÑk¥V™ša@wƒkƒbƒmk£¯ƒ@wġƒó»@›kÈ¥°ak„JÆ£ƒġnkVaĊVkçWUnUaÆLVmnL„„‚KU™±@—„m@a¯U„bmV¯m@_ƒK™™U™ƒaƒÅ™Wó¹ƒ@UanmWak@@wmI@y™@mk„JVa™@UaƒIkJ@n™@Um±kkxƒm™Ik„ƒbÇm@ްbXn„V@ްÈmlÞ¼¯XVº¯Lm„kWWXLmVVlknƒ@@lnWƙ„Vxbmšnšm„¯lÝaVȁè@¼V„„b™„ÆŽ°ÞUVšJ„„kx›I—xƒƒƒIV¤™ÒXxmn"],encodeOffsets:[[128273,43330]]}},{type:"Feature",id:"2203",properties:{name:"四平市",cp:[124.541,43.4894],childNum:5},geometry:{type:"Polygon",coordinates:["@@Ɇn°W„zlyÞ£mwX@ƾKǬblaÈIƾ¤ôÞĸVĠxnmmVƒ²w‚VnwÆaU_@y„w@wÞxlk„KlwU»È»ŎÅ@mVIUmmĕUU@mWXw„Iô‚@bWnnbU`‚šV@Űó@wÞW@km@aŎ烙@m°Ñ°Inm±aXaƒU™n@mƑšU¦@šÇޝaU£šaU™ġ¦ÅҙJōUŻókUÇ@™¥¯ak¯mUVak@@aċçÅaUƒm¦Ý`XbƄ@n`ƒI™xĊÞōÞml@šUb@Wl™_¯JkšÇUÝÆÅb@n™„llUb¯„±a@ƒ—ƒWĉJġ™Unóšm¤œxôaVnƒxôI@x„V@bmƙ„@lnLmޯޙxVb¯þ"],encodeOffsets:[[126293,45124]]}},{type:"Feature",id:"2204",properties:{name:"辽源市",cp:[125.343,42.7643],childNum:3},geometry:{type:"Polygon",coordinates:["@@żôŎVšIÆÑĢ¥Vš™bV¤°bȍ@™V¥ƒ™Þ£lÇUUUÝlƒÞ£™mţIlƒUa@¥nlWƒ¯ƒL¯™kÇġ¯ğwWmÅk¯UƒVU„„bWlXlmnƒbUx¯xVVknlŽUbV„ÇKUb@„™VnbmlnzUº±bmJUbWÈnèm҄š@X`WL"],encodeOffsets:[[127879,44168]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/liao_ning_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2102",properties:{name:"大连市",cp:[122.2229,39.4409],childNum:5},geometry:{type:"Polygon",coordinates:["@@‚IÞmVk@wXWÜbnwlLnU„@‚nLlbXW@a‚wnbl@XL‚aš@Ċ¥@LULnJ@xVnmV@VXXV@VJkn@VÜKXXôJlb„xl@„IVbnJVLUbn‚lnVw„JVU@ƒXU‚aUUlwn@°ƒn„VKnV°_VJšwl@nwlV„IXWlIVVnK@IWmkIVaVU@WÈUlmU@U„WUalkXġŻ@kIƒ»mm™akUm›ĉUŁV»²ġVĕ@aUU؍IɃ`ȃ@kƒw@ƒUƒmwĉ™@ƒWķсIĉÇbÝLkymbIƒwÇmÛbmbU„¯ÜõÈkÆVbŎxnXVÆnšǪ¦„bš¤Uš™xÝnĉÒmĊVȄ¤Èš„bƼ„Ā„„ÆÆÞ„źb„VVbX„‚°²¤"],encodeOffsets:[[124786,41102]]}},{type:"Feature",id:"2113",properties:{name:"朝阳市",cp:[120.0696,41.4899],childNum:6},geometry:{type:"Polygon",coordinates:["@@na@UVI@m„ÑW™kaV¥UI@wl@„aÈbšm@wVašk„@@K@kƒ™@a@UUmƒUUalmU@KÇUű¯@±kUKVkUaƒaU@¥m@@¯k@WLUmkn@mmIkm@amU@wVmkU@Klk@U—m˜aXIWWUL™aULVbƒmk@UUmUk±™_Uym@mbkImaX¯WW™xWKzU@WƒkJWwkV™@Um@UbVVVVXb@VWX—@WŽ@Vkb@V™nUK±aUUlwX™ÇWKknU@mmUkƒLUVƒVUUVƒUaƒw™bkKmwnIƒ™kJ@nmbƒ`kmVkLWwUm@UUU™K@UmaUa@UUaWK@mUƒ¯Wkk¯VmUUŽ„xVXUVmL¯ymXkWUbmXUKƒVknWx¯JVnkLƒl@VVxnxlĀVL²WlX„l@bÝVUn@bnlÜaXblIVl@šš@Ȧ@VmbXV‚@@x„VVnUn@`°@VnXU@K@„VV@VmbnVn@ln@b„xƒ°Ub@bšLV`Ånƒ„W@@lUšnnWVU@Vbkl@Xl`XxV„UblŽkX@ް¦V„UVVbUlkV›@UbVbkLUxmJkXšš@b‚bœxVKÆlXX˜bnŽnala@ƒUk@U„VVklKVUXKVU°KVan@VUnLšKVL„WVaU_@mmUXa@m˜wXwVkVWXk‚k@›„k@klm@wXKl@U@KVUUUVaUƒV@„alL„xUx@b°°VnnVšxlIXJmx„LUVlV@bnX@Všb„aVx‚@XJ@b‚n@VŽVXȄl@llX@lU„Vô°°@ބVbn@‚V„k„@VW"],encodeOffsets:[[123919,43262]]}},{type:"Feature",id:"2106",properties:{name:"丹东市",cp:[124.541,40.4242],childNum:4},geometry:{type:"Polygon",coordinates:["@@lzXJ‚U@š²x‚@@Vš„@bUVmKUn„°n@lnVK„„nV@n@VlV„°WbXn@‚VzƒJ@¦@bkb‚bUl@bkbƒJ¯zƒWULWbklV„nb™¦VJ@„„K°U„kl@@W„bVn°@„Všm²U˜nX`„UÜLXmVXlKVbUVVnUbn˜ƒX@VUL@lUbWxš@²kl`n@Vlb„@nUVWVLVU@aV@²bl@ÈmšxWX„VÈU„JV„l@„„la„WnX‚KÈkÈ@Va°bÆm„@XV°IVV°UnalƒVUn@UwVU„@@VVJ„I@bl@XK@wWmXU‚UVbkJVXnJVI@mƒknwlKXL@`l@VI@UUaVKÞn„aVm@aÇ£XW„U@aÇUU@mbkKm£™@WW™ƒL@@Kk@kl›U—bWKUkUU¯UõÛƒmUUaVU„U@WU_W@kVkJƒ_WKkV@bUL™¯¯ƒ±mk¯ġƒğÑ@UmwƒKUakƒ™ƒa@a„m¥ÝƒIUWmk@w™mţ—L›KʝbȗKWĢklVbƒX@VV‚knÇV@XUVUblJXn@J"],encodeOffsets:[[126372,40967]]}},{type:"Feature",id:"2112",properties:{name:"铁岭市",cp:[124.2773,42.7423],childNum:7},geometry:{type:"Polygon",coordinates:["@@XJm@¯šmXUlnVbUJƒU@bV@UJWL@VXLmJVbkXlJXxVL@b@V@n@b@`Vbk@lxknV@VV™V@bUL@bV@@bVK@VXLWLXJ@LV@nbWJ@IUV„x@LVJUXVxVx@VV@@LXJWL@VU@@L@VnL@bVVmVX@@VVInJmbnLWVnVULVVU@VVmX@@JVz‚l@„nVVKVXރ@mk_lm„UUWV_nJlUÞÑÞVVUVƒVL„UVJ@I„Vna‚@@KV@XwWknwnKlalU„w„aĉݚwšJl_@aUaƒKUUU@WU@WXUÆ@@UVK@n@UnVVšblK@bœllb@b„bW@Xbl@UlnLl°°bš¦nKlVnI„V@UWU@WXkƒw@am@nm@aVw@I@KUaVIm±XÑlknJVnVJšaX_VaUaVKmwnkmmn@lU@U@mnašXlKUmUIVmklaUK@UlUVUW@U™kVm™a@UUU@JmUU@@bmb—KWV¯XUKm@ka@UVKVk@aUKmLkKUUÝUmbXbÇJ@k@WU_@m™™@klm@UXKVaUI@KWUXaƒÇWk™aWUkWUL±U@lUU@ƒUJƒI@V¯JmIm@@aU@Uwƒa™@UV@VkI›V¯aUkƒWkb@bVL„@@VVVUXW@Uaƒ@@b—‚ÝbUV݄@ŽƒLmUkVUbVllLUV@LššXŽWbUXm@U`@„kxlnnJlbnIllšLX„lVlUXmVK„n‚V@L"],encodeOffsets:[[126720,43572]]}},{type:"Feature",id:"2101",properties:{name:"沈阳市",cp:[123.1238,42.1216],childNum:5},geometry:{type:"Polygon",coordinates:["@@ȚĊܰ„b„L‚lÞxUbUn±‚@ÈnVÆL@xnLšlUVƒbƒxkImJkn@V±LUxkV@bšbšKVKnzVl@L°@Va„xÞUlbôxVVœ@@V±bnŽ@llXL˜ŽöXĶŽnal@nkVJVI@aU@@aVK@ašUUUU@lmkwl@Ua@_@a@m@U@aUKWwkIlWUanIWK@UXKVIU@@a„VVIUa‚mVknW°™n@WI@KUƒmULWnkVkUWƒ™KkkmJkamIkmlw@ƒV_n@VWXaW™™@KVUkKUkValUnV„K@ÞƒVUÞa˜@a„@VbX@VWUU@Uƒ@UK@ala@IkKmUUa@U@ƒVƒkk™WVwU_@KÜUXbl@V¥XUVmƒƒƒXa‚kŃlUUkIm`UIUJW@UIKmkm@UUJƒImmU@ƒVUXU`mIUbUK@LƒJUU™l@Xƒ@UbƒJ™kU@ƒŽn„m@Uam@@ƒ™aUmLKƒwƒ™mWXUK@kUaÇa@JUIUa@aƒKVUƒUXmƒUy™_@lmbkLUKWLX`‚n@bVL@JXL„‚WX@Vnb@Vm@UbnVmL@V@x@LUbVV@V@LƒUVl@mb¯U@xU@UVVV@X@VVblJ@bn„VKUn„x@llnL±¤™b@k`VXÆK@„kV@¼kl@bWIUl@VmLnbm@@JXXmb"],encodeOffsets:[[125359,43139]]}},{type:"Feature",id:"2104",properties:{name:"抚顺市",cp:[124.585,41.8579],childNum:4},geometry:{type:"Polygon",coordinates:["@@„XVl°bœUlJ@UVUš@„bVxV@@bn@nJ°I@U„J‚I„VV@V@k²VVKlXXVšb‚lÈX„ŽWbXV@LVJUbWL@Vkn@lšš@nV`@X@lÈIWanaÞVVVlLnKVL@bUlUL@Vlbn@VL°WXU˜Lna@aV@nV@IVV@VšbUnšl@V‚XnKVa@U„UnyWkXaƒaVk@ašašbnm@_WKXmWanU@alaU—l@XJVLVxX@˜wnKnVlwƒƒ™@V_@a¯¥@UkKWUaUU‚anK@IƒaU@WUaVw@klUVyUUVUUÇ@Iôbša@mnUma@kXa@UWak@Wa—l@a›@WUƒLmU@U`mIUU™`mUk@@UUK±nkJƒbUam@kwm@@a@UU@Ua@@K@ƒVK@kmKU_UKƒUUaĉWmkkL@`™LƒnmlkLkbmK@k™@Ulmb@b™„@Ž„xUVƒIUlmVXXƒxm@™JUUk@WUk@ƒakx±@¯x¯Umb™KUUVmUU¯UmVVn™WkÆ„lWb„„„ŽUnWVU¦k@WaÛV@LV`UxšXllU„@„@VVbnVlL@J"],encodeOffsets:[[126754,42992]]}},{type:"Feature",id:"2114",properties:{name:"葫芦岛市",cp:[120.1575,40.578],childNum:4},geometry:{type:"Polygon",coordinates:["@@ll°X„ŽnV‚@XLVb@VVbnb@VšLVV@VVnXxlKnU‚l„_na@mlI„šmJnxlLša„xVbU„VV„UVU„KVlnnV@lmXLšÈWŽkxVV²bVLšm@Ula@UX˜@XW@UWaUUUUVan@V‚š@lUXxlIX„V@‚yXLšw‚ŽXXW°nblJnan@Vzš`l²nVVVl@„nUaVKšbVKnXVaUaVUšyšnXK@kVK‚@X@m@m‚LXa„LWƒU¯„w@™ƒa@UVw„¥°™ó¯¯y¯ƒUǯ»›w¯Iƒm—¯Ç™UUl™¯»ţKċÑţķm¯w@mU_ómk¼VnU`±IkbVlƒnnŽU¼±Lk`@X™Wl¦UbmVUxkXVlkbllU„Vb@bkVmx@XVV@Jb±aULkKWXkWmX¯aUJmIkVm@ƒxU@n„"],encodeOffsets:[[122097,41575]]}},{type:"Feature",id:"2109",properties:{name:"阜新市",cp:[122.0032,42.2699],childNum:4},geometry:{type:"Polygon",coordinates:["@@šXnb°lš„VlnXVJ„LlVnl@zÆxnK@b„blKVLn@@V„aVLVK@L@Vl@XVVInVVKVwlUXwlKšL„ššVVb@aV@X„lUXbVW@n„lWnXKV@@V@XUVVLUVV@@bVVV@@ln@VbVUXV‚I„xVanJ@UšIVWšL@UV@@¤V@nInw˜W„k„lnIVx‚lnzUVÇJ¦VVÜLĸUnW@aV_šWĊXXa‚Knkl@nm™L™a@alUVw²K@UlmnIlJ„w„aVU™kmK@wÅKmU@DzVmVaÝwkƒKƒaÛ¯șĉķ¥ğ¥ƒ@kUWkƏī݃ƒ@@akU„K@KWIUm¯nƒU¯JmwUVmIkJÇLm@™UImJUU@aW@U@@nUb™JƒaƒbXVWn@UVmX@V@b„š@l@Lƒ@™lUb@x™nÇaƒbk@@xVJU¦lbXšƒÒ@nUJ@Vmb"],encodeOffsets:[[123919,43262]]}},{type:"Feature",id:"2107",properties:{name:"锦州市",cp:[121.6626,41.4294],childNum:5},geometry:{type:"Polygon",coordinates:["@@nJ@nlmVnXKl@@°n@@¦‚V„bVbUlVL²l°@ƲÈV@LV‚knVb„VVnnWVU‚@XmWU„a„bšIVa@mV@X@@bVVnIVJ@š‚nÈKlInJVUnx°I„V°mVnXJ@LƒLlV@b„@ބƐĬXllV„@Ġ¦ĸ¦naWW@In@manK@UVkXJ@alk@»lU@ƒÅLUWl_@ša²£‚Kkm@kƒwVmULmƒ@akIUa@U@WUUVU™aÝ@ğ›wkƒƒmĉ£UWƒ@@bÇL@m—a@_mKƒlƒXUwKƒLţÓ@UWw@K@U„I@m™U@UV¥„@°UnJ°@@_™KUwƒW@UnaWUmmI@m™ķwUaÇLóVĵwݙUUW™¯šƒ¦Ux@V„b@šƒxV°X„ƒKWbK@n@nW‚@UL@lWL™m™zUVVbUbmWXXWJ—b˜n@Vkl@LlVUn@xnV@bln"],encodeOffsets:[[123694,42391]]}},{type:"Feature",id:"2103",properties:{name:"鞍山市",cp:[123.0798,40.6055],childNum:4},geometry:{type:"Polygon",coordinates:["@@l„œxĠŽÞ@šbV@@w°Vna‚@Uk„V@K@UUUVa@K@w@UnKmUVan@@Uma@UXWƒWK@IUK@amW_XKVLlKna@kmKVak@VU„@VmšU@anIÆan@‚a„šUVnb@blLV`ÞLlU„bna‚Kn@naVU@¥°IVK@anUUKVaƒUVak™@mJƒkXƒ™UVwkƒVUUa°U@Wƒ@WlkXWlIXUlJlaœx‚IVVXLšll@nLV@lLXl„KĊzš¥maUƒlkXaVK„X°y„Ila@aVkala@a@¥„IUy@WmXaƒ¯kU@U@mmUƒƒULkmm@ƒ¯VmnLVU@a™ƒ@U@±w@™VWIkymLUUkJWXƒJkUmxk@™xUI¯`mUULmƒ¯„m@kxVVbWV@„UVƒIUx@bkšVšVVšxUbVV@V@zšJVXU‚lnk@@lkLƒlƒLUU±Jkšm@UIUVƒLUVU@™K@UƒnnV@l@Ll„ƒaUJ@zn`@nWlƒIUVUUUV±Ln‚@nmL@VUVkLVlUxVLVlÅXma™@@akLmWUX@JUnVJVkXJ@X@`WX„VUVUIlb„W@bVUVL@`Un@¦U`@bUV@z@Jm@@XV`„LUL¯J@IVKmKÅI@J™nWVnLnšVxV¤™z@bmV@VUV@bUL"],encodeOffsets:[[125123,42447]]}},{type:"Feature",id:"2105",properties:{name:"本溪市",cp:[124.1455,41.1987],childNum:3},geometry:{type:"Polygon",coordinates:["@@lb@Vn„lnVVUb@šVJ@nnJ@bmXUx@xVbkbkŽWLUxnl@Ul@„xWx@nUV@¼Ull„knkK@bmbnl‚LVJX@VIVJn_lJVVšXUmnU°VVVUnVVšLna°V°w²@lw„bl@XVl@VVšIn@„wWWnUVk„JVUƒw@šƒ@anaVkš@@lnLlalKnk„mšK@_lKnlĊXVb„VVLV`nL@lUL@„@L@‚VbV@@V@bn@lxn@Vb„alI²mVL@Vl@nVš_VVnJV_‚@nV„K‚V@Xœ‚@b˜kXbl@XblylUUkš™@Xa@UVIlK@UUWVU„Llm@UUUnKWU@K@UXm„XVa@U°KVUUWUk@ašUVKkaWkƒKUknaWa@U—@m@mk@ƒaUJk@@_WKkLmx„l@nUJmIUWlIUaVWVXn@xWLk@@aƒJUI@Uƒ@UVVxm@UVk„mb¯VUU¯JWUƒ@Ån¯aUbÇ@ÇlLmWƒXkbƒƒk@UƒƒIÇVƒUXW™wÇnk@±aU@@bUVUKUXmVƒ@kaUm@k_±l™@XwVa@kVK@U„Wm—VaUmVUUakLUWWnÛKƒVW_—m±V™nƒU¯@Umƒa@Xk@ƒl¯V"],encodeOffsets:[[126552,41839]]}},{type:"Feature",id:"2108",properties:{name:"营口市",cp:[122.4316,40.4297],childNum:4},geometry:{type:"Polygon",coordinates:["@@ĊĖÆn¤„„°Ċ¯ŎWšô„@xXb‚wnKl@nX@VUVƒKmL@VU@Ux݄@Vlb„x„U@VUb@b‚kœ`‚IUlVUn„V@@UV@@JnXlK@bš@nbÆWUkUKVwUklKVU@UnK@mm²KVUVVVU„JXk@mm_@yVI„bkƒ@K@kmU„m@VšLV@VU„KVUVJn@l™²IVV„K„klK@kl@kmVUW™I@y@UUUVa™wUUU™l™@akmmVaUKmIUaƒJk@ƒwkaóIWWÛL@UlmUIU@WW@UnUUm@wmIVK@Kĉ¦™@bWKk@max@bWXkamKƒ@mVkKmxÛaWX@xUlÝnJ"],encodeOffsets:[[124786,41102]]}},{type:"Feature",id:"2110",properties:{name:"辽阳市",cp:[123.4094,41.1383],childNum:5},geometry:{type:"Polygon",coordinates:["@@š`Vz„‚Wn„VUV„L@bVbVJ@IÈbVb@lVLXW‚n„š„x‚LnKVŽšb@„n@Vbn@mƒ„V@šl„IVa„@@WškVV„I@KVLVanJV_VW„UV@nn„JVI‚Vn@na@alLlmkƒVk@»VU@mXwƒwk@@VmkVwXKllaUa@wVwnW@amI@mUI@™VaUUkmmƒ@UkaƒL@ƒUIĉyƒLWkkKU@mKk@™kWKUUJ›wkbkIWVkJWXkl@X„‚@X¯VVbUVl„UxšVW„„lnIš@l‚Ub„VUbVLmV@bUL¯J@¦UVmbm@LmbƒakVÝKU_kK@amaVUƒ™bm@ÅbmJ@b™VUnƒ@UVl@UbnL"],encodeOffsets:[[125562,42194]]}},{type:"Feature",id:"2111",properties:{name:"盘锦市",cp:[121.9482,41.0449],childNum:3},geometry:{type:"Polygon",coordinates:["@@Vbĸx‚š@nnJVnXŽmb@V„XVxšL@`¯@mI¯Vƒ@U¦@VšV@nƒJ@V@LXx@VŤÔ„K‚LVx„W„knL@`˜b@nÈK@a„@VXĊ¤„nVK@aVU@UnU@ašyU£Uwm™mKXUšm@IÆJnLUL@J°IVKƒKU_@Wn@@I@yVU@aV_@¥Vm@_UKUV@aƒXkaVJVUƒUXW@_@WWIUlUIVm@IVW@IU@@VU@mƒUVVkJ›_l@aVa@UƒVƒwka@UރVwV@@UnK„LVU@UmWk@mLxWa@wóƒUVUIÇÆĉ¦¯¦¯xʟJ"],encodeOffsets:[[124392,41822]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/nei_meng_gu_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1507",properties:{name:"呼伦贝尔市",cp:[120.8057,50.2185],childNum:13},geometry:{type:"Polygon",coordinates:["@@„m@Łkƒ™Žƒklƒôƒ@£kJ°ý™ɅķÑó¤ğLĉÅlÇğŁW¯¯›™ƥóÿlwkţÈéÝƛó™°ÞÅxV¤ĉĖWƒ¯lȭţυ̃ɱÿķƅˋğɱřÝţϙȍƧĊţ@¯kWKUKm¹Å@ķJU@ƧÑƧ„ō¥˹Ɔ@L@„Þ‚VLnš@VōČWJX¦@JŻbU@ţÞmVU@ȁýóbkWWLƒƒÅ™¯UWġkmóƒ±UŹôV¼ƽ¼ƒł̥ĖƽǬʉxĉŽŻȗKΕ̛ʵƨʟÞ˹»Ƨţ»Ǖō˷Ȍ±ȚʊĠUɾɜɨmÜ֞߼˸ƅȂ¯ǖKˢğÈÒǔnƾŎՂ@šĊbôô̐¼ƒ@ĊôĊŽÞĀ™xšĖƧL±ŽœŽ‚Uš°U„°ĬƒČ°ÜƒêɴȂVł°@ƒ„nxŎèƒbȄÞȌ΀Ǹl޲IlxĊl²ÒmšôĖ™Èl„ĵºm„ÈêVþ„xɛČʉÇĵVmš„ÒƒÈɆôƐŰǀĊ°ÆǬĮƾb„yĊ@ĠšƒXǀċm»ôw°Ûk¥Çm¯ç™kkÇǫţǕéX_ĶWǖīŎaÆĵĸĊ@ȚȘ‚™ĊLĢĉ„VÆĉʊÇĕóaU¥šĉ°mkŰġUĠřk°mƒÑČÿ˜ÛƒWĸ£ʠšÆxÈÞŎÞ»ʈ²ĊÇČalÒ°Ť±ĸz„ŽĊKȲm¤Ŏ@Ò°¼nyȂUźīǖƳÈē°@šÝ̓@ƒÈkl¥Ççkxk™›JXÇƒUÅ@˜£k»„óƿīÛ@lÅJl¥óý@¯ƽġƍÅan™ċ™°é¯¹"],encodeOffsets:[[128194,51014]]}},{type:"Feature",id:"1529",properties:{name:"阿拉善盟",cp:[102.019,40.1001],childNum:3},geometry:{type:"Polygon",coordinates:["@@™ƏnǟƨʫšŹɆÿ°¯ÆV²ˢ™żÿ@ÝÆŁȰ¯ȀƳĉó™™@ğkyš¹@īš›ƒwl£Źƒƒ¯Ŧé@™ÇÇxŋĉƩUUŃōL™Ç™ĵóÝnƒóç@™™ó@ġƒƱ„¥ƒç™WUçÆōƒ@é—çťK™çȭVһƽ̻aW¥ȁ£ʵNJǓƲɳޗǔlżÞmĠóĬȂɲȮ@ÈĢŮźÔnĶŻǠšŎȭœгŃċóȭţΗÆƑÞƧÅΫóȘǫɱȁġlÛkǰȁÈnšõl¯ô„ÞɛÝkĢóWĊ„zÇɼʝ@ÇÈķlUČÅÜķnέƒǓKȮŎŎb°ĢǀŌ@ȼôĬmĠğŰōĖƧbЇƧōx@ķó£Ål±ĀƧīXÝġƃêĉK°Ýʇƅ@ΌʉżÅÒϱʈ@˺ƾ֛।࡬ţશóЈèʞUš¤Ґ_޸Ƒʠɽ̦ÝɜL׈ɛϜóȂJϚÈ@ǟͪaÞ»Ȯź"],encodeOffsets:[[107764,42750]]}},{type:"Feature",id:"1525",properties:{name:"锡林郭勒盟",cp:[115.6421,44.176],childNum:12},geometry:{type:"Polygon",coordinates:["@@ʶĬĊIȘƨƨŽ@ĬÛĢșŤĉĬƒĀóšU‚ÈŚÜènŦƐȤȄłϰUƨťƾÑ܆ğɲƜǔÈèʈƲĊƞƒšɆ¯̼V˺Ò˺ȂŤVĢêU܃x„Āˌ˘ƨ„ưѢmÞżU¼ÆlŎ@ĊçŎnÈÒͪŎźƒĸU°lżwUb°°°Vš£ÞlĠĉĊLޏɆnźÞ„n¦ĊaȂīġѝIĉůl»kƒ„™Çý„¥Ŏ¯ƒén£ġљÝȭxƒÇ™@Åçķ»óƱŎ¥™çWÿmlóa£Çb™yVÅČÇV»ÝU¯™KĉýǕċţnġ¯»ÇōUm»ğƒÑ™wƏbċÇŎċwˋÈÛÿʉѰŁkw@óÇ»ĉw™¥VÑŹU™mW»ğğljVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVljóJƒwĊÑkĕÝw¯nk¥ŏaó¦ĉƒV¦Å`ğуÑÝ@mwn¯m±@óƒÛKˍƏǓ±UšÝ™a¯lƒōšșk„èƒĬގn@ŤġŰk°ċx@œĉ`Ƨĕ°@ţÒĉwmĉ@ƒƒnƒƒa„™¥ķnƒÞĉVóÆókĉŽķ@ÝkƧƧÛaƒ°Ç@ÝÈU˜óbݼ@„ÛÒV°™@V¼ˋL™ÞɅŤŹǠVÞȗŤÇĖŚōbȁƜ"],encodeOffsets:[[113817,44421]]}},{type:"Feature",id:"1506",properties:{name:"鄂尔多斯市",cp:[108.9734,39.2487],childNum:8},geometry:{type:"Polygon",coordinates:["@@ĶL²ĬVłƑkkl@Ȏ™ŘWńÈĬȗ¯™ºlz@ĠššĊôŦô„ÒĠ°kÞܚ™n@¤„UĸèĸbŌÈXŽĸLlÒĢxɲÆ¤ÈÛƾJÈݰUšÅĶ»²VW¯ĸJôšbk‚V@ôlbnĊyÈzVôašb@ĸ‚ÞUl°yǬ²Ǭm°ššk„±lbn°@È»˜JX„VŎÑÆJ@k„LšƒÆl²™Ġ²ʊůĊġ‚řóƛÞÅ@m„ƒmLUÿóĉƧ@™»L@„›`ČĸmšȗÑţů±ĉğl¯Ā™wǎƒçƧŤÛI@±ÜĉǓçō°Uwô™ǫůķƳř±bÅ£™ÓÇwnÑó@ȁƽ@™ƒÇƧĢón»ŏĕóĊ¯b„Å™™VȯÅImƒōKU„™LǓ±Ýxċ—ŋ˜V±Āȗ°™„Źl±šÛ@WÒȁŚŹНŚÅèŌô„¼°ȰɞȂVĊ"],encodeOffsets:[[109542,39983]]}},{type:"Feature",id:"1504",properties:{name:"赤峰市",cp:[118.6743,43.2642],childNum:10},geometry:{type:"Polygon",coordinates:["@@ɲŁĢljĊwƾōÞĭ°_ŎŃźȹƒUČÿl»¯ôķVÿǬƽ™ɅġÅÑǫ»̐ʟȣU™¯wVWݍÈġW»Þ¹m݃ɛŎÿŎōͩůV¹›ō™éċ™óŹÅVVĢǩʈ@Ėċ@ķšÛšV°¯xÇÅţ¥™»°Ûô™ĉʟ„¥WýČ¥™w‚灻±mnÅķ¥ˋVƒbUÒġ»ÅxğLƧ™ƒbWĖÅxš¦U°ÝVóŰlô²@š¥ÜÞÛô„V@²±`𦙄™¯Ý@„ŽÅ„VÒō¼ôš™¤V²ŹĬÇĊƑƒţxƒç¯Lk»ʟlƽýmłÝÆƏ@mö°Ġ@ŚŹĬţÆUĀĠNJĠŽX¼šnźVUҚ¦Ċxȼ@ôlx¯łʊÒÜĀˌÇČxƍČÈƐašx„ÒĠŽn¼ŎVȐ‚¼Ģ°ŤmǖČĊþšLV°ÞŽU¼ċÈUƚzÈa‚¤ôbkŽ‚nXšè"],encodeOffsets:[[122232,46328]]}},{type:"Feature",id:"1508",properties:{name:"巴彦淖尔市",cp:[107.5562,41.3196],childNum:7},geometry:{type:"Polygon",coordinates:["@@²@Ζǀݴʶհĸ„˜ƒ¦Ķ™̒Uˌ¼ӾÇƾ¼̨UÞĉ˜Ƨ—éÝ»ƒĕĉ—ƐȍœōǪakó‚ó¯a@™ôţ™aV¯Þ¯°@²él¥ĵğťwōxó¯k±š—Vó@™aóbUÇyĉzmŽkaóŽU@l™aó‚ķIX°±Uĵ¼™Æ¯VÇÞƽIÇÜÅ£ɱŽġwkÑķKWŋÇķaķçƒV@£šmۙlÝğ¯ƒÑťóǿƴȯ°Åł@ÞŻĀˡš±ŽÅU¯°ɅĀ™źƧʬmǠšƐ"],encodeOffsets:[[107764,42750]]}},{type:"Feature",id:"1505",properties:{name:"通辽市",cp:[121.4758,43.9673],childNum:8},geometry:{type:"Polygon",coordinates:["@@ôƲĸ¼Æèš@„ÈȮwƾ»ʠĢ¥VÆ@²¥@»Ŏњ¯ĊJŤ£k»ÆÇX¯̼ōšī°aX£ôƒƾȁꥄƒ™aôŤ™ĢL°ƒĸ@Ȯ¼ÈÒʈŚôVXůÆaĠƛÈKƒķšĉôÿ@ğÈĉ™»ÇVn™ĉV›wXĠݰšČÿĸwVƒ™¯¯ǵ±™ĉ‚ǫ™ÅÅm»²Ż±ƽIm¥ţÈķ@¯šƧJV»ÞUÝç¯UġºU£ţŽóaÅÅlƒƒ™Ƨī¯K¯Þ݃ğL̑ȍƽ@ōŎōĀƑɜnÞݺX¼ÇĢގUX°xVšʠȤ̏Ǭ¼ÆÒɆ̚ŽǫƾUĀóĸ°‚k¼ċĀƑVŹȺōń¯`ÝĮƽŎĉxġNJɱłō¦"],encodeOffsets:[[122097,46379]]}},{type:"Feature",id:"1509",properties:{name:"乌兰察布市",cp:[112.5769,41.77],childNum:11},geometry:{type:"Polygon",coordinates:["@@ʠǠÞĸɲȺƒÒȂƛŎaƙÈĕȘţUÝźǟɆţšÝˌKU»š@U¯ÜÑ@ƒÞ»ôaV—ÞÇÈ@„¯ÜbƨƨÞlĸ@ĊôlôÅĊU„Ýĸmš¦ƒŽ„bm„„„Ċ@n‚ĊxŤÑ@¯‚ƨĖĊ_@›Čwl¯™ƒȭL›Ý„»ƽ¯ķů„Ǔ@ÇǓbċ™ÅÅÆwÿĠÇU£óaƒ¥¯aŎğĠţkw°»¯ůlÝĵkǻݰɱƧǫaóôɱ»Çk¯ŃóƒʇŐŻ›ĉNJŻĢ„ޝÒÈUl°ƒx°n„Ò™Ĭón™Ċğ°ÇŚĉ¦ʵVƒ°°ĬÛżÇJȁńʇʹó˂ƽŎ›Æţ¦"],encodeOffsets:[[112984,43763]]}},{type:"Feature",id:"1522",properties:{name:"兴安盟",cp:[121.3879,46.1426],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÆXnlŎ°@LVLĠþœxĊUȮĊnU„ĠV@żaW¯XIŎġƒ¥Ý@K@w@K@I˺ŻŎ¦ƨƒƨÒŎIÆ@X@VºnX°lŎ@ƾĉˤƒȘǷȘÑÝݚÞbVţĸÿŤxÈĖƐށêÇKnĸ¥ô@›ķÞUnÒl@UŚaƒīˋƒ¯ÑƧx@±kXřƐƏÛéV™ˋ»lō¯ĉ„ÅÇÓǫޗĖġV@ğ»›°ĵ„ÇÞǓ¼¯m˜ÛÅŃĉĠÇƾb²çƒ™šéż¯VƒƒğÞml»ōÑV痻V¯™¯šĕÆU¯y°k¯¯V»ôDŽѰa@Źk™ġKţšóŽšbƒ„ʦƽȂó„W¤¯b™Ĭ̻ŎW°ÅÈl¼ţ¤ĉI™°ōÒ@¼±¦Å@UŽġ¦ʟŽƽ¼šÞĢÒm¤„êō°ƒ¦Èþƒšl„k¼Ċ۰JĢńȁĬ„°ƒżn‚ÇbV„ݼ@¼óĸţ¤@°Ånšl"],encodeOffsets:[[122412,48482]]}},{type:"Feature",id:"1502",properties:{name:"包头市",cp:[110.3467,41.4899],childNum:5},geometry:{type:"Polygon",coordinates:["@@źxżĀǔÆǬVȘĀŤ¥œÅƾōôˁʈͳȂŃÈIÜŻ¯ī„¯ōm™¯ɱ˝ƒķÒÝIÝ»ÅV™ƒlÅôфġ™ğVmÞnnƒWçkW܁XƝÆwU»Șĕš£ĉÑ𱱚Åk™„ƒK@lÅIō҃UW‚—IǼ¯@m‚kaƒ²™l¯™ǫnǫ±¯zkŽÝVķUô™˜l²ô°ŎwŦxĶĠk¦±ê¯@ݰU°šbóŤ@š°bôlôǩb›ŎƏȎĊ˜„ĖÞ¼˜ê—ƨÝĊ"],encodeOffsets:[[112017,43465]]}},{type:"Feature",id:"1501", properties:{name:"呼和浩特市",cp:[111.4124,40.4901],childNum:6},geometry:{type:"Polygon",coordinates:["@@ʶUĊ¥ÈřĠ¯šĉômšīƒÑ¯m„wk¯ÇV°ÑƒżġĊljǓɱţǓ›ƝóX¯ƒɛÒóa@nÝÆôƜŚĉĢʉŰĊҙ¤ȗĖV¼ÅxWƞۂlXXèm„ÝmUnšĠƒĢóÒkƚ„ÆUÞ¼ÞJĸѰ„ɲĕš°Ŏn"],encodeOffsets:[[114098,42312]]}},{type:"Feature",id:"1503",properties:{name:"乌海市",cp:[106.886,39.4739],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ș°ÇīXњŗ@ȍlkƒlUٱīĵKō¼VŽÇôXĸ¯Ž@šťê„°ź„k¤„x™œ@Ĭ"],encodeOffsets:[[109317,40799]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ning_xia_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6403",properties:{name:"吴忠市",cp:[106.853,37.3755],childNum:4},geometry:{type:"Polygon",coordinates:["@@nLV‚@šVLšaÞbn@@l˜š@bUVlUV„zVx™¤kÞVèšXnš‚@nm°a@UƒÑ„@VŽXnV@Va„UšŽVKUUU@@U‚@@KVa@U²@‚wXkWnk„±lLnU@UmmVKnIVWnI@UK›@UK@@UVKXkmWLWUXmlkVwUyVa@w„w@aVI„K@aVÈw„KlLVV@LnV„VVnU‚ܲ°WÈIUÆ@nÞ¼‚‚@¦™@UÞUVW@UxUxVn„b„K‚b¯ÞU`VbǬ™V@XXÆVVl°InmnUôƒ°¯‚anam£œWVX‚KXmškôaVU@ƒVak@@wmaƒn@K@UÛUWKXUƒÇƒ@UI™b@alW@akLUKV@@Ukw±Iš›nL@kmwkWmk@JUIƒůVmnnU@m@UƒK„VKlkUwkƒƒnVUKmbkI±š—KƒkmVkKƒb@U@aƒVkUmn™`kIlaUK@UUKmbUIݚUa@mUa@aƒ„m@UUULUK@bmKkbWI@WXwlkXƒWa@k@kKƒLVkkK@L@JUVmzUKlwUUnW˜£XVlKUwVU@aXI@aWaUw@W@_nam@¯‚UkWVkUWaU@nwmJkUVkWVUmUkJ@ImbUaƒ@@WÅ_mJknmak@@mƒXƒaUV@„ƒxUšƒ„@‚ƒ„@VUnkVƒ@Vn@`ULUbWLXVW@kbUJ@XW`@ƒnÅĖWJƒ@—m°@xƒxšbnUa‚w²lƒÞ°xŤIVVULۂWbšbkVVXÆ`UbVL„@kx°LlV@Vœ„WbƒJn@bl¤ULV„°@lmL@ƒƒ£U@@aUwmKULVxUVVx@„™@kU™@mK¯LÇa¯@"],encodeOffsets:[[108124,38605]]}},{type:"Feature",id:"6405",properties:{name:"中卫市",cp:[105.4028,36.9525],childNum:3},geometry:{type:"Polygon",coordinates:["@@°@Èb°KnLš@lVš@@ƒUwVUUwVKnLVx@bV@„¤@„nK@k‚¯UƒVKk£@a‚m„IXa›ƒ@UkU¯Klwƒ@UKVaÅ_UWlU™aXa܁VKUUţJ¯w„ݱkxVbmŽ™a„w@wn¯˜„@XIÆĕ„m‚@X_@WVIlaX@WUXKVaVK@_Um„@lUVm@U„ƒ@„ƒV™„w@ƒVUÛwm@@W@ImKUkU@Ua‚aXƒ@wWaUKkw@UVaUamLU™nk@»±`¯@k—W@Ua™ykbƒI„„@VWJkLWUkJƒwU@ƒn¤mL¯wm@Umƒ²XVWbnV@bmxƒVkxUblLUV@kVWKU¼ƒŽkUƒ@mn@JnV@bUnmJUn@„k‚@XlxšLVVnKlLVV@š@LkKULVbk`WL@lkXW@kVƒ@UÞUlÇX™lkaUbmV¯@@L@šƒV@bkb@xƒlW„—bƒbW@—±@UJ@IU@mVk„VxV@@l„Illœn@Vm@ƒVUbl„@JLmKÛXmVkU›KULU`@LĉwƒKUX„lVUl@Vb„JX¦̼bÞxŎxɜĖĠ„Ŏaô@"],encodeOffsets:[[108124,38605]]}},{type:"Feature",id:"6404",properties:{name:"固原市",cp:[106.1389,35.9363],childNum:6},geometry:{type:"MultiPolygon",coordinates:[["@@Vnn@°xnK‚£„mV@„xlIXVlKXI@Uƒƒ„JlašzVbX@l˜°@²_@¼mlVšnKVbUb@VlxVLXb@xW„bVbV@VlnL@J@Xn@Üx„b„W@nl@nblmnIÆ`@X„@Vbna@aVUUWVkƒ@kbWakbU@VwšW@_l@nmn@@alVlk@UkmVak@@a‚UXaƒL@¯@KVa@axWI@KnkVaVJn_lJ@„X@‚m@nVanUVb@mXLlJ„VWnLla„VVaVX@KXVVkVKlknKVa@aVU@KXb@klJUknUmƒ@K@_UW@alIUamaU¯kJma@IUK@U„@@UW@@aXLVƒVJVaXIƒKlaUkUV@ambUUJkIWJ@wUI™V@JU@UwV@@Um@™nU`@UkUmVUxWUUV@aÅb@aWXkKUUƒUUaWK@wnm@IVU@aXwm@UmVaUalk@anKUwlƒUwlkK@wmaƒUkmmIk@VmkUUbW@UVUnW@kV@xkVmbVnU‚™@UbUV@a›k@kkW@„kLW¤@„nV@VU@W_UV™UU`VLUV@IUVõVULU@UUUJ@wmkUJ@šWI@l@bkKkbVVƒbVbUL@UUJ@Vm@@L@xbVVVLVlVwX@Vb@bmUkbk@@JWIUVÅw@Km@UkWKXxWLÅ@UVUnWK@xkVW„@KULwWVXVWzXVVKVXkV›V@VUbV@U„VV@š@LXxVL@V„b‚Ž„LnKVLVxXVmb@l"],["@@@J@aƒU@LWK¯UUxVVn@Ġ„„LUW@UbUUUa@KUX"]],encodeOffsets:[[[108023,37052]],[[108541,36299]]]}},{type:"Feature",id:"6401",properties:{name:"银川市",cp:[106.3586,38.1775],childNum:4},geometry:{type:"Polygon",coordinates:["@@šUšwVK@UVWÞUšbšw„V@knV˜@@KU_VK@K„ƒn@W_XWlL@Vn@Ċw@Ulaœ@Wanamī@aƒ»ŋó@aÆÅɲÿUaV_°ÝaƒLƒaUmVwVwX@VUVݚ@@¥Ý»@mVÅÇJ¯XÛ±VUmƒUmU@KUUkKƒLÇxUŽ@bƒLUJ@bƒx@xUbVzUxklWnXV‚KnXWlUL@V@ŽVLœ@VL@ŽmJUXmJULnn@VmVkKƒ²mlXWlx±@@VUb@L@@VV@VVUL™ƒVUbU@WmUƒ@„Ò@V¯bmn@VŽƒ„@lVnUšnVWŽXVl@¦VVUn@x‚š@‚XL@¦‚lXxš„Vb"],encodeOffsets:[[108563,39803]]}},{type:"Feature",id:"6402",properties:{name:"石嘴山市",cp:[106.4795,39.0015],childNum:2},geometry:{type:"Polygon",coordinates:["@@U¯ķó±ÇÛ¯™ķmbXb›@kb@Vĉxm@@UkKWXX`m@ƒ„@LULV`@L—@mU@lƒU™x™aÝVUX@VUL™x™VkLWVšš@J„nVLXVlŽUV@zl‚VL@V@b„„n@lU²WVLlLVbUŽVxUx@xǀL˜xôҜk‚K²ŽVa‚U@wXa@W™ÈĉUa@‚bÈk„m@¯"],encodeOffsets:[[109542,39938]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/qing_hai_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6328",properties:{name:"海西蒙古族藏族自治州",cp:[94.9768,37.1118],childNum:7},geometry:{type:"MultiPolygon",coordinates:[["@@„V£°š@laœXô±źwš™ô@„Ulƒża܍n™Kƒw@U„aƒ™ša²L‚mÈLƚÈxlaUa„wÞmÜbÞUšnJ°a„kôƒ‚ÑkwÝVğwÇ@ÝkkV¯¥@ò„»„nŤ¥XImw@mVwša@Åw™mLkaW—wƒ¥l»kçƒó„»@ƒWÑĉŽğ@ĉ„™‚Ń„UwóřVómĵ»™™Ý@VǕ¯kšÝĊÅk™°ÓUklkU±šI„ÇÞkƒ±@šƽJƒ™@UġIk@W¦™VÑșÓÅnťKULnޝX›ƒ@¯mUÛ@WřmóKknōbƒxÝ@ƒŽU@kw@ÿÇLţšÝUkšmwƒŽk™lċVŚU¦™ŽƒLkUWlÅÑ@aƒ@ÅѱUóġʼƒÈĉmŻ@@wkw™Kl¯U™ġ@—„lÇU™Ó¯_ƒ‚Waĉ²Åló¼VbknƒKǎÅ@ƧĢō°Ý@ğ„W™ÅxUUm@™‚ÝXۂW„ULUè¯@mbUaƒLƒbUWġxIUJWz™a¯b™y™@ōÈóLU`ÇXUl™UĉV¯n›mÛbǕLklƒUĉVƒšóaġ„ƏbġKţnkbÝmmnÝWȭȃŽÝXţWókUÇl¯U¯‚ġUɅĀ@°¯„„š¯„VÆnmJ@ĊķnóJUbÝXUlVškL@lVxnnmb@¤Vzš`ÞÞŤ@„VnÆJV„°b„UôJkzlŽkl@²óš@ÆÇ°k˃šÇbÛU@lmb™XV˜kzƒV™ŽɅĀXˢlń„ĬŹ@›éÅ@ĉńưğbUšlŽɜ_°‚@xŦ˜škbVbƒKĢ„ŤVŎް@żÈźlĊ„ôKôb@nôxŦ„Æ@ôŽŎL@þÆb@šnnšWˌbÈx‚InaŎxlU@Ѳ±ƒğVŨƨbɲ@Þ¥ôUUķWVô¯ĊWʶnôaŤˁ@£nmnIôŽǪK°xUXô@Ŧa°m‚kXÆÞVŎkĊ°ÞLȄôyVašIlwX°UVwĢÑÜKôw@nV@œm°nmŽn„Ü‚ɞ£VbmŽXnƒ°ÜÒ@xx@V‚b²UlbkxVnšJUnVVĊ°KȚm°nxÇnn¤±¦@ŽUXVV@„lV„„bmVVȁŽVxšÒ™°šIšbźaȃšbVwš@šƒVL„™ƾÑ@ƒŦô¯ĊkôÑ"],["@@„@šƒ„@n„òVœa‚w²bVxšxÜaČVô_ĊJšIVmšL„a°@Ŏ¥XlK@ƒšk„l„KVbUb˜@nUĢn‚aÈ@lmǬ»Ġ¯œn‚mnƒƨVy™Ñǖ™Ġ»ɲInŽ‚@@ÅĢƳ@¯°™ôV„KÈbVIÇ¥¯@Ýó„™@ÑnīWKšƒk™‚k@¥š™¯™Åa™Xƒ±VÅw@±Ġ¯@»™š™n™Wmw@ƒ™@¯ƒVƒUUWçƒKĉ„a±VkkƒV¯w™x@šUJ‚x@bknÇb™mÅ@Uw±U¯¦UŽ™Kmš¯I¯Žť¼ğĊ™@ǃŹÈ¯@Ý»ÇnˡJƒbÛèÇnƒ„ÅK¯„ġĠʐW¼Ålm„@¤n²ƒŽÝb@b„š¯lƒ¯@ƒšÅ¤W„™¼nV@x„„°@Vx„@lbUblbX¼W‚œšÇ²lšUŽ@¼ŽV¦@bÇlVxUbVxÞbVšœbm¦ƒVV„"]],encodeOffsets:[[[100452,39719]],[[91980,35742]]]}},{type:"Feature",id:"6327",properties:{name:"玉树藏族自治州",cp:[93.5925,33.9368],childNum:6},geometry:{type:"Polygon",coordinates:["@@ɆÿĢV°°VÈklVôŤXÞW„ȮÇÞXnmÞnlaŤmĢLƐãôb„™ĊU„VlkǖKÜaœn°mĊUšVVkÈWV_ôKŎǚ@šz°ašbXyVI‚JĢwVX„a„KVbna°@VçVKXƒÜÞWšn@VVÆwXšĠƒÞ@Ŏ¯ƨġÆ@ȍ„LlmUaô»ÆkĊ±Xb„°`šÔV‚kȘƒĢ@Všk°šLlx@xż@Ċn„Çź»ô̲VÆÒ„@@bÆÒXklV„KšV¥Æ™ČUšk‚l„nxl™çƒ¥ċç@±m¥ƒwÅJƒ@™™™Vƒ„mÈIléÈa°U¥™™@kÞV‚K²ÑWƒ°w²Ñ‚K²ñšyƐ„ÝšVmw„»kkWĉ—JWUƒVÅwƒL™mÅ@@ƒmw„kn¥Vу»°™°@@»„¯„Lla„JônV‚UůƒU@W¯Umѯ¯k@WykU@¯„wV¥ƒkVwţƒk»šwWǜĉĶçšK„ƒÞ™ÇaĉbƒI™lUƒ@kwƒWƒXUƒ°w™±@UšKn£Wĉ—KWxƒkĕVƒšamwXw™@™„Wmnk@aƒVkƒ™bĉLƒl™Imm„wUÇ‚Wx™nÝJn@¥Æ™kwƒaXƒÜĉ™¯ÅV¯¤mkƒx¯kķܙ²VWôŹVUƒƒ@V£™¥@ƒ°wn@™m@¯@UbUôķŽmn@ÆÛ@ÇýVaUÇĊVƒ@Çlğ—¯xÝŤ™lVÈÈVƒx„ƒ¤Vx™„kK@™@ƒx@„kVƒĖġ¥kIWbXŽŎx@nƒxÅUW`ƒ_—@±ŽUa™LUxƒK¯„WbkVlb—bmŽƒLÛÆWIUwƒWkwÝV@kI›ŽéUb›UUk™V¯Km¯k@Umݐ¯m¯›m—L›Þĉ‚ÛUm™ġ£UxkKm°™Lw›šk@kšƒVm„ƒKVUk›@¯a¯Ģ™móKUU™x™ImlÅn™™ÇbXèVVU„°„@ŽšŽ@„‚xXnmš™ššŽ@¼ğ°@²ÆxU‚„²šWÆb°š™š@¦llš™„XLmĬ@҃šÞô°@ȦUJÇaƒLóU¯š@°ġƴ@Ɓ@mɱJğ¼ǕššÒUzƧ‚m„n›mğ°ǫ¼knÇ@bġmmV—@VaUaƒLƒk™l@„kLW‚ō¦¯@ƒb™KUn™JĉIó`ċUÛb™wUw±ax›bñUmƒƒ@™„ƒ@—bƒaƒbǏÅXm˜„ƒÝ„ÅôVbގ™bl„UšÞVޚ„U‚°„VUxƒ@U„V„@l`™¼nL@Ċ„LW„„¤kXķWġXUVVVķ„UbVb@°kVVxÈa‚@ȦĊbšaźJ„U@Ț„„˜Vœƒlš@XkôaWƒĢ™Þ@laĸUÆb²mÞLĠ™ÞÑôbšÒĊa„JVbm¦"],encodeOffsets:[[93285,37030]]}},{type:"Feature",id:"6326",properties:{name:"果洛藏族自治州",cp:[99.3823,34.0466],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÞVŤ™ÈK@ĀlxV@„Þ@„wŎalmôLšnXÆÜ@nV‚°@œ„°WmVKŦLÆmȚԂҚUX¥l@ĢJVš@„ŽƾI@w™W°™™Ån¥›kÅÝVwôƒÈç„@lÑĊĕša„JnaÆLVw°kny°UnkÆVȍĊll¦„Vƾ@@™nUźƒÈǂIn°X„wÞKô¦VWV£„@£°ókċ±I™™am¯Va™»ČĉV¥°™@m„k„¥l@„Ċm@ašU™mwXƒ@wÆxšmĢ_„`VnÆbšKVw„@@ƒnUVğVmVVöIlŽl@@çÛmƒ£UDŽw°@VUƒ¯»m¯ƒJōĖÅLƒa@»ĉ̱`U_k`ÇçšóƒkX™lK@ƒakÝރš£WċkÝ™kxƒJݯÅw™xķxmIÅx„@k±J@ýŋš›¤UœkŽmV™°ÅÝxkwmġƒnÝVU„š¦ƒŤlmšóXk¤™UKƒç™@mVkK@klīƒ£mš¯VUbƒW¯¼ċb¯ĵam¼mVX„m@k¤ÇX‚ÇbƒUƒ„¯J¯„¯È@˜™bVXVҙ¤V¼kxݚV„@l‚V—„WxÛ¦Wš¯šmKnlŽkŽ‚šU‚@nƑUĉ„Ý@ǺۄċUĉ¥™UƒÞŏ™z±òL±Ò¯xX„±ÒLÝU@lššV¦¯‚ÇbkêÇJƒnU„šš@š„‚ÆI„xn¦‚‚@²Č脦‚è"],encodeOffsets:[[99709,36130]]}},{type:"Feature",id:"6325",properties:{name:"海南藏族自治州",cp:[100.3711,35.9418],childNum:5},geometry:{type:"Polygon",coordinates:["@@VxƒŽńƒš@ĊĠŽĊXÒ°UƾĕÞm°£nb@‚@LUUW„Ûº@nlÆǬšĠ£ÞV°UXb‚VȂǵ„éƒ@kWanm°@™x„z„K°¯ĠVšƒVƒkw™Lnm°kÞxÆa„¥@‚wnĉƏ@™œ_l›š_VwšmĸèŤÅČU@™˜Wn@ÑmKU™nğƒK@ƒ°¯UÿV£nmšLl™„UƒUÛé±óókkmƒnƒakV@ǰóÝXƒWəÞťIţxmm™VÛUVȂÓnWyȁĉkƒVš°WnkĊa„¥‚_œK°ÿWna@ƒmU¯wƒlÝIU¤UXó¥ÝLƒx¯WmJÇÈŹ„mV@šƽ@ƒUk¥ĉkċŽÅUml¯Vmz¯lUxÅKmbƒI™bĉĖk҃@Çèó„UxÆÞœlm¦šÆ¯ššX@x™Ž@Ž„²ÝlƒÈ™JV²klVl¯ÔlšĉƙްlUǖÞ@ššĶ¼nŽUôôŚ"],encodeOffsets:[[101712,37632]]}},{type:"Feature",id:"6322",properties:{name:"海北藏族自治州",cp:[100.3711,37.9138],childNum:4},geometry:{type:"Polygon",coordinates:["@@ōmġxƽUm±Lǿþġԙ@kxmWƒb¯I¯‚mIUx@bƒbŹVǎƒkĵbƒlĉI¯¥ƒUšm@ƒÆ¯È@šašóšUlƒČ»@w›œ»›wXaƒƒó°ţç݄kUƒaV¥ÅbÝw¯lmnšKlxU„™„ğU¯°ƒLƒyšw¯@mnXb‚l„@ƒêȁǶUWa¯VÝUğ¤ǫ™kÅ@mܹXƒVV@K@ma¯¤Ýnƽ˝V@„ƒ¼„ôlèk¼„¦˜xXŽlbnKšÆx@Ž™bUx@nnxWJţ¦ƒmƒ¼ñ@ް¦lUÞlÈ@ĠxÞUlxÒó„ƒl¯bmI™ŽÝVÛaÝnƒxVbkbÇwřÇKn±K™b„šƒb@V„xšLmŽÛŽŻbk„ƒVó@™šŹxó²›Wkb™@¯U¤ƒźĊ@lUX„°lÆôU„ƒlLX‚aœV°wšxUb°xÜôÈKVkÈmlwškÈKšwšK™™VUŤĉŎ»„»„Il¥na°LV»²¯Üy@w̃°ĸwlwĢw°±„_lVkš@°ƒbƒÆ¯zƒ‚„š„@l_„@̱lŚVlUaރ„LVƒnKlnȏ°IllČa˜wÞѰx„UU™@wƒVkmĠLô»„KÞýôaÞ¥ôĀÞmƁ„™‚mUƒŎV¥Èl°²°a²¥V„@@w„amm@Ñn@Æ£żƒVƒĠ£@W„¯Þƒšl@š»@Uk@"],encodeOffsets:[[105087,37992]]}},{type:"Feature",id:"6323",properties:{name:"黄南藏族自治州",cp:[101.5686,35.1178],childNum:4},geometry:{type:"Polygon",coordinates:["@@ôl²ôÜê„VƒVkš™KmnU¤V°@„„LmĠVšnLÈL@alb@al@n°Vš_XmWUÈamaVIn@n‚aV£œóVWƒ™U£°ašxÈ¥@™‚aĊwȹ@óša™ƒğbm@k„w@mƒaÆw@ƒ„In¯mmƒ@UkkWƒÑÅ@@kċÅçVkÝJÅkVykŹl¥@¯š™ĢU܃X¥òý—mmX™ÝÅlmU@£™Wly™XW»Åbƒl@aI›»k@klm@UxUUƒVƒ¼¯Xƒl™aUnķ‚ƒI@x™@¯„ƒK™„ĉUU`óšlȝô@¤ƒÞJ„k°xVŽ„n@ŽmbXޝ›L`ƒ¦ĉbml¯X™ŽUŽl„ȂĊXzm‚ȁÔU‚ÜVšUnnŤwŦJɚ݄XÞW¯ô@ÈlU„b„mln"],encodeOffsets:[[103984,36344]]}},{type:"Feature",id:"6321",properties:{name:"海东地区",cp:[102.3706,36.2988],childNum:6},geometry:{type:"Polygon",coordinates:["@@@҄bš¤ÆI°ôU¼š°UŽnnWx™š@b¯L@lUUWbXxWl„ƨnxVUllš„XVŽUŽnL@lȀý²KVnƾ‚ĢwV»ƒ@mÞ£nÆƒÞÑmL™ƒKUaVżĕƒWVk²ƒƒÆÝ@ƒXw°@„ô™@a°wóUUmIk™™aVmÞwmknyƒ¹VÿƧnŏm£X»˜™naV±„Ýw@ašb@aƒm¯„ĉVó¦kÝWKUU@WanU™b@ôǺĉxb@šÇ¦™w¯bV¤„šUX›ôU¤bmm@UJnbÇbXVWn™`¯Umk@@bka@bÇK"],encodeOffsets:[[104108,37030]]}},{type:"Feature",id:"6301",properties:{name:"西宁市",cp:[101.4038,36.8207],childNum:4},geometry:{type:"Polygon",coordinates:["@@@kmKVUƒWk™VkUmwƒƧXkWwXaVV@k°K@aš™XwmmV™¯V»¯óÅJ™£ƒamŽ—X@šċVţÆķç™nUx™`kœ›`@šÅmĊx@Žƒ¦U¦„blVރŤèô¯„„Wbœx›¼œŽ@xċ¼k„™V™ô™bÇ@Ű@„™n„V°¦ĊJ„kĶa„lȍźU„a@aVwnJ°°J„anXlwš@ĢÓ"],encodeOffsets:[[104356,38042]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shang_hai_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"310230",properties:{name:"崇明县",cp:[121.5637,31.5383],childNum:1},geometry:{type:"Polygon",coordinates:["@@uŏu»GPIV±ÐɃŜ{\\qJmC[W\\t„¾ÕjÕp‡nα|ěÔe`²„ †nZzZ~V|B^IpUbU†{bs\\a\\OvQ’Kªs†Mň£RAhQĤ‹lA`GĂA@ĥWĝO“"],encodeOffsets:[[124908,32105]]}},{type:"Feature",id:"310119",properties:{name:"南汇区",cp:[121.8755,30.954],childNum:1},geometry:{type:"Polygon",coordinates:["@@`y”ĉNǕDwǏ»ƒÖLxCdJ`HB@LBTD@CPFXANC@@PGBKNECCBB@EBFHEDDDSNKAUNBDMNqf[HcDCCcF…@EFGLEBa@ACoCCDDD@LGHD@DJFBBJED@BGAEGGFKIGDBDLBAD@FHBEF@RFDMLE@SGANFFJBANPH@@E@FJjRIACDMDOEKLFD@DbDAJI@AP@BGHFBCBGDCC@DCA@CECGH@FKCEHFJGBFDIHACEDNJDCVFBDCRKRLDLITB@CjNJI^DBCfNVDHDFKHAFGDIICDWBIF@@CFAjFJNJBBHD@CJ@AEFJ@@DH@BFBCPDBMFEQGDIFCNDHIP@HDABFACBJFHEBSZC@DP@@JDBƤ~"],encodeOffsets:[[124854,31907]]}},{type:"Feature",id:"310120",properties:{name:"奉贤区",cp:[121.5747,30.8475],childNum:1},geometry:{type:"Polygon",coordinates:["@@~T~JjZdDbLXDLCB_J@@FHFZJJIAGH@HGR@BENBLID@@LFCDF\\FpDBDb@FAHKFE†@dEDDdC\\GreNMACVMLBTMCCFCEGFAA@DAFDLMHA@OD@BMEWDOC@AS@KGAI_DcKw„ÕísƝ‘åĆctKbMBQ@EGEBEJ@@MBKL@BJB@FIBGKE@ABG@@FMFCPL@AjCD@ZOFCJIDICIlKJHNGJALH@@FPDCTJDGDBNCn"],encodeOffsets:[[124274,31722]]}},{type:"Feature",id:"310115",properties:{name:"浦东新区",cp:[121.6928,31.2561],childNum:1},geometry:{type:"Polygon",coordinates:["@@EN@JJLNHjLJNR^GRYVBNZJRBV@PDvbLNDN@LGNER@nCNQNuT_TIVFV\\Z\\XnDrI|[Ʉś²ÏJUHOƣ}CA@IO@@CYDATGFIEDAEBBAGCO@GJMCEDCJRHEFANOCADAEG@@CI@FE@BDIC@AGIAIMiEEB@DE@AJCXJDCJEHGBELGCUCeMAD]CIJiM@DSAKJKCLQDQACUECDMIFCBDJGECHAEIWCK@GLMCCGEACNKCEJG@MMBMC@@CIJUINT@JAJSTEPZZCP"],encodeOffsets:[[124383,31915]]}},{type:"Feature",id:"310116",properties:{name:"金山区",cp:[121.2657,30.8112],childNum:1},geometry:{type:"Polygon",coordinates:["@@L@BIHFN@@EE@@EFBDGDAADVDD@@EF@CA@IIsRE@GDAF@BF@CV@|FBCHBLCNHAFCADBMDCFZXHILBVEEQA@MWFARJJ@DCX@@TEFBLHAAERE@AJABRPBNK\\BrJ\\VHGND@CNADKDADQjGAGNC@GJ@FCFFHC@JF@@dLBDSFADHVG\\DTEPDDHJALIJkJDJCDIPE@YDCBiK@DONE@EH@BAF@HLJA@EIA@ALKNA@@FIFAFHR@NALadsæąyQY@ƒA±DʼnXUVI^BF@FFF@HBJEDFFGFEBSRkVEXGHFBMFIVW@GAEEFOIAIPKABGWEKFSCQLQBSEIBC\\FdBLRR@JGACFDDEF@AWB@LJJYNABBA@CUEGPaO_AIE@MYMFIGAEFECHSAAKAO\\[JEDB@E@MMA@@AGBKMGDFFCDDFEDFJF@NPBAFLHFH@EDDHBADDC@DDCDHHCDDFDABDAD@FEFOBCJ[D@HEDDNJBDDHABJIBBvGLBJAH"],encodeOffsets:[[123901,31695]]}},{type:"Feature",id:"310118",properties:{name:"青浦区",cp:[121.1751,31.1909],childNum:1},geometry:{type:"Polygon",coordinates:["@@RUNKdOFDJCbRFMLAHPLDN@JGL@@APBWYCKN@TU@SHGCEJIDIJKVIZVNM`iNY@CIE@CA@KBOEGEUFCCSADEIEFCDDDIDDHC@CKIeDCG@IG@DHWFEEGCH@@GO@@O]CNpeEQDBFME[JC]DGF@CKOA@QSB@GB@@GW@@ED@AQIJIAAFE@@DO@CFI@KNG@CDACAFEGKGBEGBDCCAIFCCLIECFI@MBCLDHGNAHSF@DMB@EEKBA@@C]DEICFG@ADBHGFKCDAKKHKD@@FHGAANGEEFCHKCECBCKG@ADKCNE\\[A[I@@mGBDQQEO@BCE@AI[AML@JGACLOAFKEMM@EQKC@CUCBCCBCHEA@FF@@FM@GEAJK@GNF@EXPH@FD@M^@HIADJCFDBER@DK@@DE@CAKFOCCBDHIBCNSB@GFC@GQEEOWFICGDUAEJIDBTAHJHEB@DIF@NE@H|HBDBEH@DKBAHEF@HEEUB@FGFGCCCE@AHOB@NH@PRLVNNFBX@RC€PbAvMtBfH@DJF@ELBFA@EH@HNED@FFB@HLC@CJ@@DJ@PIRf@HE@CFF@GPHD@DKE@FFBEFFD@DEFCA@DD@IjCRFBAHFDKD@HF@@PM@H@BlbDJDBFEF@DLXB@HCD@@IFCBIFEJD@FDC@FBALLF@PAACJERACAJCBD@EL@JD"],encodeOffsets:[[124061,32028]]}},{type:"Feature",id:"310117",properties:{name:"松江区",cp:[121.1984,31.0268],childNum:1},geometry:{type:"Polygon",coordinates:["@@@DLDFRN@FNELPBDKHB@INK\\BBJF@ADP@RFCRHA@nJ@B\\[\\MFLDBCH@DLDADFGLEDFFMHBBGH@EC@GLLLCBLDHEAGBCH@DEFJ^C@DB@LAFFA@CNE@GTMBGHKCAD@NEJFDKJDDJEDBCDHAAFLHFHBEBDDCH@LMJ@DEP@@CF@BEJBJIBRC@@FX@@HA@@HTA@RPBDLE@CHD^\\INFAERCfFMo^D@PP@@HG@HDFFXECGH@@JDHfCLJ@DGDCCCJCCEDJFCFTBDDVEHFPFLAB@NBFCFKFC@CHIACNOHWHCAAFIDD@CDAGEI@ACFMF@R@R_@GQED@EGFEQEDE_IAHKAEXCQUOQCUDEN@ZI\\DDmAMHCICDSOC@EG@BKHIGMIBCGOCSF[CUHCGEBCTKA@cE@@IGDEEEDI@@HMDBHiHCRCBCLMB@DMCGH[UqI[AMLOAAQIB@BQFBFGBAKFE@SW@CDI@QIEBNXB@FRUFKAGJYWDENCCADBBEMGKDGAAD{EU@@DAEE@CB@HQFJt@JDBE@@FC@"],encodeOffsets:[[123933,31687]]}},{type:"Feature",id:"310114",properties:{name:"嘉定区",cp:[121.2437,31.3625],childNum:1},geometry:{type:"Polygon",coordinates:["@@F@LI@IDKJADKIEJICADGACFECCJ@HKCAFOHAJI@aCBEE@ICAEB[GFGCKL@FGEIFADMLCAEJM@ELQECEIG@BE^QKKLQCA@EHBIGQ[GEHOMGGDHKH@JOECFCjCBEFDNCACMBCILGTABDLEEOEIG@GFIMM@CGKFBFCDE@@GEAGEEACIcGaHMFITIHDN[AKF@FS@OA@BK@IHM@KCGOKBENaQIDECcPMLQVFHFB@BFBKLGD@FAJOVGIACQ@A`LPCB@JEF@RU@ANS@@RCL\\HIFpRBFRBBDKLLDADJDGBFDABHBEDNF@DGBBBADKDAHC@\\JJFBDEH[DEFDH\\LX@XLBLbT@DNJLDCEL@VJABJNDHB@HBHYFBAA@GNFB@@AFB@AFABFLFBHFCL@HJBAFBLC@DN@HN"],encodeOffsets:[[124213,32254]]}},{type:"Feature",id:"310113",properties:{name:"宝山区",cp:[121.4346,31.4051],childNum:1},geometry:{type:"Polygon",coordinates:["@@ˆmÖoÖiƒ½[s[YEUJU`SCIEBCCWJY_LIICDWU@@FaBCJIB[ICH[@@CDKEE@MK@@IMCAEBCH@AMFI@SMGEFGB@FK@BHCAIFJNQD@FEBDFMBKGACG@ECWH@@CDDTOEEBGEK@GC@EE@GPHFR\\JHGA@FDBKRLL]RAFH@FJFDKR@FINBFKDCNEBFJEHK@DLEH\\HFADB@JFFDA@bIJGBEPDBGLI@DDEFBDCHDBIJJFCLIBCL@JKJE@ADHDBHJ@HIBBDFHBBAEIJ@BJFAVL¢ˆ"],encodeOffsets:[[124300,32302]]}},{type:"Feature",id:"310112",properties:{name:"闵行区",cp:[121.4992,31.0838],childNum:1},geometry:{type:"Polygon",coordinates:["@@T@@ELE\\BCMJGJSNEbGdHDJFBJAFIEIFCEWG@@gMENSFCVJFAxR~B@IH@AIiI@GE@FGEAFQPDRiV[\\DFSGMHAXHDOMCJCDETBBNVJJI@DD@ANNNH@FILDDMFBDHNDHKL@XDFGLD@EHGFD@DDB@CDDHCDAEAHG@ABOJ@BIaC@CECLKPFNCDCJBiQEIF@@@OGBMIAEEBMTHF@NKEC@QFEGA@EBCKAACHCLJHEFHHB@AFCAIEACIC@HG@KCCDC[ECEED@KC@KJMAAFQ@GHG@BHIJYIGE@EI@A`KDWCaKcCiY}I}S[CYJM@CFDVPRRVWDFžLBBG`JCFRFEFFHC@RF@HQ`Q@E@ENBDJ@HFCB@DCCEJBBGDGXMPBDGJ@DEDELEDMA@DJF@DMZ_jMNYUUJILCJIJDFGH@TSVM@DLXZ"],encodeOffsets:[[124165,32010]]}},{type:"Feature",id:"310110",properties:{name:"杨浦区",cp:[121.528,31.2966],childNum:1},geometry:{type:"Polygon",coordinates:["@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R"],encodeOffsets:[[124402,32064]]}},{type:"Feature",id:"310107",properties:{name:"普陀区",cp:[121.3879,31.2602],childNum:1},geometry:{type:"Polygon",coordinates:["@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH"],encodeOffsets:[[124248,32045]]}},{type:"Feature",id:"310104",properties:{name:"徐汇区",cp:[121.4333,31.1607],childNum:1},geometry:{type:"Polygon",coordinates:["@@RADL\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\QjOCERFBEHF@@HjJBJG@@J"],encodeOffsets:[[124327,31941]]}},{type:"Feature",id:"310105",properties:{name:"长宁区",cp:[121.3852,31.2115],childNum:1},geometry:{type:"Polygon",coordinates:["@@HFFB@HF@DCAELENSJADCNG\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB"],encodeOffsets:[[124250,31987]]}},{type:"Feature",id:"310108",properties:{name:"闸北区",cp:[121.4511,31.2794],childNum:1},geometry:{type:"Polygon",coordinates:["@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\@DG\\JJADI"],encodeOffsets:[[124385,32068]]}},{type:"Feature",id:"310109",properties:{name:"虹口区",cp:[121.4882,31.2788],childNum:1},geometry:{type:"Polygon",coordinates:["@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT"],encodeOffsets:[[124385,32068]]}},{type:"Feature",id:"310101",properties:{name:"黄浦区",cp:[121.4868,31.219],childNum:1},geometry:{type:"Polygon",coordinates:["@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV"],encodeOffsets:[[124379,31992]]}},{type:"Feature",id:"310103",properties:{name:"卢湾区",cp:[121.4758,31.2074],childNum:1},geometry:{type:"Polygon",coordinates:["@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB"],encodeOffsets:[[124385,31974]]}},{type:"Feature",id:"310106",properties:{name:"静安区",cp:[121.4484,31.2286],childNum:1},geometry:{type:"Polygon",coordinates:["@@DLLB\\NPGLFHUDMYABEeKEVMAAJ"],encodeOffsets:[[124343,31979]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_dong_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3706",properties:{name:"烟台市",cp:[120.7397,37.5128],childNum:9},geometry:{type:"Polygon",coordinates:["@@ŤLšLllVń²è°xżĢĠÆl҄šŤbœ„V¤ĊXnŽlĢVĊ„Òš„ȰĊŰÞè˜L„±@џn»VUźċ²»ÆkôVɆkĊѲkŤVVwUUVmUaƒ@KkU@ƒmUmmk@UwUkmW@UVIXa@ƒmw@a™KULƒaƒx@Uk@UbWU@yULmK¯@kXƒVUwm@@JUUknWKUVƒLUbU@™wWykIƒa@w@mUI@ašUVynIWa„k„@@W„bl@@knmƒK@wnIl™°Kna@V¥ğ@ġUķ»™¥@UōJƒX¯¤k@™wmI¯‚k@mwƒak@@šlX@bUJ@VƒbknWxkLkxlŽšLVlkLmŽšb@bU@ƒbU@VbU`Vb@n„L@Žmb—U@˜VnUVmnU@mm™@kIUWVIUK›VkkUJUnmL@VmLUaVWaXamU@™™U@KUUmVƒU—JƒU™VÇwğn™mƒ@mXĉV@l¯xnô"],encodeOffsets:[[122446,38042]]}},{type:"Feature",id:"3713",properties:{name:"临沂市",cp:[118.3118,35.2936],childNum:10},geometry:{type:"Polygon",coordinates:["@@˜bXlƒl@zlV@lXXmŽkbVVlš„U@Vn@@Vmb@XšKšVX„WJ@XXl@„‚ŽÈbVLšUl`„@XXV@VVUxVbUxVbš¦„@‚WnXVJ@bnVUzl@„°Æx„U„KlU@mUUnUlUVWVUnVV@XX°V@Všll@Vk„aXVl@Ux@bmbXLlKlb@b@bUJn@@„„b@n°x°K@an@@UlLVKVbXb@bVVnK°LVa@UVa@™Xw‚KVxnLšU°@naV@UWUkWƒULmV—wÝKUUla@aó_@mƒK@aUU@ƒWUkwVm@aVI°W„@@IUw@a±¯@¥kUVUm@a‚wkw™@ƒK@kVKk@maXalI@alL„WXblaVLVU„V@LnKš@„l@w˜aXašLlnUl„LšmV@n°J@_VmnIVym£UKmI@WnIVm@anUVmÇ_kġIÅWUXÇm@U@ݯÅ@ƒ™@naWƒ™IVW@IkK@klKn@naWIƒmk@ƒaƒbkKkLWn™WkLWmk_ƒ@UaVƒUKmLUw@mn£WwUmU™ƒaóV@UkUm@UKULUwmJUX@WW@XҙzVblJXŽWXk@UVWK—X‚¤UL@xU@ƒ@ƒVUaU@@XmVkLmWkXUyÝLmKXnVŽ@n@l™x@bWLnVVn™`knULmxUl„„WLXŽVb@VƒK@z¯x¯¼Wx™KUn@bk@ƒlƒVVVz"],encodeOffsets:[[120241,36119]]}},{type:"Feature",id:"3707",properties:{name:"潍坊市",cp:[119.0918,36.524],childNum:9},geometry:{type:"Polygon",coordinates:["@@l@@UšK@Ž@L@bX@@VlL@JƒLUVnX@`ÜXn`V²mJ@bU@@n„b@l°xnnĸVƚ°@„ƒĊ£Þ@lWnÑnkʶJmó°w@kk»V@»ƒ¥k@V@kw@wVm„a˜Å„mšaô£ŎƒXI@mln„Kla@mV_UKƒ@kUkw@alW™IU»™mƒ—@WUIl±UUÅU›bkJƒ@a@wUKUaVIÆmXIWaka@m@Ul£XKVw@ƒUIƒJUkmJ™ƒVkU@a„ƒWK—ImVƒ@UxmL@bX`WXU@U`ÇkUak@@°UblXk‚mLUKmL@VULóƒƒVk@@Vlbn@Ub@ċaUJUbƒIUlVLUVVbVKX„VlVXU@mb¯@™VmKUwLWx@šUb@VUb¯KmLUU@aWaUaULkK@Vm@@b¯L¯w@mƒa@ƒm@UUU@U¦lJUXƒVƒmkb@nm„XVWŽkb™IVxUV@VUbWLXVƒLW`Ux@nk@Vn@x@VkJ@œV`mXkŽ@V„xV@lVššI@VULš˜VU„IV`°bVXXx„V@VWVnL@xV„Ub"],encodeOffsets:[[121332,37840]]}},{type:"Feature",id:"3702",properties:{name:"青岛市",cp:[120.4651,36.3373],childNum:6},geometry:{type:"Polygon",coordinates:["@@„@nU˜JXLƒ„@blVU‚š„nIVl„IVJ@„UxWLk¤@V@nlbXbWJÅnUJVbVL@x@b„ŽlIœaÆVVVk²VJ@X„˜šnV¼šJkX@blxlV„@VLU`@nkbƒLkm@nWJō„ó¤™bƒn—ƃbUn@xlxU@l@„¦@¼UŽl¼ĊUnW„@šnĠmÈxšU„V˜I„VnUVV@LšV@šnVWbXb‚UVbnK@UnKVmVIllœUVLUJVXlJš@nnV@nmVUUm@—˜Vna@ƒK@mUaV_UaV@„aV@@a™anlKUk™KklwlKXwlm„a@UVI@akW@™l@„bnxl@°nJšxl@°£„WŎIUÑn»lašmô¹Ŏ¥VaUUkƒmkġWɱIUUŹ`›@kk@ĉƨřV¥_Ç@™Ĭƒ¤ÝL¯m¯£ƽóķwUW±ī¯kōaĉĕ™kğmó°ƒbW@UKkLUaƒVmz@V@ŽUxVn"],encodeOffsets:[[122389,36580]]}},{type:"Feature",id:"3717",properties:{name:"菏泽市",cp:[115.6201,35.2057],childNum:9},geometry:{type:"Polygon",coordinates:["@@@¥šIVUÈmÞ»@UlU@Un@VW@UVmkk@aVUUKVÝ@UVknK@UV@VVnIVƒ@wnƒmwmKXaWaXI@UV@Vy²blkVKkam™U@kb@Um@VmUkmƒKmkXKWwkU@Ulƒ@UnK@UVUUm‚KXwšUVL„w‚K„U„@@Wl@@wUkV¥—@@I@W@_V@VWUw@UUa@aƒaWa—@@_mKUw™l¯amzmV—@WK™nU@kƒWLķaUKbÝVmV@UWÇbÛ@ƒX™°UbW@XŽm„Vlk²UJUbmLÇxÅWUzl‚¯Ll„@VkK™XUbWJ@bU@¯@™ƒkbƒLmKka™„@l™_WšXºVbUz@J‚n²V@¤lX„Ž„nV°šLn`WbXLôVlKVUšxXn˜lXLlU@bVV@„XJWLUVnVV@„„@n‚l„°nn‚V„KÈbVXÆJU°VnXV„kV@@xVL„@šWlb"],encodeOffsets:[[118654,36726]]}},{type:"Feature",id:"3708",properties:{name:"济宁市",cp:[116.8286,35.3375],childNum:11},geometry:{type:"Polygon",coordinates:["@@nam_nKlVLXa„Il`š_@KVVXI@m@w‚ƒ„@@k@Kšnô@n`VbV@@L„L@KVVn@VX@‚VL„Jl„š@VUUƒU@Uam@Uk„wšKWaXamkJmIUVUÈblašUnV@kVKl@@lXL°kVJ@VÈnVJUX@V‚LXl@xVLnU‚@VK„V@a„IUaV@„bĊU„x„K‚kVJXUlV„ƒ„UVašI@WUI@KlUnw„mWk@WXIWƒ™U™L@Wna@Um@@UƒVk™UUlanWW@kkU@y„kWk—aWVUlÝbUU@kƒJUIU@@ƒ™JmaókƒLKǃUUkKWLk@WbkUUaƒbmKn¯°¥V@XwV@VanaVaU_@Wlk@WÈ@VUÈVVۂm„aklKȯlLVUX@lK@aX@@kV@VmV@VwnJV_UWUwƒX™am@kW@wVUkKVIUUVmU@UV@IVK@aUL@aƒV@Lm„UKmx@ށômLkUWJ@šnXmlUxUL@Vkn›VUšU„@V™L™`Ub±LkV@kUKÇbÛ@ƒU™Wó_mJƒ@Wk@@Xƒ@ƒVLƒxUK™VWxLVnUV@VmL@Vk„@VlVXxWLnl‚Ln„VlUnn@@VlaV@nšlbULkl±aUzU@@VWJXbWbnLnxm„@xU„mJUUU@@VmLUl@VUÞVLUV@bllUn@VUXm@@VkV@VݼÇnUV™J@¦nnƒlnVlL@„Þb°KVV"],encodeOffsets:[[118834,36844]]}},{type:"Feature",id:"3714",properties:{name:"德州市",cp:[116.6858,37.2107],childNum:11},geometry:{type:"Polygon",coordinates:["@@„¤@VmbVXnVVbVJššX@Žll@z„lVInl@„@bVxUbĠ‚l@Èbla„IšxXVWb@L™@n‚ULWVXXšWWLnL@`@LUVVL@lVn„JšU@UUk‚a„™nš‚Vôô„b°¼V‚ސXš˜‚œIÜbČa˜bôW„XÞWÈzÆmnLVJ°ÈnlV²lbnW@™@UƒUV™šmnwmkkKWƒkla@mVIUKUa™aUwmn™JU@@amIk@@bVlkX@mmUklUUƒƒa@_UaUUƒV@wƒw™WkXmW@I@WUaÝU@UXaWUU@UUVW@UUUWUn¥nUVa@m@k@alU@wk™LWa@UUm@@wnmU™wla@anKn_@alK@ݙ_ƒ@@WUUUmlkaƒIƒyU@UwU_Wa¯yU_mWUwkImm@InWWUk@@UVWV—kW¯U@VƒL@b¯b@l±¦@šVV@lUbV„@škxVnUšl¼XV@b@lV@nIWxnbƒ‚™@UU™LƒxÅxm¯ƒaUƒ™wU@mUÅVÝKULm@bmKUXó@"],encodeOffsets:[[118542,37801]]}},{type:"Feature",id:"3716",properties:{name:"滨州市",cp:[117.8174,37.4963],childNum:7},geometry:{type:"Polygon",coordinates:["@@Vb@`„bV„kVlnV@nlWUk@al@nJ@bV@šInmVxšbVbVLUJ@nkb‚lX„lLnlmx™nUš„V@V@šmXn˜lbĸ@nnVx‚b@lnXV@UJ@nVxšxnxVbÆVn¯ƒĕ‚@@wÈçUÇlķVIœb‚@„Çmk@¥k@UkUK@aWakUóJW_UW@wkkWK@U@Kš@XUƒƒUkmUUalKXala@U@kkWlkÈl@kšV„mVIVmU_‚a„ƒƒwnwVW@wƒwUƒ@wU£ƒwkJWIyUI±bk‚VUJ@nmV™Ukl„Xmx@lnbW„kVƒUkLWŽƒxkKUUmUkb™J±—LÇxUKmkUmkkW™™a„mUaVkšJÆ_²KĠ@U„W@w„U‚¥nUWwK@aÝUkÅVaVK@akLWƒƒƒ¯I@bnbVx¯JW„ñšWbUL@šƒŽnV@VmbkUUV@IÇak@@bWak@WJUœJWL@bXV@„‚@„V„Jlb@zUlUŽUImšnbV‚mz@°UV@V™bV@@V@L@xLmKUnmJVX„J@VkLW@UVUL@b"],encodeOffsets:[[120083,38442]]}},{type:"Feature",id:"3715",properties:{name:"聊城市",cp:[115.9167,36.4032],childNum:8},geometry:{type:"Polygon",coordinates:["@@ô@VWnL‚an@VKÞLÆUnVV@šxV„„bn°Æw„wšKVVš@„maXwmJU@@k@aWUk»V™Umlw@™UƒVa@kUU@™²¥@k°a@a„K@U›ƒU@mmm@ów—ѱ¥¯@@w™Kmw—I›¥kU¯UmakJmIUaƒVkKUkm@VUUa™Uƒ@UaƒKUK¯@™w™UVŽUIUKVw™k™¥™wƒbVŽ@xn„@lWnXxlL@`„XlJX¦l°XxW¦@¦Ul™n@Ž™@@Um@@VXVmx@¯bllUnUJ@VULVn@b„xV‚VL@b„„VlnVVblV„ÈnVlIVJœLô„lJ@xl²„"],encodeOffsets:[[118542,37801]]}},{type:"Feature",id:"3705",properties:{name:"东营市",cp:[118.7073,37.5513],childNum:5},geometry:{type:"Polygon",coordinates:["@@ͬUǪlô@°Uœw°ōĠ¯š»Ģ炻XÇ@w™wƑa™ÇƒkwVƑ¯@řķUmm¯w@kƒa@mV@@anIU±m_ÛW@_mWVU„K@IkK@UW@@a@K@™L@Vk@±U@UV@lm@mUU@kLm„„xV¤@xV„„x@xUXmx„xƒ„bV`UnUJƒn™U@lÇkkllX@l@VkbWbkLVbnVVl„„WV™@@L@VXLll@xVXX`ôIlVXb@bVLVll@@¦nlƒÈ@›aUJkĸVÈÇè@x"],encodeOffsets:[[121005,39066]]}},{type:"Feature",id:"3701",properties:{name:"济南市",cp:[117.1582,36.8701],childNum:5},geometry:{type:"Polygon",coordinates:["@@²¦˜Òôxn@nn‚@V‚œ„°VlXU˜UX@Vl@XVmX@JnnlJVxnXV`°zXbV`VxV@„z„JlbkŽVnVV@X„@š`@ÞkL@bm`mL@bkbšxnVm@xn@VV‚@XbšKl@xkV@b@l@nUbmVm¦XVVV@VUXVVV@XVWb@VÞVVb@X@JnXlWšX„x@x„UVV@aVKVUX@lK@UƒIUWnIVmnL‚K@w@K@UU@ša@UVU@¯nyUman™VJVVk@ykaƒIƒU@@ƒWU@aXK‚IV›XIl@Xb@al@Èb@JVUlVna@UmU„@™VKXaò™Xƒ°IUwma@aU@UU@wVW@фw@a™I±`kbƒUkw™UmJ@UkmÇUUkmKknUVƒ@mJUkaWkƒa@KmKkUƒLmyXa¯_@WmImmbƒLmUkVUbUVƒJ™bƒUkkWJkUƒl™IUm™k™Lƒ›„lK@knaVmkI@mWaƒLUK™UU@@VmLUVLWK@UUUƒWUkkVmx@„Vl™¦"],encodeOffsets:[[119014,37041]]}},{type:"Feature",id:"3709",properties:{name:"泰安市",cp:[117.0264,36.0516],childNum:5},geometry:{type:"Polygon",coordinates:["@@n¼šŽW„nxšL@x°@š¥Uk@ƒnwlUVl„XVV@VXL‚KVUnK@UV@šVVL„KXb@nlJUnmb@lkLƒ‚„œšKšlVnšJ„klVXIll„Vša„IVUValUnV„K‚annnJ@X°`Wbnz„KlVnL‚Ž@L„bXl‚bVlnI„@VUU@UmVƒ@U@Uš¥@VmV@@_Ua@m°@@ƒ„kmUUm@UVmn@nX‚@@a„anJVUVL„mlIVJn@nkVLVa@KVmVLXVVLš@@U°bn@VaV@@K@aVkœbWaXUVymU@aUImWXƒ@™¥UaVwUaVwUUU@WWƒ@k_™VUKÇa@ƒƒnmxkV@LVJ@X™JUbƒVƒ„kUWVUIlƒLƒwĉVƒaU@VbƒJ@bƒUUL@mVUK@wWkK@UVWUIÇm@UUI¯lWK@kk@UL@lmU™VkbÇaUVVnJlIn‚WbXb™LƒxVln@VbV@V„UV™@kƒƒIUK@UWm@UU@LƒK@KU@Uam_ó@™m@L@lƒ@„@x@nWJUU@L™`k_ƒJWbUKkmLn`mb"],encodeOffsets:[[118834,36844]]}},{type:"Feature",id:"3710",properties:{name:"威海市",cp:[121.9482,37.1393],childNum:4},geometry:{type:"Polygon",coordinates:["@@VbUnVVUxĊ¼š¼ô@Þф¯‚WǬLŎUÆW„¹Uǃō¯ÑƒÝkţ™™ţóġ™óL™ł̥U™wm¥kÝmkkKóbÝ@U¦@‚mb¯LkšmJ@x„Lmn@lk@ƒa@Xƒ@ƒlXbmJUz™V@bVJ@n@x„blJXzšxV@Va„KVUXLlmVV@In@Vx„UlW°@nLVK@zXVVal@@V„w„bVKšL@bnx@„WbUJ@VnXVlVxl@nnnV@„lV@L„‚"],encodeOffsets:[[124842,38312]]}},{type:"Feature",id:"3711",properties:{name:"日照市",cp:[119.2786,35.5023],childNum:3},geometry:{type:"Polygon",coordinates:["@@UaVUUKVk„JVaVIČb@Vam@ka@Ul@„Uô„VK@UnKVLnKlkWVa@¯l@VbÈlV_V@XWW_@anKVwUmVw@@Uny„UVblKVLX@„aô¯ó¥mÛĊÿÈ¥š™Þ¹lUīƒ¯Kĉ¼ʟbÇV™U™ŽUŽ™XmakJUnmV@bUnmJ@XnJVLn¤UzmJUn@`¯ImŽU@™nƒKVkkm™KWb—b@xƒk™@mL@KƒUUVUKkbWaƒXkK@bkJWbnbl@UL@l„Lš@lxx@b‚nUVlV@¦²°@bVx@Jƒ@¯XUJ@bUnlxVŽ„X@‚VV@b„L@nô`@bkbVVÞL˜xnU"],encodeOffsets:[[121883,36895]]}},{type:"Feature",id:"3703",properties:{name:"淄博市",cp:[118.0371,36.6064],childNum:4},geometry:{type:"Polygon",coordinates:["@@nƒlKV@nVn@@kVU‚@²VVaUƒ@wmKXU@UƒUWwUW¯aU_ƒJUV™—VK@U™JU™@kUƒw@UlnWU_@›lI@U@wUml@@mVwX_„KWUXKVa@UVUUwšJlaXWUnƒ@mla„n„UVWkIV¥V@VVVI@a@akakLWKna@aVwk@WUƒbUlk@™k@U¯UWWU@mUUVUXkVmVVV@nkVƒLƒVÅwƒ¯k@WVXb›aUl@bV@@b@xkVVXVxkJ@nk@@ŽVLUlVb‚VXUVVUzV‚™LVbUbV„VWVkLmškJ@n±@UxU„VVkV@bƒx@ÒUX@xVVV@°J„„X„lK@bULUblÆÞV@b‚LXxmV¦ƒV@xƒXVŽğ@±LÅ`™IUlVbƒnšbXšllVnnlVLÈw˜K²ŽšIlanVVVlL„wXlK„VlUXƒma@knwƒWlkšVnU@mVIUl²aVJ‚zXJlI"],encodeOffsets:[[121129,37891]]}},{type:"Feature",id:"3704",properties:{name:"枣庄市",cp:[117.323,34.8926],childNum:2},geometry:{type:"Polygon",coordinates:["@@‚yUU„U„kl@@aVmšLXw°»°w@y„L@UUaWXKƒƒVknwVKlmš_UmmUXK@ašw@k@mUWmUL@ƒ@™@£@KƒbÝV@akw™aULmƒƒbUK™LUU@lm@—°mL@nUJVxVXU`mIUxU@UnU@@lW@@bkLW@UVkKǰkLlŽƒbnUÜÇUUVÇ@@Xkl@XV`UbmbUbU@WxU@¯¦m°nL„aVblVXal@XKlLVVȄ‚L„KôlnbšI@„V@VJ„I@lVVÞaVkXU"],encodeOffsets:[[120241,36119]]}},{type:"Feature",id:"3712",properties:{name:"莱芜市",cp:[117.6526,36.2714],childNum:1},geometry:{type:"Polygon",coordinates:["@@lmnLVlÈVln@VnIšVlx„Vla²_šJlUUUVƒVw²@@mlIn™lKXU‚UUƒVaUašKUVyUUWVUUaVkUK@l@@mlIUwUWlU@w@aU@@LU@Ubm@¯a@V™@UKWUUKUn@LUbUKmlm@UIkJƒnUKUVmIƒb@b@mWm@Un@VVnnVƒl@„¯@@nVb@`U@Un@Ž™¦@V@VU„VnV@"],encodeOffsets:[[120173,37334]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_xi_1_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6108",properties:{name:"榆林市",cp:[109.8743,38.205],childNum:12},geometry:{type:"Polygon",coordinates:["@@™ýVƒnIW»ƒW@»kUÇL—݃U¯¥ÇIUWWїUWwX¯mƒ@»n@ÜÈķô™@a±kȱƒw„ÑmwçċmU»ÆkkVyIm™ĉÿ@ƒÝ¹ƒWnwÇVš™Åaƒzmmĉ¦ó™kVmx™xU¼VškVm_UlVlk„°IV‚kmJa›¦k™™LmmV@XmKnšlUô›VXbƒbƒ@UaÇLğܙ™Åwƒ£mKnmċwÅ@UkƒbmaVƒƒƒn@m¯aU™Jm_k˜@kWXyl@@kÅamw™LU™Þ™ƒ™mWÅzUKƒš™Uk±@™b@nnK‚bX¤mzVšŽVxÇn„‚¯„@ÒknWƒƒVUbkķÈÑWkk@Va™™U@„mUkbƒÝÅ@Ý¥ÇbkĬ™XV`kLǍVmalUUa™nV±nwmkƒJ@Inƒ°KVw¯UnÅ@¥™ƒ™U±bUU˜±œmWbÛKWnUm`UƒVK@bmnœm‚Èż@V„L@xƒxmš„Ť°nŽ@VmK™²VlšlKk„ô@„êÜV@VXLlmš¦UššV°Ș¯²ÿ@¥š@ƁĊ˜²IšmĶnnb°b„KVƒĸLl„Þ@UȮš™Ü°IVƒÞÝސlŽœx@ŽķĀWŽ„Ux„èƐ@š°ŽXnšlĊ˰m„nƒšV„²V°ÒƦ„aބ„˜@zll@bÞšlš¼nKĊ¼óȂb²±šIǪÒ¯ĖV@„lxnVlk„JlaXwŌĉ„„@VnŽššlÆĕ„UÆLœèŌŤôxȚlUœ@šxlaUċĕXm„IWmnkšVVƒ„VW_@aÈWUUmk@ƒ¯çVm»™±W¯n¥V™mkXw±ÇVwƒ"],encodeOffsets:[[113592,39645]]}},{type:"Feature",id:"6106",properties:{name:"延安市",cp:[109.1052,36.4252],childNum:13},geometry:{type:"Polygon",coordinates:["@@@kkÇmIšmUwVkUƒƒU²WmšVkm@m`mIĢĕUƒVa@™mXƒƒÿVVkyUýšĕ@l_UmnƒW„KVkţ™™¥™aƒwğ@™@aôƒ„ƒWa„kUmƒa¯¯™a±£kx™mmxUwÝ@xmU™b¯K™wó„Ý@kmm¹Ub@lklVbmnnVUV@x›UknƧJUX@ŽƒLÇWkw™LķƧÅwWJk„ƒLkþĉxWz™JUnǚkš@Ɛk¼ÜÔÈKšè@°lșÆk¦l„n@l¼@l¯L™°UU™Vǰƒ¹—`m¼mXk‚™bUaƒV@U¯x@¦™Ç™„UUmlmUVm„nnmlkw™@@šƒ¦Å‚ÇLmx¯Iklš„@¦mưVUx¯Lm„@J„InlmxU²šmVbkV‚bUnȎlKU_šWlīÈaÞ¦Æ@„ÞlanV@ƒšVšUbl@XlÇÒĸlŽVa„UX„lm@ѰƒƒÈmUw‚U™nyW£amL@mša²@lšV„™VLÆynX„šÝšVššKnxÆb@lk@WzXŽ@ll—n`šIV‚°b@n„m„„‚Unb„aVlÆ@ČxmnnL„¤ÆxššĠÛÈKVb„@„aWaœU‚ókVm™nL@W‚UnnšKlšœ¥‚bnIlU¯JlƒUkVkn`lUU™V»šwnwlUôšĊ¥nn„yÆb"],encodeOffsets:[[113074,37862]]}},{type:"Feature",id:"6107",properties:{name:"汉中市",cp:[106.886,33.0139],childNum:11},geometry:{type:"Polygon",coordinates:["@@lKnb@n„lWb°bkxĸwVb@ł„nlŽ„ƒĊ¥šL@XŽl™ÈƒVblÈK‚b„akVwôml²`‚nœ@‚nVKœl˜k²xŎƒ°¦VU„JĊw@çnWçރVkUóÛ@¥kwš™šUmƒX¯WšÑkƒ@UymIUwlUn¥‚mUk²a°¯V»@™ÝVș„ÝċÅÅVl»@l@a°±@_kammÅb™a@ƒƒm@ż™KknõĠ—@mšƒ„¯LÅw›‚—LVxmb@¼kV™@mw¯wVakKW»X±¼¯Vkxƒb„¼WŽ@nx@x±bóakbƒ@ÝmU™@ķÓÛL™kƒVUm™k¯¤ÝLUlÝ@Ýz™š„x@x™°™™™bƒmƒX¯aUJW¯—k@bÇWƒwÛwWxƒ@XWlb@Žƒ„VŽÈUlwšLnl°VlUô¦œU°¤VšUxVXUxlbkVVlƒI„°„ÅVlU°m@k„ÇU¯xUlƒLUlVL@b™°ĠInĠ°ÈnK‚„@xÞa²n‚aUyšXUKVkšWô¼Èa‚z°JXUVÇV_„JVƒšz@Žnb"],encodeOffsets:[[109137,34392]]}},{type:"Feature",id:"6109",properties:{name:"安康市",cp:[109.1162,32.7722],childNum:10},geometry:{type:"Polygon",coordinates:["@@„bĊaƨèšwôô„¼šb°ašXVƒÞVUÞ@‚aXƒm¥kImx¯¯ƒV@anU@UÇéğL@ƒ¯¥V£mƒ@ÝÈb„K‚™„X°wČÿ˜ƒ„b@xÈblxȯĊ„„mÆUVƒ„nÈ@ƨÜLĢ¥ƒŹnƒ°Vnn˜K„aô_ȃšwU‚aXmnW‚¯kl›LXƒÇ™ō¦ÝaÅVmbğUn¥±wÅéVƒan¥ƒ„U„»°am¥„£ƒÝ@ƒ„wVw™¥nU„уUmmVwmķIÅaóVWxkblb@ból@œğÒĉ¤ċXƒ˜¯X™xk„Ç@óÆÅx@š™xķ_kmݎǣkblb@`¯²@bk‚‚@k¼ÆUČÆƒÞǚÞU@šU¼¯°±bVlnm¦kVVxnJVz@‚l„™ÒXW°n„™V™šlx@¦ôÜVUl݄Xèm@è"],encodeOffsets:[[110644,34521]]}},{type:"Feature",id:"6110",properties:{name:"商洛市",cp:[109.8083,33.761],childNum:7},geometry:{type:"Polygon",coordinates:["@@²nl‚ôbš„°aVwnKÞIš`°wšXôw°VĊ°@ŽÅš„ÞÆV„zÞK@xšŽ@a‚LŚ@b@ŽnLlƒ@šln„mnLVw„a„bVƒ‚VnbU¼„Vƒ°„bl„šbÈ@ĶŦb˜@nÇ@amIyUI@ĠVmôƒU™ƒVwkwlanJ„¯lwó¥@an°Jš_„‚@š™nóƒó@£l¥UwmašÑ@ƒUm±V_ƒJ—£›J—UW¥¯@ƒ_k¯¼mUƒVUè¯b@wmL™»ğVmağI¯¤ċIUW™XƒKĵ¦ķaƒJUb™IƒlUóVmk@WÅÅÇ@ƒmU„ÅVƒnĉƒÇ°kwÇa@wƒa—„ċxƒWšƒLÇa@Þn„U¤°¦@„ĠKÈê@VmV@b„U°°nwlJn¦W„bÝ@VŽ"],encodeOffsets:[[111454,34628]]}},{type:"Feature",id:"6103",properties:{name:"宝鸡市",cp:[107.1826,34.3433],childNum:10},geometry:{type:"Polygon",coordinates:["@@@ƒ„£@›°Išb@¯°ynʃaUƒlƒU£„Umšĵĉ@@ylUÞ@@£kWU¯WaU£¯ÇV¥ƒ@kb¯wƒn™¥ÇkUÇnUƒ@¯±›kULm›@m±_kŽónUxlŽƒbaÇLkŽUaDŽkšW@™Kĉ¦ƒ„kƒm@ŁUaķxlw¯aXaƒk@mmakL@šmšÛŽ@¼m„@l„XV`ƒn™KUš°°@²š¤UÈ@VxmôƒxKl„VV²aVw„Xla„Vlx@UVnŽÇnk°ƒVVL™lkI™šƒJÇk¯V@šknƘn@lznmlVkzVŽ„VVxš@Ux„z@x±¼VxxU„l‚kb˜@„¼Čk˜VXlĠkôV²w‚LUKlwœJ@a‚IV¥Þƒn¯Ün„‚„@nk˜l²kÆ@š°„aVbnI@™š‚Ťn"],encodeOffsets:[[110408,35815]]}},{type:"Feature",id:"6105",properties:{name:"渭南市",cp:[109.7864,35.0299],childNum:11},geometry:{type:"Polygon",coordinates:["@@@ÈôL„xUް„Þ@mŽÈnl¤nUôL‚wX`@ÞÝL™ŽUšmLô„„ŽôbVbnºlnÞ@ôƒšx°LšanV‚wÞ@Vxnwšnlw²¤šb°°„bVnƒlXbƒ„ó„@bš‚Ġ@„xšbš¦ŤšV™Xġ„£W¥ƽɽƒó@ýóƝÝ»„£X™mƅšĊkUƒ„@™™šó„kťaĵŽÇ@™akƒƒa„¯ƒUV»maUU„ƒaƒbUxmKƒnkm@™k„mK@ƒxó@¯n¯KǦ@ôÅèlxkx°nƒƾ¯KU¯WķL@VÝIUb™yWbX¼Ç°"],encodeOffsets:[[111589,35657]]}},{type:"Feature",id:"6104",properties:{name:"咸阳市",cp:[108.4131,34.8706],childNum:14},geometry:{type:"Polygon",coordinates:["@@šIXyĊwlý„KlƒXIVaķƒ™»a›£„¯aVU@a™‚wÈō‚ašL²»‚VœUln°WȯW»XašzVaÞJ@Uƒ»@¯Ýbğwly@£kÑţ±Wу@ka™IUƒƒnƒ@¯ƒómţU™b™U¯lÇIÝb@¤Ý@kV@zĊ@™ĶnƒVV¤k„V„„bmź¯z@°™a¯J@œƒ¤@„„bUx™bƒ„@`™xUÔ±ºVXœW‚„UnUJ‚L̝ÈKlblmÈXŎ°šU„°LšŽlkÞKš@Èxl_°ĶUÒkblš"],encodeOffsets:[[111229,36394]]}},{type:"Feature",id:"6101",properties:{name:"西安市",cp:[109.1162,34.2004],childNum:5},geometry:{type:"Polygon",coordinates:["@@°²@‚„mVVÈÈlš¦„m°xla„@U¦°ÈV¤XbV°lXÞaÈJ°kšVšaŤVôn°„„@„mV„šJlb„@XÒŤ²lÒ@¤kzĠxÞa@°„¼ĸK°XV‚°L„ƽ¯mlwkwÆç@óÈ¥°L°mô@„w@aƙK@b™@wÝLƒyÅUƒÝƙ@ĉ¯¯Uóx™W¯x™_ÝJmLUx¯b™ƒóak±mÝUU„™W¯b™aƒ»óó™xƧçĉbƒaĉxƒIUV¯¥ō„±w—l"],encodeOffsets:[[110206,34532]]}},{type:"Feature",id:"6102",properties:{name:"铜川市",cp:[109.0393,35.1947],childNum:2},geometry:{type:"Polygon",coordinates:["@@ÆxĸƨšKlxÈX„K@VWƨIlmœV@wVUmUnmUalk@kVaUaóaƒóƒnKV™šÞK@ÝW_xóKmVk£ÇmnÝ@¯ƒVƒwóK@ǯXkm›VU±¼™KbÇŎx‚š@bUV°bƒœ¤‚bš¼ĸ„Ub"],encodeOffsets:[[111477,36192]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_xi_2_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1409",properties:{name:"忻州市",cp:[112.4561,38.8971],childNum:14},geometry:{type:"Polygon",coordinates:["@@Vx@lnbn¦WlnnUšmš°š²VšV‚VVVnUn„ºlz@l„„@Jƒ@kXWVXl@Lƒa@„ƒKUL„ŽlbnKlLnK‚LnKÆXn°šbVV@bUVl°Un@LnaVJUbW@UX²l‚@ČwlVVIšWnkÆa°„„anV‚Kn°™UW¯@™aVUVk@Un@„aV@ValwUanmWU„k@WVUUanaVwnLVl°@nk@mVU@UVK@w„LVKVU@ƒ„K@UUKVUV@@bnL„a‚V„aôšlIXmlKX_°KVV@bVV„@šzV`kblI„V„Ul‚šL@bnV@V„Ċll„„VlIXW@k„a‚U²blKšVnIlJ„albXXlWVn°JnšnL@l@XlJlaX@„X˜W²@l_VmnKšU„blU@mnkVK„¯@U@ƒma@kX¥VƒmakkƒLƒa@aƒ@WIUUVXWWnk@a°a@kkm@kUUmJm@WUUUIk`m@V—kaWWkX™KmƒXk¯ƒ@WKƒLkak@±bƒw@ƒaƒa@akaƒ@ma¯@ƒL—KÇÅkKWbkmġ™±ÅUƒLUK™VVkƒm¯LUVVbƒ„UwUW¯bm„ƒULƒxWJ—@ƒklmkUm@@KnwVkVK@akwƒ@@a¯bƒKkn›VUI™b¯mmbk@UbmKUL@xUUƒ@klmLUŽlVXI‚VVVUVUœU`mLXVWbXnW`Ų°xmށxU@mĉƒƒwU@mbU@UƒmbkVW¦kJ™@ƒX@`¯Im@UlUVVnb@bWJXnmbƒJUU™UUaƒ@UamIkaƒxƒ@@x@b"], encodeOffsets:[[113614,39657]]}},{type:"Feature",id:"1411",properties:{name:"吕梁市",cp:[111.3574,37.7325],childNum:13},geometry:{type:"Polygon",coordinates:["@@@a@w„@„wlbnJVb„@VbšVVV„InaWmXI@a‚aUmVUVkn@°J@_„Wš@lIX¥lUnaV„V@naV@„xĊ„n‚V@‚wn¯wƱX_WmXaWUnKV_V›VUUUUWJkUVnKlk¯™@@kmKUaٱKkU@WmI@WUIlUUmVwXƒ‚w@ƒUlUVwœV‚@„Lnb‚W@anU@UšaVkô@l»n@na˜JnUÈLVaƃUUVm„VKVƒ²L@mU_lK@UVWkU‚a@a@U¯aUaƒÑóÑUb™„ƒKk@@aƒk¯mVaUwVƒÑkWUmK@UUKmXUWÝwUa™LUU@aWJUUU@Ua݄U@WL@VKVaVI@WnU@alIVKƒƒ@kIƒmIkJ@™m@ƒ™@@_™K@xƒ@kaW@U„@Vmn@ŽUK@mIƒJUXV¤XXWlkKƒkkK@XmJVakImJU@ó™¯LWKUV@nUVƒLkxmKkLma@kXKmmƒLƒab™LmK@V@mXVÆUxƒX@`nL„aV@@VmLUVnLlLš˜„b@„šŽ°²nx@b‚VUxlb@V¯bUV@zV‚XVĊXVx@lVn@VnnmŽUš@LlJXVƒz¯VWVXbšV@bmn™VUVk„Çþń@XVxmbUlV„Uln„W„@„Xl‚@VLXÒ@bÞJ°¦„L˜ò„@nU‚b@°„X@ŽXbmVU„V„nb@x‚x"],encodeOffsets:[[113614,39657]]}},{type:"Feature",id:"1410",properties:{name:"临汾市",cp:[111.4783,36.1615],childNum:17},geometry:{type:"Polygon",coordinates:["@@nW‚@@UnLšK‚a„b„KnnWL@lnblKnLlw„KVU@mVUXL°KôšV@nIlJUbnI@WlL„llLXkWWU£VW„InJ‚@VL@nm@UVƒX@lb„@@wšL@`‚@„šn@V@lw„@n„VmVX„WmwnUlƒœa@_lK„wVlUn°xVKVXXWlUšVVI@K@K„n°KœwlVlU@kna@V_„Wn‚m„UVm@kXml_@m„LlKXw°m@_ôJVUV@X™l@UaV@Va°I„lk»VwUkVmwUmmVn@V¯@KƒU—wmK@U¯wUVÝ@mJƒU—nWK™@@UnKVa„_lykUmKÛnm@™x@ƒUUlwVk™ƒXW@ƒa@Uƒ@@K@ƒkIV™nammVakUlƒ@wX@@kƒ™¯@ƒVVbml@„„°UbULmlVbnbÅK±VƒKVXUJWa@ULWaUU@@U@aWK@UkxUKƒLUUUJ±UkL@V±kk@kam@UV@l@LWl@n@VVUx„LlUUx@VUV™U@aƒIUl™L@°mLU‚ƒbkUUaWUUaUU@aWK—LWJ@bUL@VUVVbU@m@a@kmKmnĉlUK™XƒWUblb—xmIkƒƒU@xWb@lkšVx™LXŽmzVV@bklVVUzm˜@bk„@Vx@xlŽU„@lUbVnl@„Wxnl@n@ŽUbV„mL‚mƒb@`X@lUX@@xlnkLWaUJnnWV™Vn@l„@bULVV@l™V@XnJVX"],encodeOffsets:[[113063,37784]]}},{type:"Feature",id:"1407",properties:{name:"晋中市",cp:[112.7747,37.37],childNum:11},geometry:{type:"Polygon",coordinates:["@@@šlInJ„lJ„@‚„ULkJ@bmV@XUJUb‚L@UXKV@ރVbV@VVXI@bVVšKVbÞxVXnWVL@VnLV‚lX„ÒUŽVxUb°n„l@bl@„LšƒVaô҄ÒVb°b@VnLnnV@lmn@lb„U„V@„‚JœUVV‚Xkl@lUzmJ@xšXkl‚bUn„JVšUb„nU‚lb„V@nlLX@lakšV`Ub°š@XVJnU‚L²KlxnI@KV@lbUbVV„KnVl@„zlm@Uš@nŽšI@WUaVl@@mVU„@XkW@ƒnkVKVƒ„_Vw„y@knwVa‚@XalU„@šVnml@„X@V„L‚KVaÞbnnlJšI„mVKn„VVVInVlU„@„m@™mXK@UmyUI@mWUUakamw@wUwmLkakwVƒmK™w@wUam£y@am_ƒW@™UU@knmm„amU@WUa@knw@ƒUUUUV@nƒJm@mVUkKVUUUkKmwƒKULƒKUImV@lUn™nŽm@mbUK@°™bUnmbUmkkƒWUb@am@UXkK@a±@™V™@ĉř„V‚UXVxUVkLWl¯@@bULUlm@@nm`—XƒlWakIkm›VUbUL@Vm@kIƒ@@Kšm@—VaX‚I@W@aU@kUƒVU_™KƒbƒJkkǎ™b@nkKmL™wÅW@kVUUƒVU@WUIƒJmIXmma@_kyVaUUlkUm@ƒkU›x¯Lƒm@L@LUJ™UkVWXUWUL¯wVmUkƒxkL@`›bk„mVnxƒXUWUnmƒƒ@kxU@"],encodeOffsets:[[114087,37682]]}},{type:"Feature",id:"1408",properties:{name:"运城市",cp:[111.1487,35.2002],childNum:13},geometry:{type:"Polygon",coordinates:["@@„Vl„nJ˜wkaVa„XšWVLĊknmnL‚l@@bn‚V@UaVU@UVK@aXI˜KXL@bVVVbXVVblV„aVnK@¯šKVk„J@bšVVU@UVwkVƒKVwUUm@@Xk@K@kVUn@lbl@²l@UlK²VVIVV„KVLlw@VXL@b@VV@VŽXbVK‚@XbVIUW„L‚U²ÆLmaUankVKVaƒ¯@ƒnkUa„U°@„š‚n@@kWa„UVaXUW@IXKVw@U™ƒ„™WU@W@@UUƒU@mn@ƒ`m@UUULkUmJ™IUƒ@@UƒK@U@›anƒ™ak_@wmKUwmakV™kmK™V™k¯b™wƒ`kwUIÇx¯»ÇaŃmn@@™mƒmUkV@wkKW@kxmL™UkĉLÝk™xÝw¯lóVU„mV@ĀVVX¦W¤kz@`Vx°„²ĸ‚š@„Ul@x„êĸNJ°¤V„VlXLWnXxmV@nUl@„"],encodeOffsets:[[113232,36597]]}},{type:"Feature",id:"1402",properties:{name:"大同市",cp:[113.7854,39.8035],childNum:8},geometry:{type:"Polygon",coordinates:["@@²£šyl@Ȑ˜Ė@bĸŽĢbĸ„˜X„a‚KŤnn@ŎôllÈx„nVnÞDŽV@b‚nXllL°KšbVb@J@b—„‚„@ŽU„„xlKXLlKlXk„@Ulk„JlkUƒVKXUƒÇVIVm@_nǚLšašl‚w„VnU@UUwma@aƒaÝaLmUk@@Wƒ@U@@X™wVWÝUUUk@@VmLƒKV»nwUw™aUL@`mzƒJUIVƒUaUw™KUaVIlJôanÑlLVUn@ša„@VV„@@UUwVK°Vn_lJÆLœéW@UUUÅ@»lm@aÞIVwXW˜UUkkm@U@aƒU@mwU£VWU_kWmƒXwW_°yUkkK@UÇK@kkUVymóK—U@KWIƒbUak@mJ@bkbmLkŽ™UmƒkVU„W¦@lnb@„@Vƒ°ULml@nkVƒa™VmLUnk`±@—XƒWW@kbǦXޝ„WxI@xmbmxXlWV„„@bŎUz@J‚b@bÞb™ŽU@Wbk@ƒxk@WX¯VۙƒWÝbÝUkVUU@alI@a@akLWa™m@U¯UUmÇL@K@aU@¯VUkƒKmX@`@œkJ@nV‚Ub@lbVÆXVW„ULU`VbkLUV@XWl@bXJ˜@VbV@Vl"],encodeOffsets:[[115335,41209]]}},{type:"Feature",id:"1404",properties:{name:"长治市",cp:[112.8625,36.4746],childNum:12},geometry:{type:"Polygon",coordinates:["@@Uk™Lky@I‚JVa@mÞaWšy@_W@_WƒXVlUVwš@nw°K@m„UƒVaƒmVkU@mmmnLVUmKXa™U@IlKVUnK@UmWkX@WV_Vƒ@akU@a„KWIXyƒIUVmUn™Ua@WaXUVKVmkUWVkUƒLU@@VƒbƒKbƒIUmƒ@mbVL—x›WUUkn±V¯wƒbÅJUbmLkbmKÅKƒbVnUbƒV™KUb™KUbmLKmƒb™aƒKkUm@UŽnn‚VnxUVlUxl¼ƒk¯JUbU@Vbk@WšU@UVóI@`¯nWxkLƒK@nk`Wn@lUnƒVnm‚ƒXU`@mb@lkV@„VnklVVUblz@`nbWnnJ„IVJ@XUVV„UV@lÆXšxnKlL@mšaȍll„I„ašLV`„UlVV@@b@XJWUb@˜™n@L„@lJn@@UVKVaœUlnlJXb„k˜Wn_@mn@VkVK@a°@XklKVUUwVWUšƒĊƚ@šU²@@blLVWn@@bVa„XllVnnaVmša@¯VLnan@‚šmVm@knUVJ"],encodeOffsets:[[116269,37637]]}},{type:"Feature",id:"1406",properties:{name:"朔州市",cp:[113.0713,39.6991],childNum:5},geometry:{type:"Polygon",coordinates:["@@XXWVXVWnnlnn@èÆ¼@„„xlš„ŽV„nblšššVŽÈUVl‚š@„blnœL܃ĊmUkU@Ua‚—@WI@aXk@WVUlKUaV_VKXƒWUUÅka@VaU@mlI@›@_nW„LVl°UV@@b@LÈKVn°V@VšnXblK@b@bkJ@bVVlUÞVÞa„Xܚ°UXWl@„wl@XaV@šÝa@aa@IVyƍ@aƒƒXUWknwna@w‚JXw°ƒWÈ¥kI@W@kmKm™¯IUmkXWWkaƒbkImJ™UkL±aVƒb@lWXkJƒUkƒĉkƒ@UmU@a™KkƒVƒUkJlaU_™yƒ@UU@aUU¯LW`kLWnkJó™ƒbUƒbmK@aU@UVVL@VƒL@„UVULƒK@xUL@VUV@nml¯@UkmKUxmbVbUV@XƒlXVmnVbkxUbU@ƒbm@@VUlUVšb°@VX¯šm‚"],encodeOffsets:[[114615,40562]]}},{type:"Feature",id:"1405",properties:{name:"晋城市",cp:[112.7856,35.6342],childNum:6},geometry:{type:"Polygon",coordinates:["@@lV„Lšb„an‚LnKVašLVašL„UVaUm„aÆLnLlanKVaÆI„a°x²UlmVVœX˜wUKna„@Vn„J‚a„L„a@UV@@alUkKVKnkmmVwUk„w@ƒ™@kxWUXƒW@@mƒk@aUa@a¯aƒLkKmwkUm@kL@K@aWIXmƒVƒXƒWkUVakL@UVKƒw@aUK@UUKmLU@¯n™KUwVƒUIWJUWmka™@UXƒJƒk@UkmW@kLWKVƒx@bmI@VUaVU@a¯@UUmVKmX@±`kÝKVxUL±akL@V™bƒLkKmVƒ@XWVUbƒVXb@lm@@lW@@xk„lVUbnnmbUšlJ@„@L„@@V„b@‚WXš„UlkxVV@„šwn@ÜmnLlVkzƒ`UbmL@Vš@XL˜m„VnIÞ@VU°x@VnL˜x„V@LU°"],encodeOffsets:[[115223,36895]]}},{type:"Feature",id:"1401",properties:{name:"太原市",cp:[112.3352,37.9413],childNum:5},geometry:{type:"Polygon",coordinates:["@@„@VV@wVKnLVal@na°nšaVJœUlm„L°a@b„@lx@bULUlmx@Ln@lVkn„l˜@XI„w‚K„Vnƒ°aVXVx„ƒUaVU°K„nUlšUVL„KÆVš²Ģ‚lnXalLÈÆ˜L„KUaVkUanmWU™a@WwkUWU¯y¯Ñ@anIl@@aVU„m„I„ymUƒLUUVakaU@@LmJkw±LKmVUI@W¯™VaU_l™kbW@kK@mƒUkaVƒmVaU™ƒIVmalk™W@wnIVy@klkWUU›VI@ƒƒUƒVkam@knU@mmmK@bblVUX@VkLV`@n±KU„ULƒ‚UnVVńUbÇKmV—Imbm@k¼ó@Ul™b@VmV@bXmaƒK@›UUxkV‚V@„xW„UxVnkVVJ@XnJ@XlV²LƂVbnL@lš@°"],encodeOffsets:[[114503,39134]]}},{type:"Feature",id:"1403",properties:{name:"阳泉市",cp:[113.4778,38.0951],childNum:3},geometry:{type:"Polygon",coordinates:["@@°@nb„@lb@b„b„b‚@„x²al@lb„KXU@m‚kUWkkmUUƒVwV@XUW@™naVklKXblKnL‚ƒnLVanImaXKlL„ašV@U@KUKW„alƒXK@£WKXUV@VU„ƒUUVW„_V™@W@@K„@šƒUƒƒIWmXUmƒULƒn™JkImmÝaUbLƒK@UƒWk@mn™Uƒ@kVWb@Ubmx@lƒzUxƒ`U„ULml@„XWlƒ@UV@nk@U‚Vb@X™Jm™@@Vknƒyk@ƒzƒJƒnUV@bk@mJ@b°Ò°zXVlVXx‚@šbXVmnVbUlVb"],encodeOffsets:[[115864,39336]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/si_chuan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5133",properties:{name:"甘孜藏族自治州",cp:[99.9207,31.0803],childNum:18},geometry:{type:"Polygon",coordinates:["@@ƒaXamƒ¯wm@±°wUwV@UaVw²Kš™„U@UƒU„¥‚a„ƒ@£Þ™ôx‚Knkm™X¥™IUƒÝUwlk°V„@ƒÈ™‚KUwlkUyV¹„mšx²Xll„ÑW»š„l„w°UŎ„nƒ„„˜Jœƒl¯°V@wôIVÇn™nUllšLšVǚLô¼XW£@±„@¥k_ÇJƒkUéƒkšƒƒwXa@ƒšLlw²™Vx„b‚mš¼ÈxlLȃ„VWÞn¯mǙÑUÝlÛkwlĉmƒULmwUJ™ç@wkm@ÑlUX™ƒÑôġƒVa™ƒUф¯@wķÓkbV„mnU@@y¯IķKƒV@¹šaƒé@k„mÞU°¥@a¯@anKlblU„¥@óğç@Çw@wkla„çݱk¯±@ğÝUÛmݯwƒ@kb±¯akXWÜkXUÆÇUš¤X_Ɛw„V@¤ƒXU‚ƒbUƒŽƒIUlÇUkŽġ@™aXČmlUlèUV@„mVk¦Vxš@¦±š¯ƒƒ¯¯anlWš¯nƒƒÅw@w°KVak£m@klƒKknÇU™»óKšīlaUaV£@™™¯@ƙU™VƒÛÝÇXƒÇl—ÓlŹ„»WUğJ¯£mx™Lĵô›ºX„VlUll²bl„„lŽƒxónn°ÝšU¼mJUš¯nƒƒƒV@êĉ°Uĸ™w™@mƒ@¯kmXamѯaUwÝKU¥„mÅn¥Wmn™ƒ¹n±ƑƆÇôXê±NJnšƒ‚UôlĖkȂVÒ¯¼VnƒȮ¯ĀnƆ˜Ģ@Žk°V°¯ĢVlkšVxm¼X²™Ŏ@ŽVxknWܰU‚¯n™ÆÝœ@`„ôݲÒƒ‚Çzn‚mX@x„è°K°Å„UČĬóĖ݄ƒ˜ó¼ÅêƒÒƒbmšk@V„Ž˜„@ҁl@nĉܛê—x@Ėml՛J¯¦óxȭ°ÝmޝLĵè›Ā@Ɓ„l°żƒ‚šX@xmŽkV@z@‚„°blŽnÞ°J@bn@ƼUVƒUóŽóLƒ°X°ÝLƒxUn„°ƒĬƒn@lnL@ŽÆ@šn„KÆxnUnV˜InĬmÆnxŎ¼ĊIĢóÞ@ĊƒƨbUƒ‚mV¥lkƒ‚wnL„mšÅÆ¥Xƒ˜wU@w‚wUÞ™@alUUŚU™Vkkm°aU—°Ó°w°U„ƒ„b°aš²K˜¯œĕ˜@ÈbޏĊaš»„XVm°In„‚Ĭk¼Vb„ašJšôš£VĊan™‚k„ů™™nƒÜU@anKnĮ‚bÈmƎš»nI‚霣Ġ™"],encodeOffsets:[[103073,33295]]}},{type:"Feature",id:"5132",properties:{name:"阿坝藏族羌族自治州",cp:[102.4805,32.4536],childNum:13},geometry:{type:"Polygon",coordinates:["@@l@@þ²I@lƒ„VL°wnJ°Uĸ™Ŏè„Ilw„V°¤nĮ™¤Ý„lè„L@„ƒ„@x„l™è²ôĊ_ĊġVÈôJżīlbXšÆÈVŽkxÇVƒ„n°„¦Üb@è@nn@@°šUÈ¥WDŽ_Uala¯¯UǙkƒ»„mVwk»˜k²°VxlL@¤œ_@x‚`ȍ‚Ėöb˜š@l²alX„a@bnK°¦VK@nnWmx@nUnl@@lƒlĉk°l°UXkmW@Unš`k„ÇL„ŽW„ÛÈVxšVVlVk@l„IXb@ylXÈW˜Į„WŤzœy@šmIƒŽ²šJ‚š@nް@V„„J°a„Å@ƒŎkVǚk™aUw„KVw™™Vƒ„@nkm™@±ôkô™ĊJš¼šInÑm±nIššÞ‚XȃĊxĊUÈbÜyÈ£Vkw@kVUV™„m@ša„»ÜbÈmƒUXwÝxƒUn¥@°ġ™Å‚aœJVk™aW¯Û@W¥—UŏĶ™@¯kUƒŃ@ašI@mmanwސ‚W@œ™mw°»Uřk¹±W„xVx¯¦U°ƒzţW™w@°ÇVÑk¯@„y°aš£š@šmšnl¼„ašÝÝakwUƒ±aĉImlĵn@ƒm@kkVƒ¯Ñm™ĸ™°x„l™œ@˜ƒXVÞmlÛݙĉUÅ¥mwÅ¥VaUw›™XġċaVůÛŹlwU¯U™ó±™xÛV±¯¯n¯mċƒLmnĊm‚™@™_kJWaXmwUƒĉK™»™@mwX݃UDŽkKÇw™»nƒaUw±škx™K@„Wb„x™„„lVê„lÈIl`@¦ƒŽ@²X¤Wó»™KUșŽ™KkkmVmšUÈóJ@x¯Uk°›„—Iƒƒm„ōƒ¯Vƒxƒk™ŽX¼ƒÒkk±W™wƒnUºVzklVxLǚ@„ƒŽ¯UklVxސV„šJW¦nšmlLówݚ@¤ƒ„bƒ¦„V@VƒV™š±LUxVbU@Vx¯x@²n‚°xn„Wb„b"],encodeOffsets:[[103073,33295]]}},{type:"Feature",id:"5134",properties:{name:"凉山彝族自治州",cp:[101.9641,27.6746],childNum:17},geometry:{type:"Polygon",coordinates:["@@ĶóšKnw°¤ĠIXVƒ¼kź˜Ôk‚„ÈWŽÞȄÜUVšÅš°@šš‚@U¤Vbkb™ĬôLš¼ÈVlm„Llkn@l¤Ub¯L@xÆx„„°mX™mk°b„°°„²™@¥‚™Uwl¥nU@ƒVUkçVnkWċšbĢ@lÈVVk„J„‚V„aV„W@£ƒUƏxW`™£ÈVVÅlWXÛlW°b²la„@°xnÞVÜĠÞ²@l°Þ²ƒèkblŽ@xÈx@Ġènal£nU‚Dz@‚ÞK„nn¤@¼˜°U¼„nV‚šXU‚šbn™ĠUVbUlVš°LX„@lV„èÜUnK@_ƒyXVyUwmIU»Vƒ„kÇ¥šÿkkV¯m±n@ƒn¯ÜanVVƄz@Ž‚bœwÜb„m@wša@kƒmk»@™a@VUUó„w˜@nb°mš„XŽmnVbގVôanwšJ‚ak£lw„˜šLšÅnÝ@wl¥IÇӃ@U™™Lƒ¼kVǃÅó¯kVmmw@ƒn_‚Vn»°LÅ»@éÇçŹīVÇÝ@ÝğU™ƒaVݙ™š¯ķlŭġlƒ@óÞۂċ@¯nkUӄ—m±™IVġUwóKUn±¯—K›w»ƒKݐV„nl@„óxUwţ›£ĉƒUmŗÇ݃K™„ÝUlmKƒ£UVŽ@ÞȎW¦„Ò@Ĭšnny‚@nÒmœVŽ—¼@°Vbl@VlnUUwl™°a@„œ„@llnk°lbnKWĀnŽU„VxUŽ‚²Å‚m¦Û›ÇڃaU„Vbš@¦m`móX™Umm™xÅ@±Þn虲™U¯»m™ƒV—m@wƒU@wݚÝmLƒa@„™VÇUk„l°¯„VlkVƒ¦UšmxƒaULUèVx@„kIUxmWV¼¯VmȯšU„nl›È—@m»Å™ƒVWxÅbÅğW@kƒm@kVV¦mlnn@‚ō„l¦Åƙxkœ"],encodeOffsets:[[102466,28756]]}},{type:"Feature",id:"5107",properties:{name:"绵阳市",cp:[104.7327,31.8713],childNum:8},geometry:{type:"Polygon",coordinates:["@@„ńlV°š@Őĵ˜VX»ÆUĊќJ‚w„@È»m»š£°Kšk@ÇnÑÆš@„w°JUwnw@wšbVbš@VlźLUw„aƒ»„aUklyUUVakwWXwWƒUxkLƒmn¥mšwk™˜UX™lJ„w@aƒIk°X„¥Wƒ²l¥šaU™„IlmkklƒÈL@m°nlWU™aW—š@Vƒ„@UaV¥@ašk@Çk¹ƒK@a™K@kƒKkšÇX@VU@kx±V™èkIWwUVUkkKÇ@ƒa@wkml¯@kUWn£Wa„aVwnaV݃w¯@UaWx—n›JńUxUšma@L@„mbUށU±VVnkxUƙ„VŽm@kkKW°„X@¤ÇUkÆÇnU¦¯ŽkƒmLVwÅK@UóbÇÆVƒ¦™L@‚±êX¦mVޚkÜÝnWU—„›@kšƒŽ¯wķšnš°ÒU„lln@@„ĶmnkĊJ²bV„lxÞb™Þƒbk»™m™n™@™¤¯bƒz@Žl°UÒ¯È@ŽšxŤX„yV¯°¥Uwƒw²XlºVڝ¼nx›š@ށXݏmxnb@n™J@b"],encodeOffsets:[[106448,33694]]}},{type:"Feature",id:"5117",properties:{name:"达州市",cp:[107.6111,31.333],childNum:7},geometry:{type:"Polygon",coordinates:["@@Uxn°‚bnŽlUnÒÆƒnn@n‚¤„LnxlU„ššV@„Æl„x°XXxl`XœƒVW‚œL˜è—„±nÈbƒŽ°b@š²x°Kܼ°ĉ„V¦lJnU@¦šÞ‚JÞğ„mšLÞ»šxU„lb„VÆann„alŽ„VƍX@lnŎV„mU™maÅXƒa@aWmœ@‚£@wĉJVƒkk‚kkmƒnk@ƒmna@šal„Kš™‚J@Þwm‚ÅŃ@ambkUƒƒ@™™KUġKU@m‚ak¯±ƒ„a@aĉÑÅaVwšXlwƒ±—V¥l@@a™kƒ›@@£šmƒĉÝónWV@ށnÝÇÇx—UmbƒaVkkk@m„@m°ƒÝýXm›akÅīƒ@@ƒmb@@xmšnbƒ@mxšŽkWL@ƒ¯b@WUXmWœWKkbm@kx™Xmm@LUl„xlêóK™nUš„all™LƒlLó°m¯JVšU„K„„@x˜K²Āô¦l°"],encodeOffsets:[[109519,31917]]}},{type:"Feature",id:"5108",properties:{name:"广元市",cp:[105.6885,32.2284],childNum:5},geometry:{type:"Polygon",coordinates:["@@ÆL„Ċx°»Ŧ¦˜W„™šLȄ@xÞKܰÞnVxÅĀlÒnJ°a@w„V¯l@XWknKnw˜VȚ°XXa˜lX°VI°b„W„nšaššš¥@ƒw°™n@šyÆ@nkÞ@°¯lJn„°IÈl‚UšlXÅ@ķlUV¥VUUÝޙUUƒ@UwƒJUkĉm@ýƒƒlk™WUwVwWJk@VUK™lUkaVƒUƒmLk„m@ƒƒ@Uƒ›Ik`@„™UmlUkV¯ÇXKÝ_mm¯@Uƒ`kwmƒl¼±KV¯—¯Vk±Vk±kzma™KUnDZ™bk¦±ŽX„ƒ¦¯Wl„J@bƒxkIWš—Vlš™xnŽm¦„nlKVwX„WxXŽlxUbVVkzVlƒb„¼ƒbVxŹKUk™@Ua™a@xmxVx¯Iƒx™@ŎmÒ@șl¯L™¤n¼"],encodeOffsets:[[107146,33452]]}},{type:"Feature",id:"5118",properties:{name:"雅安市",cp:[102.6672,29.8938],childNum:8},geometry:{type:"Polygon",coordinates:["@@ln@xšèVInxVKn„‚ĊklxkÜVޚÒnÈm°nxš@š¼ĊLV„nx‚WXblIš`š@nmĉn‚KȄôÅlUÑmU„K²¹@ÇÅVÓůVýÞW„‚UVmX„ÆbnwšKUÿ‚™@UmmIUb¯¥Uwƒ™¯™Çmš™„çmanUm»UUƒl—kƒ¤ƒa¯bV™U_WĕmÇŚ±ĢUlƒUl™ÛVƒçkUƒ@WޝKU™VkUağVmš™aV™WUƒmV»—¯@»m£ƒmÝLŽ±@ÈmVk¤mb@ôƒ¦kVkamL@b°‚@b¯¦ÝVƒn@l„ê™b@º„UĸL°J@zV@nmUƒlaĸÔ@xƒ°VҚ„Ub„‚óĢ„ÒWškV@Ò"],encodeOffsets:[[104727,30797]]}},{type:"Feature",id:"5115",properties:{name:"宜宾市",cp:[104.6558,28.548],childNum:10},geometry:{type:"Polygon",coordinates:["@@VlÈnl‚XnWLX`m„²nV‚@b°xĢçlnšVm‚nn„@@„°‚UzšlV°nޘÒkxl„w„`UnVb„mšL@albÞKÈۚmܼ°@Xǚ@wmW@ńKĊL„lV„šLVŎçÞL²±‚ğkw@Uƒy@¹lKX™lKVa@w™™Č@‚w@a˜ÇU¯n™@@wġak—™aō‚ƒƒK@Å»VakUWmķwkbğ¥mL™akš™@ġރ°¯xVVÞ@VšxVš—VWx„XlxU‚™@k²WVŃULmèULVĊklĠ„VœJVx±nѝ¦mwğ@mƒƒlğkkl±@kšUk@¯±Ç™Kƒ—kxl¤b™Imx"],encodeOffsets:[[106099,29279]]}},{type:"Feature",id:"5111",properties:{name:"乐山市",cp:[103.5791,29.1742],childNum:9},geometry:{type:"Polygon",coordinates:["@@kšVŽk„ššÆkšV²UlºÈIlxƒLXèÜlU„„XU‚mkƒbVè„x°@„@¼°Knnn@m˜ÆIUbnJ@bVI°b°±@nK@mVakkƒKl¯nbšmĸ„èl@VnÈl‚UUw„wmwnm°¥„L„™lLnU@Va™ImbkƒmK„ƒƒnk@mƒb™ƒƒLV„JVUUƒ„VnkVmb@a¯JUaÆkk¥„IW¥„Klw—ÑmÝU¯™kVy¯@ƒƒ@mmn™Ukmġè¯w@aU±mnƒW_XKWmkÇmUkóbUÝUanmW™ƒ¯nma—@ƒxVôUV@šb@‚l¼„n@l™b@xƒnÛa›xa@ƒyUÅmUÛbm°@„m‚n²U°ll™ĀȦƒlU„V¼nJVxUz‚W„z@`mL"],encodeOffsets:[[105480,29993]]}},{type:"Feature",id:"5113",properties:{name:"南充市",cp:[106.2048,31.1517],childNum:7},geometry:{type:"Polygon",coordinates:["@@ȲVmšLnblyl²²UUl˜°U°²L‚»„knlx„_Vް@nnÞ`WL°ÈUŽVlnkšV@ƒl_œJV„‚@„„n@lƒnKV£™Çšƒ„UV¯šm„@laX˜U„‚UbVx„@VkôJU°Jn™@™‚wUk°wnUƒV_nJmknmm¯Vwk¯ó¥±ÿ—L@wƒƒƒLVU™kU›bX¯mykI@a±Kk¦ULmaXƒƒVm¯ƒK—z±ƒklUIVbÇJšƒkL¯™l™ƒU™ÿ™UƒlUkJƒUmŽUUkVVklKk@@a™U@„™J„²ƒxƒ¦kĬ@¼±ºXnWb—xƒU@xƒx@lšL@b„Llº@șl@bU¦Vbƒ@U„™@X˜‚bVškX¯m@nÇKk„llknƒJVš"],encodeOffsets:[[107989,32282]]}},{type:"Feature",id:"5119",properties:{name:"巴中市",cp:[107.0618,31.9977],childNum:4},geometry:{type:"Polygon",coordinates:["@@V„U„lbkVšŽVLUŽl@XI‚ŽUxVxšXkl„„@þĊnVl„IVx„@VVݚVÞUVU¦kV@ĸWÆô²š@VÞnš@Vaôb²W@‚K@XUmÑUW°¯°Ina@y„_lWn¼lLUbô¼„Kla@™nkUyô—Æx°@šn£™Ý@¥mVkIU¥Ċƒ‚¯Û»¯L±w@™¯a„Ça²m˜ƒ—ç›KX„UW›k_Ww¯WƒwÅk@ƒ™Uƒ™kVmwƒK£@mmmńmÑkVmamnnlmIU`V„m¯xVlx@šmš¯IV‚óIUlƒ@UwVaƒ—VW‚kbƒ@™nU°ƒV™„šÈU¤"],encodeOffsets:[[108957,32569]]}},{type:"Feature",id:"5105",properties:{name:"泸州市",cp:[105.4578,28.493],childNum:5},geometry:{type:"Polygon",coordinates:["@@VVXwVKn„˜wnVƒn„l@b¯xmKUbVn°°X°@blLšènV„@Vn‚l@U„LnmmUna„VV_ĶV@wnJ„„l@@kkKVólaUwnJm„wUlm@ašUaôKVnJWbޚ@VšwVLX¥VVš_Þ`šw„WƒÞŹmmnIn¥Wƒ@k„WV¯@ƒ°kI™ŽƒLk¼Ç@k¤±Xk˜™nmݯUlÅÛKWV¯kƒlUwkLƒÓ™@U—@ƒ‚w@ġXV„˜WX„š@UbVbšV›š_kÇV™lU°lnwŎ¦ÞaƯnmm¯šU„™m¥nkVmkƒl_ó¥¯UÇl¯@™ƒ™L™kƒ`¯ķLUy¯@mw—¼ķ°ġ_řU°mlšnÇVUޚ„@‚ƒš_ƒJUnV‚UXšbl˜Ģb@x@mšV°—È‚b@‚xċ@šš@xUbkLWškL@º„zV‚@lxĠ±²"],encodeOffsets:[[107674,29639]]}},{type:"Feature",id:"5101",properties:{name:"成都市",cp:[103.9526,30.7617],childNum:11},geometry:{type:"Polygon",coordinates:["@@°n°m²°ÜUšw²ŽôVš°ŽVkxÜźUŰČb‚ŽĢlaÈL„»ƒ@k„wVǂ@„ƒnÛÆ»È™UݰKl_„V°Uš`Vbn@VbÈLšaVU@ƨ»V™nIl™šUUa„±lIk±š@VnKmÅ@WaƒK¦™lVōškK™Ý@maXÇmw¯IU‚@kƒVƒwUmVIƒƒƒç—ÿƒU±ŽÅ@¯È@xƒK@wƒLUbÇKō@mÝ£@yóUóóUxkI@WlIUaƒbƒaŽVĀ™LmxÅaWƒUnVƒÝXUþưUÔÈÆ@±ºƒLnVVÒkóÆ"],encodeOffsets:[[105492,31534]]}},{type:"Feature",id:"5120",properties:{name:"资阳市",cp:[104.9744,30.1575],childNum:4},geometry:{type:"Polygon",coordinates:["@@„è„„UJVn„x„U@lV°JnxWÈnbÞ@šŽlLŎ™Ušk‚¥„LXbÆ@nŽmLU‚@zlbXmlnVynL„çšJVb‚UnómUnamU„an¥lKV_²aValWô„n@nƒ‚bVœK°¯VblW@kkƒlUnlV£°W@w„UXk°KVwƒmVkwVyVI@wkmƒVÅ_Umm@Uÿmbk£™xUaVw±V¼V¤kLWxU@Uk™bƒyƒXšómƒ°V@@zÝÒkKƒn™±U@@_VVkƒÇaVwnLWalm@@kkVVl™¦kIV`±n@w„Kƒƒk²™aƒVUUV¤™nkxmUkVWVnLUbVbƒ`kUU„mLU‚mX@`ÅbǚXbWLXŽ›n"],encodeOffsets:[[106695,31062]]}},{type:"Feature",id:"5104",properties:{name:"攀枝花市",cp:[101.6895,26.7133],childNum:3},geometry:{type:"Polygon",coordinates:["@@„b‚KÞnޙ@x„V@x˜n„Unš°¼šVš±mç²ÝÆ@šwnnšVWŽnôn_@¥‚™UaVƒ„bƙœÈ܎n¥Æ±VUwVƒmXÿmLkal¯km@k›ƒ@ƒ¯bkšVxmVUkk@Ua@¯˜»Un›mс@mz™m@īƒÑX¥Ç@ݙxU¦ƒšÅŽÇUkx@šlb„UWVX„mV@xĵ˱@@ޝxUšÆLnÆm„šx@nXL±lUUVwKWak@WxkbšÞƒŽĉbUn@‚ƒ@@xó¦„Ŏ"],encodeOffsets:[[103602,27816]]}},{type:"Feature",id:"5114",properties:{name:"眉山市",cp:[103.8098,30.0146],childNum:6},geometry:{type:"Polygon",coordinates:["@@„šVx°¦VanJVnš@„b„aVbkJ@XlJVwôôôV@zÞ¤@nƎÈLVa„K@x„L@w°ÇÆ@²„V˜ĀœmWXKWașÆa@_nWVnKVƒlV„_UaVamKXUWwnmmwœÑm£@ynUƒkWƒĉUkWVkkV±çkJmkKƒšƒK¯¦mnnxƒxVxVÇkUmk@ƒçķ™nmak°„LllUb@nmL@‚¯²¯aUJ@amIVaÅJn—m@mm¯L@»ƒŽ¯@ƒwUç„anlVƒWVƒÛkWç„KkwÇJk¹±V™UÅl™™ġV™²ÈƂnXĖV`Uš°a„b„£˜l„kVVn¼mVnbƒè™šÈn°š"],encodeOffsets:[[105683,30685]]}},{type:"Feature",id:"5116",properties:{name:"广安市",cp:[106.6333,30.4376],childNum:5},geometry:{type:"Polygon",coordinates:["@@„VlIV‚„kšVšĀ„Vkš°šlK™„ÈIUaVJlk²„˜y„Ln°„UW„nbVKl¥²L@blJnzW°œalV°Inô¯‚K„kšKkkƒbV™šmôLkéƒwVk@KnnšWlwn@laXL›ŽnXVW@X°a@„XKl™nw„@man™@w‚@na@„„@ƒw™ĕġġ™wUkUWb@mk@™¦ƒ¥mUÛb±yÅn@bml@kV@„ƒlknVbmVnlmš—bÇk¯bWyk@V_UamJ@I—@WaƒVXamIVWkUkbVaƒUUxƒ@VnkVU¼›bkKUxmK™„@WšƒxnV@n"],encodeOffsets:[[108518,31208]]}},{type:"Feature",id:"5106",properties:{name:"德阳市",cp:[104.48,31.1133],childNum:6},geometry:{type:"Polygon",coordinates:["@@nUW¥²é@šK„¥‚UÈÅôa@VÆLUxnKl„°V¥ÈmlÅÈV@£ƒWX¯lLln@UšƒVÅlwUm²U‚VVna@ƒ@KnbV™VwƃœI˜mXwWƒkIVwÝĕVUa™IƒèmKUzkmWnka@y™@l²kJƒ²Vb™VkšmJUšƧ¼@UV™bÇKUam@Ua™_¯VƒUk`¯LVÞǚżm܃„@Uȃx@l„ƒ¼ÇKkbWŽœšVxUbƦnxƦĊV"],encodeOffsets:[[106594,32457]]}},{type:"Feature",id:"5110",properties:{name:"内江市",cp:[104.8535,29.6136],childNum:4},geometry:{type:"Polygon",coordinates:["@@²èlUUllXĊVX„„lmV@zn¤›ÒnxmnXxlUnVlwšmU£VV„Ušbl±„„ƒL@x²mU_lJš¥UklU@ln@‚kXbmKUxÈbl„UU@`V@š²„mlLÞÑ@yU@„¯ôn‚™„W„zšaVlV@XwlKU£‚»—aVaUwm@mwUVUwkƒlVDzLlƒ„KV™m_@ykUmƒ@mU™çkKmxkIU‚Ý„@LUJ@n±„kº‚LXb™¼@mmIXa™@mamnkW™ƒKUƒƒxƒ_U`UklwUw™mUbƒV™²ƒakbƒmkn@`„UmҙšVxUb™I™`UƒaÝÈ"],encodeOffsets:[[106774,30342]]}},{type:"Feature",id:"5109",properties:{name:"遂宁市",cp:[105.5347,30.6683],childNum:4},geometry:{type:"Polygon",coordinates:["@@ÞĖUxlJX„Vb°@„xUÞmbUxƒbXbm¤VX@lk°ln@x„bÈ@lLVlVUXxlJšç²UlwV@@UÈWl™„L„w@w„V˜wXaWm²¹@»lī„¥„wƒ±šI@ƒšV@bl@kLUllUVVn@mmU„wX™ċbVb@VUkbmamšW@kƒa@™™k@ƒlaUa™@¯b@šmmwó@@lkXUa¯°›LU‚am„m@óƒkXUb±bU`kLm¦ƒbnVmbnVmô"],encodeOffsets:[[107595,31270]]}},{type:"Feature",id:"5103",properties:{name:"自贡市",cp:[104.6667,29.2786],childNum:3},geometry:{type:"Polygon",coordinates:["@@lIÞDŽbVŽš_šJVaUwš™nуV@_lm„nla„bš±„UVašnVxkxVlV_„`„wV„„LšlXnmnbš@WbnJ@nš»WaKl¹²ƒ@mVI@KރVlJnw@aW¯¯¯UmVanL°w@aƒk„mmU—xmƒULWxUUÝKōèU™KUƒƒkĉKƒL@ÆnX@x™‚Wȯ@Û»™nÇÜÝLka@b™KƒnUaVmƒ_ƒxkƒLX¦ƒJl¦ÅlVb°I@bnaUŽmlƒUV„UVƒIUŽ„Kš„„a@nml„„ƒŽnLl„našJUbV@"],encodeOffsets:[[106752,30347]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/tai_wan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"7100",properties:{name:"台湾",cp:[121.0295,23.6082],childNum:1},geometry:{type:"Polygon",coordinates:["@@\\sŽ@pS}aekgKSu™SsMß`¡CqZ·be@Q^o@‹gieMp‹‰]}•}Ľc_Kk…{™ù“A¡r‰[uom@эĥJiq©mʼnq¯Bq]ÙYgSåk_gwU­isTE…“‘ĕiqiUEkue_‰OSsZ‹aWKo¡­q“ycY£w}‹ĩ™ĕS§Z©S™N¥SyLÑ¡±Ks^IY‰PdƒY[Uo†Fp}´\\¬\\j]ˆe܍ò‹¤¡–ā a\\bn™U㺹Ìs¼j®[cíȈEŽĝĆ`ļf¶Š®K|VØDdKGpVnU‚FjpH—F`†B’[pMºxÖjbpÎxp€¬‚|ΟÜÒCв®‚ÜAp„ZG~€Šd˜ÞàV¨|¸€`|Œ²tx~\\~|dFf^zG€ĄŚhœdL\\hĸž¼†ŠOªP®lV`p\\]Xpll˜æ¤œCpQ|oF}fMRi†NSon_²qämœM„NM‹\\•"],encodeOffsets:[[124853,25650]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/tian_jin_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"120225",properties:{name:"蓟县",cp:[117.4672,40.004],childNum:1},geometry:{type:"Polygon",coordinates:["@@EUDAEI@WNMNCBFAHFFNACDJDPBD@@GD@DIFFHEFGDBDEQOFG@EI_KG@OcJQM]RMEKBGPG@[LaCIICBWKCEEG@WBQHCDFD@HSLEJI@IHWECFGAAEKCGDBFCBSBIDCKKHEADMJMFABKOKEQAA@IEEG@GIQAEK@OZEESMOL“lu@SLUTYFQCMG@@SQUAYKAACA@IB@BDB@B@DC@@BGAEFAA@BEGKJCC@AGAIHA@@JC@QEIP@@A@EGIDC@O@C@@@@CJCWKABFLBBEBSQGBAAMIEM@AKBcJEN@BEBCFMAEFEF@J@BG@BFABECKFG@AFQ@@F@BEB@@A@@AAAKAE@GFGDECEFEECBKIKDELDFEDYH@EIACDCHKBEB@BAAC@ADBHABKJIAIJICEDGDCD@@A@A@DHCHJHDFEFGBKRKBGIK@GIMHSBCH_BOJECCJCFKKMD@DNJEDEGC@OJCJHRUL@HRJ@H[DCNKDZHCTFDHCFFKR`TANVDFZRDLFARB@HPAPG`ILAR@TERNDFNHDLCLDDCXDYbHF@FEB@LDDVE@JPNfXPINCVDJJD@NJPAJHLXHDNANHhB@DPNLRMTBFRBHHr@`NBFEBOCCBIAQJDHCHLHFA@HSDCRLFTB@HEFLNF@PELBDJALFLTC@EPFLLP@tUHQJDfIHGTB^JTCPDLKAIBATFPADIEGECEMJ@JIAIHGECFEAGDI\\SPOXAFCL@BQTQBBTMZECYGAHA@GJAE@HCAEME@IECFKJADDBABLTHHG@ILEAMNDJCDHEBF@@JNFJELDFKTOT@JETBFFHBHEHKI@@IJEJ@XKEOUMS@AF@CEB"],encodeOffsets:[[120575,41009]]}},{type:"Feature",id:"120114",properties:{name:"武清区",cp:[117.0621,39.4121],childNum:1},geometry:{type:"Polygon",coordinates:["@@FWôµ@IFCLIB@EHNBp]AGEAKAEDMGZKFGBGME@ILGP@HEFB@BXMEAHUGC@IHCLOD@X[NWHWPKAEF[@EKIOL@EKGBNMJ@EIEHKBIC@BAKMIACCFQZCF]DB@ERAKADIHGEIBCGIIECFaGLZO@EFCNGAGDGAKL@BMG@IE@ADSDEH[JGC@CGA@BMDeK@EIACFE@@GG@FIAMM@CCGC@EM@ADE@CFMAAGHBDKIEAJG@DOGCDEKAGIS@KFCHKAEHIE]BeKNO[IFIOELC@A]GMBKVYCDDgGAICARc@MW@AQE@DGI@@AQ@@BKBAIQQYEFW@CEADIGGBCEIiMEMF_LGEKMBBDWEBGRC@E_CHYGCH_IAED@FFBQh@FGJaJ}AHRAREF@bE\\C@CT`FHC@\\BBF@BID@HGDDJ@@FAHKBARECKDAZBJIVNHCTA@EREAMLHDAFFBVFFC@RNRETHD@FOJMACH@CAB@P@DF@@FGDWE@FFSIEMKQDYCCHKb^JADOCIDGNDBdBCFJB@EC\\A@BJEA@JAAAD@HHD@LFBCFF@BERDHNhZQHMBGHOACCEBWEGD@PSJKCGEUD@CINLFGHE@AJK@HDABBHTB@F`DBFLBBHEDARCFG@ABJBAPVFE^FBGLGCFG_BMLEXGAAFE@@JNRVJHFALFBEHQJCTbNDHCF@PlFLJSXCHFHfVBTNJ\\BPJXC^FAVNFCHFB@FFH@JF@\\ABCFD\\BDMCAAJKQBGAILOEGHILECQLWFENJHADC@QxNHFJNLDFA@CBA@D˜UÂmR@FBL@BD"],encodeOffsets:[[119959,40574]]}},{type:"Feature",id:"120115",properties:{name:"宝坻区",cp:[117.4274,39.5913],childNum:1},geometry:{type:"Polygon",coordinates:["@@TZbB@JHD@DODCLM@AP@LL@BNH@ETFN@`E@DNG@CHLBCJA@AICFKDDBKA@\\N@AFNAGRBFjFFFL@DHLBLFQPcXAZMJ]GAVHAIZJFNE@JpDRRDCLFDGXA@EFF@CFFPDfEBDB@DCHCFCJDJIJBLI@I@CB@@ADBB@FALADGDC@@H@BB@FZGFCCE@@FMLALJDAFFFEFDFCB@@AHCF@L@@BBB@BB@FC@E@@R@BEL@HEFD@G@AH@AIB@@@FEFEBALDDEFAFO^IF@JCBBFPNJJ@D@PRDCEKBAXL@BIFD@T@JE@BHHJORFDI@@B@JGH@@B@BDDLIFFHCD@D@DEE@BAAAB@DAF@B@H@NGLJLMRDNMfGIEPMI@GDAKK@KIDIJ@GE@CFDN@FE@GFEPGV@TCDFKHBBF@RW@DD@@ID@TJFKIKLI@EP@IGBCLAEKLEN@KSHIGYACSD@SEAMBBMGEBMQBCMIGKFB[D@HDLPHDBC@IFITDLG@IIIFGVBNJDLN@VIRI@YIAIHIC@CLKZCBEE@JECEIHEAKGDGECBGEEM@@DA@CCCBBEGA[GEDBBoNAAH]MKiIAWKQoIIPMFQAEEDMH@FMSUYIeF@EK@BIOEKJEBICFKaKPFAFSE@LWCCFMHDDEKESBOGBKIEIODLG@CCDEQCEDWEMDIEIB@EHGEEDAEAa@@HqDEJGF[AECCFa@WCEIKAAEQB@FCAE^YDERDDJBLNABD@AJGLJF@FNIAMLH@FPKLJ@FE\\BFOLGXMXW\\C@KPGD@JHDGVFBWN@AEAGFO@KH@JNFAHEHYLNHFCLBFBBHo^MAFGA@KJED@Jó¶EX"],encodeOffsets:[[119959,40574]]}},{type:"Feature",id:"120223",properties:{name:"静海县",cp:[116.9824,38.8312],childNum:1},geometry:{type:"Polygon",coordinates:["@@NGFMDATCNDR@CCbINEHNJA@C\\EEGVE@IhE–[˜w”epc¢·²›^QEKIEKIgiQDkehY£uSDBMkUDOJDHC@GF@CAFBFEN@C‹Q@BeP@@G@HD@@MHQKi@[IGCOCESE@GMA_OcCGDu`aˆ@VZzKDkJBLNXGDqKEWE@cFEFA@ƒISIi@@KMABJGBcMuFEzGVH\\ATSEUBeALCEMG@CEBUHUCGXaBPtUBBFIBFTDFF@DDKBFNGBJPHXDDMDCLJ^mBIHIL@LR\\@LCR[@@z@NFD@LLBNb@RHDBNTPT\\F@BJF@BXCFBHHBDLFB@HODADE@@JHVXCPDHCFTLBBFNCDCCCU@@GAABEHHZHBCAEdEjFDD@GfD@DXFCHF@ERFDLBH@"],encodeOffsets:[[119688,40010]]}},{type:"Feature",id:"120221",properties:{name:"宁河县",cp:[117.6801,39.3853],childNum:1},geometry:{type:"Polygon",coordinates:["@@BFLBFJXDb@DEFD\\BHEFIrC@Gb@FBCBFFGH@FJAJFNCXFFCRDCFDDH@CKJPJFALPHTALFCFGCENDDKXF@ETEBO‚bLELJDFALIPFAJL@@FfEZJTVENG@CNFFRBNEJOpJLRBXjJNLG^BBpMAAFC\\HHBAFDADDB@@CN@FFAHFDCHLHFBJGFCFUNKJJTD\\XUXF\\^F@DDDQXXBRLRCBDFEVCDLVDpUl@LEDJHAPRFGL@CETGPBTCDDVI@CFF@GFDCCVGLKEK[Y@MECISG@BKNSCGCKWEAaEBEKNGFSECO@GGM@GYI@DÅCMLHPTF@DJHAVVNKEGDETJ^[TJNNd@NOAMFYJ@@GFANDPEJB^aOadSTQSI@MHBDIEOKCG@EEFCKCqXO@@DMFENCDDHCCGJ]AKFoDaGGHYFDHKJiCMFGC@EQ@AEHGAC@IEAATKOHGIC@IXIFEoƒGE[JCFCDHNmRADFZMF[EEBMO{GU@AOW@@]ZeHBDEHBKEfQkuIWBs‡@EC@d[@[^EDMTKCEEcI@cDAB@FCBCACmOCG{PYHeBgPwPFDDALFFFCHQGSD@BHFAR[TaFYXMASUiGFL@DQNCJI@@D@PLDN`ETEFIGMCGBCE‘~CAIFDPEHGEQPHJADFJGHCJLB"],encodeOffsets:[[120145,40295]]}},{type:"Feature",id:"120109",properties:{name:"大港区",cp:[117.3875,38.757],childNum:1},geometry:{type:"Polygon",coordinates:["@@JFFL°_`ONJKDDFIFZN xlb~yFVNRŒrdJGzDPVFBCTNND\\UR@E`F@@Ip@IWGUoawOEE@ÏDgK{İEEMFëC—b…™@—KwOCDHHKBDJCDEEEAGHOABFABMCgDLSQ@CFEB‰MgYIDQINE@AUSwSAdYEHQMEyK[KI@GRMLE@@OqOoBOnpJ@BmEAFHL^FDB[C@BBDVFAHFJENB@sNEjQAMYsUgCSBGDJH@\\LjGR@NC@@G@HO@AfR@DŒM@EFEADBE@@HGDICCPlVANTC¤vgZlfRChjLJ"],encodeOffsets:[[120065,39771]]}},{type:"Feature",id:"120107",properties:{name:"塘沽区",cp:[117.6801,38.9987],childNum:1},geometry:{type:"Polygon",coordinates:["@@|ODHnPBDADEDA@CB@ddJFFLDNSFC\\]\\@@cFDˆ@nACOMW@M@ITURBRZNHNWRQšoO•j½f‡cqŸAqeiDÿÍyÓįFL|Ch@ÐFFxPpbHVJXo@@JCTR^BPABQA]^MB@bE@@FQBFVJRH@FXtPNZSBAja@@NƒDTŽLJrQTHFXZFB`"],encodeOffsets:[[120391,40118]]}},{type:"Feature",id:"120111",properties:{name:"西青区",cp:[117.1829,39.0022],childNum:1},geometry:{type:"Polygon",coordinates:["@@@LHAHRHATh`LHNHDG`HDGZ`D@FQDAHXFACNAFLVRTBFOfHDCVBFQH@HSXHEPFB@LDBF[bDbLFKJBFLADBDjLvCPEI]FGEIGCBEUSjcFiBIVWfaHCjN^HtwBBFGPBJGjFBEGECGDONMFAP]TDHQOWCMGAMHKIJEIGQ]aDlUG]VGEGDC„{PEbBZmE@@GH@BCA@FMQCFMYMJECELCMI_P¯`]R±œ¡¸od“f—x•\\gF@JUFFH[F@DIBGMMFaJDDQ@MCSDCBENMH"],encodeOffsets:[[119688,40010]]}},{type:"Feature",id:"120113",properties:{name:"北辰区",cp:[117.1761,39.2548],childNum:1},geometry:{type:"Polygon",coordinates:["@@ROHFFGCOJEDB’}DFHANDJHFEFSM_KC@O@CJ@DIRM@CEKKA…L…FKACHoLSJSIBETDJaEIIE]E]K[MYUYQILC@GF[MGNKEK@A@BCWECAIFEFYAGFOMI[OFuDiKACBCEKIAELaKaCE\\CA@KEAFOWGGTG@ERUACDeGEPSAUQKHE`FNjNFJADHHCJFB@DEXZFRRBJLA@AR@@BJ@CHF@BRX@@NQdDBBJhHCCZDLUNA^H@BKDPFEJ\\JMPfL^AJFFGLBDGLET@HJLBCFHDCPH@BIJFCLGABHNBDEF@BCN@@FHDDDN@BNEJH@@HF@DEJB@FfLNC@AHB@DHD\\IFGTCBCF@@JNH@ALKHBHCHBDMFEP@KYbHDEJF"],encodeOffsets:[[120139,40273]]}},{type:"Feature",id:"120110",properties:{name:"东丽区",cp:[117.4013,39.1223],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZV\\N^L^FJFFJIbSCAFTJTIpKDGLB†E†KLBjHTVNBZWbE\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKIS„C@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJF‡PIhBD\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^"],encodeOffsets:[[120048,40134]]}},{type:"Feature",id:"120108",properties:{name:"汉沽区",cp:[117.8888,39.2191],childNum:1},geometry:{type:"Polygon",coordinates:["@@LMEI\\MTABKN@FCDMH@COAcH[AoēA™M¡Wa[Meq™pQRMXMGQYQASV@J@NNXDPmBAtJXlveRLFGACFGAYf@^X@BPV@|HNPFA\\FNEEYBCnQGMDCDE\\IHFp„EFWJ@JJDGHLPBSFB@JBDGHBFR@@FHDNEjDLICGZEHGbHpCLE^BHIDDCGDCFMNE@CP@rWLDEDFFH@"],encodeOffsets:[[120859,40235]]}},{type:"Feature",id:"120112",properties:{name:"津南区",cp:[117.3958,38.9603],childNum:1},geometry:{type:"Polygon",coordinates:["@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycI‹qMQEU}zkaŸwENRDENB@ADG@@HF@YnaAOFƒ|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH"],encodeOffsets:[[120045,39982]]}},{type:"Feature",id:"120103",properties:{name:"河西区",cp:[117.2365,39.0804],childNum:1},geometry:{type:"Polygon",coordinates:["@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt"],encodeOffsets:[[119992,40041]]}},{type:"Feature",id:"120102",properties:{name:"河东区",cp:[117.2571,39.1209],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZBVFFIGABEEA@KXBDOFM[EACJgˆOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN"],encodeOffsets:[[120063,40098]]}},{type:"Feature",id:"120104",properties:{name:"南开区",cp:[117.1527,39.1065],childNum:1},geometry:{type:"Polygon",coordinates:["@@NMVDCG\\E^B@HlB@YEDS@C…HsNSiMGDebUXAJEjidVTAFHDFJ"],encodeOffsets:[[119940,40093]]}},{type:"Feature",id:"120105",properties:{name:"河北区",cp:[117.2145,39.1615],childNum:1},geometry:{type:"Polygon",coordinates:["@@DBXFADB@L@LFHM\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF"],encodeOffsets:[[119980,40125]]}},{type:"Feature",id:"120106",properties:{name:"红桥区",cp:[117.1596,39.1663],childNum:1},geometry:{type:"Polygon",coordinates:["@@J\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^"],encodeOffsets:[[119942,40112]]}},{type:"Feature",id:"120101",properties:{name:"和平区",cp:[117.2008,39.1189],childNum:1},geometry:{type:"Polygon",coordinates:["@@D†T@FCHG\\FFOROMEgYc@"],encodeOffsets:[[119992,40041]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/world_geo",[],function(){return{type:"FeatureCollection",offset:{x:170,y:90},features:[{type:"Feature",id:"AFG",properties:{name:"Afghanistan"},geometry:{type:"Polygon",coordinates:["@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾njƀ̚ІɣʪҴMوǯʲĹ،˒˰Nj˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ–͑ɳ̡ߛ€ͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ‡܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ"],encodeOffsets:[[62680,36506]]}},{type:"Feature",id:"AGO",properties:{name:"Angola"},geometry:{type:"MultiPolygon",coordinates:[["@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽ໳΁᎝Š׋Ж₭—ŵÏԃϞկ~ԉƝЙDžÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒg̎ĸៜ["],["@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ"]],encodeOffsets:[[[16719,-6018]],[[12736,-5820]]]}},{type:"Feature",id:"ALB",properties:{name:"Albania"},geometry:{type:"Polygon",coordinates:["@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂"],encodeOffsets:[[21085,42860]]}},{type:"Feature",id:"ARE",properties:{name:"United Arab Emirates"},geometry:{type:"Polygon",coordinates:["@@Ƭ¤ŒɱڂƂ۞uԖ{ֺ֪ظՠՎԮdž˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝDZᡋъ͏࡚Ț"],encodeOffsets:[[52818,24828]]}},{type:"Feature",id:"ARG",properties:{name:"Argentina"},geometry:{type:"MultiPolygon",coordinates:[["@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп"],["@@Ӵ؇͠ڰॠ“ƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢ƎݐжLjфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξDŽę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ"]],encodeOffsets:[[[-67072,-56524]],[[-66524,-22605]]]}},{type:"Feature",id:"ARM",properties:{name:"Armenia"},geometry:{type:"Polygon",coordinates:["@@୞ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏl׋̣}΃ӢHżχCʝɤǩuͧʖرȼĄФƛ̒"],encodeOffsets:[[44629,42079]]}},{type:"Feature",id:"ATF",properties:{name:"French Southern and Antarctic Lands"},geometry:{type:"Polygon",coordinates:["@@ը˃ߐĿˆDžɽϣಇÃq҂ŮΎÊǢ"],encodeOffsets:[[70590,-49792]]}},{type:"Feature",id:"AUS",properties:{name:"Australia"},geometry:{type:"MultiPolygon",coordinates:[["@@ߺ́ҜŘپNJԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫ€ԭܘŗֈӝܸtϬռõ"],["@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػʼnׁªˇӕ̇व‰ޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗljѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕœуʁЗˋؕ֛Bࢽ՜ҋDŽlӖкŘƚȒ‡̠ĺאģӼѻࡖƏӒ˜ӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐœͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿDZҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠNJϬеɡ͉҇ͻ˿ƒĮͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنLjǠŽˬȮѾdžҦtʈ̸̾ʂЩÎՃȾķ˜Λ̨ёÚӇ‡̥"]],encodeOffsets:[[[148888,-41771]],[[147008,-14093]]]}},{type:"Feature",id:"AUT",properties:{name:"Austria"},geometry:{type:"Polygon",coordinates:["@@Û΃ӁCǎǻ˧էLJƗܽsщȏۛÞயɐȉ̊ࠧƣĭDžԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ•׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅"],encodeOffsets:[[17388,49279]]}},{type:"Feature",id:"AZE",properties:{name:"Azerbaijan"},geometry:{type:"MultiPolygon",coordinates:[["@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv"],["@@ϊËƞɈԈͺѴѵђ׭ϺŸʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘIJбҔɔŚʀ…׀ԙ"]],encodeOffsets:[[[46083,40694]],[[48511,42210]]]}},{type:"Feature",id:"BDI",properties:{name:"Burundi"},geometry:{type:"Polygon",coordinates:["@@Á০ɃϢԜßʲӎҀŸͧǸȏT˗ȹǭ͛ѫ̧̥΍Ÿ"],encodeOffsets:[[30045,-4607]]}},{type:"Feature",id:"BEL",properties:{name:"Belgium"},geometry:{type:"Polygon",coordinates:["@@؜áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ"],encodeOffsets:[[3395,52579]]}},{type:"Feature",id:"BEN",properties:{name:"Benin"},geometry:{type:"Polygon",coordinates:["@@ۛįȹ׆žኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉt՗µണ"],encodeOffsets:[[2757,6410]]}},{type:"Feature",id:"BFA",properties:{name:"Burkina Faso"},geometry:{type:"Polygon",coordinates:["@@ֹɐϽ‹̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖdžˀ޼ΒҦŢɀLJՠJáСŔϣӀչ€НॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم"],encodeOffsets:[[-2895,9874]]}},{type:"Feature",id:"BGD",properties:{name:"Bangladesh"},geometry:{type:"Polygon",coordinates:["@@i׽̉ŶÆگʉѬµєDžКΕӨޟ’ü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯"],encodeOffsets:[[94897,22571]]}},{type:"Feature",id:"BGR",properties:{name:"Bulgaria"},geometry:{type:"Polygon",coordinates:["@@ʎΉ͚Ö٦ſ௾«иɌবȜ̩ؒӴĕѥΏ̫׹˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ"],encodeOffsets:[[23201,45297]]}},{type:"Feature",id:"BHS",properties:{name:"The Bahamas"},geometry:{type:"MultiPolygon",coordinates:[["@@ȵ£ɇӜ̿ʐǾՔʨ‘ۣ̎Jӥ"],["@@ࣷƅÏ̴Ђäֈ{~ɕ"],["@@ƟׯƷņ`ѮϓͪCĪڐϗ"]],encodeOffsets:[[[-79395,24330]],[[-79687,27218]],[[-78848,27229]]]}},{type:"Feature",id:"BIH",properties:{name:"Bosnia and Herzegovina"},geometry:{type:"Polygon",coordinates:["@@̦FȿσМ͓ūЃȡ™ƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ׈\\Ϟȅ"],encodeOffsets:[[19462,45937]]}},{type:"Feature",id:"BLR",properties:{name:"Belarus"},geometry:{type:"Polygon",coordinates:["@@߼Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳˆljÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌™ϊ"],encodeOffsets:[[24048,55207]]}},{type:"Feature",id:"BLZ",properties:{name:"Belize"},geometry:{type:"Polygon",coordinates:["@@OŮĸžƴı̞ԔDŽZHūDŽGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ"],encodeOffsets:[[-91282,18236]]}},{type:"Feature",id:"BMU",properties:{name:"Bermuda"},geometry:{type:"Polygon",coordinates:["@@OEMA]NOGNG\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC"],encodeOffsets:[[-66334,33083]]}},{type:"Feature",id:"BOL",properties:{name:"Bolivia"},geometry:{type:"Polygon",coordinates:["@@य़”͟گӳ؈વȲ۫ݹ؅ŗ͡୆ҋऺˆ߾ѳ΢ŏ؆ЫֲՌ࣢αۺȖ˰ƭ̶͠рh܎¤נǸ˶ܩഠزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟšӟǐʕZγʓa͒এྖ“ūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶ޳јޭ^ัʓЕ݋sҋͥ৕ƉǸ"],encodeOffsets:[[-64354,-22563]]}},{type:"Feature",id:"BRA",properties:{name:"Brazil"},geometry:{type:"Polygon",coordinates:["@@૮ନॆࠄ֠΂ۼҪjڤуӞеLJǒӜŖӼBҦ̡ƴ̿Ƌ̻œį͔ýޔƿʤ֥ɪ΃ǏࢱLjÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ”͑ঐʔbYδǏʖ™ӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶DzΰұԞΓݴɜƶA΢ԖʎċҔɊ̈Ôϼ०ֲێNJŔŴݴŸϚᘰpθſӔύ̬LؐӀƒǚē†͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆnjʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ’֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪšȜȗʼnσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥Ģǒˆ˜ϠƦ˚ɢҬíȲŠҚçøǢƗǘĎʐͺõЈĒӔDZξǥʺɪȊ•ŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤ƁŠࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴŽఔ۝੸व٪ʏܖ‘̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę"], encodeOffsets:[[-59008,-30941]]}},{type:"Feature",id:"BRN",properties:{name:"Brunei"},geometry:{type:"Polygon",coordinates:["@@ͬ̾܎Ң›Я·՛Б€ǭ˹ϥѦ"],encodeOffsets:[[116945,4635]]}},{type:"Feature",id:"BTN",properties:{name:"Bhutan"},geometry:{type:"Polygon",coordinates:["@@΂ˍÏԩۇ{ۿÈՇſޅ͊kǚ֌زҒɈ׸șѺqπɥ"],encodeOffsets:[[93898,28439]]}},{type:"Feature",id:"BWA",properties:{name:"Botswana"},geometry:{type:"Polygon",coordinates:["@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝ஑أݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑ׻đȇ̐üԠӽߚɧŲAរࠤˆ|Ჾش„ಖ͎̎΍՜ͤʮDӂȎưÙ͔ڣ"],encodeOffsets:[[26265,-18980]]}},{type:"Feature",id:"CAF",properties:{name:"Central African Republic"},geometry:{type:"Polygon",coordinates:["@@ۜÚƺɎƔgȾȏ੔͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿF΃ƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧDzधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩Ƙԅѻѯޱėʐ›Ϧϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜"],encodeOffsets:[[15647,7601]]}},{type:"Feature",id:"CAN",properties:{name:"Canada"},geometry:{type:"MultiPolygon",coordinates:[["@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С"],["@@Хcઝ˂ޯІ̄î૆Ɂ࡮Η|Ʒ"],["@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ"],["@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝ‹փǂǾیɻńইܯԅ†צЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶™Njɫ҅Չ"],["@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ"],["@@͡ѳχîəʢ Î͖ʦΆkɈǣ"],["@@ঝҧץnǿɪزϲ଼SiǍ"],["@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å"],["@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ"],["@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦDžԠ͍"],["@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উంƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁ࠯ͽय؁ٓ֍܆ฤ۞഍ƒणĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ€¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻʼnࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ৭؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘIJܒƦࣆԋࣴьࡩΦժ˼৾žڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ"],["@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈ›રƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬Nj"],["@@݉ևಹך˸Ş૸’ٔȁ"],["@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ˜̠ИÈነěชң"],["@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի"],["@@৊ǯຄńɖʑ޷Е౜αƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռসР"],["@@࣓عय़ŒԽ݆`кѮΨ࠰ɮც‡ྈȱళݟ৉Ǎ"],["@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν"],["@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ"],["@@ٞϵ€љϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ"],["@@̙͢ݠƘࢢ™ƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ij୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ"],["@@ढ˓ကFܨˡȑ́८ȍՔȧଊ™௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ"],["@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ"],["@@ϣy༽Âɡɼၜ]מƻĵĩ"],["@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ"],["@@৽ǏඉBbŤࡴʦҌદǝ"],["@@కǥۃȚέ͂áΎજ‘ӪÅ৐̇ɫ̣"],["@@͜Ε൏Ĥ൩˘ሏŒߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ"],["@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև"],["@@ᖢßᅮŅ໤ɫ™ɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹLjڼ͘๰Ȩʄ̊஋͠ΥѠᘞ—ڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దLjঘ‚࿲ƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲ–Ҁĝ᝚ƚᆔÁᆒÁ"]],encodeOffsets:[[[-65192,47668]],[[-63289,50284]],[[-126474,49675]],[[-57481,51904]],[[-135895,55337]],[[-81168,63651]],[[-83863,64216]],[[-87205,67234]],[[-77686,68761]],[[-97943,70767]],[[-92720,71166]],[[-116907,74877]],[[-107008,75183]],[[-78172,74858]],[[-88639,74914]],[[-102764,75617]],[[-95433,74519]],[[-123351,73097]],[[-95859,76780]],[[-100864,78562]],[[-110808,78031]],[[-96956,78949]],[[-118987,79509]],[[-96092,79381]],[[-112831,79562]],[[-112295,80489]],[[-98130,79931]],[[-102461,80205]],[[-89108,81572]],[[-70144,85101]]]}},{type:"Feature",id:"CHE",properties:{name:"Switzerland"},geometry:{type:"Polygon",coordinates:["@@ƫŹȳϞƵіwá΅χƙةŀǻ͹ЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞ܎MǦǼ࣒ʱ"],encodeOffsets:[[9825,48666]]}},{type:"Feature",id:"CHL",properties:{name:"Chile"},geometry:{type:"MultiPolygon",coordinates:[["@@Bም࣒@Ԓw˧ͻܛʻЭ‚ӻä؏ʨ࢟ŨੑҸ࡫Ҏୃशۘǭ୼֗૜̟ѢϬ˘ֺޠΎװı"],["@@͢୅؆ŘĺɁ˿ࢍࣵг€ඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚ৿ͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫૗ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣Ɖ޹Σoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒Ņ෤Φ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿ਻ՉŠ˂ல˺༒ϮָʍࠎéूΠ„Ԩപ׈എΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩ஄ќɌɦњЬֱŐ؅ѴΡ˅߽Ҍह"]],encodeOffsets:[[[-70281,-53899]],[[-69857,-22010]]]}},{type:"Feature",id:"CHN",properties:{name:"China"},geometry:{type:"MultiPolygon",coordinates:[["@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ","@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ"],["@@ฬˍ঺ׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽ः֡ࠇ৵ƪܝ̑ɜܙť঳ѕwLяթӺͯһಙαƀѹܩŒЍ˂ֽ׭ऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉ׏ԫթ࠙¡ѓϻѸ֩یƏ„ϕڔʕस׶ݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏ΀ƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮ”ۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷ՗އسڳĿοɦѹr׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾ő‚іͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎˆ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંIJͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒnჄȉ૤Ŝࠦůఔԛ৮BόʽঐҌബ̈ాŒঘ̒׾҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ౲͚؞֊נʆ௠ŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو৚̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲ૜vసʡ݈̱԰ࡏ̀α̊ԩ̶ࠕ"]],encodeOffsets:[[[124701,24980],[112988,19127]],[[130722,50955]]]}},{type:"Feature",id:"CIV",properties:{name:"Ivory Coast"},geometry:{type:"Polygon",coordinates:["@@ϣUוǒ՟Wহƥ׍ʍ̯ࠫNjvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝnjĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾŒֺɏɠ஡Ο۷ɕेθܣ›ͧ"],encodeOffsets:[[-2924,5115]]}},{type:"Feature",id:"CMR",properties:{name:"Cameroon"},geometry:{type:"Polygon",coordinates:["@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךDzȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰ‚ˌʂ¶ͮ՟Ê֏‹֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓œϥĘʏÓґڛȤڷɜ੗"],encodeOffsets:[[13390,2322]]}},{type:"Feature",id:"COD",properties:{name:"Democratic Republic of the Congo"},geometry:{type:"Polygon",coordinates:["@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍Oهʍɹ‹ԃŗÝýҟɄϡÂ৥ưޝċѧǘӣӤҹҒ੕ͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕG­ƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\̍ķʑh΋œşʼɊʀμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆːƒ۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨDZ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶDzȦΫ݊֏"],encodeOffsets:[[31574,3594]]}},{type:"Feature",id:"COG",properties:{name:"Republic of the Congo"},geometry:{type:"Polygon",coordinates:["@@̿˾ʩƗͻγۏࢸٖҪ̓֌˾ɂ֦ĺäό҆Зݐ•ʴЈł֒ĝڀЉӺζ঄ȽǘسçɻѢÔξ੘ڸɛڜȣÔҒѰ޲ԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅ„ۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ"],encodeOffsets:[[13308,-4895]]}},{type:"Feature",id:"COL",properties:{name:"Colombia"},geometry:{type:"Polygon",coordinates:["@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ڛтȢ̦иÊΞՆ͐Ѵ̳ȦDŽӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ij̵ˆǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟ†ȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē…͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā"],encodeOffsets:[[-77182,-155]]}},{type:"Feature",id:"CRI",properties:{name:"Costa Rica"},geometry:{type:"Polygon",coordinates:["@@җȆǟǮĬƤ‰ȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖnjŴňֆɝȖŊˊéƔǥʜÇȪDzɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ"],encodeOffsets:[[-84956,8423]]}},{type:"Feature",id:"CUB",properties:{name:"Cuba"},geometry:{type:"Polygon",coordinates:["@@ܨÑڊW߄˹̭ͮ޺Ĩ̔ȡ܈ԳԺϛˢ\\ԆǟÕʁئ“ٌ΅ıȟ֑Ń֡¥׃âளą֜Ҷ΁ɔէÈ̃ʐȥӎӃ޵ɦʥǬભž̋ǐ̀ɀࠗ¨׿ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ"],encodeOffsets:[[-84242,23746]]}},{type:"Feature",id:"-99",properties:{name:"Northern Cyprus"},geometry:{type:"Polygon",coordinates:["@@ÐJŨȮ؄Yކʢ֧ΧÔƿęˆLJÙűj¥iĎѾNjVɫïƿ¬"],encodeOffsets:[[33518,35984]]}},{type:"Feature",id:"CYP",properties:{name:"Cyprus"},geometry:{type:"Polygon",coordinates:["@@€ãࡱͿЩŊȟͶЎŒǀ«ɬðnjUÒ½j覎ŲiLjÚ̇"],encodeOffsets:[[34789,35900]]}},{type:"Feature",id:"CZE",properties:{name:"Czech Republic"},geometry:{type:"Polygon",coordinates:["@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂdžɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕ—ÅȑLJ¡wý˹ēϋbšȁ"],encodeOffsets:[[17368,49764]]}},{type:"Feature",id:"DEU",properties:{name:"Germany"},geometry:{type:"Polygon",coordinates:["@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁDž׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍ–ţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐDz۰°Ƽȃ֮вȓ̀ӈٌōՠŸ"],encodeOffsets:[[10161,56303]]}},{type:"Feature",id:"DJI",properties:{name:"Djibouti"},geometry:{type:"Polygon",coordinates:["@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ"],encodeOffsets:[[44116,13005]]}},{type:"Feature",id:"DNK",properties:{name:"Denmark"},geometry:{type:"MultiPolygon",coordinates:[["@@ԋڹ࢟ӄŝΒ௼˨ˎу"],["@@ȵ̓ʡĞ؁؁ɮХ՟ŷًŎͽҲ}࡬Ɣɪʌʦ݌À̐ɴڮʂƒѝʟ˙ĶɽҘŵ"]],encodeOffsets:[[[12995,56945]],[[11175,57814]]]}},{type:"Feature",id:"DOM",properties:{name:"Dominican Republic"},geometry:{type:"Polygon",coordinates:["@@ŀƞپIӾɏɜtƴ̕Ҡhʡϐ‰Ю̷̯ͿЍǼϫ•ˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ"],encodeOffsets:[[-73433,20188]]}},{type:"Feature",id:"DZA",properties:{name:"Algeria"},geometry:{type:"Polygon",coordinates:["@@ᮩཽᝩ࿷இϑटćU՘ϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfnj@ÊQ঺ബب࠼Ÿێɦ͎тচͪ˜جӢòϞ̶સƚƸ͜ɛDz̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌P΀ȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮ͹Ϊຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓŽέ̘ҵϼƸڒϷςՃ"],encodeOffsets:[[12288,24035]]}},{type:"Feature",id:"ECU",properties:{name:"Ecuador"},geometry:{type:"Polygon",coordinates:["@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣Ӆ΋ΙъͻĞ΍áw̮ʈȨıΔ"],encodeOffsets:[[-82229,-3486]]}},{type:"Feature",id:"EGY",properties:{name:"Egypt"},geometry:{type:"Polygon",coordinates:["@@ɽͷǹىɫѩȝƥ˩˔ϛϒ׵ஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣ‚ճ঒ݭƨǣΏ@Ὁ@⁩@@ᶶ@Ჴʥڲɐ԰Żά̤Ж૦b߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ෽"],encodeOffsets:[[35761,30210]]}},{type:"Feature",id:"ERI",properties:{name:"Eritrea"},geometry:{type:"Polygon",coordinates:["@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽط঑ǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò"],encodeOffsets:[[43368,12844]]}},{type:"Feature",id:"ESP",properties:{name:"Spain"},geometry:{type:"Polygon",coordinates:["@@¦״΃θஒ؆ਊƱ૾NࣂƝۦªമƒͰ͛໺ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥੧_ߟhՃ͍̓ͅЩê̵˴ʃӚ޷žé˦̶̀Śɬ̃ʢɶրͳԌδè’ЈƎŬZپϲɪɻфөˆƝŁӹCɁЬ΃ū̥ɇ"],encodeOffsets:[[-9251,42886]]}},{type:"Feature",id:"EST",properties:{name:"Estonia"},geometry:{type:"Polygon",coordinates:["@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼ੔Ũ࣮Ƒࢂ|Ŵƣׯӝʞ޵ΫˉۙDܡ̸ρļ܏Ʃ"],encodeOffsets:[[24897,59181]]}},{type:"Feature",id:"ETH",properties:{name:"Ethiopia"},geometry:{type:"Polygon",coordinates:["@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફ™ݟףաeɯ˅ַB͹˴ލΙʝΓ֕àȃĬȟwˇT੟܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔи΀ࠠƆܠ঒ǫʾظ"],encodeOffsets:[[38816,15319]]}},{type:"Feature",id:"FIN",properties:{name:"Finland"},geometry:{type:"Polygon",coordinates:["@@ūיಀ֓ޡى঎ख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ኎࣮֖Ǭē΢ୟЈ˳͜uಒ಻ֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶઄ͯΡכ"],encodeOffsets:[[29279,70723]]}},{type:"Feature",id:"FJI",properties:{name:"Fiji"},geometry:{type:"MultiPolygon",coordinates:[["@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ"],["@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ"],["@@é­@ШǨžĽЗ"]],encodeOffsets:[[[182655,-17756]],[[183669,-17204]],[[-184235,-16897]]]}},{type:"Feature",id:"FLK",properties:{name:"Falkland Islands"},geometry:{type:"Polygon",coordinates:["@@৘Ԍ܎ȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ"],encodeOffsets:[[-62668,-53094]]}},{type:"Feature",id:"FRA",properties:{name:"France"},geometry:{type:"MultiPolygon",coordinates:[["@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ"],["@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣü‚ɇؙҽ]ϟВƀ˾ρ“ʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅʼnिϞ̧ǹ໹Ϣͯ͜ѢԎdžူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵"]],encodeOffsets:[[[9790,43165]],[[3675,51589]]]}},{type:"Feature",id:"GAB",properties:{name:"Gabon"},geometry:{type:"Polygon",coordinates:["@@ࡹࡔ։ۚԙࢄ‚˨ǾˎȲؔǜخ˴¶௢SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ–҅Иãϋ֥Ĺ˽Ɂ̈́֋ٕҩ"],encodeOffsets:[[11361,-4074]]}},{type:"Feature",id:"GBR",properties:{name:"United Kingdom"},geometry:{type:"MultiPolygon",coordinates:[["@@҉ֽًǦԱ[ǦҊǥ҈۴–ࣔԳ"],["@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰDžķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐdžռఢ÷D@ŮӤ֛Ԯ_\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì"]],encodeOffsets:[[[-5797,55864]],[[-3077,60043]]]}},{type:"Feature",id:"GEO",properties:{name:"Georgia"},geometry:{type:"Polygon",coordinates:["@@Ųάȿִӟ̲ҭĬ̯ʴĺIJ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡"],encodeOffsets:[[42552,42533]]}},{type:"Feature",id:"GHA",properties:{name:"Ghana"},geometry:{type:"Polygon",coordinates:["@@೉ӯҳ˽ݳʑݡʆœͨηܤɖैΠ۸ɟ஢ŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍"],encodeOffsets:[[1086,6072]]}},{type:"Feature",id:"GIN",properties:{name:"Guinea"},geometry:{type:"Polygon",coordinates:["@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮Ƈɘ‚ʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МU؀ȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔƒɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞNj·νƃA"],encodeOffsets:[[-8641,7871]]}},{type:"Feature",id:"GMB",properties:{name:"Gambia"},geometry:{type:"Polygon",coordinates:["@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl"],encodeOffsets:[[-17245,13468]]}},{type:"Feature",id:"GNB",properties:{name:"Guinea Bissau"},geometry:{type:"Polygon",coordinates:["@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈•c˵ġĕð˧ƃōȃCɕƗʭfύХ"],encodeOffsets:[[-15493,11306]]}},{type:"Feature",id:"GNQ",properties:{name:"Equatorial Guinea"},geometry:{type:"Polygon",coordinates:["@@ƿŴ़̀െmPয়௡T˳µ"],encodeOffsets:[[9721,1035]]}},{type:"Feature",id:"GRC",properties:{name:"Greece"},geometry:{type:"MultiPolygon",coordinates:[["@@Ҡ˱ٺ¶شÑqƣҜĶĿʛ௃íTƒਁǎƺΦ"],["@@ʹՁȥĥԟ|ѫĀৱɓ׌ҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦdž„ت{ڨɲע̉ކĀVмЦɝ"]],encodeOffsets:[[[24269,36562]],[[27243,42560]]]}},{type:"Feature",id:"GRL",properties:{name:"Greenland"},geometry:{type:"Polygon",coordinates:["@@ᬜԆ᱒›ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ™⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼNjҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկ€ध৚շಽ“൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\Ϗပΐћɣଌȿ઼ԣ͈ڱກlj٫͖ਣӘ˼֭উѵᕖ•୆¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ“૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟ‘Ꮕ×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή"],encodeOffsets:[[-47886,84612]]}},{type:"Feature",id:"GTM",properties:{name:"Guatemala"},geometry:{type:"Polygon",coordinates:["@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏljâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ"],encodeOffsets:[[-92257,14065]]}},{type:"Feature",id:"GUF",properties:{name:"French Guiana"},geometry:{type:"Polygon",coordinates:["@@͉͑ГÑŗʀȉ–ʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ"],encodeOffsets:[[-53817,2565]]}},{type:"Feature",id:"GUY",properties:{name:"Guyana"},geometry:{type:"Polygon",coordinates:["@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱ‰ҫî˙ɡϟƥ˅—ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩ™ْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ"],encodeOffsets:[[-61192,8568]]}},{type:"Feature",id:"HND",properties:{name:"Honduras"},geometry:{type:"Polygon",coordinates:["@@ơˀʭòÐʹŗĞǣÒσij‹ŔʩƈǷǚʛìǨɈáǒÐNJЊɼϦ͎ĔȂƨʊ\\þ垦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙœƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ“"],encodeOffsets:[[-89412,13297]]}},{type:"Feature",id:"HRV",properties:{name:"Croatia"},geometry:{type:"Polygon",coordinates:["@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆Šbג…Ƹƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜlj̼Ų"],encodeOffsets:[[19282,47011]]}},{type:"Feature",id:"HTI",properties:{name:"Haiti"},geometry:{type:"Polygon",coordinates:["@@Ԣ™ܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ"],encodeOffsets:[[-74946,20394]]}},{type:"Feature",id:"HUN",properties:{name:"Hungary"},geometry:{type:"Polygon",coordinates:["@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽš١ə̻űۛNJػήˉļǍ˴ƗV"],encodeOffsets:[[16592,47977]]}},{type:"Feature",id:"IDN",properties:{name:"Indonesia"},geometry:{type:"MultiPolygon",coordinates:[["@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ"],["@@ܙȁijĶø˸ΰԢࠨͬĐǓfʫշع"],["@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖"],["@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮"],["@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗"],["@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ"],["@@̿˥ׅƸǏΰࡘ¢Ⱦˣ"],["@@̨ٝۿΌۯìӃÅׇˆȦҦਠ”ऎʕ"],["@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘLJbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹"],["@@ڭ࠭كlj߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîও”றՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴ–ࠨ؎Ʀȉ"],["@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃"],["@@सާহį˫ֵšݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ"],["@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզ‘ಢNjݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁ਱‘ಟ"]],encodeOffsets:[[[123613,-10485]],[[127423,-10383]],[[120730,-8289]],[[125854,-8288]],[[111231,-6940]],[[137959,-6363]],[[130304,-3542]],[[133603,-3168]],[[137363,-1179]],[[128247,1454]],[[131777,1160]],[[120705,1872]],[[108358,-5992]]]}},{type:"Feature",id:"IND",properties:{name:"India"},geometry:{type:"Polygon",coordinates:["@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସʼnӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪ΁ˎڴŀވشॸ՘۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍Ʒèԫ׷Ʋછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵ೰ɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ௃֡ळ঩كՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙI෗ѣ¡ϣٙʰˣދʃ˱֯͵ʍߑ޸ϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣ੾HৰǍ޾௣ԉףĶ઱৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕Ьβ౤ȱपŰߺ۸"],encodeOffsets:[[79706,36346]]}},{type:"Feature",id:"IRL",properties:{name:"Ireland"},geometry:{type:"Polygon",coordinates:["@@ƒ׷ًݣ๯ӹ஑Ŷڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\ٌǥ"],encodeOffsets:[[-6346,55161]]}},{type:"Feature",id:"IRN",properties:{name:"Iran"},geometry:{type:"Polygon",coordinates:["@@݈njװӔ֚{τƾװýघэڤğ।ݓظ‰òۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυx݉ДƋêϯ௉ѡ̓উཌྷʪࣷȖेŊΧਐЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔ਍Ң׉ߜȜپц̂ÙӬտʨխ৊ҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩ׎у஠ƟಾɞĄȞ"],encodeOffsets:[[55216,38092]]}},{type:"Feature",id:"IRQ",properties:{name:"Iraq"},geometry:{type:"Polygon",coordinates:["@@րʧÚӫх́țٽ׊ߛ਎ҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ͹৾ᇶ࢔͆৬āؘҢȺјԾΰž঎Ň̐ɉЖƚծ৉"],encodeOffsets:[[46511,36842]]}},{type:"Feature",id:"ISL",properties:{name:"Iceland"},geometry:{type:"Polygon",coordinates:["@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪ๪ǎ—ʘᄋȜ֨նౠŰಸ֭౨Ҝ੒ʃൌ҄ආÑ"],encodeOffsets:[[-14856,68051]]}},{type:"Feature",id:"ISR",properties:{name:"Israel"},geometry:{type:"Polygon",coordinates:["@@ƥ˅̣Ŝǫ֓ɂĥɋř—ɛЄŖp͛нഉց෾ʔˢ˶ɞϼǠيŤɆzVˬCþƦɤ\\`·ŕŵhM"],encodeOffsets:[[36578,33495]]}},{type:"Feature",id:"ITA",properties:{name:"Italy"},geometry:{type:"MultiPolygon",coordinates:[["@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò"],["@@Ԍ׭ş૕ϣÂ΁˫͇ɞ‘২ȓӒҨ¥рʼ"],["@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀”ʂβǵМ¢Ҽ˶ƢƃА€ǼͺتĿψƚâΆԘšĮdžࠨƤȊ̉"]],encodeOffsets:[[[15893,39149]],[[9432,42200]],[[12674,47890]]]}},{type:"Feature",id:"JAM",properties:{name:"Jamaica"},geometry:{type:"Polygon",coordinates:["@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒƒ"],encodeOffsets:[[-79431,18935]]}},{type:"Feature",id:"JOR",properties:{name:"Jordan"},geometry:{type:"Polygon",coordinates:["@@Ʀˆपͫ࿪ࣆͺ৽Džų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆƒŨоഊo͜Ůʚ@Ԥ"],encodeOffsets:[[36399,33172]]}},{type:"Feature",id:"JPN",properties:{name:"Japan"},geometry:{type:"MultiPolygon",coordinates:[["@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ"],["@@́ڡƤсѩף੹Ѓ๏½ணॡ͔֡“غษȃষЃঝe࡞أ֗෗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ๺֔Б௾ࡀӌ͜ՈਈƟा΢ՎࣀƸҞୗ}ڻޥࡍbࢁ"],["@@נǵרΤȈहఝɯ݁࠱೓ָқँण]ř࠴д٨࣌²ʖ୐ʜټন࢓٤˯"]],encodeOffsets:[[[137870,34969]],[[144360,38034]],[[147365,45235]]]}},{type:"Feature",id:"KAZ",properties:{name:"Kazakhstan"},geometry:{type:"Polygon",coordinates:["@@ӕƹ્דο׹̹KɱЊ੫‚ǡێХNÚࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖDž̊অ˺ϛݮҩɆ…˜ࠊāŽؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼—ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטNjΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġ஥ΞӉǧŽӹ൩̂փşȉρ"],encodeOffsets:[[72666,43281]]}},{type:"Feature",id:"KEN",properties:{name:"Kenya"},geometry:{type:"Polygon",coordinates:["@@ӾۙיͱȹΕ̿Õšףˑ͹Ǐ֑ͷ˥஻ࡀËӤᵁႌƙĢSࢺʊ;а֌̨ؔσ॰įтЉ׎ԬԈ֬ֆѨƗ@ҽ˺ˡג@੠܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ"],encodeOffsets:[[41977,-878]]}},{type:"Feature",id:"KGZ",properties:{name:"Kyrgyzstan"},geometry:{type:"Polygon",coordinates:["@@ȊςքŠ൪́žӺӊǨ஦Ν̨Ģ඄wఞĕф̟Ԯūşȏ೛ғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉ੾؂঻ѸױȽإ͂۶ծʟĊ"],encodeOffsets:[[72666,43281]]}},{type:"Feature",id:"KHM",properties:{name:"Cambodia"},geometry:{type:"Polygon",coordinates:["@@΁Ѭыࢄȣ২ՠۨઘdž߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū"],encodeOffsets:[[105982,10888]]}},{type:"Feature",id:"KOR",properties:{name:"South Korea"},geometry:{type:"Polygon",coordinates:["@@ܨযȺխPॷ̓ҥݽljڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ‡͞Ϝצ¢ΨÈŨȮ"],encodeOffsets:[[131431,39539]]}},{type:"Feature",id:"CS-KM",properties:{name:"Kosovo"},geometry:{type:"Polygon",coordinates:["@@›ǣŃPĘ́ȩĐdzɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒŸǎƻŢLĥȳijij„×ȉӹŻ"],encodeOffsets:[[21261,43062]]}},{type:"Feature",id:"KWT",properties:{name:"Kuwait"},geometry:{type:"Polygon",coordinates:["@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é"],encodeOffsets:[[49126,30696]]}},{type:"Feature",id:"LAO",properties:{name:"Laos"},geometry:{type:"Polygon",coordinates:["@@˚Ϝœ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧ž³ԎηʸǴ̲ܐնøȡ҄wŵ०ѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟৔ԉۦ঳Ռ݋َ׏ɄץƵ࠿ݕ̲ϝ׃ۙ͢"],encodeOffsets:[[107745,14616]]}},{type:"Feature",id:"LBN",properties:{name:"Lebanon"},geometry:{type:"Polygon",coordinates:["@@ɣ[ýƥ˫D̘ۄмעfˆϘ§Ɛͣқ̓ȷҟ"],encodeOffsets:[[36681,34077]]}},{type:"Feature",id:"LBR",properties:{name:"Liberia"},geometry:{type:"Polygon",coordinates:["@@ɗQࡽАޅٖ܏Ң֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐdzʂIǢ͸ʄsŸʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە"],encodeOffsets:[[-7897,4470]]}},{type:"Feature",id:"LBY",properties:{name:"Libya"},geometry:{type:"Polygon",coordinates:["@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓ૞ϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂Ф؄ЀׂŘ଒ǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ"],encodeOffsets:[[15208,23412]]}},{type:"Feature",id:"LKA",properties:{name:"Sri Lanka"},geometry:{type:"Polygon",coordinates:["@@ų࢓ΙʇܵȓЍڜƫீϠ഼׆ұϺסО࢓"],encodeOffsets:[[83751,7704]]}},{type:"Feature",id:"LSO",properties:{name:"Lesotho"},geometry:{type:"Polygon",coordinates:["@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ"],encodeOffsets:[[29674,-29650]]}},{type:"Feature",id:"LTU",properties:{name:"Lithuania"},geometry:{type:"Polygon",coordinates:["@@ãɊĚɲχƄࢡƨDZ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻NȫʶљĜ"],encodeOffsets:[[23277,55632]]}},{type:"Feature",id:"LUX",properties:{name:"Luxembourg"},geometry:{type:"Polygon",coordinates:["@@ǘȏ³ρʍiȉòĞҼɖŽ"],encodeOffsets:[[6189,51332]]}},{type:"Feature",id:"LVA",properties:{name:"Latvia"},geometry:{type:"Polygon",coordinates:["@@†نЮՆߊ˼ڜعڪhNJ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ"],encodeOffsets:[[21562,57376]]}},{type:"Feature",id:"MAR",properties:{name:"Morocco"},geometry:{type:"Polygon",coordinates:["@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜDZƷ͛ષƙϝ̵ӡñ—ثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁ੕ୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւ࡬f\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI"],encodeOffsets:[[-5318,36614]]}},{type:"Feature",id:"MDA",properties:{name:"Moldova"},geometry:{type:"Polygon",coordinates:["@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ"],encodeOffsets:[[27259,49379]]}},{type:"Feature",id:"MDG",properties:{name:"Madagascar"},geometry:{type:"Polygon",coordinates:["@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝLjثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмŒҶǤ̶Ʋτ\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί"],encodeOffsets:[[50733,-12769]]}},{type:"Feature",id:"MEX",properties:{name:"Mexico"},geometry:{type:"Polygon",coordinates:["@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔ‡ԚîȬDZ…ЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳIJķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿDŽ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФ™ˀҍو̓٠^͔؇ͬ˫™ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКƒͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈ„ؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼ŽϜ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|"],encodeOffsets:[[-99471,26491]]}},{type:"Feature",id:"MKD",properties:{name:"Macedonia"},geometry:{type:"Polygon",coordinates:["@@ńOœǤӺżȊ˺¶ϴbтˏÒ։DžƒƑƥҕh͋ǿջõΑȴšήń˸"],encodeOffsets:[[21085,42860]]}},{type:"Feature",id:"MLI",properties:{name:"Mali"},geometry:{type:"Polygon",coordinates:["@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟IȿLjҥš޻ΑDžʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴʼnùʱʎ¬ʢĿİdzĉ˚Ǥɐ΅ΚijɴȇȂǙvȫş˕őɱǹΫäɷɈƓ„ɕőƅAµ̮žʾí̽͘ʀǓӔԺ"],encodeOffsets:[[-12462,14968]]}},{type:"Feature",id:"MMR",properties:{name:"Myanmar"},geometry:{type:"Polygon",coordinates:["@@ӫηץ›ϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺Ž࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟ“ۙߓۭijঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յdẕӓȗ"],encodeOffsets:[[101933,20672]]}},{type:"Feature",id:"MNE",properties:{name:"Montenegro"},geometry:{type:"Polygon",coordinates:["@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó"],encodeOffsets:[[20277,43521]]}},{type:"Feature",id:"MNG",properties:{name:"Mongolia"},geometry:{type:"Polygon",coordinates:["@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼‰ௐɁࠈגͿӶࢊࢊश΍ނįনɍLjؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެT੒Ƌޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦ௟ŏןʅ؝։౱͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯׽҇গ̑ఽ‹ഫ̇এҋϋʾ৭AఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז"],encodeOffsets:[[89858,50481]]}},{type:"Feature",id:"MOZ",properties:{name:"Mozambique"},geometry:{type:"Polygon",coordinates:["@@لæ৞ʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ“࠷ľ݅ಿƨЫʣ׷͙׍՗Եޏ͉ृСॉ͓ࣕƵוׯ΋ȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞ˜غǐ׌E੠ѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲ׌ζǰíઊΙ؈̣˖̅]ɽદɾٔ"],encodeOffsets:[[35390,-11796]]}},{type:"Feature",id:"MRT",properties:{name:"Mauritania"},geometry:{type:"Polygon",coordinates:["@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃ௎ȴќ߀øᒸ᪂©F౞Ṗ᎟౽cМ⋅М⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ"],encodeOffsets:[[-12462,14968]]}},{type:"Feature",id:"MWI",properties:{name:"Malawi"},geometry:{type:"Polygon",coordinates:["@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈LJۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ"],encodeOffsets:[[35390,-11796]]}},{type:"Feature",id:"MYS",properties:{name:"Malaysia"},geometry:{type:"MultiPolygon",coordinates:[["@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳׫Éߑخ঵ښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ"],["@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘؜˽ٮǀǜ܆άǂ৖Ǻ׾ڔЬՐϦѥǮ˺В¸՜œа٪אшڀͼHќыžιֆɻ۬ʧÑ֝͡¥ƮЧ"]],encodeOffsets:[[[103502,6354]],[[121466,4586]]]}},{type:"Feature",id:"NAM",properties:{name:"Namibia"},geometry:{type:"Polygon",coordinates:["@@رٌؖ͡ȃࠊȷ،˯ಒm৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КdžԊƞհ}ԄϝŶÐ₮˜׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍سƒ{Ჽࠣ‡BយA᷋ݣѕҋÕՇDŽϗÔƗάͩɰГг"],encodeOffsets:[[16738,-29262]]}},{type:"Feature",id:"NCL",properties:{name:"New Caledonia"},geometry:{type:"Polygon",coordinates:["@@ېԵѨϭ͉ȫҥɪ׹ϚէѼ։פś˶β[Һ˹φ˷ˎɻ"],encodeOffsets:[[169759,-21585]]}},{type:"Feature",id:"NER",properties:{name:"Niger"},geometry:{type:"Polygon",coordinates:["@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ࿸᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟ’ځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋ͹ÍݣٗӚ̟E˭ʗ"],encodeOffsets:[[2207,12227]]}},{type:"Feature",id:"NGA",properties:{name:"Nigeria"},geometry:{type:"Polygon",coordinates:["@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തs՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘIJࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ‘֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧDZȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש"],encodeOffsets:[[8705,4887]]}},{type:"Feature",id:"NIC",properties:{name:"Nicaragua"},geometry:{type:"Polygon",coordinates:["@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾ”ŀȔŬRkЮȠrǬOǺɤʜǝĒľƺIJ̊ɴbǦĄQňȪĖ|ƜŹǚ›ȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩDZʛÈƓǦˉêȕʼnօɞųŇ"],encodeOffsets:[[-87769,11355]]}},{type:"Feature",id:"NLD",properties:{name:"Netherlands"},geometry:{type:"Polygon",coordinates:["@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ"],encodeOffsets:[[6220,54795]]}},{type:"Feature",id:"NOR",properties:{name:"Norway"},geometry:{type:"MultiPolygon",coordinates:[["@@᥆ؙઍɣऄՅෛ͵ڵû΢לઃͰಫ˵Ы؝ߟωࣗȮ઱¥णѼԉɝԷ“ūփནƊɝҵ߭Hևױ࠿झಫ஁̨˹̇ͫ࠯bձ޿¾૟՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟ୏є̛ࣚˇ኶ޞզᕠ۶ဌࢂ໤୦፺ྴඦلᘼ੊ᇎπ൪­౮ۢ໖›ພǘ"],["@@ም΅๝Ȝ׆ɐԕˎეǚͮ̿ொȍ"],["@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋஦\\͊˼௾ˆ੖̋"],["@@࿮̏ఝҍ᝱ı៙ƖƫɴஹdँϬᣴɼ௞ȫࡘʤᑺȽ"]],encodeOffsets:[[[28842,72894]],[[25318,79723]],[[18690,81615]],[[26059,82338]]]}},{type:"Feature",id:"NPL",properties:{name:"Nepal"},geometry:{type:"Polygon",coordinates:["@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜޼ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć"],encodeOffsets:[[90236,28546]]}},{type:"Feature",id:"NZL",properties:{name:"New Zealand"},geometry:{type:"MultiPolygon",coordinates:[["@@Ȓ΋װ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذ੐ࠦժǀ׾͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ"],["@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨Ÿլͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ"]],encodeOffsets:[[[177173,-41901]],[[178803,-37024]]]}},{type:"Feature",id:"OMN",properties:{name:"Oman"},geometry:{type:"MultiPolygon",coordinates:[["@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתv͸ʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ"],["@@ʼnƳDž˺ʔ˺ľñā΍"]],encodeOffsets:[[[60274,21621]],[[57745,26518]]]}},{type:"Feature",id:"PAK",properties:{name:"Pakistan"},geometry:{type:"Polygon",coordinates:["@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࡝࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ؀٭٘໻ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદĈ܎ҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖ՘Ɇͥ֊ߜɴ̢•͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ"],encodeOffsets:[[76962,38025]]}},{type:"Feature",id:"PAN",properties:{name:"Panama"},geometry:{type:"Polygon",coordinates:["@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽ‡ĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ͸·ÈɓİέCǻĩŶªǖìǠƲŲIJǩŲK͸͘ö̠̝iDZͲ›ĀæɴȵЮÔΨɄԜǞ˺ʤҬ·‹ĉҶ…ώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС"],encodeOffsets:[[-79750,7398]]}},{type:"Feature",id:"PER",properties:{name:"Peru"},geometry:{type:"Polygon",coordinates:["@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎIJΓʇȧx̭ΎâͼĝΚщӆΌDŽ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍlj॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝDZί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡"],encodeOffsets:[[-71260,-18001]]}},{type:"Feature",id:"PHL",properties:{name:"Philippines"},geometry:{type:"MultiPolygon",coordinates:[["@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱"],["@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ"],["@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ"],["@@Ԏʹ՘BgΗϳΣՕʧ‡ϸÒєŽА"],["@@ʀभ٫ɞj˭ȶԯЍȋ•עʧªƁԘӶãY͈ԣٜ߮mɴ̻"],["@@ɟܩέоѓ٘ܚ‰̡̈"],["@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊIJਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA"]],encodeOffsets:[[[129410,8617]],[[126959,10526]],[[121349,9540]],[[124809,12178]],[[128515,12455]],[[124445,13384]],[[124234,18949]]]}},{type:"Feature",id:"PNG",properties:{name:"Papua New Guinea"},geometry:{type:"MultiPolygon",coordinates:[["@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ"],["@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ"],["@@ݤտղࢻӖ„‘ω٬ƛʥǁࣀΝġʏ֋ÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅ–aᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕"],["@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ"]],encodeOffsets:[[[159622,-6983]],[[155631,-5609]],[[150725,-7565]],[[156816,-4607]]]}},{type:"Feature",id:"POL",properties:{name:"Poland"},geometry:{type:"Polygon",coordinates:["@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ੒˴࠼ƙÚȱ߸Yਚħ໶^њěȬʵšωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔؁šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔"],encodeOffsets:[[15378,52334]]}},{type:"Feature",id:"PRI",properties:{name:"Puerto Rico"},geometry:{type:"Polygon",coordinates:["@@јõưǕɋɃمLӫ‡·άŢŬیK"],encodeOffsets:[[-67873,18960]]}},{type:"Feature",id:"PRK",properties:{name:"North Korea"},geometry:{type:"Polygon",coordinates:["@@Şƥ͉ºη˵ʣ˷Ž׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑˆÁùСdžĵƿʙé‡ǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮Ўˁܪ‹ſѺಚβͰҼժӹ"],encodeOffsets:[[133776,43413]]}},{type:"Feature",id:"PRT",properties:{name:"Portugal"},geometry:{type:"Polygon",coordinates:["@@̦Ɉ΄ŬɂЫӺDƞłӪ‡ɼуϱɩYٽƍū‘Їγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠™˲"],encodeOffsets:[[-9251,42886]]}},{type:"Feature",id:"PRY",properties:{name:"Paraguay"},geometry:{type:"Polygon",coordinates:["@@ͦ৖tҌЖ݌าʔޮ]޴їbʵʞҳÇଛࢲLJ΄ǐ֦ɩǀʣþޓİ͓̼›̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸ໵ൌ"],encodeOffsets:[[-64189,-22783]]}},{type:"Feature",id:"QAT",properties:{name:"Qatar"},geometry:{type:"Polygon",coordinates:["@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ"],encodeOffsets:[[52030,25349]]}},{type:"Feature",id:"ROU",properties:{name:"Romania"},geometry:{type:"Polygon",coordinates:["@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁ€ρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻ৥ӳĖ̪ؑফțзɋ௽¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ"],encodeOffsets:[[23256,49032]]}},{type:"Feature",id:"RUS",properties:{name:"Russia"},geometry:{type:"MultiPolygon",coordinates:[["@@ࡌ๫కˤԫ்ࠌࡳyוُԒսٱƻ۸Ĥࠊħ࣢Țٌš૴ӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ"],["@@໵]ਙĨȒτ୊˚ࢢƧψƃęɱäɉ"],["@@֦Ƚțؐᗸű࿨޻࠭λ൛ēsࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗʼnҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ"],["@@ः©ƭˌੲΖ@ַ"],["@@ળ»@ָň–܈E௒ʉïŗࡽȩ"],["@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə"],["@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ"],["@@ډرᶽzඃȣမղҎ׀૎ǂᕞ™ᴬѽ"],["@@ӹóᩣŊɟώູɦūҒ࡮Ƕ…Ҟသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ"],["@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴDŽєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋ೔Ϳ߸ࢦഖϙ෢ɦྼʵؤʀൖş؅ޮૐζ䢀ձܐӿᔲٛ₎DŽာƑ۪΍Ĺؙਜʇ૴Ǥ๰vཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿ᚝مݛĭ౽ן௛ԧ̱ϣய׊ᔗڇϣ̸ߵΫ૱Ř˓ց৙߽Šͻड़ȋő௣ޭ‹Ϋ۱Δα฽ѕ̅ॡభȳʥ࡟ே޳ׂ̳έ௬ҵለИ୘܀ԆªϾರȊຊ੒คࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶ਩ЭᢵƠ᪏ʟᨩ࿛ủጝ೚ŁаՃࠄȅ՞оईÃௌऍ†܍ځ࠽ë্ϛഉ్௓˯ׇଙ঑ଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦKѐіxŦ঴ɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢ૛uਯƱۛлҤȥXҩұˑݷࢻRσஅՍ৙̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎ੝ŋߏƹ஛ΜLJـধɎށİवΎࢉࢉ΀ӵࠇב௏ɂ࠻Š֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחnjЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉ୻˜ʓʟ੹Ѧ೯iࢻΟহͼᇡ׊ಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇ͹ƝɇωÌֿԚɿ†ՅȚʳΈ޵ǮԙƁƥƼଥЖఅƌ܃ƞĹıੱ܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉ‚ώѠɼ߼ÖƄ˪ȅҪ΀ѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽”ȷ՞ȟ˨NJĀڴ‡͞Ȁʍɢ֥ƪ¼Ʋ΁ƴՃվǸɨĉЂࠑȨѱijšȼࢭɂˑӸíТЙȖάˊʝ޶װӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜ঍ग़ޢي౿֔ŬךڶüොͶࢀ̈൦ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆ࡫ઌʯڂɓňРԑΰ՘͈᎖Թ۾Ȳ֣؜ዦࠖޢµ޸̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹ੡ĻNҳڌ˽ಜǼȶ՚ჶАᰪܞي£ࠣԙਬĕ׼˼༾xఢΐफ़ԏॖ֌ࢡӢѪˤ២ʫ୒ʿᴾॣ֚ѰࡡѺ{ǴৣĈˢЌ҅ټ}ː༄ݾրކزǒᕮɛǬұߕڽԺˋ˒חȏଵऒԧέ֕࿫஝०ŭ̢ͮऎɎɞжܮЎөӌϼֈࣿêȫҲڢࡈણۆຒ֦șװмnѴүͧ߷࣐Ƶϥ؄ඤͦლ¬༈ӏݛ۪ċࣆศǞ፾™ᆘŌہѮংւॲx࿎иᕠŐ˪ɲᕂþیȋሴҀ໲aɶδߤΨጤΈ෸˗ଥȷበŹ"],["@@ⵙ͕ໞીےĦقÃᒈӋʟͿ"],["@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~࿞ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ"],["@@ᆳĿᚉʎඅ͎٣׾଩ǔᔆָᆎȎ࿌чኬ߻ȹݯ"]],encodeOffsets:[[[147096,51966]],[[23277,55632]],[[-179214,68183]],[[184320,72533]],[[-182982,72595]],[[147051,74970]],[[154350,76887]],[[148569,77377]],[[58917,72418]],[[109538,78822]],[[107598,80187]],[[52364,82481]],[[102339,80775]]]}},{type:"Feature",id:"RWA",properties:{name:"Rwanda"},geometry:{type:"Polygon",coordinates:["@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘތԄʎɺȰďԈʸ"],encodeOffsets:[[31150,-1161]]}},{type:"Feature",id:"ESH",properties:{name:"Western Sahara"},geometry:{type:"Polygon",coordinates:["@@oҊŸ@@ÉeNjEౝ᪁ª‚ᒷ޿÷ȳћDŽ்ᾓNǽ˫˜΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ʼnϢ@˔ȒԲ‚"],encodeOffsets:[[-9005,27772]]}},{type:"Feature",id:"SAU",properties:{name:"Saudi Arabia"},geometry:{type:"Polygon",coordinates:["@@ʼnΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīא–ӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦœ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фdžŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒdž͍Žș࡙͐ᡌщǞDzϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ"],encodeOffsets:[[43807,16741]]}},{type:"Feature",id:"SDN",properties:{name:"Sudan"},geometry:{type:"Polygon",coordinates:["@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃ…ǥ࠵@řǦ؃†̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ ZΚॲH@း@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dij"],encodeOffsets:[[34779,9692]]}},{type:"Feature",id:"SDS",properties:{name:"South Sudan"},geometry:{type:"Polygon",coordinates:["@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵDZϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄…Śǥ࠶@†ǦѠDŽĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg"],encodeOffsets:[[34779,9692]]}},{type:"Feature",id:"SEN",properties:{name:"Senegal"},geometry:{type:"Polygon",coordinates:["@@΍ٺн̚φDŽРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽžԹǔӓ̾ɿî͗ʽŧ³қâÙģȃk׿ȲЛV༇–ɥħ˥‚ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy"],encodeOffsets:[[-17114,13922]]}},{type:"Feature",id:"SLB",properties:{name:"Solomon Islands"},geometry:{type:"MultiPolygon",coordinates:[["@@ɾ˿חN͉ԬԈȯǜ‰"],["@@͝mԧĎǫżÀͮֈƁ˜ǭƎə"],["@@ųƹحܰǫԈ˺@̠ڥʹЗ"],["@@–ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ"],["@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛"]],encodeOffsets:[[[166010,-10734]],[[164713,-10109]],[[165561,-9830]],[[163713,-8537]],[[161320,-7524]]]}},{type:"Feature",id:"SLE",properties:{name:"Sierra Leone"},geometry:{type:"Polygon",coordinates:["@@ɧØ؁ͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼˁʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ"],encodeOffsets:[[-11713,6949]]}},{type:"Feature",id:"SLV",properties:{name:"El Salvador"},geometry:{type:"Polygon",coordinates:["@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«IJȠ¾ʜëǸǙʪƇŒœτĴǤÑŘĝÏͳ"],encodeOffsets:[[-89900,13706]]}},{type:"Feature",id:"-99",properties:{name:"Somaliland"},geometry:{type:"Polygon",coordinates:["@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎˆKaE΋Aࡑ@ѫ"], encodeOffsets:[[50113,9679]]}},{type:"Feature",id:"SOM",properties:{name:"Somalia"},geometry:{type:"Polygon",coordinates:["@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱ੷ܝ௷ܓवধ଩ࡁڹష࠯޳ٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબšᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ"],encodeOffsets:[[50923,11857]]}},{type:"Feature",id:"SRB",properties:{name:"Republic of Serbia"},geometry:{type:"Polygon",coordinates:["@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞijƑšϳa˹µƒØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢšŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾ™ҖͣĦˋ"],encodeOffsets:[[21376,46507]]}},{type:"Feature",id:"SUR",properties:{name:"Suriname"},geometry:{type:"Polygon",coordinates:["@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓDzЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ"],encodeOffsets:[[-58518,6117]]}},{type:"Feature",id:"SVK",properties:{name:"Slovakia"},geometry:{type:"Polygon",coordinates:["@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹dzđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺ĔxþLj¢ÆȒȖ˜žưʢD"],encodeOffsets:[[19306,50685]]}},{type:"Feature",id:"SVN",properties:{name:"Slovenia"},geometry:{type:"Polygon",coordinates:["@@ۜÝъȐܾtLjƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙב†ȈúȫΨĞа"],encodeOffsets:[[14138,47626]]}},{type:"Feature",id:"SWE",properties:{name:"Sweden"},geometry:{type:"Polygon",coordinates:["@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ”૪Щ಼ֱv಑˴͛ฃʃ"],encodeOffsets:[[22716,67302]]}},{type:"Feature",id:"SWZ",properties:{name:"Swaziland"},geometry:{type:"Polygon",coordinates:["@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω"],encodeOffsets:[[32842,-27375]]}},{type:"Feature",id:"SYR",properties:{name:"Syria"},geometry:{type:"Polygon",coordinates:["@@࿩ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ࢓"],encodeOffsets:[[39724,34180]]}},{type:"Feature",id:"TCD",properties:{name:"Chad"},geometry:{type:"Polygon",coordinates:["@@ĎЄաnDզΓ̶δ૊ੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟੓͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކŒ֐É֐ͭՠ"],encodeOffsets:[[14844,13169]]}},{type:"Feature",id:"TGO",properties:{name:"Togo"},geometry:{type:"Polygon",coordinates:["@@ڱdzȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ŽЭǜǥኝȺׅ"],encodeOffsets:[[1911,6290]]}},{type:"Feature",id:"THA",properties:{name:"Thailand"},geometry:{type:"Polygon",coordinates:["@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצœӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ›܅˙ϛ޿ŦગDž՟ۧȤ১"],encodeOffsets:[[105047,12480]]}},{type:"Feature",id:"TJK",properties:{name:"Tajikistan"},geometry:{type:"Polygon",coordinates:["@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ‡͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯nj؋ˑʱĺӀࡘǹض؟ȨɔφۮŸЌҬˌբ૲ȜǩϵŤɹΎv"],encodeOffsets:[[72719,41211]]}},{type:"Feature",id:"TKM",properties:{name:"Turkmenistan"},geometry:{type:"Polygon",coordinates:["@@ñۼطŠॣݔڣĠगюׯþσƽ֙|ׯӓ݇NjƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦžˮƳаࡽ०ׇոЃ࢞Щ૤Ϋwԥʩ€Ѕɤſ̙۽NjǙڥӁʭڏŵǫϟهŏࡩ͈"],encodeOffsets:[[62680,36506]]}},{type:"Feature",id:"TLS",properties:{name:"East Timor"},geometry:{type:"Polygon",coordinates:["@@IJȤܢȌז†ˀŀ͆Ľ̯ɫ࢕ο۳ʋeʬďǔ"],encodeOffsets:[[127968,-9106]]}},{type:"Feature",id:"TTO",properties:{name:"Trinidad and Tobago"},geometry:{type:"Polygon",coordinates:["@@ӚŊǮ‡‘صۭġƯúʒɲiͪ"],encodeOffsets:[[-63160,11019]]}},{type:"Feature",id:"TUN",properties:{name:"Tunisia"},geometry:{type:"Polygon",coordinates:["@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒljпЫMϱ̆ȽōܫփхDŽқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț"],encodeOffsets:[[9710,31035]]}},{type:"Feature",id:"TUR",properties:{name:"Turkey"},geometry:{type:"MultiPolygon",coordinates:[["@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟ†ȗΑׇij߻҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒ’Μྀٔŏ৞հ঒ʄർlุף"],["@@۫ҏ˃Ϻ\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ"]],encodeOffsets:[[[37800,42328]],[[27845,41668]]]}},{type:"Feature",id:"TZA",properties:{name:"United Republic of Tanzania"},geometry:{type:"Polygon",coordinates:["@@ƚġᵂႋÌӣ஼࠿ϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґ੖ӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà"],encodeOffsets:[[34718,-972]]}},{type:"Feature",id:"UGA",properties:{name:"Uganda"},geometry:{type:"Polygon",coordinates:["@@ः\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊ׍İсτ९̧ؓЯ֋ʉͽTࢹႍß"],encodeOffsets:[[32631,-1052]]}},{type:"Feature",id:"UKR",properties:{name:"Ukraine"},geometry:{type:"Polygon",coordinates:["@@̾“ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ੪̏٢Ƅ԰ϿӮVఊ˙XʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨLjߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉŽأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº"],encodeOffsets:[[32549,53353]]}},{type:"Feature",id:"URY",properties:{name:"Uruguay"},geometry:{type:"Polygon",coordinates:["@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ"],encodeOffsets:[[-59008,-30941]]}},{type:"Feature",id:"USA",properties:{name:"United States of America"},geometry:{type:"MultiPolygon",coordinates:[["@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ"],["@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ"],["@@ĝ҉|Úĸа•"],["@@­µÓŻˆŃȒ’ɤŚêÃʐ˥"],["@@ıĉ˱ƴªÖŸĈȘijȝ"],["@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸ౦N໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦljεǴՑևƀׂ˓˜ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥—͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓLJō̵Ů́ǃ؍€طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕDŽ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠˆȚχˤٯ۴řۆ҃ҞȀۢ…ܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J"],["@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ"],["@@ԧŽսƾԛɮࠦƞښùĂ͑"],["@@԰DžԾĒڸɛ࠲őéĝُDZٕǾ͋Ʋݍµȧôº̈́"],["@@؊ϛώnjහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ʼn૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩDŽ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झdzťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થLJ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛ͸੟Ӧ୾ΘመШ۔@ŕнᄢŽڽԶਕ͌ױр߫ΨଽˈҺѲ๰‚ਗ਼ϦȨФ࡬ЎࠊĪཪώޜÉಐ҄ౚǭ"]],encodeOffsets:[[[-159275,19542]],[[-159825,21140]],[[-160520,21686]],[[-161436,21834]],[[-163169,22510]],[[-97093,50575]],[[-156678,58487]],[[-169553,61348]],[[-175853,65314]],[[-158789,72856]]]}},{type:"Feature",id:"UZB",properties:{name:"Uzbekistan"},geometry:{type:"Polygon",coordinates:["@@xԦૣά࢝ЪշЄ॥׈Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದ׻یͅߤݵঢŪ෸à৔ؗÙࡅЦMǢۍ੬ɲЉ̺Lπ׺૎הӖƺʠĉ۵խئ́ײȾ়ѷ੽؁ٕĊ΍uţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN"],encodeOffsets:[[68116,38260]]}},{type:"Feature",id:"VEN",properties:{name:"Venezuela"},geometry:{type:"Polygon",coordinates:["@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼΀řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼৖\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ‘֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝNjʱٷÅҧѼʯ࠺ɟ̧̌Ȅюм…ȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷê‡ǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ"],encodeOffsets:[[-73043,12059]]}},{type:"Feature",id:"VNM",properties:{name:"Vietnam"},geometry:{type:"Polygon",coordinates:["@@૭ܗ۫ߍȁ׍٠ࢭ޺ળނԱԞګϪ།ŕ๓۫փ१եۇ۫਷ޱ̧ՠʀ֬دӌܬ͸ࢦÔσԚප٨ļ৖ț֖ƶࡀɃצٍאՋ݌ۥ঴৓Ԋʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ"],encodeOffsets:[[110644,22070]]}},{type:"Feature",id:"VUT",properties:{name:"Vanuatu"},geometry:{type:"MultiPolygon",coordinates:[["@@ˣō˭ςŒɤՆӗ"],["@@ƌڱɥŀǩ­ťɴi٢Дʵ"]],encodeOffsets:[[[171874,-16861]],[[171119,-15292]]]}},{type:"Feature",id:"PSE",properties:{name:"West Bank"},geometry:{type:"Polygon",coordinates:["@@@ԣŭʙЃŕ˜ɜɌŚɁĦǬ̤֔ś"],encodeOffsets:[[36399,33172]]}},{type:"Feature",id:"YEM",properties:{name:"Yemen"},geometry:{type:"Polygon",coordinates:["@@؉ɥNjύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗lj۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸNJ™ξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח"],encodeOffsets:[[54384,17051]]}},{type:"Feature",id:"ZAF",properties:{name:"South Africa"},geometry:{type:"Polygon",coordinates:["@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеDž࣫NJԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒŸśŏɦLӰ˙֞˔ƴs٤ս޼х܈AF׽તДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏׼ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤ΂UОƛ˲Ķ҂ċД஁ɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ","@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ"],encodeOffsets:[[32278,-29959],[29674,-29650]]}},{type:"Feature",id:"ZMB",properties:{name:"Zambia"},geometry:{type:"Polygon",coordinates:["@@ІϏɊ܋ƝɩǙڻLjۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یžᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶ଀ƚͦđΘɇͰƗՖƗӊʧ"],encodeOffsets:[[33546,-9452]]}},{type:"Feature",id:"ZWE",properties:{name:"Zimbabwe"},geometry:{type:"Polygon",coordinates:["@@ҁČ˱ĵНƜ΁VՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑF੟Ǐ׋—عƊʝħӵŵùɛ؅ࢫ॓"],encodeOffsets:[[31941,-22785]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xiang_gang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"8100",properties:{name:"香港",cp:[114.2784,22.3057],childNum:1},geometry:{type:"Polygon",coordinates:["@@™@}ScTʟ@cWuJÁ–]„l¦RLj¼BĄà˜ ŽH@TOHCTDDDHDNAT@PEHDDNJLX@BABALHFF@DKHADBBLDHHFBLEJB@GDBBFBADDB@@KFAFBBJJA@BB@@FFDDADFF@FADDDBJC@AFBD@@DDD@DAA@D@DB@DHHBFJBBFEHDFAN@DGDC@DLCBDDCFDlAFBFCBEF@BC@GDAB@FD@DZJ‚X´HĐMja@Ý`p_PCZ@lLnRGSDMFK|a\\Y}­ƒ§™Mën"],encodeOffsets:[[117078,22678]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xin_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6528",properties:{name:"巴音郭楞蒙古自治州",cp:[88.1653,39.6002],childNum:9},geometry:{type:"Polygon",coordinates:["@@˜@ÈÒĊanwŎV„™Ȯ¦ͪŃĢ„ÜōȂçČéƐżLɆóĊ‚Ċaʊٱ¯²Um»ˌmÈ»V™ʠţWÑůǓ郙ôƑƒğÆīŎī@Ƿ™wô™˺LÞ¯ƨVǪуšĢ™ȘV°wĢŽôk°¯ƒ»΀@Ȃ»ĸŽǔ@΀ƒ͔ôôLɆó̐ÝɜLɲōͪƒƨóŤK@ī@IU܃ÛmȻţǩÝ˹ÛljťǓǫō@Ɲ²¯VçōKͿŁΗÇţ»ƽ™ɅƑLÓŏÅÅɱV@ÝĊU¯ÑĊĭÞLšÞŎJ±̃XȣˌōlƒUÈ¯ŎKÆƅ°™XÑܱnŗġV¯™óaUƒƧUōŁ„Ñ™±„çɲ¥lĉkğ°ƒk¥˜ƒnğţL¯ÝÝUƽĬ΁lķ°@„ō„XÿݯV»ŹLʉÞɱŤĉó°ÝJ™¦ÝKÝ£ţܙÈĉ@ƒxǩUċƑ@ky͓¹™`U²ĉVġ»ğa¯¥ť@ĉ™‚ó@ŻÛÛJƒw¯nó¯ġWƽʩķÝɛwĉĕݼȭÞķō@ó£Å΀ƑޝôȯÞ¯Ȱ™ÆōèĉXǼó@ݚnºƒĸ„ÞVƜĸȚUʶõˀĵĖɱŎÝĖVࢰӒѢ°˘nϚVˌ™ÈmɼĵŦW¤öʊõʔ@°ÈXVŽ™ènŎȁb¯ǫĉ„±Èğ`ġwōÔğ»mVVށ„Ý¥ó@™ĸķô@ššbX„ĶmV²²`Þ_˜˜ɴbͪȰ„ÞWĸÈŌmބškɲŽÈUÆ»n¼ǬVķĸźô¯°n¦ɄǜÈ"],encodeOffsets:[[86986,44534]]}},{type:"Feature",id:"6532",properties:{name:"和田地区",cp:[81.167,36.9855],childNum:8},geometry:{type:"Polygon",coordinates:["@@ƨ¥šèź٨ΘƑᩄbUࢯÞĕɲōĶĕöʿVʵķșUƛƒÝ„ķm¹Þ™ô@È»ĊWŎçšÅ°ȯȰÝ°óƒÆͿĉ»̽çnƒmɱĵƧºóU™™ƽ@±wóL¯°̻L±Æ¯Vƴķb¯VÇ¥ğ²Ǖbk¥ÇKlÅɱġ@у™óK@™ÇaÝXğţxĉČǫķê¯K@уaŹ„ƑKƒ¼¯Vóaónġw™óÞéU™ġbóĉğÇl¹™aUóğKW„Vůn›ÇŋƑ›ķnʇ»óxĉw™çǰÅw™°ċ„XŽ™„ób±ƒkÈÇJ—ƒm²ţx@ÒݎšŦǺn„ó¼n°ÇbUÒ±¼XĸĠłƽXmwĉºƒzÈÜmnxmx²ĖmҚbnŽƧêUºĊêÆVóĖóUĉ¼ÅĬƑ°ɆƆŻŚlłÞLš¼nĠƒ¼@ޙšÞź@ŎÞ°VšɄɴжϼِ͈Ŏ„"],encodeOffsets:[[81293,39764]]}},{type:"Feature",id:"6522",properties:{name:"哈密地区",cp:[93.7793,42.9236],childNum:3},geometry:{type:"Polygon",coordinates:["@@WnŐÆĶL̦ţºź„lxÅĸƽŚ‚Ʉ—Į˜è@ô²ÞUĔƐńV°¯ĸX¦Ɛm̐bƒ»Ɇa΀šĢ™ƐLˤ™ȘÑnƒІljĸÿn¯ĶaŎ¯ĢĕȘ¯°΂œla¯¥™ǕǔwˤӱlťО̻nŻmɃĕċţUw°WUóƨÅţķ°ýV±óÅǓéʉ¯ƽكéōǖȁÝƏůǕw˹ǫȗǓƧǕVý™é@ĬţLƧôͩ„ɱŎɛK̏ÞɅôóK@²@°ōؚ¼lŦ¯ŰóƜÛlV¼ķ¼ƒ°kȰ™Ű„ĠƒǬ™ŚÝŎmˁ`@ÇÜn„"],encodeOffsets:[[93387,44539]]}},{type:"Feature",id:"6529",properties:{name:"阿克苏地区",cp:[82.9797,41.0229],childNum:10},geometry:{type:"Polygon",coordinates:["@@VƚxˌŎÞŎƒ°n„ȂÒ°²VĊ¯VğƾˍǬƨÞÞKÈÞĊVźôɆÞĢèԐôWȲŤVÞĸʶbl‚¯ôn_VÆĸlmÞnVź_ĸ¼Ȯmǖ„šéĸW°°„ĸJ„kʠ¼Æw°¤ÈƒlxɆzČºĶI²ÆǔUš°ô@Þ¦‚ƒUnUĠ¼ŎÓĢxĠ_²ÇĊƒǬ°ŽȂamōšçUÇW@¯öʓõʉX£ĶťnɻšÇUˋmϙ¯˗ӑѡᩃaΗƒœɜ°xWƴUxɃÒˣ¤Ʌwğ„ʉōóÝŹ±°ȗ@¯„ƃ²¼","@@ō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ"],encodeOffsets:[[80022,41294],[83914,41474]]}},{type:"Feature",id:"6543",properties:{name:"阿勒泰地区",cp:[88.2971,47.0929],childNum:7},geometry:{type:"Polygon",coordinates:["@@ɲˣĊIÈ¥‚ÅU±Ċýkō°ƒĉƽó»ĶƽXóʵʵ™ȯƑÅȁɅ¯ĉ@ÇሗK֛@@ˤV֜ʵрƒǬVĸƑŎ@ƆϯÑóŽķ@ʇ»ķ¦έmlÈĸĊX¼WźÛÞÝѸ‚ĢČþ„ĀĊôάVö¼ĊUƨ°°èŎČUÜÆóôVôô޲êȘlˌç°`n²ǬŽĊaš™ƒÛ°±kğmm»š@°ÝɆÛÅÇVaݍVm͔ğôÝÈb‚„@„ƒ™n¯š™ÜUĢÑĊ@źīżWŤÈǖWôŁÆI²ÓƨL@ŽĊX„mmÑÆ»ȰÑkƒĶō@ý°m—¯"],encodeOffsets:[[92656,48460]]}},{type:"Feature",id:"6531",properties:{name:"喀什地区",cp:[77.168,37.8534],childNum:13},geometry:{type:"Polygon",coordinates:["@@Č@°ƒĠ„ôÓô@Ŏĉ@Ƴĸ@Ť£ĢlVôWVóřXĉŤêÞ@ƐÒĢÑlèÈV@šĠIk°ÆŘ@ÈÈĀ@ǶťÒğ@š„@ÒĉlŻ_@šƧĖÅĬōÆ@bźÞnƒƒlVœÝĬšWƼʇ„ƒÝÅ@ÇÅÈwWóĉ±ğz‚ĬČƨƂÝIĉݯbÇÑĉƒ¯ʈV°xUŰĊ¤ƪ_ôÓɚI@lȚXȮ™ŎlɴȘ՘š„¦ɲÆʈ_ɴŽźŽôÞʊŎĠƒɆxˤ£ɄÑVwXƳ¯w›ɛŹ٧™çƧ¦ōƒُ͇еϻɃɳU™Ý¯@ōÝŹš™@݄»mğ™»ÝKkŁżřɅƅƒ¯ÆīĊ»ôVôĕÅUĉéV¹ƨém™anѱĕnwmwnÇۄyĉ¹ŹlŏkĵèķmōÞġKñÔċKÅèĉzƒŽ„ômxȗÿƿI@þÅČÝKݰ@¼ÈVºš@Å̚ÆUċłn„ÝÆǕČĵJm£ÝJ¦@ĊƒxV°ƏLċ¼ǩ™@™m@ÅĢómÇÆğ¹Çš™ÆšĖÞKšx„wô¦ÆÑÆL²ÆƾŽU„ޱŚÅŻĖ@ĬŤÈñ„@ǔÇx„Èǃ","@@VÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé"],encodeOffsets:[[76624,39196],[81507,40877]]}},{type:"Feature",id:"6542",properties:{name:"塔城地区",cp:[86.6272,45.8514],childNum:7},geometry:{type:"Polygon",coordinates:["@@ήnĸ¥ʈ¼ĸ@ôϰÒ@ƅƒōUķƑǫʶпU֛܃LګK@΋ĸ@Æ£ÞġÅĠċšLV݄»™@Å»Ýnm¯š»nŻĊ@nķŃ@¯ómóÛÝǟ¯aÝóȭ¥ƒšōUmxĉbÇї@›bUº¯X¯ÆƧbVÒĉnǕw¯°ƑŽV„—ŽÇ@kx±Uƒšɱn™ŽÅKƒ„¯ƒĠǠU°ɜL@°ƒxnĬ‚ĀŋŎÇLƒŽğšϱÞέƜkôÅĀǕłƒĸĊŤUṴ̋„¦ȂϰÜɨ°x@°żǠÆƈČVĠ»ČL°ÇšbĊÑ̐óÞlĶwބɆVÞwǬxǪţȼÜLŐĶˢ@","@@óKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°ɜÞʊĠğŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒašƒċƨbš™Vğ—w›ġ¯@Uōa™ĉÝJğÑÆŎkŎÞĀlꃦ"],encodeOffsets:[[87593,48184],[86884,45760]]}},{type:"Feature",id:"6523",properties:{name:"昌吉回族自治州",cp:[89.6814,44.4507],childNum:7},geometry:{type:"MultiPolygon",coordinates:[["@@መL@ȰĊȂɆƒÆĊ£„ťôWÓɆbĢÅŎƒÆ¦ČÑW¥°ķU¯ƏŃVē±Ý@ó—ç˜ĭɃƾřÆķkwʃŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱšġôÛa±Òȁ„óèţIVŽƽ¼k¤ó¹ġJmx—»ÝUƒ²™@ÅÆƒĸǫŎ„ĊmŎǬ՘"],["@@Þô°bÞǠôÜôn@°ĸń˜Ƕkłƒ¼UޙKğȂÆÝĢŤķ@@ΌڬL܄K@ˣȂ˭lĉńW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»Ç™VğóřX™ŻKƏŽċêȁèÛŎġƒͩń"]],encodeOffsets:[[[90113,46080]],[[87638,44579]]]}},{type:"Feature",id:"6530",properties:{name:"克孜勒苏柯尔克孜自治州",cp:[74.6301,39.5233],childNum:4},geometry:{type:"Polygon",coordinates:["@@ˎǫĠƽ°UUĉ¯±ȁÑmƒ„¯Ýōˋō™wUű»ÅƑ°ƒȘ@²¯ɳʇ`ɱŃ¥՗™ɳȗōkȭšșW@kəJóÔƩ`ĉ£Vů¯wU°ʇĊ„ÈÒ°aĊÞÞJŁċƧīĠyĊ²XôÇxÈÆÆ@„ÞʈƒÅ»™XÞīU›Ƒkm„ŹÝ@aŎÅÆīƨĕ@™ż`Ċk@љƒĠ@ŦÑ@ǵÇÿ@ÇÅŗl¯ğJ@™ÇUkçġÒƏÑÝ@ţéWĊôŚUŽóXUġkţ¤ķ@@ƴōĊó@óÔğƒ¯„ċ@@Қ¤kôˣŰ͓„k»ƒKX¯ċwƧôğɐšÒôIVƙš¯UķǬķšnŽ™¼ôb°ÒȰVVÈÞ°ƒĸó¤V¼°„V°²êƒlĢ҂Uƨ¦ôȰƴĊVV¼ǖIċĊ„ÞɜéšnČW˸Ǹša„řÈw±īšçĸ¤ĊšôšwšŽĸU̦˜éǖĬ„Āô¼lÞkÒ°x°ƆÞx„šÆV²ǔ»„b°wގȘ¥°n„šŎV@°„„ʠè‚ŰȂb"],encodeOffsets:[[80269,42396]]}},{type:"Feature",id:"6521",properties:{name:"吐鲁番地区",cp:[89.6375,42.4127],childNum:3},geometry:{type:"Polygon",coordinates:["@@ôK„ĉǪa²¼lÜô@ʠê°Ĭ™ôȂƒ²ÑÜbĢóɲ™ĸ¤ŎUô@xƒŽǔ£ъxˎmƒÈÛ@‚_nĕÞōšř„ǫƒğšůlȯ„¯ĸ»U»Ükôƛ°ůkť™»Ŏŗ@¯@±͓óͿ„Ǔ@ķȁ¼Ϳ@Ƒ¼¯°ólġ¯xȗUġšƑ™ǩÒƧUݰ˹Kóššx@ǸōĬÅĬƑĠ󃄚ǔêÆ°XÒʟŤUšÇ¼ˋnn¼±V²°ȂUŌݜbʟǔɅô@żǬaҎÈ"],encodeOffsets:[[90248,44371]]}},{type:"Feature",id:"6540",properties:{name:"伊犁哈萨克自治州",cp:[82.5513,43.5498],childNum:10},geometry:{type:"MultiPolygon",coordinates:[["@@ĉ„ÆŘȁ̐mÞ¯ĀX°±¼@ƾ¯ƴ°ŎÝþŋ¦WÜÞbȂĉźUœÇmwVUȂóô@ȰÝ΀nÆJn™ƾ™ʠ™ŌLČóǪ¯œ¥ǔaǖšŌaôÝĢLšx„ƒÆLšɲm„™²VlwÈ@˜Uƒƒ°¯ǖxĊmUÑƨa°Å°WV¹œa›ÇɃÈm¥°¯ŹóĸķǫUm»Å¼ÇVɱ™l݃ŋnķÇÝX¯ƒͩÇɳa——Ý`±_U±ĵnWƒ™a@™ĸóšķ™¯ǓV±ÅĵJċ¹ɅykwDޝ£Åxʟ»ƒlķI¯ƒX¯ķ‚™êǕƒȭnķ»Ź`±„kÞ@Žš„Ýô@Þ°xšŤŎIƨÆUxōš¯²ǔĬǬlUŚ"],["@@ÞĀlꃦ¯ĸŤKޙšƒċƨbš™Vğ—w›ġ¯@ţƽJ"]],encodeOffsets:[[[82722,44337]],[[86817,45456]]]}},{type:"Feature",id:"6527",properties:{name:"博尔塔拉蒙古自治州",cp:[81.8481,44.6979],childNum:3},geometry:{type:"Polygon",coordinates:["@@ήƛϲÝĠ™„ÈKŌōÿmī„w@¯ɛKV¯ğǟ°Ƒ™wġKóÞŋbǕ™Ǔb›¦ǩ°ċôŋKʟšƽšmšÅImŽͿŽȯÞó@ȁôUVnx›ÈŹVȁĊÝabŻ£¯°l„óxȂŤĸkĊšÞyĊêĊmĢxV„ƨÈŽĠX„ŽΘÆĠÔź‚Ɇţ°LXƾŤŤb"],encodeOffsets:[[84555,46311]]}},{type:"Feature",id:"6501",properties:{name:"乌鲁木齐市",cp:[87.9236,43.5883],childNum:4},geometry:{type:"Polygon",coordinates:["@@šŽWŽôŚUĠȚl¼Ċ¼ƪǖ@źȘƆ@ýlܚXVŘޙš¦V¼kĖó҃èkĊȁˮ֜@ǫ՗nōƒĉǬō„ķÆÅš@„±ÞV˜¼nwĢIôºl£ƾ»UŤJôçšó¯īʟéó@kÛ±»ǩbƒĊóLҍÇǫb@ŻɆóʠǓ›aŋÞȁVʉłĉbĉɅô"],encodeOffsets:[[88887,44146]]}},{type:"Feature",id:"6502",properties:{name:"克拉玛依市",cp:[85.2869,45.5054],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@ɜÞʊĊýVaŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒaݚţL°ķóKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°"],["@@ƾIŤ@UUwōa™ĉÝJğÑÆŎkŎ"]],encodeOffsets:[[[87424,47245]],[[86817,45456]]]}},{type:"Feature",id:"659002",properties:{name:"阿拉尔市",cp:[81.2769,40.6549],childNum:1},geometry:{type:"Polygon",coordinates:["@@nIÇŃÛÝĊÑĠƏō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ"],encodeOffsets:[[83824,41929]]}},{type:"Feature",id:"659003",properties:{name:"图木舒克市",cp:[79.1345,39.8749],childNum:1},geometry:{type:"Polygon",coordinates:["@@VéVÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ"],encodeOffsets:[[81496,40962]]}},{type:"Feature",id:"659004",properties:{name:"五家渠市",cp:[87.5391,44.3024],childNum:1},geometry:{type:"Polygon",coordinates:["@@„çôÑlĕU»™¥ÝšUŗ™WkÛ@þVńÝĔ@ńÅþĶUX¦Æƒ"],encodeOffsets:[[89674,45636]]}},{type:"Feature",id:"659001",properties:{name:"石河子市",cp:[86.0229,44.2914],childNum:1},geometry:{type:"Polygon",coordinates:["@@lŁ—ǵm‚ĉ@mż™¼n°ÞmƼš@"],encodeOffsets:[[88178,45529]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xi_zang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5424",properties:{name:"那曲地区",cp:[88.1982,33.3215],childNum:10},geometry:{type:"Polygon",coordinates:["@@ƨʔĸbܺÞwnxźbÞ°ô@„ĶŽĸIȼĊJŎÈôUšÝƒ¤ǔLސŎ@ĢŽȘblƒôL„ÇźçȤôLš¥ÞIÞ¯Ķxʊťƨ™ƿÑĉXVķŦ¯ȂKÇǕšÑ¯IUš£¯Óƿ£VĕōÞÿÆwƒƑ„£ǖxÞĕ±ÇÝaUÑȃU¯‚UōÈ݃wWŁĵ™±Ý„óĢÿ°IÞ±mÅ̝mÿ„¥°UnÑŤĢĕĶwǬŻͪwŎ¼źÇĢ„Ġĕˎٰóƨ¼Èa‚m@¥°wǔ„ǖ°ŽƨÇŤœšġƨ„ŎŃôbÈÛŎĊ°@Ġw²ÑÞJƃÆb²ƒ°êĊUނlȲƒV„ÈKĊÒĸĉ›»ÅôťUÅǃk¯@ǂÑklǁÅl™Ģ™VÑóƒ@°@„ÛĸƒV¯ƒÇĊ™n¯Uĕšƽ¯m›¯b™È@Ò°Ĭƒbĵ›¼„‚kxķýÇJk£ÝaUÑÅóĶǟkÓʉnĉƒÝ¼Ƒ„ó»Þmn£m™Č¯@ƒȮÿV¯ĸƒ™k@Ýówƒ»ğ„ġ±ǓLō„ƒšV¼Əèķĉ™è±b@Òţ„UÑóakƒl£™Ó@¯L@™ÇlUóȁš¯aġÈÅĕÝLķ¯Ė¯@WĬ—x‚ÒÈnW°ţôU²ǓÓġ²V°¯ôƒǔÝL—ċšk™š»Ý»Ýš¯ÞƒVƒwۄÝÇōͩÈĉċ»ĉm¯£W¥ţKkóġƏW@¯±kōŽÈ›b@җšÇaƒÆ¯a™„ƒkóŽÛƒÇ¦Ýa¯šÝ™ĉ@ǻۄmƒǓxķƛ¯lVĀÅÞġb™™ÇJUÅV™ĖƑW™zō»ōšƒW™n@è¯ÞóVkwƩnkźÇބҙޯƒƒýğÇUxÆÈnè±bĉÝ»ÈуwšwÞ@m»ÈV@ýÇ°ķ™xƒa„ݯXċ¥ƒÈóW@ôkxlnxVÈóĊkŤġ¼@°¯ŰƑL̻۱ŎÝV—Þ›VƒÇÞŎÇakƞ‚š@èğŎĸżšƾ°ÒšLÞôĠKȰĖźVÈÒĠ„¤™VôšŽU„ÈþťL@ôǬÞlÜÈnÇÒUŚ™@šĊƨW°™°Xƒ‚@ČÇþ„ƴĉÒķ¦@ŽĢôWĀôłUÞĢǬ™ź°¼š@ƒôV°„bUÆnzm¤ƽĸƒÈ"],encodeOffsets:[[88133,36721]]}},{type:"Feature",id:"5425",properties:{name:"阿里地区",cp:[82.3645,32.7667],childNum:7},geometry:{type:"Polygon",coordinates:["@@„Çƾķn£myVŃaU¯„ó™@¯»šŹġǫVÝóŁXÿġó@ĸ¥ĊуƳÈý@ċ„Wš¯X¯ĉƧ‚™š@VřÈÑÇmkÛǫÝ@óŦKÇýVƒ™U󚏃£ğÇÑŹUȯĕğLÝó™K¯Ñ™ƽķŻĠō@灙lƝÈbƍÈ݂„œU˜ÝÞU²ō̼ůƒK°ů@¯UK±—ĊƧbōÇmçÈġƒóšÅób™™źóš¥kól™ç™KôĵUƒÅ„VŃķ¥nÅŏm¯¹Å‚™»@ÑǍóxÝkʇȤU¤ķb@ƒ¯ĊÇx¯ĸĉKm°šĀk¦l„„KnĬȀƾÛ¦WÆÅmNJĉ°ōUţ¤UšŎ°šŎKÞłÆ„Ǔ¦ƒÞ™‚™„ř¯bmUÝl¯Um™ğl¯£șwŎǫaÝnĉ̓k@¯™K™šō»ĉn™aÞ»ťnkml™ĸ¥UŚŻkÑťƒĉV™ôó°LôīĠU„ÿĉǕÅz±Kƒ¤„²ō¤¯Ė¯UÝ¥Vĵ™óÈťÝwķșÑk¤ó„™ƒWýĵĕ™„VĠƒV󍃎Ǔ„ķ°k±VU±ţ¦UǟÝřJVљ¥XUċUŎlÛƆǕÆȗƆ¯wŏÞÅ@™šĉl݁óŽƒÒ™nUôńlxólÝôێ±™™LÛôÝL@‚ġ¯X¯ÇUżóa󤛼XÒġŎóLk¦‚ôżĸĠ™¼™KġƆô¦„ÆƑÔĉ͝ImÒ°¦n°¯Þl˜ÝČn„ƒÒšKĠޚĕkƒlýƾťœšôI‚ĖŤÒnƜm¼¯lnżóÞ@Ůó¦™ôƽĖċŚn°Ý°ôÈUƜƒblÞóŽ@Žǖô°UÈƆ°X„þôŽô‚lѢšŽ²Ėm¦°š@¤™XŽĊblܚzkºƒĖmX„šŎWVšóÞn°lĠxȚa°»żLźƒ„b@ưXĠÝȚxĊĕŤaȚ‚°È@„„@èŤ¦Ü¼œW˜ÞkŽÈ@V°lŤkŎ±²¦ƐUšlj°aÈÑŎb̃ŎbÆ¥ÞIȘlššôVÈU‚™šb„kɲĶn„mnXb̼òƾĖŎ@̐ȂÑôÓĠĖʊšĊÔ"],encodeOffsets:[[88133,36721]]}},{type:"Feature",id:"5423",properties:{name:"日喀则地区",cp:[86.2427,29.5093],childNum:18},geometry:{type:"Polygon",coordinates:["@@ĶĖXþš„ôƒl£šÒĸÇÞxÇŦšôUĶÞ¦°V°ĕŎ£ƒ±„£²LÆyĊǖƒĀğVóĬ¯KóôUš‚ĊŦ„lҙżVÆķ¦kšlnŦmݼšbĊmŎ¼š™šL@°„lĊĵÞmǬbƍȚx°¤Ġknš°VÞkVn°aƒŚš‚š„Ýǔ¥ÅƒÝŁōL¯™ōV™Ť£ŎVĊ¯nljƏXÅÜ¥ǿƽmīƒLkƒl¥™ÿn¯ĊL°ķÈw°ĉ@ƑĸaV£ʈȣÞlôwȎ@Қ¼Æ°ºŐnmÆĸ¦UńƃV„ó͚LšèôkŰlĬ™¦Źôššôa™Æ„ôÇĢnèŎÈƨa˜ĉ²‚VLĢ»lţôĉUǂwkmlw@óôX„ÇȦ°WƒÞ„b‚wĸšÈ¯@þÇUn¼Ý@™x„xÇńÞ¼Ċ޲amçÅÇVwĠȄþ°„šÝƒÑÈÝlŹƪmlxôU°Ý@çšm„XŎ™Ŏ¼šyƒXšĕÆUVÈIššĢaÆÝUÿ°kĸƜǔwn„܃ȼĊ@ޚ°™Þbȥ܄ô„lšƒ°b„ÅÈb˜™@ќa‚ǯUU¯Vġš»ƒ™¯aV¯Ç°Å™mnÑŤçǬVǬ™±ĉ¯¥Vĕ¯Ýk£˜ō—w@±ġÛ°ÇVїƒ@ۘa@ČL™Ƴ™„ƒÇa¯¤ÝIĵ¼U¥ƿōķÅţŻókÝóĕ‚¥¯™U»Æ£X¯ġŃÛkݰV°ó¼¯èWôÞĖ„ȎƒŽkĀƧĀówm¥¯JŹÝJݙōVVŁaݐƑ@ƒ˜ğŭǂ¯_ƒ˜ĵ—›VnxŃón›ƒĵxÇĖĉVÝÈğV™Ò󃯐±Żĉ£ķÆÅL™Ljĉý˜ţۃ¯VƒnV¤ÝÈ@°ÅÞݤ™ŰğŁm¦ÝxóKƒ¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑŽnŎDŽV¼¼‚ºÛ@m¦ƽ„ĉmm¯ÝKÛç¯bŏłĬ™bƒ¼ÅLmŽ„xť°ÅU™šÝXkŽÝmĉ¦W„¯K„ÒknÝaV„Ýè¯KɅńÝKnÞ¯¼"],encodeOffsets:[[84117,30927]]}},{type:"Feature",id:"5426",properties:{name:"林芝地区",cp:[95.4602,29.1138],childNum:7},geometry:{type:"Polygon",coordinates:["@@‚VÈłVôÈk@š°K@ŽšÔk¤l„ôbVÒŤƒ@ѲašçĸĊƐçU»„™ŎƒǔK̲Ġƒ„¼ôx@ޚlƨĬ„Ul¯ÈLV‚šÞJ„°Ünʊ„wÜbXê‚VÞ¯°ššanaU°wƼɴÑWѰmÈýÈam¥Þ£Ť@„¥ôblÞĢ„ź¥ôxÈÅmݚ™ƒĕŃV»ĉōŤōnóƒ»ÈīķIUƒĠѰġĸLÞ¯VÒÆ‚@bš¼WôÈ@V¼ôóŤKÈÑU»šwVǫżnWÒÈx™¼‚lŦ£ĊōŤx²¯@ƒÆƒU¯šçÆ@„¤°£„é°k°lšůÈó@¯ŤÇÈĉƒkkÿó¥ÝXķљÜ@ÒóŚÝ¯°ĉówÇ±¦ÅJUÒĉĀķw¯°m˝„±akxÝÅnƒ™»lуK@¯lU™¯UVѯóĊ¯mōğVǓƅƒÞƒWÝÈÛ@ƿô¯ÜġzÅþ¯ólmôʇġĊÅUͿřŏȁˋŁóÇˡōƧƒÇb™w°Ķôk¦šÒƒnUþġҙÔkǔķèó@ƒ²@ŘōńĵyƒzġaݤÅIƒ¤Ƀť¦ğѯ¤ķbóš¯ó±ŽU²°¤ČÜVnÈÆ‚„ŚŎ°ôĢ„þÆzèVĀǎĀǘƒXŹÑ¯¤ówċķk¦šłUÒġzÇ@ƒ™ÆÝx@²Þ@Ƥ„Uô¦Uš°x„U"],encodeOffsets:[[94737,30809]]}},{type:"Feature",id:"5421",properties:{name:"昌都地区",cp:[97.0203,30.7068],childNum:11},geometry:{type:"Polygon",coordinates:["@@™ŽVĖm°ĉš„ÈU°ķ„ƒÜ¯@@ô„UÒġškš‚ÆkÈlށÒ@Èl°È„VÆóŦƂœ¼‚a„ÅĢ™Ʉwnōw@¥Ŏ¦°ŹÞmVš°wnÿƒw„wÝw@¯šmÞŗ°wĠ˜ĸkÞğlĔ²¦°@„ĕĸwVóšal@nĢÇĊn°@¦šŽźUXçǔůĸVš™ÆK„ÈÝĠš²ÅĔô@lšŽÈ_m˜„zǖl„šaU¼ôwV°¯¦‚ĬÈa„l@Čǎ„¼™„nŽ˜I„xô»ɜ@ƨ¥ɆŁ„ŃǪȁkƛƨȍʊȡóĭ›@—ÈÇVƒůރĸƅmēƨť™ÅÈʉVǵ°ġVŭÅɧ°ÿnɛš£mƒķ²ŃóÑUĉ°mÇ»¯@mxUèţ°ȁÝç„ġU¯ÆÇţÈ@°Çô™Ű¯k¯lƒê¯¤ƒ£Å@™èV°Å„@„±°ţwĉŎť¤kš»ÇwXÑŻmUǬ™xV¼ÇÒţLóôU»Ç@X󙻂a@ÿŁUÑݰķK¯ĢğÒV„ĸJÇĬ„¼môţŎĊŎU¼Æ„„Ė™šnÞÇÆówʦġƒkÝóaƒ¦ţ@ݤn¦ÇbÇþ¯nXÒɳÒÅ»¯xVmb™b¯™Ý°UWéÛaƒxʉÛmƒ¯ÝI™‚UÇKk°ƒVƧīķ„U°ȭĀ@„ċ°nšm¤Ýnô¼ƒƒÞ»Ċ„ʊmlÔĵǠÆôVÒÞbl¤ÈIĸþlwƒœ»ĶŽ„a¯ī@њǰanœƾ°"],encodeOffsets:[[97302,31917]]}},{type:"Feature",id:"5422",properties:{name:"山南地区",cp:[92.2083,28.3392],childNum:12},geometry:{type:"Polygon",coordinates:["@@°ÞU˰¦²ĊôÇÜLǖĀɜŽȘŰÞLĸźêÞ@UÜUŤ°ɞ¯Ü„°WŦĀmŎ„¦ĢyVљŁl¥Čĸôx°£źÒ„Wȗ‚ÿȍUÿ‚çÅyƒýóġō¯ƒřŁmÇÛUċޝ£V±²°ôô™ĸa°£ĠÒŦ¥ɄŽ„£ÆJÞ£Ģb„yĶzŎŃ@ŗ„±ô@ĸçlǓšÓĢÑVý„m™Ñl¥ĵó‚¯̻̥™ƛǫÝһÇƧĉyţ¼ҍēVĶĉŎ°ĸmšÞVÝĸ™ÒÛaċ„ó™ŹĖƒèÈÈl¼k¤ÝX@`ސŏ¼Æō¼ÇçĉKUÝÝ£ğ¤@¦ġl¯Òġĉ¯óš™móxÝÞğVšƴċK@—b@ܘ„UÒ¯ÈĢÜ@²˜x—Ŏl¤"],encodeOffsets:[[92363,29672]]}},{type:"Feature",id:"5401",properties:{name:"拉萨市",cp:[91.1865,30.1465],childNum:8},geometry:{type:"Polygon",coordinates:["@@Ŏ²l@°‚XĢƐlôŤLX¦°¤ĊnȼÇĊŎͪÞÈ܃„x„U°Ýޙ޼™¼lšČ™˜ŽÞK„Ǔ°óU¯Ģ±ǔÔV±ŤóX¯ÇmÑ˜wXī°@°ĕĸÞKÆĖĢǰbȂ™ÇفUƒV¯wV™ó¥ƒVÅ£Ý@@±ÞwšÅ‚„È@ƒ¥nōťÿ¯Xۃɝ°ţ¯ÛVVÝ@ŹéķÝKȗůɛǕÿÛKóÈǫšǫUţèmҚn¯Æ°ÈU‚°b„š™¼UĢV°°V"],encodeOffsets:[[92059,30696]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/yun_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5308",properties:{name:"普洱市",cp:[100.7446,23.4229],childNum:10},geometry:{type:"Polygon",coordinates:["@@U‚ô²‚a@޲²Ķ¥œV°šĶ²bl¤kVxl‚@œ°‚ڲ@˜„„y„@ô¦¯„@xƒxVxU„VššbVšÜm¼Ŏ„„ĢmºXXWÆ@œšmŽmXU°ÅÒm¼Þx°w„@°‚XêĠ°»nV°U„l@k„@V±ôī@£‚ƒČŃÆ£„KÞý@¥‚k@y„a@—nWV„UVƒšwƒmƒ£Jƒknm@wmkn‚X„˜šX„¥mUUlUnbš¯°ŽnkƒVInlIUw°n™mk@@mlanXlanmšk@wVWUw™_@éĠašnmUaÜ£ƒmXƒ¥¯@@„óUmݯ¯ÞÝlKnxô£š»„»Ġ„J°aV„UÝÿV¥ÛbƒI@wmŽón¯yÛL@ƒWkŎmș`IWa¯K@¯mUnmaXm™bmak„¯ŽƒĢ™ÒÝm¯mV¯KÇb¯KۜWW™X@a™V™knċLUWV™kXóW@k™a@ƒób¯Uƒwmb¥UUlaU¥U£ma횃KXkƒmÝ@kwmѯk±ċbUUVakaġ¦ƒƒkL@`ƒœ™a¯xƒm™Åƒ™LUWƒ@ċnŎUV°LkL@b°°@¤š²ƒ‚šnôôk„l°kè›ÒÈzV¤È„WôôƒnV@„ƒ¦@¼Ux"],encodeOffsets:[[101903,23637]]}},{type:"Feature",id:"5325",properties:{name:"红河哈尼族彝族自治州",cp:[103.0408,23.6041],childNum:13},geometry:{type:"Polygon",coordinates:["@@°°nÞôV@ƒ°@„¦WŽ„nÛ¤Vbmn™ğb@êš`VxUX@xš„ÆÞUnn˜WÞĸ̃šÈ@ŽÇè@zÛÜWšÅêlš²„˜KnV¯ĖĊx@bk@@„°JÆ£Èbl„nnm°nlUkVUUwVm„Kn„‚nVŽÞxVLX¥laX@@xl@VzȎVmšk@b°šÈĸmŽV¦`W„XšƒbUb‚bX¼°x@ašVVkn@lþnXUlVxŤÅ„y‚IUƒka‚IŎĊ@lXx@b„z@‚ô„ƒ¥„_V@l‚n@„ôy@al_l`nmƒÈ»@kƒmXwWK™U¯»™a™Å@wƒmUÝKUa™UUƒ™wWƒ@w²»@kƃV£—mm£VKkÑV@@»nwƒ¥™ƒ@kƙnllIVlnLVakalknJšWmnaUaVÑVVލn¥m@ƒ„¯Uÿl™@™™™VçƒaXaV¯UyVLVkš@nJlšXLlŽkxlbla²Òl@nVJVkšx„KlkUaVķÝÑU@Åm¯@±™Uó°ğńķĠmU™Ñ@ǯ¯Å¼@nml@°¯¯`@w™£@¯Çƒk@ƒ»nmċ¯U»™I™Ž¯LÇĶÛn@bó°™U›šwmޝ„™Umǯa„™ƒ™ƒI@ykIƒVUޝbƒIğŽƒ¼™¼ó¤mwkLÝÞ"],encodeOffsets:[[104243,23429]]}},{type:"Feature",id:"5326",properties:{name:"文山壮族苗族自治州",cp:[104.8865,23.5712],childNum:8},geometry:{type:"Polygon",coordinates:["@@šwô„š@²¯maUmôUÆxš@Xš˜bÞInlVUVw„JVaU„K°¥„xmÞXnlKlnna°@ĊČ„ÆwUmnkl@°ƒƒ£nyn@VV@Vak™ƒ@@kÞ݄bmx°Vnw°klÞInĖÞVlKl™@Xa°„„KlV„U@šJnx‚U@ÈĢbUKlm@ak_‚wšanWUk°ƒl»„k@Wk@lwU_ƒ@UalóU¥ƒÇnƒ™kJWƒ@mVXx±bƒK@nV±a@™Åa™£ÝK²ƒWknamKknǏk¯ƒaV™™V¯ĀƒU™„™Ò¥ƒI@mm¯¯xōW@@`k@ó»ƒUU¯lm£ÅWlĵ„w@mmwÅmWU@y±U—xmwU„¯Uƒ¥Ý¥¯£m@kŽÇVUV°VbklƒL™wUlUIm‚k@±ÑkbkalwkWKk™mI™@UlUKVzU°Wb„bU蚚@škšVƒ°@„n‚m¦ÝŽUUUÒVbmbXn™‚mIkllbUbmKUkkJmkŚ@lš„„¦mx@¼U@lÒULn¤˜nU¤Å„@l±¼@xX„šxV„šVVbÞLVŽ„n@xšÆšb°¼šV"],encodeOffsets:[[106504,25037]]}},{type:"Feature",id:"5303",properties:{name:"曲靖市",cp:[103.9417,25.7025],childNum:9},geometry:{type:"Polygon",coordinates:["@@ȦlKÞĕUV¯Um¯„ÇVUnVVUƒĉn™ĊÇƾLn°°È„JÆw„@lbÞa„¦V„XJ°¯W¯„aÞJVkUša„ƒ@lKnÅmWUk¯a¯»@m±@уkkbWWX_WÓU»_l™kÑm@U»m@l@IWċn¯l@VanV„UV™UVwVx„KȄVmUē‚@„ƒn@VÝÆL„w„VVwnVlmkUVÑǰka@k™ÿÝaÞUl£™›—ċĕX±±ĉƒa@UnVnalónk@wl™UVmkÝJ—aW™™@ÅwóVVnnb±°™@óƒ™xXLWx„n@lǼn„m‚k_k`@bózƒ‚m@kU@ƒ`„¦óƒ@nWš@ÜÅXWw@ƒyƒb¦@ÒlnUb@x™lܐk‚@²Ç@Uƒ¯bmy@kV@bƒb„¦U`lLVx@b—Ll¼Þ¤@„°VVބU@WސUb›J@nnš@lnnm„šxUŽƒUUbƒK@šÇwklkUƒVWakn@ŽlbU@@„ULVxkKUn‚°¯Ò@¼™„kmƒ¦m@kl™Ȱ@lU„l¦„@Vl°wšnnþĊUÆbUx™b„ŽV„šĖU°„a‚nnašV„al@@b"],encodeOffsets:[[106099,27653]]}},{type:"Feature",id:"5323",properties:{name:"楚雄彝族自治州",cp:[101.6016,25.3619],childNum:10},geometry:{type:"Polygon",coordinates:["@@mҁXU`Wnšš™@Xl±¦š„Uxnbl°knmKUx„„ƒxVôUx°¼ôÒȄ°JlnÞKĠœW°¦ƒ„Vx²JVwš_°¥@UV@@wnymknK¯I@‚™²b°ƒš£V¥šwU‚V„¤nLškÆJÈwôô°„l»Č¯ƒġVƒUU@@ƒ°ƒƒÝXl@U»°Å„@U„¯@w±¯VmUUlm@m™„ÑnIVyUwmak£Vwm±—@Çw@nƒ@UxkwlÇnL‚mkř@±Žk™ka@kóJV¯Ç»U£lw¯™Xalbl¥¯UXƒ@a˜™UaÈL@ÇVIVƒkaU¯mm™akLWkUJ¯Umxnšƒ@ƒkUx¯xƒ„mWÅīÝkkbƒŤƒbkxWmXwWk¯wƒKkƒƒLŤċń„@¤óĬU²ƒ@@lƒk¯VmU¯¼@xV@k°l°kbUš°nm‚VnUš@°„š„UVèރÆbUÒÞnU¦›V—¼lô„@Vl"],encodeOffsets:[[103433,26196]]}},{type:"Feature",id:"5329",properties:{name:"大理白族自治州",cp:[99.9536,25.6805],childNum:12},geometry:{type:"Polygon",coordinates:["@@lbœKVIUa˜@²m@b™xôÒÜxXLmbnšl@š„„K°šš¼k„Uô‚xôlV¦nJ„Uš™Ænšm„@šx„ÆwšbXšÆôô„LUVwôK@wlmšaVwœ@WknmƒIUmlnJla@_™@kÝmKUašÑm¯Xw°aUaVl»²JV„bÆJkôͲVVk„mšbVwUó„wƒƒVwnLlmk¯maVw™ƒ²¥Wkš@™™XmV_‚WnÑUkƒ@k󘻜UV¥ÝmVÑÅa݄UçƒVƒ™@¯V™Umn¯mV™lak¯l¯U@@wğŽW鯁ƒ@¯xÝw¯š¯Jċa¯U¥mLU¤„bÞȤƒbÇLWUwmIUVW¼kbš`U„Vb¯L±ĊÛkƒÿÝKkwƒKţê™UĉþƒÈƒV¯ÞVbUްKVšk²Ý‚mI—ƒmV@kƒm™UkšVxm„¯KXÈķJU¦V°ULWxšL@môƒšb@bkx±LnVUŽVLnkÜWnwlLŃmW@kkJU_ƒV„šWĊ„Þ"],encodeOffsets:[[101408,26770]]}},{type:"Feature",id:"5309",properties:{name:"临沧市",cp:[99.613,24.0546],childNum:8},geometry:{type:"Polygon",coordinates:["@@‚xĢ„l`²X°ŽV„šx@x°Þ°KXašğUњW‚bnIl`X²°b„xl°„„šV@xVxk¦mb„l@xšXV‚ÆzX¤™Æ˜k°„kx@lźêlaX»VUnJVx‚XÈK„aÝȣƒaV£nKV¦°‚Čb°I°™n»ÆÑV¯nWn›™@ÿXÅWWn¹ƒġōƒn»‚ÛU™™aU™VƒUw„w@w°ƒó¥ƒ@ƒz—ƒ±@ř›¯@kUwlk£±aĵޝ™›Uĵ¦±±@bó±VÝ@ó¤ƒw¯I@mńóm±XޝIólƒK@š°Ullb™zkKlln@@ԙºƒUmVk²ôҙx™ŎUVóLƒb„ŽmÈnŽmbnl‚a„x@z„@Ǝ„¦kš"],encodeOffsets:[[101251,24734]]}},{type:"Feature",id:"5334",properties:{name:"迪庆藏族自治州",cp:[99.4592,27.9327],childNum:3},geometry:{type:"Polygon",coordinates:["@@W™Xwƒ™@akk@y›—k°īX¥›Uóķ¯w@n»UaVaUۃ¯ƒmV¼k‚™Þċô@n¯xÛÒm„V‚¯Ô@xƒ‚@šk™wm™Åa@ƒUa‚݁¯VŃyV„a@ÿšn»ÝVmank™mmÞÅôƒ@n£±›ğzÇmU¦™Vm„nÜmbn@°nV@xmzÅ@mºV¦k°ln¤š¼õô„n@xkƃIUxUš@Ťƒ¦VšmVkmkXW¤XzVx@ƚx™¼ƒÞ¯b@lVš™ĸގV„m¼XŽm¦V„ŽÞ@Ǝš¹Vón¥ÆKn„‚KX¯x@èĊȱłXšaÆxnlV@UÛlȻkğV¥„m²ljmÅÞĕƒƛm°„ÆmX¤mznƃŽV¦ÞVVb°bnÞWbnްl@V„È@„‚VĵĊ±@ó„InxÆw„¥@£Þ›W¯ĸ£UƒUK‚ƒk±akkkbmWmÈķ„aÆÇU—ȃÆW@wmknmU¯"],encodeOffsets:[[102702,28401]]}},{type:"Feature",id:"5306",properties:{name:"昭通市",cp:[104.0955,27.6031],childNum:11},geometry:{type:"Polygon",coordinates:["@@mƒnK@wmƒUř¥mšóXǓŏmX@Ž—VƒmL@xţ™nk@mlUšŻÒğŋ@ƒL@mmLkm™š@b™XŎW¼ka¯lÇŹ¯aÇ»™ÝÝ_@m„@@a™@UklwUm@ak@ƒb™UmbmƒbV¯™ĕUƒƒšaVwÅaĉVmý™m¯xUkƒ@k¥VƒUXƒ¤VÈm`@„—ńÇÜ@Ākn‚ĔkƞÆĠ„™Þš‚U„VôƆÞI@ŽUxƦn„l@ĊĊnxUÒ°¦Vb¯WUnWށIml@xn„Ubô¤‚¼ÈxlI„»šKVš„@ÈԂJkšU˱ÆVb@nœ„VÜVUVƒšL„wĠl„kn„Ġ@nx°¥Æ„²mUwƒ@m™mÅUl¯UњÑUm„Lll„Il±š@VkwƒW@w°@U»™kUóI°ƒ„»ĢтL„™š`nUĠ²lm„bôV@n„JUxƦX¦l@š‚ŎUƒV„@lV„KVřV£UaÞU™ƒnW@¯VU@ó™"],encodeOffsets:[[107787,28244]]}},{type:"Feature",id:"5301",properties:{name:"昆明市",cp:[102.9199,25.4663],childNum:11},geometry:{type:"Polygon",coordinates:["@@n@Vk‚VUn²°@xƒ°Vƒ@¯ÆV¼k@WŽ„Þ¯„@„@‚VVU„„Ģċ°k¼V„Ċxœ¤Ōœx°mVkƒÑȏšL‚°„x°Xœ°VmĊLVxU˰bX¦VW@kšȯlkn@„¥lnšƒ@»°Ñ¯VmlLUwVK@ƒV@ka@lmXb„UlVlkÈx@™„LVa„VV™wnƒmm@km™@mœIVaݏ@XƒVUݯU@ƒÝ£k»˜K@aUwkKV_ƒ¥„a@alU@nz°aV„È@@±lÛšk@wVakm@т¥„a„z‚@XxÆW@ÛX™@m@ƒy@aWw@kōĉJlbV„JƒzţÆUwVkmWkým@Ul™U@b¯wVºƒU™VUêšĠƒXUaUbVĊUŽWXUmkK™™WnUUU™V™ƒƒVV™Ý@kk±‚™¯ƒƒLkƒš±WkXlVklƒ@ƒwXbmLƒ›VUIVmk@Ubma@kkaVKUƒ™kmlXLWn™J¯ÒĊ°@zkºlLUŤn@@n›ô@lƁnmKkÈlxVw„@@mÈx˜@n²Uxl¤nbVxUzmJƒÒnš"],encodeOffsets:[[104828,25999]]}},{type:"Feature",id:"5307",properties:{name:"丽江市",cp:[100.448,26.955],childNum:5},geometry:{type:"Polygon",coordinates:["@@l@™„@w°ÓUnƒÜѰw@mČóšÝlU»n°„„VÜUbVbm¼@ްxôĸœVW¦¯Ĭlœ˜@zll@b„šWxXš‚a„X@ÆĠÆaXwl@XaƦn¼˜Jn@mnKW¯È»V¯°ak™VanXVwl@VyUĕVU„bÈīlaUk°ƒk¯lƒ²V˜Ukƛô@ƒ„I@mVwĊa„™ƒVaka„™ÆbUŽVLšaXIWKUw™ƒ„aWÑÅKUaVk°ƒ@Uw„ƒ¯¥›XğÝLkm¯Iǃóѯ»™aƒnUl±UĵÿlóÅIƒaU‚±Ik¼UŽVb¯bWxn°™ÒVbnLlޚ@@`kbmIkŽVn„JmnXl›@Ux™bkn@xóLUxVŽƒKóóŐW™™aÅxƒŽ™wƒ@™nÅm™šƒV™„ƒôX„ƒLlVU¤ƒb¦m¼™Ž@ƒbU‚„zUƂ°ÞVb@„Æbnššx"],encodeOffsets:[[101937,28227]]}},{type:"Feature",id:"5328",properties:{name:"西双版纳傣族自治州",cp:[100.8984,21.8628],childNum:3},geometry:{type:"Polygon",coordinates:["@@l²°ŽnÒlxÞ@„nWl„Lĸ™nbV¤V¦kbVV‚¦na„x°Vôa@„šb@lôXlWUšVXČKlmššU@bšWXXܛ°LÈa°LnU°‚ÞnšÑ„ġ°lƒnbšaƒ¯¯KWƒœó@kmK@UšĉV@k°„VV¹„a@y‚_ċl_nÓlL@anI@ƒóWl£VU—ƒl™kĕl™šKVw„U@™kVƒam¯ÅL@bƒ‚Ýk@Vn„UbÇbÝwÅ@ċ¥¯lk‚¼ÅŽ™Ò°b@¦nlUn@ŽÇV„mƁbWôU@ÝÅōm™¯ƒaU™™mk™WWw—@±ƒ™n¯U™è™a™Lƒ¯mƒL™škwƒl@°mnÈÒ¯šów@V™xƒĀU¤°Įƒ°Xl"],encodeOffsets:[[102376,22579]]}},{type:"Feature",id:"5305",properties:{name:"保山市",cp:[99.0637,24.9884],childNum:5},geometry:{type:"Polygon",coordinates:["@@X°„Il‚@¦ƒŽÈ¼m¼ÞaÞÅl„ÈxV¼šlVôÈÆlLޣȺlkUƒ‚ƒUw„¯UĕVwĊ@n¦mlnVĸIWǰLnƒUwl™šV„n@lnU˜„nJށl±U™¯LVUa°Ý„U„ÇĊýšVŤé„LlxÞL„ĀÜl²ĉ°KUaVƒ™_Źé@klw¯ƒlÅ—šW£ÅyU™W@wƒknal¥Uw@w™Uƒƒk¯ƒw¯aW±k_mJa™XVҙĠWb¯L¯Ý@w™wUƒ¯±Wk_ġƒwƒwōKmb@¤„bk°l˃ô„UJƒšVnÅlťUš¯°VbnbWxX„m„ÞššWUĀ™L™yWzÛKmbUxVKkn݃kŽVšĀċ¤Ux„@ޝŽm@ƒ¦"],encodeOffsets:[[100440,25943]]}},{type:"Feature",id:"5304",properties:{name:"玉溪市",cp:[101.9312,23.8898],childNum:9},geometry:{type:"Polygon",coordinates:["@@l„„L°xXlWxXnlw„a„ţlaÞlÆĬnX„ƒ°wVw„l„@m™nw°VVIXllKšbnnV°lbU„UJ@ÈÇKVb—š@bW„°Vk¦kaWb°škxV¤È¼U°ôI@llblš²š@‚@œó@mm@VţkKl¹@yĉ¯°ÑšIXmWKnkšlV„ULlb@lnbVal@UnVJœU‚„nKWa„x„@lkkUlW²X„™‚l„K°„šl²@lšÞUŽ„U‚„UšVšVVXmššlLVnXWVUĉVaVb„W™ğVéšU„VU¹W»aVa„aW™Xƒ‚_U¥nÇ흙@a™lUnǍUyk@@wW@kbW¦UKÝwUmmƒƒLUnVxUVVlk¯mmnƒmkÇaŤ¯I@ƒl@@aĉw°ĕmU—L±ƒk™ÆéX™ÜÛ@yÈç@™Çġ„Ýķ—XmmÝVՙƒ™lmnkbmWkb@nl@nŽmš¯VxkJmUJ„ml¯™°makVVnVƒ¦™Wƒ—Wmnl@xmn„l‚I„¤„n™xU„ƒVUŽmX@˜ƒb@zl@¦Ýþ"],encodeOffsets:[[103703,24874]]}},{type:"Feature",id:"5333",properties:{name:"怒江傈僳族自治州",cp:[99.1516,26.5594],childNum:4},geometry:{type:"Polygon",coordinates:["@@WyX£lWlnnUU™„¥@ţV™Vw„JlÅ@wƒmö󙻂£kml¯U¥n¹Æ@ny@wmU@¯mnamÛnƒšUV¥ÈnĠy²œm¤„@ÆónݚnmlnbÞU‚¥„aV£kU„KWƒ„óšƒmIU¥ókwVólƒ™»¯™ƒL™ƒk@m™naWKÛwóњw@a±n—@VbUJ›LkaƒÝXĉƒ™„UV`lI@lnXÆƑkKmxÛXmlUKVmU²Klw@a™aó„@n™KXwVKU¯V¥mUnkm¥ĉ@UxV˃°Vx„V„klmޙkKWĀkVWšnl°Lnm@°ŽUxlV@nk¦™JVȰŽVÒ@nX°@ÆlUômlnôƒ²nxmłnVV„¯x@Èm°XblVUšl°@xkXU¤WXX‚W„Xƃ„mkÅJmށw±bƒxUīkKmÅVUĖÝèV„kx@š›lX„lnk¤ƒLkŽ‚Ėk¦‚xUššL°‚¯Ė@LnK@b°xVI„¥Ua°Ñ@»nm@¹‚KŎÞÈWln²n"],encodeOffsets:[[101071,28891]]}},{type:"Feature",id:"5331",properties:{name:"德宏傣族景颇族自治州",cp:[98.1299,24.5874],childNum:5},geometry:{type:"Polygon",coordinates:["@@„¥n@°@ƒVwČ£™ÿUlÞ„lmULVwnaÜLXyšzšKVÿ™XݙnƒWƒXwmaUa°¯V™ŦŽÆkUm„™VIƒ„ókĕl¯ƒa@£nama™@¯m¯œó@óyţbġkÅm±ÛammVkƒLwU`Wk@VƒkUmŃlUUKmbkkUVUwƒ¦óް¼šbn°ô¦lºƒz@xšŽ¯„™@UްnƒšU¤ţU„°VƆ@ÈmlnzÞl°¦Æa„xUxƒLkxWƒn@‚š²ŰšW„™‚@°ÈXl°Llx"],encodeOffsets:[[100440,25943]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/zhe_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3311",properties:{name:"丽水市",cp:[119.5642,28.1854],childNum:9},geometry:{type:"Polygon",coordinates:["@@@V‚bVl@Xn‚UXƒKVŽ@¦nxlUXV‚n„KVmnL‚UV@bn¤lLXK˜²„`nnlJXIVJ‚I„Vnn°KnnVll@VLXWV@UkVaVK„zV@„ƒšVVaUK@U»VUl@@WnUUƒ@wVLn@Vwl@XW°LVbn@VU‚@X„l`@XnKVbkl@XVJlUnlV„„xlL@lnXl„@VšUnV°°„@a„UVLXblWVXn@VVUV@Lš¤VLV„U‚VbnalLUUVX_laVa„WVzXKV@@a@KUmImmXama@kU@yVIUK‚aVa@kXK@aWU@VIUmW@kkVm„Uš@VwUa@K@k@Uƒ`@kUKVk@UV@VaUm²Vy@klUUWUkVmUa@_ƒKVaXa›XmƒU@mUlWkaUXƒ@mmkL@w™JƒnVVÅbWKXa™@@I@aƒJUUÇ@V„UL™W@akLmb@K@a™XXw@mƒVmUVkUy@£@aU@@VkUWm@kUKƒXUWU_mW@wkkmJUUkLWWUXƒW@IkJ@k@mW_kӃ_Ul™Lƒm@I@aUa¯m@kƒa¯LUJƒ@mVVxUb™a@LUKkXƒbm@Uak@@a@Um`ƒIUbUJ@nUVW@@LnVV@lšUbVlUX@`š@blXklW„Ušm„Xlm¦U@@V¯bml@š@nUb@llnn@VbX@lV@ŽUVULmU@JVn„bVbkb™VWxU@@nUVk@"],encodeOffsets:[[121546,28992]]}},{type:"Feature",id:"3301",properties:{name:"杭州市",cp:[119.5313,29.8773],childNum:6},geometry:{type:"Polygon",coordinates:["@@X@l„°KXXlW„b@²„`šššb‚I„šX`l@„@bWl@n@VnLUV@V„@°¦@šl@XVlU@š@xVbUb@Vkb@‚@XVJVz™J@Lޚ@VmLUxUJ@LU„Vx‚b„xXUl@VaÈw„b‚aÞa@Vl@XUVx@V@V„LlbnV„al@lb„Vnn‚LnKnL@VlbVJXalIšb@KUU@mVInJ˜„U„Vl@xUšVLnUš@UÞaV@lkV@UanK„L@UlKVUnbÆmn@@nUlVnVJl@@UXU„L@WVIVJVxVLXV@IÜKnbn@V¥V@@I@ƒƒ„y°b@UUwnk°ÆƨVlUšçXm›£aƒÇ™IkVƒ@WV@@aWIUWUIkb@WW@UnƒK@UU@kaWVkƒVIVVnU@UWVUV@VmVkKkWIkVWaULU`UImJUImm—U@ƒƒwmwUV™IUWVkUamaU@mV—kƒb@KVU@aVU@anKULVJ‚U@kÛU™JUV›kkƒVakU@ƒaVwkW@UWkXmWaULUaUK@XƒJUUmƒVU@UVƒUkJ@ImwmKU@k„@lU„W@@akKm„kamIkWl_UwVm@UkaVUUaƒ@UamakbWlkL@aUalU@mkL@U@U™lmK@XkKm@Ýakb@xƒnXbƒ`ƒnUUU@›™U@™wU@@ƒmKkkƒV¯U@lULUbVbUb@V‚a@L™ºÝb@bLmK™x@VUL@bk@mxULWl"],encodeOffsets:[[121185,30184]]}},{type:"Feature",id:"3303",properties:{name:"温州市",cp:[120.498,27.8119],childNum:9},geometry:{type:"Polygon",coordinates:["@@ll@xnXV`VX„WVL@lXnlV@UV@@b@¤VzUlnV„U@nWxšW@b@LnalK@bšXVKUƒÈ@VV„I@b@Jš@WbXLÆaUU„mšI@xlKnn„@VWlbkXV‚@n„VWnœ‚WbUb„L@`VbUnVlVXkV@lUz±‚VnUbU@@VUlVL@l„_@V@l@LVbV@XLV`VÈlxn@lU@aœaVV‚k„@XJ@nl@@LU`°LVb„L°a@a„UVy@anI@a„a‚nV@²wÜJX@VšVV°k„na@WVk„aWwU@m@™ƒkƒaUĕ™ÝšÝŤnÈa„aóI›»@±X™WkUķ@kV±kw™ƒUkWw„™UƒÝ»ÛkɳlImaUaWóXÿǬk‚UnWVmmk™KţnŏÞğl™„UlUx@XWb„V@JkXƒ°mb@VULVxUVk@@LWWk@WIkšƒUkJmUkVmI@yƒ@Ua™kLm‚U@mUUUkaVk™@mK@UlUU@UmKmbUUUJ@n@KVLUL@VkJWXX`mnULWlkL@JVLVb@°kxkU@LVŽ™V@„VLV`UL@VUX"],encodeOffsets:[[122502,28334]]}},{type:"Feature",id:"3302",properties:{name:"宁波市",cp:[121.5967,29.6466],childNum:6},geometry:{type:"Polygon",coordinates:["@@Ċ¦ĸ°‚nXÞVšKškƨƑźÿ°»n„@wô¥ÜbœU°ÆXÞWóçĉݱIUƒÈ¥@U°wÆ»²mm_@aXƒVKÞVlk@akk›̅@£X»VwƏXWa¯aȗb™KƽۃĊ™xƒLóŽk@ƒƒƒ@¯nƒKUL@xkL›ÑkWULUUmJUXVŽU@mŽUX¯@V`mbXbV@@nn¤WXšx@škJ@nVVUVl²UbÝVUVk@Wx@V@„ƒVXzmlaƒL@VlLU`„XUVVVUnl@VbnJlnUVVnƒlUKkbmnn„VxlJnxmbU@UL@KUV™X@xmb@lk@mnVVUš™è"],encodeOffsets:[[123784,30977]]}},{type:"Feature",id:"3309",properties:{name:"舟山市",cp:[122.2559,30.2234],childNum:3},geometry:{type:"Polygon",coordinates:["@@l΢ƒʠþÆVĢLĊƒǬXĊ܄XôV„ÑÆw„ƒlšƏÈóVĭVǓ@ƒĉwɛkmK@ĉXīWaĉUĵÝmƒ¯ĉƒwĉ±±nż¯x@VǦV„²JĊÞôèÝXÅW¯›VÛaó¦@xƒŽmޝ¼ŹĀ"], encodeOffsets:[[124437,30983]]}},{type:"Feature",id:"3310",properties:{name:"台州市",cp:[121.1353,28.6688],childNum:7},geometry:{type:"Polygon",coordinates:["@@lV„IVWVz@bXJl@Xal@°„nLll@nVxnV„K@UJVbƒ¦°„k`UIWJXnƚ@bUJ„Xl@lb„Wn@UzVV@bVVšmVnnJVXna‚bšKUKnUVVUnVLlKVLXa„Jm£@mU@WanaU_°@VWnV@UVWnIVVVKlXœÒlK@wVK„L°m„@„„l@ô„Kšw„ĉƾůUƒl£@»UƒVk„m@ƅUƒƒaÛIŏmUk@m„w@a™£ƒWk@ţšƒIm±@ankôUlaU™Uw¯ƒōaƒbÇbţm™ÞšÞVĖ„b„l@š@n‚VXxƒbUl@XmbƒŽ¯lUUU™W@ÛI±xU@mƒb@bmJ@bUzƒV@b¯bƒKUa¯KV_@Kk@@mWIƒ@lUU›b@bkVm@kwUÇU_WKU@Ux™@ƒVUnllX@Vn‚J@UXV@bWL@lUbbVLUJ@z‚V@lnbWbnnnJVŽ@L"],encodeOffsets:[[123312,29526]]}},{type:"Feature",id:"3307",properties:{name:"金华市",cp:[120.0037,29.1028],childNum:8},geometry:{type:"Polygon",coordinates:["@@nbVb„@VbUVlb@VUnVxk`lXnJlbnƒlL@bX@Vƒ@klƒV@nLnx@JlI„V‚U@VUVn„VV„I@WVLVbVKXbWnXl@VlXUx„b@ŽlVUbl„œlVUšIÜVnalKX@@bV@@aUUlUƒwUw„@naWW„UVaUUšaVb„LlxXJVk°ƒUƒlkU¥@k„a@LVlXLVlšVWznVn@lxšJl_@WX_@mVa„a@alU@kVVna„KVLlK„b@UUaVašbnUWmXU@k@yVI@ařWmXIVJl_¯ƒ„¥UaVI@ƒLmUUw@mkkmK¯ƒk@Wbk@WI@aUyUXƒJkU@bU@WLUyƒXUbkbW`UVVkKmbUaVUƒUK™£@KVUUUm@UWkXWaUKƒV@b¯ƒ¯mU™V@UkƒmW@kkKƒwUƒmkkVUI@WlkUamL@Wk_Wƒ@UVm@Ua¯KWXk@Uxm@UK@xV„mV@Xk@UVV¼@‚VLUb™Uƒ„U@ƒyULUbVlU@@XlVUVVbƒU@lXXVW@XUVl@@VUVƒÈn@VVU„@lVa@„U„mL@`X@`WL@VUX@lUL@xlx"],encodeOffsets:[[122119,29948]]}},{type:"Feature",id:"3308",properties:{name:"衢州市",cp:[118.6853,28.8666],childNum:5},geometry:{type:"Polygon",coordinates:["@@XkVKnwl@@aVK@UšwnL‚K@aÞaš¹@Kb@UVaUaVaVK@k°V„UllnL@„V@šxV@œšV@VV„m„_Wa„m@wlaÞbn@lL@WnLšk@V@VlK@nkVVb@blKXklakw@wVK@kVW@UXK@_‚W@_nKVƒ@ƒUb@kVƒUUm@„ÇVU@Uk@VU@WUXWW@k„VUaVUkU@WWXUKk@Ukmm¯LmmƒUJUIWJkImmƒ_—±WLkKm£@aVUmKUnƒLmWUkVmw@¥U„LVWm@WUka@UmmLmm@@bUX™@@WUIm@UVUK@UVUUU™VVJmb@b„Xn‚mVƒ¼nnn¦mJUVƒL„V@VW@UzUlVnUbl`UnVl@XU@kl@bmÈUx™Vk@@J@„ƒ¼W@ÅaVVnzmVƒ„@WJk@kWJ@ƒlXbWbXxmVnšlLXb@°lKVXnWšbWV„„X„mbV@Xl‚bšI@Kn@@x@šVLlm"],encodeOffsets:[[121185,30184]]}},{type:"Feature",id:"3306",properties:{name:"绍兴市",cp:[120.564,29.7565],childNum:6},geometry:{type:"Polygon",coordinates:["@@„x@„˜VnnVJnIVJV_VKXblUXJlŽlLUŽUnU@UVVX@ŽmVUUUJl„XUlbV@@V„LVmX@@XlaVJVXXJ@b‚@XU„@lUšJ„È‚bœ¤Ō„JšçV™UUnml@@kna@wšWVU@LVKV@namwkIUwmƒnmlaVL„kUmVUkmmIUak@VmUUVUƒWV_kK@U„K‚bnkWy„U@ƒ@UXwl@VUÞUVak±VUUU@mlI@™™wXWƒIWbUKkLUKVmUUmVVL™LambUWmIUm™nUU@aUUVym@ƒXkak@ƒW@z@lWVXnmV™aUbVb@VƒakLUKƒLmbUU@lkV@bƒbUb@nW`@Xk`™Ikwm@mUXy™UUkWKUk@Kƒb@lV¦klV„¯„UlWIkwƒKUa™bVVUbƒVXXmbƒ@Vx„xkVVV@bU@@aW@kLmb@lVUIVKmL@bUV@bUV@L„a˜lnUV@nbVbUlVXšJVUnx"],encodeOffsets:[[122997,30561]]}},{type:"Feature",id:"3304",properties:{name:"嘉兴市",cp:[120.9155,30.6354],childNum:6},geometry:{type:"Polygon",coordinates:["@@@blIX@@VÜVUnn@l‚k„lKnI°Þl`²LVKVbnbVaVLUVn@W¦@VkVVb„@VI„`@blLnL‚aX@„VVb@U‚@XlVa„@@kVaUKV»U_lWXUƒƒ@alb„k@VllnLVKn@@UVIUw@y°IVVXU@VV@lw„m@wVkƾaœJ‚LkΡƧƒ™l™LÝUmW¯ķÿĉ¥ƒIŋŽWn™èkVƧU¯ÅmlVx@V¯aƒz„Ž@„@JU@U¦m@@šnVmn@V„LV‚"],encodeOffsets:[[123233,31382]]}},{type:"Feature",id:"3305",properties:{name:"湖州市",cp:[119.8608,30.7782],childNum:4},geometry:{type:"Polygon",coordinates:["@@kLlƒkm@VmÛU@UW@kJ@aUƒK@UnmmU@™maÛL@JWUUKUwUIUJ@XƒKWV@Vk@UIUmVk@mm@ÅnmaUVkL@VƒKmLVbU@klU@ÝbV™@mVUKV™@wUkVƒ—ƒmIUJ@nVV@L™akJWbUIka@UmKmLKmmƒUUVk@@nmLX`WXUV@Ž@nUl™kmlU@Ub„„ƒxVVšIlV„Žšnn„@@n˜„UҚ@„°n@@xmb@„VbnV@šš„@b@`@L@L@x@blVklVbnnV@‚aXb°VlU@W„b°U„LXWVUV™„™VwÈwÜ»ĸaĠnUVw²X@V@lVU@wlaUUVm@knUV›"],encodeOffsets:[[123379,31500]]}}],UTF8Encoding:!0}}),i("echarts/chart/gauge",["require","./base","../util/shape/GaugePointer","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","zrender/shape/Circle","zrender/shape/Sector","../config","../util/ecData","../util/accMath","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/GaugePointer"),a=e("zrender/shape/Text"),o=e("zrender/shape/Line"),r=e("zrender/shape/Rectangle"),s=e("zrender/shape/Circle"),l=e("zrender/shape/Sector"),h=e("../config");h.gauge={zlevel:0,z:2,center:["50%","50%"],clickable:!0,legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,"#228b22"],[.8,"#48b"],[1,"#ff4500"]],width:30}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:"#eee",width:1,type:"solid"}},axisLabel:{show:!0,textStyle:{color:"auto"}},splitLine:{show:!0,length:30,lineStyle:{color:"#eee",width:2,type:"solid"}},pointer:{show:!0,length:"80%",width:8,color:"auto"},title:{show:!0,offsetCenter:[0,"-40%"],textStyle:{color:"#333",fontSize:15}},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:40,offsetCenter:[0,"40%"],textStyle:{color:"auto",fontSize:30}}};var m=e("../util/ecData"),V=e("../util/accMath"),U=e("zrender/tool/util");return t.prototype={type:h.CHART_TYPE_GAUGE,_buildShape:function(){var e=this.series;this._paramsMap={},this.selectedMap={};for(var t=0,i=e.length;i>t;t++)e[t].type===h.CHART_TYPE_GAUGE&&(this.selectedMap[e[t].name]=!0,e[t]=this.reformOption(e[t]),this.legendHoverLink=e[t].legendHoverLink||this.legendHoverLink,this._buildSingleGauge(t),this.buildMark(t));this.addShapeList()},_buildSingleGauge:function(e){var t=this.series[e];this._paramsMap[e]={center:this.parseCenter(this.zr,t.center),radius:this.parseRadius(this.zr,t.radius),startAngle:t.startAngle.toFixed(2)-0,endAngle:t.endAngle.toFixed(2)-0},this._paramsMap[e].totalAngle=this._paramsMap[e].startAngle-this._paramsMap[e].endAngle,this._colorMap(e),this._buildAxisLine(e),this._buildSplitLine(e),this._buildAxisTick(e),this._buildAxisLabel(e),this._buildPointer(e),this._buildTitle(e),this._buildDetail(e)},_buildAxisLine:function(e){var t=this.series[e];if(t.axisLine.show)for(var i,n,a=t.min,o=t.max-a,r=this._paramsMap[e],s=r.center,l=r.startAngle,h=r.totalAngle,V=r.colorArray,U=t.axisLine.lineStyle,d=this.parsePercent(U.width,r.radius[1]),p=r.radius[1],c=p-d,u=l,y=0,g=V.length;g>y;y++)n=l-h*(V[y][0]-a)/o,i=this._getSector(s,c,p,n,u,V[y][1],U,t.zlevel,t.z),u=n,i._animationAdd="r",m.set(i,"seriesIndex",e),m.set(i,"dataIndex",y),this.shapeList.push(i)},_buildSplitLine:function(e){var t=this.series[e];if(t.splitLine.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.splitLine,V=this.parsePercent(m.length,r.radius[1]),U=m.lineStyle,d=U.color,p=r.center,c=r.startAngle*Math.PI/180,u=r.totalAngle*Math.PI/180,y=r.radius[1],g=y-V,b=0;s>=b;b++)i=c-u/s*b,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:p[0]+a*y,yStart:p[1]-n*y,xEnd:p[0]+a*g,yEnd:p[1]-n*g,strokeColor:"auto"===d?this._getColor(e,l+h/s*b):d,lineType:U.type,lineWidth:U.width,shadowColor:U.shadowColor,shadowBlur:U.shadowBlur,shadowOffsetX:U.shadowOffsetX,shadowOffsetY:U.shadowOffsetY}}))},_buildAxisTick:function(e){var t=this.series[e];if(t.axisTick.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisTick,V=m.splitNumber,U=this.parsePercent(m.length,r.radius[1]),d=m.lineStyle,p=d.color,c=r.center,u=r.startAngle*Math.PI/180,y=r.totalAngle*Math.PI/180,g=r.radius[1],b=g-U,f=0,k=s*V;k>=f;f++)f%V!==0&&(i=u-y/k*f,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:c[0]+a*g,yStart:c[1]-n*g,xEnd:c[0]+a*b,yEnd:c[1]-n*b,strokeColor:"auto"===p?this._getColor(e,l+h/k*f):p,lineType:d.type,lineWidth:d.width,shadowColor:d.shadowColor,shadowBlur:d.shadowBlur,shadowOffsetX:d.shadowOffsetX,shadowOffsetY:d.shadowOffsetY}})))},_buildAxisLabel:function(e){var t=this.series[e];if(t.axisLabel.show)for(var i,n,o,r,s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisLabel.textStyle,U=this.getFont(m),d=m.color,p=this._paramsMap[e],c=p.center,u=p.startAngle,y=p.totalAngle,g=p.radius[1]-this.parsePercent(t.splitLine.length,p.radius[1])-5,b=0;s>=b;b++)r=V.accAdd(l,V.accMul(V.accDiv(h,s),b)),i=u-y/s*b,n=Math.sin(i*Math.PI/180),o=Math.cos(i*Math.PI/180),i=(i+360)%360,this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{x:c[0]+o*g,y:c[1]-n*g,color:"auto"===d?this._getColor(e,r):d,text:this._getLabelText(t.axisLabel.formatter,r),textAlign:i>=110&&250>=i?"left":70>=i||i>=290?"right":"center",textBaseline:i>=10&&170>=i?"top":i>=190&&350>=i?"bottom":"middle",textFont:U,shadowColor:m.shadowColor,shadowBlur:m.shadowBlur,shadowOffsetX:m.shadowOffsetX,shadowOffsetY:m.shadowOffsetY}}))},_buildPointer:function(e){var t=this.series[e];if(t.pointer.show){var i=t.max-t.min,a=t.pointer,o=this._paramsMap[e],r=this.parsePercent(a.length,o.radius[1]),l=this.parsePercent(a.width,o.radius[1]),h=o.center,V=this._getValue(e);V=V2?2:l/2,color:"#fff"}});m.pack(p,this.series[e],e,this.series[e].data[0],0,this.series[e].data[0].name,V),this.shapeList.push(p),this.shapeList.push(new s({zlevel:t.zlevel,z:t.z+2,hoverable:!1,style:{x:h[0],y:h[1],r:a.width/2.5,color:"#fff"}}))}},_buildTitle:function(e){var t=this.series[e];if(t.title.show){var i=t.data[0],n=null!=i.name?i.name:"";if(""!==n){var o=t.title,r=o.offsetCenter,s=o.textStyle,l=s.color,h=this._paramsMap[e],m=h.center[0]+this.parsePercent(r[0],h.radius[1]),V=h.center[1]+this.parsePercent(r[1],h.radius[1]);this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+(Math.abs(m-h.center[0])+Math.abs(V-h.center[1])<2*s.fontSize?2:1),hoverable:!1,style:{x:m,y:V,color:"auto"===l?this._getColor(e):l,text:n,textAlign:"center",textFont:this.getFont(s),shadowColor:s.shadowColor,shadowBlur:s.shadowBlur,shadowOffsetX:s.shadowOffsetX,shadowOffsetY:s.shadowOffsetY}}))}}},_buildDetail:function(e){var t=this.series[e];if(t.detail.show){var i=t.detail,n=i.offsetCenter,a=i.backgroundColor,o=i.textStyle,s=o.color,l=this._paramsMap[e],h=this._getValue(e),m=l.center[0]-i.width/2+this.parsePercent(n[0],l.radius[1]),V=l.center[1]+this.parsePercent(n[1],l.radius[1]);this.shapeList.push(new r({zlevel:t.zlevel,z:t.z+(Math.abs(m+i.width/2-l.center[0])+Math.abs(V+i.height/2-l.center[1])r;r++)o.push([a[r][0]*n+i,a[r][1]]);this._paramsMap[e].colorArray=o},_getColor:function(e,t){null==t&&(t=this._getValue(e));for(var i=this._paramsMap[e].colorArray,n=0,a=i.length;a>n;n++)if(i[n][0]>=t)return i[n][1];return i[i.length-1][1]},_getSector:function(e,t,i,n,a,o,r,s,h){return new l({zlevel:s,z:h,hoverable:!1,style:{x:e[0],y:e[1],r0:t,r:i,startAngle:n,endAngle:a,brushType:"fill",color:o,shadowColor:r.shadowColor,shadowBlur:r.shadowBlur,shadowOffsetX:r.shadowOffsetX,shadowOffsetY:r.shadowOffsetY}})},_getLabelText:function(e,t){if(e){if("function"==typeof e)return e.call(this.myChart,t);if("string"==typeof e)return e.replace("{value}",t)}return t},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},U.inherits(t,i),e("../chart").define("gauge",t),t}),i("echarts/util/shape/GaugePointer",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"gauge-pointer",buildPath:function(e,t){var i=t.r,n=t.width,a=t.angle,o=t.x-Math.cos(a)*n*(n>=i/3?1:2),r=t.y+Math.sin(a)*n*(n>=i/3?1:2);a=t.angle-Math.PI/2,e.moveTo(o,r),e.lineTo(t.x+Math.cos(a)*n,t.y-Math.sin(a)*n),e.lineTo(t.x+Math.cos(t.angle)*i,t.y-Math.sin(t.angle)*i),e.lineTo(t.x-Math.cos(a)*n,t.y+Math.sin(a)*n),e.lineTo(o,r)},getRect:function(e){if(e.__rect)return e.__rect;var t=2*e.width,i=e.x,n=e.y,a=i+Math.cos(e.angle)*e.r,o=n-Math.sin(e.angle)*e.r;return e.__rect={x:Math.min(i,a)-t,y:Math.min(n,o)-t,width:Math.abs(i-a)+t,height:Math.abs(n-o)+t},e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),i("echarts/chart/funnel",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Polygon","../config","../util/ecData","../util/number","zrender/tool/util","zrender/tool/color","zrender/tool/area","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Polygon"),r=e("../config");r.funnel={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,x:80,y:60,x2:80,y2:60,min:0,max:100,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",itemStyle:{normal:{borderColor:"#fff",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:10,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0},labelLine:{show:!0}}}};var s=e("../util/ecData"),l=e("../util/number"),h=e("zrender/tool/util"),m=e("zrender/tool/color"),V=e("zrender/tool/area");return t.prototype={type:r.CHART_TYPE_FUNNEL,_buildShape:function(){var e=this.series,t=this.component.legend;this._paramsMap={},this._selected={},this.selectedMap={};for(var i,n=0,a=e.length;a>n;n++)if(e[n].type===r.CHART_TYPE_FUNNEL){if(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,i=e[n].name||"",this.selectedMap[i]=t?t.isSelected(i):!0,!this.selectedMap[i])continue;this._buildSingleFunnel(n),this.buildMark(n)}this.addShapeList()},_buildSingleFunnel:function(e){var t=this.component.legend,i=this.series[e],n=this._mapData(e),a=this._getLocation(e);this._paramsMap[e]={location:a,data:n};for(var o,r=0,s=[],h=0,m=n.length;m>h;h++)o=n[h].name,this.selectedMap[o]=t?t.isSelected(o):!0,this.selectedMap[o]&&!isNaN(n[h].value)&&(s.push(n[h]),r++);if(0!==r){for(var V,U,d,p,c=this._buildFunnelCase(e),u=i.funnelAlign,y=i.gap,g=r>1?(a.height-(r-1)*y)/r:a.height,b=a.y,f="descending"===i.sort?this._getItemWidth(e,s[0].value):l.parsePercent(i.minSize,a.width),k="descending"===i.sort?1:0,x=a.centerX,_=[],h=0,m=s.length;m>h;h++)if(o=s[h].name,this.selectedMap[o]&&!isNaN(s[h].value)){switch(V=m-2>=h?this._getItemWidth(e,s[h+k].value):"descending"===i.sort?l.parsePercent(i.minSize,a.width):l.parsePercent(i.maxSize,a.width),u){case"left":U=a.x;break;case"right":U=a.x+a.width-f;break;default:U=x-f/2}d=this._buildItem(e,s[h]._index,t?t.getColor(o):this.zr.getColor(s[h]._index),U,b,f,V,g,u),b+=g+y,p=d.style.pointList,_.unshift([p[0][0]-10,p[0][1]]),_.push([p[1][0]+10,p[1][1]]),0===h&&(0===f?(p=_.pop(),"center"==u&&(_[0][0]+=10),"right"==u&&(_[0][0]=p[0]),_[0][1]-="center"==u?10:15,1==m&&(p=d.style.pointList)):(_[_.length-1][1]-=5,_[0][1]-=5)),f=V}c&&(_.unshift([p[3][0]-10,p[3][1]]),_.push([p[2][0]+10,p[2][1]]),0===f?(p=_.pop(),"center"==u&&(_[0][0]+=10),"right"==u&&(_[0][0]=p[0]),_[0][1]+="center"==u?10:15):(_[_.length-1][1]+=5,_[0][1]+=5),c.style.pointList=_)}},_buildFunnelCase:function(e){var t=this.series[e];if(this.deepQuery([t,this.option],"calculable")){var i=this._paramsMap[e].location,n=10,a={hoverable:!1,style:{pointListd:[[i.x-n,i.y-n],[i.x+i.width+n,i.y-n],[i.x+i.width+n,i.y+i.height+n],[i.x-n,i.y+i.height+n]],brushType:"stroke",lineWidth:1,strokeColor:t.calculableHolderColor||this.ecTheme.calculableHolderColor||r.calculableHolderColor}};return s.pack(a,t,e,void 0,-1),this.setCalculable(a),a=new o(a),this.shapeList.push(a),a}},_getLocation:function(e){var t=this.series[e],i=this.zr.getWidth(),n=this.zr.getHeight(),a=this.parsePercent(t.x,i),o=this.parsePercent(t.y,n),r=null==t.width?i-a-this.parsePercent(t.x2,i):this.parsePercent(t.width,i);return{x:a,y:o,width:r,height:null==t.height?n-o-this.parsePercent(t.y2,n):this.parsePercent(t.height,n),centerX:a+r/2}},_mapData:function(e){function t(e,t){return"-"===e.value?1:"-"===t.value?-1:t.value-e.value}function i(e,i){return-t(e,i)}for(var n=this.series[e],a=h.clone(n.data),o=0,r=a.length;r>o;o++)a[o]._index=o;return"none"!=n.sort&&a.sort("descending"===n.sort?t:i),a},_buildItem:function(e,t,i,n,a,o,r,l,h){var m=this.series,V=m[e],U=V.data[t],d=this.getPolygon(e,t,i,n,a,o,r,l,h);s.pack(d,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(d);var p=this.getLabel(e,t,i,n,a,o,r,l,h);s.pack(p,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(p),this._needLabel(V,U,!1)||(p.invisible=!0);var c=this.getLabelLine(e,t,i,n,a,o,r,l,h);this.shapeList.push(c),this._needLabelLine(V,U,!1)||(c.invisible=!0);var u=[],y=[];return this._needLabelLine(V,U,!0)&&(u.push(c.id),y.push(c.id)),this._needLabel(V,U,!0)&&(u.push(p.id),y.push(d.id)),d.hoverConnect=u,p.hoverConnect=y,d},_getItemWidth:function(e,t){var i=this.series[e],n=this._paramsMap[e].location,a=i.min,o=i.max,r=l.parsePercent(i.minSize,n.width),s=l.parsePercent(i.maxSize,n.width);return(t-a)*(s-r)/(o-a)+r},getPolygon:function(e,t,i,n,a,r,s,l,h){var V,U=this.series[e],d=U.data[t],p=[d,U],c=this.deepMerge(p,"itemStyle.normal")||{},u=this.deepMerge(p,"itemStyle.emphasis")||{},y=this.getItemStyleColor(c.color,e,t,d)||i,g=this.getItemStyleColor(u.color,e,t,d)||("string"==typeof y?m.lift(y,-.2):y);switch(h){case"left":V=n;break;case"right":V=n+(r-s);break;default:V=n+(r-s)/2}var b={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(p,"clickable"),style:{pointList:[[n,a],[n+r,a],[V+s,a+l],[V,a+l]],brushType:"both",color:y,lineWidth:c.borderWidth,strokeColor:c.borderColor},highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};return this.deepQuery([d,U,this.option],"calculable")&&(this.setCalculable(b),b.draggable=!0),new o(b)},getLabel:function(e,t,i,a,o,r,s,l,U){var d,p=this.series[e],c=p.data[t],u=this._paramsMap[e].location,y=h.merge(h.clone(c.itemStyle)||{},p.itemStyle),g="normal",b=y[g].label,f=b.textStyle||{},k=y[g].labelLine.length,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i;b.position=b.position||y.normal.label.position,"inner"===b.position||"inside"===b.position||"center"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?"#fff":m.reverse(i)):d="left"===b.position?"right":"left";var W={zlevel:p.zlevel,z:p.z+1,style:{x:this._getLabelPoint(b.position,a,u,r,s,k,U),y:o+l/2,color:f.color||L,text:x,textAlign:f.align||d,textBaseline:f.baseline||"middle",textFont:_}};return g="emphasis",b=y[g].label||b,f=b.textStyle||f,k=y[g].labelLine.length||k,b.position=b.position||y.normal.label.position,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i,"inner"===b.position||"inside"===b.position||"center"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?"#fff":m.reverse(i)):d="left"===b.position?"right":"left",W.highlightStyle={x:this._getLabelPoint(b.position,a,u,r,s,k,U),color:f.color||L,text:x,textAlign:f.align||d,textFont:_,brushType:"fill"},new n(W)},getLabelText:function(e,t,i){var n=this.series,a=n[e],o=a.data[t],r=this.deepQuery([o,a],"itemStyle."+i+".label.formatter");return r?"function"==typeof r?r.call(this.myChart,{seriesIndex:e,seriesName:a.name||"",series:a,dataIndex:t,data:o,name:o.name,value:o.value}):"string"==typeof r?r=r.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",a.name).replace("{b0}",o.name).replace("{c0}",o.value):void 0:o.name},getLabelLine:function(e,t,i,n,o,r,s,l,m){var V=this.series[e],U=V.data[t],d=this._paramsMap[e].location,p=h.merge(h.clone(U.itemStyle)||{},V.itemStyle),c="normal",u=p[c].labelLine,y=p[c].labelLine.length,g=u.lineStyle||{},b=p[c].label;b.position=b.position||p.normal.label.position;var f={zlevel:V.zlevel,z:V.z+1,hoverable:!1,style:{xStart:this._getLabelLineStartPoint(n,d,r,s,m),yStart:o+l/2,xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),yEnd:o+l/2,strokeColor:g.color||i,lineType:g.type,lineWidth:g.width}};return c="emphasis",u=p[c].labelLine||u,y=p[c].labelLine.length||y,g=u.lineStyle||g,b=p[c].label||b,b.position=b.position,f.highlightStyle={xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),strokeColor:g.color||i,lineType:g.type,lineWidth:g.width},new a(f)},_getLabelPoint:function(e,t,i,n,a,o,r){switch(e="inner"===e||"inside"===e?"center":e){case"center":return"center"==r?t+n/2:"left"==r?t+10:t+n-10;case"left":return"auto"===o?i.x-10:"center"==r?i.centerX-Math.max(n,a)/2-o:"right"==r?t-(a>n?a-n:0)-o:i.x-o;default:return"auto"===o?i.x+i.width+10:"center"==r?i.centerX+Math.max(n,a)/2+o:"right"==r?i.x+i.width+o:t+Math.max(n,a)+o}},_getLabelLineStartPoint:function(e,t,i,n,a){return"center"==a?t.centerX:n>i?e+Math.min(i,n)/2:e+Math.max(i,n)/2},_needLabel:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".label.show")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".labelLine.show")},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},h.inherits(t,i),e("../chart").define("funnel",t),t}),i("echarts/chart/eventRiver",["require","./base","../layout/eventRiver","zrender/shape/Polygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","../util/date","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondragend=function(){r.isDragend=!0},this.refresh(a)}var i=e("./base"),n=e("../layout/eventRiver"),a=e("zrender/shape/Polygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var o=e("../config");o.eventRiver={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"inside",formatter:"{b}"}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0}}}};var r=e("../util/ecData"),s=e("../util/date"),l=e("zrender/tool/util"),h=e("zrender/tool/color");return t.prototype={type:o.CHART_TYPE_EVENTRIVER,_buildShape:function(){var e=this.series;this.selectedMap={},this._dataPreprocessing();for(var t=this.component.legend,i=[],a=0;an;n++)if(i[n].type===this.type){e=this.component.xAxis.getAxis(i[n].xAxisIndex||0);for(var o=0,r=i[n].data.length;r>o;o++){t=i[n].data[o].evolution;for(var l=0,h=t.length;h>l;l++)t[l].timeScale=e.getCoord(s.getNewDate(t[l].time)-0),t[l].valueScale=Math.pow(t[l].value,.8)}}this._intervalX=Math.round(this.component.grid.getWidth()/40)},_drawEventRiver:function(){for(var e=this.series,t=0;ta)){for(var o=[],r=[],s=0;a>s;s++)o.push(n[s].timeScale),r.push(n[s].valueScale);var l=[];l.push([o[0],i]);var s=0;for(s=0;a-1>s;s++)l.push([(o[s]+o[s+1])/2,r[s]/-2+i]);for(l.push([(o[s]+(o[s]+t))/2,r[s]/-2+i]),l.push([o[s]+t,i]),l.push([(o[s]+(o[s]+t))/2,r[s]/2+i]),s=a-1;s>0;s--)l.push([(o[s]+o[s-1])/2,r[s-1]/2+i]);return l}},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1)},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},l.inherits(t,i),e("../chart").define("eventRiver",t),t}),i("echarts/layout/eventRiver",["require"],function(){function e(e,i,o){function r(e,t){var i=e.importance,n=t.importance;return i>n?-1:n>i?1:0}for(var s=4,l=0;l=e)return[0];for(var t=[];e--;)t.push(0);return t}(),u=c.slice(0),y=[],g=0,b=0,l=0;l.5?.5:1,r=t.y,s=(t.height-n)/i,l=0,h=e.length;h>l;l++){var m=e[l];m.y=r+s*m.y+m._offset*o,delete m.time,delete m.value,delete m.xpx,delete m.ypx,delete m._offset;for(var V=m.evolution,U=0,d=V.length;d>U;U++)V[U].valueScale*=s}}function i(e,t,i,n){if(e===i)throw new Error("x0 is equal with x1!!!");if(t===n)return function(){return t};var a=(t-n)/(e-i),o=(n*e-t*i)/(e-i);return function(e){return a*e+o}}function n(e,t,n){var a=~~t,o=e.time.length;e.xpx=[],e.ypx=[];for(var r,s=0,l=0,h=0,m=0,V=0;o>s;s++){l=~~e.time[s],m=e.value[s]/2,s===o-1?(h=l+a,V=0):(h=~~e.time[s+1],V=e.value[s+1]/2),r=i(l,m,h,V);for(var U=l;h>U;U++)e.xpx.push(U-n),e.ypx.push(r(U))}e.xpx.push(h-n),e.ypx.push(V)}function a(e,t,i){for(var n,a=0,o=t.xpx.length,r=0;o>r;r++)n=i(t,r),a=Math.max(a,n+e[t.xpx[r]]);for(r=0;o>r;r++)n=i(t,r),e[t.xpx[r]]=a+n;return a}return e}),i("echarts/chart/venn",["require","./base","zrender/shape/Text","zrender/shape/Circle","zrender/shape/Path","../config","../util/ecData","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Circle"),o=e("zrender/shape/Path"),r=e("../config");r.venn={zlevel:0,z:1,calculable:!1};var s=e("../util/ecData"),l=e("zrender/tool/util");return t.prototype={type:r.CHART_TYPE_VENN,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._vennDataCounter=0;for(var e=this.series,t=this.component.legend,i=0;ia[1].value?(t=this.zr.getHeight()/3,i=t*Math.sqrt(a[1].value)/Math.sqrt(a[0].value)):(i=this.zr.getHeight()/3,t=i*Math.sqrt(a[0].value)/Math.sqrt(a[1].value));var o=this.zr.getWidth()/2-t,r=(t+i)/2*Math.sqrt(a[2].value)/Math.sqrt((a[0].value+a[1].value)/2),s=t+i;0!==a[2].value&&(s=this._getCoincideLength(a[0].value,a[1].value,a[2].value,t,i,r,Math.abs(t-i),t+i));var l=o+s,h=this.zr.getHeight()/2;if(this._buildItem(e,0,a[0],o,h,t),this._buildItem(e,1,a[1],l,h,i),0!==a[2].value&&a[2].value!==a[0].value&&a[2].value!==a[1].value){var m=(t*t-i*i)/(2*s)+s/2,V=s/2-(t*t-i*i)/(2*s),U=Math.sqrt(t*t-m*m),d=0,p=0;a[0].value>a[1].value&&o+m>l&&(p=1),a[0].valuel&&(d=1),this._buildCoincideItem(e,2,a[2],o+m,h-U,h+U,t,i,d,p)}},_getCoincideLength:function(e,t,i,n,a,o,r,s){var l=(n*n-a*a)/(2*o)+o/2,h=o/2-(n*n-a*a)/(2*o),m=Math.acos(l/n),V=Math.acos(h/a),U=n*n*Math.PI,d=m*n*n-l*n*Math.sin(m)+V*a*a-h*a*Math.sin(V),p=d/U,c=i/e,u=Math.abs(p/c);return u>.999&&1.001>u?o:.999>=u?(s=o,o=(o+r)/2,this._getCoincideLength(e,t,i,n,a,o,r,s)):(r=o,o=(o+s)/2,this._getCoincideLength(e,t,i,n,a,o,r,s))},_buildItem:function(e,t,i,n,a,o){var r=this.series,l=r[e],h=this.getCircle(e,t,i,n,a,o);if(s.pack(h,l,e,i,t,i.name),this.shapeList.push(h),l.itemStyle.normal.label.show){var m=this.getLabel(e,t,i,n,a,o);s.pack(m,l,e,l.data[t],t,l.data[t].name),this.shapeList.push(m)}},_buildCoincideItem:function(e,t,i,n,a,r,l,h,m,V){var U=this.series,d=U[e],p=[i,d],c=this.deepMerge(p,"itemStyle.normal")||{},u=this.deepMerge(p,"itemStyle.emphasis")||{},y=c.color||this.zr.getColor(t),g=u.color||this.zr.getColor(t),b="M"+n+","+a+"A"+l+","+l+",0,"+m+",1,"+n+","+r+"A"+h+","+h+",0,"+V+",1,"+n+","+a,f={color:y,path:b},k={zlevel:d.zlevel,z:d.z,style:f,highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};k=new o(k),k.buildPathArray&&(k.style.pathArray=k.buildPathArray(f.path)),s.pack(k,U[e],0,i,t,i.name),this.shapeList.push(k)},getCircle:function(e,t,i,n,o,r){var s=this.series[e],l=[i,s],h=this.deepMerge(l,"itemStyle.normal")||{},m=this.deepMerge(l,"itemStyle.emphasis")||{},V=h.color||this.zr.getColor(t),U=m.color||this.zr.getColor(t),d={zlevel:s.zlevel,z:s.z,clickable:!0,style:{x:n,y:o,r:r,brushType:"fill",opacity:1,color:V},highlightStyle:{color:U,lineWidth:m.borderWidth,strokeColor:m.borderColor}};return this.deepQuery([i,s,this.option],"calculable")&&(this.setCalculable(d),d.draggable=!0),new a(d)},getLabel:function(e,t,i,a,o,r){var s=this.series[e],l=s.itemStyle,h=[i,s],m=this.deepMerge(h,"itemStyle.normal")||{},V="normal",U=l[V].label,d=U.textStyle||{},p=this.getLabelText(t,i,V),c=this.getFont(d),u=m.color||this.zr.getColor(t),y=d.fontSize||12,g={zlevel:s.zlevel,z:s.z,style:{x:a,y:o-r-y,color:d.color||u,text:p,textFont:c,textAlign:"center"}};return new n(g)},getLabelText:function(e,t,i){var n=this.series,a=n[0],o=this.deepQuery([t,a],"itemStyle."+i+".label.formatter");return o?"function"==typeof o?o(a.name,t.name,t.value):"string"==typeof o?(o=o.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),o=o.replace("{a0}",a.name).replace("{b0}",t.name).replace("{c0}",t.value)):void 0:t.name},refresh:function(e){e&&(this.option=e,this.series=e.series),this._buildShape()}},l.inherits(t,i),e("../chart").define("venn",t),t}),i("echarts/chart/treemap",["require","./base","zrender/tool/area","zrender/shape/Rectangle","zrender/shape/Text","zrender/shape/Line","../layout/TreeMap","../data/Tree","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a);var r=this;r._onclick=function(e){return r.__onclick(e)},r.zr.on(V.EVENT.CLICK,r._onclick)}var i=e("./base"),n=e("zrender/tool/area"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Text"),r=e("zrender/shape/Line"),s=e("../layout/TreeMap"),l=e("../data/Tree"),h=e("../config");h.treemap={zlevel:0,z:1,calculable:!1,clickable:!0,center:["50%","50%"],size:["80%","80%"],root:"",itemStyle:{normal:{label:{ show:!0,x:5,y:12,textStyle:{align:"left",color:"#000",fontFamily:"Arial",fontSize:13,fontStyle:"normal",fontWeight:"normal"}},breadcrumb:{show:!0,textStyle:{}},borderWidth:1,borderColor:"#ccc",childBorderWidth:1,childBorderColor:"#ccc"},emphasis:{}}};var m=e("../util/ecData"),V=e("zrender/config"),U=(e("zrender/tool/event"),e("zrender/tool/util")),d=e("zrender/tool/color");return t.prototype={type:h.CHART_TYPE_TREEMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series),this._treesMap={};for(var t=this.series,i=this.component.legend,n=0;nt.width||e.normal.label.y+U>t.height)&&(h=""):h="",e.emphasis.label.show?(s.x+u>t.width||s.y+y>t.height)&&(p=""):p="";var g={style:{textX:t.x+e.normal.label.x,textY:t.y+e.normal.label.y,text:h,textPosition:"specific",textColor:o.color,textFont:m},highlightStyle:{textX:t.x+e.emphasis.label.x,textY:t.y+e.emphasis.label.y,text:p,textColor:s.color,textPosition:"specific"}};return g},getLabelText:function(e,t,i){return i?"function"==typeof i?i.call(this.myChart,e,t):"string"==typeof i?(i=i.replace("{b}","{b0}").replace("{c}","{c0}"),i=i.replace("{b0}",e).replace("{c0}",t)):void 0:e},_buildChildrenTreemap:function(e,t,i,n){for(var a=i.width*i.height,o=0,r=[],l=0;l ":"")},V),clickable:!0,highlightStyle:p});m.set(u,"seriesIndex",t),m.set(u,"name",a[c]),i+=u.getRect(u.style).width,this.shapeList.push(u)}},__onclick:function(e){var t=e.target;if(t){var i=m.get(t,"seriesIndex"),n=m.get(t,"name"),a=this._treesMap[i],o=a.getNodeById(n);o&&o.children.length&&this._buildTreemap(o,i)}}},U.inherits(t,i),e("../chart").define("treemap",t),t}),i("echarts/layout/TreeMap",["require"],function(){function e(e){({x:e.x,y:e.y,width:e.width,height:e.height});this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height}return e.prototype.run=function(e){var t=[];return this._squarify(e,{x:this.x,y:this.y,width:this.width,height:this.height},t),t},e.prototype._squarify=function(e,t,i){var n="VERTICAL",a=t.width,o=t.height;t.widthl;l++)r[s].y+=r[l].height}var h={};if("VERTICAL"==n){for(var m=0;ml;l++){var h=i*e[l]/o;a.push({width:s,height:h})}return a},e.prototype._isFirstBetter=function(e,t){var i=e[0].height/e[0].width;i=i>1?1/i:i;var n=t[0].height/t[0].width;return n=n>1?1/n:n,Math.abs(i-1)<=Math.abs(n-1)?!0:!1},e}),i("echarts/data/Tree",["require","zrender/tool/util"],function(e){function t(e,t){this.id=e,this.depth=0,this.height=0,this.children=[],this.parent=null,this.data=t||null}function i(e){this.root=new t(e)}var n=e("zrender/tool/util");return t.prototype.add=function(e){var t=this.children;e.parent!==this&&(t.push(e),e.parent=this)},t.prototype.remove=function(e){var t=this.children,i=n.indexOf(t,e);i>=0&&(t.splice(i,1),e.parent=null)},t.prototype.traverse=function(e,t){e.call(t,this);for(var i=0;it&&(t=n.height)}this.height=t+1},t.prototype.getNodeById=function(e){if(this.id===e)return this;for(var t=0;t0&&this._buildLink(i,e)},this);var n=e.roam===!0||"move"===e.roam,a=e.roam===!0||"scale"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:n,zoomable:a}),(this.query("markPoint.effect.show")||this.query("markLine.effect.show"))&&this.zr.modLayer(m.EFFECT_ZLEVEL,{panable:n,zoomable:a}),this.addShapeList()},_buildItem:function(e,t,i){var n=[e.data,t],r=this.deepQuery(n,"symbol"),s=this.deepMerge(n,"itemStyle.normal")||{},l=this.deepMerge(n,"itemStyle.emphasis")||{},h=s.color||this.zr.getColor(),m=l.color||this.zr.getColor(),U=-e.layout.angle||0;e.id===this.tree.root.id&&(U=0);var d="right";Math.abs(U)>=Math.PI/2&&Math.abs(U)<3*Math.PI/2&&(U+=Math.PI,d="left");var p=[U,e.layout.position[0],e.layout.position[1]],c=new a({zlevel:this.getZlevelBase(),z:this.getZBase()+1,rotation:p,clickable:this.deepQuery(n,"clickable"),style:{x:e.layout.position[0]-.5*e.layout.width,y:e.layout.position[1]-.5*e.layout.height,width:e.layout.width,height:e.layout.height,iconType:r,color:h,brushType:"both",lineWidth:s.borderWidth,strokeColor:s.borderColor},highlightStyle:{color:m,lineWidth:l.borderWidth,strokeColor:l.borderColor}});c.style.iconType.match("image")&&(c.style.image=c.style.iconType.replace(new RegExp("^image:\\/\\/"),""),c=new o({rotation:p,style:c.style,highlightStyle:c.highlightStyle,clickable:c.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(n,"itemStyle.normal.label.show")&&(c.style.text=null==e.data.label?e.id:e.data.label,c.style.textPosition=this.deepQuery(n,"itemStyle.normal.label.position"),"radial"===t.orient&&"inside"!==c.style.textPosition&&(c.style.textPosition=d),c.style.textColor=this.deepQuery(n,"itemStyle.normal.label.textStyle.color"),c.style.textFont=this.getFont(this.deepQuery(n,"itemStyle.normal.label.textStyle")||{})),this.deepQuery(n,"itemStyle.emphasis.label.show")&&(c.highlightStyle.textPosition=this.deepQuery(n,"itemStyle.emphasis.label.position"),c.highlightStyle.textColor=this.deepQuery(n,"itemStyle.emphasis.label.textStyle.color"),c.highlightStyle.textFont=this.getFont(this.deepQuery(n,"itemStyle.emphasis.label.textStyle")||{})),V.pack(c,t,i,e.data,0,e.id),this.shapeList.push(c)},_buildLink:function(e,t){var i=t.itemStyle.normal.lineStyle;if("broken"===i.type)return void this._buildBrokenLine(e,i,t);for(var n=0;nr&&(t=r),r>n&&(n=r)}e.layout.position[0]=e.children.length>0?(t+n)/2:0;var s=this._layerOffsets[e.depth]||0;if(s>e.layout.position[0]){var l=s-e.layout.position[0];this._shiftSubtree(e,l);for(var a=e.depth+1;ai;i++)this._buildTextShape(e[i],0,i);this.addShapeList()},_buildTextShape:function(e,t,i){var a=this.series,o=a[t],s=o.name||"",h=o.data[i],m=[h,o],V=this.component.legend,U=V?V.getColor(s):this.zr.getColor(t),d=this.deepMerge(m,"itemStyle.normal")||{},p=this.deepMerge(m,"itemStyle.emphasis")||{},c=this.getItemStyleColor(d.color,t,i,h)||U,u=this.getItemStyleColor(p.color,t,i,h)||("string"==typeof c?l.lift(c,-.2):c),y=new n({zlevel:o.zlevel,z:o.z,hoverable:!0,clickable:this.deepQuery(m,"clickable"),style:{x:0,y:0,text:e.text,color:c,textFont:[e.style,e.weight,e.size+"px",e.font].join(" "),textBaseline:"alphabetic",textAlign:"center"},highlightStyle:{brushType:p.borderWidth?"both":"fill",color:u,lineWidth:p.borderWidth||0,strokeColor:p.borderColor},position:[e.x,e.y],rotation:[-e.rotate/180*Math.PI,0,0]});r.pack(y,o,t,h,i,h.name),this.shapeList.push(y)}},s.inherits(t,i),e("../chart").define("wordCloud",t),t}),i("echarts/layout/WordCloud",["require","../layout/WordCloudRectZero","zrender/tool/util"],function(e){function t(e){this._init(e)}var i=e("../layout/WordCloudRectZero"),n=e("zrender/tool/util");return t.prototype={start:function(){function e(){p.totalArea=r,U.autoSizeCal.enable&&p._autoCalTextSize(m,r,a,o,U.autoSizeCal.minSize),V.timer&&clearInterval(V.timer),V.timer=setInterval(t,0),t()}function t(){for(var e,t=+new Date,i=m.length;+new Date-t>1,e.y=d[1]>>1,p._cloudSprite(e,m,s),e.hasText&&p._place(n,e,h)&&(l.push(e),e.x-=d[0]>>1,e.y-=d[1]>>1);s>=i&&(p.stop(),p._fixTagPosition(l),V.endcallback(l))}var n=null,a=0,o=0,r=0,s=-1,l=[],h=null,m=this.wordsdata,V=this.defaultOption,U=V.wordletype,d=V.size,p=this,c=new i({type:U.type,width:d[0],height:d[1]});return c.calculate(function(t){n=t.initarr,a=t.maxWit,o=t.maxHit,r=t.area,h=t.imgboard,e()},this),this},_fixTagPosition:function(e){for(var t=this.defaultOption.center,i=0,n=e.length;n>i;i++)e[i].x+=t[0],e[i].y+=t[1]},stop:function(){return this.defaultOption.timer&&(clearInterval(this.defaultOption.timer),this.defaultOption.timer=null),this},end:function(e){return e&&(this.defaultOption.endcallback=e),this},_init:function(e){this.defaultOption={},this._initProperty(e),this._initMethod(e),this._initCanvas(),this._initData(e.data)},_initData:function(e){var t=this,i=t.defaultOption;this.wordsdata=e.map(function(e,n){return e.text=i.text.call(t,e,n),e.font=i.font.call(t,e,n),e.style=i.fontStyle.call(t,e,n),e.weight=i.fontWeight.call(t,e,n),e.rotate=i.rotate.call(t,e,n),e.size=~~i.fontSize.call(t,e,n),e.padding=i.padding.call(t,e,n),e}).sort(function(e,t){return t.value-e.value})},_initMethod:function(e){function t(e){return e.name}function i(){return"sans-serif"}function n(){return"normal"}function a(e){return e.value}function o(){return 0}function r(e){return function(){return e[Math.round(Math.random()*(e.length-1))]}}function s(){return 0}function l(e){var t=e[0]/e[1];return function(e){return[t*(e*=.1)*Math.cos(e),e*Math.sin(e)]}}function h(e){var t=4,i=t*e[0]/e[1],n=0,a=0;return function(e){var o=0>e?-1:1;switch(Math.sqrt(1+4*o*e)-o&3){case 0:n+=i;break;case 1:a+=t;break;case 2:n-=i;break;default:a-=t}return[n,a]}}function m(e){return"function"==typeof e?e:function(){return e}}var V=this.defaultOption;V.text=e.text?m(e.text):t,V.font=e.font?m(e.font):i,V.fontSize=e.fontSize?m(e.fontSize):a,V.fontStyle=e.fontStyle?m(e.fontStyle):n,V.fontWeight=e.fontWeight?m(e.fontWeight):n,V.rotate=e.rotate?r(e.rotate):o,V.padding=e.padding?m(e.padding):s,V.center=e.center,V.spiral=l,V.endcallback=function(){},V.rectangularSpiral=h,V.archimedeanSpiral=l},_initProperty:function(e){var t=this.defaultOption;t.size=e.size||[256,256],t.wordletype=e.wordletype,t.words=e.words||[],t.timeInterval=1/0,t.timer=null,t.spirals={archimedean:t.archimedeanSpiral,rectangular:t.rectangularSpiral},n.merge(t,{size:[256,256],wordletype:{type:"RECT",areaPresent:.058,autoSizeCal:{enable:!0,minSize:12}}})},_initCanvas:function(){var e,t=Math.PI/180,i=64,n=2048,a=1;"undefined"!=typeof document?(e=document.createElement("canvas"),e.width=1,e.height=1,a=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2),e.width=(i<<5)/a,e.height=n/a):e=new Canvas(i<<5,n);var o=e.getContext("2d");o.fillStyle=o.strokeStyle="red",o.textAlign="center",this.defaultOption.c=o,this.defaultOption.cw=i,this.defaultOption.ch=n,this.defaultOption.ratio=a,this.defaultOption.cloudRadians=t},_cloudSprite:function(e,t,i){if(!e.sprite){var n=this.defaultOption.cw,a=this.defaultOption.ch,o=this.defaultOption.c,r=this.defaultOption.ratio,s=this.defaultOption.cloudRadians;o.clearRect(0,0,(n<<5)/r,a/r);var l=0,h=0,m=0,V=t.length;for(--i;++i>5<<5,d=~~Math.max(Math.abs(y+g),Math.abs(y-g))}else U=U+31>>5<<5;if(d>m&&(m=d),l+U>=n<<5&&(l=0,h+=m,m=0),h+d>=a)break;o.translate((l+(U>>1))/r,(h+(d>>1))/r),e.rotate&&o.rotate(e.rotate*s),o.fillText(e.text,0,0),e.padding&&(o.lineWidth=2*e.padding,o.strokeText(e.text,0,0)),o.restore(),e.width=U,e.height=d,e.xoff=l,e.yoff=h,e.x1=U>>1,e.y1=d>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,l+=U}for(var f=o.getImageData(0,0,(n<<5)/r,a/r).data,k=[];--i>=0;)if(e=t[i],e.hasText){for(var U=e.width,x=U>>5,d=e.y1-e.y0,_=0;d*x>_;_++)k[_]=0;if(l=e.xoff,null==l)return;h=e.yoff;for(var L=0,W=-1,X=0;d>X;X++){for(var _=0;U>_;_++){var v=x*X+(_>>5),w=f[(h+X)*(n<<5)+(l+_)<<2]?1<<31-_%32:0;k[v]|=w,L|=w}L?W=X:(e.y0++,d--,X--,h++)}e.y1=e.y0+W,e.sprite=k.slice(0,(e.y1-e.y0)*x)}}},_place:function(e,t,i){function n(e,t,i){i>>=5;for(var n,a=e.sprite,o=e.width>>5,r=e.x-(o<<4),s=127&r,l=32-s,h=e.y1-e.y0,m=(e.y+e.y0)*i+(r>>5),V=0;h>V;V++){n=0;for(var U=0;o>=U;U++)if((n<U?(n=a[V*o+U])>>>s:0))&t[m+U])return!0;m+=i}return!1}function a(e,t){return t.row[e.y]&&t.cloumn[e.x]&&e.x>=t.row[e.y].start&&e.x<=t.row[e.y].end&&e.y>=t.cloumn[e.x].start&&e.y<=t.cloumn[e.x].end}for(var o,r,s,l=this.defaultOption.size,h=([{x:0,y:0},{x:l[0],y:l[1]}],t.x),m=t.y,V=Math.sqrt(l[0]*l[0]+l[1]*l[1]),U=this.defaultOption.spiral(l),d=Math.random()<.5?1:-1,p=-d;(o=U(p+=d))&&(r=~~o[0],s=~~o[1],!(Math.min(r,s)>V));)if(t.x=h+r,t.y=m+s,!(t.x+t.x0<0||t.y+t.y0<0||t.x+t.x1>l[0]||t.y+t.y1>l[1])&&!n(t,e,l[0])&&a(t,i)){for(var c,u=t.sprite,y=t.width>>5,g=l[0]>>5,b=t.x-(y<<4),f=127&b,k=32-f,x=t.y1-t.y0,_=(t.y+t.y0)*g+(b>>5),L=0;x>L;L++){c=0;for(var W=0;y>=W;W++)e[_+W]|=c<W?(c=u[L*y+W])>>>f:0);_+=g}return delete t.sprite,!0}return!1},_autoCalTextSize:function(e,t,i,n,a){function o(e){c.clearRect(0,0,(d<<5)/u,p/u),c.save(),c.font=e.style+" "+e.weight+" "+~~((e.size+1)/u)+"px "+e.font;var t=c.measureText(e.text+"m").width*u,r=e.size<<1;t=t+31>>5<<5,c.restore(),e.aw=t,e.ah=r;var s,l,h;if(e.rotate){var m=Math.sin(e.rotate*y),V=Math.cos(e.rotate*y),g=t*V,b=t*m,f=r*V,k=r*m;l=Math.max(Math.abs(g+k),Math.abs(g-k))+31>>5<<5,h=~~Math.max(Math.abs(b+f),Math.abs(b-f))}return e.size<=U||e.rotate&&t*r<=e.area&&i>=l&&n>=h||t*r<=e.area&&i>=t&&n>=r?void(e.area=t*r):(s=e.rotate&&l>i&&h>n?Math.min(i/l,n/h):t>i||r>n?Math.min(i/t,n/r):Math.sqrt(e.area/(e.aw*e.ah)),e.size=~~(s*e.size),e.sizel?l:V:l,s.area=t*s.areapre,s.totalarea=t,o(s)}},t}),i("echarts/layout/WordCloudRectZero",["require"],function(){function e(e){this.defaultOption={type:"RECT"},this._init(e)}return e.prototype={RECT:"_calculateRect",_init:function(e){this._initOption(e),this._initCanvas()},_initOption:function(e){for(k in e)this.defaultOption[k]=e[k]},_initCanvas:function(){var e=document.createElement("canvas");e.width=1,e.height=1;var t=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2);if(e.width=this.defaultOption.width,e.height=this.defaultOption.height,e.getContext)var i=e.getContext("2d");this.canvas=e,this.ctx=i,this.ratio=t},calculate:function(e,t){var i=this.defaultOption.type,n=this[i];this[n].call(this,e,t)},_calculateReturn:function(e,t,i){t.call(i,e)},_calculateRect:function(e,t){var i={},n=this.defaultOption.width>>5<<5,a=this.defaultOption.height;i.initarr=this._rectZeroArray(n*a),i.area=n*a,i.maxHit=a,i.maxWit=n,i.imgboard=this._rectBoard(n,a),this._calculateReturn(i,e,t)},_rectBoard:function(e,t){for(var i=[],n=0;t>n;n++)i.push({y:n,start:0,end:e});for(var a=[],n=0;e>n;n++)a.push({x:n,start:0,end:t});return{row:i,cloumn:a}},_rectZeroArray:function(e){for(var t=[],i=e,n=-1;++ni;++i)if(e[i].type===a.CHART_TYPE_HEATMAP){e[i]=this.reformOption(e[i]);var o=new n(e[i]),s=o.getCanvas(e[i].data,this.zr.getWidth(),this.zr.getHeight()),l=new r({position:[0,0],scale:[1,1],hoverable:this.option.hoverable,style:{x:0,y:0,image:s,width:s.width,height:s.height}});this.shapeList.push(l)}this.addShapeList()}},o.inherits(t,i),e("../chart").define("heatmap",t),t});var n=t("zrender");n.tool={color:t("zrender/tool/color"),math:t("zrender/tool/math"),util:t("zrender/tool/util"),vector:t("zrender/tool/vector"),area:t("zrender/tool/area"),event:t("zrender/tool/event")},n.animation={Animation:t("zrender/animation/Animation"),Cip:t("zrender/animation/Clip"),easing:t("zrender/animation/easing")};var a=t("echarts");a.config=t("echarts/config"),a.util={mapData:{params:t("echarts/util/mapData/params")}},t("echarts/chart/line"),t("echarts/chart/bar"),t("echarts/chart/scatter"),t("echarts/chart/k"),t("echarts/chart/pie"),t("echarts/chart/radar"),t("echarts/chart/chord"),t("echarts/chart/force"),t("echarts/chart/map"),t("echarts/chart/gauge"),t("echarts/chart/funnel"),t("echarts/chart/eventRiver"),t("echarts/chart/venn"),t("echarts/chart/treemap"),t("echarts/chart/tree"),t("echarts/chart/wordCloud"),t("echarts/chart/heatmap"),e.echarts=a,e.zrender=n}(window); ================================================ FILE: examples/hello-mui/manifest.json ================================================ { "@platforms": [ "android", "iPhone", "iPad" ], "id": "hellomui",/*必选,应用的标识*/ "name": "hellomui",/*必选,应用名称*/ "version": { "name": "1.0.0",/*必选,版本名称*/ "code": "100" }, "description": "",/*可选,应用描述信息*/ "icons": { "72": "icon.png" }, "fullscreen": true, "launch_path": "index.html",/*必选,应用的入口页面,默认为根目录下的index.html;也可以是网络地址,网络地址必须以http://或https://开头*/ "developer": { "email": "",/*可选,开发者名称*/ "name": "",/*可选,开发者邮箱地址*/ "url": "" }, "permissions": { "Events": { "description": "应用扩展事件" }, "Speech": { "description": "管理语音识别插件" }, "Payment": {}, "Share": {}, "Push": {}, "Maps": {}, "OAuth": {}, "Contacts": {}, "Statistic": {}, "Messaging": {} }, "plus": { "launchwebview": { "titleNView": { "backgroundcolor": "#f7f7f7", "titletext": "首页", "titlecolor": "#000000" } }, "statusbar": { "immersed": "supportedDevice", "style": "dark" }, "popGesture": "close",/*设置应用默认侧滑返回关闭Webview窗口,none为无侧滑返回功能,hide为侧滑隐藏Webview窗口。参考ask.dcloud.net.cn/article/102*/ "splashscreen": { "autoclose": false,/*如果为true,程序启动的图片可以自动关闭,如果为false,开发者需要手动关闭*/ "waiting": true }, "runmode": "normal",/*两个值,liberate或normal,前者在应用安装时释放资源,后者不需要释放资源*/ "signature": "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==",/*可选,保留给应用签名,暂不使用*/ "distribute": { "debug": "",/*可选,是否为debug模式,可取值:true表示debug模式运行,false表示release模式运行,默认值为false*/ "apple": { "appid": "",/*iOS必选,苹果开发网站申请的appid,如io.dcloud.HelloMUI*/ "mobileprovision": "",/*iOS必选,打包配置文件*/ "password": "",/*iOS必选,导入配置文件密码*/ "p12": "",/*iOS必选,打包配置文件关联的个人证书*/ "devices": "universal",/*iphone,可取值iphone/ipad/universal*/ "frameworks": [] }, "google": { "packagename": "",/*Android必选,程序包名,如io.dcloud.HelloMUI*/ "keystore": "",/*Android必选,打包证书文件*/ "password": "",/*Android必选,打包证书密码*/ "aliasname": "",/*Android必选,打包证书别名*/ "permissions": ["","","","","","","","","","","","","","","","","","","","","","","","","","","","",""] }, "orientation": [ "portrait-primary", "landscape-primary", "portrait-secondary", "landscape-secondary" ],/*必选*/ "icons": { "ios": { "prerendered": "", /*必选,是否高亮显示*/ "auto": "", /*可选,512x512,用于自动生成各种尺寸图标的大分辨率程序图标*/ "iphone": { "normal": "",/*可选,57x57,iPhone普通屏幕程序图标*/ "retina": "",/*可选,114x114,iPhone高分屏程序图标*/ "retina7": "",/*可选,120x120,iPhone iOS7高分屏程序图标*/ "spotlight-normal": "", /*可选,29x29,iPhone Spotlight搜索程序图标*/ "spotlight-retina": "", /*可选,58x58,iPhone高分屏Spotlight搜索程序图标*/ "spotlight-retina7": "",/*可选,80x80,iPhone iOS7高分屏Spotlight搜索程序图标*/ "settings-normal": "", /*可选,29x29,iPhone设置页面程序图标*/ "settings-retina": "" }, "ipad": { "normal": "", /*可选,72x72,iPad普通屏幕程序图标*/ "retina": "", /*可选,144x144,iPad高分屏程序图标*/ "normal7": "", /*可选,76x76,iPad iOS7程序图标*/ "retina7": "", /*可选,152x152,iPad iOS7高分屏程序图标*/ "spotlight-normal": "", /*可选,50x50,iPad Spotlight搜索程序图标*/ "spotlight-retina": "", /*可选,100x100,iPad高分屏Spotlight搜索程序图标*/ "spotlight-normal7": "",/*可选,40x40,iPad iOS7 Spotlight搜索程序图标*/ "spotlight-retina7": "",/*可选,80x80,iPad iOS7高分屏Spotlight搜索程序图标*/ "settings-normal": "",/*可选,29x29,iPad设置页面程序图标*/ "settings-retina": "" } }, "android": { "mdpi": "", /*必选,48x48,普通屏程序图标*/ "ldpi": "", /*必选,48x48,大屏程序图标*/ "hdpi": "", /*必选,72x72,高分屏程序图标*/ "xhdpi": "",/*必选,96x96,720P高分屏程序图标*/ "xxhdpi": "" } }, "splashscreen": { "ios": { "iphone": { "default": "", /*必选,320x480,iPhone3启动图片*/ "retina35": "",/*必选,640x960,3.5英寸设备(iPhone4)启动图片*/ "retina40": "" }, "ipad": { "portrait": "", /*可选,768x1004,需支持iPad时必选,iPad竖屏启动图片*/ "portrait-retina": "",/*可选,1536x2008,需支持iPad时必选,iPad高分屏竖屏图片*/ "landscape": "", /*可选,1024x748,需支持iPad时必选,iPad横屏启动图片*/ "landscape-retina": "", /*可选 ,2048x1496,需支持iPad时必选,iPad高分屏横屏启动图片*/ "portrait7": "", /*可选,768x1024,需支持iPad iOS7时必选,iPad竖屏启动图片*/ "portrait-retina7": "",/*可选,1536x2048,需支持iPad iOS7时必选,iPad高分屏竖屏图片*/ "landscape7": "", /*可选,1024x768,需支持iPad iOS7时必选,iPad横屏启动图片*/ "landscape-retina7": "" } }, "android": { "mdpi": "", /*必选,240x282,普通屏启动图片*/ "ldpi": "", /*必选,320x442,大屏启动图片*/ "hdpi": "", /*必选,480x762,高分屏启动图片*/ "xhdpi": "", /*必选,720x1242,720P高分屏启动图片*/ "xxhdpi": "" } } }, "schemeWhitelist":["market"] }, "dependencies": { "pages": { "index.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css", "js/update.js", "list.html" ], "refer": [ "index-menu.html" ], "priority": 0 }, "examples/tab-webview-subpage-contact.html": { "resources": [ "images/60x60.gif", "js/mui.min.js", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tab-webview-main.html": { "resources": [ "examples/tab-webview-subpage-setting.html", "examples/tab-webview-subpage-chat.html", "examples/tab-webview-subpage-contact.html", "examples/tab-webview-subpage-about.html", "fonts/mui.ttf", "js/mui.min.js", "css/mui.min.css" ], "refer": [], "priority": 0 }, "list.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [ "examples/template.html", "examples/tab-webview-main.html", "examples/pullrefresh_main.html", "examples/ajax.html", "examples/accordion.html", "examples/buttons.html", "examples/guide.html", "examples/badges.html", "examples/actionsheet.html", "examples/actionsheet-plus.html", "examples/ad.html", "examples/buttons-with-icons.html", "examples/buttons-with-badges.html", "examples/buttons-with-block.html", "examples/checkbox.html", "examples/clouddb_wilddog.html", "examples/dtpicker.html", "examples/date.html", "examples/dialog.html", "examples/slider-default.html", "examples/slider-with-title.html", "examples/slider-table-default.html", "examples/slider-table-pagination.html", "examples/grid-default.html", "examples/grid-pagination.html", "examples/icons.html", "examples/input.html", "examples/echarts.html", "examples/imageviewer.html", "examples/indexed-list.html", "examples/indexed-list-select.html", "examples/lazyload-image.html", "examples/locker-dom.html", "examples/login.html", "examples/setting.html", "examples/offcanvas-drag-right-plus-main.html", "examples/offcanvas-drag-left-plus-main.html", "examples/offcanvas-drag-right.html", "examples/offcanvas-drag-left.html", "examples/offcanvas-drag-down.html", "examples/picker.html", "examples/pagination.html", "examples/popovers.html", "examples/pullrefresh_with_tab.html", "examples/radio.html", "examples/range.html", "examples/switches.html", "examples/tabbar.html", "examples/tabbar-with-submenus.html", "examples/tab-with-viewpagerindicator.html", "examples/tab-with-segmented-control.html", "examples/tab-with-segmented-control-vertical.html", "examples/typography.html", "examples/im-chat.html", "examples/info.html", "examples/tableviews.html", "examples/tableviews-with-badges.html", "examples/list-with-input.html", "examples/list-triplex-row.html", "examples/tableviews-with-collapses.html", "examples/tableviews-with-swipe.html", "examples/media-list.html", "examples/nav.html", "examples/numbox.html" ], "priority": 0 }, "examples/pullrefresh_main.html": { "resources": [ "examples/pullrefresh_sub.html", "fonts/mui.ttf", "js/mui.min.js", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/ajax.html": { "resources": [ "css/app.css", "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/accordion.html": { "resources": [ "images/cbd.jpg", "images/muwu.jpg", "images/yuantiao.jpg", "images/shuijiao.jpg", "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tab-webview-subpage-setting.html": { "resources": [ "fonts/mui.ttf", "js/mui.min.js", "css/mui.min.css" ], "refer": [], "priority": 0 }, "index-menu.html": { "resources": [ "fonts/mui.ttf", "js/mui.min.js", "css/mui.min.css" ], "refer": [ "examples/offcanvas-drag-left.html" ], "priority": 0 }, "examples/template.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tab-webview-subpage-about.html": { "resources": [ "js/mui.min.js", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/guide.html": { "resources": [ "js/mui.min.js", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/badges.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css", "fonts/mui.ttf" ], "refer": [], "priority": 0 }, "examples/actionsheet.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/actionsheet-plus.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/ad.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css", "js/ad.js" ], "refer": [], "priority": 0 }, "examples/buttons.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css", "fonts/mui.ttf" ], "refer": [], "priority": 0 }, "examples/buttons-with-icons.html": { "resources": [ "css/app.css", "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/buttons-with-badges.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/buttons-with-block.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/checkbox.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tab-webview-subpage-chat.html": { "resources": [ "fonts/mui.ttf", "js/mui.min.js", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/clouddb_wilddog.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/dtpicker.html": { "resources": [ "js/mui.picker.min.js", "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css", "css/mui.picker.min.css" ], "refer": [], "priority": 0 }, "examples/date.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css", "fonts/mui.ttf" ], "refer": [], "priority": 0 }, "examples/dialog.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/slider-default.html": { "resources": [ "images/cbd.jpg", "images/muwu.jpg", "images/yuantiao.jpg", "js/mui.min.js", "css/app.css", "css/mui.min.css", "images/shuijiao.jpg" ], "refer": [], "priority": 0 }, "examples/slider-with-title.html": { "resources": [ "images/cbd.jpg", "images/yuantiao.jpg", "images/muwu.jpg", "js/mui.min.js", "css/app.css", "css/mui.min.css", "images/shuijiao.jpg" ], "refer": [], "priority": 0 }, "examples/slider-table-default.html": { "resources": [ "images/cbd.jpg", "images/yuantiao.jpg", "images/muwu.jpg", "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css", "images/shuijiao.jpg" ], "refer": [], "priority": 0 }, "examples/slider-table-pagination.html": { "resources": [ "images/cbd.jpg", "images/muwu.jpg", "images/yuantiao.jpg", "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css", "images/shuijiao.jpg" ], "refer": [], "priority": 0 }, "examples/grid-default.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/grid-pagination.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/icons.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/input.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/pullrefresh_sub.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/echarts.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css", "libs/echarts-all.js" ], "refer": [], "priority": 0 }, "examples/imageviewer.html": { "resources": [ "js/mui.zoom.js", "images/muwu.jpg", "images/yuantiao.jpg", "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css", "js/mui.previewimage.js", "images/shuijiao.jpg" ], "refer": [], "priority": 0 }, "examples/indexed-list.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css", "css/mui.indexedlist.css", "js/mui.indexedlist.js" ], "refer": [], "priority": 0 }, "examples/indexed-list-select.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css", "css/mui.indexedlist.css", "js/mui.indexedlist.js" ], "refer": [], "priority": 0 }, "examples/lazyload-image.html": { "resources": [ "js/mui.min.js", "css/app.css", "images/60x60.gif", "fonts/mui.ttf", "css/mui.min.css", "js/mui.lazyload.js", "js/mui.lazyload.img.js" ], "refer": [], "priority": 0 }, "examples/locker-dom.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css", "js/mui.locker.js" ], "refer": [], "priority": 0 }, "examples/login.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css", "images/login-1.png" ], "refer": [], "priority": 0 }, "examples/setting.html": { "resources": [ "images/logo.png", "libs/easymob-webim-sdk/easemob.im-1.0.5.js", "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css", "libs/easymob-webim-sdk/json2.js", "libs/easymob-webim-sdk/jquery-1.11.1.js", "js/feedback.js", "css/feedback-page.css", "js/feedback-page.js", "libs/easymob-webim-sdk/strophe-custom-2.0.0.js", "js/mui.view.js", "images/iconfont-tianjia.png" ], "refer": [], "priority": 0 }, "examples/offcanvas-drag-right-plus-main.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [ "examples/offcanvas-drag-right-plus-menu.html" ], "priority": 0 }, "examples/offcanvas-drag-right-plus-menu.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/offcanvas-drag-left-plus-menu.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/offcanvas-drag-left-plus-main.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [ "examples/offcanvas-drag-left-plus-menu.html" ], "priority": 0 }, "examples/offcanvas-drag-right.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/offcanvas-drag-left.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/offcanvas-drag-down.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/picker.html": { "resources": [ "js/mui.picker.js", "js/mui.min.js", "css/app.css", "js/mui.poppicker.js", "fonts/mui.ttf", "css/mui.min.css", "js/city.data.js", "css/mui.poppicker.css", "css/mui.picker.css", "js/city.data-3.js" ], "refer": [], "priority": 0 }, "examples/pagination.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/popovers.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/pullrefresh_with_tab.html": { "resources": [ "js/mui.pullToRefresh.js", "js/mui.min.js", "js/mui.pullToRefresh.material.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/radio.html": { "resources": [ "css/app.css", "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/range.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/switches.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tabbar.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "images/60x60.gif", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tabbar-with-submenus.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tab-with-viewpagerindicator.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tab-with-segmented-control.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tab-with-segmented-control-vertical.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/typography.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/im-chat.html": { "resources": [ "js/mui.imageViewer.js", "images/logo.png", "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css", "css/mui.imageviewer.css", "js/arttmpl.js" ], "refer": [], "priority": 0 }, "examples/info.html": { "resources": [ "js/mui.min.js", "css/app.css", "css/mui.min.css", "images/qrcode.png" ], "refer": [], "priority": 0 }, "examples/beecloud.html": { "resources": [ "js/mui.min.js", "js/beecloud.js", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tableviews.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tableviews-with-badges.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/list-with-input.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/list-triplex-row.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tableviews-with-collapses.html": { "resources": [ "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/tableviews-with-swipe.html": { "resources": [ "css/app.css", "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/media-list.html": { "resources": [ "images/cbd.jpg", "images/yuantiao.jpg", "images/muwu.jpg", "js/mui.min.js", "css/app.css", "fonts/mui.ttf", "css/mui.min.css", "images/shuijiao.jpg" ], "refer": [], "priority": 0 }, "examples/nav.html": { "resources": [ "js/mui.min.js", "fonts/mui.ttf", "css/mui.min.css" ], "refer": [], "priority": 0 }, "examples/numbox.html": { "resources": [ "css/app.css", "css/mui.min.css", "js/mui.js" ], "refer": [], "priority": 0 } }, "idle": { "resources": [ "js/mui.dtpicker.js", "css/mui.listpicker.css", "css/mui.dtpicker.css", "css/mui.picker.all.css", "examples/modals.html", "examples/tabbar-labels-only.html", "js/mui.listpicker.js", "libs/easymob-webim-sdk/quickstart.md", "js/mui.picker.all.js" ] } } } ================================================ FILE: examples/login/.project ================================================ login com.aptana.ide.core.unifiedBuilder com.pandora.projects.ui.MKeyBuilder com.pandora.projects.ui.MKeyNature ================================================ FILE: examples/login/README.md ================================================ ## 简单概述 这是带登录和设置功能的mui模板项目,主要为了演示登录流程及设置界面div窗口切换效果; ## 核心功能 1. 启动App后校验登录状态,若已登录,直接跳转应用首页;否则,显示登录页面; 2. 支持本地注册; 3. 支持设置手势密码,登录时可使用手势密码代替账号、密码; 4. 支持评分、分享、拨打客服电话 ## 关联项目 基于 uni-app 的登录模板功能更为完善,主要有如下特点: - 前后一体项目,后端基于[uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README)实现 - 支持短信验证码登录 详情参考:[https://github.com/dcloudio/uni-template-login](https://github.com/dcloudio/uni-template-login) ================================================ FILE: examples/login/css/feedback-page.css ================================================ .feedback body { background-color: #EFEFF4; } .feedback input, .feedback textarea { border: none !important; } .feedback textarea { height: 100px; margin-bottom: 0 !important; padding-bottom: 0 !important; } .feedback .row { width: 100%; background-color: #fff; } .feedback p { padding: 10px 15px 0; } .feedback button#submit { width: 90%; height: 46px; left: 50%; -webkit-transform: translate(-50%); } .feedback .hidden { display: none; } .feedback .image-list { width: 100%; height: 85px; background-size: cover; padding: 10px 10px; overflow: hidden; } .feedback .image-item { width: 65px; height: 65px; background-image: url(../images/iconfont-tianjia.png); background-size: 100% 100%; display: inline-block; position: relative; border-radius: 5px; margin-right: 10px; margin-bottom: 10px; border: solid 1px #e8e8e8; } .feedback .image-item input[type="file"] { position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 0; } .feedback .image-item.space { border: none; } .feedback .image-item .image-close { position: absolute; display: inline-block; right: -6px; top: -6px; width: 20px; height: 20px; text-align: center; line-height: 20px; border-radius: 12px; background-color: #FF5053; color: #f3f3f3; border: solid 1px #FF5053; font-size: 9px; font-weight: 200; z-index: 1; } .feedback .image-item.space .image-close { display: none; } ================================================ FILE: examples/login/css/style.css ================================================ .ui-page-login, body { width: 100%; height: 100%; margin: 0px; padding: 0px; } .mui-content{height: 100%;} ================================================ FILE: examples/login/forget_password.html ================================================

    找回密码

    ================================================ FILE: examples/login/js/app.js ================================================ /** * 演示程序当前的 “注册/登录” 等操作,是基于 “本地存储” 完成的 * 当您要参考这个演示程序进行相关 app 的开发时, * 请注意将相关方法调整成 “基于服务端Service” 的实现。 **/ (function($, owner) { /** * 用户登录 **/ owner.login = function(loginInfo, callback) { callback = callback || $.noop; loginInfo = loginInfo || {}; loginInfo.account = loginInfo.account || ''; loginInfo.password = loginInfo.password || ''; if (loginInfo.account.length < 5) { return callback('账号最短为 5 个字符'); } if (loginInfo.password.length < 6) { return callback('密码最短为 6 个字符'); } var users = JSON.parse(localStorage.getItem('$users') || '[]'); var authed = users.some(function(user) { return loginInfo.account == user.account && loginInfo.password == user.password; }); if (authed) { return owner.createState(loginInfo.account, callback); } else { return callback('用户名或密码错误'); } }; owner.createState = function(name, callback) { var state = owner.getState(); state.account = name; state.token = "token123456789"; owner.setState(state); return callback(); }; /** * 新用户注册 **/ owner.reg = function(regInfo, callback) { callback = callback || $.noop; regInfo = regInfo || {}; regInfo.account = regInfo.account || ''; regInfo.password = regInfo.password || ''; if (regInfo.account.length < 5) { return callback('用户名最短需要 5 个字符'); } if (regInfo.password.length < 6) { return callback('密码最短需要 6 个字符'); } if (!checkEmail(regInfo.email)) { return callback('邮箱地址不合法'); } var users = JSON.parse(localStorage.getItem('$users') || '[]'); users.push(regInfo); localStorage.setItem('$users', JSON.stringify(users)); return callback(); }; /** * 获取当前状态 **/ owner.getState = function() { var stateText = localStorage.getItem('$state') || "{}"; return JSON.parse(stateText); }; /** * 设置当前状态 **/ owner.setState = function(state) { state = state || {}; localStorage.setItem('$state', JSON.stringify(state)); //var settings = owner.getSettings(); //settings.gestures = ''; //owner.setSettings(settings); }; var checkEmail = function(email) { email = email || ''; return (email.length > 3 && email.indexOf('@') > -1); }; /** * 找回密码 **/ owner.forgetPassword = function(email, callback) { callback = callback || $.noop; if (!checkEmail(email)) { return callback('邮箱地址不合法'); } return callback(null, '新的随机密码已经发送到您的邮箱,请查收邮件。'); }; /** * 获取应用本地配置 **/ owner.setSettings = function(settings) { settings = settings || {}; localStorage.setItem('$settings', JSON.stringify(settings)); } /** * 设置应用本地配置 **/ owner.getSettings = function() { var settingsText = localStorage.getItem('$settings') || "{}"; return JSON.parse(settingsText); } /** * 获取本地是否安装客户端 **/ owner.isInstalled = function(id) { if (id === 'qihoo' && mui.os.plus) { return true; } if (mui.os.android) { var main = plus.android.runtimeMainActivity(); var packageManager = main.getPackageManager(); var PackageManager = plus.android.importClass(packageManager) var packageName = { "qq": "com.tencent.mobileqq", "weixin": "com.tencent.mm", "sinaweibo": "com.sina.weibo" } try { return packageManager.getPackageInfo(packageName[id], PackageManager.GET_ACTIVITIES); } catch (e) {} } else { switch (id) { case "qq": var TencentOAuth = plus.ios.import("TencentOAuth"); return TencentOAuth.iphoneQQInstalled(); case "weixin": var WXApi = plus.ios.import("WXApi"); return WXApi.isWXAppInstalled() case "sinaweibo": var SinaAPI = plus.ios.import("WeiboSDK"); return SinaAPI.isWeiboAppInstalled() default: break; } } } }(mui, window.app = {})); ================================================ FILE: examples/login/js/feedback-page.js ================================================ (function(mui, window, document, undefined) { mui.init(); var get = function(id) { return document.getElementById(id); }; var qsa = function(sel) { return [].slice.call(document.querySelectorAll(sel)); }; var ui = { question: get('question'), contact: get('contact'), imageList: get('image-list'), submit: get('submit') }; ui.clearForm = function() { ui.question.value = ''; ui.contact.value = ''; ui.imageList.innerHTML = ''; ui.newPlaceholder(); }; ui.getFileInputArray = function() { return [].slice.call(ui.imageList.querySelectorAll('input[type="file"]')); }; ui.getFileInputIdArray = function() { var fileInputArray = ui.getFileInputArray(); var idArray = []; fileInputArray.forEach(function(fileInput) { if (fileInput.value != '') { idArray.push(fileInput.getAttribute('id')); } }); return idArray; }; var imageIndexIdNum = 0; ui.newPlaceholder = function() { var fileInputArray = ui.getFileInputArray(); if (fileInputArray && fileInputArray.length > 0 && fileInputArray[fileInputArray.length - 1].parentNode.classList.contains('space')) { return; } imageIndexIdNum++; var placeholder = document.createElement('div'); placeholder.setAttribute('class', 'image-item space'); var closeButton = document.createElement('div'); closeButton.setAttribute('class', 'image-close'); closeButton.innerHTML = 'X'; closeButton.addEventListener('click', function(event) { event.stopPropagation(); event.cancelBubble = true; setTimeout(function() { ui.imageList.removeChild(placeholder); }, 0); return false; }, false); var fileInput = document.createElement('input'); fileInput.setAttribute('type', 'file'); fileInput.setAttribute('accept', 'image/*'); fileInput.setAttribute('id', 'image-' + imageIndexIdNum); fileInput.addEventListener('change', function(event) { var file = fileInput.files[0]; if (file) { var reader = new FileReader(); reader.onload = function() { //处理 android 4.1 兼容问题 var base64 = reader.result.split(',')[1]; var dataUrl = 'data:image/png;base64,' + base64; // placeholder.style.backgroundImage = 'url(' + dataUrl + ')'; } reader.readAsDataURL(file); placeholder.classList.remove('space'); ui.newPlaceholder(); } }, false); placeholder.appendChild(closeButton); placeholder.appendChild(fileInput); ui.imageList.appendChild(placeholder); }; ui.newPlaceholder(); ui.submit.addEventListener('tap', function(event) { if (ui.question.value == '' || (ui.contact.value != '' && ui.contact.value.search(/^(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)|([1-9]\d{4,9})$/) != 0)) { return mui.toast('信息填写不符合规范'); } plus.nativeUI.showWaiting(); feedback.send({ question: ui.question.value, contact: ui.contact.value, images: ui.getFileInputIdArray() }, function() { plus.nativeUI.closeWaiting(); mui.toast('感谢您的建议~'); ui.clearForm(); mui.back(); }); }, false); })(mui, window, document, undefined); ================================================ FILE: examples/login/js/feedback.js ================================================ (function($, feedback, window, document) { /*************** 环信配置开始 ****************/ //以后信息更改后,需卸载 “调试 app” 重新调用运行 var APP_KEY = 'dcloudio#mui'; var CUSTOM_ID = 'customer'; /*************** 环信配置结束 ****************/ //一组 “常量” var PASSWORD = 'pass01!'; var LOCAL_STORE_KEY = 'mui://user'; var USER_PREFIX = 'mui-user-'; /** * 生成一个 IM 用户名 **/ var createUsername = function() { return USER_PREFIX + (new Date()).getTime(); }; /** * 获取用户,如果在本地存储中已有用户则直接返回。 * 否则,注册新的用户 **/ feedback.getUser = function(callback) { var storeUserText = localStorage.getItem(LOCAL_STORE_KEY); if (storeUserText) { if (callback) callback(JSON.parse(storeUserText)); return; } var newUsername = createUsername(); Easemob.im.Helper.registerUser({ username: newUsername, password: PASSWORD, appKey: APP_KEY, success: function(result) { var userInfo = { username: newUsername, password: PASSWORD }; localStorage.setItem(LOCAL_STORE_KEY, JSON.stringify(userInfo)); if (callback) callback(userInfo); }, error: function(e) { plus.nativeUI.toast(e.message); } }); }; /** * 登录环信息服务器 **/ feedback.login = function(callback) { feedback.getUser(function(user) { var conn = new Easemob.im.Connection(); conn.init({ onOpened: function() { //alert("成功登录"); conn.setPresence(); if (callback) callback(user, conn); } }); conn.open({ user: user.username, pwd: user.password, appKey: APP_KEY }); }); }; /** * 发送反馈信息 **/ feedback.send = function(content, callback) { feedback.login(function(user, conn) { //发送文本消息 var msgText = '问题:' + content.question; if (content.contact) { msgText += '; 联系方式:' + content.contact + ';' } conn.sendTextMessage({ to: CUSTOM_ID, msg: msgText, type: "chat" }); //如果没有截图 if (!content.images || content.images.length < 1) { if (callback) callback(); return; } //如果有截图 var sendImageCount = 0; var hasError = false; content.images.forEach(function(fileInputId) { //alert(fileInputId) conn.sendPicture({ fileInputId: fileInputId, to: CUSTOM_ID, onFileUploadError: function(error) { //处理图片上传失败 alert(JSON.stringify(error)); hasError = true; }, onFileUploadComplete: function(data) { //处理图片上传成功,如本地消息显示 sendImageCount++; if (!hasError && sendImageCount >= content.images.length) { if (callback) callback(); } } }); }); //-- }); }; })(mui, window.feedback = {}, window, document); ================================================ FILE: examples/login/js/mui.enterfocus.js ================================================ (function($) { $.enterfocus = function(selector, callback) { var boxArray = [].slice.call(document.querySelectorAll(selector)); for (var index in boxArray) { var box = boxArray[index]; box.addEventListener('keyup', function(event) { if (event.keyCode == 13) { var boxIndex = boxArray.indexOf(this); if (boxIndex == boxArray.length - 1) { if (callback) callback(); } else { //console.log(boxIndex); var nextBox = boxArray[++boxIndex]; nextBox.focus(); } } }, false); } }; }(window.mui = window.mui || {})); ================================================ FILE: examples/login/js/mui.locker.js ================================================ /** * 手势锁屏插件 * varstion 1.0.5 * by Houfeng * Houfeng@DCloud.io */ (function($, doc) { var touchSupport = ('ontouchstart' in document); var startEventName = touchSupport ? 'touchstart' : 'mousedown'; var moveEventName = touchSupport ? 'touchmove' : 'mousemove'; var endEventName = touchSupport ? 'touchend' : 'mouseup'; var lockerHolderClassName = $.className('locker-holder'); var lockerClassName = $.className('locker'); var styleHolder = doc.querySelector('head') || doc.querySelector('body'); styleHolder.innerHTML += ""; var times = 4; function getElementLeft(element) {     var actualLeft = element.offsetLeft;     var current = element.offsetParent;     while (current !== null) {       actualLeft += current.offsetLeft;       current = current.offsetParent;     }     return actualLeft;   }   function getElementTop(element) {     var actualTop = element.offsetTop;     var current = element.offsetParent;     while (current !== null) {       actualTop += current.offsetTop;       current = current.offsetParent;     }     return actualTop;   } //定义 Locker 类 var Locker = $.Locker = $.Class.extend({ R: 26, CW: 400, CH: 320, OffsetX: 30, OffsetY: 30, /** * 构造函数 * */ init: function(holder, options) { var self = this; if (!holder) { throw "构造 Locker 时缺少容器元素"; } self.holder = holder; //避免重复初始化开始 if (self.holder.__locker_inited) return; self.holder.__locker_inited = true; //避免重复初始化结束 // self.options = options || {}; self.options.callback = self.options.callback || self.options.done || $.noop; self.holder.innerHTML = ''; // self.holder.classList.add(lockerHolderClassName); //初始化 var canvas = self.canvas = $.qsa('canvas', self.holder)[0]; canvas.on = canvas.addEventListener || function(name, handler, capture) { canvas.attachEvent('on' + name, handler, capture); }; canvas.off = canvas.removeEventListener || function(name, handler, capture) { canvas.detachEvent('on' + name, handler, capture); }; // if (self.options.width) self.holder.style.width = self.options.width + 'px'; if (self.options.height) self.holder.style.height = self.options.height + 'px'; self.CW = self.options.width || self.holder.offsetWidth || self.CW; self.CH = self.options.height || self.holder.offsetHeight || self.CH; //处理 “宽、高” 等数值, 全部扩大 times 倍 self.R *= times; self.CW *= times; self.CH *= times; self.OffsetX *= times; self.OffsetY *= times; // canvas.width = self.CW; canvas.height = self.CH; var cxt = self.cxt = canvas.getContext("2d"); //两个圆之间的外距离 就是说两个圆心的距离去除两个半径 var X = (self.CW - 2 * self.OffsetX - self.R * 2 * 3) / 2; var Y = (self.CH - 2 * self.OffsetY - self.R * 2 * 3) / 2; self.pointLocationArr = self.caculateNinePointLotion(X, Y); self.initEvent(canvas, cxt, self.holder); //console.log(X); self.draw(cxt, self.pointLocationArr, [], null); setTimeout(function() { self.draw(cxt, self.pointLocationArr, [], null); }, 0); }, /** * 计算 */ caculateNinePointLotion: function(diffX, diffY) { var self = this; var Re = []; for (var row = 0; row < 3; row++) { for (var col = 0; col < 3; col++) { var Point = { X: (self.OffsetX + col * diffX + (col * 2 + 1) * self.R), Y: (self.OffsetY + row * diffY + (row * 2 + 1) * self.R) }; Re.push(Point); } } return Re; }, /** * 绘制 */ draw: function(cxt, _PointLocationArr, _LinePointArr, touchPoint) { var self = this; var R = self.R; if (_LinePointArr.length > 0) { cxt.beginPath(); for (var i = 0; i < _LinePointArr.length; i++) { var pointIndex = _LinePointArr[i]; cxt.lineTo(_PointLocationArr[pointIndex].X, _PointLocationArr[pointIndex].Y); } cxt.lineWidth = 2 * times; cxt.strokeStyle = self.options.lineColor || "#999"; //连结线颜色 cxt.stroke(); cxt.closePath(); if (touchPoint != null) { var lastPointIndex = _LinePointArr[_LinePointArr.length - 1]; var lastPoint = _PointLocationArr[lastPointIndex]; cxt.beginPath(); cxt.moveTo(lastPoint.X, lastPoint.Y); cxt.lineTo(touchPoint.X, touchPoint.Y); cxt.stroke(); cxt.closePath(); } } for (var i = 0; i < _PointLocationArr.length; i++) { var Point = _PointLocationArr[i]; cxt.fillStyle = self.options.ringColor || "#888"; //圆圈边框颜色 cxt.beginPath(); cxt.arc(Point.X, Point.Y, R, 0, Math.PI * times, true); cxt.closePath(); cxt.fill(); cxt.fillStyle = self.options.fillColor || "#f3f3f3"; //圆圈填充颜色 cxt.beginPath(); cxt.arc(Point.X, Point.Y, R - (2 * times), 0, Math.PI * times, true); cxt.closePath(); cxt.fill(); if (_LinePointArr.indexOf(i) >= 0) { cxt.fillStyle = self.options.pointColor || "#777"; //圆圈中心点颜色 cxt.beginPath(); cxt.arc(Point.X, Point.Y, R - (16 * times), 0, Math.PI * times, true); cxt.closePath(); cxt.fill(); } } }, isPointSelect: function(touches, linePoint) { var self = this; for (var i = 0; i < self.pointLocationArr.length; i++) { var currentPoint = self.pointLocationArr[i]; var xdiff = Math.abs(currentPoint.X - touches.elementX); var ydiff = Math.abs(currentPoint.Y - touches.elementY); var dir = Math.pow((xdiff * xdiff + ydiff * ydiff), 0.5); if (dir < self.R) { if (linePoint.indexOf(i) < 0) { linePoint.push(i); } break; } } }, initEvent: function(canvas, cxt, holder) { var self = this; var linePoint = []; var isDown = false; //针对鼠标事件 //start self._startHandler = function(e) { e.point = event.changedTouches ? event.changedTouches[0] : event; e.point.elementX = (e.point.pageX - getElementLeft(holder)) * times; e.point.elementY = (e.point.pageY - getElementTop(holder)) * times; self.isPointSelect(e.point, linePoint); isDown = true; }; canvas.on(startEventName, self._startHandler, false); //move self._moveHanlder = function(e) { if (!isDown) return; e.preventDefault(); e.point = event.changedTouches ? event.changedTouches[0] : event; e.point.elementX = (e.point.pageX - getElementLeft(holder)) * times; e.point.elementY = (e.point.pageY - getElementTop(holder)) * times; var touches = e.point; self.isPointSelect(touches, linePoint); cxt.clearRect(0, 0, self.CW, self.CH); self.draw(cxt, self.pointLocationArr, linePoint, { X: touches.elementX, Y: touches.elementY }); }; canvas.on(moveEventName, self._moveHanlder, false); //end self._endHandler = function(e) { e.point = event.changedTouches ? event.changedTouches[0] : event; e.point.elementX = (e.point.pageX - getElementLeft(holder)) * times; e.point.elementY = (e.point.pageY - getElementTop(holder)) * times; cxt.clearRect(0, 0, self.CW, self.CH); self.draw(cxt, self.pointLocationArr, linePoint, null); //事件数据 var eventData = { sender: self, points: linePoint }; /* * 回调完成事件 * * 备注: * 比较理想的做法是为 Locker 的实例启用事件机制,比如 locker.on('done',handler); * 在 mui 没有完整的公共事件模块前,此版本中 locker 实例暂通过 options.callback 处理 */ self.options.callback(eventData); //触发声明的DOM的自定义事件(暂定 done 为事件名,可以考虑更有针对的事件名 ) $.trigger(self.holder, 'done', eventData); //- linePoint = []; isDown = false; }; canvas.on(endEventName, self._endHandler, false); }, pointLocationArr: [], /** * 清除图形 * */ clear: function() { var self = this; //self.pointLocationArr = []; if (self.cxt) { self.cxt.clearRect(0, 0, self.CW, self.CH); self.draw(self.cxt, self.pointLocationArr, [], { X: 0, Y: 0 }); } }, /** * 释放资源 * */ dispose: function() { var self = this; self.cxt = null; self.canvas.off(startEventName, self._startHandler); self.canvas.off(moveEventName, self._moveHandler); self.canvas.off(endEventName, self._endHandler); self.holder.innerHTML = ''; self.canvas = null; } }); //添加 locker 插件 $.fn.locker = function(options) { //遍历选择的元素 this.each(function(i, element) { if (options) { new Locker(element, options); } else { var optionsText = element.getAttribute('data-locker-options'); var options = optionsText ? JSON.parse(optionsText) : {}; options.lineColor = element.getAttribute('data-locker-line-color') || options.lineColor; options.ringColor = element.getAttribute('data-locker-ring-color') || options.ringColor; options.fillColor = element.getAttribute('data-locker-fill-color') || options.fillColor; options.pointColor = element.getAttribute('data-locker-point-color') || options.pointColor; options.width = element.getAttribute('data-locker-width') || options.width; options.height = element.getAttribute('data-locker-height') || options.height; new Locker(element, options); } }); return this; }; //自动处理 class='mui-locker' 的 dom try { $('.' + lockerClassName).locker(); } catch (ex) {} $.ready(function() { $('.' + lockerClassName).locker(); }); }(mui, document)); ================================================ FILE: examples/login/js/mui.view.js ================================================ /** *
    * @param {Object} $ * @param {Object} window */ (function($, window) { var CLASS_LEFT = $.className('left'); var CLASS_CENTER = $.className('center'); var CLASS_RIGHT = $.className('right'); var CLASS_PAGE = $.className('page'); var CLASS_PAGE_LEFT = $.className('page-left'); var CLASS_PAGE_CENTER = $.className('page-center'); var CLASS_NAVBAR_LEFT = $.className('navbar-left'); var CLASS_NAVBAR_CENTER = $.className('navbar-center'); var CLASS_PAGE_SHADOW = $.className('page-shadow'); var CLASS_TRANSITIONING = $.className('transitioning'); var SELECTOR_LEFT = '.' + CLASS_LEFT; var SELECTOR_CENTER = '.' + CLASS_CENTER; var SELECTOR_RIGHT = '.' + CLASS_RIGHT; var SELECTOR_ICON = $.classSelector('.icon'); var SELECTOR_NAVBAR = $.classSelector('.navbar'); var SELECTOR_NAVBAR_INNER = $.classSelector('.navbar-inner'); var SELECTOR_PAGES = $.classSelector('.pages'); var SELECTOR_BTN_NAV = $.classSelector('.btn-nav'); var SELECTOR_PAGE_LEFT = '.' + CLASS_PAGE_LEFT; var SELECTOR_PAGE_CENTER = '.' + CLASS_PAGE_CENTER; var SELECTOR_NAVBAR_LEFT = '.' + CLASS_NAVBAR_LEFT; var SELECTOR_NAVBAR_CENTER = '.' + CLASS_NAVBAR_CENTER; var View = $.Class.extend({ init: function(element, options) { this.view = this.element = element; this.options = $.extend({ animateNavbar: true, swipeBackPageActiveArea: 30, hardwareAccelerated: true }, options); this.navbars = this.view.querySelector(SELECTOR_NAVBAR); this.pages = this.view.querySelector(SELECTOR_PAGES); this.history = []; //history this.maxScrollX = this.view.offsetWidth; this.x = this.y = 0; this.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : ''; this.ratio = 0; this.isBack = true; this.moved = this.dragging = false; this.activeNavbar = this.previousNavbar = null; this.activePage = this.previousPage = null; this._initPageEventMethod(); this._initDefaultPage(); this._initNavBar(); this.initEvent(); }, _initPageEventMethod: function() { var self = this; $.each(['onPageBeforeShow', 'onPageShow', 'onPageBeforeBack', 'onPageBack'], function(index, event) { self[event + 'Callbacks'] = {}; self[event] = function(page, callback) { var eventCallbacks = event + 'Callbacks'; if (!self[eventCallbacks].hasOwnProperty(page)) { self[eventCallbacks][page] = [callback]; } else { self[eventCallbacks][page].push(callback); } }; }); }, _initDefaultPage: function() { var defaultPage = document.querySelector(this.options.defaultPage); if (defaultPage) { this._appendPage(defaultPage); } else { throw new Error('defaultPage[' + this.options.defaultPage + '] does not exist'); } }, initEvent: function() { this.view.addEventListener('click', this); this.view.addEventListener('tap', this); this.pages.addEventListener('drag', this); this.pages.addEventListener('dragend', this); this.pages.addEventListener('webkitTransitionEnd', this); }, handleEvent: function(event) { switch (event.type) { case 'click': this._click(event); break; case 'tap': this._tap(event); break; case 'drag': this._drag(event); break; case 'dragend': this._dragend(event); break; case 'webkitTransitionEnd': this._webkitTransitionEnd(event); break; } }, shadow: function() { var shadow = document.createElement('div'); shadow.className = CLASS_PAGE_SHADOW; return shadow; }(), _removePage: function(page, navbar) { this._removeNavbar(page, navbar); document.body.appendChild(page); this._cleanPageClass(page); }, _prependPage: function(page) { var navbar = page.querySelector(SELECTOR_NAVBAR_INNER); this._prependNavbar(navbar); page.classList.add(CLASS_PAGE_LEFT); this.pages.insertBefore(page, this.pages.firstElementChild); }, _appendPage: function(page) { var navbar = page.querySelector(SELECTOR_NAVBAR_INNER); this._appendNavbar(navbar); page.classList.add(CLASS_PAGE_CENTER); this.pages.appendChild(page); }, _removeNavbar: function(page, navbar) { page.insertBefore(navbar, page.firstElementChild); this._cleanNavbarClass(navbar); }, _prependNavbar: function(navbar) { navbar.classList.add(CLASS_NAVBAR_LEFT); this.navbars.insertBefore(navbar, this.navbars.firstElementChild); }, _appendNavbar: function(navbar) { navbar.classList.add(CLASS_NAVBAR_CENTER); this.navbars.appendChild(navbar); }, _cleanPageClass: function(page) { page.classList.remove(CLASS_PAGE_CENTER); page.classList.remove(CLASS_PAGE_LEFT); }, _cleanNavbarClass: function(navbar) { navbar.classList.remove(CLASS_NAVBAR_CENTER); navbar.classList.remove(CLASS_NAVBAR_LEFT); }, _tap: function(event) { var target = event.target; for (; target && target !== document; target = target.parentNode) { if (target.tagName === 'A' && target.hash) { var page = document.getElementById(target.hash.replace('#', '')); if (page && page.classList.contains(CLASS_PAGE)) { event.stopPropagation(); event.detail.gesture.preventDefault(); this.go(target.hash); break; } } } }, _click: function(event) { var target = event.target; for (; target && target !== document; target = target.parentNode) { if (target.tagName === 'A' && target.hash) { var page = document.getElementById(target.hash.replace('#', '')); if (page && page.classList.contains(CLASS_PAGE)) { event.preventDefault(); break; } } } }, _cleanStyle: function(el) { if (el) { el.style.webkitTransform = ''; el.style.opacity = ''; } }, _webkitTransitionEnd: function(event) { this.dragging = this.moved = false; if (this.activePage !== event.target) { return; } this.isInTransition = false; this.shadow.parentNode === this.activePage && this.activePage.removeChild(this.shadow); this.previousPageClassList.remove(CLASS_TRANSITIONING); this.activePageClassList.remove(CLASS_TRANSITIONING); var self = this; if ($.os.ios && this.options.animateNavbar && this.previousNavElements && this.activeNavElements) { var isBack = this.isBack; $.each(this.previousNavElements, function(i, el) { el.classList.remove(CLASS_TRANSITIONING); isBack && self._cleanStyle(el); }); $.each(this.activeNavElements, function(i, el) { el.classList.remove(CLASS_TRANSITIONING); self._cleanStyle(el); }); if (this.previousNavBackIcon) { this.previousNavBackIcon.classList.remove(CLASS_TRANSITIONING); isBack && this._cleanStyle(this.previousNavBackIcon); } if (this.activeNavBackIcon) { this.activeNavBackIcon.classList.remove(CLASS_TRANSITIONING); this._cleanStyle(this.activeNavBackIcon); } } else { this.previousNavbar.classList.remove(CLASS_TRANSITIONING); this.activeNavbar.classList.remove(CLASS_TRANSITIONING); this._cleanStyle(this.previousNavbar); this._cleanStyle(this.activeNavbar); } this._cleanStyle(this.previousPage); this._cleanStyle(this.activePage); if (this.ratio <= 0.5) { return; } if (this.isBack) { this._removePage(this.activePage, this.activeNavbar); this.previousPageClassList.remove(CLASS_PAGE_LEFT); this.previousPageClassList.add(CLASS_PAGE_CENTER); this.previousNavbar.classList.remove(CLASS_NAVBAR_LEFT); this.previousNavbar.classList.add(CLASS_NAVBAR_CENTER); if (this.history.length > 0) { this._prependPage(this.history.pop()); } this._initNavBar(); this._trigger('pageBack', this.activePage); this._trigger('pageShow', this.previousPage); } else { this.previousPageClassList.add(CLASS_PAGE_LEFT); this.activePageClassList.add(CLASS_PAGE_CENTER); this._trigger('pageShow', this.activePage); } }, _trigger: function(eventType, page) { var eventCallbacks = 'on' + eventType.charAt(0).toUpperCase() + eventType.slice(1) + 'Callbacks'; if (this[eventCallbacks].hasOwnProperty(page.id)) { var callbacks = this[eventCallbacks][page.id]; var event = new CustomEvent(eventType, { detail: { page: page }, bubbles: true, cancelable: true }); for (var len = callbacks.length; len--;) { callbacks[len].apply(this, event); } } $.trigger(this.view, eventType, { page: page }); }, _initPageTransform: function() { this.previousPage = this.pages.querySelector(SELECTOR_PAGE_LEFT); this.activePage = this.pages.querySelector(SELECTOR_PAGE_CENTER); if (this.previousPage && this.activePage) { this.activePage.appendChild(this.shadow); this.previousPageClassList = this.previousPage.classList; this.activePageClassList = this.activePage.classList; this.previousPageStyle = this.previousPage.style; this.activePageStyle = this.activePage.style; this.previousPageClassList.remove(CLASS_TRANSITIONING); this.activePageClassList.remove(CLASS_TRANSITIONING); if (this.options.animateNavbar && this.navbars) { this.previousNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_LEFT); this.activeNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_CENTER); if (this.previousNavbar && this.activeNavbar) { this.previousNavElements = this.previousNavbar.querySelectorAll(SELECTOR_LEFT + ',' + SELECTOR_CENTER + ',' + SELECTOR_RIGHT); this.activeNavElements = this.activeNavbar.querySelectorAll(SELECTOR_LEFT + ',' + SELECTOR_CENTER + ',' + SELECTOR_RIGHT); this.previousNavBackIcon = this.previousNavbar.querySelector(SELECTOR_LEFT + SELECTOR_BTN_NAV + ' ' + SELECTOR_ICON); this.activeNavBackIcon = this.activeNavbar.querySelector(SELECTOR_LEFT + SELECTOR_BTN_NAV + ' ' + SELECTOR_ICON); } } this.x = 0; this.dragging = true; return true; } return false; }, _initNavBar: function() { if (this.options.animateNavbar && this.navbars) { var inners = this.navbars.querySelectorAll(SELECTOR_NAVBAR_INNER); var inner, left, right, center, leftWidth, rightWidth, centerWidth, noLeft, onRight, currLeft, diff, navbarWidth; for (var i = 0, len = inners.length; i < len; i++) { inner = inners[i]; left = inner.querySelector(SELECTOR_LEFT); right = inner.querySelector(SELECTOR_RIGHT); center = inner.querySelector(SELECTOR_CENTER); noLeft = !left; noRight = !right; leftWidth = noLeft ? 0 : left.offsetWidth; rightWidth = noRight ? 0 : right.offsetWidth; centerWidth = center ? center.offsetWidth : 0; navbarWidth = this.maxScrollX; onLeft = inner.classList.contains('navbar-left'); if (noRight) { currLeft = navbarWidth - centerWidth; } if (noLeft) { currLeft = 0; } if (!noLeft && !noRight) { currLeft = (navbarWidth - rightWidth - centerWidth + leftWidth) / 2; } var requiredLeft = (navbarWidth - centerWidth) / 2; if (navbarWidth - leftWidth - rightWidth > centerWidth) { if (requiredLeft < leftWidth) { requiredLeft = leftWidth; } if (requiredLeft + centerWidth > navbarWidth - rightWidth) { requiredLeft = navbarWidth - rightWidth - centerWidth; } diff = requiredLeft - currLeft; } else { diff = 0; } var centerLeft = diff; if (center) { center.style.marginLeft = -leftWidth + 'px'; center.mNavbarLeftOffset = -(currLeft + diff) + 30; //这个30是测出来的。后续要实际计算一下 center.mNavbarRightOffset = navbarWidth - currLeft - diff - centerWidth; } if (onLeft) center.style.webkitTransform = ('translate3d(' + center.mNavbarLeftOffset + 'px, 0, 0)'); if (!noLeft) { left.mNavbarLeftOffset = -leftWidth; left.mNavbarRightOffset = (navbarWidth - leftWidth) / 2; if (onLeft) left.style.webkitTransform = ('translate3d(' + left[0].mNavbarLeftOffset + 'px, 0, 0)'); } if (!noRight) { right.mNavbarLeftOffset = -(navbarWidth - rightWidth) / 2; right.mNavbarRightOffset = rightWidth; if (onLeft) right.style.webkitTransform = ('translate3d(' + right[0].mNavbarLeftOffset + 'px, 0, 0)'); } } } }, _drag: function(event) { if (this.isInTransition) { return; } var detail = event.detail; if (!this.dragging) { if ((detail.start.x - this.view.offsetLeft) < this.options.swipeBackPageActiveArea) { this.isBack = true; this._initPageTransform(); } } if (this.dragging) { var deltaX = 0; if (!this.moved) { //start deltaX = detail.deltaX; $.gestures.touch.lockDirection = true; //锁定方向 $.gestures.touch.startDirection = detail.direction; } else { //move deltaX = detail.deltaX - detail.lastDeltaX; } var newX = this.x + deltaX; if (newX < 0 || newX > this.maxScrollX) { newX = newX < 0 ? 0 : this.maxScrollX; } event.stopPropagation(); detail.gesture.preventDefault(); if (!this.requestAnimationFrame) { this._updateTranslate(); } this.moved = true; this.x = newX; this.y = 0; } }, _dragend: function(event) { if (!this.moved) { return; } event.stopPropagation(); var detail = event.detail; this._clearRequestAnimationFrame(); this._prepareTransition(); this.ratio = this.x / this.maxScrollX; if (this.ratio === 1 || this.ratio === 0) { $.trigger(this.activePage, 'webkitTransitionEnd'); return; } if (this.ratio > 0.5) { this.setTranslate(this.maxScrollX, 0); } else { this._cleanStyle(this.previousPage); this._cleanStyle(this.activePage); } }, _prepareTransition: function() { this.isInTransition = true; this.previousPageClassList.add(CLASS_TRANSITIONING); this.activePageClassList.add(CLASS_TRANSITIONING); var self = this; if (this.options.animateNavbar && this.previousNavElements && this.activeNavElements) { this.previousNavbar.classList.add(CLASS_TRANSITIONING); this.activeNavbar.classList.add(CLASS_TRANSITIONING); $.each(this.previousNavElements, function(i, el) { el.classList.add(CLASS_TRANSITIONING); self._cleanStyle(el); }); $.each(this.activeNavElements, function(i, el) { el.classList.add(CLASS_TRANSITIONING); self._cleanStyle(el); }); if (this.previousNavBackIcon) { this._cleanStyle(this.previousNavBackIcon); this.previousNavBackIcon.classList.add(CLASS_TRANSITIONING); } if (this.activeNavBackIcon) { this._cleanStyle(this.activeNavBackIcon); this.activeNavBackIcon.classList.add(CLASS_TRANSITIONING); } } }, _clearRequestAnimationFrame: function() { if (this.requestAnimationFrame) { cancelAnimationFrame(this.requestAnimationFrame); this.requestAnimationFrame = null; } }, _getTranslateStr: function(x, y) { if (this.options.hardwareAccelerated) { return 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ; } return 'translate(' + x + 'px,' + y + 'px) '; }, _updateTranslate: function() { var self = this; if (self.x !== self.lastX || self.y !== self.lastY) { self.setTranslate(self.x, self.y); } self.requestAnimationFrame = requestAnimationFrame(function() { self._updateTranslate(); }); }, _setNavbarTranslate: function(x, y) { var percentage = x / this.maxScrollX; //only for ios if ($.os.ios && this.options.animateNavbar && this.previousNavElements && this.activeNavElements) { var i, len, style, el; for (i = 0, len = this.activeNavElements.length; i < len; i++) { el = this.activeNavElements[i]; style = el.style; style.opacity = (1 - percentage * (el.classList.contains(CLASS_LEFT) ? 3.5 : 1.3)); if (!el.classList.contains(CLASS_RIGHT)) { var activeNavTranslate = percentage * el.mNavbarRightOffset; el.style.webkitTransform = ('translate3d(' + activeNavTranslate + 'px,0,0)'); if (el.classList.contains(CLASS_LEFT) && this.activeNavBackIcon) { this.activeNavBackIcon.style.webkitTransform = ('translate3d(' + -activeNavTranslate + 'px,0,0)'); } } } for (i = 0, len = this.previousNavElements.length; i < len; i++) { el = this.previousNavElements[i]; style = el.style; style.opacity = percentage * 1.3 - 0.3; if (!el.classList.contains(CLASS_RIGHT)) { var previousNavTranslate = el.mNavbarLeftOffset * (1 - percentage); el.style.webkitTransform = ('translate3d(' + previousNavTranslate + 'px,0,0)'); if (el.classList.contains(CLASS_LEFT) && this.previousNavBackIcon) { this.previousNavBackIcon.style.webkitTransform = ('translate3d(' + -previousNavTranslate + 'px,0,0)'); } } } } else { this.activeNavbar.style.opacity = 1 - percentage * 1.3; this.previousNavbar.style.opacity = percentage * 1.3 - 0.3; } }, setTranslate: function(x, y) { this.x = x; this.y = y; this.previousPage.style.opacity = 0.9 + 0.1 * x / this.maxScrollX; if ($.os.ios) { //only for ios this.previousPage.style['webkitTransform'] = this._getTranslateStr((x / 5 - this.maxScrollX / 5), y); } this.activePage.style['webkitTransform'] = this._getTranslateStr(x, y); if (this.options.animateNavbar) { this._setNavbarTranslate(x, y); } this.lastX = this.x; this.lastY = this.y; }, canBack: function() { return this.pages.querySelector(SELECTOR_PAGE_LEFT); }, back: function() { if (this.isInTransition) { return; } this.isBack = true; this.ratio = 1; if (this._initPageTransform()) { this._trigger('pageBeforeBack', this.activePage); this._trigger('pageBeforeShow', this.previousPage); this._prepareTransition(); this.previousPage.offsetHeight; this.activePage.offsetHeight; this.setTranslate(this.maxScrollX, 0); } }, go: function(pageSelector) { if (this.isInTransition) { return; } var nextPage = document.querySelector(pageSelector); if (nextPage) { var nextNavbar = nextPage.querySelector(SELECTOR_NAVBAR_INNER); var previousNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_LEFT); var activeNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_CENTER); var previousPage = this.pages.querySelector(SELECTOR_PAGE_LEFT); var activePage = this.pages.querySelector(SELECTOR_PAGE_CENTER); if (previousNavbar && previousPage) { this._removePage(previousPage, previousNavbar); this.history.push(previousPage); //add to history } if (activeNavbar) { activeNavbar.classList.remove(CLASS_NAVBAR_CENTER); activeNavbar.classList.add(CLASS_NAVBAR_LEFT); } if (activePage) { activePage.classList.remove(CLASS_PAGE_CENTER); activePage.style.webkitTransform = 'translate3d(0,0,0)'; activePage.classList.add(CLASS_PAGE_LEFT); } nextPage.style.webkitTransform = 'translate3d(100%,0,0)'; this._appendPage(nextPage); nextPage.appendChild(this.shadow); //shadow nextPage.offsetHeight; //force this.isBack = false; this.ratio = 1; this._initPageTransform(); this._initNavBar(); this._setNavbarTranslate(this.maxScrollX, 0); //force this.previousPage.offsetHeight; this.activePage.offsetHeight; this.previousNavbar.offsetHeight; this.activeNavbar.offsetHeight; this._trigger('pageBeforeShow', this.activePage); this._prepareTransition(); this.setTranslate(0, 0); } } }); $.fn.view = function(options) { var self = this[0]; var viewApi = null; var id = self.getAttribute('data-view'); if (!id) { id = ++$.uuid; $.data[id] = viewApi = new View(self, options); } else { viewApi = $.data[id]; } return viewApi; } })(mui, window); ================================================ FILE: examples/login/libs/easymob-webim-sdk/easemob.im-1.0.5.js ================================================ if (typeof jQuery == 'undefined') { alert("need jquery"); } if(typeof Strophe == 'undefined'){ alert("need Strophe"); } else { (function($) { if (typeof Easemob == 'undefined') { Easemob = {}; } if (typeof Easemob.im == 'undefined') { Easemob.im = {}; } if (typeof Easemob.im.Connection !== 'undefined') { return; } var innerBase64 = (function() { var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var obj = { /** * Encodes a string in base64 * * @param {String} * input The string to encode in base64. */ encode : function(input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; do { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); } while (i < input.length); return output; }, byteEncode : function(bytes) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; do { chr1 = bytes[i++]; chr2 = bytes[i++]; chr3 = bytes[i++]; enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); } while (i < bytes.length); return output; }, /** * Decodes a base64 string. * * @param {String} * input The string to decode. */ decode : function(input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; // remove all characters that are not A-Z, a-z, 0-9, +, /, or = input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); enc4 = keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } } while (i < input.length); return output; } }; return obj; })(); var emptyFn = function() {}; var tempIndex = 0; EASEMOB_IM_CONNCTION_USER_NOT_ASSIGN_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_OPEN_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_AUTH_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_ATTACH_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_ATTACH_USERGRID_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_REOPEN_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_SERVER_CLOSE_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_SERVER_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_IQ_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_PING_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_GETROSTER_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_CROSSDOMAIN_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_LISTENING_OUTOF_MAXRETRIES = tempIndex++; EASEMOB_IM_CONNCTION_RECEIVEMSG_CONTENTERROR = tempIndex++; EASEMOB_IM_CONNCTION_JOINROOM_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_GETROOM_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_GETROOMINFO_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_GETROOMMEMBER_ERROR = tempIndex++; EASEMOB_IM_CONNCTION_GETROOMOCCUPANTS_ERROR = tempIndex++; EASEMOB_IM_UPLOADFILE_BROWSER_ERROR = tempIndex++; EASEMOB_IM_UPLOADFILE_ERROR = tempIndex++; EASEMOB_IM_UPLOADFILE_NO_LOGIN = tempIndex++; EASEMOB_IM_UPLOADFILE_NO_FILE = tempIndex++; EASEMOB_IM_DOWNLOADFILE_ERROR = tempIndex++; EASEMOB_IM_DOWNLOADFILE_NO_LOGIN = tempIndex++; EASEMOB_IM_DOWNLOADFILE_BROWSER_ERROR = tempIndex++; EASEMOB_IM_RESISTERUSER_ERROR = tempIndex++; tempIndex = 0; EASEMOB_IM_MESSAGE_REC_TEXT = tempIndex++; EASEMOB_IM_MESSAGE_REC_EMOTION = tempIndex++; EASEMOB_IM_MESSAGE_REC_PHOTO = tempIndex++; EASEMOB_IM_MESSAGE_REC_AUDIO = tempIndex++; EASEMOB_IM_MESSAGE_REC_AUDIO_FILE = tempIndex++; EASEMOB_IM_MESSAGE_REC_VEDIO = tempIndex++; EASEMOB_IM_MESSAGE_REC_VEDIO_FILE = tempIndex++; EASEMOB_IM_MESSAGE_REC_FILE = tempIndex++; EASEMOB_IM_MESSAGE_SED_TEXT = tempIndex++; EASEMOB_IM_MESSAGE_SED_EMOTION = tempIndex++; EASEMOB_IM_MESSAGE_SED_PHOTO = tempIndex++; EASEMOB_IM_MESSAGE_SED_AUDIO = tempIndex++; EASEMOB_IM_MESSAGE_SED_AUDIO_FILE = tempIndex++; EASEMOB_IM_MESSAGE_SED_VEDIO = tempIndex++; EASEMOB_IM_MESSAGE_SED_VEDIO_FILE = tempIndex++; EASEMOB_IM_MESSAGE_SED_FILE = tempIndex++; var emotionPicData = { "[):]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGZElEQVRYw8WXS2wb1xWGv3nxJUok9TAlWxLpSJYVB3LkR+sUCSIZCJBN3SQbbbqgVulWAbLpqiqQRRZZBFmkQDeVFu2mLeC0RbrpginghY3UlZvYiZzIomNJlmU9KIqPGc7MvV1wOCQlKzLcFr3AYDicM/f/z7nn/Pdc+D8P5Vk+ys1rMWAciHv3PLAA5NMZ99b/hEBuXksB08CbHuhhIw9kgbl0xv3kPybgefuhB44WChPs7EYPRwh2dvt2TqWMWyljbW9i7Wz5nwMz30dEOQL8DWAOiAcTXXQMj7aAHjaEbVO8v8Te/SWk4wBcBabTGXf3qQnk5rUMMKeFwnSOnX8q4PqQUoKUiGqVwr1FSg9yeDkyuZ+E8n3gkeMDxEfHUA3jaZGRAEL4JKSQWDtb7Hx5E+k6B0goh4T9auT4AJ1j5wFYWS6zfLeIbQlOpCOcPttxqNcbayZ3v9yjarn09AY5NRrBMMDeK7D9xedI11lIZ9xzTyTgJVwumOiK9/zwFQCWF4tcz262gJ0ciXLpcnfDaw98JVfm2t+2WmxjCZ2J1+IYOlR3t9m580+A2XTG/SWAus+RDxVdjyc8z0t7DtezmxjBKC/9ZJZXpz7ACEZZvltkebGI9MClkFRNlxt/3wZgbOJtXp36gERyhN0dh2++KiGFwIjGCCdPAMx6Zd0gUK/z9tQQejgCwOIXBQAuvP4uQ+NXGBi9zGuZX3vvdmtrLQQIwUqujF2VjE28zdmJn/m2RjDKt4umbxvpHUTRNIDZ/RF4U9F1oqmhhqJsVjGCUYbGr/j/dfaepv/0JPktG+lNKoVg46EFwHMvNmwDoXaeG7+CbUs2HtlIIVEUlXD3cTxBayEwHT7W15LxGw9NEr2nDyRconek9n7NBLdGoFx0MIJRovHjLbbJ1AVPHIQXBUkg3g0Qz81rb6jN2h4+1vfE6pp77+dMDSeYGk7w+4/eb2S+qK0/QiJlzePsH3/H9LkUU8MJZn/645YqqUdL1QNowQjApAYw85b6EjAdGznTGoE1k421Lf4y96n/353r1+g9Aa69ww9+1F4jICVrK1W2H+/y57lPKeZrZf549QF2+S7BoMVgv0Y4jEdW4lSKuFbFbKmCevLVSyveZYAo05UM+TbhNh2rdI9YQvcTUApBT48GQG9/03yGiq5uouvQ1am0JK2qB2jOgXSLmkkJQnDqTBsAly4n6UqG6EgEuHQ5CcDwSMhbgtqkg4MGhgFDz3cwMBQl3KZz/uUeIlGDvqTq2TXskbJGsmnX8oAlUtYMIhGVU8+38c1XJV55vZFcsbhGKh3wkwop0DXJ2FiQmzctzr98zLftaFd4YVRrsq3NL/cR8DO1YVSLwosXo8TiKrklE5D09BgMjwS9UDZUECEY6NfQ1QBL92wAImGFF0ZVdE00ErZJOQ9EwNx6TCDW2USgxjZ1MkgqFWjZYA6Srd17kwrJHqMGIJurpJWwUykC5FSAdMa9D+TtQpO6uaLhpdsQnMbvpvVsuUv/ufWSLc9u1QRYaK6Cq+X11SdOXFgzKW9X9wF55PZNLJtI7D2yn0jOLhVACoCrzQTmnNJerZ1qmrSwanLt4xWu/WqVwpp1pNf1yN36pMCN3+6ydtv0I1e3tYtbANl0xr3vE0hn3M+AXPHBUpN3gvakTjim4ZiCG/PrbHxdPuix2wixXXH5158KbHqJGIoqLUvimkXcagWv1UNrLoKZt9QFYZnTiqqhR9r9SkikQqzfLuFYkvU7FSp5h1CHSjCs+Alom4JHX1vc/muRwiMXgP6zBn1nDL9KhHAxt1dBimw6475zWEf0G2A6PnoOPRTxM72wbrHwh23MgttQuqBCtEcHJPkVp2We9MUAqQtGoxKkpLKzgrArea8tu3UYgRiQVTRtvD01ilGPhLeZfPd5ie/+UcYsiAOblh6A7pM6qYsBQm2KL2jSdanuPcax9vC64/mjmtKYd7gYj/QOEkwkmzypqZiZd6nsOjU9kRI9ANEupaEN3l04Vazdhwi3egD8qLY85vXzk3o4SqirDz0UbYnGfhFqlnHputjlHezKLkiR9w4o889yMvoFMAPE1UCYQDSBFoqg6aEGWN1r18GxyrhWEccq1Ws964HfeuazoReNmTqRxtcqmhFCChfhWPs/y3rd72f/1dNxbl6bACa968BrDzjryfuR498Zh3UukBU3vQAAAABJRU5ErkJggg==", "[:D]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGy0lEQVRYw8WXWUxc5xXHf8wOl1mB2dg8rBMWGRfb2HWbgYe2VpM4aWRVcVSpWEHNYyy/9qG06kNVqS3qQ1VZSKWpolbyg53UjdXFKaOkcZoYio09FhMwAww7DOOBgVmYe/swM5cZ1kSu1CN9mnu/e77zP8t3zpwD/2cq+LIHvP0YgU6gDTBlfgEGs7+eHrz/cwW8/XwfeCWzjqIwcBPo9fQw9UwKePvxLK/W9MVipjYArWadptMu7MdqMVprZb5YNEQ8usbdv/yd8JqBLG+JJTCgVCaveHp4up98xRHgP3oacQzGYqY2wejAWt1OPKFncmw7DxxAJ1iYmdgkvGZAMDow2xqIJ/Qsr9Z2AwFvP579MJSHgP8OuLKyWoPZ5uZbb/yehpMX0Wj1TI7+E8EgYLaaZf5ELIH3xiDW6nZeePOP1J+8CMD8kweo1Zs6tTreffkCgYH3uH+kBzLg3ULpGSRJRavnB2h0egDcZ15HrS0mOB7MO7MUXEx/77gk77k7XgfA6OhEMDoABrz9vHyoAt5+3gK6XW0XcDZ8HQCzvZGAb5RH//5Ifk/GE/m3bjkMQKW7S+bV6PRYq9tZD8do/tobFBnsWSWqs+dUu8CrgV5LeTPOxudZmklbdf3XP+P2238AoKnjHOe+6dzjNbVWDcA7P/8h7177DQCeVy/hql1HpZRQKTS0nL3M0J1fmlLb8QGgaz8P9CrVOlP96dcyQjUAPPzXDZnBP3yXpakhBIOQd9Bclr4Pw3felvc+/et11hb9WB0lIIqoFGrqWi8AdGZDodhlfbfrxMuoNIVpoVYzgkGg9VQJBnNamdZTJQC4mmt20CUJa3kZgr4I93EzhYIKlVoh85ZX2yCVAlHEUlqPwVQFcCWvDnj7eUup1vWdefWn+ZdrZpEPrt/J23M1ueg4f1YGR5JAFAmOB/no/Y/zeBuaXZzoeA4kCUkUQRQJLfkZe3gD4Jichpcv8NuyqjZ7SUVLngDBWIy1wkoinqRQ0OFqruErXe07wBlwSRQxmIqxOkpIxhLoirS46is43t6AlOFBFEGSKNSZmA8OI0mpQO4lbLOUt+xbE6yVNqyVtjyX5wKTA2C1W7BaT8pgUg6wrIQoYjCWsxZ60qnIllsArWA+vC7nCkmlkDJxJZWSY5x9lkQx/X0/HlFEKCoFOJaXhsXm8qPBs1btsij3fbfLc5+zHlEq1ABtqsMMXl1Y5T+DQwA0n27CUWnbC34A8EYkiu/BBIlYkrp6JzabOY9f0Fn2FqLddHvgFolMxZsem6KutZbTXe1oNao8YbuV8j2YYOTeGInENgDjnwfp6jpOVUWpzBONruQpEAbYWJtNh0GSmA/MkYgnKGl9DZP7RWY/+Anjo36m/dPUNbuoqinHUmJAk1EmtLzGQnAF3+gEG+tbKDTFlHddRVfawMT17+F7NEWVwwyiBJJIajsGMKIC8PRw39sP0fAcxSZnRktJ7hiKShup/+47hMdusfjZNXzDfnzD/gM9Z3a/iOPcVZQaPanEOgAatXInVKJIdHMVIC8NByNL4522yhNIkoS9ogyNVs36pBfV2TdRafXYW17C3vISm8t+wk8GScXX2Vzxo9E70BqcaA1OjDUeVFq9LHR26E8AVJWXyNmBJBGJzgMM5ipwc3X2Uaer5QWUSg1IEk3tbkY+HmX2w1/QeP7HO82HoxGLo/HovmxmiLlPryEUaalymNJpKUmEIlOkxCTAzdw/o5upZIy5zz+U8/ZERxOWMhNLvluM/60XVWqDQnXBF1qRSS+P37sKQNfZRtRKhSx3IfQ427xOyQpkmseBuYm7bMejcrzOf+d5LKVG5h/+mU8GLhGa8KJTKQ5cqegCvvd7uX/jKgXiFl9tr8ViKJSLUGh9mvWtJYDePU1ppuUOWKyNJnfbRTleia04I589xjc6CUCR0YnT3YVgcmJyuEluRQgvjLEUuMfK1L30RTQWcS4LnpETT24wOn2blJgc9PSk+4GCA9rvgTJHK3XPfTuv4GxEoowM+ZmeXpJzfDdVOi1UOszUVe3kPMB2KsHj4D/YTITDwLFsl1xwQE/4K+BKmb2Zuobz+1a60GqERDwJUrYISdhK9XurZD44QJunZ6cxLTiiK+42GCuorf0GWk3xkfU9bz9DoY0Znix+QkpMhoFuTw/vfuHBJNOg9gFUlJ+izNKAVl28twzngmesjmwuEgyNZi9cAHgl1/IvMxkdzyjRCWAodmAQ7BiK7CgKVAhaM9vbMTa3Qmyn4qxvLRHaCJLYjmZF9GVGtKfPOht6gO7MOooCmdmw75lnw0OUyU7Hu4FH9nP1QfRf5YSPQ4h77XUAAAAASUVORK5CYII=", "[;)]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAF+klEQVRYw8WXSWwb1xnHf+QMJZKixBFlLZZki1YFu2LkRkGMuEWCikZhZGngCOgpycEGD0UBA4UOPQe+9Fz3EKDNQXUXJGgPhlM0QHOqhBQpfHDExIrsBC4s2pIjiaS5iOsM570eZriMSC1BC5TAA/jezLz/71tm3vfB//nn+rYPrC3yLBAFwsBsy6UsELfHUiRG7n8GsLZIELiysaksjI+Z4SOy3gBuRGIsv/kcc0D8g5V2KNcRxC9/ec9z/S83e7T6mhYUXPhJmNcvT+Hzu5FCIk1BNZuhlEpSeZqilNxm+TbcjkNVb2y3Dsx/sMLn9QXlIKuvvsFvgGs6AW+FEIOjPgCepkzur+T4/NMkP7g4jKoCQqJ4uujq1fAPHefu1yp//TBFwA/nZ0FVWc/kCAOvrG7x6wMBbJcvAa8MRJ5h5rUXmbs0xtylMV57O0zkXIj1r3ZJfF3gwd0cP3x1BCkFUggQEoTEhYtcpsLVhWnGtQwzUzUNWEpssrS6xccHhmBtkRVgduTcCwTDp9quSyEp5nR+fumflAo1/vjJHFIIpGkPOyTWmsQ0dFL3P6NWLgJEIzGW9wVYW+RXwMK+4lI2RJIbJQp5nZOT/qZoi7BeNVldKZFOGSgukyHvQzR/LgvMRmIk2gDWFpkDlgYiz3AsMtNZ3GFdu7XNdcGn/9glnao59pgc+DeaP7cUiXEBwL1H41p3UOsojpTWaImzNUTH/48fVkmnakw++zpvv3OHV3/6Pp7uABvZcYCobSzqHuujQ7PPtWlvPCiQSVaRwoLwBxSODXfh77FfQWF7ovFfsLWp4+kO8PzLvwAgNHKG737/Le4uv0e5FsCnFhaAZbVF50p3UMM/ONQG8NlykmK+1rY+MeXj7LleVIU9EJJSSdA/coYub2/j/vEzUe4uv0fJHMCnFubXFploBZjvC4c7xv30bBC9bCLtMGRTOk8SFRIPymTTBi/+KNgGkc8JJmafZ2fjEcs332di+iwvXPyxlfmeYH37qGq7fwLQvFp/mzhCcvp7fW0JlknqfPL3NMWCSWpLZ+S4p5EHUghCA2621+/w23feJbn5GICf/fIaAD6vgkoPNb0YrXsgDDjdL63Ec8a2OQ9qCi9d1FAV8PlcFph9P1Li87rYTNyhkP2mseXtj97l5FQvWq9Aln2gF8PuVgCH9dhi0haWzQSrQ/QFFUt8L6QpGRu1PrLnLwwzMOxlcrrPFpd4PRKXy5JWOwFIh+Xt1h88tzzRr7k4ecLNI7p56eVRS0yRTE82DWoFiO+N+37ve6sQB0EIwZkpN4P9kqcZKyzjwwLFZeURln4DIAtg6jpuVW3byCEqm2AWhNjno2TN+/tAC0iEnbyY1jVhWme0u9UDpZ2dA128vZpne3W34eZmbhweHoQEszkXtQpA3A1gl0/rpeTOnoRzbrTyh03if3pC/kmlo8sPnduwwqwiRBVgqfUsuJVPrDvOdPZs1H/KKki+vNnBU/LoyWrouXrYHQDXRc0g/yjheLA1tpMXQgAUtnXWPkx2jrsUNvh+EDVqFsCtSIxcA8A+n2+k177ArOq2y5wb9Z/0cuJ8HwBbXxS597f0Pi63QKp5k2redEAaegYpawDX2kqyq28Ql0JcMYq7Xv/gccd7Xf8ohU75KGcMCjvWyD6q4u110x1wOyDSDw3uf1xk5yuD4xEVKQSmWUEvfwNwPRLjz/tVRJeBGz3DY4ROz3QuNkzJvY/SbK+WGs8pXS56jikgoborqBYEAAOTCqfOezBrZSrFx4CI22VZ7qCa8HfAFf/QKKHJSFv1I+x5NlEl8a9dcptG2x6KB4anVUZnVIRRpmyJO8qxA/uCOoTHHyD0nbO41a6OZZc0JUbZpLBjOL6OvUPWAVUtJzGq6XrWRyOxZk9waGNih+M6oPlCw/QMnsCtdALpUJBWMujlJFIY2CX+fKd27Sid0YTdZkUB1G4/Hl8fqrcXl8uZeLXKLqZRpmYUrdfRsnohEuP3/3VzajelC8A8oB1ye9z23K3DmtRv3R23wOzbHR+1Mwb4D7zHYxtGo5O/AAAAAElFTkSuQmCC", "[:-o]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGtUlEQVRYw8WXXWhb5xnHf5KOLMmOLMmxrbh2bDnpXMdOqZOutZu0lcdGLwLr3JtulJEZBmsZgwUGhV0M21frxWBeYax3NdlFYYU10G5sSddZW5tAUgd7SZ1u/lKq+FvW94f1cd53F+dIPvpIk9GLHTDmSHrf5//8n//zf98H/s+P6X9dEJiiBxgFfPr/0jMPBIFZ/wQLAK+d5QlgEhgz/G4WmHzrEwIPDSAwhQsYBy4AvvAetB7+0iWxcIyZK9cZB9w6sCAwpL8DDL31CQvKQwT/ATAdj+O+tQh7kYPvPN5GXvzxKQbPdFLM5kjtRInf2yWyuuG2JOIXADpaCY6eZsg/QVxn5W09mSFgwfSArGeAsZxq5cMPCxSLWlDPkSaiW2mi2xkAzk+cYXCkAymk/idIrIe5N/c5ya29UnnGS6V5oAb04LPAUPfIIJa2TqZfu8zXX/Dx3deHAZBScuXiba78fpHzv3iGgeEOpBRIIaEMRBK9u8naxwuohWIMGK0GYbpfcIvNOnTMfwrvYG8NQCkNQaqDSglClAEgJOlInODVW2RjyRoQ5joETANDA99+tja4lBU0SyGQqjFjgVS1z6SQ5PdV/nk5wuU/77MU6yVNixu4pCcJgKUqez8w3esfoq2/pzZrKclnVa79ZZtP/77H3tY+TpeC3WZCSmlgQmPg2kcxwjsFPN4+zIqdRE7BRtKtkLfPzPLXegzMuLra6Dz9WN3gUkg++uMG66sZGhxeNoJZAu9vk99XtcxLrAhJLFIgvFPgcf+POPfqO5x79R2aXB3E6AK4oPvJAYDAFN8BfN0jJ+vXW5WsLSaIhfM8+cLPGPvpBzz/8q8o5CWf3UxoJVBlGcjmF/sA9A+/AkCD3Un/8CsUaMTqsKEbVAUD466uNlxH2+9b73uraZpcHfSPaJse7f8GXY+NEt7MIYU4EJ8qQYLH20csHCW4eEvzjSN9AAhHKyV3NAIYax/oLWet1VQXlQ6ksC/w+p6sYMhzpI94tFgrTinZWf+Cn4w+wesvPs+f3v5deU1bdzuAOzCF32wQH66u9soWE3pL6bQCLC0s8PKjHsZP9ZQzAwwa0NYpCliVfRxNmtm+++YbhP49C0BLqw2rvQFgtMSAD8DW3HgQvGpDqWpZpSLLAGSSCd598w3SsQ0cjeayTkoMeL1agz3+lHZouFpsrM6/T3urCSkEVrsNYKh0FviaWt1IVVTVXoI8APFIt53wVp6jxw8RWkkR3f4Pqwufc7SnoQIsUuKwg8+nAE2c+14P1gYLUk1xrNeCVCUOl5NMLOkuH0YWm/Wgj+u4mxSC7l47y5+lOH22ne7jTlwtBRSrQt8Ju6H+pT0k/f1WLBZJZM+EosBxnxlnI1o5pQSgDCCXSFdYaI2lSq2uTz/XzK25FODA0WjmqZFGHHbKJSrrRl/3aK8F2WPWu0RW7GcEMJ9LZiqUTDlzw6ZS0uyycHa0+YDyqnatKaEQtS4pJZl4CiBYEmEQILUbrRWewd2MRlMOUPWbVLLI7na+xheq9yns5wCCJoMTRruHB93egd46dFWebvVOwd2dPJ9eT5LJaO1qVeDsmSaaD5kqdCGFIJfKElpcqmhDgEu7SyGtE9TaE6/iveqz4FqWf8zGyWQER0+9xLFnziMVJx9fTVcalG5qiXAEIOafIGC8ks1kI4nxxGYYZ5unor4Y6k2VTqLRAnM3UljtTp774UVcHSeQ+kVj5dpFwuEiLW5Tuf5qQSW5F0W/bR1YsX+CADAbunGnAjFfpgkh+dd8GoBnv/9bDneeQDGBYoIGR7PmkAYnlUIS2dxGqCKm3ztqjuPJbCxJaO5O3aAHbqcBjEULhMNFjp1+iY7jT6OYwGLWAKj7CQAcNsrrsokUid0IwLR/grs1AHQWJneXQuytbVSp2KgJDczuTgGA7pPfxGICi569mkuwdvM9HDawN2gs5DIZttdCAPP+CabueyXTv5wJzd1hZzlUIyDjez6vKb5Tz17RQdz84JcU9pN8rccMqiCXzrK5fBchRKxqmKl7J0QfQC5t3l4heOM2aq6g0ygqWrTkZjur18vZX/3Dz1mZew9nEzzSbiKytcP60hpCiKB+IY0/9GgWmOLXwAWzYuFwdweeLi9ms7nsdum0yt8CWRrsTnpOfovNleukous4m2CgM0kqvEuxUCiNY2PVwR9qNCtdVPVJhkOH3diaHDiaD4GUhNaLLIcUBBbMqHgaongaolhMAiAGTPon+M1XHk71O+N41aB5v2deB32pXtZfaTo2sGIcNI2T7/yDghqf/wJKKV5zz/4V9gAAAABJRU5ErkJggg==", "[:p]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAG40lEQVRYw8WXW2gc1xnHf9r7ZXZ3tLIiaVfOruzYjiRfZMeXRA+R7DY1xSkVNSSkLdTgp/ahOAgKpQ81pfTJon5pnipw2odADW7SmxMlbdYklZuAy7p2pMipZMleWfe9z652Z3dOH2b2povbkEAHDsww5/y///c/3/ed78D/+Wn6vAvGRzgEDAJhoK/uVxKIGiPSP0zqSyMwPoIPOAdcMAz/L88V4Er/MDe+EIHxEb5pgMk2ScIfDuMJdODt6MBit+uThABAWV1FWV0jMTdH8sGDCsSbwLntFGn6L15fBs7ZJInOZ56hdd/ezROFQAihk6gMTbCeyTAfjbI2M1PZnqGt1Gh6jPEI0Ne+fz+h/ue2NAwgtEbjQmgNRHLxODM3b5JPJjGUeL0exrSNABGgb9fAwLbGhRAITQOhgaYPoWmgieoQQuD0+dh36hROWQa4Ymzp9gqMj/BL4IK0+wgZtQWArt4W2nZ6Nnhd8RQSKznufrxEsVDmiYCLvfv9WK1NDcqUCkWmIu+TT6WSQF//MHObCIyPMABEio4QsdWWBmInvhaiq8ffIC9CkFjJ87c3Z1CLWnWu7LczeKYTm7WpIT5KhSJ333mbsqpG+oc5udUWXFQ1G7HVFqx2iedfusTzL13Capf4540YSnK9JrfQxwfX51CLGodfeJVvDf+VroNnSMYLfHYnoStVN8wWC6HDRwAGDWdrBCoFpuTtBmDg5RF2Pn2SnU+fZODlEdRCmdh0St9bAzCxnCeXUek6eIZ9x1/B5vBw4hs/xe3r4P6/01vEh4bc1obU0gJwcaMCF2ySRNniw+3roC18tPqjLXwUq11iOZapAqFpLM9n9Rg5+CKzk3dYiem5H9w7QC5bMgKxPjj1d3+ws6JCqJ7AYCXPm0xufvWjH3DxOy/y8bt/BqC5fR/FQrmWbpqGWigD8IfR1/nx0El++JUj3Lj2BjaHxwhWrRorunFduZZAsGJzyGTIHwLC3vZ2AOanP+HGtTeY+OjvXPr+d5mduIOSfARCB9XTT2C16vyjkWtVL37zi59QXM/oH3Xy6/Whpp7U3AzQV1EgDOBs9iPvcODz23G6LVXQP/36ZyipBZ7ocFYB0DRa2x0APLnbU52by6SJvv9bXG5zQ7zU1wahCaRmP0C4IQssVgudXV497U62YbGasFhNmLRJneUebw1IE8iyldY2B08+5WFXtxeL1cTh/lZckpVQ2LXJ62r8VGoIyJaGAqcJWjtchPfJzE4lOfNK7eDb0yvjdptrpdbY276jzUTGFjlwbAcHju0AwCdb6OmRjDmaXgs0qoZF5fyAvgYCGHt7YrADt2Rh+ZECQve86ynPhrqvA/t8Fr769XYm7qRQsiUCQQehkKOKtfGgasCASAOBQiaD3eVCCEHvYT+9fc11jGsRvRHU7TRx9Ji8gVxdBmxcownKqqpvu2E7CpCLx7E5ndss1DZ7UP//McY2qSAE2VQSIGoCMJqFaOLhw2qQ1AqIVs3hBuMNEd64ZvYfCa7/fJqlT7NbBmK5WGRdUWoEKp1LMhbTz/C1dW6+do9P3orpwHVEqnm9FTlNELudZvLdNQDSi4XGs8N4jy8tVm3WE7hSVlUW701RVEqsTWe5/+EKU2OLNYnrvTY8q4CquRK3frfAnT+uVAE9rdYGchWc1cVHGP1iylyZPDpG6vxpwko83td5YA82t5WVe1ni9xXWZrJ42+3Y3eZN+5xLqMx+lCT6+2VE0knQswvJ5iNdSFBQSgR7nA1rlmIPyCQSAEOjY6QsG4/jsqoOzd66Je/uPw6aYOIvi8Tv5/jwtft42u142+y4ZAu5pEp6sUBmqYjFZKV7x3FaXYEqkNPi5rOH/2L+rkKw24kQgrySZXk+BnB5y4bEOBe+B1zxd+4kdOgQ6Ud5Jq4vEZ/Nb9s5HwucwmOTN/eWsbexykWe+7afvJJl5tMJtHI5CgxWumTzxkWjY9w+fxo5n04/W8zlaNsVoPOgl+AhL06vGZOlCbvbTD5VAkCy+dgl92xJLF9SWE2sEegVzExNoJXLle54rjLHvNXC0THeOX+acD6T7kstLeHyyTg9DuSAnUC3m+ABN8H9EpmlIqmEQr6kNMhfLaxCY1mJkS3MYrapScPz2/VzzNvJOjrGW+dPM1sqFgfXYg8dxXwOh1vCbNFPOautiUCvi3yqxML86pYkiuV1FrMPsMu5iNWlPlvv+ee5GYWMm9EggMMtIflkJJ8Pk1nPisn3ssTnTEg2H3v8B2l2tKJqRSZXb7GaWwCQz16dTn2hy6nRM14AhoBNEacs+MjEmhHlTaJePnt1+tUv7XZcR2bT7biQdkTjE8Fw3QU2cvbq9GMvp/8Bf+J+kqwxd2MAAAAASUVORK5CYII=", "[(H)]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGQUlEQVRYw8WXb2wT5x3HP7bPNs4f2wnECeFPEkhq0oaSho6u1bZQRBd1iA20ZaNS2/Bikyat6irejHdjIE3qtG55OzFpqaZqlcKqiNGp7RB1W1R1WuMRtrakUiAhsQ8S+3J24tjO+e7ZC5/ts53QoFbaIz3S4/Pd8/3+/v9+8H9etvv9IDyKD+gFDpqPeoFpQDV3qG+Qia+cQHiU7wEngWMbeF0FRoDhvkFmvhSB8Cj7gOGCxN5AG3WNW/HUb2ZTXSMOhwSGIJ2MkdOypBbvkIzPkkmphSuGgTN9gyTum0B4lF8CZ+ySi6b2HpraenA43SAEQggwDDAEwjBAWM6GQXpZYX72E5bUKKaJjq1lGts9wP8EnPQG2ti5tz8PDBbwPAFhAmMYJniJBMIglZjn9s1/YuiaCrzUN8irX0igAL6lrYdt3Y+X/iiAi3LAqrMwzGf537qWZXrqQ7KZJMDBvkHeK1xprwR/+RRDwMnmzr5ycACBBbykBVXN5s+ipJECOIbAbpNoa38Mt7seYCw8SlslAR/we2DxF79jpG8QvvP8NGOXpiukL0k2cT3O94fexdnyGk17LuDa/jqPDrzDxbciJRNY/MNhc7Bzx9ew2yW/GSFl69+AaG5uFocOHRK7d+8WBXm/aO/atUscP35cdHR0bOj9A3sl8ZffIMKj9AM4gCHgp0eOHOH8+fN0dHTg9/vRdR1ZlvM2X2edO3eOs2fPEgwG6erqwufzMTk5iWEY634TmTf46z8AaB//lFftZnLh9OnT2Gw2VldXyeVyuFwuPB4PAK/8+gBabAht4TkujPQDMDAwwIkTJwgEAtTW1uJ2uwkEAnR3dwPwwnPtpP/7NCvXB1i59m1WwoeJhL7Fy6c68dU5eO1NDgL7JOBgZ2cnU1NTGIZBJBJhfn6excVFstksAAk1W4zzif8oAPT09CDLMoqioCgKqVSKTCaD1+sFYOJGshQZpnP6a+387Efb+GavlyeeDwMMS4Cqqqp/fHwcIQTxeJxbt24RjUbJ5XKm/4miQ/m8TgDm5ua4ceMGTqeTRCKBLMvEYjHi8XjRafPbmh/ykfHw7hp+e6qRkYtKuwSEYrHYsatXr+JyuUgmk8iyTCJRypz7Hmooenb/15sAuHLlCq2trTgcDlKpFAsLC0QiEaLRKABHnwysnZyMfDT94HANhx5Xpm1APxCy2Wy43W40TUPX9TLwjy8/nWdvSvPUD0O8/9ECra2tBIPBouZmZ2dRVRVfvcRnb34DX63DQsLIh7J5ji/PoqQi+Uy4o4Wfz95huNJjfV4nl984zL4H/WXSqGqWp555n+ufVdcXX73EW+f383BXXTEdi7Jsmb8jnppDWTEJhEfp//gTQlcnO5m5vYQQ0P9EMy/+JIivXipLq8WLhODPF2a4eFlGTWogBEefDPDs0a1FyavBS2dlJYKSjpYIAKGuA99lU42/qrKVgd+r+KxTGavrhMgTyMghO0ChOKyuLJm5XlR5bj6ULFXQKH+vmKpFNanKOoEQZPUVAFWymO9aYmGm19vQSjat8en4XfNSa0iZQBTO+f/2BOtwSpRrweLxJVOY3wHp3DJAyEpgJBmbHRadj6HcTXHtozsb7hOdDsGeB+rW1ojVhCZ4MhvDEDrAmJXAmKFrw4t3b9K4ZTtOlx3czQSfvbgu8NyVX6FOXmL7tk1lzllKPtXgAEurcczmdabYD5jN44h8K4zdnqOzuwFtSWZ54o+0eJ1V25O+iTp5iUCTizqP3VR1pXNWgy+vqgX1n1mrITlj6JoamfoXvY9uoWGzm+kP/8DcB6/gJ8aOBjc7Gtykp/7Otdd/DMD+R7wVzlkRDRZwTc8yvzJdkP69NVuy8ChDwEhTSxCfv4u3/3abRSVbbXenjf2PeNnV5rHkhzXC1Vy6kSOy/DmreloFegvt+j17wsbNHTS3PMjU5wluz6TQVnUQ4PdL7HmgllqPvRrcknzWAMcEn9hwV1xT08jWlr04Jfc9i0sVEXOltSXk1BSG0DfeFVfNBXaJRv9O/N7tOHCsA24hZQIrmWjB4e5/LlhvMqrzbMHj9uKWanHaXUg2JxiCjLaMlsuQ1pZI55YK6v5yk1EFkX7gpQ3OhtPA2FcyG25gOq4cSu9rOv4f/iCz+2PhQ+cAAAAASUVORK5CYII=", "[:@]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAHYklEQVRYw8WXbWwT5x3Af+eX2I6T+HBiO4TgM4RkISxv0DZ00FImraijEtEK06pWXaSJfZimlkmVsmlf0L7lU7NpnapqWtOyrh2lELS1m0YLgRIKtGW8lAVwAnEIxImdxJcXv5T4nn24s2OblHZs0k4+3cn33P1///fnD//nQ/pPX+hUaAbagRZALnjcB5wH+rpCqP8zgE4FF7AH6AAC91qbRiIpWZiRinoTJmvfO0OxX/9XAJ0KLwB7AdlV4qSlbjWKz4Pi84CmQVpDaBrR2XlePXWRwZlk3vv+BbXXguj4MovcBbCrRj5kmLZHWVA7zIjHfOXL2LbpIQLLvSAEaBoirWUBzt0c5/dnB0jcWcBhMbOp2oO/1MFYJMLV0VGAGNDeFeL41wGYzvjWJAQNbjsv7npCXykEaALSaYQh/MpYlK4PPwNgk9/L0+tW4TBJWbhwTOUvlwaYmJ0D6OgK8XquPFMhwOqFWKAyPRersAg0SeLz6RQvvvUPRqZmQTLpIJKEZLD/5sQFXbji40cbvkGx1ZKnl6+0hGc3NOMtcQL0dCpsyZVnLgTYLPOKFW3j7m2beXJDA1fGJhlT5zgzOErjSi8uuw2EQAgNhOBOOo3fVcJz6+sYDI4xNTWLW3bq1jJOiyTR4KlgaGqa+S/utG+Webtf1WPCXBBwW4Duxx9qZV2NgtNmZWvDKqJzCYYi0yx3lVDjkXU3GLFQ75H5ps/NRDjG4UNnuPyvW5SVOvCWl4IBqUPAWk85/7wdtqeFaOlXdVeYC7TvU3weefvDGwheucWJIxdY26iwXqmkfnk5bauq8rRH06+RcIz9fzqJsDupeer7nD18hIb6KuxWswGrr7Mg4bRaCE5NBzbL9PWrhEw52u8AAo82riUZT/H3Q2cYHBjl0JvHScZT1HvdevRrmv5RQ/hnZ4L8+c2PwF7MDz44yuPdLwFw7kIIIQQg9J9x3+T14C0uxqgreUHY7pNdKJ5yTh2/DPZiWn/6PIMDo7z+8vsEL4/oqZdJPwPk2AcXwV7MM0ePsWJ9K6XlbvxbthCJzuhfzcRCzv2Dy70A7Z0KrjyApsBKEILBa7ep29HOtu6XeOrdg6SEhd63P+Jvh07rAAaE0DQAhpu/Q+CZl6nc+Dz7evsNYRmBORAGR52creDtppz6LisVupln1Di4K/njgUuEfa385PoNvM3NzEzPgZZGaOlsIbLZLIQuDQCgzib48S97UIeHsdks2WAVORmBENjMJvylJQAtFoNEBvCVlejaAb/9wyecOFAKwCMb/Twny2jTt3TBOR9bs6YSdSDI8YpWUmYbbVOfo06EaNtSn7cucwrDEl6Hg5HZuSzAY3onEQiTRlmZAyV1I+ubs6eusm3+PGuqywxAka2KD7etYTAY5oWh/YTtbgLxMJ7yEtbV+hbdlKmg2auG3WxaohIawbVu7QoCqRs0zZ8DYFvsfVKqSnW1G7S03oCMJlTmtLPrew+yclkRgXiYGqWCndtbjEwRecJFbiwY8ZCxwHAWQEi0NvsZHBpnR/QgO6YPAuCpKGVdfVWOCxaDy+t28uyutmxmZBTJpmwGQtP0mpCxSiFAMpXCXlSE3WJmV/sDfPzJEJHoLGtWe2lYuyLvxTy/5lTGjCChiXwYke+K8UTiboCwOoPidoMEdouJrd+qM/qK0VzSiwCFkZ1bnkWBtovFaxF4PJEE6LMAdIUIdSoMXxuPBBTZBZKEkCRd8FJblhwrfDwxxrHwKKPxeQDcRTZ2VgVoLpUNzcVdblFTKWbu3AE4nxuEvdcmoouFJq1BOg3pNJPxeMF/+vWNwQH2Xb9KRLLgb3oEf9MjzFvtvDp8lQvqZL4lsiCCS9MxgFhXiMOWHIBuNZnac/F2mKblPmO7IvHe7RDv3R5hp7+Gb/uqstH7xo2rnJ6cYFXLozz9q/3YS1wAhIcu8rvdbZyeitLkKDPcILJxkFxY4NPoJEBPbgxk3NBzJHi9o9a9DLtVf9RUtoyj47c4MDLE0fAodaUuJlNJgnMzVNc187NXPszzjty4HoBEemGxZwhhxIFG//gEKb2Edy+1I9qbSqdjf70SzJq62ubgF3VNbK2oBAGnJycIzumNxlMVIDF5E6fNjNNmJjF5k9d+vhOAWocz6/OM8JHZeT6dmgbY2xUitOSesFPhh0BPo6eCJ2tXL7lTnvwixb7R6wTjs0s+r7U72V2p4JBMWfOPJxK8NTxCStPOd4Vo/dItWb/Khc0ygYl4vEVNJqmVXQUdTcNhMrHRVc4Km4PKIltW42ani++6fTwh+7BCNu1G5uZ5Z+QmKU0bBjb2q6S+ci7oVHgN6PAWO9i+SsFX7Fhss5mbglarFxuyoGiCk5Eo/ZEoxsTUnjH91xpMDHd0A3JjuZsHvBX4HI6CagiC/KKUXEgTnJnlZCSayfdeY0uu3s9kpBgQ7QBehx2/04nXYcdlteaBjMzPM5FMEtRngEyF3Vs4C9zXcGqA7DFAAl+xvBfovZfg+56Oc2AC2X3EorbDS41f9zr+DTn1O/7ldSZLAAAAAElFTkSuQmCC", "[:s]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGVElEQVRYw+WXS2wb1xWGPz6HIiVxKJOmZMWJZNiS3biW6keDoIHLFpUMdxPBQZA2gOt2E2RlpEgAdulFN14UsFdFu6kSAV60KKCkbVKoQiG3SeMgiRW6tmMnlCOVepGSSPEx4pAczu1iRiRHpAwnza4DECKvztz/v/895z/3wv/7Y/sywVOXh54AxszPMCDvCPnE/EyORmNvfm0Epi4PfRe4BES2x+R9HU1xar6Emi9v/9wErgBXRqOx7FciMHV5yA+MA2NOt4NQf4Cew0ECvZ3NwUIghKCYLbK5lCdxO0UhrW4T+eluitgeAj4ETAJ9+4+F6T/Vi0tytg42wdF10HWE+Tezkufeu8uoSgVTiZ8/EgETfMbpdsjHzh5qvWILuG6Cixo4wiCiqRXiH6VY/SIPMD4ajf2s8XXHLol2o32PVz4+doSOkO8RwXWELkCvGuPmmN0Ge/Z50cpV8unS8PmRbiamk9d3JXB+pHvS6XYcPj52hLZOCYBkIs/NmQTxW2sABPZ66yDCKntqSWH2vSRzn2ZB6MiyC3SdrrCEWqigZCuR8yPdMxPTyQUA547VXwAix84eqoEvxjf551tztZjUYgElW+boU2GL1Og6iw9yvDe1XItdWymyuaYyfNKP0HUGj8sUNssoOW0c6Aew7xDgUs+gNctvziRwSe2cfekaz178E4HwALdvrKBkVcvK0XVm/5XCJbXzg5/8phb7+b0CSq5Sixkc7gToMxdbJ2AO9PWf6q2BJxN5lFyZE2deQ/J2884bb1AoHgTgiztpy/6nlhS2Chq64wj/eGua9eUNTr/wKwDm55QaWV+7nb29EqavWLZgLNgv16Q35M4DsP9whKuvvMyH028DMHJuP5n1oqXsUstbALwz8UeKisZffvdrxmcXCIQH2MzMW6ojvM9FaqnUN3V5aKhxC8ZC/YGWye72dKDk62a2VdAoq5p1C4QAoKhoRkw+B4DL00G5olvI+mU7DmPpEXtD3dMR9FqAAyHjd3r1PpFzL+Lt6MS/J0Cwu43AHsmy//6AC4AjJwYAeP5iFIDM6n3kTkdTvvhlR53AdlPpCPosNS4HPQD8+/pviTz3IuOzC7x69ZcAhLo9llWF9hoEvn/uGX4fz/D8xV9w78Y1KqUCoaAdoVcNj6jlgg1A3s6Bvp0GgxD4OpwMDAX5LDbD315/iXa5hwexPyN3uel93FtfldBxO+HgoJf4fWusv9NOT9jRULLCsmXORgUawbcnPnoqhJItsTT/MakFkLvcRH7YYwHf/v6NJ71s5TWWF4xYf6ed099pa/ILdNFE4JOWTUXouFzwzJl9KLmyIZ3P3tLz0XXcDnj66XbK5SqVUhWvB8tcFsveQcDI4JyKx+dqegFdx+u1g8AEMzzfmEhv6oJuh8DVCN7CspWCQcAOMBqNXQfILOVasK1PUJewao5Vm8Ctca3BARTDNmYaFZjJLOUi3Qf8TS+s3Erz2V+XOXmhD6/s3DGpYOOBwvz7GXKrZdpkB137JfpOenG6aA2uCEolACYbjWh89fMMmlppqtniRonccpE7by5ZxitbGnffTvHB+BLJ+1sUsxrphRLxd3N8cG2dSlGrK2iCAyyvGA49Go3FHA1teB54Wdd0T1eP1yJhe8jNwvvr5FdUipkyLo+djQcKs39YYT2+hVOyMfg9mVMvBOk96iH9nxL5lEapUCV8wGUBV1XBnNFcr0xMJ6/XCExMJ0vnR7o9ufViJPiYD7dkr0ntcEDoUDvLt7JsJlQWZ7Mk7yloqk7X4xInfxwidEBC6AKXG3oG3SRiRbKrGge/LVksJh6Hosom8KOJ6WTJ1uJENOvxOYdPnHkMpwNLUm2lSyTv5li9W6BNdhIeaCN8yNNU40LXWbi5RS6l8c0Rb4P0gvl5o+9sH1Jtu50HfbJbHj6912gaD8voVjVuHssan1RKEDekt5wLdzuUXgDGfX4XTz7Vhcdj+3JltgM8kRAkFg3DG43GvtX4P3srAqPR2OvAmJKtbH789xSLc4WvBK6qgtt3auDjjRebR72YDJkvDkttdnqfkOgKOvBIPBR8Iy1Ip2FtrTbVK6PR2NX/5Wp2wTxC9QH42u1IHvD5bLXmpWkCRQFFgWq17i3ApdFobOHrupw+a15MI00tvMFRzRvV5MOAt5//ArvCgrz9K3rDAAAAAElFTkSuQmCC", "[:$]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGqElEQVRYw8WXTWwbxxXHf7PLXYrUB0VSlGxLjmnZThXbgtWigNEgQG0UUHtoYSEtckhR1MdAJ/faS5JrArTKRUCBHpx+xCgQowpqt4DaoHZcBFFhNHTdSo7jyJIlxZJofZC0SJHcndfD7pKiJLtKeugCBLncmfl/vDdv38D/+VJ7GfSDI7FTAO9+lrs1PpqMAQPAmUJOuPRLd+vQDJB597Pc7F4JhJ4CGgMu+J92gEuvJ8aAoWBMIb/73B+eiGW6n1Ejb/xp/e0v5YCveAxIAyRTsP+g4vmzJh09nbTGW4l3JQD4fE4AyH5eZOZunpt/XSL7sATA82eNmZNfMy4MDq+8t2cCvvIMkE6mYPCcSbzD4mDfIQ72HcKyrd1XEkH87z++c59f/ewOAC/+yKSjU40B5weHV3J7IXAKyCRT8N2XTLqPdnH8Gyf3BIwIIgJauH5lgZvXl/n2i1Gy8wtBfpzZTmLXEIy9mfh9tFkNhdt6kdABYgmTvoEwdrg+vFIW7mTKPLhXoVqBWNzg5NctOlLKI7GF0OLsIvduT+M67g4S5nbw8dHkq5atXik5RyhsdFF8LKxlXR7nND29Vk3xB1c3ePjAQfuboLwpzE27RKMQi1EnoYXm1iht7S0szWf3AX2/vlr6XYBnbAM/BbxWco5Q1Z0AfJJZAODRooP4inKPHHKrGstuRnOSy7/4kPtTSwDc/ofD+qoLrkZcjWgN2iUWb+HZ/sMAQ+OjyR/vSgAYqep4DXziz5/w8Y1pAKoVaotuFDzZsdRhRMWoVlwm/nKX5fl1nCpk/q4R7YJ2Ee36JDSd+xIkUjGAEb+e1AmMjya/CZzZdNIAaA5y/85yY775C+VWPAKpnn5S3c/Unt+4Okml7JDPweKC1MaLTxyt6T3WjV9XhrY7cN7VUYQmLLuZc6+8wfHTL+wgIFp7sfWvs99/mfRz/b5LLmuPvLSae0ADcDA3bIfo7IrjF7iGSjjU0XOAjRnPWjvcwuu/vQLA5be+543QLqKFZId3m52/DcCbf7jBvyf+BkBnd4wPLv/UC5nWO3YEWognWlleWhsYH00eMrbY396eat+xJdezXg5EojSoASjm6yE6cfoFjg0MMDv5fuBXPQR+GPCTMhFvDqadCRxIA8RTLUCZRwv/YvKjd0j19PPpx14VjcWo2Z9MCqGQolhY5ub4CNG2Ttaz0zycnqgR6p7Ms3mlCCaoqGAcD2H0W6iUgYjQ1hohXyilawTaVITQb+6xP5LgYaSZqYlLTE1cqi14+Ihnn2jPzsO9ik/vmsxOvd/gWNOmw9GZHB2rm2CAiggqIrBYRa9VUV8JofosZJsDSFWjLDixsUq8vEnWilIVg4ho0t8Jk0gI4tZjeeyo0JVyWFw0AKGtRRO6XqR5slTb4AG4agJsUBYwV0WiQnPEplAobUlCJRASlCgOlIvszxeRDYU8BquzBb7VvCOhWluE1l6vQOlFh2oArkA1+cojQBiUDVh+7Z1zcDqcxkLkKvEehgQsUOFAATgfFXdPqFql0+ipah08IqioB64C5RZgCsoEpcFdcwFmAgKZolFFmR5DZfmW+SRQGne63JDJDYS0Rs96ijzlQJM3H7sRHMMj6SoNMBPa0kqRN8u0SRgRQVkK0R5bXAEl9SIU7Ongt5ZG8Ih44JYvJtQI7ihN3qgAZAyAweGVWWBm1Sh5yWP6jH0niIBQVytbymsQBnWARvDA+m3KUbBmlILIX9taii9mzaI3yPRrZEi8GNqgEmpHXd8aCtX735UH3ce8WQAYGxxeyTUQcJWQNTe8RDICEqCesxBTdgEO3nYupASV9pXbW8DNRvBla4OycgFGdnRE46PJn5uiLny1uo+QNkCDRAxuzZRwXKm1YPW3EwhCvMfi8OkwVAV1S1CbPvFt4I6p+ae1TEW71waHV87u1pa/5ioZmjVz6SNmHA5YqEMWax/mcMryxNa6qVUh2gJDkAFBLYCxpsCp6xNbuGeuUnHddeD8E3tCvyvKRKNhjvd1Yxqqnum77YDtuyG4B6iAqiqkSZjJ5lkpbOJ3x28/tSn1W6aL0YjNs71d2Jb5ZGDd+P/2y3E1M0t5chsVgJHB4ZWf7Olo5pMYMU2jvbsrRley5QsBA6w/LjOXLVBxNMCFweGVt77Q2dAPx0VgwLZMuhIttLeEsUPGUxWvb5RZXitRqjgA677t733pw+n4aPJVP3HSAHbIwLZMWiN2bUyxXKVS1QFoADzi2577n07HW4ic85vJMwGZ7a4D1/xz5djTgIPrPxzq5egzboDUAAAAAElFTkSuQmCC", "[:(]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGLElEQVRYw8WX309b5xnHP8bnHP8A/whgJ0ASG5I0WZMlSFGlzFk1J5u2Ku20qtWu517mZo2EJu1u/QOGhHYz7aqZJu1uGl21qWm3hmgMVaroCFQlRIUSCqQYjG2wfYzt8767OMfHxz8ymFppR7LPOX4fP8/3+T4/3veB//Pl+l//MDPO94AkMAqEW5angDlgKjFG/hsDMDNOCLgDpID4EbHeBe4mxnjwtQDMjPMry3hY6/YTGYkRON5P8HikTba4m6OUzZNd3yS3/tQJ5M6zGHEd4vUkkAxE+xm6/K2ORp91HRSKbCwssrOyBpADkokxHh4JgGV8Chg9ffUyJy6cPZpVaX/Zr/tb26x89AmVYgkglRjj9/8VQN24W1VHL/zgRbp7w4cYbTbY6aFWqfLoH9PouXwbE12dkqfVeOVAsDS/x9L8HsX9mmnU+kgar0hJpWywtLDH0kLekgVFVbhw8zq+cDAMTFlOtjMwM85PgMnha1eJnIkBkN2p8OG7X1GtCABUzcXNV04Q7tOa6EZCNlPh/l+3qFakLXvj5SjhXs3Mi2KJz+7dx6jW7ibGeKMTAxOBaD+RkdO2W9P3tigVqix8vMMn/0pTKtT45/tp06Kk8UEy/cE21Ypskp3+YMfW5fH7GLx4HiBl9ZMGgJlxfgbER65dtWnd2ixTLBg8ephlZXGPL5cLPHqYpVQwWP+iZIGQSClJb5YptcgufJyhVDDYeKKbckISPTuM5vdh9ZQmBl4NRPvRun31gJLeLAMQ6LtiC3mD3wYgl6mYjlmJmH56YK4HLtmyXZrZs7KZClIIkAKEJHo2XmchpDgB9A+fbgpr/eXOb/7A3+7+FoBbqdtMTtxsrgA7C03ZqT/9kdJ+nlup28z8+Rcgl5DCjhWhE1HW5xcBkoqjvxOI9tmxdZa0qnXx05//sr38LPqdladqXbz8xm1bLP1klv5Qt+m9pdTj9eILBtD39kfrIYgDaH6/RaupPDLgAWBl7l1b4bL1HDqmWLRKEIJIVH22bNiNFBIphX3XfN4GA0Bc8/uamgpSEj2u4e9xM//gd6jeAACz936Nv9vN0ClPg1YJkahC6JjC7PvjJhPegCXbxeCQCkLYeiXgC/aQ39rGzgFPt98GIO3YwvUbx5h6L8NHf3nLVKy6SCR7m4zX7y9c6+HB3/MNEKqL73w3CEJarDrDZz7aAEq5vGnYmVhAKKxw67UIG2tmRQye0tBUFwiBHX0LRCjk5qUfh9lcr1CtCGLDHlTVZYaqybFG7tQBzBnVmqlU0uaZqkB8xGOvNXvfoBUpURWIxdTG70LaHtdzCwmF3SzAah3AKkAxm8cfCjQZb6POce+01spifY8Ax7OUVPQywKrL0QmzJy9dCEdGYo5klC1gTAV6tkrmCx09V7MN+cIK0fM+FE+X3SHNW4Mtaf1WLhT4fHYeYNTZiCbTy6upSPxUG63191Kuxucf7rIxV3jm7jx4uZszLwbwhdy2wUbLNvVkn6YBVhNjPHQCmKjo5VRmbYPekwNNMZZSsvHvfRbf26VWFrah3pgHX8iNnqux++SA9GOdzfki6aUS578fZOCSz7FpmYknajWyW9v1o1rbdnxf83mTz11/AbdbsZGvzxX49J0MANHnvJz/YRhf0N0ccwnVsmBlep+12RIAz78UYOCitykJN5dXyW9nckA8MUa+dTu+U9HLbHz2GCkMpCGQhiC9aCq8+EqYK6/34u3pQgqBNBoyUhgoquRcspvnf9QDwOanetP6/s4u+e0MwFv1Q2qnI9mbwMTAuWH6Tw6ClFTLAj1XIxBVm5LKWc+NvcGMuZ43UDQXima+l4s6a4+XEYYxlRjjxmGH0reBVN/QAANnYo1kko6O1qG2W9fr4Snk9ni69iXCEHPWmTB/lGP520DKHwwwdG4YVdPaYt5a29KR8UiJUTPIfJUmu5PBmpiSrfOB65Ch5E1gAiDU30dk6ASKptmNpVHbjq1ZglGrsZfNkd3ZpVatYs0XqU7DyVEmo5hVMkkAj8+LP9CDx+tF1VTbc2EYHOg6Zb1Mcd/uE6vWVPTO1x5OZ8a5Yo1or3YYSluvSWCydQj5RqZjB5i4NSE7vV09bBhtvf4DhD7GeYl5qFAAAAAASUVORK5CYII=", "[:'(]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGrElEQVRYw8WXW0xb9x3HPz4+PjY328SYSwLGpCGFkCCWbrAusJJoY5q2MDSl0zRVKqo09aVReVqlMaloHX2ZJrGXPZSHZpvWy9ZNGZ3WrVs3cmmbZFoKhBQIKbYTE24mNsbg4Mv57+H4GBvsJF0n7Uj2/9jnf37f7+/+/8H/+TJ8ms0j/diAFqAzx2MvMNY9yPj/nMBIP98CeoGeh9juBc4CQ92D+D4TgZF+ngCGtiRny5axCldFgKq6MqxlNqxOGyazAkB4JcRmeJO78ysszS0QXd/URQwBA92DrH1qAiP9vAgMyIqJEtej+G4p2B0KJ05Wopil+2q16l9h9soUd+cDukV6wspRL+B+6sWrWS6S84C/CvRW7K+i+SuPYTIrSP8M4LkR4R9vL9LxtXKKSuS8BBzVThzVThY/ucPE3//tTsTiowaR8AqD3LJTaWM+8PrWRg4f/xxGWdtSXVfIxnqCRX8Uz0wEq92EtdR0X0sUlxbjOlzHzLRqiYuCSuDsH0YX3szrgpF+ngeGGjuaqWs5kFOoZybC1Q/uEo+plFdZOPx5O+V7LdmbhAAgsp7g4rvLhFbjSOomRYnZkIGkOzMmjBngtcBf9jW4aDh2OK9WpWUKtQeKiG+pzPs28dyI4JmJaIT2WkAIRIroxXeX2YwkcdcX0f5VB/PTXouaVBtev8CbuWJgoKCkkENfbt4F6vdscnk0QDym7npWVKyJiMXULPAr51YBcNcXUVdfyHoEKhsPcXv8es9If/KJ7kHOpQmktO+tb2tMp1bmpZglSh1KToscPGKl2l2QYXnBxnpiuyjMbuCd3UjrW2goQBaRAeB4pgX6CkoKqW6s3Z0Rl8qxFyU40W3J7ZOU1rrfEXCwqZjySiX1f+pLgBCCePgRJs+Nd470U9s9iE9P6J6K/VVZckMRmdbnj/Gdlx+juS6cAzgFnlq139q9SZFwVpoprzRTXqmglBRx8mddDJ9vZu+BvbqEHgA5Vd/de/Y5s+R39bcx4bHSXBfGXpzIo/W2dmkts6whEEJgK4hhL4zx8lsNhDaMPFl5ieBisAVASjUXHNVlafm/fm8fEx4rQHrN0joNsg2uGUGkrKEBC1WAqq2hDa1m/OKdetaN1QBunQBAVvD5lgty+loH2ja5yOEGDRxVBaEihLZe89nTon5z3o2uuPygbmUriuc1uW5phGBtPsrqzQiyRaKyqQTZLKUJTnituUTb8xJ47qQX31IBoQ0TP/rubDq9EDtiIPXfR6/dxv+vYPr96xaJx5+txVqlIITgSE2QI64g126VAtDesAzxHYUovhVLu8G3XEDz/jDPnfQ+MNA+eu02C5MJap/5KbajXUSmL7HwxyHGfztH++natEvef+mvXPjYyZ+u7sNhS0KAUT0GxrSevkYoIvPk4FHa+tq3fXyfQAvMRliYTFD/whs42k8hF1qxH+1i/+lXCC9sEb4TRagqqCpCVWk/uED7wUW+9/qz/PDKC3YAKdUYvDPXVujqb+PtyxUAPHXCn5XbuQJt7vwK5V3PUOg6lOVCS1k1JY+2sXg9ou1VVURSI1FTug7A9NqBFrl1+FU9C86efuObO1JOj/rstBN6lAvB0uQ6jmOnMABGA8gGMEmgGMHe+EUNPAWsk5i7k1XSe2WAb/9teGxnIE54rHQ0rW67IAMYIQjc1Op7UXk1kkHr65lrbNWPIok0uOYGwYeT5iwc3QJ9Owmcn3Tszm2RbQEARdr+6NqbJNi49TF7XAoimUyTWLmzysXZ7JIvya3D+lF7B4E9OSsaqlZkZIt2lkne9aeBdSLr05e4tzhNaY2SNn38Xpzpq5/sSnkpF7jmAlvOiobQTGmtUJAtEssX3toGNwL3wkz96se4vlCs+T+pktiKMfbBFMlEMhRNWM488FCa1XTU7Pqeee9+3MbN3/+crYCf2s5TRFf8TP1uCMmwxCNfKkOoSeJbCcY/nGIjHAXoufHeT87JrcOjqV4QMgDIrcNBvTTq1/Gq93npG+/Q1HEEk8m4Da5mx8PUnwP4Lq+n33PWm2n6ug1ZgeDKGjPjHraiMYDe7kF+mXMukFuHn04NETqJ0Vc6fjBWZgn2yYqMq7EWV2MNsknOajYiFQ+bwTjRYByLVcJSIhEJRfDPLbLkXwUIAZ35Rrb0qTgjGL2JK9/3ZUxGZwC3bJJx1jgpLbdjKTRjL7NqcaEKopEo0cg9QoE1AgtBNsLpyegM0PdfTUY7jutPp2bDzofYHkrNhgOfeTbMMx13pizl1g8VoDUWYFQ/7T7s9R8R2ZduYFascgAAAABJRU5ErkJggg==", "[:|]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGpUlEQVRYw8WXbUyb1xXHf2BsjB8b7AQMARIchbcm6wLkxVuTFdCQWi3LRLVpWxqpsdRqcidNi6Z8nJQ00jRt1RY0qRrJl9B92GeysqpRPwSkZXRd4gGhKSEC7PJq8+a3x8Bj/Nx9eB6MzUtCtkm70tWRnufc+//fc8859xz4P4+cF13g66QKaAFcutwYfn0OAL1NXiL/UwK+Ti4Bl4GGPS7pArqavPT9VwR8nTTrm7lyjSaKDlZRVOnCJNko2Lc/SzcenGFleZF4cJboVGDjczdwuclL4IUJ/PZH5huBgPFyaN4AQEm5hR94j9H8Pdeua+SYwp/eH+Cf92ZIxJIA1NcpYVfVuuftPyp3tuobdtvoV28U3Pb9y+yVE7mcbC2n5uv78D+J0H93kvkZmVOtFZqiEFng19/pY/DvQez7zTSfP0RSURkbXTdPTuX9+O3Xc/yfDK0PZuLk7WL227//g8lTVVfElRtnKCmXAHgrpnD9nV76/hLg3fdOAQIEadl3x09gNMJbv3iZ71w4gtj43hOg8/oAQJevE5q8fLjrFfg6+TnQIVW/woGjNUg2ow6iAcnRJPMzMq7aom0EBILAkwhVtYXZ1hEC/2iE2NP7iNWlMNDS5GVwGwE9xAYch2vsh77ZDAjiEYXQVIzkWgpnhRVHsTkLcCsQgBxVmBgJp785yy04yy2klDVG731CMiH3Nnlp3YnAbaNk9dS93k5KNfDZp18xPZYdzvZiM+62So2I2E7Adz/I6NDStmutcFlxt5SiRBcYv38PwNPk5UPDltN3VTSeRtpfQm/3GHOBGFLRAeq/8SalrhMALM5O8tVomKrqQkymHB1cgBA8GVriiwcLGPOtNH77Zxw748FZdZLluScsBpeILivUfM1JfHGe5ErCdbOHm5lO6Mk1GnG4jjD+eJHQtIyjtJa2S7cwmW2aRjP037nK+GAPw5+HcLeWbfoAMPxgAYC2S7fIt5Th//IRrpde5WB9Cx/fvMB0YJZ4dI1i1xHkxfkGXyfHczMItBeVHwJVJTQVB+Dl5p8QXljG01jFD6sdfP7pXznx2hWM+VamJmKgqiBUbc20TFJRqaxrYV9ZHe+/e5H3Lp7n2sXvYjLbqHe/CcCUX6bQWUZuXh5AeyaBhsLySlBV5KgCQKnrJI//8TcSsSgAgS8fYTLbcJTVkVQ2wdMSkOwHtIfh8SN9zTAARt2KybUUqCrWfcUALbkZ6RZTgQWEimTVbibof8BR91lKKg5isRVyqu0cymqMUOChpqOqCH1aJM2dpkZ6tfv85a856j7DT3/zAQChwAPNiR15IFTM1kIAe1YiKrAVgapyuNbGxGiUh3d/R9ulW3zQN5TW6b9zVUvLZfkI/dQIgSTlUlKaz3xwlv47V3nl3BVavq+ZfeSzPzM+2IPRmENlRT6oKoY8A0BDdiYUKRDgLMvncI2ViaezfHzzAgfrW5Ds5YwPfIQcmcViNdB42pE2+0YYus84uPtRkPHBHiZHenGU1SGHZ5AjswCcfdWexjBLth1SsSrS6fP0t4oxGnMYfRxjfLAnrVJSms/Z1mJMeWh3n5EJJUsOr50rYXgohn88TijwUFvjNNLYZMVhz0OoWsiuxCJZBMIAsfkg1v3F6U0bTzk4dryQ8JKiAVgNSJJBA1RFOvwyE5FkycHttuF220DouVL/LzIIq8kkwEAuwEZeTibkbK8WKUx54HQacTqNSJac7Z6/ZQpVRYhNuZvuSjwK4M8Mw9744ryukNpUfhag2AVQ3Vk3U8rhMEBvJoHuaGiWVHJNM+9eANW9A2bO5eAsamodoDuTQJe6vs6Cf1zz1IzFQojdAcXeLJUpw6E59MI1kCagV7FdC5N+lERCBxQ6aOo/Atrx9KE55GgE4NpOz3ER4JeKHPbDDSeyQgwE4/0R5kbk7Hc24zHaOhrOOygoMqSjQFlbZWx4EDWV6m7y8sa2PNDkJeLrxCNHlrunRr6gsuYlfXOdhFBZ9K/uqSbPy89BSaxTYNOe7FRqncnREdRUKgx4nlkV+zq5ClyzO8uorK7LLr12qIDE1sJkS6mmrK0yOfaU1ZVEVjn2zLLc18kN4LLZIlFRXUuBRdozYKaMhpeZDkxsnDwL/Ll9gd4NdQB2e7GTkopKTKb8ZwJuAodZnA+SiMfQ2zXPVvC9dkZVOol2AHOBBZvdgdliwWAwZF2NsrZGIh5DjsdIKspGiu8AOnbrFV+kNzyu94btgP056n69net4XpP6wt1xBpkGvUPOHAPAwG594E7j38O7AhDEtOj4AAAAAElFTkSuQmCC", "[(a)]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAHAElEQVRYw6WXbUyb1xWAH3+8BgPBNqSYhO8GyELDoF2afixdaJt0U7uxbFomdftRV9M0TZMyfnRaJ4GSKOzP1GmpJk3rJm1USlupUitCpzVVuwzUZlG2KIER4oZADIQPYxx/Bhu/9nvvfvi1MeAkpLt/fP2+59zznHPPOe+9Br7gSAZPtAH2dY+HFUdP+H7WMdynQRfQAbTfRXQKGAQGFUfPm/83QDJ44tvASaA+rWHHaKoGowMDyhpZKXxIEUQKH5AECOm6J+8UGcNdDNuA/rTHCkbzTgymBgzGEli8CuE5WHSvKtiqwFYNzl1QWIpI3UBqHh2GKcClOHqGNgWgh3sQsBtMzRiVVgwzl2H0PRj/GBLRu4etYhc86oLmgwizH5G8lImIa/22GPIYrwOGQbEbLY9j9Efgk1/DzIWMSEiHG9Y9m9KTsV3fpo7sdhVsgW/+Btn4BJr6KcjQBoh8AJeBdpPlGQxjn8EnvRmPh4GThuPcM7HkUdqALj1pofW7yBd60RL/ABkKAe2Ko2d6A0AyeOIloM9o3o0xYIK/dGZedRmO83qu7EC3pS7raU4Zdvaq4RyQ/Xoe2dnjQj77M7TEGYB+xdHznXwAlzEUt5sLO+EP+9OJBq6M17rRLuBQHuNZCKAP6OvsVcN6NAYBOz8dRCuaRWoegHrF0TO9HkAaTM2YFlLw9g8BBg3HeXqg22IDjgFd1tJinM21VDbVYrWVUGQrASC8GCDiCxCY8eK9PkMqkQwBxzp71dflUV4C+tjjQj7zYzT1bDYXzDnG9wMYTE6YeT/zuE/3ut9coLS3PLuXmtbGvG7bnGXYnGXUtDbSsqLiuXjVfv3cyMmBbks7qF0A+Nzp9dOjHsC8sS5Xm4tPGuzAcGmFw/74i99AKbQAEPTFmJ0MAdDQUk6JrSCrE/TFGD0/TzJhRdnWirow5vpAs/Atk5oX3JiZZJqEFL50MwHcwnTS2VRjf+rlzqzxxZtRzpxyc+1SlCvnFzhzys3tcAIAdSXFpwOTTLkDJLUmbvklyeJGzAWK64owga0KKYK5LXsVIJNAQvNA80GuWewkS7fQ9vy+NQKXBm8SDiT4+P2bHHSdAqxcOT8PQuAZ87McUfnsowU81y187fuvsaJa2NnxJB5pwl/zBFKbzSw1mA+gD7nMbf9ZxuMx2l7Yl/U842FoKc7nI0HCt4IsLdziy/t/wuxkGIQg6Ivh98aJBFVikTA1X3oapaCEaNRI02MtjI+8i0hdQ/9QTecHgKmbI+9SVuOkvLZSL2gJUhL0xQCo2vEQjx54noce24ejsplkQkMKjeWISkXtLg4f+SWHj7wKQIl9O0hJfVsjYe9VIr6b6BXFBgD9i3VobmyEhj270oaFAClACBzl6WT7wSu/4hd/fCuddN5xFIsRhKBiexFWa4LDR16lvqUVdSVKcHGc4hITimLE2bCN/354uj/3o7Q+Anz42xOheCRM5Y5qEFoaQBNIoaEoYN9ayOjQn1BXoqgrUT6/8DbVDVtACKrqilgOL3Dxo9e4HZrn/OljKBYjVbVW0ATOeidRv29NAzPnqYz6suoKpNDWhD8zf+SrTs6eHufvb7yIuhIFGWP3V+pAaDjKLOx+xMGVC+9w7cI7AOx9aiuKGaQQlFU6WH+YyQsApD1HgtQh9HnFtkK+/r065jxRkBYamsspLjbqWyXZ/bCDqlorakJQXGKiuNicfacopg3G8gNk937VcPo3HQmHQ8Fhd2TfyYysLme3m1ejlxtJ5KYAhkFXXGc4F0hm5zLvVuWL3mYBQvFILCcC6UXkhgXvYTgjkzOPBKJ3bsWZ0dmrDsWjMWLh20iRzn6ZqQahrVZG9v+d5un/aX2BFILIrUi2A94RQB/9izfm1y6qaYRnlxl4ZYTJId9dDUshkJpg9G9ehn4/lX0+N+lFP6DcG2Bq1LPWgBQU2cyYC42MfbDAuTdu4J+IZmUyXkohCM/F+c9bc3j+FUIpNIAQxKNxAr7wBoA7HssHui2exvYd9U0PP7hmL8PzK5z78zSpFQGA1W7Gtq2A0soCIt4E4YUE8VAqnWAFRg50VaMUGvj32TECS5G+zl715c1EAMA1MTxJxB9e42WpU+HJH1VTXm8FIB5K4XUvM/7PAF73ctZ4eV0BB36+HcUCE6MzBJYiIf04t/mb0UC35Xdmxdy197l2Su3FG7Lf74njdS8T8SayOqVOC5U7rWytKwAkc1NLjF70AHR09qpD9wWgQ/zVrJhcja111O/cvqmyk0hSaooJ9zzTE4sArs5e9c0vfDkd6LYcBY6VPVBKXfM2nFWODTUudaCkmsK3EGLCPc9KTA0Bh/J5ft+344FuS5t+0ewwKybKHthCqa1otbdJScAfJei/nXu26Mq9J+Qb/wMAm7zakoALewAAAABJRU5ErkJggg==", "[8o|]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAHV0lEQVRYw9WXa2xUxxXHf3vv7t31vtfr1xobP/ALYoq9QAyl1A5J2kaChhahtEYJNFKJ1DYqkVq1VT7UTVopqhoVEjUKqdTChxopIa3JqyK01FYhMQWMa552CV6/jXe93l3v2757+2F3ba8xTh3lS0caXd2Z/5zzn3POzJwD/++tq5XGrlY2fNb1qhUq2wAcAJqAuiUgPqA91duczQx8LgS6WnkcaEkrFdQSWRY7WWY7okYCIB6eJh4JEpocW7j0GNCyHBHVpyi2pITsFtQS2cVVZBdXkWWxL0vYP+bCO9xHYHxOb4uzmV+siEDK3O2ANb/KSW55LaJGuyL/RvyTjFz/OG2VNuCAsxn/Qoy41MKf7Nv+89GJ7NcHRnKtaksNBRWVWGy6FQeYRqdnfNJBz78Frt3Kq7lxe/W3Hly7xnX+6mDvfS3Q1UrJxasV3XcGHdaF41a7hod35rBxq+XTdx6W+ejsFOf/7iUaScwTUs9Svnq87ekX+7+xHIF/CGqpqbrxm4QiOnp7Apz/2wSTk0moo0jLnv0OCouXtsiN7mlOHh8jGkkgCAqFhSJNOx2sqzPhHepjqLsD4JCzmSP3uKCrlf3AoRLnDgzZ+USDMW52DqITo5RXliNqcxkecNNzKYDRor6HxMnjY5xuc6OWDKxdX81qRwyNMokyE6NojRWjPZdIYJJY0L/lmT28fvRtYhkEntlDm7mgxFpQvRGAMyduEY9J7Nj3Kpu+8iybH9qNY3UFN7oucPWSF0eRltyCZGC+9+Zd/vVPH47VFTz13K/Y9tiTrNvajKQ1cftKB/KsQmGZBXNeER7XTZ2SkKNH36ZDWHTWS1c9sBWAO9c9hAJxGp94mRuX+9hbYWNvhY2JgSEOPn+EsqrMo5ilF1lXv5aDzx/hL7/7LXsrbOyvL0FrXk91w7fpuzJBPDqLqNGSW14LcAhAWCBjt86cjaQ3ARAKxAHIL93EsV/+bA701isvUVhSyXd/vI11daa58Yd35vDkszsZH3DR/ucTAISnA7z1yksUVzcBMOWOAJBdXAVg7Wrl8QwCqYllm8FsWdG8wWwhHp1O/SmgKEhZRnTmbIAmMX30gJ/mVWxAyjICIGnV3O7xIGlNfHHX01y/cA6D2cKhw39AkX0I8mlEYRYUZa6H/DEkw0ZsuUX0dV+ksn4T3//1a1w/93si04M8uKNoDhsL+gn73FF1ilopQJbJBonkubXZteStMnD5w5dZ33iQw6fPA3DrQisfnXyD2oZ81jfkZ+y284MPmfKcYeNXf8TxKwMEfaNc+usLDPe2U7/dgSLL8zegqAGoU6WfVKD9C1/bnyEwHpO5cGaIkf7pjPFVZSYaHilCkoSM8SlPlHMfDBKanskYr92cQ+3mvHk3AO6BW4z1XUadgUzI6fmkG9Sw/bFiQoE4E6MhUCBvlQGDSTOPX9BsNg279q1hYjTElCeGwaQhr1CPpBUWyU65DTIJyLEoolqTGVUKGAwiZZWmTKJz88o9gZhXoCOvQDevSJZZLDQxEwVwpQm40q+X0ZabYYX+vgDXLnuJxxMUlRqo35Jzj+kXmhYFprxxrnV5mRiLYrNL1DfYsdqlDNjsTBzAJQCkEgZfZNoLcgISMkpCJuiPcaFjgpiSg7HmKUbc+Zx9b4R4dAYlhVESMoo83++Ohjn7/iiKdjNldU8w5VXT1elJWkGWk9ZLyIR8boDuhS5omxp3HchxlM+x7O8LAFD46GE0RgfWmr2Mnvkh7775CXkFOqzZUoYrRoYi+Lwz1H75IOsbDyKoVGQXVNP5Tsu82xSIx8JEQ36A9gwC0ZD/QCTgJcuQukyU5JHUGB2IKtDpTVTtfBV39x8Jev9D2KNCBahUIKjAmGum5ktNrKnbNSfUaHUAMDEaIS8/Sdgz+gmAz9nMqTkCzmZOdbXiGuu/Wlq+bmsq2JKm0KlVaNQqNKKAJFqwP/QckqhCI6qSX7WAKICgun+GZ9CrIJFAnp1hyjMMcHjxWwDQEpr24p8cBVnGak09lsE7GCSRi0e3cfOdH2CQBC6f/B7v/6YBnSRw89wbnHhxE3ddl7jrusSfXthIT8dRAIZ629FoVOh1oMgyQ/09JORZ35IEnM0cB9qH+68SDvpY5VCj1wuMfHwEgzYJFQQwaEVEIbnb5XYd9I1yp/tdqiq1kJDx3HUx7XenExL//TIiC+ASRLW1bI2T6aCO9o4gBZWNbPl6C1l607JK08073kvnqRaU6G2atusJhSYYGb4FcMzZzHeWzYrTGbEgqK0lJQ8Qihg53xkBwUhxTRMGa+GyyqfG+xjubSfXLrCtQYfPN8iEexCg29lM/UrS8jag1J5diNVazB2XQv+gTDiiLEvAYlZRVS6Saw/h9gwRCgfSRcqhxWn5/16YCCJmUzZ2mwOd1pBx82Vc5/IsgdAUPr+bcCSQLtda0knoZy3NGlOlWVMyEEV0Wj2SWosmVayEIgESskw0Hv78SrP7uGV3ikjTEhAX0J1yXdticy/V/guZmfm4g9jawAAAAABJRU5ErkJggg==", "[8-|]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGu0lEQVRYw8WXbVCU1xXHf8/uAsLCPogGNVVAW2MCgtuSaiRqSTvj6OhMcKZqaIk61mqVzoRxakylM5IPTdrGaelUM0n7oaZFncamXUOIph8a2kDLmIluQMSKjrwkVgRln13d9+eefth1YXkxZMxMz8zdfe49597zP+eee+858H8m7fNO8HWtyAfKgQLACWQDHhHciPQAbkdR68dfKABf1wod2AbUxBXHSECQ2KfEfmL/9IjIUaB++pJ/Gw8EwNe14jmgLm4pWkY6ltRUtGlp42RVJIryB4j6/EjURMAjirqZpW2//twA4la7gHIsGlaHA4sjC81qmZJrIx4foZu3UeEoItKMUJG79KwxJQBx5c2AU8tIxzZzxpQVj6XQkIfAp4OI0INQMXv5hx9/5n77Lq443/oXp6z7Vo7oekpsVx+grXhiurx1ZJFcb3382vXWUn20PttYAKLEdcx107m7thuAlU/OGwfSYwTpuDA4brx48UNk69PGjX/Q2k9L2zC/OpBfsHHtDBfw1ITWGxfKtr6wZ14CefUPviZ3b/9owpY3zyGrVuZKKFApq1bmCjCp7IH9ZYk1N67Jkb7mrz53T2diYz3tZfrWvf+p/9mr/eh6CgB63Jqd1aex5xzCnnOIxqbu0f5CTBVfO0aNTd08XPAb7DmH2Fl9OsnAvLwMTp65ze6D1+oAPQlAdsm/6l1/u5X9wz0LefPEk4lJvX0Gx050JvpHXjsHQF+/FxEQU8XO/ii+4Q0BcOxEJ+0dNxO83x35OrX7H6PpH57s+AkbAeDItG5rOFzEKz8tQc+MhYZhBNH15POe1BdBTJNsh21i/pi+KJPafY/ydkMpWXZLObDEBjD00bJ8gJTpDsRUlBRmoTtSaGy6woH9Zbx+eA0NJzrR9TRq95fxz5Z+AEqKHEhUUVyk0/juf2k4foFfvPRUHHyIqsoi8vN0Go5fiAXpYw7ENClfNYvzfy5CBI8lHvlOpQRLSgpimkjUpHrnAvr6vTxTdYqS4lzONG7mTw0VtHfc5JkqFwDVO+aDaVK18UvoDhvPH3ifD1r6ef3IGs40bqakOJfNVS76+r3s2TEf3W5BogqL1YJmsyJKlWsAA2eXHkSkzj53VpL7dtW4OXbyk3GnRXfY+HldIVWb5iXehPZOg7Wb2jC80XHy61fn8tovl6A7UhIBO3RlgNCdUJ0GcKPt8YOaxVqXMXvGyCsTp/ZOL++8N0D7RS/5c9PJm5tO1ca56A7baLHYSfJGeOe9ATou+uj9JEBJYRbrV8+ipDAreVUB34CBd8A4agNQJlitGmKaY/VTvCiT4kX2MbcVSFSNvcLQ7Ra+u2EObJiTzDEVYxGIUihFgS0eA5gRE0wVF5IJL6qJWTKJ4KQrxF5OUxAl7pgHlICKJl8qMoWXRuT+uifvEPQFUUo89zzgFgQzHMEy9tWT+1vy2WBlQn4kFEWU9FjihjSLEiL+cGwbTBW74UyFKMULL3fz6ht98TFzhDdKRpQaN168ug2PJzzCj8tEghEiwVieYAHI/+Z5Q0xxhwLhxOR7QPbUXqLlrIfd33k4Fq2jeNwXiMm68hzWb++g/aIvSeauEUCUuJ2V3b0Jfysl9eFghHAwnFhk5aZzGN4IfdeDMUtGK1HJQEeaCcqko+sOx9++SeX6mVTtvUTT34cSILxDflQsZ0zOiLrfXXzNZrMWOKanJwXas/su03HZT8Mrj7D4kYz7hETso+Wcj2f3XaZy3Uxe2pufFAPDt/x4hgIeTaOgdMtVIynilJKacChKwBcaZY3i8E/mo2da+EZVB9UvXqXp/VsTuN6kqfk21S9e5endXeTNSeX57XOSvBYKhBke9CNKakq3XDUmzAkvnSr8q4hUOBxppKVZR5IVn8mWH1+h9fydxNjihenomTYMX5QLVwKJ8TJnJn98eQGOTNto4/i0z0s0olxLt1/bMGlS2uUq1JWSZg2cWZkpTJtmTeKfOH2L354cTFKYAPSVdHZ++yEq1+YkbU8kqhi44SccirpBK1/2vWvGfbPizrce1ZWSZgSn3W4jM2Nc6kj/jRB9N8IJJXmzU5k3O3Wc3N27UQYHAyhT3JpG+bIdPcaU6oKONxfpSslRRCosFo0su42MdOukN+BYCgRNhofDBIMmIuLSNG3bE9/vmVpdMJrcxxc+LSL1IhRoQEa6lbRUjRSbBZtVS9rjcEQRCJr4/SahkAnQg1CzfFfvqQcuTj/6w5e3ikiNCM5ETShjakIStaFboL5sV+8bX3h1/OHvF+gi4hShfEQxiAgIbqB5+a5eY6rr/Q9wWxT23+mHPwAAAABJRU5ErkJggg==", "[+o(]":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAH8klEQVRYw8WXW2wc5RXHf3Pdi73e9d2OY8dNQuykpDYEGuoEMFRVJQQiRaISVKipKkF4qfLQSlSqhJH61FYqPFSVKlRcVZS2pMVqVJAIVVcoqIIkYCB2Stw4XpO4vsXe9V5mdmfmO32YzdohCVFbqo70Pcx8l/M///M/Z84H/+dH+282Zz8c2iJKekUAmGka/FvmfwpgbXLfgAgHERkWYVCUIAIigoiAgChJKyGNyGj73hOZzwRAfnL/g4I8K0JvKe/z7tt5lhcqLC96PP70LgRABL/g4JfKKD8AEURIP/PdzNjyggcwduRcNvNvAcif2Z8UYRSRA8VCwLE/XeLY0Us4RVVb8+LEfVft80tl3MVVyss5vvPNcxunngVGjpzL5m4IIH9m/4CIpEVIjb/r8vyPz9cM3/lgF7u+2MzO25to7Ypf14Gg7DH+eoaTb8zzzlsFXEcBjB85l73lUwGsTe4fQCSNrqd++bN5jr+2BMCee9t57Kmdn2r0Wo+zmGXmxAV+8/wC02fL2SPnso3XBbA2uS8pwgyalvrdr1d4/fdzxBMmjz21i7sObAagmPMo5jxSbRHsqHFDAIuzJWwjwMlcIPCC8W1f/aDGgPnJxaIYQ9dSdlcHl5aXiCdMfjB6B1v6GwAY/8sCUydXAbAiOoNfbqd3d/Laabrgkn5pFq8chq65VWdrjz849erNT9903+lnrmIg++HQg8CY3dmGUR+nuOZRyns1yieOLzP51jJ1yU429w8zPX4Ur1zg7kd6aOvZEBYRijmPY6MzeGVF395HWJ0/y2LmFC3NAVt7A0Skt++BicwVDIjwrB6LYNSHh9U1WNQ1WLX5qZMr1CU7ue+Jl7CjCbYOPMBrv3iUqZMrtHXHaumICGdPrOCVFXd9/Sd0998DwLFfPc5i5hSbOgJsS0aAb+mXD199/0t3i5Jeqzl13Th6ZUX/3kexowkAmjr62Nw3zNxUAQkU4gfVoVj6uERj+46acYD+vY8AUKhEEZGDk6/sTOrr3stBzbYw4rHrSCmst40dO674evl93Xg4ckuVq9a2994WCi8WRSlBlBzQN4hv2IhHr7QngihBlAIltaniWo7vPXAnD29v5M8v/PwTAEImACpugRd++H0e3t7Ijw59g9XFC2Hq6RqRuihKyYGaBpSSXj0erdZ0WQdQfTerKz/+KM30R28wc+Y0AMmUj2WbSFAtvyrc19Jpc/bUMV7/48cAnHjjVWLRVZqaoCGpYxs2pWypVwdYOrF3QKq/tE9SeXkkG03iCYPp8aNUSgsA9GyrJ9kUoXNLdN37IECCgI5um3i9xe7bmsOUtXSi9gVMS6O5xcCKmIiSQRNAiaQQwbDtkD5ZV/NGRm4dbuL40SU03uSe+7tINkUwbY2+wTrEV1es37ojwuxZh227knT2xLFsHcs26NmpsabyuF4ZJdVCJKpqbP0vVgOwXFhlxVmjWHHwJaDtDpOViQhJInR02/QP1BGLsmHveviG7q3n9Lsl5i+ClQio256n3OQz64DhQZ0yqgBEsqLAyzuYMRsRIQh8zizNkPMdKgYERniu3hbQ0FImgcVN9Z3EdS30nnWmarrRYXBPlMKtOh/6C7iawhOI+BD3dETJeiW8eHyPxNsaseIRRISJpWlWxMUxhbIBvg6igaHAVhD1NRKBwUBdNwZayNo1QPiiOO4sUPp7hKA+QN3sEPOg66JJdEHGzfU0lHGv6A6atslCcYWscnEsoWiBawqVKgOmQMTXUJrgno7w1/k83b0Wn9tm1TJlI4iLToliuh48nfwtRcpRIaFDdwFEMb4xDdOVgjMYTcRYcnNUDHBNcCyhZIFrCKKBFUCggS4a0TaPYNnk7KQwf9Hntj0W7iUv1AIQbdD551QIdu6hVVY7PGKeRqKsY64pBNIbGGDUD4LD5YJLISjjm+DpUNHBMUMmAk2I+Rq6gG0I0a4KyRaP1GyK6Q/gzZeyWIvOFdVPbavHuauC1+SHtVSD1FyoO9DGapVwy73vvS8iaSdbBK0qZA2UFnrs6ULZDLWgtHBOqgWzq0snkdAw2pq4f/R9Hnr5PA+9fJ7O27+CzLuYMUV9RaPJ1UgVNTZlNEQxtvfb53P6lb2AjHhlHyvQ0QV0AUPAqoou7mnYQagDXYXzGmAHoQDjrZux6xpq58VbwwYmMhuh0dVoKWlsndbQK5IVYeSaHdE/Xtv907IeHJ5pKbEWEQq2UDKhbIZxtZRGzIe4p5GoaDSVDTYtJnnnFBjLLim/kXjrZrzSGrmZM5g9UfLJOFa/Q6yxTOtMgAiHh57IPHdNAFOv7k6KUmnXVIPn2x0KtuCaYQgup2EkCEHY8xbGTIzcnIVpCF/YXKG44FPNSaIJjfY+i4nzOhfnTKK2x6bG3NjQodmvfWpT+tHRzydFSdo11eBca5l8TOFXg6VLSHk00Ci/naC0aLGpTdG3NcAypJaFYR6GL6tZj4U1HykzbpvB8NCh2Ru35WfGdiVFSVpEBldSHmvJAGWEACKBxibXpqVir5fuywY3GHZcxWquguMEiDAGHNz35LrxG15MJv7QnxQlI0o4rDTBiyvqDINmw7raYNX1QAmlUkC+GOC4QZhuwsi+J2ef+4+vZh/8dseAEhkR4QDV+6BpgKZV6a5+C5RQqaiwiQmZGQVG9j05m/lMLqfvvbh9iygOiMiwKBkUoffyxVQUiMgMwniV7rGhQ5ncjc78F8xwpwCzYja+AAAAAElFTkSuQmCC", "[ 0) { var u = fileItems.item(0); uri.url = window.URL.createObjectURL(u); uri.filename = u.name || ''; } } else { // IE var u = document.getElementById(fileInputId).value; uri.url = u; var pos1 = u.lastIndexOf('/'); var pos2 = u.lastIndexOf('\\'); var pos = Math.max(pos1, pos2) if (pos < 0) uri.filename = u; else uri.filename = u.substring(pos + 1); } var index = uri.filename.lastIndexOf("."); if (index != -1) { uri.filetype = uri.filename.substring(index+1).toLowerCase(); } return uri; }; var isIe = false; if (!!window.ActiveXObject || "ActiveXObject" in window) { isIe = true; } var getFileSizeFn = function(fileInputId){ var file = document.getElementById(fileInputId) var fileSize = 0; if(file){ if(file.files){ if(file.files.length>0){ fileSize = file.files[0].size; } } else if(isIe){ file.select(); var fileobject = new ActiveXObject ("Scripting.FileSystemObject"); var file = fileobject.GetFile (file.value); fileSize = file.Size; } } return fileSize; }; var hasFormData = (typeof FormData != 'undefined'); var isCanUploadFile = (hasSetRequestHeader && hasFormData); var uploadFn = function(options) { options = options || {}; options.onFileUploadProgress = options.onFileUploadProgress || emptyFn; options.onFileUploadComplete = options.onFileUploadComplete || emptyFn; options.onFileUploadError = options.onFileUploadError || emptyFn; options.onFileUploadCanceled = options.onFileUploadCanceled || emptyFn; if (!isCanUploadFile) { options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_BROWSER_ERROR, msg : '当前浏览器不支持异步上传文件,请换用其他浏览器' }); return; } var acc = options.accessToken; if (!acc) { options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_NO_LOGIN, msg : '用户未登录到usergrid服务器,无法使用文件上传功能' }); return; } orgName = options.orgName || ''; appName = options.appName || ''; appKey = options.appKey || ''; if(!orgName && !appName && appKey){ var devInfos = appKey.split('#'); if(devInfos.length==2){ orgName = devInfos[0]; appName = devInfos[1]; } } if(!orgName && !appName){ options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_ERROR, msg : '没有指定开发者信息' }); return; } var fileSize = getFileSizeFn(options.fileInputId); if(fileSize > 10485760){ options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_ERROR, msg : '上传文件超过服务器大小限制(10M)' }); return ; }else if(fileSize <= 0){ options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_ERROR, msg : '上传文件大小为0' }); return ; } var apiUrl = options.apiUrl || 'http://a1.easemob.com'; var uploadUrl = apiUrl + "/" + orgName + '/' + appName + '/chatfiles'; var xhr = xmlrequest(); var onError = function(e) { options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_ERROR, msg : '上传文件失败', e : e, xhr : xhr }); } if(xhr.upload){ xhr.upload.addEventListener("progress",options.onFileUploadProgress, false); } if(xhr.addEventListener){ xhr.addEventListener("abort", options.onFileUploadCanceled, false); xhr.addEventListener("load", function(e) { try{ var json = $.parseJSON(xhr.responseText); options.onFileUploadComplete(json); } catch(e){ options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_ERROR, msg : '上传文件失败,服务端返回值值不正确', e : e, data : xhr.responseText, xhr : xhr }); } }, false); xhr.addEventListener("error", onError, false); } else if(xhr.onreadystatechange){ xhr.onreadystatechange = function (){ if( xhr.readyState === 4){ if (ajax.status == 200) { try{ var json = $.parseJSON(xhr.responseText); options.onFileUploadComplete(json); } catch(e){ options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_ERROR, msg : '上传文件失败,服务端返回值不正确', e : e, data : xhr.responseText, xhr : xhr }); } } else { options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_ERROR, msg : '上传文件失败,服务端返回异常', data : xhr.responseText, xhr : xhr }); } } else { xhr.abort(); options.onFileUploadCanceled(); } } } xhr.open("POST", uploadUrl); xhr.setRequestHeader('restrict-access', 'true'); xhr.setRequestHeader('Authorization', 'Bearer ' + acc); var localFile = ''; var fileInput = document.getElementById(options.fileInputId); var localFile = null; if ("files" in fileInput) { localFile = fileInput.files[0]; } else { localFile = fileInput.value; } var formData = new FormData(); formData.append("file", localFile); xhr.send(formData); }; var hasBlob = (typeof Blob != 'undefined'); var isCanDownLoadFile = (hasSetRequestHeader && (hasBlob || hasOverrideMimeType)); var downloadFn = function(options){ options.onFileDownloadComplete = options.onFileDownloadComplete || emptyFn; options.onFileDownloadError = options.onFileDownloadError || emptyFn; if (!isCanDownLoadFile) { options.onFileDownloadError({ type : EASEMOB_IM_DOWNLOADFILE_BROWSER_ERROR, msg : '当前浏览器不支持异步下载文件,请换用其他浏览器' }); return; } var accessToken = options.accessToken || ''; if (!accessToken) { options.onFileDownloadError({ type : EASEMOB_IM_DOWNLOADFILE_NO_LOGIN, msg : '用户未登录到usergrid服务器,无法使用文件下载功能' }); return; } var onError = function(e) { options.onFileDownloadError({ type : EASEMOB_IM_DOWNLOADFILE_ERROR, msg : '下载文件失败', xhr : xhr, e : e }); } var xhr = xmlrequest(); if("addEventListener" in xhr){ xhr.addEventListener("load", function(e) { options.onFileDownloadComplete(xhr.response,xhr); }, false); xhr.addEventListener("error", onError, false); } else if("onreadystatechange" in xhr){ xhr.onreadystatechange = function (){ if( xhr.readyState === 4){ if (ajax.status == 200) { options.onFileDownloadComplete(xhr.response,xhr); } else { options.onFileDownloadError({ type : EASEMOB_IM_DOWNLOADFILE_ERROR, msg : '下载文件失败,服务端返回异常', xhr : xhr }); } } else { xhr.abort(); options.onFileDownloadError({ type : EASEMOB_IM_DOWNLOADFILE_ERROR, msg : '错误的下载状态,退出下载', xhr : xhr }); } } } var method = options.method || 'GET'; var resType = options.responseType || 'blob'; var mimeType = options.mimeType || "text/plain; charset=x-user-defined"; xhr.open(method, options.url); if(typeof Blob != 'undefined'){ xhr.responseType = resType; } else { xhr.overrideMimeType(mimeType); } var innerHeaer = { 'X-Requested-With' : 'XMLHttpRequest', 'Accept' : 'application/octet-stream', 'share-secret' : options.secret, 'Authorization' : 'Bearer ' + accessToken }; var headers = options.headers || {}; for(var key in headers){ innerHeaer[key] = headers[key]; } for(var key in innerHeaer){ if(innerHeaer[key]){ xhr.setRequestHeader(key, innerHeaer[key]); } } xhr.send(null); }; var parseNameFromJidFn = function(jid,domain){ domain = domain || ""; var tempstr = jid; var findex = tempstr.indexOf("_"); if(findex!=-1){ tempstr = tempstr.substring(findex+1); } var atindex = tempstr.indexOf("@" + domain); if(atindex!=-1){ tempstr = tempstr.substring(0,atindex); } return tempstr; }; var parseTextMessageFn = function(message){ var receiveMsg = message; var emessage = []; var expr = /\[[^[\]]{2,3}\]/mg; var emotions = receiveMsg.match(expr); if (!emotions || emotions.length < 1){ return {"isemotion":false,"body":[{"type" : "txt","data":message}]}; } var isemotion = false; for (var i = 0; i < emotions.length; i++) { var tmsg = receiveMsg.substring(0,receiveMsg.indexOf(emotions[i])); if (tmsg) { emessage.push({ "type" : "txt", "data" : tmsg }); } var emotion = emotionPicData[emotions[i]]; if (emotion) { isemotion = true; emessage.push({ "type" : "emotion", "data" : emotion }); } else { emessage.push({ "type" : "txt", "data" : emotions[i] }); } var restMsgIndex = receiveMsg.indexOf(emotions[i]) + emotions[i].length; receiveMsg = receiveMsg.substring(restMsgIndex); } if (receiveMsg) { emessage.push({ "type" : "txt", "data" : receiveMsg }); } if(isemotion){ return {"isemotion":isemotion,"body":emessage}; } return {"isemotion":false,"body":[{"type" : "txt","data":message}]}; } var parseResponseMessageFn = function(msginfo){ var parseMsgData = {errorMsg:true,data:[]}; var msgBodies = msginfo.getElementsByTagName("body"); if(msgBodies){ for (var i=0;i0){ var childNode = msgBody.childNodes[0]; if(childNode.nodeType==Strophe.ElementType.TEXT){ var jsondata = childNode.wholeText ||childNode.nodeValue; jsondata = jsondata.replace('\n','
    '); try{ var data = eval("("+jsondata+")"); parseMsgData.errorMsg = false; parseMsgData.data = [data]; }catch(e){ } } } } var delayTags = msginfo.getElementsByTagName("delay"); if(delayTags && delayTags.length>0){ var delayTag = delayTags[0]; var delayMsgTime = delayTag.getAttribute("stamp"); if(delayMsgTime){ parseMsgData.delayTimeStamp = delayMsgTime; } } } else { var childrens = msginfo.childNodes; if(childrens&&childrens.length>0){ var child = msginfo.childNodes[0]; if(child.nodeType==Strophe.ElementType.TEXT){ try{ var data = eval("("+child.nodeValue+")"); parseMsgData.errorMsg = false; parseMsgData.data = [data]; } catch(e){ } } } } return parseMsgData; }; var parseFriendFn = function(queryTag){ var rouster = []; var items = queryTag.getElementsByTagName("item"); if(items){ for(var i=0;i 0 && receiveinfo[0].namespaceURI == "urn:xmpp:receipts"){ msgtype = 'received'; }else{ var inviteinfo = msginfo.getElementsByTagName("invite"); if(inviteinfo && inviteinfo.length > 0){ msgtype = 'invite'; } } return msgtype; }; var login2ImCallback = function (status,msg,conn){ if (status == Strophe.Status.CONNFAIL){ conn.onError({ type : EASEMOB_IM_CONNCTION_SERVER_CLOSE_ERROR, msg : msg }); } else if ((status == Strophe.Status.ATTACHED) || (status == Strophe.Status.CONNECTED)){ var handleMessage = function(msginfo){ var type = parseMessageType(msginfo); if('received' == type){ conn.handleReceivedMessage(msginfo); return true; }else if('invite' == type){ conn.handleInviteMessage(msginfo); return true; }else{ conn.handleMessage(msginfo); return true; } }; var handlePresence = function(msginfo){ conn.handlePresence(msginfo); return true; }; var handlePing = function(msginfo){ conn.handlePing(msginfo); return true; }; var handleIq = function(msginfo){ conn.handleIq(msginfo); return true; }; conn.addHandler(handleMessage, null, 'message', null, null, null); conn.addHandler(handlePresence, null, 'presence', null, null, null); conn.addHandler(handlePing, "urn:xmpp:ping", 'iq', "get", null, null); conn.addHandler(handleIq, "jabber:iq:roster", 'iq', "set", null, null); conn.context.status = STATUS_OPENED; var supportRecMessage = [ EASEMOB_IM_MESSAGE_REC_TEXT, EASEMOB_IM_MESSAGE_REC_EMOTION ]; if (isCanDownLoadFile) { supportRecMessage.push(EASEMOB_IM_MESSAGE_REC_PHOTO); supportRecMessage.push(EASEMOB_IM_MESSAGE_REC_AUDIO_FILE); } var supportSedMessage = [ EASEMOB_IM_MESSAGE_SED_TEXT ]; if (isCanUploadFile) { supportSedMessage.push(EASEMOB_IM_MESSAGE_REC_PHOTO); supportSedMessage.push(EASEMOB_IM_MESSAGE_REC_AUDIO_FILE); } conn.onOpened({ canReceive : supportRecMessage, canSend : supportSedMessage, accessToken : conn.context.accessToken }); } else if (status == Strophe.Status.DISCONNECTING) { if(conn.isOpened()){// 不是主动关闭 conn.context.status = STATUS_CLOSING; conn.onError({ type : EASEMOB_IM_CONNCTION_SERVER_CLOSE_ERROR, msg : msg }); } } else if (status == Strophe.Status.DISCONNECTED) { conn.context.status = STATUS_CLOSED; conn.clear(); conn.onClosed(); } else if (status == Strophe.Status.AUTHFAIL){ conn.onError({ type : EASEMOB_IM_CONNCTION_AUTH_ERROR, msg : '登录失败,请输入正确的用户名和密码' }); conn.clear(); } else if(status == Strophe.Status.ERROR){ conn.onError({ type : EASEMOB_IM_CONNCTION_SERVER_ERROR, msg : msg || '服务器异常' }); } }; var getJid = function(options,conn){ var jid = options.toJid || ''; if(jid==''){ var appKey = conn.context.appKey || ''; var toJid = appKey + "_" + options.to + "@" + conn.domain; if(options.resource){ toJid = toJid + "/" + options.resource; } jid = toJid; } return jid; }; tempIndex = 0; var STATUS_INIT = tempIndex++; var STATUS_DOLOGIN_USERGRID = tempIndex++; var STATUS_DOLOGIN_IM = tempIndex++; var STATUS_OPENED = tempIndex++; var STATUS_CLOSING = tempIndex++; var STATUS_CLOSED = tempIndex++; var connection = function() { } connection.prototype.init = function(options) { var prefix = options.https ? 'https' : 'http'; this.url = options.url || prefix + '://im-api.easemob.com/http-bind/'; this.https = options.https || false; this.wait = options.wait || 60; this.hold = options.hold || 1; if(options.route){ this.route = options.route; } this.domain = options.domain || "easemob.com"; this.inactivity = options.inactivity || 60; this.maxRetries = options.maxRetries || 5; this.pollingTime = options.pollingTime || 800; this.stropheConn = false; this.onOpened = options.onOpened || emptyFn; this.onClosed = options.onClosed || emptyFn; this.onTextMessage = options.onTextMessage || emptyFn; this.onEmotionMessage = options.onEmotionMessage || emptyFn; this.onPictureMessage = options.onPictureMessage || emptyFn; this.onAudioMessage = options.onAudioMessage || emptyFn; this.onVideoMessage = options.onVideoMessage || emptyFn; this.onFileMessage = options.onFileMessage || emptyFn; this.onLocationMessage = options.onLocationMessage || emptyFn; this.onCmdMessage = options.onCmdMessage || emptyFn; this.onPresence = options.onPresence || emptyFn; this.onRoster = options.onRoster || emptyFn; this.onError = options.onError || emptyFn; this.onReceivedMessage = options.onReceivedMessage || emptyFn; this.onInviteMessage = options.onInviteMessage || emptyFn; this.context = { status : STATUS_INIT }; } var dologin2IM = function(options,conn){ var accessToken = options.access_token || ''; if(accessToken == ''){ var loginfo = JSON.stringify(options); conn.onError({ type : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR, msg : "登录失败,"+ loginfo, data : options, xhr : xhr }); return; } conn.context.accessToken = options.access_token; conn.context.accessTokenExpires = options.expires_in; var stropheConn = new Strophe.Connection(conn.url,{ inactivity : conn.inactivity, maxRetries : conn.maxRetries, pollingTime : conn.pollingTime }); var callback = function(status,msg){ login2ImCallback(status,msg,conn); }; var jid = conn.context.jid; conn.context.stropheConn = stropheConn; if(conn.route){ stropheConn.connect(jid,"$t$" + accessToken,callback,conn.wait,conn.hold,conn.route); } else { stropheConn.connect(jid,"$t$" + accessToken,callback,conn.wait,conn.hold); } }; // user, pwd, appKey, resource connection.prototype.open = function(options) { var pass = innerCheck(options,this); if(pass == false){ return; } var conn = this; if(options.accessToken){ options.access_token = options.accessToken; dologin2IM(options,conn); }else{ var loginUrl = this.https ? "https://a1.easemob.com" : "http://a1.easemob.com"; var apiUrl = options.apiUrl || loginUrl; var userId = this.context.userId; var pwd = options.pwd || ''; var appName = this.context.appName; var orgName = this.context.orgName; var suc = function(data,xhr){ conn.context.status = STATUS_DOLOGIN_IM; dologin2IM(data,conn); }; var error = function(res,xhr,msg){ if(res.error && res.error_description){ conn.onError({ type : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR, msg : "登录失败,"+res.error_description, data : res, xhr : xhr }); } else { conn.onError({ type : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR, msg : "登录失败", data : res, xhr : xhr }); } conn.clear(); }; this.context.status = STATUS_DOLOGIN_USERGRID; dologin2UserGrid(apiUrl,userId,pwd,orgName,appName,suc,error); } }; connection.prototype.attach = function(options) { var pass = innerCheck(options,this); if(pass == false) return;{ } options = options || {}; var accessToken = options.accessToken || ''; if(accessToken == ''){ this.onError({ type : EASEMOB_IM_CONNCTION_ATTACH_USERGRID_ERROR, msg : '未指定用户的accessToken' }); return; } var sid = options.sid || ''; if(sid == ''){ this.onError({ type : EASEMOB_IM_CONNCTION_ATTACH_ERROR, msg : '未指定用户的会话信息' }); return; } var rid = options.rid || ''; if(rid == ''){ this.onError({ type : EASEMOB_IM_CONNCTION_ATTACH_ERROR, msg : '未指定用户的消息id' }); return; } var stropheConn = new Strophe.Connection(this.url,{ inactivity : this.inactivity, maxRetries : this.maxRetries, pollingTime : this.pollingTime }); this.context.accessToken = accessToken; this.context.stropheConn = stropheConn; this.context.status = STATUS_DOLOGIN_IM; var conn = this; var callback = function(status,msg){ login2ImCallback(status,msg,conn); }; var jid = this.context.jid; var wait = this.wait; var hold = this.hold; var wind = this.wind || 5; stropheConn.attach(jid, sid, rid, callback, wait, hold, wind); }; connection.prototype.close = function() { var status = this.context.status; if (status==STATUS_INIT) { return; } if(this.isClosed() || this.isClosing()){ return; } this.context.status = STATUS_CLOSING; this.context.stropheConn.disconnect(); }; // see stropheConn.addHandler connection.prototype.addHandler = function (handler, ns, name, type, id, from, options){ this.context.stropheConn.addHandler(handler, ns, name, type, id, from, options); }; connection.prototype.handlePresence = function(msginfo){ if(this.isClosed()){ return; } var from = msginfo.getAttribute('from') || ''; var to = msginfo.getAttribute('to') || ''; var type = msginfo.getAttribute('type') || ''; var fromUser = parseNameFromJidFn(from); var toUser = parseNameFromJidFn(to); var info = { from: fromUser, to : toUser, fromJid : from, toJid : to, type : type }; var showTags = msginfo.getElementsByTagName("show"); if(showTags && showTags.length>0){ var showTag = showTags[0]; info.show = Strophe.getText(showTag); } var statusTags = msginfo.getElementsByTagName("status"); if(statusTags && statusTags.length>0){ var statusTag = statusTags[0]; info.status = Strophe.getText(statusTag); } var priorityTags = msginfo.getElementsByTagName("priority"); if(priorityTags && priorityTags.length>0){ var priorityTag = priorityTags[0]; info.priority = Strophe.getText(priorityTag); } this.onPresence(info,msginfo); }; connection.prototype.handlePing = function(e) { if(this.isClosed()){ return; } var id = e.getAttribute('id'); var from = e.getAttribute('from'); var to = e.getAttribute('to'); var dom = $iq({ from : to, to : from, id : id, type : 'result' }); this.sendCommand(dom.tree()); }; connection.prototype.handleIq = function(e) { var id = e.getAttribute('id'); var from = e.getAttribute('from') || ''; var name = parseNameFromJidFn(from); var curJid = this.context.jid; var curUser = this.context.userId; if (from !== "" && from != curJid && curUser != name) return true; var iqresult = $iq({type: 'result', id: id, from: curJid}); this.sendCommand(iqresult.tree()); var msgBodies = e.getElementsByTagName("query"); if(msgBodies&&msgBodies.length>0){ var queryTag = msgBodies[0]; var rouster = parseFriendFn(queryTag); this.onRoster(rouster); } return true; }; connection.prototype.handleMessage = function(msginfo){ if(this.isClosed()){ return; } var id = msginfo.getAttribute('id') || ''; this.sendReceiptsMessage({ id : id }); var parseMsgData = parseResponseMessageFn(msginfo); if(parseMsgData.errorMsg){ return; } var msgDatas = parseMsgData.data; for(var i in msgDatas){ var msg = msgDatas[i]; var from = msg.from; var too = msg.to; var extmsg = msg.ext || {}; var chattype = msginfo.getAttribute('type') || 'chat'; var msgBodies = msg.bodies; if(!msgBodies || msgBodies.length==0){ continue; } var msgBody = msg.bodies[0]; var type = msgBody.type; if ("txt" == type) { var receiveMsg = msgBody.msg; var emotionsbody = parseTextMessageFn(receiveMsg); if(emotionsbody.isemotion){ this.onEmotionMessage({ type : chattype, from : from, to : too, data : emotionsbody.body, ext : extmsg }); } else { this.onTextMessage({ type : chattype, from : from, to : too, data : receiveMsg, ext : extmsg }); } } else if ("img" == type) { var rwidth = 0; var rheight = 0; if(msgBody.size){ rwidth = msgBody.size.width; rheight = msgBody.size.height; } var msg = { type : chattype, from : from, to : too, url : msgBody.url, secret : msgBody.secret, filename : msgBody.filename, thumb : msgBody.thumb, thumb_secret : msgBody.thumb_secret, file_length : msgBody.file_length||'', width : rwidth, height : rheight, filetype : msgBody.filetype||'', accessToken : this.context.accessToken || '', ext : extmsg }; this.onPictureMessage(msg); } else if ("audio" == type) { this.onAudioMessage({ type : chattype, from : from, to : too, url : msgBody.url, secret : msgBody.secret, filename : msgBody.filename, length : msgBody.length||'', file_length : msgBody.file_length||'', filetype : msgBody.filetype||'', accessToken : this.context.accessToken || '', ext : extmsg }); } else if ("file" == type) { this.onFileMessage({ type : chattype, from : from, to : too, url : msgBody.url, secret : msgBody.secret, filename : msgBody.filename, file_length : msgBody.file_length, accessToken : this.context.accessToken || '', ext : extmsg }); } else if ("loc" == type) { this.onLocationMessage({ type : chattype, from : from, to : too, addr : msgBody.addr, lat : msgBody.lat, lng : msgBody.lng, ext : extmsg }); }else if("video" == type){ this.onVideoMessage({ type : chattype, from : from, to : too, url : msgBody.url, secret : msgBody.secret, filename : msgBody.filename, file_length : msgBody.file_length, accessToken : this.context.accessToken || '', ext : extmsg }); }else if("cmd" == type){ this.onCmdMessage({ from : from, to : too, action : msgBody.action, ext : extmsg }); } } }; connection.prototype.handleReceivedMessage = function(message){ this.onReceivedMessage(message); }; connection.prototype.handleInviteMessage = function(message){ var form = null; var invitemsg = message.getElementsByTagName('invite'); if(invitemsg && invitemsg.length>0){ var fromJid = invitemsg[0].getAttribute('from'); form = parseNameFromJidFn(fromJid); } var xmsg = message.getElementsByTagName('x'); var roomid = null; if(xmsg && xmsg.length > 0){ for(var i = 0; i < xmsg.length; i++){ if('jabber:x:conference' == xmsg[i].namespaceURI){ var roomjid = xmsg[i].getAttribute('jid'); roomid = parseNameFromJidFn(roomjid); } } } this.onInviteMessage({ type : 'invite', from : form, roomid : roomid }); }; connection.prototype.sendCommand = function(dom) { if(this.isOpened()){ this.context.stropheConn.send(dom); } else { this.onError({ type : EASEMOB_IM_CONNCTION_OPEN_ERROR, msg : '连接还未建立,请先登录或等待登录处理完毕' }); } }; connection.prototype.getUniqueId = function (prefix) { var cdate = new Date(); var offdate = new Date(2010,1,1); var offset = cdate.getTime()-offdate.getTime(); var hexd = parseInt(offset).toString(16); if (typeof(prefix) == "string" || typeof(prefix) == "number") { return prefix+"_"+hexd; } else { return 'WEBIM_'+hexd; } }; connection.prototype.sendTextMessage = function(options) { var appKey = this.context.appKey || ''; var toJid = appKey + "_" + options.to + "@" + this.domain; if(options.type && options.type == 'groupchat'){ toJid = appKey + "_"+options.to+'@conference.' + this.domain; } if(options.resource){ toJid = toJid + "/" + options.resource; } var msgTxt = options.msg; var json = { from : this.context.userId || '', to : options.to, bodies : [{ type : "txt", msg : msgTxt }], ext : options.ext || {} }; var jsonstr = JSON.stringify(json); var dom = $msg({ to : toJid, type : options.type || 'chat', id : this.getUniqueId(), xmlns : "jabber:client" }).c("body").t(jsonstr); this.sendCommand(dom.tree()); }; connection.prototype.sendPicture = function(options) { var onerror = options.onFileUploadError || this.onError || emptyFn; if(!isCanUploadFile){ onerror({ type : EASEMOB_IM_UPLOADFILE_BROWSER_ERROR, msg : '当前浏览器不支持异步上传文件,请换用其他浏览器' }); return; } var conn = this; var onFileUploadComplete = options.onFileUploadComplete || emptyFn; var myUploadComplete = function(data) { options["url"] = data.uri; options["secret"] = data.entities[0]["share-secret"]; if(data.entities[0]["file-metadata"]){ var file_len = data.entities[0]["file-metadata"]["content-length"]; options["file_length"] = file_len; options["filetype"] = data.entities[0]["file-metadata"]["content-type"] if (file_len > 204800) { options["thumbnail"] = true; } } options["uuid"] = data.entities[0].uuid; onFileUploadComplete(data); conn.sendPictureMessage(options); }; options.onFileUploadComplete = myUploadComplete; options.onFileUploadError = options.onFileUploadError|| this.onError || emptyFn; var image = new Image(); var imageLoadFn = function() { image.onload = null; if (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') { var heigth = image.height; var width = image.width; options.height = heigth; options.width = width; options.appName = conn.context.appName || ''; options.orgName = conn.context.orgName || ''; options.accessToken = conn.context.accessToken || ''; uploadFn(options); }; }; if("onload" in image){ image.onload = imageLoadFn; } else { image.onreadystatechange = imageLoadFn; } image.onerror = function() { image.onerror = function(){ image.onerror = null; options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_ERROR, msg : '指定的图片不存在或者不是一个图片格式文件' }); }; image.src = document.getElementById(options.fileInputId).value; }; var picId = options.fileInputId; file = getFileUrlFn(picId); options.fileInfo = file; options.filename = file.filename; if (!file.url) { options.onFileUploadError({ type : EASEMOB_IM_UPLOADFILE_NO_FILE, msg : '未选择上传文件' }); } else { image.src = file.url; } }; connection.prototype.sendPictureMessage = function(options) { var appKey = this.context.appKey || ''; var toJid = appKey + "_" + options.to + "@" + this.domain; if(options.type && options.type == 'groupchat'){ toJid = appKey + "_"+options.to+'@conference.' + this.domain; } if(options.resource){ toJid = toJid + "/" + options.resource; } var json = { from : this.context.userId || '', to : options.to, bodies :[{ type : "img", url : options.url + '/' + options.uuid, secret : options.secret, filename : options.filename, thumb : options.url + '/' + options.uuid, thumb_secret : '', size : { width : options.width, height : options.height }, "file_length" : options.file_length, filetype : options.filetype }], ext : options.ext || {} }; var jsonstr = JSON.stringify(json); var date = new Date(); var dom = $msg({ type : options.type || 'chat', to : toJid, id : this.getUniqueId(), xmlns : "jabber:client" }).c("body").t(jsonstr); this.sendCommand(dom.tree()); }; connection.prototype.sendAudio = function(options) { var onerror = options.onFileUploadError || this.onError || emptyFn; if(!isCanUploadFile){ onerror({ type : EASEMOB_IM_UPLOADFILE_BROWSER_ERROR, msg : '当前浏览器不支持异步上传文件,请换用其他浏览器' }); return; } var conn = this; var onFileUploadComplete = options.onFileUploadComplete || emptyFn; var myonComplete = function(data) { onFileUploadComplete(data); options["url"] = data.uri; options["secret"] = data.entities[0]["share-secret"]; if(data.entities[0]["file-metadata"]){ options["file_length"] = data.entities[0]["file-metadata"]["content-length"]; options["filetype"] = data.entities[0]["file-metadata"]["content-type"]; } options["uuid"] = data.entities[0].uuid; options["length"] = data.duration; conn.sendAudioMessage(options); }; options.appName = this.context.appName || ''; options.orgName = this.context.orgName || ''; options.accessToken = this.context.accessToken || ''; options.onFileUploadComplete = myonComplete; var file = getFileUrlFn(options.fileInputId); options.fileInfo = file; options.filename = file.filename; uploadFn(options, this); }; connection.prototype.sendAudioMessage = function(options) { var appKey = this.context.appKey || ''; var toJid = appKey + "_" + options.to + "@" + this.domain; if(options.type && options.type == 'groupchat'){ toJid =appKey + "_"+options.to+'@conference.' + this.domain; } if(options.resource){ toJid = toJid + "/" + options.resource; } var json = { from : this.context.userId || '', to : options.to, bodies :[{ type : "audio", url : options.url + '/' + options.uuid, secret : options.secret, filename : options.filename, "file_length" : options.file_length, length : options.length }], ext : options.ext || {} }; var jsonstr = JSON.stringify(json); var dom = $msg({ type : options.type || 'chat', to : toJid, id : this.getUniqueId(), xmlns : "jabber:client" }).c("body").t(jsonstr); this.sendCommand(dom.tree()); }; connection.prototype.sendFileMessage = function(options) { var appKey = this.context.appKey || ''; var toJid = appKey + "_" + options.to + "@" + this.domain; if(options.type && options.type == 'groupchat'){ toJid =appKey + "_"+options.to+'@conference.' + this.domain; } if(options.resource){ toJid = toJid + "/" + options.resource; } var json = { from : this.context.userId || '', to : options.to, bodies :[{ type : "file", url : options.url, secret : options.secret, filename : options.filename, "file_length" : options.file_length }], ext : options.ext || {} }; var jsonstr = JSON.stringify(json); var dom = $msg({ type : 'chat', to : toJid, id : this.getUniqueId(), xmlns : "jabber:client" }).c("body").t(jsonstr); this.sendCommand(dom.tree()); }; connection.prototype.sendLocationMessage = function(options) { var appKey = this.context.appKey || ''; var toJid = appKey + "_" + options.to + "@" + this.domain; if(options.type && options.type == 'groupchat'){ toJid =appKey + "_"+options.to+'@conference.' + this.domain; } if(options.resource){ toJid = toJid + "/" + options.resource; } var json = { from : this.context.userId || '', to : options.to, bodies :[{ type : "loc", addr : options.addr, lat : options.lat, lng : options.lng }], ext : options.ext || {} }; var jsonstr = JSON.stringify(json); var dom = $msg({ type : 'chat', to : toJid, id : this.getUniqueId(), xmlns : "jabber:client" }).c("body").t(jsonstr); this.sendCommand(dom.tree()); }; connection.prototype.sendReceiptsMessage = function(options){ var dom = $msg({ from : this.context.jid || '', to : "easemob.com", id : options.id || '' }).c("received",{ xmlns : "urn:xmpp:receipts", id : options.id || '' }); this.sendCommand(dom.tree()); }; connection.prototype.addRoster = function(options){ var jid = getJid(options,this); var name = options.name || ''; var groups = options.groups || ''; var iq = $iq({type : 'set'}); iq.c("query",{xmlns:'jabber:iq:roster'}); iq.c("item",{jid: jid ,name : name}); if(groups){ for (var i = 0; i < groups.length; i++){ iq.c('group').t(groups[i]).up(); } } var suc = options.success || emptyFn; var error = options.error || emptyFn; this.context.stropheConn.sendIQ(iq.tree(),suc,error); }; connection.prototype.removeRoster = function(options){ var jid = getJid(options,this); var iq = $iq({type: 'set'}).c('query', {xmlns : "jabber:iq:roster"}).c('item', {jid: jid,subscription: "remove"}); var suc = options.success || emptyFn; var error = options.error || emptyFn; this.context.stropheConn.sendIQ(iq,suc,error); }; connection.prototype.getRoster = function(options) { var conn = this; var dom = $iq({ type: 'get' }).c('query', {xmlns: 'jabber:iq:roster'}); options = options || {}; suc = options.success || this.onRoster; var completeFn = function(ele){ var rouster = []; var msgBodies = ele.getElementsByTagName("query"); if(msgBodies&&msgBodies.length>0){ var queryTag = msgBodies[0]; rouster = parseFriendFn(queryTag); } suc(rouster,ele); }; error = options.error || this.onError; var failFn = function(ele){ error({ type : EASEMOB_IM_CONNCTION_GETROSTER_ERROR, msg : '获取联系人信息失败', data : ele }); }; if(this.isOpened()){ this.context.stropheConn.sendIQ(dom.tree(),completeFn,failFn); } else { error({ type : EASEMOB_IM_CONNCTION_OPEN_ERROR, msg : '连接还未建立,请先登录或等待登录处理完毕' }); } }; connection.prototype.subscribe = function(options) { var jid = getJid(options,this); var pres = $pres({to: jid, type: "subscribe"}); if (options.message) { pres.c("status").t(options.message).up(); } if (options.nick) { pres.c('nick', {'xmlns': "http://jabber.org/protocol/nick"}).t(options.nick); } this.sendCommand(pres.tree()); }; connection.prototype.subscribed = function(options) { var jid = getJid(options,this); var pres = $pres({to : jid, type : "subscribed"}); if (options.message) { pres.c("status").t(options.message).up(); } this.sendCommand(pres.tree()); }; connection.prototype.unsubscribe = function(options) { var jid = getJid(options,this); var pres = $pres({to : jid, type : "unsubscribe"}); if (options.message) { pres.c("status").t(options.message); } this.sendCommand(pres.tree()); }; connection.prototype.unsubscribed = function(options) { var jid = getJid(options,this); var pres = $pres({to : jid, type : "unsubscribed"}); if (options.message) { pres.c("status").t(options.message).up(); } this.sendCommand(pres.tree()); }; connection.prototype.createRoom = function(options) { var suc =options.success || emptyFn; var err = options.error || emptyFn; var roomiq; roomiq = $iq({ to: options.rooomName, type: "set" }).c("query", { xmlns: Strophe.NS.MUC_OWNER }).c("x", { xmlns: "jabber:x:data", type: "submit" }); return this.context.stropheConn.sendIQ(roomiq.tree(), suc, err); }; connection.prototype.join = function(options){ var roomJid = this.context.appKey+"_"+options.roomId+'@conference.' + this.domain; var room_nick = roomJid+"/"+this.context.userId; var suc =options.success || emptyFn; var err = options.error || emptyFn; var errorFn = function (ele){ err({ type : EASEMOB_IM_CONNCTION_JOINROOM_ERROR, msg : '加入房间失败', data : ele }); } var iq = $pres({ from: this.context.jid, to: room_nick }).c("x", { xmlns: Strophe.NS.MUC }); this.context.stropheConn.sendIQ(iq.tree(), suc, errorFn); }; connection.prototype.listRooms = function(options) { var iq; iq = $iq({ to: options.server||'conference.' + this.domain, from: this.context.jid, type: "get" }).c("query", { xmlns: Strophe.NS.DISCO_ITEMS }); var suc =options.success || emptyFn; var completeFn = function(result){ var rooms = []; rooms = parseRoomFn(result); suc(rooms); } var err = options.error || emptyFn; var errorFn = function (ele){ err({ type : EASEMOB_IM_CONNCTION_GETROOM_ERROR, msg : '获取群组列表失败', data : ele }); } this.context.stropheConn.sendIQ(iq.tree(), completeFn, errorFn); }; connection.prototype.queryRoomMember = function(options){ var domain = this.domain; var members = []; var iq= $iq({ to : this.context.appKey+"_"+options.roomId+'@conference.' + this.domain, type : 'get' }).c('query', { xmlns: Strophe.NS.MUC+'#admin' }).c('item',{ affiliation:'member' }); var suc =options.success || emptyFn; var completeFn = function(result){ var items = result.getElementsByTagName('item'); if(items){ for(var i=0;i= 0 && j < len ? [ this[j] ] : [] ); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: deletedIds.sort, splice: deletedIds.splice }; jQuery.extend = jQuery.fn.extend = function() { var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; // skip the boolean and the target target = arguments[ i ] || {}; i++; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( i === length ) { target = this; i--; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), // Assume jQuery is ready without the ready module isReady: true, error: function( msg ) { throw new Error( msg ); }, noop: function() {}, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; }, isWindow: function( obj ) { /* jshint eqeqeq: false */ return obj != null && obj == obj.window; }, isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, isPlainObject: function( obj ) { var key; // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Support: IE<9 // Handle iteration over inherited properties before own properties. if ( support.ownLast ) { for ( key in obj ) { return hasOwn.call( obj, key ); } } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. for ( key in obj ) {} return key === undefined || hasOwn.call( obj, key ); }, type: function( obj ) { if ( obj == null ) { return obj + ""; } return typeof obj === "object" || typeof obj === "function" ? class2type[ toString.call(obj) ] || "object" : typeof obj; }, // Evaluates a script in a global context // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && jQuery.trim( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, // args is for internal usage only each: function( obj, callback, args ) { var value, i = 0, length = obj.length, isArray = isArraylike( obj ); if ( args ) { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } } return obj; }, // Support: Android<4.1, IE<9 trim: function( text ) { return text == null ? "" : ( text + "" ).replace( rtrim, "" ); }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArraylike( Object(arr) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( indexOf ) { return indexOf.call( arr, elem, i ); } len = arr.length; i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays if ( i in arr && arr[ i ] === elem ) { return i; } } } return -1; }, merge: function( first, second ) { var len = +second.length, j = 0, i = first.length; while ( j < len ) { first[ i++ ] = second[ j++ ]; } // Support: IE<9 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) if ( len !== len ) { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, invert ) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { callbackInverse = !callback( elems[ i ], i ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ i ] ); } } return matches; }, // arg is for internal usage only map: function( elems, callback, arg ) { var value, i = 0, length = elems.length, isArray = isArraylike( elems ), ret = []; // Go through the array, translating each of the items to their new values if ( isArray ) { for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } } // Flatten any nested arrays return concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var args, proxy, tmp; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = slice.call( arguments, 2 ); proxy = function() { return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, now: function() { return +( new Date() ); }, // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support }); // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); function isArraylike( obj ) { var length = obj.length, type = jQuery.type( obj ); if ( type === "function" || jQuery.isWindow( obj ) ) { return false; } if ( obj.nodeType === 1 && length ) { return true; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } var Sizzle = /*! * Sizzle CSS Selector Engine v1.10.19 * http://sizzlejs.com/ * * Copyright 2013 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2014-04-18 */ (function( window ) { var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, // Local document vars setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, // Instance-specific data expando = "sizzle" + -(new Date()), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; } return 0; }, // General-purpose constants strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, // Instance methods hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf if we can't use a native one indexOf = arr.indexOf || function( elem ) { var i = 0, len = this.length; for ( ; i < len; i++ ) { if ( this[i] === elem ) { return i; } } return -1; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/css3-syntax/#characters characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Loosely modeled on CSS identifier characters // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = characterEncoding.replace( "w", "w#" ), // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + characterEncoding + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + characterEncoding + ")" ), "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), funescape = function( _, escaped, escapedWhitespace ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint // Support: Firefox<24 // Workaround erroneous numeric interpretation of +"0x" return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }; // Optimize for push.apply( _, NodeList ) try { push.apply( (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); // Support: Android<4.0 // Detect silently failing push.apply arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { push_native.apply( target, slice.call(els) ); } : // Support: IE<9 // Otherwise append directly function( target, els ) { var j = target.length, i = 0; // Can't trust NodeList.length while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; } function Sizzle( selector, context, results, seed ) { var match, elem, m, nodeType, // QSA vars i, groups, old, nid, newContext, newSelector; if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; results = results || []; if ( !selector || typeof selector !== "string" ) { return results; } if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { return []; } if ( documentIsHTML && !seed ) { // Shortcuts if ( (match = rquickExpr.exec( selector )) ) { // Speed-up: Sizzle("#ID") if ( (m = match[1]) ) { if ( nodeType === 9 ) { elem = context.getElementById( m ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document (jQuery #6963) if ( elem && elem.parentNode ) { // Handle the case where IE, Opera, and Webkit return items // by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } } else { // Context is not a document if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Speed-up: Sizzle("TAG") } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Speed-up: Sizzle(".CLASS") } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // QSA path if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { nid = old = expando; newContext = context; newSelector = nodeType === 9 && selector; // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { groups = tokenize( selector ); if ( (old = context.getAttribute("id")) ) { nid = old.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", nid ); } nid = "[id='" + nid + "'] "; i = groups.length; while ( i-- ) { groups[i] = nid + toSelector( groups[i] ); } newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; newSelector = groups.join(","); } if ( newSelector ) { try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch(qsaError) { } finally { if ( !old ) { context.removeAttribute("id"); } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {Function(string, Object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key + " " ] = value); } return cache; } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return !!fn( div ); } catch (e) { return false; } finally { // Remove from its parent by default if ( div.parentNode ) { div.parentNode.removeChild( div ); } // release memory in IE div = null; } } /** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), i = attrs.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; } } /** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ function siblingCheck( a, b ) { var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Checks a node for validity as a Sizzle context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { return context && typeof context.getElementsByTagName !== strundefined && context; } // Expose support vars for convenience support = Sizzle.support = {}; /** * Detects XML nodes * @param {Element|Object} elem An element or a document * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView; // If no document and documentElement is available, return if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Set our document document = doc; docElem = doc.documentElement; // Support tests documentIsHTML = !isXML( doc ); // Support: IE>8 // If iframe document is assigned to "document" variable and if iframe has been reloaded, // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 // IE6-8 do not support the defaultView property so parent will be undefined if ( parent && parent !== parent.top ) { // IE11 does not have attachEvent, so all must suffer if ( parent.addEventListener ) { parent.addEventListener( "unload", function() { setDocument(); }, false ); } else if ( parent.attachEvent ) { parent.attachEvent( "onunload", function() { setDocument(); }); } } /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { div.appendChild( doc.createComment("") ); return !div.getElementsByTagName("*").length; }); // Check if getElementsByClassName can be trusted support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { div.innerHTML = "
    "; // Support: Safari<4 // Catch class over-caching div.firstChild.className = "i"; // Support: Opera<10 // Catch gEBCN failure to find non-leading classes return div.getElementsByClassName("i").length === 2; }); // Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; return !doc.getElementsByName || !doc.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== strundefined && documentIsHTML ) { var m = context.getElementById( id ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [ m ] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { // Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"]; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== strundefined ) { return context.getElementsByTagName( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 div.innerHTML = ""; // Support: IE8, Opera 11-12.16 // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section if ( div.querySelectorAll("[msallowclip^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } }); assert(function( div ) { // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment var input = doc.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute if ( div.querySelectorAll("[name=d]").length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ hasCompare = rnative.test( docElem.compareDocumentPosition ); // Element contains another // Purposefully does not implement inclusive descendent // As in, an element does not contain itself contains = hasCompare || rnative.test( docElem.contains ) ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = hasCompare ? function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } // Sort on method existence if only one input has compareDocumentPosition var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if ( compare ) { return compare; } // Calculate position if both inputs belong to the same document compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected 1; // Disconnected nodes if ( compare & 1 || (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; } : function( a, b ) { // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; } var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; return doc; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch(e) {} } return Sizzle( expr, document, null, [ elem ] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; sortInput = !support.sortStable && results.slice( 0 ); results.sort( sortOrder ); if ( hasDuplicate ) { while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } // Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput = null; return results; }; /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[6] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[3] ) { match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index outerCache = parent[ expando ] || (parent[ expando ] = {}); cache = outerCache[ type ] || []; nodeIndex = cache[0] === dirruns && cache[1]; diff = cache[0] === dirruns && cache[2]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } // Use previously-cached element index if available } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { diff = cache[1]; // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) } else { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf.call( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeType < 6 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); tokenize = Sizzle.tokenize = function( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( (tokens = []) ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push({ value: matched, type: type, matches: match }); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); }; function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var oldCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); if ( (oldCache = outerCache[ dir ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return (newCache[ 2 ] = oldCache[ 2 ]); } else { // Reuse newcache so results back-propagate to previous elements outerCache[ dir ] = newCache; // A match means we're done; a fail means we have to keep checking if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, outermost ) { var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; if ( outermost ) { outermostContext = context !== document && context; } // Add elements passing elementMatchers directly to results // Keep `i` a string if there are no elements so `matchedCount` will be "00" below // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context, xml ) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // Apply set filters to unmatched elements matchedCount += i; if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { cached = matcherFromTokens( match[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; }; /** * A low-level selection function that works with Sizzle's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled * selector function built with Sizzle.compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ select = Sizzle.select = function( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize( (selector = compiled.selector || selector) ); results = results || []; // Try to minimize operations if there is no seed and only one group if ( match.length === 1 ) { // Take a shortcut and set the context if the root selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; // Precompiled matchers will still verify ancestry, so step up a level } else if ( compiled ) { context = context.parentNode; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } // Compile and execute a filtering function if one is not provided // Provide `match` to avoid retokenization if we modified the selector above ( compiled || compile( selector, match ) )( seed, context, !documentIsHTML, results, rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; }; // One-time assignments // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome<14 // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = !!hasDuplicate; // Initialize against the default document setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached = assert(function( div1 ) { // Should return 1, but returns 4 (following) return div1.compareDocumentPosition( document.createElement("div") ) & 1; }); // Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !assert(function( div ) { div.innerHTML = ""; return div.firstChild.getAttribute("href") === "#" ; }) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") if ( !support.attributes || !assert(function( div ) { div.innerHTML = ""; div.firstChild.setAttribute( "value", "" ); return div.firstChild.getAttribute( "value" ) === ""; }) ) { addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if ( !assert(function( div ) { return div.getAttribute("disabled") == null; }) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : (val = elem.getAttributeNode( name )) && val.specified ? val.value : null; } }); } return Sizzle; })( window ); jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.pseudos; jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; var rneedsContext = jQuery.expr.match.needsContext; var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); var risSimple = /^.[^:#\[\.,]*$/; // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; }); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; }); } if ( typeof qualifier === "string" ) { if ( risSimple.test( qualifier ) ) { return jQuery.filter( qualifier, elements, not ); } qualifier = jQuery.filter( qualifier, elements ); } return jQuery.grep( elements, function( elem ) { return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; }); } jQuery.filter = function( expr, elems, not ) { var elem = elems[ 0 ]; if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; })); }; jQuery.fn.extend({ find: function( selector ) { var i, ret = [], self = this, len = self.length; if ( typeof selector !== "string" ) { return this.pushStack( jQuery( selector ).filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } }) ); } for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } // Needed because $( selector, context ) becomes $( context ).find( selector ) ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = this.selector ? this.selector + " " + selector : selector; return ret; }, filter: function( selector ) { return this.pushStack( winnow(this, selector || [], false) ); }, not: function( selector ) { return this.pushStack( winnow(this, selector || [], true) ); }, is: function( selector ) { return !!winnow( this, // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector === "string" && rneedsContext.test( selector ) ? jQuery( selector ) : selector || [], false ).length; } }); // Initialize a jQuery object // A central reference to the root jQuery(document) var rootjQuery, // Use the correct document accordingly with window argument (sandbox) document = window.document, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, init = jQuery.fn.init = function( selector, context ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // Handle HTML strings if ( typeof selector === "string" ) { if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; // scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( match[1], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[2] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || rootjQuery ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return typeof rootjQuery.ready !== "undefined" ? rootjQuery.ready( selector ) : // Execute immediately if ready is not present selector( jQuery ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }; // Give the init function the jQuery prototype for later instantiation init.prototype = jQuery.fn; // Initialize central reference rootjQuery = jQuery( document ); var rparentsprev = /^(?:parents|prev(?:Until|All))/, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.extend({ dir: function( elem, dir, until ) { var matched = [], cur = elem[ dir ]; while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); } cur = cur[dir]; } return matched; }, sibling: function( n, elem ) { var r = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { r.push( n ); } } return r; } }); jQuery.fn.extend({ has: function( target ) { var i, targets = jQuery( target, this ), len = targets.length; return this.filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, matched = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { // Always skip document fragments if ( cur.nodeType < 11 && (pos ? pos.index(cur) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors)) ) { matched.push( cur ); break; } } } return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return jQuery.inArray( this[0], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[0] : elem, this ); }, add: function( selector, context ) { return this.pushStack( jQuery.unique( jQuery.merge( this.get(), jQuery( selector, context ) ) ) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter(selector) ); } }); function sibling( cur, dir ) { do { cur = cur[ dir ]; } while ( cur && cur.nodeType !== 1 ); return cur; } jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); if ( name.slice( -5 ) !== "Until" ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } if ( this.length > 1 ) { // Remove duplicates if ( !guaranteedUnique[ name ] ) { ret = jQuery.unique( ret ); } // Reverse order for parents* and prev-derivatives if ( rparentsprev.test( name ) ) { ret = ret.reverse(); } } return this.pushStack( ret ); }; }); var rnotwhite = (/\S+/g); // String to Object options format cache var optionsCache = {}; // Convert String-formatted options into Object-formatted ones and store in cache function createOptions( options ) { var object = optionsCache[ options ] = {}; jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; }); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? ( optionsCache[ options ] || createOptions( options ) ) : jQuery.extend( {}, options ); var // Flag to know if list is currently firing firing, // Last fire value (for non-forgettable lists) memory, // Flag to know if list was already fired fired, // End of the loop when firing firingLength, // Index of currently firing callback (modified by remove if needed) firingIndex, // First callback to fire (used internally by add and fireWith) firingStart, // Actual callback list list = [], // Stack of fire calls for repeatable lists stack = !options.once && [], // Fire callbacks fire = function( data ) { memory = options.memory && data; fired = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; firing = true; for ( ; list && firingIndex < firingLength; firingIndex++ ) { if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { memory = false; // To prevent further calls using add break; } } firing = false; if ( list ) { if ( stack ) { if ( stack.length ) { fire( stack.shift() ); } } else if ( memory ) { list = []; } else { self.disable(); } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // First, we save the current length var start = list.length; (function add( args ) { jQuery.each( args, function( _, arg ) { var type = jQuery.type( arg ); if ( type === "function" ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && type !== "string" ) { // Inspect recursively add( arg ); } }); })( arguments ); // Do we need to add the callbacks to the // current firing batch? if ( firing ) { firingLength = list.length; // With memory, if we're not firing then // we should call right away } else if ( memory ) { firingStart = start; fire( memory ); } } return this; }, // Remove a callback from the list remove: function() { if ( list ) { jQuery.each( arguments, function( _, arg ) { var index; while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( firing ) { if ( index <= firingLength ) { firingLength--; } if ( index <= firingIndex ) { firingIndex--; } } } }); } return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); }, // Remove all callbacks from the list empty: function() { list = []; firingLength = 0; return this; }, // Have the list do nothing anymore disable: function() { list = stack = memory = undefined; return this; }, // Is it disabled? disabled: function() { return !list; }, // Lock the list in its current state lock: function() { stack = undefined; if ( !memory ) { self.disable(); } return this; }, // Is it locked? locked: function() { return !stack; }, // Call all callbacks with the given context and arguments 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; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend({ Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], [ "notify", "progress", jQuery.Callbacks("memory") ] ], 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 jQuery.Deferred(function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[1] ](function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .done( newDefer.resolve ) .fail( newDefer.reject ) .progress( newDefer.notify ); } else { newDefer[ tuple[ 0 ] + "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 ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.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; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.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 ] && jQuery.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(); } }); // The deferred used on DOM ready var readyList; jQuery.fn.ready = function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }; jQuery.extend({ // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready ); } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.triggerHandler ) { jQuery( document ).triggerHandler( "ready" ); jQuery( document ).off( "ready" ); } } }); /** * Clean-up method for dom ready events */ function detach() { if ( document.addEventListener ) { document.removeEventListener( "DOMContentLoaded", completed, false ); window.removeEventListener( "load", completed, false ); } else { document.detachEvent( "onreadystatechange", completed ); window.detachEvent( "onload", completed ); } } /** * The ready event handler and self cleanup method */ function completed() { // readyState === "complete" is good enough for us to call the dom ready in oldIE if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { detach(); jQuery.ready(); } } jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called after the browser event has already occurred. // we once tried to use readyState "interactive" here, but it caused issues like the one // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready setTimeout( jQuery.ready ); // Standards-based browsers support DOMContentLoaded } else if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed, false ); // If IE event model is used } else { // Ensure firing before onload, maybe late but safe also for iframes document.attachEvent( "onreadystatechange", completed ); // A fallback to window.onload, that will always work window.attachEvent( "onload", completed ); // If IE and not a frame // continually check to see if the document is ready var top = false; try { top = window.frameElement == null && document.documentElement; } catch(e) {} if ( top && top.doScroll ) { (function doScrollCheck() { if ( !jQuery.isReady ) { try { // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll("left"); } catch(e) { return setTimeout( doScrollCheck, 50 ); } // detach all dom ready events detach(); // and execute any waiting functions jQuery.ready(); } })(); } } } return readyList.promise( obj ); }; var strundefined = typeof undefined; // Support: IE<9 // Iteration over object's inherited properties before its own var i; for ( i in jQuery( support ) ) { break; } support.ownLast = i !== "0"; // Note: most support tests are defined in their respective modules. // false until the test is run support.inlineBlockNeedsLayout = false; // Execute ASAP in case we need to set body.style.zoom jQuery(function() { // Minified: var a,b,c,d var val, div, body, container; body = document.getElementsByTagName( "body" )[ 0 ]; if ( !body || !body.style ) { // Return for frameset docs that don't have a body return; } // Setup div = document.createElement( "div" ); container = document.createElement( "div" ); container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; body.appendChild( container ).appendChild( div ); if ( typeof div.style.zoom !== strundefined ) { // Support: IE<8 // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; if ( val ) { // Prevent IE 6 from affecting layout for positioned elements #11048 // Prevent IE from shrinking the body in IE 7 mode #12869 // Support: IE<8 body.style.zoom = 1; } } body.removeChild( container ); }); (function() { var div = document.createElement( "div" ); // Execute the test only if not already executed in another module. if (support.deleteExpando == null) { // Support: IE<9 support.deleteExpando = true; try { delete div.test; } catch( e ) { support.deleteExpando = false; } } // Null elements to avoid leaks in IE. div = null; })(); /** * Determines whether an object can have data */ jQuery.acceptData = function( elem ) { var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], nodeType = +elem.nodeType || 1; // Do not set data on non-element DOM nodes because it will not be cleared (#8335). return nodeType !== 1 && nodeType !== 9 ? false : // Nodes accept data unless otherwise specified; rejection can be conditional !noData || noData !== true && elem.getAttribute("classid") === noData; }; var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /([A-Z])/g; function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { var name; for ( name in obj ) { // if the public data object is empty, the private is still empty if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { continue; } if ( name !== "toJSON" ) { return false; } } return true; } function internalData( elem, name, data, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var ret, thisCache, internalKey = jQuery.expando, // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; } else { id = internalKey; } } if ( !cache[ id ] ) { // Avoid exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ] = jQuery.extend( cache[ id ], name ); } else { cache[ id ].data = jQuery.extend( cache[ id ].data, name ); } } thisCache = cache[ id ]; // jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data = {}; } thisCache = thisCache.data; } if ( data !== undefined ) { thisCache[ jQuery.camelCase( name ) ] = data; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( typeof name === "string" ) { // First Try to find as-is property data ret = thisCache[ name ]; // Test for null|undefined property data if ( ret == null ) { // Try to find the camelCased property ret = thisCache[ jQuery.camelCase( name ) ]; } } else { ret = thisCache; } return ret; } function internalRemoveData( elem, name, pvt ) { if ( !jQuery.acceptData( elem ) ) { return; } var thisCache, i, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { thisCache = pvt ? cache[ id ] : cache[ id ].data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name = [ name ]; } else { // split the camel cased version by spaces unless a key with the spaces exists name = jQuery.camelCase( name ); if ( name in thisCache ) { name = [ name ]; } else { name = name.split(" "); } } } else { // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name = name.concat( jQuery.map( name, jQuery.camelCase ) ); } i = name.length; while ( i-- ) { delete thisCache[ name[i] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache[ id ].data; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject( cache[ id ] ) ) { return; } } // Destroy the cache if ( isNode ) { jQuery.cleanData( [ elem ], true ); // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) /* jshint eqeqeq: false */ } else if ( support.deleteExpando || cache != cache.window ) { /* jshint eqeqeq: true */ delete cache[ id ]; // When all else fails, null } else { cache[ id ] = null; } } jQuery.extend({ cache: {}, // The following elements (space-suffixed to avoid Object.prototype collisions) // throw uncatchable exceptions if you attempt to set expando properties noData: { "applet ": true, "embed ": true, // ...but Flash objects (which have this classid) *can* handle expandos "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data ) { return internalData( elem, name, data ); }, removeData: function( elem, name ) { return internalRemoveData( elem, name ); }, // For internal use only. _data: function( elem, name, data ) { return internalData( elem, name, data, true ); }, _removeData: function( elem, name ) { return internalRemoveData( elem, name, true ); } }); jQuery.fn.extend({ data: function( key, value ) { var i, name, data, elem = this[0], attrs = elem && elem.attributes; // Special expections of .data basically thwart jQuery.access, // so implement the relevant behavior ourselves // Gets all values if ( key === undefined ) { if ( this.length ) { data = jQuery.data( elem ); if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { i = attrs.length; while ( i-- ) { // Support: IE11+ // The attrs elements can be null (#14894) if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { name = jQuery.camelCase( name.slice(5) ); dataAttr( elem, name, data[ name ] ); } } } jQuery._data( elem, "parsedAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } return arguments.length > 1 ? // Sets one value this.each(function() { jQuery.data( this, key, value ); }) : // Gets one value // Try to fetch any internally stored data first elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; }, removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); jQuery.extend({ queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray(data) ) { queue = jQuery._data( elem, type, jQuery.makeArray(data) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // not intended for public consumption - generates a queueHooks object, or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return jQuery._data( elem, key ) || jQuery._data( elem, key, { empty: jQuery.Callbacks("once memory").add(function() { jQuery._removeData( elem, type + "queue" ); jQuery._removeData( elem, key ); }) }); } }); jQuery.fn.extend({ queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } return data === undefined ? this : this.each(function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while ( i-- ) { tmp = jQuery._data( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } }); var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; var isHidden = function( elem, el ) { // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); }; // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, length = elems.length, bulk = key == null; // Sets many values if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !jQuery.isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < length; i++ ) { fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); } } } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems[0], key ) : emptyGet; }; var rcheckableType = (/^(?:checkbox|radio)$/i); (function() { // Minified: var a,b,c var input = document.createElement( "input" ), div = document.createElement( "div" ), fragment = document.createDocumentFragment(); // Setup div.innerHTML = "
    a"; // IE strips leading whitespace when .innerHTML is used support.leadingWhitespace = div.firstChild.nodeType === 3; // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables support.tbody = !div.getElementsByTagName( "tbody" ).length; // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works support.html5Clone = document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) input.type = "checkbox"; input.checked = true; fragment.appendChild( input ); support.appendChecked = input.checked; // Make sure textarea (and checkbox) defaultValue is properly cloned // Support: IE6-IE11+ div.innerHTML = ""; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; // #11217 - WebKit loses check when the name is after the checked attribute fragment.appendChild( div ); div.innerHTML = ""; // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 // old WebKit doesn't clone checked state correctly in fragments support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE<9 // Opera does not clone events (and typeof div.attachEvent === undefined). // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() support.noCloneEvent = true; if ( div.attachEvent ) { div.attachEvent( "onclick", function() { support.noCloneEvent = false; }); div.cloneNode( true ).click(); } // Execute the test only if not already executed in another module. if (support.deleteExpando == null) { // Support: IE<9 support.deleteExpando = true; try { delete div.test; } catch( e ) { support.deleteExpando = false; } } })(); (function() { var i, eventName, div = document.createElement( "div" ); // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) for ( i in { submit: true, change: true, focusin: true }) { eventName = "on" + i; if ( !(support[ i + "Bubbles" ] = eventName in window) ) { // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) div.setAttribute( eventName, "t" ); support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; } } // Null elements to avoid leaks in IE. div = null; })(); var rformElems = /^(?:input|select|textarea)$/i, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; function returnTrue() { return true; } function returnFalse() { return false; } function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var tmp, events, t, handleObjIn, special, eventHandle, handleObj, handlers, type, namespaces, origType, elemData = jQuery._data( elem ); // Don't attach events to noData or text/comment nodes (but allow plain objects) if ( !elemData ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !(events = elemData.events) ) { events = elemData.events = {}; } if ( !(eventHandle = elemData.handle) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events eventHandle.elem = elem; } // Handle multiple events separated by a space types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { continue; } // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend({ type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join(".") }, handleObjIn ); // Init the event handler queue if we're the first if ( !(handlers = events[ type ]) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, handleObj, tmp, origCount, t, events, special, handlers, type, namespaces, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ); if ( !elemData || !(events = elemData.events) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery._removeData( elem, "events" ); } }, trigger: function( event, data, elem, onlyHandlers ) { var handle, ontype, cur, bubbleType, special, tmp, i, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf(".") >= 0 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split("."); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf(":") < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; event.namespace = namespaces.join("."); event.namespace_re = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === (elem.ownerDocument || document) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && handle.apply && jQuery.acceptData( cur ) ) { event.result = handle.apply( cur, data ); if ( event.result === false ) { event.preventDefault(); } } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; try { elem[ type ](); } catch ( e ) { // IE<9 dies on focus/blur to hidden element (#1486,#12518) // only reproducible on winXP IE8 native, not IE9 in IE8 mode } jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); var i, ret, handleObj, matched, j, handlerQueue = [], args = slice.call( arguments ), handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[0] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) .apply( matched.elem, args ); if ( ret !== undefined ) { if ( (event.result = ret) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var sel, handleObj, matches, i, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Find delegate handlers // Black-hole SVG instance trees (#13180) // Avoid non-left-click bubbling in Firefox (#3861) if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { /* jshint eqeqeq: false */ for ( ; cur != this; cur = cur.parentNode || this ) { /* jshint eqeqeq: true */ // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (#13203) sel = handleObj.selector + " "; if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) >= 0 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push({ elem: cur, handlers: matches }); } } } } // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); } return handlerQueue; }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; if ( !fixHook ) { this.fixHooks[ type ] = fixHook = rmouseEvent.test( type ) ? this.mouseHooks : rkeyEvent.test( type ) ? this.keyHooks : {}; } copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = new jQuery.Event( originalEvent ); i = copy.length; while ( i-- ) { prop = copy[ i ]; event[ prop ] = originalEvent[ prop ]; } // Support: IE<9 // Fix target property (#1925) if ( !event.target ) { event.target = originalEvent.srcElement || document; } // Support: Chrome 23+, Safari? // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // Support: IE<9 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) event.metaKey = !!event.metaKey; return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; }, // Includes some event props shared by KeyEvent and MouseEvent props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function( event, original ) { var body, eventDoc, doc, button = original.button, fromElement = original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { try { this.focus(); return false; } catch ( e ) { // Support: IE<9 // If we error on focus to hidden element (#1486, #12518), // let .trigger() run the handlers } } }, delegateType: "focusin" }, blur: { trigger: function() { if ( this === safeActiveElement() && this.blur ) { this.blur(); return false; } }, delegateType: "focusout" }, click: { // For checkbox, fire native event so checked state will be right trigger: function() { if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { this.click(); return false; } }, // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { return jQuery.nodeName( event.target, "a" ); } }, beforeunload: { postDispatch: function( event ) { // Support: Firefox 20+ // Firefox doesn't alert if the returnValue field is not set. if ( event.result !== undefined && event.originalEvent ) { event.originalEvent.returnValue = event.result; } } } }, simulate: function( type, elem, event, bubble ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true, originalEvent: {} } ); if ( bubble ) { jQuery.event.trigger( e, null, elem ); } else { jQuery.event.dispatch.call( elem, e ); } if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { var name = "on" + type; if ( elem.detachEvent ) { // #8545, #7054, preventing memory leaks for custom events in IE6-8 // detachEvent needed property on element, by name of that event, to properly expose it to GC if ( typeof elem[ name ] === strundefined ) { elem[ name ] = null; } elem.detachEvent( name, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: IE < 9, Android < 4.0 src.returnValue === false ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( !e ) { return; } // If preventDefault exists, run it on the original event if ( e.preventDefault ) { e.preventDefault(); // Support: IE // Otherwise set the returnValue property of the original event to false } else { e.returnValue = false; } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( !e ) { return; } // If stopPropagation exists, run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // Support: IE // Set the cancelBubble property of the original event to true e.cancelBubble = true; }, stopImmediatePropagation: function() { var e = this.originalEvent; this.isImmediatePropagationStopped = returnTrue; if ( e && e.stopImmediatePropagation ) { e.stopImmediatePropagation(); } this.stopPropagation(); } }; // Create mouseenter/leave events using mouseover/out and event-time checks jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related !== target && !jQuery.contains( target, related )) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; }); // IE submit delegation if ( !support.submitBubbles ) { jQuery.event.special.submit = { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; if ( form && !jQuery._data( form, "submitBubbles" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submit_bubble = true; }); jQuery._data( form, "submitBubbles", true ); } }); // return undefined since we don't need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submit_bubble ) { delete event._submit_bubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( "submit", this.parentNode, event, true ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, "._submit" ); } }; } // IE change delegation and checkbox/radio fix if ( !support.changeBubbles ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { this._just_changed = true; } }); jQuery.event.add( this, "click._change", function( event ) { if ( this._just_changed && !event.isTrigger ) { this._just_changed = false; } // Allow triggered, simulated change events (#11500) jQuery.event.simulate( "change", this, event, true ); }); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event, true ); } }); jQuery._data( elem, "changeBubbles", true ); } }); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, "._change" ); return !rformElems.test( this.nodeName ); } }; } // Create "bubbling" focus and blur events if ( !support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler on the document while someone wants focusin/focusout var handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); }; jQuery.event.special[ fix ] = { setup: function() { var doc = this.ownerDocument || this, attaches = jQuery._data( doc, fix ); if ( !attaches ) { doc.addEventListener( orig, handler, true ); } jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); }, teardown: function() { var doc = this.ownerDocument || this, attaches = jQuery._data( doc, fix ) - 1; if ( !attaches ) { doc.removeEventListener( orig, handler, true ); jQuery._removeData( doc, fix ); } else { jQuery._data( doc, fix, attaches ); } } }; }); } jQuery.fn.extend({ on: function( types, selector, data, fn, /*INTERNAL*/ one ) { var type, origFn; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { this.on( type, selector, data, types[ type ], one ); } return this; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return this; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return this.each( function() { jQuery.event.add( this, types, fn, data, selector ); }); }, one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each(function() { jQuery.event.remove( this, types, fn, selector ); }); }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { var elem = this[0]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } }); function createSafeFragment( document ) { var list = nodeNames.split( "|" ), safeFrag = document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), rleadingWhitespace = /^\s+/, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, rtagName = /<([\w:]+)/, rtbody = /\s*$/g, // We have to close these tags to support XHTML (#13200) wrapMap = { option: [ 1, "" ], legend: [ 1, "
    ", "
    " ], area: [ 1, "", "" ], param: [ 1, "", "" ], thead: [ 1, "", "
    " ], tr: [ 2, "", "
    " ], col: [ 2, "", "
    " ], td: [ 3, "", "
    " ], // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
    ", "
    " ] }, safeFragment = createSafeFragment( document ), fragmentDiv = safeFragment.appendChild( document.createElement("div") ); wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; function getAll( context, tag ) { var elems, elem, i = 0, found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : undefined; if ( !found ) { for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { if ( !tag || jQuery.nodeName( elem, tag ) ) { found.push( elem ); } else { jQuery.merge( found, getAll( elem, tag ) ); } } } return tag === undefined || tag && jQuery.nodeName( context, tag ) ? jQuery.merge( [ context ], found ) : found; } // Used in buildFragment, fixes the defaultChecked property function fixDefaultChecked( elem ) { if ( rcheckableType.test( elem.type ) ) { elem.defaultChecked = elem.checked; } } // Support: IE<8 // Manipulating tables requires a tbody function manipulationTarget( elem, content ) { return jQuery.nodeName( elem, "table" ) && jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? elem.getElementsByTagName("tbody")[0] || elem.appendChild( elem.ownerDocument.createElement("tbody") ) : elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { elem.type = match[1]; } else { elem.removeAttribute("type"); } return elem; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var elem, i = 0; for ( ; (elem = elems[i]) != null; i++ ) { jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); } } function cloneCopyEvent( src, dest ) { if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { return; } var type, i, l, oldData = jQuery._data( src ), curData = jQuery._data( dest, oldData ), events = oldData.events; if ( events ) { delete curData.handle; curData.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } // make the cloned public data object a copy from the original if ( curData.data ) { curData.data = jQuery.extend( {}, curData.data ); } } function fixCloneNodeIssues( src, dest ) { var nodeName, e, data; // We do not need to do anything for non-Elements if ( dest.nodeType !== 1 ) { return; } nodeName = dest.nodeName.toLowerCase(); // IE6-8 copies events bound via attachEvent when using cloneNode. if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { data = jQuery._data( dest ); for ( e in data.events ) { jQuery.removeEvent( dest, e, data.handle ); } // Event data gets referenced instead of copied if the expando gets copied too dest.removeAttribute( jQuery.expando ); } // IE blanks contents when cloning scripts, and tries to evaluate newly-set text if ( nodeName === "script" && dest.text !== src.text ) { disableScript( dest ).text = src.text; restoreScript( dest ); // IE6-10 improperly clones children of object elements using classid. // IE10 throws NoModificationAllowedError if parent is null, #12132. } else if ( nodeName === "object" ) { if ( dest.parentNode ) { dest.outerHTML = src.outerHTML; } // This path appears unavoidable for IE9. When cloning an object // element in IE9, the outerHTML strategy above is not sufficient. // If the src has innerHTML and the destination does not, // copy the src.innerHTML into the dest.innerHTML. #10324 if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { dest.innerHTML = src.innerHTML; } } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isn't also set dest.defaultChecked = dest.checked = src.checked; // IE6-7 get confused and end up setting the value of a cloned // checkbox/radio button to an empty string instead of "on" if ( dest.value !== src.value ) { dest.value = src.value; } // IE6-8 fails to return the selected option to the default selected // state when cloning options } else if ( nodeName === "option" ) { dest.defaultSelected = dest.selected = src.defaultSelected; // IE6-8 fails to set the defaultValue to the correct value when // cloning other types of input fields } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { var destElements, node, clone, i, srcElements, inPage = jQuery.contains( elem.ownerDocument, elem ); if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { clone = elem.cloneNode( true ); // IE<=8 does not properly clone detached, unknown element nodes } else { fragmentDiv.innerHTML = elem.outerHTML; fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); } if ( (!support.noCloneEvent || !support.noCloneChecked) && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); // Fix all IE cloning issues for ( i = 0; (node = srcElements[i]) != null; ++i ) { // Ensure that the destination node is not null; Fixes #9587 if ( destElements[i] ) { fixCloneNodeIssues( node, destElements[i] ); } } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0; (node = srcElements[i]) != null; i++ ) { cloneCopyEvent( node, destElements[i] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } destElements = srcElements = node = null; // Return the cloned set return clone; }, buildFragment: function( elems, context, scripts, selection ) { var j, elem, contains, tmp, tag, tbody, wrap, l = elems.length, // Ensure a safe fragment safe = createSafeFragment( context ), nodes = [], i = 0; for ( ; i < l; i++ ) { elem = elems[ i ]; if ( elem || elem === 0 ) { // Add nodes directly if ( jQuery.type( elem ) === "object" ) { jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); // Convert non-html into a text node } else if ( !rhtml.test( elem ) ) { nodes.push( context.createTextNode( elem ) ); // Convert html into DOM nodes } else { tmp = tmp || safe.appendChild( context.createElement("div") ); // Deserialize a standard representation tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); wrap = wrapMap[ tag ] || wrapMap._default; tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; // Descend through wrappers to the right content j = wrap[0]; while ( j-- ) { tmp = tmp.lastChild; } // Manually add leading whitespace removed by IE if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); } // Remove IE's autoinserted from table fragments if ( !support.tbody ) { // String was a , *may* have spurious elem = tag === "table" && !rtbody.test( elem ) ? tmp.firstChild : // String was a bare or wrap[1] === "
    " && !rtbody.test( elem ) ? tmp : 0; j = elem && elem.childNodes.length; while ( j-- ) { if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { elem.removeChild( tbody ); } } } jQuery.merge( nodes, tmp.childNodes ); // Fix #12392 for WebKit and IE > 9 tmp.textContent = ""; // Fix #12392 for oldIE while ( tmp.firstChild ) { tmp.removeChild( tmp.firstChild ); } // Remember the top-level container for proper cleanup tmp = safe.lastChild; } } } // Fix #11356: Clear elements from fragment if ( tmp ) { safe.removeChild( tmp ); } // Reset defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) if ( !support.appendChecked ) { jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); } i = 0; while ( (elem = nodes[ i++ ]) ) { // #4087 - If origin and destination elements are the same, and this is // that element, do not do anything if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { continue; } contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( safe.appendChild( elem ), "script" ); // Preserve script evaluation history if ( contains ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( (elem = tmp[ j++ ]) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } tmp = null; return safe; }, cleanData: function( elems, /* internal */ acceptData ) { var elem, type, id, data, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, deleteExpando = support.deleteExpando, special = jQuery.event.special; for ( ; (elem = elems[i]) != null; i++ ) { if ( acceptData || jQuery.acceptData( elem ) ) { id = elem[ internalKey ]; data = id && cache[ id ]; if ( data ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } // Remove cache only if it was not already removed by jQuery.event.remove if ( cache[ id ] ) { delete cache[ id ]; // IE does not allow us to delete expando properties from nodes, // nor does it have a removeAttribute function on Document nodes; // we must handle all of these cases if ( deleteExpando ) { delete elem[ internalKey ]; } else if ( typeof elem.removeAttribute !== strundefined ) { elem.removeAttribute( internalKey ); } else { elem[ internalKey ] = null; } deletedIds.push( id ); } } } } } }); jQuery.fn.extend({ text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); }, null, value, arguments.length ); }, append: function() { return this.domManip( arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } }); }, prepend: function() { return this.domManip( arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } }); }, before: function() { return this.domManip( arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } }); }, after: function() { return this.domManip( arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } }); }, remove: function( selector, keepData /* Internal Use Only */ ) { var elem, elems = selector ? jQuery.filter( selector, this ) : this, i = 0; for ( ; (elem = elems[i]) != null; i++ ) { if ( !keepData && elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem ) ); } if ( elem.parentNode ) { if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { setGlobalEval( getAll( elem, "script" ) ); } elem.parentNode.removeChild( elem ); } } return this; }, empty: function() { var elem, i = 0; for ( ; (elem = this[i]) != null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); } // Remove any remaining nodes while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } // If this is a select, ensure that it displays empty (#12336) // Support: IE<9 if ( elem.options && jQuery.nodeName( elem, "select" ) ) { elem.options.length = 0; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map(function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); }); }, html: function( value ) { return access( this, function( value ) { var elem = this[ 0 ] || {}, i = 0, l = this.length; if ( value === undefined ) { return elem.nodeType === 1 ? elem.innerHTML.replace( rinlinejQuery, "" ) : undefined; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && ( support.htmlSerialize || !rnoshimcache.test( value ) ) && ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { value = value.replace( rxhtmlTag, "<$1>" ); try { for (; i < l; i++ ) { // Remove element nodes and prevent memory leaks elem = this[i] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch(e) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function() { var arg = arguments[ 0 ]; // Make the changes, replacing each context element with the new content this.domManip( arguments, function( elem ) { arg = this.parentNode; jQuery.cleanData( getAll( this ) ); if ( arg ) { arg.replaceChild( elem, this ); } }); // Force removal if there was no new content (e.g., from empty arguments) return arg && (arg.length || arg.nodeType) ? this : this.remove(); }, detach: function( selector ) { return this.remove( selector, true ); }, domManip: function( args, callback ) { // Flatten any nested arrays args = concat.apply( [], args ); var first, node, hasScripts, scripts, doc, fragment, i = 0, l = this.length, set = this, iNoClone = l - 1, value = args[0], isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( isFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return this.each(function( index ) { var self = set.eq( index ); if ( isFunction ) { args[0] = value.call( this, index, self.html() ); } self.domManip( args, callback ); }); } if ( l ) { fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } if ( first ) { scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( this[i], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Reenable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); } } else { jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); } } } } // Fix #11809: Avoid leaking memory fragment = first = null; } } return this; } }); jQuery.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, i = 0, ret = [], insert = jQuery( selector ), last = insert.length - 1; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone(true); jQuery( insert[i] )[ original ]( elems ); // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; }); var iframe, elemdisplay = {}; /** * Retrieve the actual display of a element * @param {String} name nodeName of the element * @param {Object} doc Document object */ // Called only from within defaultDisplay function actualDisplay( name, doc ) { var style, elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), // getDefaultComputedStyle might be reliably used only on attached element display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? // Use of this method is a temporary fix (more like optmization) until something better comes along, // since it was removed from specification and supported only in FF style.display : jQuery.css( elem[ 0 ], "display" ); // We don't have any data stored on the element, // so use "detach" method as fast way to get rid of the element elem.detach(); return display; } /** * Try to determine the default display value of an element * @param {String} nodeName */ function defaultDisplay( nodeName ) { var doc = document, display = elemdisplay[ nodeName ]; if ( !display ) { display = actualDisplay( nodeName, doc ); // If the simple way fails, read from inside an iframe if ( display === "none" || !display ) { // Use the already-created iframe if possible iframe = (iframe || jQuery( "