[
  {
    "path": ".gitignore",
    "content": ".sass-cache\nnode_modules\n\nsass/.csscomb.json\nsass/.csslintrc\n\njs/.jscsrc\njs/.jshintrc\n"
  },
  {
    "path": "Gruntfile.js",
    "content": "/*!\n * Mui's Gruntfile\n */\n\n/* jshint node: true */\nmodule.exports = function(grunt) {\n\t'use strict';\n\n\t// Force use of Unix newlines\n\tgrunt.util.linefeed = '\\n';\n\n\tRegExp.quote = function(string) {\n\t\treturn string.replace(/[-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t};\n\n\tvar generateNamespace = require('./grunt/mui-namespace-generator.js');\n\t// Project configuration.\n\tgrunt.initConfig({\n\t\tpkg: grunt.file.readJSON('package.json'),\n\n\t\t// Metadata.\n\t\tmeta: {\n\t\t\tlibPath: 'lib/',\n\t\t\tdistPath: 'dist/',\n\t\t\tjsPath: 'js/',\n\t\t\tsassPath: 'sass/',\n\t\t\texamplesPath: 'examples/hello-mui/'\n\t\t},\n\n\t\tbanner: '/*!\\n' +\n\t\t\t' * =====================================================\\n' +\n\t\t\t' * Mui v<%= pkg.version %> (<%= pkg.homepage %>)\\n' +\n\t\t\t' * =====================================================\\n' +\n\t\t\t' */\\n',\n\n\t\tclean: {\n\t\t\tall: ['<%= meta.distPath %>'],\n\t\t\tsourceMap: ['<%= meta.distPath %>css/*.map']\n\t\t},\n\n\t\tconcat: {\n\t\t\tmui: {\n\t\t\t\toptions: {\n\t\t\t\t\tbanner: '<%= banner %>'\n\t\t\t\t},\n\t\t\t\tsrc: [\n\t\t\t\t\t'js/mui.js',\n\t\t\t\t\t'js/mui.detect.js',\n\t\t\t\t\t'js/mui.detect.5+.js',\n\t\t\t\t\t'js/mui.event.js',\n\t\t\t\t\t'js/mui.target.js',\n\t\t\t\t\t'js/mui.fixed.js',\n\t\t\t\t\t'js/mui.fixed.bind.js',\n\t\t\t\t\t'js/mui.fixed.classlist.js',\n\t\t\t\t\t'js/mui.fixed.animation.js',\n\t\t\t\t\t'js/mui.fixed.fastclick.js',\n\t\t\t\t\t'js/mui.fixed.keyboard.js',\n\t\t\t\t\t'js/mui.namespace.js',\n\t\t\t\t\t'js/mui.gestures.js',\n\t\t\t\t\t'js/mui.gestures.flick.js',\n\t\t\t\t\t'js/mui.gestures.swipe.js',\n\t\t\t\t\t'js/mui.gestures.drag.js',\n\t\t\t\t\t'js/mui.gestures.tap.js',\n\t\t\t\t\t'js/mui.gestures.longtap.js',\n\t\t\t\t\t'js/mui.gestures.hold.js',\n\t\t\t\t\t'js/mui.gestures.pinch.js',\n\t\t\t\t\t'js/mui.init.js',\n\t\t\t\t\t'js/mui.init.5+.js',\n\t\t\t\t\t'js/mui.back.js',\n\t\t\t\t\t'js/mui.back.5+.js',\n\t\t\t\t\t'js/mui.init.pullrefresh.js',\n\t\t\t\t\t'js/mui.ajax.js',\n\t\t\t\t\t'js/mui.ajax.5+.js',\n\t\t\t\t\t'js/mui.layout.js',\n\t\t\t\t\t'js/mui.animation.js',\n\t\t\t\t\t'js/mui.class.js',\n\t\t\t\t\t'js/mui.pullrefresh.js',\n\t\t\t\t\t'js/mui.class.scroll.js',\n\t\t\t\t\t'js/mui.class.scroll.pullrefresh.js',\n\t\t\t\t\t'js/mui.class.scroll.slider.js',\n\t\t\t\t\t'js/mui.pullrefresh.5+.js',\n\t\t\t\t\t'js/mui.offcanvas.js',\n\t\t\t\t\t'js/actions.js',\n\t\t\t\t\t'js/modals.js',\n\t\t\t\t\t'js/popovers.js',\n\t\t\t\t\t'js/segmented-controllers.js',\n\t\t\t\t\t'js/switches.js',\n\t\t\t\t\t'js/tableviews.js',\n\t\t\t\t\t'js/mui.dialog.alert.js',\n\t\t\t\t\t'js/mui.dialog.confirm.js',\n\t\t\t\t\t'js/mui.dialog.prompt.js',\n\t\t\t\t\t'js/mui.dialog.toast.js',\n\t\t\t\t\t'js/mui.popup.js',\n\t\t\t\t\t'js/mui.progressbar.js',\n\t\t\t\t\t'js/input.plugin.js',\n\t\t\t\t\t'js/mui.transparent.js',\n\t\t\t\t\t'js/mui.number.js',\n\t\t\t\t\t'js/mui.button.js'\n\t\t\t\t],\n\t\t\t\tdest: '<%= meta.distPath %>js/<%= pkg.name %>.js',\n\t\t\t}\n\t\t},\n\n\t\tsass: {\n\t\t\toptions: {\n\t\t\t\tbanner: '<%= banner %>',\n\t\t\t\tstyle: 'expanded',\n\t\t\t\tunixNewlines: true\n\t\t\t},\n\t\t\tdist: {\n\t\t\t\tfiles: {\n\t\t\t\t\t'<%= meta.distPath %>css/<%= pkg.name %>.css': 'sass/mui.scss',\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tcsscomb: {\n\t\t\toptions: {\n\t\t\t\tconfig: 'sass/.csscomb.json'\n\t\t\t},\n\t\t\tdist: {\n\t\t\t\tfiles: {\n\t\t\t\t\t'<%= meta.distPath %>/css/<%= pkg.name %>.css': '<%= meta.distPath %>/css/<%= pkg.name %>.css'\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tcopy: {\n\t\t\tfonts: {\n\t\t\t\texpand: true,\n\t\t\t\tsrc: 'fonts/mui*.ttf',\n\t\t\t\tdest: '<%= meta.distPath %>/'\n\t\t\t},\n\t\t\texamples: {\n\t\t\t\texpand: true,\n\t\t\t\tcwd: '<%= meta.distPath %>',\n\t\t\t\tsrc: ['**/mui*'],\n\t\t\t\tdest: '<%= meta.examplesPath %>'\n\t\t\t}\n\t\t},\n\n\t\tcssmin: {\n\t\t\toptions: {\n\t\t\t\tbanner: '', // set to empty; see bellow\n\t\t\t\tkeepSpecialComments: '*', // set to '*' because we already add the banner in sass\n\t\t\t\tsourceMap: false\n\t\t\t},\n\t\t\tmui: {\n\t\t\t\tsrc: '<%= meta.distPath %>css/<%= pkg.name %>.css',\n\t\t\t\tdest: '<%= meta.distPath %>css/<%= pkg.name %>.min.css'\n\t\t\t}\n\t\t},\n\n\t\tuglify: {\n\t\t\toptions: {\n\t\t\t\tbanner: '<%= banner %>',\n\t\t\t\tcompress: {},\n\t\t\t\tmangle: true,\n\t\t\t\tpreserveComments: false\n\t\t\t},\n\t\t\tmui: {\n\t\t\t\tsrc: '<%= concat.mui.dest %>',\n\t\t\t\tdest: '<%= meta.distPath %>js/<%= pkg.name %>.min.js'\n\t\t\t}\n\t\t},\n\n\t\twatch: {\n\t\t\toptions: {\n\t\t\t\tdateFormat: function(time) {\n\t\t\t\t\tgrunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString());\n\t\t\t\t\tgrunt.log.writeln('Waiting for more changes...');\n\t\t\t\t},\n\t\t\t\tlivereload: true\n\t\t\t},\n\t\t\tscripts: {\n\t\t\t\tfiles: [\n\t\t\t\t\t'<%= meta.sassPath %>/**/*.scss',\n\t\t\t\t\t'<%= meta.jsPath %>/**/*.js',\n\t\t\t\t],\n\t\t\t\ttasks: 'dist'\n\t\t\t}\n\t\t},\n\n\t\tjshint: {\n\t\t\toptions: {\n\t\t\t\tjshintrc: 'js/.jshintrc'\n\t\t\t},\n\t\t\tgrunt: {\n\t\t\t\tsrc: ['Gruntfile.js', 'grunt/*.js']\n\t\t\t},\n\t\t\tsrc: {\n\t\t\t\tsrc: 'js/*.js'\n\t\t\t}\n\t\t},\n\n\t\tjscs: {\n\t\t\toptions: {\n\t\t\t\tconfig: 'js/.jscsrc'\n\t\t\t},\n\t\t\tgrunt: {\n\t\t\t\tsrc: '<%= jshint.grunt.src %>'\n\t\t\t},\n\t\t\tsrc: {\n\t\t\t\tsrc: '<%= jshint.src.src %>'\n\t\t\t},\n\t\t\tdocs: {\n\t\t\t\tsrc: '<%= jshint.docs.src %>'\n\t\t\t}\n\t\t},\n\n\t\tcsslint: {\n\t\t\toptions: {\n\t\t\t\tcsslintrc: 'sass/.csslintrc'\n\t\t\t},\n\t\t\tsrc: [\n\t\t\t\t'<%= meta.distPath %>/css/<%= pkg.name %>.css',\n\t\t\t]\n\t\t},\n\t\tsed: {\n\t\t\tversionNumber: {\n\t\t\t\tpattern: (function() {\n\t\t\t\t\tvar old = grunt.option('oldver');\n\t\t\t\t\treturn old ? RegExp.quote(old) : old;\n\t\t\t\t})(),\n\t\t\t\treplacement: grunt.option('newver'),\n\t\t\t\trecursive: true\n\t\t\t}\n\t\t}\n\t});\n\t// Load the plugins\n\trequire('load-grunt-tasks')(grunt, {\n\t\tscope: 'devDependencies'\n\t});\n\trequire('time-grunt')(grunt);\n\t// Default task(s).\n\tgrunt.registerTask('cleanAll', ['clean']);\n\tgrunt.registerTask('dist-css', ['sass', 'csscomb', 'cssmin', 'clean:sourceMap']);\n\tgrunt.registerTask('dist-js', ['concat', 'build-namespace', 'uglify']);\n\tgrunt.registerTask('dist', ['clean:all', 'dist-css', 'dist-js', 'copy']);\n\tgrunt.registerTask('build', ['dist']);\n\tgrunt.registerTask('default', ['dist']);\n\n\n\tgrunt.registerTask('build-namespace', generateNamespace);\n\n\tgrunt.registerTask('server', ['dist','watch']);\n\n\n\n\t// Version numbering task.\n\t// grunt change-version-number --oldver=A.B.C --newver=X.Y.Z\n\t// This can be overzealous, so its changes should always be manually reviewed!\n\tgrunt.registerTask('change-version-number', 'sed');\n\n\tgrunt.event.on('watch', function(action, filepath, target) {\n\t\tgrunt.log.writeln(target + ': ' + filepath + ' has ' + action);\n\t});\n};"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 connors and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "README.md",
    "content": "mui\n===\n\n性能和体验的差距，一直是mobile app开发者放弃HTML5的首要原因。 浏览器天生的切页白屏、不忍直视的转页动画、浮动元素的抖动、无法流畅下拉刷新等问题，这些都让HTML5开发者倍感挫败，尤其拿到Android低端机运行，摔手机的心都有； 另一方面，浏览器默认控件样式又少又丑，制作一个漂亮的控件非常麻烦，也有一些制作简单的ui框架但性能低下。\n\nmui框架有效的解决了这些问题，这是一个可以方便开发出高性能App的框架，也是目前最接近原生App效果的框架。\n\n赞助我们\n------\n一个手艺人需要3万个粉丝养活，希望你能成为其中之一，[前往赞助](https://dev.dcloud.net.cn/sponsor/?channel=mui)\n\n参考文档\n------\n[mui官网](http://dev.dcloud.net.cn/mui/)文档使用[Jekyll](http://jekyllrb.com) 构建，[立即查看](http://dev.dcloud.net.cn/mui/)。\n\n快速体验\n--------\n[在线下载](http://www.dcloud.io/hellomui)或扫描如下二维码下载Hello MUI，可在手机上体验MUI的控件UI及能力展示；\n\n<a href=\"http://www.dcloud.io/hellomui\" target=\"_blank\">\n<img src=\"http://www.dcloud.io/images/code-m.png\" width=\"100\" />\n</a>\n\n\n在线交流\n--------\n若你在使用过程中有任何经验、想法、疑惑，都可以在[问答社区](http://ask.dcloud.net.cn/topic/mui) 发起文章，和其它mui用户一起交流；\n\nLicense\n-------\n\nmui遵循MIT License；\n\n开发工具\n-------\nmui组件已被封装成[HBuilder](http://www.dcloud.io)代码块，只需要简单几个字符，就可以快速生成各个组件对应的HTML代码，因此和[Hbuilder](http://www.dcloud.io)两个一起用，效果会更好；\n\n<a href=\"http://www.dcloud.io/\" target=\"_blank\">\n<img src=\"http://www.dcloud.io/img/text-b.png\" width=\"240\" />\n</a>\n"
  },
  {
    "path": "dist/css/mui.css",
    "content": "/*!\n * =====================================================\n * Mui v3.7.3 (http://dev.dcloud.net.cn/mui)\n * =====================================================\n */\n\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\nhtml\n{\n    font-family: sans-serif;\n\n    -webkit-text-size-adjust: 100%;\n}\n\nbody\n{\n    margin: 0;\n}\n\nbody::after\n{\n    position: fixed;\n    top: -1000px;\n    left: -1000px;\n\n    content: '';\n    -webkit-animation: shadow-preload .1s;\n            animation: shadow-preload .1s;\n    -webkit-animation-delay: 3s;\n            animation-delay: 3s;\n}\n\n@-webkit-keyframes shadow-preload\n{\n    0%\n    {\n        background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);\n    }\n\n    100%\n    {\n        background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);\n    }\n}\n@keyframes shadow-preload\n{\n    0%\n    {\n        background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);\n    }\n\n    100%\n    {\n        background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);\n    }\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary\n{\n    display: block;\n}\n\naudio,\ncanvas,\nprogress,\nvideo\n{\n    display: inline-block;\n\n    vertical-align: baseline;\n}\n\naudio:not([controls])\n{\n    display: none;\n\n    height: 0;\n}\n\n[hidden],\ntemplate\n{\n    display: none;\n}\n\na\n{\n    background: transparent;\n}\n\na:active,\na:hover\n{\n    outline: 0;\n}\n\nabbr[title]\n{\n    border-bottom: 1px dotted;\n}\n\nb,\nstrong\n{\n    font-weight: bold;\n}\n\ndfn\n{\n    font-style: italic;\n}\n\nh1\n{\n    font-size: 2em;\n\n    margin: .67em 0;\n}\n\nmark\n{\n    color: #000;\n    background: #ff0;\n}\n\nsmall\n{\n    font-size: 80%;\n}\n\nsub,\nsup\n{\n    font-size: 75%;\n    line-height: 0;\n\n    position: relative;\n\n    vertical-align: baseline;\n}\n\nsup\n{\n    top: -.5em;\n}\n\nsub\n{\n    bottom: -.25em;\n}\n\nimg\n{\n    border: 0;\n}\n\nsvg:not(:root)\n{\n    overflow: hidden;\n}\n\nfigure\n{\n    margin: 1em 40px;\n}\n\nhr\n{\n    box-sizing: content-box;\n    height: 0;\n}\n\npre\n{\n    overflow: auto;\n}\n\ncode,\nkbd,\npre,\nsamp\n{\n    font-family: monospace, monospace;\n    font-size: 1em;\n}\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea\n{\n    font: inherit;\n\n    margin: 0;\n\n    color: inherit;\n}\n\nbutton\n{\n    overflow: visible;\n}\n\nbutton,\nselect\n{\n    text-transform: none;\n}\n\nbutton,\nhtml input[type='button'],\ninput[type='reset'],\ninput[type='submit']\n{\n    cursor: pointer;\n\n    -webkit-appearance: button;\n}\n\nbutton[disabled],\nhtml input[disabled]\n{\n    cursor: default;\n}\n\ninput\n{\n    line-height: normal;\n}\n\ninput[type='checkbox'],\ninput[type='radio']\n{\n    box-sizing: border-box;\n    padding: 0;\n}\n\ninput[type='number']::-webkit-inner-spin-button,\ninput[type='number']::-webkit-outer-spin-button\n{\n    height: auto;\n}\n\ninput[type='search']\n{\n    -webkit-box-sizing: content-box;\n            box-sizing: content-box;\n\n    -webkit-appearance: textfield;\n}\n\ninput[type='search']::-webkit-search-cancel-button,\ninput[type='search']::-webkit-search-decoration\n{\n    -webkit-appearance: none;\n}\n\nfieldset\n{\n    margin: 0 2px;\n    padding: .35em .625em .75em;\n\n    border: 1px solid #c0c0c0;\n}\n\nlegend\n{\n    padding: 0;\n\n    border: 0;\n}\n\ntextarea\n{\n    overflow: auto;\n}\n\noptgroup\n{\n    font-weight: bold;\n}\n\ntable\n{\n    border-spacing: 0;\n    border-collapse: collapse;\n}\n\ntd,\nth\n{\n    padding: 0;\n}\n\n*\n{\n    -webkit-box-sizing: border-box;\n            box-sizing: border-box;\n\n    -webkit-user-select: none;\n\n    outline: none;\n\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent;\n}\n\nbody\n{\n    font-family: 'Helvetica Neue', Helvetica, sans-serif;\n    font-size: 17px;\n    line-height: 21px;\n\n    color: #000;\n    background-color: #efeff4;\n\n    -webkit-overflow-scrolling: touch;\n}\n\na\n{\n    text-decoration: none;\n\n    color: #007aff;\n}\na:active\n{\n    color: #0062cc;\n}\n\n.mui-content\n{\n    background-color: #efeff4;\n\n    -webkit-overflow-scrolling: touch;\n}\n\n.mui-bar-nav ~ .mui-content\n{\n    padding-top: 44px;\n}\n.mui-bar-nav ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    top: 44px;\n}\n\n.mui-bar-header-secondary ~ .mui-content\n{\n    padding-top: 88px;\n}\n.mui-bar-header-secondary ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    top: 88px;\n}\n\n.mui-bar-footer ~ .mui-content\n{\n    padding-bottom: 44px;\n}\n.mui-bar-footer ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    bottom: 44px;\n}\n\n.mui-bar-footer-secondary ~ .mui-content\n{\n    padding-bottom: 88px;\n}\n.mui-bar-footer-secondary ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    bottom: 88px;\n}\n\n.mui-bar-tab ~ .mui-content\n{\n    padding-bottom: 50px;\n}\n.mui-bar-tab ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    bottom: 50px;\n}\n\n.mui-bar-footer-secondary-tab ~ .mui-content\n{\n    padding-bottom: 94px;\n}\n.mui-bar-footer-secondary-tab ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    bottom: 94px;\n}\n\n.mui-content-padded\n{\n    margin: 10px;\n}\n\n.mui-inline\n{\n    display: inline-block;\n\n    vertical-align: top;\n}\n\n.mui-block\n{\n    display: block !important;\n}\n\n.mui-visibility\n{\n    visibility: visible !important;\n}\n\n.mui-hidden\n{\n    display: none !important;\n}\n\n.mui-ellipsis\n{\n    overflow: hidden;\n\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n.mui-ellipsis-2\n{\n    display: -webkit-box;\n    overflow: hidden;\n\n    white-space: normal !important;\n    text-overflow: ellipsis;\n    word-wrap: break-word;\n\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n}\n\n.mui-table\n{\n    display: table;\n\n    width: 100%;\n\n    table-layout: fixed;\n}\n\n.mui-table-cell\n{\n    position: relative;\n\n    display: table-cell;\n}\n\n.mui-text-left\n{\n    text-align: left !important;\n}\n\n.mui-text-center\n{\n    text-align: center !important;\n}\n\n.mui-text-justify\n{\n    text-align: justify !important;\n}\n\n.mui-text-right\n{\n    text-align: right !important;\n}\n\n.mui-pull-left\n{\n    float: left;\n}\n\n.mui-pull-right\n{\n    float: right;\n}\n\n.mui-list-unstyled\n{\n    padding-left: 0;\n\n    list-style: none;\n}\n\n.mui-list-inline\n{\n    margin-left: -5px;\n    padding-left: 0;\n\n    list-style: none;\n}\n\n.mui-list-inline > li\n{\n    display: inline-block;\n\n    padding-right: 5px;\n    padding-left: 5px;\n}\n\n.mui-clearfix:before, .mui-clearfix:after\n{\n    display: table;\n\n    content: ' ';\n}\n.mui-clearfix:after\n{\n    clear: both;\n}\n\n.mui-bg-primary\n{\n    background-color: #007aff;\n}\n\n.mui-bg-positive\n{\n    background-color: #4cd964;\n}\n\n.mui-bg-negative\n{\n    background-color: #dd524d;\n}\n\n.mui-error\n{\n    margin: 88px 35px;\n    padding: 10px;\n\n    border-radius: 6px;\n    background-color: #bbb;\n}\n\n.mui-subtitle\n{\n    font-size: 15px;\n}\n\nh1, h2, h3, h4, h5, h6\n{\n    line-height: 1;\n\n    margin-top: 5px;\n    margin-bottom: 5px;\n}\n\nh1, .mui-h1\n{\n    font-size: 36px;\n}\n\nh2, .mui-h2\n{\n    font-size: 30px;\n}\n\nh3, .mui-h3\n{\n    font-size: 24px;\n}\n\nh4, .mui-h4\n{\n    font-size: 18px;\n}\n\nh5, .mui-h5\n{\n    font-size: 14px;\n    font-weight: normal;\n\n    color: #8f8f94;\n}\n\nh6, .mui-h6\n{\n    font-size: 12px;\n    font-weight: normal;\n\n    color: #8f8f94;\n}\n\np\n{\n    font-size: 14px;\n\n    margin-top: 0;\n    margin-bottom: 10px;\n\n    color: #8f8f94;\n}\n\n.mui-row:before, .mui-row:after\n{\n    display: table;\n\n    content: ' ';\n}\n.mui-row:after\n{\n    clear: both;\n}\n\n.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\n{\n    position: relative;\n\n    min-height: 1px;\n}\n\n.mui-row > [class*='mui-col-']\n{\n    float: left;\n}\n\n.mui-col-xs-12\n{\n    width: 100%;\n}\n\n.mui-col-xs-11\n{\n    width: 91.66666667%;\n}\n\n.mui-col-xs-10\n{\n    width: 83.33333333%;\n}\n\n.mui-col-xs-9\n{\n    width: 75%;\n}\n\n.mui-col-xs-8\n{\n    width: 66.66666667%;\n}\n\n.mui-col-xs-7\n{\n    width: 58.33333333%;\n}\n\n.mui-col-xs-6\n{\n    width: 50%;\n}\n\n.mui-col-xs-5\n{\n    width: 41.66666667%;\n}\n\n.mui-col-xs-4\n{\n    width: 33.33333333%;\n}\n\n.mui-col-xs-3\n{\n    width: 25%;\n}\n\n.mui-col-xs-2\n{\n    width: 16.66666667%;\n}\n\n.mui-col-xs-1\n{\n    width: 8.33333333%;\n}\n\n@media (min-width: 400px)\n{\n    .mui-col-sm-12\n    {\n        width: 100%;\n    }\n\n    .mui-col-sm-11\n    {\n        width: 91.66666667%;\n    }\n\n    .mui-col-sm-10\n    {\n        width: 83.33333333%;\n    }\n\n    .mui-col-sm-9\n    {\n        width: 75%;\n    }\n\n    .mui-col-sm-8\n    {\n        width: 66.66666667%;\n    }\n\n    .mui-col-sm-7\n    {\n        width: 58.33333333%;\n    }\n\n    .mui-col-sm-6\n    {\n        width: 50%;\n    }\n\n    .mui-col-sm-5\n    {\n        width: 41.66666667%;\n    }\n\n    .mui-col-sm-4\n    {\n        width: 33.33333333%;\n    }\n\n    .mui-col-sm-3\n    {\n        width: 25%;\n    }\n\n    .mui-col-sm-2\n    {\n        width: 16.66666667%;\n    }\n\n    .mui-col-sm-1\n    {\n        width: 8.33333333%;\n    }\n}\n.mui-scroll-wrapper\n{\n    position: absolute;\n    z-index: 2;\n    top: 0;\n    bottom: 0;\n    left: 0;\n\n    overflow: hidden;\n\n    width: 100%;\n}\n\n.mui-scroll\n{\n    position: absolute;\n    z-index: 1;\n\n    width: 100%;\n}\n\n.mui-scrollbar\n{\n    position: absolute;\n    z-index: 9998;\n\n    overflow: hidden;\n\n    -webkit-transition: 500ms;\n            transition: 500ms;\n    transform: translateZ(0px);\n    pointer-events: none;\n\n    opacity: 0;\n}\n\n.mui-scrollbar-vertical\n{\n    top: 0;\n    right: 1px;\n    bottom: 2px;\n\n    width: 4px;\n}\n.mui-scrollbar-vertical .mui-scrollbar-indicator\n{\n    width: 100%;\n}\n\n.mui-scrollbar-horizontal\n{\n    right: 2px;\n    bottom: 0;\n    left: 2px;\n\n    height: 4px;\n}\n.mui-scrollbar-horizontal .mui-scrollbar-indicator\n{\n    height: 100%;\n}\n\n.mui-scrollbar-indicator\n{\n    position: absolute;\n\n    display: block;\n\n    box-sizing: border-box;\n\n    -webkit-transition: .01s cubic-bezier(.1, .57, .1, 1);\n            transition: .01s cubic-bezier(.1, .57, .1, 1);\n    transform: translate(0px, 0px) translateZ(0px);\n\n    border: 1px solid rgba(255, 255, 255, .80196);\n    border-radius: 2px;\n    background: rgba(0, 0, 0, .39804);\n}\n\n.mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll-wrapper, .mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll-wrapper\n{\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n\n    overflow: hidden;\n\n    width: 100%;\n}\n.mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll, .mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll\n{\n    position: absolute;\n\n    width: 100%;\n}\n.mui-plus-pullrefresh .mui-scroll-wrapper, .mui-plus-pullrefresh .mui-slider-group\n{\n    position: static;\n    top: auto;\n    bottom: auto;\n    left: auto;\n\n    overflow: auto;\n\n    width: auto;\n}\n.mui-plus-pullrefresh .mui-slider-group\n{\n    overflow: visible;\n}\n.mui-plus-pullrefresh .mui-scroll\n{\n    position: static;\n\n    width: auto;\n}\n\n.mui-off-canvas-wrap .mui-bar\n{\n    position: absolute !important;\n\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-off-canvas-wrap\n{\n    position: relative;\n    z-index: 1;\n\n    overflow: hidden;\n\n    width: 100%;\n    height: 100%;\n}\n.mui-off-canvas-wrap .mui-inner-wrap\n{\n    position: relative;\n    z-index: 1;\n\n    width: 100%;\n    height: 100%;\n}\n.mui-off-canvas-wrap .mui-inner-wrap.mui-transitioning\n{\n    -webkit-transition: -webkit-transform 350ms;\n            transition:         transform 350ms cubic-bezier(.165, .84, .44, 1);\n}\n.mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-left\n{\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n}\n.mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-right\n{\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n}\n.mui-off-canvas-wrap.mui-active\n{\n    overflow: hidden;\n\n    height: 100%;\n}\n.mui-off-canvas-wrap.mui-active .mui-off-canvas-backdrop\n{\n    position: absolute;\n    z-index: 998;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    display: block;\n\n    transition: background 350ms cubic-bezier(.165, .84, .44, 1);\n\n    background: rgba(0, 0, 0, .4);\n    box-shadow: -4px 0 4px rgba(0, 0, 0, .5), 4px 0 4px rgba(0, 0, 0, .5);\n\n    -webkit-tap-highlight-color: transparent;\n}\n.mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-right\n{\n    z-index: 10000 !important;\n\n    -webkit-transform: translate3d(100%, 0px, 0px);\n}\n.mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-left\n{\n    z-index: 10000 !important;\n\n    -webkit-transform: translate3d(-100%, 0px, 0px);\n}\n\n.mui-off-canvas-left, .mui-off-canvas-right\n{\n    position: absolute;\n    z-index: -1;\n    top: 0;\n    bottom: 0;\n\n    visibility: hidden;\n\n    box-sizing: content-box;\n    width: 70%;\n    min-height: 100%;\n\n    background: #333;\n\n    -webkit-overflow-scrolling: touch;\n}\n.mui-off-canvas-left.mui-transitioning, .mui-off-canvas-right.mui-transitioning\n{\n    -webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1);\n            transition:         transform 350ms cubic-bezier(.165, .84, .44, 1);\n}\n\n.mui-off-canvas-left\n{\n    left: 0;\n}\n\n.mui-off-canvas-right\n{\n    right: 0;\n}\n\n.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable\n{\n    background-color: #333;\n}\n.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\n{\n    width: 80%;\n\n    -webkit-transform: scale(.8);\n            transform: scale(.8);\n\n    opacity: .1;\n}\n.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\n{\n    -webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1);\n            transition:         transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1);\n}\n.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-left\n{\n    -webkit-transform-origin: -100%;\n            transform-origin: -100%;\n}\n.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-right\n{\n    -webkit-transform-origin: 200%;\n            transform-origin: 200%;\n}\n.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active > .mui-inner-wrap\n{\n    -webkit-transform: scale(.8);\n            transform: scale(.8);\n}\n.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\n{\n    -webkit-transform: scale(1);\n            transform: scale(1);\n\n    opacity: 1;\n}\n\n.mui-loading .mui-spinner\n{\n    display: block;\n\n    margin: 0 auto;\n}\n\n.mui-spinner\n{\n    display: inline-block;\n\n    width: 24px;\n    height: 24px;\n\n    -webkit-transform-origin: 50%;\n            transform-origin: 50%;\n    -webkit-animation: spinner-spin 1s step-end infinite;\n            animation: spinner-spin 1s step-end infinite;\n}\n\n.mui-spinner:after\n{\n    display: block;\n\n    width: 100%;\n    height: 100%;\n\n    content: '';\n\n    background-image: url('data:image/svg+xml;charset=utf-8,<svg viewBox=\\'0 0 120 120\\' xmlns=\\'http://www.w3.org/2000/svg\\' xmlns:xlink=\\'http://www.w3.org/1999/xlink\\'><defs><line id=\\'l\\' x1=\\'60\\' x2=\\'60\\' y1=\\'7\\' y2=\\'27\\' stroke=\\'%236c6c6c\\' stroke-width=\\'11\\' stroke-linecap=\\'round\\'/></defs><g><use xlink:href=\\'%23l\\' opacity=\\'.27\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(30 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(60 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(90 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(120 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(150 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.37\\' transform=\\'rotate(180 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.46\\' transform=\\'rotate(210 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.56\\' transform=\\'rotate(240 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.66\\' transform=\\'rotate(270 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.75\\' transform=\\'rotate(300 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.85\\' transform=\\'rotate(330 60,60)\\'/></g></svg>');\n    background-repeat: no-repeat;\n    background-position: 50%;\n    background-size: 100%;\n}\n\n.mui-spinner-white:after\n{\n    background-image: url('data:image/svg+xml;charset=utf-8,<svg viewBox=\\'0 0 120 120\\' xmlns=\\'http://www.w3.org/2000/svg\\' xmlns:xlink=\\'http://www.w3.org/1999/xlink\\'><defs><line id=\\'l\\' x1=\\'60\\' x2=\\'60\\' y1=\\'7\\' y2=\\'27\\' stroke=\\'%23fff\\' stroke-width=\\'11\\' stroke-linecap=\\'round\\'/></defs><g><use xlink:href=\\'%23l\\' opacity=\\'.27\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(30 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(60 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(90 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(120 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(150 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.37\\' transform=\\'rotate(180 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.46\\' transform=\\'rotate(210 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.56\\' transform=\\'rotate(240 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.66\\' transform=\\'rotate(270 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.75\\' transform=\\'rotate(300 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.85\\' transform=\\'rotate(330 60,60)\\'/></g></svg>');\n}\n\n@-webkit-keyframes spinner-spin\n{\n    0%\n    {\n        -webkit-transform: rotate(0deg);\n    }\n\n    8.33333333%\n    {\n        -webkit-transform: rotate(30deg);\n    }\n\n    16.66666667%\n    {\n        -webkit-transform: rotate(60deg);\n    }\n\n    25%\n    {\n        -webkit-transform: rotate(90deg);\n    }\n\n    33.33333333%\n    {\n        -webkit-transform: rotate(120deg);\n    }\n\n    41.66666667%\n    {\n        -webkit-transform: rotate(150deg);\n    }\n\n    50%\n    {\n        -webkit-transform: rotate(180deg);\n    }\n\n    58.33333333%\n    {\n        -webkit-transform: rotate(210deg);\n    }\n\n    66.66666667%\n    {\n        -webkit-transform: rotate(240deg);\n    }\n\n    75%\n    {\n        -webkit-transform: rotate(270deg);\n    }\n\n    83.33333333%\n    {\n        -webkit-transform: rotate(300deg);\n    }\n\n    91.66666667%\n    {\n        -webkit-transform: rotate(330deg);\n    }\n\n    100%\n    {\n        -webkit-transform: rotate(360deg);\n    }\n}\n@keyframes spinner-spin\n{\n    0%\n    {\n        transform: rotate(0deg);\n    }\n\n    8.33333333%\n    {\n        transform: rotate(30deg);\n    }\n\n    16.66666667%\n    {\n        transform: rotate(60deg);\n    }\n\n    25%\n    {\n        transform: rotate(90deg);\n    }\n\n    33.33333333%\n    {\n        transform: rotate(120deg);\n    }\n\n    41.66666667%\n    {\n        transform: rotate(150deg);\n    }\n\n    50%\n    {\n        transform: rotate(180deg);\n    }\n\n    58.33333333%\n    {\n        transform: rotate(210deg);\n    }\n\n    66.66666667%\n    {\n        transform: rotate(240deg);\n    }\n\n    75%\n    {\n        transform: rotate(270deg);\n    }\n\n    83.33333333%\n    {\n        transform: rotate(300deg);\n    }\n\n    91.66666667%\n    {\n        transform: rotate(330deg);\n    }\n\n    100%\n    {\n        transform: rotate(360deg);\n    }\n}\ninput[type='button'],\ninput[type='submit'],\ninput[type='reset'],\nbutton,\n.mui-btn\n{\n    font-size: 14px;\n    font-weight: 400;\n    line-height: 1.42;\n\n    position: relative;\n\n    display: inline-block;\n\n    margin-bottom: 0;\n    padding: 6px 12px;\n\n    cursor: pointer;\n    -webkit-transition: all;\n            transition: all;\n    -webkit-transition-timing-function: linear;\n            transition-timing-function: linear;\n    -webkit-transition-duration: .2s;\n            transition-duration: .2s;\n    text-align: center;\n    vertical-align: top;\n    white-space: nowrap;\n\n    color: #333;\n    border: 1px solid #ccc;\n    border-radius: 3px;\n    border-top-left-radius: 3px;\n    border-top-right-radius: 3px;\n    border-bottom-right-radius: 3px;\n    border-bottom-left-radius: 3px;\n    background-color: #fff;\n    background-clip: padding-box;\n}\ninput[type='button']:enabled:active, input[type='button'].mui-active:enabled,\ninput[type='submit']:enabled:active,\ninput[type='submit'].mui-active:enabled,\ninput[type='reset']:enabled:active,\ninput[type='reset'].mui-active:enabled,\nbutton:enabled:active,\nbutton.mui-active:enabled,\n.mui-btn:enabled:active,\n.mui-btn.mui-active:enabled\n{\n    color: #fff;\n    background-color: #929292;\n}\ninput[type='button']:disabled, input[type='button'].mui-disabled,\ninput[type='submit']:disabled,\ninput[type='submit'].mui-disabled,\ninput[type='reset']:disabled,\ninput[type='reset'].mui-disabled,\nbutton:disabled,\nbutton.mui-disabled,\n.mui-btn:disabled,\n.mui-btn.mui-disabled\n{\n    opacity: .6;\n}\n\ninput[type='submit'],\n.mui-btn-primary,\n.mui-btn-blue\n{\n    color: #fff;\n    border: 1px solid #007aff;\n    background-color: #007aff;\n}\ninput[type='submit']:enabled:active, input[type='submit'].mui-active:enabled,\n.mui-btn-primary:enabled:active,\n.mui-btn-primary.mui-active:enabled,\n.mui-btn-blue:enabled:active,\n.mui-btn-blue.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #0062cc;\n    background-color: #0062cc;\n}\n\n.mui-btn-positive,\n.mui-btn-success,\n.mui-btn-green\n{\n    color: #fff;\n    border: 1px solid #4cd964;\n    background-color: #4cd964;\n}\n.mui-btn-positive:enabled:active, .mui-btn-positive.mui-active:enabled,\n.mui-btn-success:enabled:active,\n.mui-btn-success.mui-active:enabled,\n.mui-btn-green:enabled:active,\n.mui-btn-green.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #2ac845;\n    background-color: #2ac845;\n}\n\n.mui-btn-warning,\n.mui-btn-yellow\n{\n    color: #fff;\n    border: 1px solid #f0ad4e;\n    background-color: #f0ad4e;\n}\n.mui-btn-warning:enabled:active, .mui-btn-warning.mui-active:enabled,\n.mui-btn-yellow:enabled:active,\n.mui-btn-yellow.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #ec971f;\n    background-color: #ec971f;\n}\n\n.mui-btn-negative,\n.mui-btn-danger,\n.mui-btn-red\n{\n    color: #fff;\n    border: 1px solid #dd524d;\n    background-color: #dd524d;\n}\n.mui-btn-negative:enabled:active, .mui-btn-negative.mui-active:enabled,\n.mui-btn-danger:enabled:active,\n.mui-btn-danger.mui-active:enabled,\n.mui-btn-red:enabled:active,\n.mui-btn-red.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #cf2d28;\n    background-color: #cf2d28;\n}\n\n.mui-btn-royal,\n.mui-btn-purple\n{\n    color: #fff;\n    border: 1px solid #8a6de9;\n    background-color: #8a6de9;\n}\n.mui-btn-royal:enabled:active, .mui-btn-royal.mui-active:enabled,\n.mui-btn-purple:enabled:active,\n.mui-btn-purple.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #6641e2;\n    background-color: #6641e2;\n}\n\n.mui-btn-grey\n{\n    color: #fff;\n    border: 1px solid #c7c7cc;\n    background-color: #c7c7cc;\n}\n.mui-btn-grey:enabled:active, .mui-btn-grey.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #acacb4;\n    background-color: #acacb4;\n}\n\n.mui-btn-outlined\n{\n    background-color: transparent;\n}\n.mui-btn-outlined.mui-btn-primary, .mui-btn-outlined.mui-btn-blue\n{\n    color: #007aff;\n}\n.mui-btn-outlined.mui-btn-positive, .mui-btn-outlined.mui-btn-success, .mui-btn-outlined.mui-btn-green\n{\n    color: #4cd964;\n}\n.mui-btn-outlined.mui-btn-warning, .mui-btn-outlined.mui-btn-yellow\n{\n    color: #f0ad4e;\n}\n.mui-btn-outlined.mui-btn-negative, .mui-btn-outlined.mui-btn-danger, .mui-btn-outlined.mui-btn-red\n{\n    color: #dd524d;\n}\n.mui-btn-outlined.mui-btn-royal, .mui-btn-outlined.mui-btn-purple\n{\n    color: #8a6de9;\n}\n.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\n{\n    color: #fff;\n}\n\n.mui-btn-link\n{\n    padding-top: 6px;\n    padding-bottom: 6px;\n\n    color: #007aff;\n    border: 0;\n    background-color: transparent;\n}\n.mui-btn-link:enabled:active, .mui-btn-link.mui-active:enabled\n{\n    color: #0062cc;\n    background-color: transparent;\n}\n\n.mui-btn-block\n{\n    font-size: 18px;\n\n    display: block;\n\n    width: 100%;\n    margin-bottom: 10px;\n    padding: 15px 0;\n}\n\n.mui-btn .mui-badge\n{\n    font-size: 14px;\n\n    margin: -2px -4px -2px 4px;\n\n    background-color: rgba(0, 0, 0, .15);\n}\n\n.mui-btn .mui-badge-inverted,\n.mui-btn:enabled:active .mui-badge-inverted\n{\n    background-color: transparent;\n}\n\n.mui-btn-primary:enabled:active .mui-badge-inverted,\n.mui-btn-positive:enabled:active .mui-badge-inverted,\n.mui-btn-negative:enabled:active .mui-badge-inverted\n{\n    color: #fff;\n}\n\n.mui-btn-block .mui-badge\n{\n    position: absolute;\n    right: 0;\n\n    margin-right: 10px;\n}\n\n.mui-btn .mui-icon\n{\n    font-size: inherit;\n}\n\n.mui-btn.mui-icon\n{\n    font-size: 14px;\n    line-height: 1.42;\n}\n\n.mui-btn.mui-fab\n{\n    width: 56px;\n    height: 56px;\n    padding: 16px;\n\n    border-radius: 50%;\n    outline: none;\n}\n.mui-btn.mui-fab.mui-btn-mini\n{\n    width: 40px;\n    height: 40px;\n    padding: 8px;\n}\n.mui-btn.mui-fab .mui-icon\n{\n    font-size: 24px;\n    line-height: 24px;\n\n    width: 24px;\n    height: 24px;\n}\n\n.mui-btn .mui-spinner\n{\n    width: 14px;\n    height: 14px;\n\n    vertical-align: text-bottom;\n}\n\n.mui-btn-block .mui-spinner\n{\n    width: 22px;\n    height: 22px;\n}\n\n.mui-bar\n{\n    position: fixed;\n    z-index: 10;\n    right: 0;\n    left: 0;\n\n    height: 44px;\n    padding-right: 10px;\n    padding-left: 10px;\n\n    border-bottom: 0;\n    background-color: #f7f7f7;\n    -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, .85);\n            box-shadow: 0 0 1px rgba(0, 0, 0, .85);\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n}\n\n.mui-bar .mui-title\n{\n    right: 40px;\n    left: 40px;\n\n    display: inline-block;\n    overflow: hidden;\n\n    width: auto;\n    margin: 0;\n\n    text-overflow: ellipsis;\n}\n.mui-bar .mui-backdrop\n{\n    background: none;\n}\n\n.mui-bar-header-secondary\n{\n    top: 44px;\n}\n\n.mui-bar-footer\n{\n    bottom: 0;\n}\n\n.mui-bar-footer-secondary\n{\n    bottom: 44px;\n}\n\n.mui-bar-footer-secondary-tab\n{\n    bottom: 50px;\n}\n\n.mui-bar-footer,\n.mui-bar-footer-secondary,\n.mui-bar-footer-secondary-tab\n{\n    border-top: 0;\n}\n\n.mui-bar-transparent\n{\n    top: 0;\n\n    background-color: rgba(247, 247, 247, 0);\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-bar-nav\n{\n    top: 0;\n\n    -webkit-box-shadow: 0 1px 6px #ccc;\n            box-shadow: 0 1px 6px #ccc;\n}\n.mui-bar-nav ~ .mui-content .mui-anchor\n{\n    display: block;\n    visibility: hidden;\n\n    height: 45px;\n    margin-top: -45px;\n}\n.mui-bar-nav.mui-bar .mui-icon\n{\n    margin-right: -10px;\n    margin-left: -10px;\n    padding-right: 10px;\n    padding-left: 10px;\n}\n\n.mui-title\n{\n    font-size: 17px;\n    font-weight: 500;\n    line-height: 44px;\n\n    position: absolute;\n\n    display: block;\n\n    width: 100%;\n    margin: 0 -10px;\n    padding: 0;\n\n    text-align: center;\n    white-space: nowrap;\n\n    color: #000;\n}\n\n.mui-title a\n{\n    color: inherit;\n}\n\n.mui-bar-tab\n{\n    bottom: 0;\n\n    display: table;\n\n    width: 100%;\n    height: 50px;\n    padding: 0;\n\n    table-layout: fixed;\n\n    border-top: 0;\n    border-bottom: 0;\n\n    -webkit-touch-callout: none;\n}\n.mui-bar-tab .mui-tab-item\n{\n    display: table-cell;\n    overflow: hidden;\n\n    width: 1%;\n    height: 50px;\n\n    text-align: center;\n    vertical-align: middle;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    color: #929292;\n}\n.mui-bar-tab .mui-tab-item.mui-active\n{\n    color: #007aff;\n}\n.mui-bar-tab .mui-tab-item .mui-icon\n{\n    top: 3px;\n\n    width: 24px;\n    height: 24px;\n    padding-top: 0;\n    padding-bottom: 0;\n}\n.mui-bar-tab .mui-tab-item .mui-icon ~ .mui-tab-label\n{\n    font-size: 11px;\n\n    display: block;\n    overflow: hidden;\n\n    text-overflow: ellipsis;\n}\n.mui-bar-tab .mui-tab-item .mui-icon:active\n{\n    background: none;\n}\n\n.mui-focusin > .mui-bar-nav,\n.mui-focusin > .mui-bar-header-secondary\n{\n    position: absolute;\n}\n\n.mui-focusin > .mui-bar ~ .mui-content\n{\n    padding-bottom: 0;\n}\n\n.mui-bar .mui-btn\n{\n    font-weight: 400;\n\n    position: relative;\n    z-index: 20;\n    top: 7px;\n\n    margin-top: 0;\n    padding: 6px 12px 7px;\n}\n.mui-bar .mui-btn.mui-pull-right\n{\n    margin-left: 10px;\n}\n.mui-bar .mui-btn.mui-pull-left\n{\n    margin-right: 10px;\n}\n\n.mui-bar .mui-btn-link\n{\n    font-size: 16px;\n    line-height: 44px;\n\n    top: 0;\n\n    padding: 0;\n\n    color: #007aff;\n    border: 0;\n}\n.mui-bar .mui-btn-link:active, .mui-bar .mui-btn-link.mui-active\n{\n    color: #0062cc;\n}\n\n.mui-bar .mui-btn-block\n{\n    font-size: 16px;\n\n    top: 6px;\n\n    margin-bottom: 0;\n    padding: 5px 0;\n}\n\n.mui-bar .mui-btn-nav.mui-pull-left\n{\n    margin-left: -5px;\n}\n.mui-bar .mui-btn-nav.mui-pull-left .mui-icon-left-nav\n{\n    margin-right: -3px;\n}\n.mui-bar .mui-btn-nav.mui-pull-right\n{\n    margin-right: -5px;\n}\n.mui-bar .mui-btn-nav.mui-pull-right .mui-icon-right-nav\n{\n    margin-left: -3px;\n}\n.mui-bar .mui-btn-nav:active\n{\n    opacity: .3;\n}\n\n.mui-bar .mui-icon\n{\n    font-size: 24px;\n\n    position: relative;\n    z-index: 20;\n\n    padding-top: 10px;\n    padding-bottom: 10px;\n}\n.mui-bar .mui-icon:active\n{\n    opacity: .3;\n}\n.mui-bar .mui-btn .mui-icon\n{\n    top: 1px;\n\n    margin: 0;\n    padding: 0;\n}\n.mui-bar .mui-title .mui-icon\n{\n    margin: 0;\n    padding: 0;\n}\n.mui-bar .mui-title .mui-icon.mui-icon-caret\n{\n    top: 4px;\n\n    margin-left: -5px;\n}\n\n.mui-bar input[type='search']\n{\n    height: 29px;\n    margin: 6px 0;\n}\n\n.mui-bar .mui-input-row .mui-btn\n{\n    padding: 12px 10px;\n}\n\n.mui-bar .mui-search:before\n{\n    margin-top: -10px;\n}\n\n.mui-bar .mui-input-row .mui-input-clear ~ .mui-icon-clear,\n.mui-bar .mui-input-row .mui-input-speech ~ .mui-icon-speech\n{\n    top: 0;\n    right: 12px;\n}\n\n.mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-clear ~ .mui-icon-clear,\n.mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-speech ~ .mui-icon-speech\n{\n    top: 0;\n    right: 0;\n}\n\n.mui-bar .mui-segmented-control\n{\n    top: 7px;\n\n    width: auto;\n    margin: 0 auto;\n}\n\n.mui-bar.mui-bar-header-secondary .mui-segmented-control\n{\n    top: 0;\n}\n\n.mui-badge\n{\n    font-size: 12px;\n    line-height: 1;\n\n    display: inline-block;\n\n    padding: 3px 6px;\n\n    color: #333;\n    border-radius: 100px;\n    background-color: rgba(0, 0, 0, .15);\n}\n.mui-badge.mui-badge-inverted\n{\n    padding: 0 5px 0 0;\n\n    color: #929292;\n    background-color: transparent;\n}\n\n.mui-badge-primary, .mui-badge-blue\n{\n    color: #fff;\n    background-color: #007aff;\n}\n.mui-badge-primary.mui-badge-inverted, .mui-badge-blue.mui-badge-inverted\n{\n    color: #007aff;\n    background-color: transparent;\n}\n\n.mui-badge-success, .mui-badge-green\n{\n    color: #fff;\n    background-color: #4cd964;\n}\n.mui-badge-success.mui-badge-inverted, .mui-badge-green.mui-badge-inverted\n{\n    color: #4cd964;\n    background-color: transparent;\n}\n\n.mui-badge-warning, .mui-badge-yellow\n{\n    color: #fff;\n    background-color: #f0ad4e;\n}\n.mui-badge-warning.mui-badge-inverted, .mui-badge-yellow.mui-badge-inverted\n{\n    color: #f0ad4e;\n    background-color: transparent;\n}\n\n.mui-badge-danger, .mui-badge-red\n{\n    color: #fff;\n    background-color: #dd524d;\n}\n.mui-badge-danger.mui-badge-inverted, .mui-badge-red.mui-badge-inverted\n{\n    color: #dd524d;\n    background-color: transparent;\n}\n\n.mui-badge-royal, .mui-badge-purple\n{\n    color: #fff;\n    background-color: #8a6de9;\n}\n.mui-badge-royal.mui-badge-inverted, .mui-badge-purple.mui-badge-inverted\n{\n    color: #8a6de9;\n    background-color: transparent;\n}\n\n.mui-icon .mui-badge\n{\n    font-size: 10px;\n    line-height: 1.4;\n\n    position: absolute;\n    top: -2px;\n    left: 100%;\n\n    margin-left: -10px;\n    padding: 1px 5px;\n\n    color: white;\n    background: red;\n}\n\n.mui-card\n{\n    font-size: 14px;\n\n    position: relative;\n\n    overflow: hidden;\n\n    margin: 10px;\n\n    border-radius: 2px;\n    background-color: white;\n    background-clip: padding-box;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, .3);\n}\n\n.mui-content > .mui-card:first-child\n{\n    margin-top: 15px;\n}\n\n.mui-card .mui-input-group:before, .mui-card .mui-input-group:after\n{\n    height: 0;\n}\n.mui-card .mui-input-group .mui-input-row:last-child:before, .mui-card .mui-input-group .mui-input-row:last-child:after\n{\n    height: 0;\n}\n\n.mui-card .mui-table-view\n{\n    margin-bottom: 0;\n\n    border-top: 0;\n    border-bottom: 0;\n    border-radius: 6px;\n}\n.mui-card .mui-table-view .mui-table-view-divider:first-child, .mui-card .mui-table-view .mui-table-view-cell:first-child\n{\n    top: 0;\n\n    border-top-left-radius: 6px;\n    border-top-right-radius: 6px;\n}\n.mui-card .mui-table-view .mui-table-view-divider:last-child, .mui-card .mui-table-view .mui-table-view-cell:last-child\n{\n    border-bottom-right-radius: 6px;\n    border-bottom-left-radius: 6px;\n}\n.mui-card .mui-table-view:before, .mui-card .mui-table-view:after\n{\n    height: 0;\n}\n\n.mui-card > .mui-table-view > .mui-table-view-cell:last-child:before, .mui-card > .mui-table-view > .mui-table-view-cell:last-child:after\n{\n    height: 0;\n}\n\n.mui-card-header,\n.mui-card-footer\n{\n    position: relative;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    min-height: 44px;\n    padding: 10px 15px;\n\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n            justify-content: space-between;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n            align-items: center;\n}\n.mui-card-header .mui-card-link,\n.mui-card-footer .mui-card-link\n{\n    line-height: 44px;\n\n    position: relative;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    height: 44px;\n    margin-top: -10px;\n    margin-bottom: -10px;\n\n    -webkit-transition-duration: .3s;\n            transition-duration: .3s;\n    text-decoration: none;\n\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n            justify-content: flex-start;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n            align-items: center;\n}\n\n.mui-card-header:after,\n.mui-card-footer:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-card-header\n{\n    font-size: 17px;\n\n    border-radius: 2px 2px 0 0;\n}\n.mui-card-header:after\n{\n    top: auto;\n    bottom: 0;\n}\n.mui-card-header > img:first-child\n{\n    font-size: 0;\n    line-height: 0;\n\n    float: left;\n\n    width: 34px;\n    height: 34px;\n}\n\n.mui-card-footer\n{\n    color: #6d6d72;\n    border-radius: 0 0 2px 2px;\n}\n\n.mui-card-content\n{\n    font-size: 14px;\n\n    position: relative;\n}\n\n.mui-card-content-inner\n{\n    position: relative;\n\n    padding: 15px;\n}\n\n.mui-card-media\n{\n    vertical-align: bottom;\n\n    color: #fff;\n    background-position: center;\n    background-size: cover;\n}\n\n.mui-card-header.mui-card-media\n{\n    display: block;\n\n    padding: 10px;\n}\n.mui-card-header.mui-card-media .mui-media-body\n{\n    font-size: 14px;\n    font-weight: 500;\n    line-height: 17px;\n\n    margin-bottom: 0;\n    margin-left: 44px;\n\n    color: #333;\n}\n.mui-card-header.mui-card-media .mui-media-body p\n{\n    font-size: 13px;\n\n    margin-bottom: 0;\n}\n\n.mui-table-view\n{\n    position: relative;\n\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 0;\n\n    list-style: none;\n\n    background-color: #fff;\n}\n.mui-table-view:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view:before\n{\n    top: -1px;\n}\n\n.mui-table-view-icon .mui-table-view-cell .mui-navigate-right .mui-icon\n{\n    font-size: 20px;\n\n    margin-top: -1px;\n    margin-right: 5px;\n    margin-left: -5px;\n}\n.mui-table-view-icon .mui-table-view-cell:after\n{\n    left: 40px;\n}\n\n.mui-table-view-chevron .mui-table-view-cell\n{\n    padding-right: 65px;\n}\n.mui-table-view-chevron .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin-right: -65px;\n}\n\n.mui-table-view-radio .mui-table-view-cell\n{\n    padding-right: 65px;\n}\n.mui-table-view-radio .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin-right: -65px;\n}\n.mui-table-view-radio .mui-table-view-cell .mui-navigate-right:after\n{\n    font-size: 30px;\n    font-weight: 600;\n\n    right: 9px;\n\n    content: '';\n\n    color: #007aff;\n}\n.mui-table-view-radio .mui-table-view-cell.mui-selected .mui-navigate-right:after\n{\n    content: '\\e472';\n}\n\n.mui-table-view-inverted\n{\n    color: #fff;\n    background: #333;\n}\n.mui-table-view-inverted:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #222;\n}\n.mui-table-view-inverted:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #222;\n}\n.mui-table-view-inverted .mui-table-view-cell:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 15px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #222;\n}\n.mui-table-view-inverted .mui-table-view-cell.mui-active\n{\n    background-color: #242424;\n}\n.mui-table-view-inverted .mui-table-view-cell > a:not(.mui-btn).mui-active\n{\n    background-color: #242424;\n}\n\n.mui-table-view-cell\n{\n    position: relative;\n\n    overflow: hidden;\n\n    padding: 11px 15px;\n\n    -webkit-touch-callout: none;\n}\n.mui-table-view-cell:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 15px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view-cell.mui-radio input[type=radio], .mui-table-view-cell.mui-checkbox input[type=checkbox]\n{\n    top: 8px;\n}\n.mui-table-view-cell.mui-radio.mui-left, .mui-table-view-cell.mui-checkbox.mui-left\n{\n    padding-left: 58px;\n}\n.mui-table-view-cell.mui-active\n{\n    background-color: #eee;\n}\n.mui-table-view-cell:last-child:before, .mui-table-view-cell:last-child:after\n{\n    height: 0;\n}\n.mui-table-view-cell > a:not(.mui-btn)\n{\n    position: relative;\n\n    display: block;\n    overflow: hidden;\n\n    margin: -11px -15px;\n    padding: inherit;\n\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    color: inherit;\n  /*&:active {\n      background-color: #eee;\n  }*/\n}\n.mui-table-view-cell > a:not(.mui-btn).mui-active\n{\n    background-color: #eee;\n}\n.mui-table-view-cell p\n{\n    margin-bottom: 0;\n}\n\n.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\n{\n    -webkit-transition: -webkit-transform 300ms ease;\n            transition:         transform 300ms ease;\n}\n.mui-table-view-cell.mui-active > .mui-slider-handle\n{\n    background-color: #eee;\n}\n.mui-table-view-cell > .mui-slider-handle\n{\n    position: relative;\n\n    background-color: #fff;\n}\n.mui-table-view-cell > .mui-slider-handle.mui-navigate-right:after, .mui-table-view-cell > .mui-slider-handle .mui-navigate-right:after\n{\n    right: 0;\n}\n.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\n{\n    -webkit-transition: -webkit-transform 0ms ease;\n            transition:         transform 0ms ease;\n}\n.mui-table-view-cell > .mui-slider-left, .mui-table-view-cell > .mui-slider-right\n{\n    position: absolute;\n    top: 0;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    height: 100%;\n}\n.mui-table-view-cell > .mui-slider-left > .mui-btn, .mui-table-view-cell > .mui-slider-right > .mui-btn\n{\n    position: relative;\n    left: 0;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    padding: 0 30px;\n\n    color: #fff;\n    border: 0;\n    border-radius: 0;\n\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n            align-items: center;\n}\n.mui-table-view-cell > .mui-slider-left > .mui-btn:after, .mui-table-view-cell > .mui-slider-right > .mui-btn:after\n{\n    position: absolute;\n    z-index: -1;\n    top: 0;\n\n    width: 600%;\n    height: 100%;\n\n    content: '';\n\n    background: inherit;\n}\n.mui-table-view-cell > .mui-slider-left > .mui-btn.mui-icon, .mui-table-view-cell > .mui-slider-right > .mui-btn.mui-icon\n{\n    font-size: 30px;\n}\n.mui-table-view-cell > .mui-slider-right\n{\n    right: 0;\n\n    -webkit-transition: -webkit-transform 0ms ease;\n            transition:         transform 0ms ease;\n    -webkit-transform: translateX(100%);\n            transform: translateX(100%);\n}\n.mui-table-view-cell > .mui-slider-left\n{\n    left: 0;\n\n    -webkit-transition: -webkit-transform 0ms ease;\n            transition:         transform 0ms ease;\n    -webkit-transform: translateX(-100%);\n            transform: translateX(-100%);\n}\n.mui-table-view-cell > .mui-slider-left > .mui-btn:after\n{\n    right: 100%;\n\n    margin-right: -1px;\n}\n\n.mui-table-view-divider\n{\n    font-weight: 500;\n\n    position: relative;\n\n    margin-top: -1px;\n    margin-left: 0;\n    padding-top: 6px;\n    padding-bottom: 6px;\n    padding-left: 15px;\n\n    color: #999;\n    background-color: #fafafa;\n}\n.mui-table-view-divider:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view-divider:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-table-view .mui-media,\n.mui-table-view .mui-media-body\n{\n    overflow: hidden;\n}\n\n.mui-table-view .mui-media-large .mui-media-object\n{\n    line-height: 80px;\n\n    max-width: 80px;\n    height: 80px;\n}\n.mui-table-view .mui-media .mui-subtitle\n{\n    color: #000;\n}\n.mui-table-view .mui-media-object\n{\n    line-height: 42px;\n\n    max-width: 42px;\n    height: 42px;\n}\n.mui-table-view .mui-media-object.mui-pull-left\n{\n    margin-right: 10px;\n}\n.mui-table-view .mui-media-object.mui-pull-right\n{\n    margin-left: 10px;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object\n{\n    line-height: 29px;\n\n    max-width: 29px;\n    height: 29px;\n    margin: -4px 0;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object img\n{\n    line-height: 29px;\n\n    max-width: 29px;\n    height: 29px;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object.mui-pull-left\n{\n    margin-right: 10px;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object .mui-icon\n{\n    font-size: 29px;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-body:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 55px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon:after\n{\n    height: 0 !important;\n}\n\n.mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view\n{\n    display: block;\n}\n.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\n{\n    height: 0 !important;\n}\n.mui-table-view.mui-unfold .mui-table-view-cell.mui-media-icon.mui-collapse .mui-media-body:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 70px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-table-view-cell > .mui-btn,\n.mui-table-view-cell > .mui-badge,\n.mui-table-view-cell > .mui-switch,\n.mui-table-view-cell > a > .mui-btn,\n.mui-table-view-cell > a > .mui-badge,\n.mui-table-view-cell > a > .mui-switch\n{\n    position: absolute;\n    top: 50%;\n    right: 15px;\n\n    -webkit-transform: translateY(-50%);\n            transform: translateY(-50%);\n}\n.mui-table-view-cell .mui-navigate-right > .mui-btn,\n.mui-table-view-cell .mui-navigate-right > .mui-badge,\n.mui-table-view-cell .mui-navigate-right > .mui-switch,\n.mui-table-view-cell .mui-push-left > .mui-btn,\n.mui-table-view-cell .mui-push-left > .mui-badge,\n.mui-table-view-cell .mui-push-left > .mui-switch,\n.mui-table-view-cell .mui-push-right > .mui-btn,\n.mui-table-view-cell .mui-push-right > .mui-badge,\n.mui-table-view-cell .mui-push-right > .mui-switch,\n.mui-table-view-cell > a .mui-navigate-right > .mui-btn,\n.mui-table-view-cell > a .mui-navigate-right > .mui-badge,\n.mui-table-view-cell > a .mui-navigate-right > .mui-switch,\n.mui-table-view-cell > a .mui-push-left > .mui-btn,\n.mui-table-view-cell > a .mui-push-left > .mui-badge,\n.mui-table-view-cell > a .mui-push-left > .mui-switch,\n.mui-table-view-cell > a .mui-push-right > .mui-btn,\n.mui-table-view-cell > a .mui-push-right > .mui-badge,\n.mui-table-view-cell > a .mui-push-right > .mui-switch\n{\n    right: 35px;\n}\n\n.mui-content > .mui-table-view:first-child\n{\n    margin-top: 15px;\n}\n\n.mui-table-view-cell.mui-collapse .mui-table-view:before, .mui-table-view-cell.mui-collapse .mui-table-view:after\n{\n    height: 0;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:last-child:after\n{\n    height: 0;\n}\n.mui-table-view-cell.mui-collapse > .mui-navigate-right:after, .mui-table-view-cell.mui-collapse > .mui-push-right:after\n{\n    content: '\\e581';\n}\n.mui-table-view-cell.mui-collapse.mui-active\n{\n    margin-top: -1px;\n}\n.mui-table-view-cell.mui-collapse.mui-active .mui-table-view, .mui-table-view-cell.mui-collapse.mui-active .mui-collapse-content\n{\n    display: block;\n}\n.mui-table-view-cell.mui-collapse.mui-active > .mui-navigate-right:after, .mui-table-view-cell.mui-collapse.mui-active > .mui-push-right:after\n{\n    content: '\\e580';\n}\n.mui-table-view-cell.mui-collapse.mui-active .mui-table-view-cell > a:not(.mui-btn).mui-active\n{\n    margin-left: -31px;\n    padding-left: 47px;\n}\n.mui-table-view-cell.mui-collapse .mui-collapse-content\n{\n    position: relative;\n\n    display: none;\n    overflow: hidden;\n\n    margin: 11px -15px -11px;\n    padding: 8px 15px;\n\n    -webkit-transition: height .35s ease;\n         -o-transition: height .35s ease;\n            transition: height .35s ease;\n\n    background: white;\n}\n.mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-input-group, .mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-slider\n{\n    width: auto;\n    height: auto;\n    margin: -8px -15px;\n}\n.mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-slider\n{\n    margin: -8px -16px;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view\n{\n    display: none;\n\n    margin-top: 11px;\n    margin-right: -15px;\n    margin-bottom: -11px;\n    margin-left: -15px;\n\n    border: 0;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view.mui-table-view-chevron\n{\n    margin-right: -65px;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell\n{\n    padding-left: 31px;\n\n    background-position: 31px 100%;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 30px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-table-view.mui-grid-view\n{\n    font-size: 0;\n\n    display: block;\n\n    width: 100%;\n    padding: 0 10px 10px 0;\n\n    white-space: normal;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell\n{\n    font-size: 17px;\n\n    display: inline-block;\n\n    margin-right: -4px;\n    padding: 10px 0 0 14px;\n\n    text-align: center;\n    vertical-align: middle;\n\n    background: none;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-object\n{\n    width: 100%;\n    max-width: 100%;\n    height: auto;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin: -10px 0 0 -14px;\n}\n.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\n{\n    background: none;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-body\n{\n    font-size: 15px;\n    line-height: 15px;\n\n    display: block;\n\n    width: 100%;\n    height: 15px;\n    margin-top: 8px;\n\n    text-overflow: ellipsis;\n\n    color: #333;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell:before, .mui-table-view.mui-grid-view .mui-table-view-cell:after\n{\n    height: 0;\n}\n\n.mui-grid-view.mui-grid-9\n{\n    margin: 0;\n    padding: 0;\n\n    border-top: 1px solid #eee;\n    border-left: 1px solid #eee;\n    background-color: #f2f2f2;\n}\n.mui-grid-view.mui-grid-9:before, .mui-grid-view.mui-grid-9:after\n{\n    display: table;\n\n    content: ' ';\n}\n.mui-grid-view.mui-grid-9:after\n{\n    clear: both;\n}\n.mui-grid-view.mui-grid-9:after\n{\n    position: static;\n}\n.mui-grid-view.mui-grid-9 .mui-table-view-cell\n{\n    margin: 0;\n    padding: 11px 15px;\n\n    vertical-align: top;\n\n    border-right: 1px solid #eee;\n    border-bottom: 1px solid #eee;\n}\n.mui-grid-view.mui-grid-9 .mui-table-view-cell.mui-active\n{\n    background-color: #eee;\n}\n.mui-grid-view.mui-grid-9 .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin: 0;\n    padding: 10px 0;\n}\n.mui-grid-view.mui-grid-9:before\n{\n    height: 0;\n}\n.mui-grid-view.mui-grid-9 .mui-media\n{\n    color: #797979;\n}\n.mui-grid-view.mui-grid-9 .mui-media .mui-icon\n{\n    font-size: 2.4em;\n\n    position: relative;\n}\n\n.mui-slider-cell\n{\n    position: relative;\n}\n.mui-slider-cell > .mui-slider-handle\n{\n    z-index: 1;\n}\n.mui-slider-cell > .mui-slider-left, .mui-slider-cell > .mui-slider-right\n{\n    position: absolute;\n    z-index: 0;\n    top: 0;\n    bottom: 0;\n}\n.mui-slider-cell > .mui-slider-left\n{\n    left: 0;\n}\n.mui-slider-cell > .mui-slider-right\n{\n    right: 0;\n}\n\ninput,\ntextarea,\nselect\n{\n    font-family: 'Helvetica Neue', Helvetica, sans-serif;\n    font-size: 17px;\n\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent;\n}\ninput:focus,\ntextarea:focus,\nselect:focus\n{\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-user-modify: read-write-plaintext-only;\n}\n\nselect,\ntextarea,\ninput[type='text'],\ninput[type='search'],\ninput[type='password'],\ninput[type='datetime'],\ninput[type='datetime-local'],\ninput[type='date'],\ninput[type='month'],\ninput[type='time'],\ninput[type='week'],\ninput[type='number'],\ninput[type='email'],\ninput[type='url'],\ninput[type='tel'],\ninput[type='color']\n{\n    line-height: 21px;\n\n    width: 100%;\n    height: 40px;\n    margin-bottom: 15px;\n    padding: 10px 15px;\n\n    -webkit-user-select: text;\n\n    border: 1px solid rgba(0, 0, 0, .2);\n    border-radius: 3px;\n    outline: none;\n    background-color: #fff;\n\n    -webkit-appearance: none;\n}\n\ninput[type=number]::-webkit-inner-spin-button,\ninput[type=number]::-webkit-outer-spin-button\n{\n    margin: 0;\n\n    -webkit-appearance: none;\n}\n\ninput[type='search']\n{\n    font-size: 16px;\n\n    -webkit-box-sizing: border-box;\n            box-sizing: border-box;\n    height: 34px;\n\n    text-align: center;\n\n    border: 0;\n    border-radius: 6px;\n    background-color: rgba(0, 0, 0, .1);\n}\n\ninput[type='search']:focus\n{\n    text-align: left;\n}\n\ntextarea\n{\n    height: auto;\n\n    resize: none;\n}\n\nselect\n{\n    font-size: 14px;\n\n    height: auto;\n    margin-top: 1px;\n\n    border: 0 !important;\n    background-color: #fff;\n}\nselect:focus\n{\n    -webkit-user-modify: read-only;\n}\n\n.mui-input-group\n{\n    position: relative;\n\n    padding: 0;\n\n    border: 0;\n    background-color: #fff;\n}\n.mui-input-group:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-input-group:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-input-group input,\n.mui-input-group textarea\n{\n    margin-bottom: 0;\n\n    border: 0;\n    border-radius: 0;\n    background-color: transparent;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-input-group input[type='search']\n{\n    background: none;\n}\n\n.mui-input-group input:last-child\n{\n    background-image: none;\n}\n\n.mui-input-row\n{\n    clear: left;\n    overflow: hidden;\n}\n.mui-input-row select\n{\n    font-size: 17px;\n\n    height: 37px;\n    padding: 0;\n}\n\n.mui-input-row:last-child,\n.mui-input-row label + input, .mui-input-row .mui-btn + input\n{\n    background: none;\n}\n\n.mui-input-group .mui-input-row\n{\n    height: 40px;\n}\n.mui-input-group .mui-input-row:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 15px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-input-row label\n{\n    font-family: 'Helvetica Neue', Helvetica, sans-serif;\n    line-height: 1.1;\n\n    float: left;\n\n    width: 35%;\n    padding: 11px 15px;\n}\n\n.mui-input-row label ~ input, .mui-input-row label ~ select, .mui-input-row label ~ textarea\n{\n    float: right;\n\n    width: 65%;\n    margin-bottom: 0;\n    padding-left: 0;\n\n    border: 0;\n}\n\n.mui-input-row .mui-btn\n{\n    line-height: 1.1;\n\n    float: right;\n\n    width: 15%;\n    padding: 10px 15px;\n}\n\n.mui-input-row .mui-btn ~ input, .mui-input-row .mui-btn ~ select, .mui-input-row .mui-btn ~ textarea\n{\n    float: left;\n\n    width: 85%;\n    margin-bottom: 0;\n    padding-left: 0;\n\n    border: 0;\n}\n\n.mui-button-row\n{\n    position: relative;\n\n    padding-top: 5px;\n\n    text-align: center;\n}\n\n.mui-input-group .mui-button-row\n{\n    height: 45px;\n}\n\n.mui-input-row\n{\n    position: relative;\n}\n.mui-input-row.mui-input-range\n{\n    overflow: visible;\n\n    padding-right: 20px;\n}\n.mui-input-row .mui-inline\n{\n    padding: 8px 0;\n}\n.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\n{\n    font-size: 20px;\n\n    position: absolute;\n    z-index: 1;\n    top: 10px;\n    right: 0;\n\n    width: 38px;\n    height: 38px;\n\n    text-align: center;\n\n    color: #999;\n}\n.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\n{\n    color: #007aff;\n}\n.mui-input-row .mui-input-speech ~ .mui-icon-speech\n{\n    font-size: 24px;\n\n    top: 8px;\n}\n.mui-input-row .mui-input-clear ~ .mui-icon-clear ~ .mui-icon-speech\n{\n    display: none;\n}\n.mui-input-row .mui-input-clear ~ .mui-icon-clear.mui-hidden ~ .mui-icon-speech\n{\n    display: inline-block;\n}\n.mui-input-row .mui-icon-speech ~ .mui-placeholder\n{\n    right: 38px;\n}\n.mui-input-row.mui-search .mui-icon-clear\n{\n    top: 7px;\n}\n.mui-input-row.mui-search .mui-icon-speech\n{\n    top: 5px;\n}\n\n.mui-radio, .mui-checkbox\n{\n    position: relative;\n}\n.mui-radio label, .mui-checkbox label\n{\n    display: inline-block;\n    float: none;\n\n    width: 100%;\n    padding-right: 58px;\n}\n\n.mui-radio.mui-left input[type='radio'], .mui-checkbox.mui-left input[type='checkbox']\n{\n    left: 20px;\n}\n\n.mui-radio.mui-left label, .mui-checkbox.mui-left label\n{\n    padding-right: 15px;\n    padding-left: 58px;\n}\n\n.mui-radio input[type='radio'], .mui-checkbox input[type='checkbox']\n{\n    position: absolute;\n    top: 4px;\n    right: 20px;\n\n    display: inline-block;\n\n    width: 28px;\n    height: 26px;\n\n    border: 0;\n    outline: 0 !important;\n    background-color: transparent;\n\n    -webkit-appearance: none;\n}\n.mui-radio input[type='radio'][disabled]:before, .mui-checkbox input[type='checkbox'][disabled]:before\n{\n    opacity: .3;\n}\n.mui-radio input[type='radio']:before, .mui-checkbox input[type='checkbox']:before\n{\n    font-family: Muiicons;\n    font-size: 28px;\n    font-weight: normal;\n    line-height: 1;\n\n    text-decoration: none;\n\n    color: #aaa;\n    border-radius: 0;\n    background: none;\n\n    -webkit-font-smoothing: antialiased;\n}\n.mui-radio input[type='radio']:checked:before, .mui-checkbox input[type='checkbox']:checked:before\n{\n    color: #007aff;\n}\n\n.mui-radio.mui-disabled label, .mui-radio label.mui-disabled, .mui-checkbox.mui-disabled label, .mui-checkbox label.mui-disabled\n{\n    opacity: .4;\n}\n\n.mui-radio input[type='radio']:before\n{\n    content: '\\e411';\n}\n\n.mui-radio input[type='radio']:checked:before\n{\n    content: '\\e441';\n}\n\n.mui-checkbox input[type='checkbox']:before\n{\n    content: '\\e411';\n}\n\n.mui-checkbox input[type='checkbox']:checked:before\n{\n    content: '\\e442';\n}\n\n.mui-select\n{\n    position: relative;\n}\n\n.mui-select:before\n{\n    font-family: Muiicons;\n\n    position: absolute;\n    top: 8px;\n    right: 21px;\n\n    content: '\\e581';\n\n    color: rgba(170, 170, 170, .6);\n}\n\n.mui-input-row .mui-switch\n{\n    float: right;\n\n    margin-top: 5px;\n    margin-right: 20px;\n}\n\n.mui-input-range\n{\n  /*input[type=\"range\"] {\n      -webkit-appearance: none;\n      background: #999;\n      height: 36px;\n      border-radius: 1px;\n      overflow: hidden;\n      margin-top: 2px;\n      margin-bottom: 2px;\n      outline:none;\n      position:relative;\n      width:100%;\n  }*/\n  /*input[type='range']::-webkit-slider-thumb {\n      -webkit-appearance: none!important;\n      opacity: 0.5;\n      height:28px;\n      width:28px;\n      border-radius: 50%;\n      background:#00b7fb;\n      position: relative;\n      pointer-events: none;\n      -webkit-box-sizing: border-box;\n      box-sizing: border-box;\n      &:before{\n          position: absolute;\n          top: 13px;\n          left: -2000px;\n          width: 2000px;\n          height: 2px;\n          background: #00b7fb;\n          content:' ';\n      }\n  }*/\n}\n.mui-input-range input[type='range']\n{\n    position: relative;\n\n    width: 100%;\n    height: 2px;\n    margin: 17px 0;\n    padding: 0;\n\n    cursor: pointer;\n\n    border: 0;\n    border-radius: 3px;\n    outline: none;\n    background-color: #999;\n\n    -webkit-appearance: none !important;\n}\n.mui-input-range input[type='range']::-webkit-slider-thumb\n{\n    width: 28px;\n    height: 28px;\n\n    border-color: #0062cc;\n    border-radius: 50%;\n    background-color: #007aff;\n    background-clip: padding-box;\n\n    -webkit-appearance: none !important;\n}\n.mui-input-range label ~ input[type='range']\n{\n    width: 65%;\n}\n.mui-input-range .mui-tooltip\n{\n    font-size: 36px;\n    line-height: 64px;\n\n    position: absolute;\n    z-index: 1;\n    top: -70px;\n\n    width: 64px;\n    height: 64px;\n\n    text-align: center;\n\n    opacity: .8;\n    color: #333;\n    border: 1px solid #ddd;\n    border-radius: 6px;\n    background-color: #fff;\n    text-shadow: 0 1px 0 #f3f3f3;\n}\n\n.mui-search\n{\n    position: relative;\n}\n.mui-search input[type='search']\n{\n    padding-left: 30px;\n}\n.mui-search .mui-placeholder\n{\n    font-size: 16px;\n    line-height: 34px;\n\n    position: absolute;\n    z-index: 1;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    display: inline-block;\n\n    height: 34px;\n\n    text-align: center;\n\n    color: #999;\n    border: 0;\n    border-radius: 6px;\n    background: none;\n}\n.mui-search .mui-placeholder .mui-icon\n{\n    font-size: 20px;\n\n    color: #333;\n}\n.mui-search:before\n{\n    font-family: Muiicons;\n    font-size: 20px;\n    font-weight: normal;\n\n    position: absolute;\n    top: 50%;\n    right: 50%;\n\n    display: none;\n\n    margin-top: -18px;\n    margin-right: 31px;\n\n    content: '\\e466';\n}\n.mui-search.mui-active:before\n{\n    font-size: 20px;\n\n    right: auto;\n    left: 5px;\n\n    display: block;\n\n    margin-right: 0;\n}\n.mui-search.mui-active input[type='search']\n{\n    text-align: left;\n}\n.mui-search.mui-active .mui-placeholder\n{\n    display: none;\n}\n\n.mui-segmented-control\n{\n    font-size: 15px;\n    font-weight: 400;\n\n    position: relative;\n\n    display: table;\n    overflow: hidden;\n\n    width: 100%;\n\n    table-layout: fixed;\n\n    border: 1px solid #007aff;\n    border-radius: 3px;\n    background-color: transparent;\n\n    -webkit-touch-callout: none;\n}\n.mui-segmented-control.mui-segmented-control-vertical\n{\n    border-collapse: collapse;\n\n    border-width: 0;\n    border-radius: 0;\n}\n.mui-segmented-control.mui-segmented-control-vertical .mui-control-item\n{\n    display: block;\n\n    border-bottom: 1px solid #c8c7cc;\n    border-left-width: 0;\n}\n.mui-segmented-control.mui-scroll-wrapper\n{\n    height: 38px;\n}\n.mui-segmented-control.mui-scroll-wrapper .mui-scroll\n{\n    width: auto;\n    height: 40px;\n\n    white-space: nowrap;\n}\n.mui-segmented-control.mui-scroll-wrapper .mui-control-item\n{\n    display: inline-block;\n\n    width: auto;\n    padding: 0 20px;\n\n    border: 0;\n}\n.mui-segmented-control .mui-control-item\n{\n    line-height: 38px;\n\n    display: table-cell;\n    overflow: hidden;\n\n    width: 1%;\n\n    -webkit-transition: background-color .1s linear;\n            transition: background-color .1s linear;\n    text-align: center;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    color: #007aff;\n    border-color: #007aff;\n    border-left: 1px solid #007aff;\n}\n.mui-segmented-control .mui-control-item:first-child\n{\n    border-left-width: 0;\n}\n.mui-segmented-control .mui-control-item.mui-active\n{\n    color: #fff;\n    background-color: #007aff;\n}\n.mui-segmented-control.mui-segmented-control-inverted\n{\n    width: 100%;\n\n    border: 0;\n    border-radius: 0;\n}\n.mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item\n{\n    border-bottom: 1px solid #c8c7cc;\n}\n.mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item.mui-active\n{\n    border-bottom: 1px solid #c8c7cc;\n}\n.mui-segmented-control.mui-segmented-control-inverted .mui-control-item\n{\n    color: inherit;\n    border: 0;\n}\n.mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active\n{\n    color: #007aff;\n    border-bottom: 2px solid #007aff;\n    background: none;\n}\n.mui-segmented-control.mui-segmented-control-inverted ~ .mui-slider-progress-bar\n{\n    background-color: #007aff;\n}\n\n.mui-segmented-control-positive\n{\n    border: 1px solid #4cd964;\n}\n.mui-segmented-control-positive .mui-control-item\n{\n    color: #4cd964;\n    border-color: inherit;\n}\n.mui-segmented-control-positive .mui-control-item.mui-active\n{\n    color: #fff;\n    background-color: #4cd964;\n}\n.mui-segmented-control-positive.mui-segmented-control-inverted .mui-control-item.mui-active\n{\n    color: #4cd964;\n    border-bottom: 2px solid #4cd964;\n    background: none;\n}\n.mui-segmented-control-positive.mui-segmented-control-inverted ~ .mui-slider-progress-bar\n{\n    background-color: #4cd964;\n}\n\n.mui-segmented-control-negative\n{\n    border: 1px solid #dd524d;\n}\n.mui-segmented-control-negative .mui-control-item\n{\n    color: #dd524d;\n    border-color: inherit;\n}\n.mui-segmented-control-negative .mui-control-item.mui-active\n{\n    color: #fff;\n    background-color: #dd524d;\n}\n.mui-segmented-control-negative.mui-segmented-control-inverted .mui-control-item.mui-active\n{\n    color: #dd524d;\n    border-bottom: 2px solid #dd524d;\n    background: none;\n}\n.mui-segmented-control-negative.mui-segmented-control-inverted ~ .mui-slider-progress-bar\n{\n    background-color: #dd524d;\n}\n\n.mui-control-content\n{\n    position: relative;\n\n    display: none;\n}\n.mui-control-content.mui-active\n{\n    display: block;\n}\n\n.mui-popover\n{\n    position: absolute;\n    z-index: 999;\n\n    display: none;\n\n    width: 280px;\n\n    -webkit-transition: opacity .3s;\n            transition: opacity .3s;\n    -webkit-transition-property: opacity;\n            transition-property: opacity;\n    -webkit-transform: none;\n            transform: none;\n\n    opacity: 0;\n    border-radius: 7px;\n    background-color: #f7f7f7;\n    -webkit-box-shadow: 0 0 15px rgba(0, 0, 0, .1);\n            box-shadow: 0 0 15px rgba(0, 0, 0, .1);\n}\n.mui-popover .mui-popover-arrow\n{\n    position: absolute;\n    z-index: 1000;\n    top: -25px;\n    left: 0;\n\n    overflow: hidden;\n\n    width: 26px;\n    height: 26px;\n}\n.mui-popover .mui-popover-arrow:after\n{\n    position: absolute;\n    top: 19px;\n    left: 0;\n\n    width: 26px;\n    height: 26px;\n\n    content: ' ';\n    -webkit-transform: rotate(45deg);\n            transform: rotate(45deg);\n\n    border-radius: 3px;\n    background: #f7f7f7;\n}\n.mui-popover .mui-popover-arrow.mui-bottom\n{\n    top: 100%;\n    left: -26px;\n\n    margin-top: -1px;\n}\n.mui-popover .mui-popover-arrow.mui-bottom:after\n{\n    top: -19px;\n    left: 0;\n}\n.mui-popover.mui-popover-action\n{\n    bottom: 0;\n\n    width: 100%;\n\n    -webkit-transition: -webkit-transform .3s, opacity .3s;\n            transition:         transform .3s, opacity .3s;\n    -webkit-transform: translate3d(0, 100%, 0);\n            transform: translate3d(0, 100%, 0);\n\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n.mui-popover.mui-popover-action .mui-popover-arrow\n{\n    display: none;\n}\n.mui-popover.mui-popover-action.mui-popover-bottom\n{\n    position: fixed;\n}\n.mui-popover.mui-popover-action.mui-active\n{\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n}\n.mui-popover.mui-popover-action .mui-table-view\n{\n    margin: 8px;\n\n    text-align: center;\n\n    color: #007aff;\n    border-radius: 4px;\n}\n.mui-popover.mui-popover-action .mui-table-view .mui-table-view-cell:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-popover.mui-popover-action .mui-table-view small\n{\n    font-weight: 400;\n    line-height: 1.3;\n\n    display: block;\n}\n.mui-popover.mui-active\n{\n    display: block;\n\n    opacity: 1;\n}\n.mui-popover .mui-bar ~ .mui-table-view\n{\n    padding-top: 44px;\n}\n\n.mui-backdrop\n{\n    position: fixed;\n    z-index: 998;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    background-color: rgba(0, 0, 0, .3);\n}\n\n.mui-bar-backdrop.mui-backdrop\n{\n    bottom: 50px;\n\n    background: none;\n}\n\n.mui-backdrop-action.mui-backdrop\n{\n    background-color: rgba(0, 0, 0, .3);\n}\n\n.mui-bar-backdrop.mui-backdrop, .mui-backdrop-action.mui-backdrop\n{\n    opacity: 0;\n}\n.mui-bar-backdrop.mui-backdrop.mui-active, .mui-backdrop-action.mui-backdrop.mui-active\n{\n    -webkit-transition: all .4s ease;\n            transition: all .4s ease;\n\n    opacity: 1;\n}\n\n.mui-popover .mui-btn-block\n{\n    margin-bottom: 5px;\n}\n.mui-popover .mui-btn-block:last-child\n{\n    margin-bottom: 0;\n}\n\n.mui-popover .mui-bar\n{\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-popover .mui-bar-nav\n{\n    border-bottom: 1px solid rgba(0, 0, 0, .15);\n    border-top-left-radius: 12px;\n    border-top-right-radius: 12px;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-popover .mui-scroll-wrapper\n{\n    margin: 7px 0;\n\n    border-radius: 7px;\n    background-clip: padding-box;\n}\n\n.mui-popover .mui-scroll .mui-table-view\n{\n    max-height: none;\n}\n\n.mui-popover .mui-table-view\n{\n    overflow: auto;\n\n    max-height: 300px;\n    margin-bottom: 0;\n\n    border-radius: 7px;\n    background-color: #f7f7f7;\n    background-image: none;\n\n    -webkit-overflow-scrolling: touch;\n}\n.mui-popover .mui-table-view:before, .mui-popover .mui-table-view:after\n{\n    height: 0;\n}\n.mui-popover .mui-table-view .mui-table-view-cell:first-child,\n.mui-popover .mui-table-view .mui-table-view-cell:first-child > a:not(.mui-btn)\n{\n    border-top-left-radius: 12px;\n    border-top-right-radius: 12px;\n}\n.mui-popover .mui-table-view .mui-table-view-cell:last-child,\n.mui-popover .mui-table-view .mui-table-view-cell:last-child > a:not(.mui-btn)\n{\n    border-bottom-right-radius: 12px;\n    border-bottom-left-radius: 12px;\n}\n\n.mui-popover.mui-bar-popover .mui-table-view\n{\n    width: 106px;\n}\n.mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell\n{\n    padding: 11px 15px 11px 15px;\n\n    background-position: 0 100%;\n}\n.mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin: -11px -15px -11px -15px;\n}\n\n.mui-popup-backdrop\n{\n    position: fixed;\n    z-index: 998;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    -webkit-transition-duration: 400ms;\n            transition-duration: 400ms;\n\n    opacity: 0;\n    background: rgba(0, 0, 0, .4);\n}\n.mui-popup-backdrop.mui-active\n{\n    opacity: 1;\n}\n\n.mui-popup\n{\n    position: fixed;\n    z-index: 10000;\n    top: 50%;\n    left: 50%;\n\n    display: none;\n    overflow: hidden;\n\n    width: 270px;\n\n    -webkit-transition-property: -webkit-transform,opacity;\n            transition-property:         transform,opacity;\n    -webkit-transform: translate3d(-50%, -50%, 0) scale(1.185);\n            transform: translate3d(-50%, -50%, 0) scale(1.185);\n    text-align: center;\n\n    opacity: 0;\n    color: #000;\n    border-radius: 13px;\n}\n.mui-popup.mui-popup-in\n{\n    display: block;\n\n    -webkit-transition-duration: 400ms;\n            transition-duration: 400ms;\n    -webkit-transform: translate3d(-50%, -50%, 0) scale(1);\n            transform: translate3d(-50%, -50%, 0) scale(1);\n\n    opacity: 1;\n}\n.mui-popup.mui-popup-out\n{\n    -webkit-transition-duration: 400ms;\n            transition-duration: 400ms;\n    -webkit-transform: translate3d(-50%, -50%, 0) scale(1);\n            transform: translate3d(-50%, -50%, 0) scale(1);\n\n    opacity: 0;\n}\n\n.mui-popup-inner\n{\n    position: relative;\n\n    padding: 15px;\n\n    border-radius: 13px 13px 0 0;\n    background: rgba(255, 255, 255, .95);\n}\n.mui-popup-inner:after\n{\n    position: absolute;\n    z-index: 15;\n    top: auto;\n    right: auto;\n    bottom: 0;\n    left: 0;\n\n    display: block;\n\n    width: 100%;\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n    -webkit-transform-origin: 50% 100%;\n            transform-origin: 50% 100%;\n\n    background-color: rgba(0, 0, 0, .2);\n}\n\n.mui-popup-title\n{\n    font-size: 18px;\n    font-weight: 500;\n\n    text-align: center;\n}\n\n.mui-popup-title + .mui-popup-text\n{\n    font-family: inherit;\n    font-size: 14px;\n\n    margin: 5px 0 0;\n}\n\n.mui-popup-buttons\n{\n    position: relative;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    height: 44px;\n\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n            justify-content: center;\n}\n\n.mui-popup-button\n{\n    font-size: 17px;\n    line-height: 44px;\n\n    position: relative;\n\n    display: block;\n    overflow: hidden;\n\n    box-sizing: border-box;\n    width: 100%;\n    height: 44px;\n    padding: 0 5px;\n\n    cursor: pointer;\n    text-align: center;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    color: #007aff;\n    background: rgba(255, 255, 255, .95);\n\n    -webkit-box-flex: 1;\n}\n.mui-popup-button:after\n{\n    position: absolute;\n    z-index: 15;\n    top: 0;\n    right: 0;\n    bottom: auto;\n    left: auto;\n\n    display: block;\n\n    width: 1px;\n    height: 100%;\n\n    content: '';\n    -webkit-transform: scaleX(.5);\n            transform: scaleX(.5);\n    -webkit-transform-origin: 100% 50%;\n            transform-origin: 100% 50%;\n\n    background-color: rgba(0, 0, 0, .2);\n}\n.mui-popup-button:first-child\n{\n    border-radius: 0 0 0 13px;\n}\n.mui-popup-button:first-child:last-child\n{\n    border-radius: 0 0 13px 13px;\n}\n.mui-popup-button:last-child\n{\n    border-radius: 0 0 13px 0;\n}\n.mui-popup-button:last-child:after\n{\n    display: none;\n}\n.mui-popup-button.mui-popup-button-bold\n{\n    font-weight: 600;\n}\n\n.mui-popup-input input\n{\n    font-size: 14px;\n\n    width: 100%;\n    height: 26px;\n    margin: 15px 0 0;\n    padding: 0 5px;\n\n    border: 1px solid rgba(0, 0, 0, .3);\n    border-radius: 0;\n    background: #fff;\n}\n\n.mui-plus.mui-android .mui-popup-backdrop\n{\n    -webkit-transition-duration: 1ms;\n            transition-duration: 1ms;\n}\n\n.mui-plus.mui-android .mui-popup\n{\n    -webkit-transition-duration: 1ms;\n            transition-duration: 1ms;\n    -webkit-transform: translate3d(-50%, -50%, 0) scale(1);\n            transform: translate3d(-50%, -50%, 0) scale(1);\n}\n\n/* === Progress Bar === */\n.mui-progressbar\n{\n    position: relative;\n\n    display: block;\n    overflow: hidden;\n\n    width: 100%;\n    height: 2px;\n\n    -webkit-transform-origin: center top;\n            transform-origin: center top;\n    vertical-align: middle;\n\n    border-radius: 2px;\n    background: #b6b6b6;\n\n    -webkit-transform-style: preserve-3d;\n            transform-style: preserve-3d;\n}\n.mui-progressbar span\n{\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    width: 100%;\n    height: 100%;\n\n    -webkit-transition: 150ms;\n            transition: 150ms;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n\n    background: #007aff;\n}\n.mui-progressbar.mui-progressbar-infinite:before\n{\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    width: 100%;\n    height: 100%;\n\n    content: '';\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n    -webkit-transform-origin: left center;\n            transform-origin: left center;\n    -webkit-animation: mui-progressbar-infinite 1s linear infinite;\n            animation: mui-progressbar-infinite 1s linear infinite;\n\n    background: #007aff;\n}\n\nbody > .mui-progressbar\n{\n    position: absolute;\n    z-index: 10000;\n    top: 44px;\n    left: 0;\n\n    border-radius: 0;\n}\n\n.mui-progressbar-in\n{\n    -webkit-animation: mui-progressbar-in 300ms forwards;\n            animation: mui-progressbar-in 300ms forwards;\n}\n\n.mui-progressbar-out\n{\n    -webkit-animation: mui-progressbar-out 300ms forwards;\n            animation: mui-progressbar-out 300ms forwards;\n}\n\n@-webkit-keyframes mui-progressbar-in\n{\n    from\n    {\n        -webkit-transform: scaleY(0);\n\n        opacity: 0;\n    }\n\n    to\n    {\n        -webkit-transform: scaleY(1);\n\n        opacity: 1;\n    }\n}\n@keyframes mui-progressbar-in\n{\n    from\n    {\n        transform: scaleY(0);\n\n        opacity: 0;\n    }\n\n    to\n    {\n        transform: scaleY(1);\n\n        opacity: 1;\n    }\n}\n@-webkit-keyframes mui-progressbar-out\n{\n    from\n    {\n        -webkit-transform: scaleY(1);\n\n        opacity: 1;\n    }\n\n    to\n    {\n        -webkit-transform: scaleY(0);\n\n        opacity: 0;\n    }\n}\n@keyframes mui-progressbar-out\n{\n    from\n    {\n        transform: scaleY(1);\n\n        opacity: 1;\n    }\n\n    to\n    {\n        transform: scaleY(0);\n\n        opacity: 0;\n    }\n}\n@-webkit-keyframes mui-progressbar-infinite\n{\n    0%\n    {\n        -webkit-transform: translate3d(-50%, 0, 0) scaleX(.5);\n    }\n\n    100%\n    {\n        -webkit-transform: translate3d(100%, 0, 0) scaleX(.5);\n    }\n}\n@keyframes mui-progressbar-infinite\n{\n    0%\n    {\n        transform: translate3d(-50%, 0, 0) scaleX(.5);\n    }\n\n    100%\n    {\n        transform: translate3d(100%, 0, 0) scaleX(.5);\n    }\n}\n.mui-pagination\n{\n    display: inline-block;\n\n    margin: 0 auto;\n    padding-left: 0;\n\n    border-radius: 6px;\n}\n.mui-pagination > li\n{\n    display: inline;\n}\n.mui-pagination > li > a,\n.mui-pagination > li > span\n{\n    line-height: 1.428571429;\n\n    position: relative;\n\n    float: left;\n\n    margin-left: -1px;\n    padding: 6px 12px;\n\n    text-decoration: none;\n\n    color: #007aff;\n    border: 1px solid #ddd;\n    background-color: #fff;\n}\n.mui-pagination > li:first-child > a,\n.mui-pagination > li:first-child > span\n{\n    margin-left: 0;\n\n    border-top-left-radius: 6px;\n    border-bottom-left-radius: 6px;\n    background-clip: padding-box;\n}\n.mui-pagination > li:last-child > a,\n.mui-pagination > li:last-child > span\n{\n    border-top-right-radius: 6px;\n    border-bottom-right-radius: 6px;\n    background-clip: padding-box;\n}\n.mui-pagination > li:active > a, .mui-pagination > li:active > a:active,\n.mui-pagination > li:active > span,\n.mui-pagination > li:active > span:active,\n.mui-pagination > li.mui-active > a,\n.mui-pagination > li.mui-active > a:active,\n.mui-pagination > li.mui-active > span,\n.mui-pagination > li.mui-active > span:active\n{\n    z-index: 2;\n\n    cursor: default;\n\n    color: #fff;\n    border-color: #007aff;\n    background-color: #007aff;\n}\n.mui-pagination > li.mui-disabled > span,\n.mui-pagination > li.mui-disabled > span:active,\n.mui-pagination > li.mui-disabled > a,\n.mui-pagination > li.mui-disabled > a:active\n{\n    opacity: .6;\n    color: #777;\n    border: 1px solid #ddd;\n    background-color: #fff;\n}\n\n.mui-pagination-lg > li > a,\n.mui-pagination-lg > li > span\n{\n    font-size: 18px;\n\n    padding: 10px 16px;\n}\n\n.mui-pagination-sm > li > a,\n.mui-pagination-sm > li > span\n{\n    font-size: 12px;\n\n    padding: 5px 10px;\n}\n\n.mui-pager\n{\n    padding-left: 0;\n\n    list-style: none;\n\n    text-align: center;\n}\n.mui-pager:before, .mui-pager:after\n{\n    display: table;\n\n    content: ' ';\n}\n.mui-pager:after\n{\n    clear: both;\n}\n.mui-pager li\n{\n    display: inline;\n}\n.mui-pager li > a,\n.mui-pager li > span\n{\n    display: inline-block;\n\n    padding: 5px 14px;\n\n    border: 1px solid #ddd;\n    border-radius: 6px;\n    background-color: #fff;\n    background-clip: padding-box;\n}\n.mui-pager li:active > a, .mui-pager li:active > span, .mui-pager li.mui-active > a, .mui-pager li.mui-active > span\n{\n    cursor: default;\n    text-decoration: none;\n\n    color: #fff;\n    border-color: #007aff;\n    background-color: #007aff;\n}\n.mui-pager .mui-next > a,\n.mui-pager .mui-next > span\n{\n    float: right;\n}\n.mui-pager .mui-previous > a,\n.mui-pager .mui-previous > span\n{\n    float: left;\n}\n.mui-pager .mui-disabled > a,\n.mui-pager .mui-disabled > a:active,\n.mui-pager .mui-disabled > span,\n.mui-pager .mui-disabled > span:active\n{\n    opacity: .6;\n    color: #777;\n    border: 1px solid #ddd;\n    background-color: #fff;\n}\n\n.mui-modal\n{\n    position: fixed;\n    z-index: 999;\n    top: 0;\n\n    overflow: hidden;\n\n    width: 100%;\n    min-height: 100%;\n\n    -webkit-transition: -webkit-transform .25s, opacity 1ms .25s;\n            transition:         transform .25s, opacity 1ms .25s;\n    -webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1);\n            transition-timing-function: cubic-bezier(.1, .5, .1, 1);\n    -webkit-transform: translate3d(0, 100%, 0);\n            transform: translate3d(0, 100%, 0);\n\n    opacity: 0;\n    background-color: #fff;\n}\n.mui-modal.mui-active\n{\n    height: 100%;\n\n    -webkit-transition: -webkit-transform .25s;\n            transition:         transform .25s;\n    -webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1);\n            transition-timing-function: cubic-bezier(.1, .5, .1, 1);\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n\n    opacity: 1;\n}\n\n.mui-android .mui-modal .mui-bar\n{\n    position: static;\n}\n\n.mui-android .mui-modal .mui-bar-nav ~ .mui-content\n{\n    padding-top: 0;\n}\n\n.mui-slider\n{\n    position: relative;\n    z-index: 1;\n\n    overflow: hidden;\n\n    width: 100%;\n}\n.mui-slider .mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active\n{\n    border-bottom: 0;\n}\n.mui-slider .mui-segmented-control.mui-segmented-control-inverted ~ .mui-slider-group .mui-slider-item\n{\n    border-top: 1px solid #c8c7cc;\n    border-bottom: 1px solid #c8c7cc;\n}\n.mui-slider .mui-slider-group\n{\n    font-size: 0;\n\n    position: relative;\n\n    -webkit-transition: all 0s linear;\n            transition: all 0s linear;\n    white-space: nowrap;\n}\n.mui-slider .mui-slider-group .mui-slider-item\n{\n    font-size: 14px;\n\n    position: relative;\n\n    display: inline-block;\n\n    width: 100%;\n    height: 100%;\n\n    vertical-align: top;\n    white-space: normal;\n}\n.mui-slider .mui-slider-group .mui-slider-item > a:not(.mui-control-item)\n{\n    line-height: 0;\n\n    position: relative;\n\n    display: block;\n}\n.mui-slider .mui-slider-group .mui-slider-item img\n{\n    width: 100%;\n}\n.mui-slider .mui-slider-group .mui-slider-item .mui-table-view:before, .mui-slider .mui-slider-group .mui-slider-item .mui-table-view:after\n{\n    height: 0;\n}\n.mui-slider .mui-slider-group.mui-slider-loop\n{\n    -webkit-transform: translate(-100%, 0px);\n            transform: translate(-100%, 0px);\n}\n\n.mui-slider-title\n{\n    line-height: 30px;\n\n    position: absolute;\n    bottom: 0;\n    left: 0;\n\n    width: 100%;\n    height: 30px;\n    margin: 0;\n\n    text-align: left;\n    text-indent: 12px;\n\n    opacity: .8;\n    background-color: #000;\n}\n\n.mui-slider-indicator\n{\n    position: absolute;\n    bottom: 8px;\n\n    width: 100%;\n\n    text-align: center;\n\n    background: none;\n}\n.mui-slider-indicator.mui-segmented-control\n{\n    position: relative;\n    bottom: auto;\n}\n.mui-slider-indicator .mui-indicator\n{\n    display: inline-block;\n\n    width: 6px;\n    height: 6px;\n    margin: 1px 6px;\n\n    cursor: pointer;\n\n    border-radius: 50%;\n    background: #aaa;\n    -webkit-box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7);\n            box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7);\n}\n.mui-slider-indicator .mui-active.mui-indicator\n{\n    background: #fff;\n}\n.mui-slider-indicator .mui-icon\n{\n    font-size: 20px;\n    line-height: 30px;\n\n    width: 40px;\n    height: 30px;\n    margin: 3px;\n\n    text-align: center;\n\n    border: 1px solid #ddd;\n}\n.mui-slider-indicator .mui-number\n{\n    line-height: 32px;\n\n    display: inline-block;\n\n    width: 58px;\n}\n.mui-slider-indicator .mui-number span\n{\n    color: #ff5053;\n}\n\n.mui-slider-progress-bar\n{\n    z-index: 1;\n\n    height: 2px;\n\n    -webkit-transform: translateZ(0);\n            transform: translateZ(0);\n}\n\n.mui-switch\n{\n    position: relative;\n\n    display: block;\n\n    width: 74px;\n    height: 30px;\n\n    -webkit-transition-timing-function: ease-in-out;\n            transition-timing-function: ease-in-out;\n    -webkit-transition-duration: .2s;\n            transition-duration: .2s;\n    -webkit-transition-property: background-color, border;\n            transition-property: background-color, border;\n\n    border: 2px solid #ddd;\n    border-radius: 20px;\n    background-color: #fff;\n    background-clip: padding-box;\n}\n.mui-switch.mui-disabled\n{\n    opacity: .3;\n}\n.mui-switch .mui-switch-handle\n{\n    position: absolute;\n    z-index: 1;\n    top: -1px;\n    left: -1px;\n\n    width: 28px;\n    height: 28px;\n\n    -webkit-transition: .2s ease-in-out;\n            transition: .2s ease-in-out;\n    -webkit-transition-property: -webkit-transform, width,left;\n            transition-property:         transform, width,left;\n\n    border-radius: 16px;\n    background-color: #fff;\n    background-clip: padding-box;\n    -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .4);\n            box-shadow: 0 2px 5px rgba(0, 0, 0, .4);\n}\n.mui-switch:before\n{\n    font-size: 13px;\n\n    position: absolute;\n    top: 3px;\n    right: 11px;\n\n    content: 'Off';\n    text-transform: uppercase;\n\n    color: #999;\n}\n.mui-switch.mui-dragging\n{\n    border-color: #f7f7f7;\n    background-color: #f7f7f7;\n}\n.mui-switch.mui-dragging .mui-switch-handle\n{\n    width: 38px;\n}\n.mui-switch.mui-dragging.mui-active .mui-switch-handle\n{\n    left: -11px;\n\n    width: 38px;\n}\n.mui-switch.mui-active\n{\n    border-color: #4cd964;\n    background-color: #4cd964;\n}\n.mui-switch.mui-active .mui-switch-handle\n{\n    -webkit-transform: translate(43px, 0);\n            transform: translate(43px, 0);\n}\n.mui-switch.mui-active:before\n{\n    right: auto;\n    left: 15px;\n\n    content: 'On';\n\n    color: #fff;\n}\n.mui-switch input[type='checkbox']\n{\n    display: none;\n}\n\n.mui-switch-mini\n{\n    width: 47px;\n}\n.mui-switch-mini:before\n{\n    display: none;\n}\n.mui-switch-mini.mui-active .mui-switch-handle\n{\n    -webkit-transform: translate(16px, 0);\n            transform: translate(16px, 0);\n}\n\n.mui-switch-blue.mui-active\n{\n    border: 2px solid #007aff;\n    background-color: #007aff;\n}\n\n.mui-content.mui-fade\n{\n    left: 0;\n\n    opacity: 0;\n}\n.mui-content.mui-fade.mui-in\n{\n    opacity: 1;\n}\n.mui-content.mui-sliding\n{\n    z-index: 2;\n\n    -webkit-transition: -webkit-transform .4s;\n            transition:         transform .4s;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n}\n.mui-content.mui-sliding.mui-left\n{\n    z-index: 1;\n\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n}\n.mui-content.mui-sliding.mui-right\n{\n    z-index: 3;\n\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n}\n\n.mui-navigate-right:after,\n.mui-push-left:after,\n.mui-push-right:after\n{\n    font-family: Muiicons;\n    font-size: inherit;\n    line-height: 1;\n\n    position: absolute;\n    top: 50%;\n\n    display: inline-block;\n\n    -webkit-transform: translateY(-50%);\n            transform: translateY(-50%);\n    text-decoration: none;\n\n    color: #bbb;\n\n    -webkit-font-smoothing: antialiased;\n}\n\n.mui-push-left:after\n{\n    left: 15px;\n\n    content: '\\e582';\n}\n\n.mui-navigate-right:after,\n.mui-push-right:after\n{\n    right: 15px;\n\n    content: '\\e583';\n}\n\n.mui-pull-top-pocket, .mui-pull-bottom-pocket\n{\n    position: absolute;\n    left: 0;\n\n    display: block;\n    visibility: hidden;\n    overflow: hidden;\n\n    width: 100%;\n    height: 50px;\n}\n\n.mui-plus-pullrefresh .mui-pull-top-pocket, .mui-plus-pullrefresh .mui-pull-bottom-pocket\n{\n    display: none;\n    visibility: visible;\n}\n\n.mui-pull-top-pocket\n{\n    top: 0;\n}\n\n.mui-bar-nav ~ .mui-content .mui-pull-top-pocket\n{\n    top: 44px;\n}\n\n.mui-bar-nav ~ .mui-bar-header-secondary ~ .mui-content .mui-pull-top-pocket\n{\n    top: 88px;\n}\n\n.mui-pull-bottom-pocket\n{\n    position: relative;\n    bottom: 0;\n\n    height: 40px;\n}\n.mui-pull-bottom-pocket .mui-pull-loading\n{\n    visibility: hidden;\n}\n.mui-pull-bottom-pocket .mui-pull-loading.mui-in\n{\n    display: inline-block;\n}\n\n.mui-pull\n{\n    font-weight: bold;\n\n    position: absolute;\n    right: 0;\n    bottom: 10px;\n    left: 0;\n\n    text-align: center;\n\n    color: #777;\n}\n\n.mui-pull-loading\n{\n    margin-right: 10px;\n\n    -webkit-transition: -webkit-transform .4s;\n            transition:         transform .4s;\n    -webkit-transition-duration: 400ms;\n            transition-duration: 400ms;\n    vertical-align: middle;\n}\n\n.mui-pull-loading.mui-reverse\n{\n    -webkit-transform: rotate(180deg) translateZ(0);\n            transform: rotate(180deg) translateZ(0);\n}\n\n.mui-pull-caption\n{\n    font-size: 15px;\n    line-height: 24px;\n\n    position: relative;\n\n    display: inline-block;\n    overflow: visible;\n\n    margin-top: 0;\n\n    vertical-align: middle;\n}\n.mui-pull-caption span\n{\n    display: none;\n}\n.mui-pull-caption span.mui-in\n{\n    display: inline;\n}\n\n.mui-toast-container\n{\n    line-height: 17px;\n\n    position: fixed;\n    z-index: 9999;\n    bottom: 50px;\n    left: 50%;\n\n    -webkit-transition: opacity .3s;\n            transition: opacity .3s;\n    -webkit-transform: translate(-50%, 0);\n            transform: translate(-50%, 0);\n\n    opacity: 0;\n}\n.mui-toast-container.mui-active\n{\n    opacity: .9;\n}\n\n.mui-toast-message\n{\n    font-size: 14px;\n\n    padding: 10px 25px;\n\n    text-align: center;\n\n    color: #fff;\n    border-radius: 6px;\n    background-color: #323232;\n}\n\n.mui-numbox\n{\n    position: relative;\n\n    display: inline-block;\n    overflow: hidden;\n\n    width: 120px;\n    height: 35px;\n    padding: 0 40px 0 40px;\n\n    vertical-align: top;\n    vertical-align: middle;\n\n    border: solid 1px #bbb;\n    border-radius: 3px;\n    background-color: #efeff4;\n}\n.mui-numbox [class*=numbox-btn], .mui-numbox [class*=btn-numbox]\n{\n    font-size: 18px;\n    font-weight: normal;\n    line-height: 100%;\n\n    position: absolute;\n    top: 0;\n\n    overflow: hidden;\n\n    width: 40px;\n    height: 100%;\n    padding: 0;\n\n    color: #555;\n    border: none;\n    border-radius: 0;\n    background-color: #f9f9f9;\n}\n.mui-numbox [class*=numbox-btn]:active, .mui-numbox [class*=btn-numbox]:active\n{\n    background-color: #ccc;\n}\n.mui-numbox [class*=numbox-btn][disabled], .mui-numbox [class*=btn-numbox][disabled]\n{\n    color: #c0c0c0;\n}\n.mui-numbox .mui-numbox-btn-plus, .mui-numbox .mui-btn-numbox-plus\n{\n    right: 0;\n\n    border-top-right-radius: 3px;\n    border-bottom-right-radius: 3px;\n}\n.mui-numbox .mui-numbox-btn-minus, .mui-numbox .mui-btn-numbox-minus\n{\n    left: 0;\n\n    border-top-left-radius: 3px;\n    border-bottom-left-radius: 3px;\n}\n.mui-numbox .mui-numbox-input, .mui-numbox .mui-input-numbox\n{\n    display: inline-block;\n    overflow: hidden;\n\n    width: 100% !important;\n    height: 100%;\n    margin: 0;\n    padding: 0 3px !important;\n\n    text-align: center;\n    text-overflow: ellipsis;\n    word-break: normal;\n\n    border: none !important;\n    border-right: solid 1px #ccc !important;\n    border-left: solid 1px #ccc !important;\n    border-radius: 0 !important;\n}\n\n.mui-input-row .mui-numbox\n{\n    float: right;\n\n    margin: 2px 8px;\n}\n\n@font-face {\n    font-family: Muiicons;\n    font-weight: normal;\n    font-style: normal;\n\n    src: url('../fonts/mui.ttf') format('truetype');\n}\n.mui-icon\n{\n    font-family: Muiicons;\n    font-size: 24px;\n    font-weight: normal;\n    font-style: normal;\n    line-height: 1;\n\n    display: inline-block;\n\n    text-decoration: none;\n\n    -webkit-font-smoothing: antialiased;\n}\n.mui-icon.mui-active\n{\n    color: #007aff;\n}\n.mui-icon.mui-right:before\n{\n    float: right;\n\n    padding-left: .2em;\n}\n\n.mui-icon-contact:before\n{\n    content: '\\e100';\n}\n\n.mui-icon-person:before\n{\n    content: '\\e101';\n}\n\n.mui-icon-personadd:before\n{\n    content: '\\e102';\n}\n\n.mui-icon-contact-filled:before\n{\n    content: '\\e130';\n}\n\n.mui-icon-person-filled:before\n{\n    content: '\\e131';\n}\n\n.mui-icon-personadd-filled:before\n{\n    content: '\\e132';\n}\n\n.mui-icon-phone:before\n{\n    content: '\\e200';\n}\n\n.mui-icon-email:before\n{\n    content: '\\e201';\n}\n\n.mui-icon-chatbubble:before\n{\n    content: '\\e202';\n}\n\n.mui-icon-chatboxes:before\n{\n    content: '\\e203';\n}\n\n.mui-icon-phone-filled:before\n{\n    content: '\\e230';\n}\n\n.mui-icon-email-filled:before\n{\n    content: '\\e231';\n}\n\n.mui-icon-chatbubble-filled:before\n{\n    content: '\\e232';\n}\n\n.mui-icon-chatboxes-filled:before\n{\n    content: '\\e233';\n}\n\n.mui-icon-weibo:before\n{\n    content: '\\e260';\n}\n\n.mui-icon-weixin:before\n{\n    content: '\\e261';\n}\n\n.mui-icon-pengyouquan:before\n{\n    content: '\\e262';\n}\n\n.mui-icon-chat:before\n{\n    content: '\\e263';\n}\n\n.mui-icon-qq:before\n{\n    content: '\\e264';\n}\n\n.mui-icon-videocam:before\n{\n    content: '\\e300';\n}\n\n.mui-icon-camera:before\n{\n    content: '\\e301';\n}\n\n.mui-icon-mic:before\n{\n    content: '\\e302';\n}\n\n.mui-icon-location:before\n{\n    content: '\\e303';\n}\n\n.mui-icon-mic-filled:before, .mui-icon-speech:before\n{\n    content: '\\e332';\n}\n\n.mui-icon-location-filled:before\n{\n    content: '\\e333';\n}\n\n.mui-icon-micoff:before\n{\n    content: '\\e360';\n}\n\n.mui-icon-image:before\n{\n    content: '\\e363';\n}\n\n.mui-icon-map:before\n{\n    content: '\\e364';\n}\n\n.mui-icon-compose:before\n{\n    content: '\\e400';\n}\n\n.mui-icon-trash:before\n{\n    content: '\\e401';\n}\n\n.mui-icon-upload:before\n{\n    content: '\\e402';\n}\n\n.mui-icon-download:before\n{\n    content: '\\e403';\n}\n\n.mui-icon-close:before\n{\n    content: '\\e404';\n}\n\n.mui-icon-redo:before\n{\n    content: '\\e405';\n}\n\n.mui-icon-undo:before\n{\n    content: '\\e406';\n}\n\n.mui-icon-refresh:before\n{\n    content: '\\e407';\n}\n\n.mui-icon-star:before\n{\n    content: '\\e408';\n}\n\n.mui-icon-plus:before\n{\n    content: '\\e409';\n}\n\n.mui-icon-minus:before\n{\n    content: '\\e410';\n}\n\n.mui-icon-circle:before, .mui-icon-checkbox:before\n{\n    content: '\\e411';\n}\n\n.mui-icon-close-filled:before, .mui-icon-clear:before\n{\n    content: '\\e434';\n}\n\n.mui-icon-refresh-filled:before\n{\n    content: '\\e437';\n}\n\n.mui-icon-star-filled:before\n{\n    content: '\\e438';\n}\n\n.mui-icon-plus-filled:before\n{\n    content: '\\e439';\n}\n\n.mui-icon-minus-filled:before\n{\n    content: '\\e440';\n}\n\n.mui-icon-circle-filled:before\n{\n    content: '\\e441';\n}\n\n.mui-icon-checkbox-filled:before\n{\n    content: '\\e442';\n}\n\n.mui-icon-closeempty:before\n{\n    content: '\\e460';\n}\n\n.mui-icon-refreshempty:before\n{\n    content: '\\e461';\n}\n\n.mui-icon-reload:before\n{\n    content: '\\e462';\n}\n\n.mui-icon-starhalf:before\n{\n    content: '\\e463';\n}\n\n.mui-icon-spinner:before\n{\n    content: '\\e464';\n}\n\n.mui-icon-spinner-cycle:before\n{\n    content: '\\e465';\n}\n\n.mui-icon-search:before\n{\n    content: '\\e466';\n}\n\n.mui-icon-plusempty:before\n{\n    content: '\\e468';\n}\n\n.mui-icon-forward:before\n{\n    content: '\\e470';\n}\n\n.mui-icon-back:before, .mui-icon-left-nav:before\n{\n    content: '\\e471';\n}\n\n.mui-icon-checkmarkempty:before\n{\n    content: '\\e472';\n}\n\n.mui-icon-home:before\n{\n    content: '\\e500';\n}\n\n.mui-icon-navigate:before\n{\n    content: '\\e501';\n}\n\n.mui-icon-gear:before\n{\n    content: '\\e502';\n}\n\n.mui-icon-paperplane:before\n{\n    content: '\\e503';\n}\n\n.mui-icon-info:before\n{\n    content: '\\e504';\n}\n\n.mui-icon-help:before\n{\n    content: '\\e505';\n}\n\n.mui-icon-locked:before\n{\n    content: '\\e506';\n}\n\n.mui-icon-more:before\n{\n    content: '\\e507';\n}\n\n.mui-icon-flag:before\n{\n    content: '\\e508';\n}\n\n.mui-icon-home-filled:before\n{\n    content: '\\e530';\n}\n\n.mui-icon-gear-filled:before\n{\n    content: '\\e532';\n}\n\n.mui-icon-info-filled:before\n{\n    content: '\\e534';\n}\n\n.mui-icon-help-filled:before\n{\n    content: '\\e535';\n}\n\n.mui-icon-more-filled:before\n{\n    content: '\\e537';\n}\n\n.mui-icon-settings:before\n{\n    content: '\\e560';\n}\n\n.mui-icon-list:before\n{\n    content: '\\e562';\n}\n\n.mui-icon-bars:before\n{\n    content: '\\e563';\n}\n\n.mui-icon-loop:before\n{\n    content: '\\e565';\n}\n\n.mui-icon-paperclip:before\n{\n    content: '\\e567';\n}\n\n.mui-icon-eye:before\n{\n    content: '\\e568';\n}\n\n.mui-icon-arrowup:before\n{\n    content: '\\e580';\n}\n\n.mui-icon-arrowdown:before\n{\n    content: '\\e581';\n}\n\n.mui-icon-arrowleft:before\n{\n    content: '\\e582';\n}\n\n.mui-icon-arrowright:before\n{\n    content: '\\e583';\n}\n\n.mui-icon-arrowthinup:before\n{\n    content: '\\e584';\n}\n\n.mui-icon-arrowthindown:before\n{\n    content: '\\e585';\n}\n\n.mui-icon-arrowthinleft:before\n{\n    content: '\\e586';\n}\n\n.mui-icon-arrowthinright:before\n{\n    content: '\\e587';\n}\n\n.mui-icon-pulldown:before\n{\n    content: '\\e588';\n}\n\n.mui-fullscreen\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n}\n.mui-fullscreen.mui-slider .mui-slider-group\n{\n    height: 100%;\n}\n.mui-fullscreen .mui-segmented-control ~ .mui-slider-group\n{\n    position: absolute;\n    top: 40px;\n    bottom: 0;\n\n    width: 100%;\n    height: auto;\n}\n.mui-fullscreen.mui-slider .mui-slider-item > a\n{\n    top: 50%;\n\n    -webkit-transform: translateY(-50%);\n            transform: translateY(-50%);\n}\n.mui-fullscreen .mui-off-canvas-wrap .mui-slider-item > a\n{\n    top: auto;\n\n    -webkit-transform: none;\n            transform: none;\n}\n\n.mui-bar-nav ~ .mui-content .mui-slider.mui-fullscreen\n{\n    top: 44px;\n}\n\n.mui-bar-tab ~ .mui-content .mui-slider.mui-fullscreen .mui-segmented-control ~ .mui-slider-group\n{\n    bottom: 50px;\n}\n\n.mui-android.mui-android-4-0 input:focus,\n.mui-android.mui-android-4-0 textarea:focus\n{\n    -webkit-user-modify: inherit;\n}\n\n.mui-android.mui-android-4-2 input,\n.mui-android.mui-android-4-2 textarea, .mui-android.mui-android-4-3 input,\n.mui-android.mui-android-4-3 textarea\n{\n    -webkit-user-select: text;\n}\n\n.mui-ios .mui-table-view-cell\n{\n    -webkit-transform-style: preserve-3d;\n            transform-style: preserve-3d;\n}\n\n.mui-plus-visible, .mui-wechat-visible\n{\n    display: none !important;\n}\n\n.mui-plus-hidden, .mui-wechat-hidden\n{\n    display: block !important;\n}\n\n.mui-tab-item.mui-plus-hidden, .mui-tab-item.mui-wechat-hidden\n{\n    display: table-cell !important;\n}\n\n.mui-plus .mui-plus-visible, .mui-wechat .mui-wechat-visible\n{\n    display: block !important;\n}\n\n.mui-plus .mui-tab-item.mui-plus-visible, .mui-wechat .mui-tab-item.mui-wechat-visible\n{\n    display: table-cell !important;\n}\n\n.mui-plus .mui-plus-hidden, .mui-wechat .mui-wechat-hidden\n{\n    display: none !important;\n}\n\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav\n{\n    height: 64px;\n    padding-top: 20px;\n}\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav ~ .mui-content\n{\n    padding-top: 64px;\n}\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav ~ .mui-content .mui-pull-top-pocket\n{\n    top: 64px;\n}\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary\n{\n    top: 64px;\n}\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary ~ .mui-content\n{\n    padding-top: 94px;\n}\n\n.mui-iframe-wrapper\n{\n    position: absolute;\n    right: 0;\n    left: 0;\n\n    -webkit-overflow-scrolling: touch;\n}\n.mui-iframe-wrapper iframe\n{\n    width: 100%;\n    height: 100%;\n\n    border: 0;\n}\n"
  },
  {
    "path": "dist/js/mui.js",
    "content": "/*!\n * =====================================================\n * Mui v3.7.3 (http://dev.dcloud.net.cn/mui)\n * =====================================================\n */\n/**\n * MUI核心JS\n * @type _L4.$|Function\n */\nvar mui = (function(document, undefined) {\n\tvar readyRE = /complete|loaded|interactive/;\n\tvar idSelectorRE = /^#([\\w-]+)$/;\n\tvar classSelectorRE = /^\\.([\\w-]+)$/;\n\tvar tagSelectorRE = /^[\\w-]+$/;\n\tvar translateRE = /translate(?:3d)?\\((.+?)\\)/;\n\tvar translateMatrixRE = /matrix(3d)?\\((.+?)\\)/;\n\n\tvar $ = function(selector, context) {\n\t\tcontext = context || document;\n\t\tif (!selector)\n\t\t\treturn wrap();\n\t\tif (typeof selector === 'object')\n\t\t\tif ($.isArrayLike(selector)) {\n\t\t\t\treturn wrap($.slice.call(selector), null);\n\t\t\t} else {\n\t\t\t\treturn wrap([selector], null);\n\t\t\t}\n\t\tif (typeof selector === 'function')\n\t\t\treturn $.ready(selector);\n\t\tif (typeof selector === 'string') {\n\t\t\ttry {\n\t\t\t\tselector = selector.trim();\n\t\t\t\tif (idSelectorRE.test(selector)) {\n\t\t\t\t\tvar found = document.getElementById(RegExp.$1);\n\t\t\t\t\treturn wrap(found ? [found] : []);\n\t\t\t\t}\n\t\t\t\treturn wrap($.qsa(selector, context), selector);\n\t\t\t} catch (e) {}\n\t\t}\n\t\treturn wrap();\n\t};\n\n\tvar wrap = function(dom, selector) {\n\t\tdom = dom || [];\n\t\tObject.setPrototypeOf(dom, $.fn);\n\t\tdom.selector = selector || '';\n\t\treturn dom;\n\t};\n\n\t$.uuid = 0;\n\n\t$.data = {};\n\t/**\n\t * extend(simple)\n\t * @param {type} target\n\t * @param {type} source\n\t * @param {type} deep\n\t * @returns {unresolved}\n\t */\n\t$.extend = function() { //from jquery2\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\tif (typeof target !== \"object\" && !$.isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\t\t\tif ((options = arguments[i]) != null) {\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\tif (target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && $.isArray(src) ? src : [];\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && $.isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttarget[name] = $.extend(deep, clone, copy);\n\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t};\n\t/**\n\t * mui noop(function)\n\t */\n\t$.noop = function() {};\n\t/**\n\t * mui slice(array)\n\t */\n\t$.slice = [].slice;\n\t/**\n\t * mui filter(array)\n\t */\n\t$.filter = [].filter;\n\n\t$.type = function(obj) {\n\t\treturn obj == null ? String(obj) : class2type[{}.toString.call(obj)] || \"object\";\n\t};\n\t/**\n\t * mui isArray\n\t */\n\t$.isArray = Array.isArray ||\n\t\tfunction(object) {\n\t\t\treturn object instanceof Array;\n\t\t};\n\t/**\n\t * mui isArrayLike \n\t * @param {Object} obj\n\t */\n\t$.isArrayLike = function(obj) {\n\t\tvar length = !!obj && \"length\" in obj && obj.length;\n\t\tvar type = $.type(obj);\n\t\tif (type === \"function\" || $.isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t};\n\t/**\n\t * mui isWindow(需考虑obj为undefined的情况)\n\t */\n\t$.isWindow = function(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\t/**\n\t * mui isObject\n\t */\n\t$.isObject = function(obj) {\n\t\treturn $.type(obj) === \"object\";\n\t};\n\t/**\n\t * mui isPlainObject\n\t */\n\t$.isPlainObject = function(obj) {\n\t\treturn $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype;\n\t};\n\t/**\n\t * mui isEmptyObject\n\t * @param {Object} o\n\t */\n\t$.isEmptyObject = function(o) {\n\t\tfor (var p in o) {\n\t\t\tif (p !== undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t/**\n\t * mui isFunction\n\t */\n\t$.isFunction = function(value) {\n\t\treturn $.type(value) === \"function\";\n\t};\n\t/**\n\t * mui querySelectorAll\n\t * @param {type} selector\n\t * @param {type} context\n\t * @returns {Array}\n\t */\n\t$.qsa = function(selector, context) {\n\t\tcontext = context || document;\n\t\treturn $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector));\n\t};\n\t/**\n\t * ready(DOMContentLoaded)\n\t * @param {type} callback\n\t * @returns {_L6.$}\n\t */\n\t$.ready = function(callback) {\n\t\tif (readyRE.test(document.readyState)) {\n\t\t\tcallback($);\n\t\t} else {\n\t\t\tdocument.addEventListener('DOMContentLoaded', function() {\n\t\t\t\tcallback($);\n\t\t\t}, false);\n\t\t}\n\t\treturn this;\n\t};\n\t/**\n\t * 将 fn 缓存一段时间后, 再被调用执行\n\t * 此方法为了避免在 ms 段时间内, 执行 fn 多次. 常用于 resize , scroll , mousemove 等连续性事件中;\n\t * 当 ms 设置为 -1, 表示立即执行 fn, 即和直接调用 fn 一样;\n\t * 调用返回函数的 stop 停止最后一次的 buffer 效果\n\t * @param {Object} fn\n\t * @param {Object} ms\n\t * @param {Object} context\n\t */\n\t$.buffer = function(fn, ms, context) {\n\t\tvar timer;\n\t\tvar lastStart = 0;\n\t\tvar lastEnd = 0;\n\t\tvar ms = ms || 150;\n\n\t\tfunction run() {\n\t\t\tif (timer) {\n\t\t\t\ttimer.cancel();\n\t\t\t\ttimer = 0;\n\t\t\t}\n\t\t\tlastStart = $.now();\n\t\t\tfn.apply(context || this, arguments);\n\t\t\tlastEnd = $.now();\n\t\t}\n\n\t\treturn $.extend(function() {\n\t\t\tif (\n\t\t\t\t(!lastStart) || // 从未运行过\n\t\t\t\t(lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒\n\t\t\t\t(lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成，后8*ms毫秒\n\t\t\t) {\n\t\t\t\trun.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tif (timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t}\n\t\t\t\ttimer = $.later(run, ms, null, $.slice.call(arguments));\n\t\t\t}\n\t\t}, {\n\t\t\tstop: function() {\n\t\t\t\tif (timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t\ttimer = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t * each\n\t * @param {type} elements\n\t * @param {type} callback\n\t * @returns {_L8.$}\n\t */\n\t$.each = function(elements, callback, hasOwnProperty) {\n\t\tif (!elements) {\n\t\t\treturn this;\n\t\t}\n\t\tif (typeof elements.length === 'number') {\n\t\t\t[].every.call(elements, function(el, idx) {\n\t\t\t\treturn callback.call(el, idx, el) !== false;\n\t\t\t});\n\t\t} else {\n\t\t\tfor (var key in elements) {\n\t\t\t\tif (hasOwnProperty) {\n\t\t\t\t\tif (elements.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t$.focus = function(element) {\n\t\tif ($.os.ios) {\n\t\t\tsetTimeout(function() {\n\t\t\t\telement.focus();\n\t\t\t}, 10);\n\t\t} else {\n\t\t\telement.focus();\n\t\t}\n\t};\n\t/**\n\t * trigger event\n\t * @param {type} element\n\t * @param {type} eventType\n\t * @param {type} eventData\n\t * @returns {_L8.$}\n\t */\n\t$.trigger = function(element, eventType, eventData) {\n\t\telement.dispatchEvent(new CustomEvent(eventType, {\n\t\t\tdetail: eventData,\n\t\t\tbubbles: true,\n\t\t\tcancelable: true\n\t\t}));\n\t\treturn this;\n\t};\n\t/**\n\t * getStyles\n\t * @param {type} element\n\t * @param {type} property\n\t * @returns {styles}\n\t */\n\t$.getStyles = function(element, property) {\n\t\tvar styles = element.ownerDocument.defaultView.getComputedStyle(element, null);\n\t\tif (property) {\n\t\t\treturn styles.getPropertyValue(property) || styles[property];\n\t\t}\n\t\treturn styles;\n\t};\n\t/**\n\t * parseTranslate\n\t * @param {type} translateString\n\t * @param {type} position\n\t * @returns {Object}\n\t */\n\t$.parseTranslate = function(translateString, position) {\n\t\tvar result = translateString.match(translateRE || '');\n\t\tif (!result || !result[1]) {\n\t\t\tresult = ['', '0,0,0'];\n\t\t}\n\t\tresult = result[1].split(\",\");\n\t\tresult = {\n\t\t\tx: parseFloat(result[0]),\n\t\t\ty: parseFloat(result[1]),\n\t\t\tz: parseFloat(result[2])\n\t\t};\n\t\tif (position && result.hasOwnProperty(position)) {\n\t\t\treturn result[position];\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * parseTranslateMatrix\n\t * @param {type} translateString\n\t * @param {type} position\n\t * @returns {Object}\n\t */\n\t$.parseTranslateMatrix = function(translateString, position) {\n\t\tvar matrix = translateString.match(translateMatrixRE);\n\t\tvar is3D = matrix && matrix[1];\n\t\tif (matrix) {\n\t\t\tmatrix = matrix[2].split(\",\");\n\t\t\tif (is3D === \"3d\")\n\t\t\t\tmatrix = matrix.slice(12, 15);\n\t\t\telse {\n\t\t\t\tmatrix.push(0);\n\t\t\t\tmatrix = matrix.slice(4, 7);\n\t\t\t}\n\t\t} else {\n\t\t\tmatrix = [0, 0, 0];\n\t\t}\n\t\tvar result = {\n\t\t\tx: parseFloat(matrix[0]),\n\t\t\ty: parseFloat(matrix[1]),\n\t\t\tz: parseFloat(matrix[2])\n\t\t};\n\t\tif (position && result.hasOwnProperty(position)) {\n\t\t\treturn result[position];\n\t\t}\n\t\treturn result;\n\t};\n\t$.hooks = {};\n\t$.addAction = function(type, hook) {\n\t\tvar hooks = $.hooks[type];\n\t\tif (!hooks) {\n\t\t\thooks = [];\n\t\t}\n\t\thook.index = hook.index || 1000;\n\t\thooks.push(hook);\n\t\thooks.sort(function(a, b) {\n\t\t\treturn a.index - b.index;\n\t\t});\n\t\t$.hooks[type] = hooks;\n\t\treturn $.hooks[type];\n\t};\n\t$.doAction = function(type, callback) {\n\t\tif ($.isFunction(callback)) { //指定了callback\n\t\t\t$.each($.hooks[type], callback);\n\t\t} else { //未指定callback，直接执行\n\t\t\t$.each($.hooks[type], function(index, hook) {\n\t\t\t\treturn !hook.handle();\n\t\t\t});\n\t\t}\n\t};\n\t/**\n\t * setTimeout封装\n\t * @param {Object} fn\n\t * @param {Object} when\n\t * @param {Object} context\n\t * @param {Object} data\n\t */\n\t$.later = function(fn, when, context, data) {\n\t\twhen = when || 0;\n\t\tvar m = fn;\n\t\tvar d = data;\n\t\tvar f;\n\t\tvar r;\n\n\t\tif (typeof fn === 'string') {\n\t\t\tm = context[fn];\n\t\t}\n\n\t\tf = function() {\n\t\t\tm.apply(context, $.isArray(d) ? d : [d]);\n\t\t};\n\n\t\tr = setTimeout(f, when);\n\n\t\treturn {\n\t\t\tid: r,\n\t\t\tcancel: function() {\n\t\t\t\tclearTimeout(r);\n\t\t\t}\n\t\t};\n\t};\n\t$.now = Date.now || function() {\n\t\treturn +new Date();\n\t};\n\tvar class2type = {};\n\t$.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) {\n\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t});\n\tif (window.JSON) {\n\t\t$.parseJSON = JSON.parse;\n\t}\n\t/**\n\t * $.fn\n\t */\n\t$.fn = {\n\t\teach: function(callback) {\n\t\t\t[].every.call(this, function(el, idx) {\n\t\t\t\treturn callback.call(el, idx, el) !== false;\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t};\n\n\t/**\n\t * 兼容 AMD 模块\n\t **/\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine('mui', [], function() {\n\t\t\treturn $;\n\t\t});\n\t}\n\n\treturn $;\n})(document);\n//window.mui = mui;\n//'$' in window || (window.$ = mui);\n/**\n * $.os\n * @param {type} $\n * @returns {undefined}\n */\n(function($, window) {\n\tfunction detect(ua) {\n\t\tthis.os = {};\n\t\tvar funcs = [\n\n\t\t\tfunction() { //wechat\n\t\t\t\tvar wechat = ua.match(/(MicroMessenger)\\/([\\d\\.]+)/i);\n\t\t\t\tif (wechat) { //wechat\n\t\t\t\t\tthis.os.wechat = {\n\t\t\t\t\t\tversion: wechat[2].replace(/_/g, '.')\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tfunction() { //android\n\t\t\t\tvar android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n\t\t\t\tif (android) {\n\t\t\t\t\tthis.os.android = true;\n\t\t\t\t\tthis.os.version = android[2];\n\n\t\t\t\t\tthis.os.isBadAndroid = !(/Chrome\\/\\d/.test(window.navigator.appVersion));\n\t\t\t\t}\n\t\t\t\treturn this.os.android === true;\n\t\t\t},\n\t\t\tfunction() { //ios\n\t\t\t\tvar iphone = ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n\t\t\t\tif (iphone) { //iphone\n\t\t\t\t\tthis.os.ios = this.os.iphone = true;\n\t\t\t\t\tthis.os.version = iphone[2].replace(/_/g, '.');\n\t\t\t\t} else {\n\t\t\t\t\tvar ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n\t\t\t\t\tif (ipad) { //ipad\n\t\t\t\t\t\tthis.os.ios = this.os.ipad = true;\n\t\t\t\t\t\tthis.os.version = ipad[2].replace(/_/g, '.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.os.ios === true;\n\t\t\t}\n\t\t];\n\t\t[].every.call(funcs, function(func) {\n\t\t\treturn !func.call($);\n\t\t});\n\t}\n\tdetect.call($, navigator.userAgent);\n})(mui, window);\n/**\n * $.os.plus\n * @param {type} $\n * @returns {undefined}\n */\n(function($, document) {\n\tfunction detect(ua) {\n\t\tthis.os = this.os || {};\n\t\tvar plus = ua.match(/Html5Plus/i); //TODO 5\\+Browser?\n\t\tif (plus) {\n\t\t\tthis.os.plus = true;\n\t\t\t$(function() {\n\t\t\t\tdocument.body.classList.add('mui-plus');\n\t\t\t});\n\t\t\tif (ua.match(/StreamApp/i)) { //TODO 最好有流应用自己的标识\n\t\t\t\tthis.os.stream = true;\n\t\t\t\t$(function() {\n\t\t\t\t\tdocument.body.classList.add('mui-plus-stream');\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tdetect.call($, navigator.userAgent);\n})(mui, document);\n/**\n * 仅提供简单的on，off(仅支持事件委托，不支持当前元素绑定，当前元素绑定请直接使用addEventListener,removeEventListener)\n * @param {Object} $\n */\n(function($) {\n\tif ('ontouchstart' in window) {\n\t\t$.isTouchable = true;\n\t\t$.EVENT_START = 'touchstart';\n\t\t$.EVENT_MOVE = 'touchmove';\n\t\t$.EVENT_END = 'touchend';\n\t} else {\n\t\t$.isTouchable = false;\n\t\t$.EVENT_START = 'mousedown';\n\t\t$.EVENT_MOVE = 'mousemove';\n\t\t$.EVENT_END = 'mouseup';\n\t}\n\t$.EVENT_CANCEL = 'touchcancel';\n\t$.EVENT_CLICK = 'click';\n\n\tvar _mid = 1;\n\tvar delegates = {};\n\t//需要wrap的函数\n\tvar eventMethods = {\n\t\tpreventDefault: 'isDefaultPrevented',\n\t\tstopImmediatePropagation: 'isImmediatePropagationStopped',\n\t\tstopPropagation: 'isPropagationStopped'\n\t};\n\t//默认true返回函数\n\tvar returnTrue = function() {\n\t\treturn true\n\t};\n\t//默认false返回函数\n\tvar returnFalse = function() {\n\t\treturn false\n\t};\n\t//wrap浏览器事件\n\tvar compatible = function(event, target) {\n\t\tif (!event.detail) {\n\t\t\tevent.detail = {\n\t\t\t\tcurrentTarget: target\n\t\t\t};\n\t\t} else {\n\t\t\tevent.detail.currentTarget = target;\n\t\t}\n\t\t$.each(eventMethods, function(name, predicate) {\n\t\t\tvar sourceMethod = event[name];\n\t\t\tevent[name] = function() {\n\t\t\t\tthis[predicate] = returnTrue;\n\t\t\t\treturn sourceMethod && sourceMethod.apply(event, arguments)\n\t\t\t}\n\t\t\tevent[predicate] = returnFalse;\n\t\t}, true);\n\t\treturn event;\n\t};\n\t//简单的wrap对象_mid\n\tvar mid = function(obj) {\n\t\treturn obj && (obj._mid || (obj._mid = _mid++));\n\t};\n\t//事件委托对象绑定的事件回调列表\n\tvar delegateFns = {};\n\t//返回事件委托的wrap事件回调\n\tvar delegateFn = function(element, event, selector, callback) {\n\t\treturn function(e) {\n\t\t\t//same event\n\t\t\tvar callbackObjs = delegates[element._mid][event];\n\t\t\tvar handlerQueue = [];\n\t\t\tvar target = e.target;\n\t\t\tvar selectorAlls = {};\n\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\tif (target === element) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar matches = {};\n\t\t\t\t$.each(callbackObjs, function(selector, callbacks) { //same selector\n\t\t\t\t\tselectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element));\n\t\t\t\t\tif (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) {\n\t\t\t\t\t\tif (!matches[selector]) {\n\t\t\t\t\t\t\tmatches[selector] = callbacks;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t\tif (!$.isEmptyObject(matches)) {\n\t\t\t\t\thandlerQueue.push({\n\t\t\t\t\t\telement: target,\n\t\t\t\t\t\thandlers: matches\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tselectorAlls = null;\n\t\t\te = compatible(e); //compatible event\n\t\t\t$.each(handlerQueue, function(index, handler) {\n\t\t\t\ttarget = handler.element;\n\t\t\t\tvar tagName = target.tagName;\n\t\t\t\tif (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.detail && e.detail.gesture && e.detail.gesture.preventDefault();\n\t\t\t\t}\n\t\t\t\t$.each(handler.handlers, function(index, handler) {\n\t\t\t\t\t$.each(handler, function(index, callback) {\n\t\t\t\t\t\tif (callback.call(target, e) === false) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, true);\n\t\t\t\t}, true)\n\t\t\t\tif (e.isPropagationStopped()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t};\n\t};\n\tvar findDelegateFn = function(element, event) {\n\t\tvar delegateCallbacks = delegateFns[mid(element)];\n\t\tvar result = [];\n\t\tif (delegateCallbacks) {\n\t\t\tresult = [];\n\t\t\tif (event) {\n\t\t\t\tvar filterFn = function(fn) {\n\t\t\t\t\treturn fn.type === event;\n\t\t\t\t}\n\t\t\t\treturn delegateCallbacks.filter(filterFn);\n\t\t\t} else {\n\t\t\t\tresult = delegateCallbacks;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\tvar preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;\n\t/**\n\t * mui delegate events\n\t * @param {type} event\n\t * @param {type} selector\n\t * @param {type} callback\n\t * @returns {undefined}\n\t */\n\t$.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用，类似mouse,focus之类暂不封装支持\n\t\treturn this.each(function() {\n\t\t\tvar element = this;\n\t\t\tmid(element);\n\t\t\tmid(callback);\n\t\t\tvar isAddEventListener = false;\n\t\t\tvar delegateEvents = delegates[element._mid] || (delegates[element._mid] = {});\n\t\t\tvar delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {}));\n\t\t\tif ($.isEmptyObject(delegateCallbackObjs)) {\n\t\t\t\tisAddEventListener = true;\n\t\t\t}\n\t\t\tvar delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []);\n\t\t\tdelegateCallbacks.push(callback);\n\t\t\tif (isAddEventListener) {\n\t\t\t\tvar delegateFnArray = delegateFns[mid(element)];\n\t\t\t\tif (!delegateFnArray) {\n\t\t\t\t\tdelegateFnArray = [];\n\t\t\t\t}\n\t\t\t\tvar delegateCallback = delegateFn(element, event, selector, callback);\n\t\t\t\tdelegateFnArray.push(delegateCallback);\n\t\t\t\tdelegateCallback.i = delegateFnArray.length - 1;\n\t\t\t\tdelegateCallback.type = event;\n\t\t\t\tdelegateFns[mid(element)] = delegateFnArray;\n\t\t\t\telement.addEventListener(event, delegateCallback);\n\t\t\t\tif (event === 'tap') { //TODO 需要找个更好的解决方案\n\t\t\t\t\telement.addEventListener('click', function(e) {\n\t\t\t\t\t\tif (e.target) {\n\t\t\t\t\t\t\tvar tagName = e.target.tagName;\n\t\t\t\t\t\t\tif (!preventDefaultException.test(tagName)) {\n\t\t\t\t\t\t\t\tif (tagName === 'A') {\n\t\t\t\t\t\t\t\t\tvar href = e.target.href;\n\t\t\t\t\t\t\t\t\tif (!(href && ~href.indexOf('tel:'))) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t$.fn.off = function(event, selector, callback) {\n\t\treturn this.each(function() {\n\t\t\tvar _mid = mid(this);\n\t\t\tif (!event) { //mui(selector).off();\n\t\t\t\tdelegates[_mid] && delete delegates[_mid];\n\t\t\t} else if (!selector) { //mui(selector).off(event);\n\t\t\t\tdelegates[_mid] && delete delegates[_mid][event];\n\t\t\t} else if (!callback) { //mui(selector).off(event,selector);\n\t\t\t\tdelegates[_mid] && delegates[_mid][event] && delete delegates[_mid][event][selector];\n\t\t\t} else { //mui(selector).off(event,selector,callback);\n\t\t\t\tvar delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector];\n\t\t\t\t$.each(delegateCallbacks, function(index, delegateCallback) {\n\t\t\t\t\tif (mid(delegateCallback) === mid(callback)) {\n\t\t\t\t\t\tdelegateCallbacks.splice(index, 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\tif (delegates[_mid]) {\n\t\t\t\t//如果off掉了所有当前element的指定的event事件，则remove掉当前element的delegate回调\n\t\t\t\tif ((!delegates[_mid][event] || $.isEmptyObject(delegates[_mid][event]))) {\n\t\t\t\t\tfindDelegateFn(this, event).forEach(function(fn) {\n\t\t\t\t\t\tthis.removeEventListener(fn.type, fn);\n\t\t\t\t\t\tdelete delegateFns[_mid][fn.i];\n\t\t\t\t\t}.bind(this));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//如果delegates[_mid]已不存在，删除所有\n\t\t\t\tfindDelegateFn(this).forEach(function(fn) {\n\t\t\t\t\tthis.removeEventListener(fn.type, fn);\n\t\t\t\t\tdelete delegateFns[_mid][fn.i];\n\t\t\t\t}.bind(this));\n\t\t\t}\n\t\t});\n\n\t};\n})(mui);\n/**\n * mui target(action>popover>modal>tab>toggle)\n */\n(function($, window, document) {\n\t/**\n\t * targets\n\t */\n\t$.targets = {};\n\t/**\n\t * target handles\n\t */\n\t$.targetHandles = [];\n\t/**\n\t * register target\n\t * @param {type} target\n\t * @returns {$.targets}\n\t */\n\t$.registerTarget = function(target) {\n\n\t\ttarget.index = target.index || 1000;\n\n\t\t$.targetHandles.push(target);\n\n\t\t$.targetHandles.sort(function(a, b) {\n\t\t\treturn a.index - b.index;\n\t\t});\n\n\t\treturn $.targetHandles;\n\t};\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tvar target = event.target;\n\t\tvar founds = {};\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tvar isFound = false;\n\t\t\t$.each($.targetHandles, function(index, targetHandle) {\n\t\t\t\tvar name = targetHandle.name;\n\t\t\t\tif (!isFound && !founds[name] && targetHandle.hasOwnProperty('handle')) {\n\t\t\t\t\t$.targets[name] = targetHandle.handle(event, target);\n\t\t\t\t\tif ($.targets[name]) {\n\t\t\t\t\t\tfounds[name] = true;\n\t\t\t\t\t\tif (targetHandle.isContinue !== true) {\n\t\t\t\t\t\t\tisFound = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!founds[name]) {\n\t\t\t\t\t\tif (targetHandle.isReset !== false)\n\t\t\t\t\t\t\t$.targets[name] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (isFound) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\twindow.addEventListener('click', function(event) { //解决touch与click的target不一致的问题(比如链接边缘点击时，touch的target为html，而click的target为A)\n\t\tvar target = event.target;\n\t\tvar isFound = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.tagName === 'A') {\n\t\t\t\t$.each($.targetHandles, function(index, targetHandle) {\n\t\t\t\t\tvar name = targetHandle.name;\n\t\t\t\t\tif (targetHandle.hasOwnProperty('handle')) {\n\t\t\t\t\t\tif (targetHandle.handle(event, target)) {\n\t\t\t\t\t\t\tisFound = true;\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (isFound) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(mui, window, document);\n/**\n * fixed trim\n * @param {type} undefined\n * @returns {undefined}\n */\n(function(undefined) {\n\tif (String.prototype.trim === undefined) { // fix for iOS 3.2\n\t\tString.prototype.trim = function() {\n\t\t\treturn this.replace(/^\\s+|\\s+$/g, '');\n\t\t};\n\t}\n\tObject.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {\n\t\tobj['__proto__'] = proto;\n\t\treturn obj;\n\t};\n\n})();\n/**\n * fixed CustomEvent\n */\n(function() {\n\tif (typeof window.CustomEvent === 'undefined') {\n\t\tfunction CustomEvent(event, params) {\n\t\t\tparams = params || {\n\t\t\t\tbubbles: false,\n\t\t\t\tcancelable: false,\n\t\t\t\tdetail: undefined\n\t\t\t};\n\t\t\tvar evt = document.createEvent('Events');\n\t\t\tvar bubbles = true;\n\t\t\tfor (var name in params) {\n\t\t\t\t(name === 'bubbles') ? (bubbles = !!params[name]) : (evt[name] = params[name]);\n\t\t\t}\n\t\t\tevt.initEvent(event, bubbles, true);\n\t\t\treturn evt;\n\t\t};\n\t\tCustomEvent.prototype = window.Event.prototype;\n\t\twindow.CustomEvent = CustomEvent;\n\t}\n})();\n/*\n\tA shim for non ES5 supporting browsers.\n\tAdds function bind to Function prototype, so that you can do partial application.\n\tWorks 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.\n*/\n\nFunction.prototype.bind = Function.prototype.bind || function(to) {\n\t// Make an array of our arguments, starting from second argument\n\tvar partial = Array.prototype.splice.call(arguments, 1),\n\t\t// We'll need the original function.\n\t\tfn = this;\n\tvar bound = function() {\n\t\t\t// Join the already applied arguments to the now called ones (after converting to an array again).\n\t\t\tvar args = partial.concat(Array.prototype.splice.call(arguments, 0));\n\t\t\t// If not being called as a constructor\n\t\t\tif (!(this instanceof bound)) {\n\t\t\t\t// return the result of the function called bound to target and partially applied.\n\t\t\t\treturn fn.apply(to, args);\n\t\t\t}\n\t\t\t// If being called as a constructor, apply the function bound to self.\n\t\t\tfn.apply(this, args);\n\t\t}\n\t\t// Attach the prototype of the function to our newly created function.\n\tbound.prototype = fn.prototype;\n\treturn bound;\n};\n/**\n * mui fixed classList\n * @param {type} document\n * @returns {undefined}\n */\n(function(document) {\n    if (!(\"classList\" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {\n\n        Object.defineProperty(HTMLElement.prototype, 'classList', {\n            get: function() {\n                var self = this;\n                function update(fn) {\n                    return function(value) {\n                        var classes = self.className.split(/\\s+/),\n                                index = classes.indexOf(value);\n\n                        fn(classes, index, value);\n                        self.className = classes.join(\" \");\n                    };\n                }\n\n                var ret = {\n                    add: update(function(classes, index, value) {\n                        ~index || classes.push(value);\n                    }),\n                    remove: update(function(classes, index) {\n                        ~index && classes.splice(index, 1);\n                    }),\n                    toggle: update(function(classes, index, value) {\n                        ~index ? classes.splice(index, 1) : classes.push(value);\n                    }),\n                    contains: function(value) {\n                        return !!~self.className.split(/\\s+/).indexOf(value);\n                    },\n                    item: function(i) {\n                        return self.className.split(/\\s+/)[i] || null;\n                    }\n                };\n\n                Object.defineProperty(ret, 'length', {\n                    get: function() {\n                        return self.className.split(/\\s+/).length;\n                    }\n                });\n\n                return ret;\n            }\n        });\n    }\n})(document);\n\n/**\n * mui fixed requestAnimationFrame\n * @param {type} window\n * @returns {undefined}\n */\n(function(window) {\n\tif (!window.requestAnimationFrame) {\n\t\tvar lastTime = 0;\n\t\twindow.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) {\n\t\t\tvar currTime = new Date().getTime();\n\t\t\tvar timeToCall = Math.max(0, 16.7 - (currTime - lastTime));\n\t\t\tvar id = window.setTimeout(function() {\n\t\t\t\tcallback(currTime + timeToCall);\n\t\t\t}, timeToCall);\n\t\t\tlastTime = currTime + timeToCall;\n\t\t\treturn id;\n\t\t};\n\t\twindow.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) {\n\t\t\tclearTimeout(id);\n\t\t};\n\t};\n}(window));\n/**\n * fastclick(only for radio,checkbox)\n */\n(function($, window, name) {\n\tif (!$.os.android && !$.os.ios) { //目前仅识别android和ios\n\t\treturn;\n\t}\n\tif (window.FastClick) {\n\t\treturn;\n\t}\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'LABEL') {\n\t\t\tif (target.parentNode) {\n\t\t\t\ttarget = target.parentNode.querySelector('input');\n\t\t\t}\n\t\t}\n\t\tif (target && (target.type === 'radio' || target.type === 'checkbox')) {\n\t\t\tif (!target.disabled) { //disabled\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 40,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\tvar dispatchEvent = function(event) {\n\t\tvar targetElement = $.targets.click;\n\t\tif (targetElement) {\n\t\t\tvar clickEvent, touch;\n\t\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect\n\t\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\t\ttouch = event.detail.gesture.changedTouches[0];\n\t\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\t\tclickEvent = document.createEvent('MouseEvents');\n\t\t\tclickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\t\tclickEvent.forwardedTouchEvent = true;\n\t\t\ttargetElement.dispatchEvent(clickEvent);\n\t\t\tevent.detail && event.detail.gesture.preventDefault();\n\t\t}\n\t};\n\twindow.addEventListener('tap', dispatchEvent);\n\twindow.addEventListener('doubletap', dispatchEvent);\n\t//捕获\n\twindow.addEventListener('click', function(event) {\n\t\tif ($.targets.click) {\n\t\t\tif (!event.forwardedTouchEvent) { //stop click\n\t\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t} else {\n\t\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation\n\t\t\t\t\tevent.propagationStopped = true;\n\t\t\t\t}\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, true);\n\n})(mui, window, 'click');\n(function($, document) {\n\t$(function() {\n\t\tif (!$.os.ios) {\n\t\t\treturn;\n\t\t}\n\t\tvar CLASS_FOCUSIN = 'mui-focusin';\n\t\tvar CLASS_BAR_TAB = 'mui-bar-tab';\n\t\tvar CLASS_BAR_FOOTER = 'mui-bar-footer';\n\t\tvar CLASS_BAR_FOOTER_SECONDARY = 'mui-bar-footer-secondary';\n\t\tvar CLASS_BAR_FOOTER_SECONDARY_TAB = 'mui-bar-footer-secondary-tab';\n\t\t// var content = document.querySelector('.' + CLASS_CONTENT);\n\t\t// if (content) {\n\t\t// \tdocument.body.insertBefore(content, document.body.firstElementChild);\n\t\t// }\n\t\tdocument.addEventListener('focusin', function(e) {\n\t\t\tif ($.os.plus) { //在父webview里边不fix\n\t\t\t\tif (window.plus) {\n\t\t\t\t\tif (plus.webview.currentWebview().children().length > 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar target = e.target;\n\t\t\t//TODO 需考虑所有键盘弹起的情况\n\t\t\tif (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) {\n\t\t\t\tif (target.disabled || target.readOnly) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdocument.body.classList.add(CLASS_FOCUSIN);\n\t\t\t\tvar isFooter = false;\n\t\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\t\tvar classList = target.classList;\n\t\t\t\t\tif (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) {\n\t\t\t\t\t\tisFooter = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isFooter) {\n\t\t\t\t\tvar scrollTop = document.body.scrollHeight;\n\t\t\t\t\tvar scrollLeft = document.body.scrollLeft;\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\twindow.scrollTo(scrollLeft, scrollTop);\n\t\t\t\t\t}, 20);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tdocument.addEventListener('focusout', function(e) {\n\t\t\tvar classList = document.body.classList;\n\t\t\tif (classList.contains(CLASS_FOCUSIN)) {\n\t\t\t\tclassList.remove(CLASS_FOCUSIN);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twindow.scrollTo(document.body.scrollLeft, document.body.scrollTop);\n\t\t\t\t}, 20);\n\t\t\t}\n\t\t});\n\t});\n})(mui, document);\n/**\n * mui namespace(optimization)\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.namespace = 'mui';\n\t$.classNamePrefix = $.namespace + '-';\n\t$.classSelectorPrefix = '.' + $.classNamePrefix;\n\t/**\n\t * 返回正确的className\n\t * @param {type} className\n\t * @returns {String}\n\t */\n\t$.className = function(className) {\n\t\treturn $.classNamePrefix + className;\n\t};\n\t/**\n\t * 返回正确的classSelector\n\t * @param {type} classSelector\n\t * @returns {String}\n\t */\n\t$.classSelector = function(classSelector) {\n\t\treturn classSelector.replace(/\\./g, $.classSelectorPrefix);\n\t};\n\t/**\n         * 返回正确的eventName\n         * @param {type} event\n         * @param {type} module\n         * @returns {String}\n         */\n\t$.eventName = function(event, module) {\n\t\treturn event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : '');\n\t};\n})(mui);\n\n/**\n * mui gestures\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\t$.gestures = {\n\t\tsession: {}\n\t};\n\t/**\n\t * Gesture preventDefault\n\t * @param {type} e\n\t * @returns {undefined}\n\t */\n\t$.preventDefault = function(e) {\n\t\te.preventDefault();\n\t};\n\t/**\n\t * Gesture stopPropagation\n\t * @param {type} e\n\t * @returns {undefined}\n\t */\n\t$.stopPropagation = function(e) {\n\t\te.stopPropagation();\n\t};\n\n\t/**\n\t * register gesture\n\t * @param {type} gesture\n\t * @returns {$.gestures}\n\t */\n\t$.addGesture = function(gesture) {\n\t\treturn $.addAction('gestures', gesture);\n\n\t};\n\n\tvar round = Math.round;\n\tvar abs = Math.abs;\n\tvar sqrt = Math.sqrt;\n\tvar atan = Math.atan;\n\tvar atan2 = Math.atan2;\n\t/**\n\t * distance\n\t * @param {type} p1\n\t * @param {type} p2\n\t * @returns {Number}\n\t */\n\tvar getDistance = function(p1, p2, props) {\n\t\tif(!props) {\n\t\t\tprops = ['x', 'y'];\n\t\t}\n\t\tvar x = p2[props[0]] - p1[props[0]];\n\t\tvar y = p2[props[1]] - p1[props[1]];\n\t\treturn sqrt((x * x) + (y * y));\n\t};\n\t/**\n\t * scale\n\t * @param {Object} starts\n\t * @param {Object} moves\n\t */\n\tvar getScale = function(starts, moves) {\n\t\tif(starts.length >= 2 && moves.length >= 2) {\n\t\t\tvar props = ['pageX', 'pageY'];\n\t\t\treturn getDistance(moves[1], moves[0], props) / getDistance(starts[1], starts[0], props);\n\t\t}\n\t\treturn 1;\n\t};\n\t/**\n\t * angle\n\t * @param {type} p1\n\t * @param {type} p2\n\t * @returns {Number}\n\t */\n\tvar getAngle = function(p1, p2, props) {\n\t\tif(!props) {\n\t\t\tprops = ['x', 'y'];\n\t\t}\n\t\tvar x = p2[props[0]] - p1[props[0]];\n\t\tvar y = p2[props[1]] - p1[props[1]];\n\t\treturn atan2(y, x) * 180 / Math.PI;\n\t};\n\t/**\n\t * direction\n\t * @param {Object} x\n\t * @param {Object} y\n\t */\n\tvar getDirection = function(x, y) {\n\t\tif(x === y) {\n\t\t\treturn '';\n\t\t}\n\t\tif(abs(x) >= abs(y)) {\n\t\t\treturn x > 0 ? 'left' : 'right';\n\t\t}\n\t\treturn y > 0 ? 'up' : 'down';\n\t};\n\t/**\n\t * rotation\n\t * @param {Object} start\n\t * @param {Object} end\n\t */\n\tvar getRotation = function(start, end) {\n\t\tvar props = ['pageX', 'pageY'];\n\t\treturn getAngle(end[1], end[0], props) - getAngle(start[1], start[0], props);\n\t};\n\t/**\n\t * px per ms\n\t * @param {Object} deltaTime\n\t * @param {Object} x\n\t * @param {Object} y\n\t */\n\tvar getVelocity = function(deltaTime, x, y) {\n\t\treturn {\n\t\t\tx: x / deltaTime || 0,\n\t\t\ty: y / deltaTime || 0\n\t\t};\n\t};\n\t/**\n\t * detect gestures\n\t * @param {type} event\n\t * @param {type} touch\n\t * @returns {undefined}\n\t */\n\tvar detect = function(event, touch) {\n\t\tif($.gestures.stoped) {\n\t\t\treturn;\n\t\t}\n\t\t$.doAction('gestures', function(index, gesture) {\n\t\t\tif(!$.gestures.stoped) {\n\t\t\t\tif($.options.gestureConfig[gesture.name] !== false) {\n\t\t\t\t\tgesture.handle(event, touch);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t * 暂时无用\n\t * @param {Object} node\n\t * @param {Object} parent\n\t */\n\tvar hasParent = function(node, parent) {\n\t\twhile(node) {\n\t\t\tif(node == parent) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar uniqueArray = function(src, key, sort) {\n\t\tvar results = [];\n\t\tvar values = [];\n\t\tvar i = 0;\n\n\t\twhile(i < src.length) {\n\t\t\tvar val = key ? src[i][key] : src[i];\n\t\t\tif(values.indexOf(val) < 0) {\n\t\t\t\tresults.push(src[i]);\n\t\t\t}\n\t\t\tvalues[i] = val;\n\t\t\ti++;\n\t\t}\n\n\t\tif(sort) {\n\t\t\tif(!key) {\n\t\t\t\tresults = results.sort();\n\t\t\t} else {\n\t\t\t\tresults = results.sort(function sortUniqueArray(a, b) {\n\t\t\t\t\treturn a[key] > b[key];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t};\n\tvar getMultiCenter = function(touches) {\n\t\tvar touchesLength = touches.length;\n\t\tif(touchesLength === 1) {\n\t\t\treturn {\n\t\t\t\tx: round(touches[0].pageX),\n\t\t\t\ty: round(touches[0].pageY)\n\t\t\t};\n\t\t}\n\n\t\tvar x = 0;\n\t\tvar y = 0;\n\t\tvar i = 0;\n\t\twhile(i < touchesLength) {\n\t\t\tx += touches[i].pageX;\n\t\t\ty += touches[i].pageY;\n\t\t\ti++;\n\t\t}\n\n\t\treturn {\n\t\t\tx: round(x / touchesLength),\n\t\t\ty: round(y / touchesLength)\n\t\t};\n\t};\n\tvar multiTouch = function() {\n\t\treturn $.options.gestureConfig.pinch;\n\t};\n\tvar copySimpleTouchData = function(touch) {\n\t\tvar touches = [];\n\t\tvar i = 0;\n\t\twhile(i < touch.touches.length) {\n\t\t\ttouches[i] = {\n\t\t\t\tpageX: round(touch.touches[i].pageX),\n\t\t\t\tpageY: round(touch.touches[i].pageY)\n\t\t\t};\n\t\t\ti++;\n\t\t}\n\t\treturn {\n\t\t\ttimestamp: $.now(),\n\t\t\tgesture: touch.gesture,\n\t\t\ttouches: touches,\n\t\t\tcenter: getMultiCenter(touch.touches),\n\t\t\tdeltaX: touch.deltaX,\n\t\t\tdeltaY: touch.deltaY\n\t\t};\n\t};\n\n\tvar calDelta = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar center = touch.center;\n\t\tvar offset = session.offsetDelta || {};\n\t\tvar prevDelta = session.prevDelta || {};\n\t\tvar prevTouch = session.prevTouch || {};\n\n\t\tif(touch.gesture.type === $.EVENT_START || touch.gesture.type === $.EVENT_END) {\n\t\t\tprevDelta = session.prevDelta = {\n\t\t\t\tx: prevTouch.deltaX || 0,\n\t\t\t\ty: prevTouch.deltaY || 0\n\t\t\t};\n\n\t\t\toffset = session.offsetDelta = {\n\t\t\t\tx: center.x,\n\t\t\t\ty: center.y\n\t\t\t};\n\t\t}\n\t\ttouch.deltaX = prevDelta.x + (center.x - offset.x);\n\t\ttouch.deltaY = prevDelta.y + (center.y - offset.y);\n\t};\n\tvar calTouchData = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar touches = touch.touches;\n\t\tvar touchesLength = touches.length;\n\n\t\tif(!session.firstTouch) {\n\t\t\tsession.firstTouch = copySimpleTouchData(touch);\n\t\t}\n\n\t\tif(multiTouch() && touchesLength > 1 && !session.firstMultiTouch) {\n\t\t\tsession.firstMultiTouch = copySimpleTouchData(touch);\n\t\t} else if(touchesLength === 1) {\n\t\t\tsession.firstMultiTouch = false;\n\t\t}\n\n\t\tvar firstTouch = session.firstTouch;\n\t\tvar firstMultiTouch = session.firstMultiTouch;\n\t\tvar offsetCenter = firstMultiTouch ? firstMultiTouch.center : firstTouch.center;\n\n\t\tvar center = touch.center = getMultiCenter(touches);\n\t\ttouch.timestamp = $.now();\n\t\ttouch.deltaTime = touch.timestamp - firstTouch.timestamp;\n\n\t\ttouch.angle = getAngle(offsetCenter, center);\n\t\ttouch.distance = getDistance(offsetCenter, center);\n\n\t\tcalDelta(touch);\n\n\t\ttouch.offsetDirection = getDirection(touch.deltaX, touch.deltaY);\n\n\t\ttouch.scale = firstMultiTouch ? getScale(firstMultiTouch.touches, touches) : 1;\n\t\ttouch.rotation = firstMultiTouch ? getRotation(firstMultiTouch.touches, touches) : 0;\n\n\t\tcalIntervalTouchData(touch);\n\n\t};\n\tvar CAL_INTERVAL = 25;\n\tvar calIntervalTouchData = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar last = session.lastInterval || touch;\n\t\tvar deltaTime = touch.timestamp - last.timestamp;\n\t\tvar velocity;\n\t\tvar velocityX;\n\t\tvar velocityY;\n\t\tvar direction;\n\n\t\tif(touch.gesture.type != $.EVENT_CANCEL && (deltaTime > CAL_INTERVAL || last.velocity === undefined)) {\n\t\t\tvar deltaX = last.deltaX - touch.deltaX;\n\t\t\tvar deltaY = last.deltaY - touch.deltaY;\n\n\t\t\tvar v = getVelocity(deltaTime, deltaX, deltaY);\n\t\t\tvelocityX = v.x;\n\t\t\tvelocityY = v.y;\n\t\t\tvelocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n\t\t\tdirection = getDirection(deltaX, deltaY) || last.direction;\n\n\t\t\tsession.lastInterval = touch;\n\t\t} else {\n\t\t\tvelocity = last.velocity;\n\t\t\tvelocityX = last.velocityX;\n\t\t\tvelocityY = last.velocityY;\n\t\t\tdirection = last.direction;\n\t\t}\n\n\t\ttouch.velocity = velocity;\n\t\ttouch.velocityX = velocityX;\n\t\ttouch.velocityY = velocityY;\n\t\ttouch.direction = direction;\n\t};\n\tvar targetIds = {};\n\tvar convertTouches = function(touches) {\n\t\tfor(var i = 0; i < touches.length; i++) {\n\t\t\t!touches['identifier'] && (touches['identifier'] = 0);\n\t\t}\n\t\treturn touches;\n\t};\n\tvar getTouches = function(event, touch) {\n\t\tvar allTouches = convertTouches($.slice.call(event.touches || [event]));\n\n\t\tvar type = event.type;\n\n\t\tvar targetTouches = [];\n\t\tvar changedTargetTouches = [];\n\n\t\t//当touchstart或touchmove且touches长度为1，直接获得all和changed\n\t\tif((type === $.EVENT_START || type === $.EVENT_MOVE) && allTouches.length === 1) {\n\t\t\ttargetIds[allTouches[0].identifier] = true;\n\t\t\ttargetTouches = allTouches;\n\t\t\tchangedTargetTouches = allTouches;\n\t\t\ttouch.target = event.target;\n\t\t} else {\n\t\t\tvar i = 0;\n\t\t\tvar targetTouches = [];\n\t\t\tvar changedTargetTouches = [];\n\t\t\tvar changedTouches = convertTouches($.slice.call(event.changedTouches || [event]));\n\n\t\t\ttouch.target = event.target;\n\t\t\tvar sessionTarget = $.gestures.session.target || event.target;\n\t\t\ttargetTouches = allTouches.filter(function(touch) {\n\t\t\t\treturn hasParent(touch.target, sessionTarget);\n\t\t\t});\n\n\t\t\tif(type === $.EVENT_START) {\n\t\t\t\ti = 0;\n\t\t\t\twhile(i < targetTouches.length) {\n\t\t\t\t\ttargetIds[targetTouches[i].identifier] = true;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = 0;\n\t\t\twhile(i < changedTouches.length) {\n\t\t\t\tif(targetIds[changedTouches[i].identifier]) {\n\t\t\t\t\tchangedTargetTouches.push(changedTouches[i]);\n\t\t\t\t}\n\t\t\t\tif(type === $.EVENT_END || type === $.EVENT_CANCEL) {\n\t\t\t\t\tdelete targetIds[changedTouches[i].identifier];\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif(!changedTargetTouches.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\ttargetTouches = uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true);\n\t\tvar touchesLength = targetTouches.length;\n\t\tvar changedTouchesLength = changedTargetTouches.length;\n\t\tif(type === $.EVENT_START && touchesLength - changedTouchesLength === 0) { //first\n\t\t\ttouch.isFirst = true;\n\t\t\t$.gestures.touch = $.gestures.session = {\n\t\t\t\ttarget: event.target\n\t\t\t};\n\t\t}\n\t\ttouch.isFinal = ((type === $.EVENT_END || type === $.EVENT_CANCEL) && (touchesLength - changedTouchesLength === 0));\n\n\t\ttouch.touches = targetTouches;\n\t\ttouch.changedTouches = changedTargetTouches;\n\t\treturn true;\n\n\t};\n\tvar handleTouchEvent = function(event) {\n\t\tvar touch = {\n\t\t\tgesture: event\n\t\t};\n\t\tvar touches = getTouches(event, touch);\n\t\tif(!touches) {\n\t\t\treturn;\n\t\t}\n\t\tcalTouchData(touch);\n\t\tdetect(event, touch);\n\t\t$.gestures.session.prevTouch = touch;\n\t\tif(event.type === $.EVENT_END && !$.isTouchable) {\n\t\t\t$.gestures.touch = $.gestures.session = {};\n\t\t}\n\t};\n\tvar supportsPassive = (function checkPassiveListener() {\n\t\tvar supportsPassive = false;\n\t\ttry {\n\t\t\tvar opts = Object.defineProperty({}, 'passive', {\n\t\t\t\tget: function get() {\n\t\t\t\t\tsupportsPassive = true;\n\t\t\t\t},\n\t\t\t});\n\t\t\twindow.addEventListener('testPassiveListener', null, opts);\n\t\t} catch(e) {\n\t\t\t// No support\n\t\t}\n\t\treturn supportsPassive;\n\t}())\n\twindow.addEventListener($.EVENT_START, handleTouchEvent);\n\twindow.addEventListener($.EVENT_MOVE, handleTouchEvent, supportsPassive ? {\n\t\tpassive: false,\n\t\tcapture: false\n\t} : false);\n\twindow.addEventListener($.EVENT_END, handleTouchEvent);\n\twindow.addEventListener($.EVENT_CANCEL, handleTouchEvent);\n\t//fixed hashchange(android)\n\twindow.addEventListener($.EVENT_CLICK, function(e) {\n\t\t//TODO 应该判断当前target是不是在targets.popover内部，而不是非要相等\n\t\tif(($.os.android || $.os.ios) && (($.targets.popover && e.target === $.targets.popover) || ($.targets.tab) || $.targets.offcanvas || $.targets.modal)) {\n\t\t\te.preventDefault();\n\t\t}\n\t}, true);\n\n\t//增加原生滚动识别\n\t$.isScrolling = false;\n\tvar scrollingTimeout = null;\n\twindow.addEventListener('scroll', function() {\n\t\t$.isScrolling = true;\n\t\tscrollingTimeout && clearTimeout(scrollingTimeout);\n\t\tscrollingTimeout = setTimeout(function() {\n\t\t\t$.isScrolling = false;\n\t\t}, 250);\n\t});\n})(mui, window);\n/**\n * mui gesture flick[left|right|up|down]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar flickStartTime = 0;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tvar now = $.now();\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (now - flickStartTime > 300) {\n\t\t\t\t\tflickStartTime = now;\n\t\t\t\t\tsession.flickStart = touch.center;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\ttouch.flick = false;\n\t\t\t\tif (session.flickStart && options.flickMaxTime > (now - flickStartTime) && touch.distance > options.flickMinDistince) {\n\t\t\t\t\ttouch.flick = true;\n\t\t\t\t\ttouch.flickTime = now - flickStartTime;\n\t\t\t\t\ttouch.flickDistanceX = touch.center.x - session.flickStart.x;\n\t\t\t\t\ttouch.flickDistanceY = touch.center.y - session.flickStart.y;\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t};\n\t/**\n\t * mui gesture flick\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 5,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tflickMaxTime: 200,\n\t\t\tflickMinDistince: 10\n\t\t}\n\t});\n})(mui, 'flick');\n/**\n * mui gesture swipe[left|right|up|down]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tif (event.type === $.EVENT_END || event.type === $.EVENT_CANCEL) {\n\t\t\tvar options = this.options;\n\t\t\ttouch.swipe = false;\n\t\t\t//TODO 后续根据velocity计算\n\t\t\tif (touch.direction && options.swipeMaxTime > touch.deltaTime && touch.distance > options.swipeMinDistince) {\n\t\t\t\ttouch.swipe = true;\n\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * mui gesture swipe\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tswipeMaxTime: 300,\n\t\t\tswipeMinDistince: 18\n\t\t}\n\t});\n})(mui, 'swipe');\n/**\n * mui gesture drag[start|left|right|up|down|end]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (!touch.direction || !session.target) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//修正direction,可在session期间自行锁定拖拽方向，方便开发scroll类不同方向拖拽插件嵌套\n\t\t\t\tif (session.lockDirection && session.startDirection) {\n\t\t\t\t\tif (session.startDirection && session.startDirection !== touch.direction) {\n\t\t\t\t\t\tif (session.startDirection === 'up' || session.startDirection === 'down') {\n\t\t\t\t\t\t\ttouch.direction = touch.deltaY < 0 ? 'up' : 'down';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttouch.direction = touch.deltaX < 0 ? 'left' : 'right';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!session.drag) {\n\t\t\t\t\tsession.drag = true;\n\t\t\t\t\t$.trigger(session.target, name + 'start', touch);\n\t\t\t\t}\n\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif (session.drag && touch.isFinal) {\n\t\t\t\t\t$.trigger(session.target, name + 'end', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture drag\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 20,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1\n\t\t}\n\t});\n})(mui, 'drag');\n/**\n * mui gesture tap and doubleTap\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar lastTarget;\n\tvar lastTapTime;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_END:\n\t\t\t\tif (!touch.isFinal) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar target = session.target;\n\t\t\t\tif (!target || (target.disabled || (target.classList && target.classList.contains('mui-disabled')))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (touch.distance < options.tapMaxDistance && touch.deltaTime < options.tapMaxTime) {\n\t\t\t\t\tif ($.options.gestureConfig.doubletap && lastTarget && (lastTarget === target)) { //same target\n\t\t\t\t\t\tif (lastTapTime && (touch.timestamp - lastTapTime) < options.tapMaxInterval) {\n\t\t\t\t\t\t\t$.trigger(target, 'doubletap', touch);\n\t\t\t\t\t\t\tlastTapTime = $.now();\n\t\t\t\t\t\t\tlastTarget = target;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$.trigger(target, name, touch);\n\t\t\t\t\tlastTapTime = $.now();\n\t\t\t\t\tlastTarget = target;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture tap\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 30,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\ttapMaxInterval: 300,\n\t\t\ttapMaxDistance: 5,\n\t\t\ttapMaxTime: 250\n\t\t}\n\t});\n})(mui, 'tap');\n/**\n * mui gesture longtap\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar timer;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t}, options.holdTimeout);\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (touch.distance > options.holdThreshold) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture longtap\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\tholdTimeout: 500,\n\t\t\tholdThreshold: 2\n\t\t}\n\t});\n})(mui, 'longtap');\n/**\n * mui gesture hold\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar timer;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tif ($.options.gestureConfig.hold) {\n\t\t\t\t\ttimer && clearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t\ttouch.hold = true;\n\t\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\t}, options.holdTimeout);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer) && (timer = null);\n\t\t\t\t\t$.trigger(session.target, 'release', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture hold\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\tholdTimeout: 0\n\t\t}\n\t});\n})(mui, 'hold');\n/**\n * mui gesture pinch\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar options = this.options;\n\t\tvar session = $.gestures.session;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif ($.options.gestureConfig.pinch) {\n\t\t\t\t\tif (touch.touches.length < 2) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!session.pinch) { //start\n\t\t\t\t\t\tsession.pinch = true;\n\t\t\t\t\t\t$.trigger(session.target, name + 'start', touch);\n\t\t\t\t\t}\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\tvar scale = touch.scale;\n\t\t\t\t\tvar rotation = touch.rotation;\n\t\t\t\t\tvar lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale;\n\t\t\t\t\tvar scaleDiff = 0.000000000001; //防止scale与lastScale相等，不触发事件的情况。\n\t\t\t\t\tif (scale > lastScale) { //out\n\t\t\t\t\t\tlastScale = scale - scaleDiff;\n\t\t\t\t\t\t$.trigger(session.target, name + 'out', touch);\n\t\t\t\t\t} //in\n\t\t\t\t\telse if (scale < lastScale) {\n\t\t\t\t\t\tlastScale = scale + scaleDiff;\n\t\t\t\t\t\t$.trigger(session.target, name + 'in', touch);\n\t\t\t\t\t}\n\t\t\t\t\tif (Math.abs(rotation) > options.minRotationAngle) {\n\t\t\t\t\t\t$.trigger(session.target, 'rotate', touch);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) {\n\t\t\t\t\tsession.pinch = false;\n\t\t\t\t\t$.trigger(session.target, name + 'end', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture pinch\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tminRotationAngle: 0\n\t\t}\n\t});\n})(mui, 'pinch');\n/**\n * mui.init\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.global = $.options = {\n\t\tgestureConfig: {\n\t\t\ttap: true,\n\t\t\tdoubletap: false,\n\t\t\tlongtap: false,\n\t\t\thold: false,\n\t\t\tflick: true,\n\t\t\tswipe: true,\n\t\t\tdrag: true,\n\t\t\tpinch: false\n\t\t}\n\t};\n\t/**\n\t *\n\t * @param {type} options\n\t * @returns {undefined}\n\t */\n\t$.initGlobal = function(options) {\n\t\t$.options = $.extend(true, $.global, options);\n\t\treturn this;\n\t};\n\tvar inits = {};\n\n\t/**\n\t * 单页配置 初始化\n\t * @param {object} options\n\t */\n\t$.init = function(options) {\n\t\t$.options = $.extend(true, $.global, options || {});\n\t\t$.ready(function() {\n\t\t\t$.doAction('inits', function(index, init) {\n\t\t\t\tvar isInit = !!(!inits[init.name] || init.repeat);\n\t\t\t\tif (isInit) {\n\t\t\t\t\tinit.handle.call($);\n\t\t\t\t\tinits[init.name] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn this;\n\t};\n\n\t/**\n\t * 增加初始化执行流程\n\t * @param {function} init\n\t */\n\t$.addInit = function(init) {\n\t\treturn $.addAction('inits', init);\n\t};\n\t/**\n\t * 处理html5版本subpages \n\t */\n\t$.addInit({\n\t\tname: 'iframe',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar subpages = options.subpages || [];\n\t\t\tif (!$.os.plus && subpages.length) {\n\t\t\t\t//暂时只处理单个subpage。后续可以考虑支持多个subpage\n\t\t\t\tcreateIframe(subpages[0]);\n\t\t\t}\n\t\t}\n\t});\n\tvar createIframe = function(options) {\n\t\tvar wrapper = document.createElement('div');\n\t\twrapper.className = 'mui-iframe-wrapper';\n\t\tvar styles = options.styles || {};\n\t\tif (typeof styles.top !== 'string') {\n\t\t\tstyles.top = '0px';\n\t\t}\n\t\tif (typeof styles.bottom !== 'string') {\n\t\t\tstyles.bottom = '0px';\n\t\t}\n\t\twrapper.style.top = styles.top;\n\t\twrapper.style.bottom = styles.bottom;\n\t\tvar iframe = document.createElement('iframe');\n\t\tiframe.src = options.url;\n\t\tiframe.id = options.id || options.url;\n\t\tiframe.name = iframe.id;\n\t\twrapper.appendChild(iframe);\n\t\tdocument.body.appendChild(wrapper);\n\t\t//目前仅处理微信\n\t\t$.os.wechat && handleScroll(wrapper, iframe);\n\t};\n\n\tfunction handleScroll(wrapper, iframe) {\n\t\tvar key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src;\n\t\tvar scrollTop = (parseFloat(localStorage.getItem(key)) || 0);\n\t\tif (scrollTop) {\n\t\t\t(function(y) {\n\t\t\t\tiframe.onload = function() {\n\t\t\t\t\twindow.scrollTo(0, y);\n\t\t\t\t};\n\t\t\t})(scrollTop);\n\t\t}\n\t\tsetInterval(function() {\n\t\t\tvar _scrollTop = window.scrollY;\n\t\t\tif (scrollTop !== _scrollTop) {\n\t\t\t\tlocalStorage.setItem(key, _scrollTop + '');\n\t\t\t\tscrollTop = _scrollTop;\n\t\t\t}\n\t\t}, 100);\n\t};\n\t$(function() {\n\t\tvar classList = document.body.classList;\n\t\tvar os = [];\n\t\tif ($.os.ios) {\n\t\t\tos.push({\n\t\t\t\tos: 'ios',\n\t\t\t\tversion: $.os.version\n\t\t\t});\n\t\t\tclassList.add('mui-ios');\n\t\t} else if ($.os.android) {\n\t\t\tos.push({\n\t\t\t\tos: 'android',\n\t\t\t\tversion: $.os.version\n\t\t\t});\n\t\t\tclassList.add('mui-android');\n\t\t}\n\t\tif ($.os.wechat) {\n\t\t\tos.push({\n\t\t\t\tos: 'wechat',\n\t\t\t\tversion: $.os.wechat.version\n\t\t\t});\n\t\t\tclassList.add('mui-wechat');\n\t\t}\n\t\tif (os.length) {\n\t\t\t$.each(os, function(index, osObj) {\n\t\t\t\tvar version = '';\n\t\t\t\tvar classArray = [];\n\t\t\t\tif (osObj.version) {\n\t\t\t\t\t$.each(osObj.version.split('.'), function(i, v) {\n\t\t\t\t\t\tversion = version + (version ? '-' : '') + v;\n\t\t\t\t\t\tclassList.add($.className(osObj.os + '-' + version));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(mui);\n/**\n * mui.init 5+\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\tvar defaultOptions = {\n\t\tswipeBack: false,\n\t\tpreloadPages: [], //5+ lazyLoad webview\n\t\tpreloadLimit: 10, //预加载窗口的数量限制(一旦超出，先进先出)\n\t\tkeyEventBind: {\n\t\t\tbackbutton: true,\n\t\t\tmenubutton: true\n\t\t},\n\t\ttitleConfig: {\n\t\t\theight: \"44px\",\n\t\t\tbackgroundColor: \"#f7f7f7\", //导航栏背景色\n\t\t\tbottomBorderColor: \"#cccccc\", //底部边线颜色\n\t\t\ttitle: { //标题配置\n\t\t\t\ttext: \"\", //标题文字\n\t\t\t\tposition: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\"\n\t\t\t\t},\n\t\t\t\tstyles: {\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talign: \"center\",\n\t\t\t\t\tfamily: \"'Helvetica Neue',Helvetica,sans-serif\",\n\t\t\t\t\tsize: \"17px\",\n\t\t\t\t\tstyle: \"normal\",\n\t\t\t\t\tweight: \"normal\",\n\t\t\t\t\tfontSrc: \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tback: {\n\t\t\t\timage: {\n\t\t\t\t\tbase64Data: '',\n\t\t\t\t\timgSrc: '',\n\t\t\t\t\tsprite: {\n\t\t\t\t\t\ttop: '0px',\n\t\t\t\t\t\tleft: '0px',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\theight: '100%'\n\t\t\t\t\t},\n\t\t\t\t\tposition: {\n\t\t\t\t\t\ttop: \"10px\",\n\t\t\t\t\t\tleft: \"10px\",\n\t\t\t\t\t\twidth: \"24px\",\n\t\t\t\t\t\theight: \"24px\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//默认页面动画\n\tvar defaultShow = {\n\t\tevent:\"titleUpdate\",\n\t\tautoShow: true,\n\t\tduration: 300,\n\t\taniShow: 'slide-in-right',\n\t\textras:{}\n\t};\n\t//若执行了显示动画初始化操作，则要覆盖默认配置\n\tif($.options.show) {\n\t\tdefaultShow = $.extend(true, defaultShow, $.options.show);\n\t}\n\n\t$.currentWebview = null;\n\n\t$.extend(true, $.global, defaultOptions);\n\t$.extend(true, $.options, defaultOptions);\n\t/**\n\t * 等待动画配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.waitingOptions = function(options) {\n\t\treturn $.extend(true, {}, {\n\t\t\tautoShow: true,\n\t\t\ttitle: '',\n\t\t\tmodal: false\n\t\t}, options);\n\t};\n\t/**\n\t * 窗口显示配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.showOptions = function(options) {\n\t\treturn $.extend(true, {}, defaultShow, options);\n\t};\n\t/**\n\t * 窗口默认配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.windowOptions = function(options) {\n\t\treturn $.extend({\n\t\t\tscalable: false,\n\t\t\tbounce: \"\" //vertical\n\t\t}, options);\n\t};\n\t/**\n\t * plusReady\n\t * @param {type} callback\n\t * @returns {_L6.$}\n\t */\n\t$.plusReady = function(callback) {\n\t\tif(window.plus) {\n\t\t\tsetTimeout(function() { //解决callback与plusready事件的执行时机问题(典型案例:showWaiting,closeWaiting)\n\t\t\t\tcallback();\n\t\t\t}, 0);\n\t\t} else {\n\t\t\tdocument.addEventListener(\"plusready\", function() {\n\t\t\t\tcallback();\n\t\t\t}, false);\n\t\t}\n\t\treturn this;\n\t};\n\t/**\n\t * 5+ event(5+没提供之前我自己实现)\n\t * @param {type} webview\n\t * @param {type} eventType\n\t * @param {type} data\n\t * @returns {undefined}\n\t */\n\t$.fire = function(webview, eventType, data) {\n\t\tif(webview) {\n\t\t\tif(typeof data === 'undefined') {\n\t\t\t\tdata = '';\n\t\t\t} else if(typeof data === 'boolean' || typeof data === 'number') {\n\t\t\t\twebview.evalJS(\"typeof mui!=='undefined'&&mui.receive('\" + eventType + \"',\" + data + \")\");\n\t\t\t\treturn;\n\t\t\t} else if($.isPlainObject(data) || $.isArray(data)) {\n\t\t\t\tdata = JSON.stringify(data || {}).replace(/\\'/g, \"\\\\u0027\").replace(/\\\\/g, \"\\\\u005c\");\n\t\t\t}\n\t\t\twebview.evalJS(\"typeof mui!=='undefined'&&mui.receive('\" + eventType + \"','\" + data + \"')\");\n\t\t}\n\t};\n\t/**\n\t * 5+ event(5+没提供之前我自己实现)\n\t * @param {type} eventType\n\t * @param {type} data\n\t * @returns {undefined}\n\t */\n\t$.receive = function(eventType, data) {\n\t\tif(eventType) {\n\t\t\ttry {\n\t\t\t\tif(data && typeof data === 'string') {\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\t}\n\t\t\t} catch(e) {}\n\t\t\t$.trigger(document, eventType, data);\n\t\t}\n\t};\n\tvar triggerPreload = function(webview) {\n\t\tif(!webview.preloaded) { //保证仅触发一次\n\t\t\t$.fire(webview, 'preload');\n\t\t\tvar list = webview.children();\n\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t$.fire(list[i], 'preload');\n\t\t\t}\n\t\t\twebview.preloaded = true;\n\t\t}\n\t};\n\tvar trigger = function(webview, eventType, timeChecked) {\n\t\tif(timeChecked) {\n\t\t\tif(!webview[eventType + 'ed']) {\n\t\t\t\t$.fire(webview, eventType);\n\t\t\t\tvar list = webview.children();\n\t\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t\t$.fire(list[i], eventType);\n\t\t\t\t}\n\t\t\t\twebview[eventType + 'ed'] = true;\n\t\t\t}\n\t\t} else {\n\t\t\t$.fire(webview, eventType);\n\t\t\tvar list = webview.children();\n\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t$.fire(list[i], eventType);\n\t\t\t}\n\t\t}\n\n\t};\n\t/**\n\t * 打开新窗口\n\t * @param {string} url 要打开的页面地址\n\t * @param {string} id 指定页面ID\n\t * @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}}\n\t */\n\t$.openWindow = function(url, id, options) {\n\t\tif(typeof url === 'object') {\n\t\t\toptions = url;\n\t\t\turl = options.url;\n\t\t\tid = options.id || url;\n\t\t} else {\n\t\t\tif(typeof id === 'object') {\n\t\t\t\toptions = id;\n\t\t\t\tid = options.id || url;\n\t\t\t} else {\n\t\t\t\tid = id || url;\n\t\t\t}\n\t\t}\n\t\tif(!$.os.plus) {\n\t\t\t//TODO 先临时这么处理：手机上顶层跳，PC上parent跳\n\t\t\tif($.os.ios || $.os.android) {\n\t\t\t\twindow.top.location.href = url;\n\t\t\t} else {\n\t\t\t\twindow.parent.location.href = url;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions = options || {};\n\t\tvar params = options.params || {};\n\t\tvar webview = null,\n\t\t\twebviewCache = null,\n\t\t\tnShow, nWaiting;\n\n\t\tif($.webviews[id]) {\n\t\t\twebviewCache = $.webviews[id];\n\t\t\t//webview真实存在，才能获取\n\t\t\tif(plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = webviewCache.webview;\n\t\t\t}\n\t\t} else if(options.createNew !== true) {\n\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t}\n\n\t\tif(webview) { //已缓存\n\t\t\t//每次show都需要传递动画参数；\n\t\t\t//预加载的动画参数优先级：openWindow配置>preloadPages配置>mui默认配置；\n\t\t\tnShow = webviewCache ? webviewCache.show : defaultShow;\n\t\t\tnShow = options.show ? $.extend(nShow, options.show) : nShow;\n\t\t\tnShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {\n\t\t\t\ttriggerPreload(webview);\n\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t});\n\t\t\tif(webviewCache) {\n\t\t\t\twebviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t}\n\t\t\treturn webview;\n\t\t} else { //新窗口\n\t\t\tif(!url) {\n\t\t\t\tthrow new Error('webview[' + id + '] does not exist');\n\t\t\t}\n\n\t\t\t//显示waiting\n\t\t\tvar waitingConfig = $.waitingOptions(options.waiting);\n\t\t\tif(waitingConfig.autoShow) {\n\t\t\t\tnWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);\n\t\t\t}\n\n\t\t\t//创建页面\n\t\t\toptions = $.extend(options, {\n\t\t\t\tid: id,\n\t\t\t\turl: url\n\t\t\t});\n\n\t\t\twebview = $.createWindow(options);\n\n\t\t\t//显示\n\t\t\tnShow = $.showOptions(options.show);\n\t\t\tif(nShow.autoShow) {\n\t\t\t\tvar showWebview = function() {\n\t\t\t\t\t//关闭等待框\n\t\t\t\t\tif(nWaiting) {\n\t\t\t\t\t\tnWaiting.close();\n\t\t\t\t\t}\n\t\t\t\t\t//显示页面\n\t\t\t\t\twebview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);\n\t\t\t\t\toptions.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t\t};\n\t\t\t\t//titleUpdate触发时机早于loaded，更换为titleUpdate后，可以更早的显示webview\n\t\t\t\twebview.addEventListener(nShow.event, showWebview, false);\n\t\t\t\t//loaded事件发生后，触发预加载和pagebeforeshow事件\n\t\t\t\twebview.addEventListener(\"loaded\", function() {\n\t\t\t\t\ttriggerPreload(webview);\n\t\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t$.openWindowWithTitle = function(options, titleConfig) {\n\t\toptions = options || {};\n\t\tvar url = options.url;\n\t\tvar id = options.id || url;\n\n\t\tif(!$.os.plus) {\n\t\t\t//TODO 先临时这么处理：手机上顶层跳，PC上parent跳\n\t\t\tif($.os.ios || $.os.android) {\n\t\t\t\twindow.top.location.href = url;\n\t\t\t} else {\n\t\t\t\twindow.parent.location.href = url;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar params = options.params || {};\n\t\tvar webview = null,\n\t\t\twebviewCache = null,\n\t\t\tnShow, nWaiting;\n\n\t\tif($.webviews[id]) {\n\t\t\twebviewCache = $.webviews[id];\n\t\t\t//webview真实存在，才能获取\n\t\t\tif(plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = webviewCache.webview;\n\t\t\t}\n\t\t} else if(options.createNew !== true) {\n\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t}\n\n\t\tif(webview) { //已缓存\n\t\t\t//每次show都需要传递动画参数；\n\t\t\t//预加载的动画参数优先级：openWindow配置>preloadPages配置>mui默认配置；\n\t\t\tnShow = webviewCache ? webviewCache.show : defaultShow;\n\t\t\tnShow = options.show ? $.extend(nShow, options.show) : nShow;\n\t\t\tnShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {\n\t\t\t\ttriggerPreload(webview);\n\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t});\n\t\t\tif(webviewCache) {\n\t\t\t\twebviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t}\n\t\t\treturn webview;\n\t\t} else { //新窗口\n\t\t\tif(!url) {\n\t\t\t\tthrow new Error('webview[' + id + '] does not exist');\n\t\t\t}\n\n\t\t\t//显示waiting\n\t\t\tvar waitingConfig = $.waitingOptions(options.waiting);\n\t\t\tif(waitingConfig.autoShow) {\n\t\t\t\tnWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);\n\t\t\t}\n\n\t\t\t//创建页面\n\t\t\toptions = $.extend(options, {\n\t\t\t\tid: id,\n\t\t\t\turl: url\n\t\t\t});\n\n\t\t\twebview = $.createWindow(options);\n\n\t\t\tif(titleConfig) { //处理原生头\n\t\t\t\t$.extend(true, $.options.titleConfig, titleConfig);\n\t\t\t\tvar tid = $.options.titleConfig.id ? $.options.titleConfig.id : id + \"_title\";\n\t\t\t\tvar view = new plus.nativeObj.View(tid, {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\theight: $.options.titleConfig.height,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tdock: \"top\",\n\t\t\t\t\tposition: \"dock\"\n\t\t\t\t});\n\t\t\t\tview.drawRect($.options.titleConfig.backgroundColor); //绘制背景色\n\t\t\t\tvar _b = parseInt($.options.titleConfig.height) - 1;\n\t\t\t\tview.drawRect($.options.titleConfig.bottomBorderColor, {\n\t\t\t\t\ttop: _b + \"px\",\n\t\t\t\t\tleft: \"0px\"\n\t\t\t\t}); //绘制底部边线\n\n\t\t\t\t//绘制文字\n\t\t\t\tif($.options.titleConfig.title.text){\n\t\t\t\t\tvar _title = $.options.titleConfig.title;\n\t\t\t\t\tview.drawText(_title.text,_title.position , _title.styles);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//返回图标绘制\n\t\t\t\tvar _back = $.options.titleConfig.back;\n\t\t\t\tvar backClick = null;\n\t\t\t\t//优先字体\n\n\t\t\t\t//其次是图片\n\t\t\t\tvar _backImage = _back.image;\n\t\t\t\tif(_backImage.base64Data || _backImage.imgSrc) {\n\t\t\t\t\t//TODO 此处需要处理百分比的情况\n\t\t\t\t\tbackClick = {\n\t\t\t\t\t\tleft:parseInt(_backImage.position.left),\n\t\t\t\t\t\tright:parseInt(_backImage.position.left) + parseInt(_backImage.position.width)\n\t\t\t\t\t};\n\t\t\t\t\tvar bitmap = new plus.nativeObj.Bitmap(id + \"_back\");\n\t\t\t\t\tif(_backImage.base64Data) { //优先base64编码字符串\n\t\t\t\t\t\tbitmap.loadBase64Data(_backImage.base64Data);\n\t\t\t\t\t} else { //其次加载图片文件\n\t\t\t\t\t\tbitmap.load(_backImage.imgSrc);\n\t\t\t\t\t}\n\t\t\t\t\tview.drawBitmap(bitmap,_backImage.sprite , _backImage.position);\n\t\t\t\t}\n\n\t\t\t\t//处理点击事件\n\t\t\t\tview.setTouchEventRect({\n\t\t\t\t\ttop: \"0px\",\n\t\t\t\t\tleft: \"0px\",\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\"\n\t\t\t\t});\n\t\t\t\tview.interceptTouchEvent(true);\n\t\t\t\tview.addEventListener(\"click\", function(e) {\n\t\t\t\t\tvar x = e.clientX;\n\t\t\t\t\t\n\t\t\t\t\t//返回按钮点击\n\t\t\t\t\tif(backClick&& x > backClick.left && x < backClick.right){\n\t\t\t\t\t\tif( _back.click && $.isFunction(_back.click)){\n\t\t\t\t\t\t\t_back.click();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\twebview.evalJS(\"window.mui&&mui.back();\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t\twebview.append(view);\n\n\t\t\t}\n\n\t\t\t//显示\n\t\t\tnShow = $.showOptions(options.show);\n\t\t\tif(nShow.autoShow) {\n\t\t\t\t//titleUpdate触发时机早于loaded，更换为titleUpdate后，可以更早的显示webview\n\t\t\t\twebview.addEventListener(nShow.event, function () {\n\t\t\t\t\t//关闭等待框\n\t\t\t\t\tif(nWaiting) {\n\t\t\t\t\t\tnWaiting.close();\n\t\t\t\t\t}\n\t\t\t\t\t//显示页面\n\t\t\t\t\twebview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t/**\n\t * 根据配置信息创建一个webview\n\t * @param {type} options\n\t * @param {type} isCreate\n\t * @returns {webview}\n\t */\n\t$.createWindow = function(options, isCreate) {\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\t\tvar id = options.id || options.url;\n\t\tvar webview;\n\t\tif(options.preload) {\n\t\t\tif($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache\n\t\t\t\twebview = $.webviews[id].webview;\n\t\t\t} else { //新增预加载窗口\n\t\t\t\t//判断是否携带createNew参数，默认为false\n\t\t\t\tif(options.createNew !== true) {\n\t\t\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t\t\t}\n\n\t\t\t\t//之前没有，那就新创建\t\n\t\t\t\tif(!webview) {\n\t\t\t\t\twebview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({\n\t\t\t\t\t\tpreload: true\n\t\t\t\t\t}, options.extras));\n\t\t\t\t\tif(options.subpages) {\n\t\t\t\t\t\t$.each(options.subpages, function(index, subpage) {\n\t\t\t\t\t\t\tvar subpageId = subpage.id || subpage.url;\n\t\t\t\t\t\t\tif(subpageId) { //过滤空对象\n\t\t\t\t\t\t\t\tvar subWebview = plus.webview.getWebviewById(subpageId);\n\t\t\t\t\t\t\t\tif(!subWebview) { //如果该webview不存在，则创建\n\t\t\t\t\t\t\t\t\tsubWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), $.extend({\n\t\t\t\t\t\t\t\t\t\tpreload: true\n\t\t\t\t\t\t\t\t\t}, subpage.extras));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twebview.append(subWebview);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//TODO 理论上，子webview也应该计算到预加载队列中，但这样就麻烦了，要退必须退整体，否则可能出现问题；\n\t\t\t$.webviews[id] = {\n\t\t\t\twebview: webview, //目前仅preload的缓存webview\n\t\t\t\tpreload: true,\n\t\t\t\tshow: $.showOptions(options.show),\n\t\t\t\tafterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯\n\t\t\t};\n\t\t\t//索引该预加载窗口\n\t\t\tvar preloads = $.data.preloads;\n\t\t\tvar index = preloads.indexOf(id);\n\t\t\tif(~index) { //删除已存在的(变相调整插入位置)\n\t\t\t\tpreloads.splice(index, 1);\n\t\t\t}\n\t\t\tpreloads.push(id);\n\t\t\tif(preloads.length > $.options.preloadLimit) {\n\t\t\t\t//先进先出\n\t\t\t\tvar first = $.data.preloads.shift();\n\t\t\t\tvar webviewCache = $.webviews[first];\n\t\t\t\tif(webviewCache && webviewCache.webview) {\n\t\t\t\t\t//需要将自己打开的所有页面，全部close；\n\t\t\t\t\t//关闭该预加载webview\t\n\t\t\t\t\t$.closeAll(webviewCache.webview);\n\t\t\t\t}\n\t\t\t\t//删除缓存\n\t\t\t\tdelete $.webviews[first];\n\t\t\t}\n\t\t} else {\n\t\t\tif(isCreate !== false) { //直接创建非预加载窗口\n\t\t\t\twebview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras);\n\t\t\t\tif(options.subpages) {\n\t\t\t\t\t$.each(options.subpages, function(index, subpage) {\n\t\t\t\t\t\tvar subpageId = subpage.id || subpage.url;\n\t\t\t\t\t\tvar subWebview = plus.webview.getWebviewById(subpageId);\n\t\t\t\t\t\tif(!subWebview) {\n\t\t\t\t\t\t\tsubWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), subpage.extras);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twebview.append(subWebview);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t/**\n\t * 预加载\n\t */\n\t$.preload = function(options) {\n\t\t//调用预加载函数，不管是否传递preload参数，强制变为true\n\t\tif(!options.preload) {\n\t\t\toptions.preload = true;\n\t\t}\n\t\treturn $.createWindow(options);\n\t};\n\n\t/**\n\t *关闭当前webview打开的所有webview；\n\t */\n\t$.closeOpened = function(webview) {\n\t\tvar opened = webview.opened();\n\t\tif(opened) {\n\t\t\tfor(var i = 0, len = opened.length; i < len; i++) {\n\t\t\t\tvar openedWebview = opened[i];\n\t\t\t\tvar open_open = openedWebview.opened();\n\t\t\t\tif(open_open && open_open.length > 0) {\n\t\t\t\t\t//关闭打开的webview\n\t\t\t\t\t$.closeOpened(openedWebview);\n\t\t\t\t\t//关闭自己\n\t\t\t\t\topenedWebview.close(\"none\");\n\t\t\t\t} else {\n\t\t\t\t\t//如果直接孩子节点，就不用关闭了，因为父关闭的时候，会自动关闭子；\n\t\t\t\t\tif(openedWebview.parent() !== webview) {\n\t\t\t\t\t\topenedWebview.close('none');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t$.closeAll = function(webview, aniShow) {\n\t\t$.closeOpened(webview);\n\t\tif(aniShow) {\n\t\t\twebview.close(aniShow);\n\t\t} else {\n\t\t\twebview.close();\n\t\t}\n\t};\n\n\t/**\n\t * 批量创建webview\n\t * @param {type} options\n\t * @returns {undefined}\n\t */\n\t$.createWindows = function(options) {\n\t\t$.each(options, function(index, option) {\n\t\t\t//初始化预加载窗口(创建)和非预加载窗口(仅配置，不创建)\n\t\t\t$.createWindow(option, false);\n\t\t});\n\t};\n\t/**\n\t * 创建当前页面的子webview\n\t * @param {type} options\n\t * @returns {webview}\n\t */\n\t$.appendWebview = function(options) {\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\t\tvar id = options.id || options.url;\n\t\tvar webview;\n\t\tif(!$.webviews[id]) { //保证执行一遍\n\t\t\t//TODO 这里也有隐患，比如某个webview不是作为subpage创建的，而是作为target webview的话；\n\t\t\tif(!plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = plus.webview.create(options.url, id, options.styles, options.extras);\n\t\t\t}\n\t\t\t//之前的实现方案：子窗口loaded之后再append到父窗口中；\n\t\t\t//问题：部分子窗口loaded事件发生较晚，此时执行父窗口的children方法会返回空，导致父子通讯失败；\n\t\t\t//     比如父页面执行完preload事件后，需触发子页面的preload事件，此时未append的话，就无法触发；\n\t\t\t//修改方式：不再监控loaded事件，直接append\n\t\t\t//by chb@20150521\n\t\t\t// webview.addEventListener('loaded', function() {\n\t\t\tplus.webview.currentWebview().append(webview);\n\t\t\t// });\n\t\t\t$.webviews[id] = options;\n\n\t\t}\n\t\treturn webview;\n\t};\n\n\t//全局webviews\n\t$.webviews = {};\n\t//预加载窗口索引\n\t$.data.preloads = [];\n\t//$.currentWebview\n\t$.plusReady(function() {\n\t\t$.currentWebview = plus.webview.currentWebview();\n\t});\n\t$.addInit({\n\t\tname: '5+',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar subpages = options.subpages || [];\n\t\t\tif($.os.plus) {\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t//TODO  这里需要判断一下，最好等子窗口加载完毕后，再调用主窗口的show方法；\n\t\t\t\t\t//或者：在openwindow方法中，监听实现；\n\t\t\t\t\t$.each(subpages, function(index, subpage) {\n\t\t\t\t\t\t$.appendWebview(subpage);\n\t\t\t\t\t});\n\t\t\t\t\t//判断是否首页\n\t\t\t\t\tif(plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) {\n\t\t\t\t\t\t//首页需要自己激活预加载；\n\t\t\t\t\t\t//timeout因为子页面loaded之后才append的，防止子页面尚未append、从而导致其preload未触发的问题；\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\ttriggerPreload(plus.webview.currentWebview());\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t}\n\t\t\t\t\t//设置ios顶部状态栏颜色；\n\t\t\t\t\tif($.os.ios && $.options.statusBarBackground) {\n\t\t\t\t\t\tplus.navigator.setStatusBarBackground($.options.statusBarBackground);\n\t\t\t\t\t}\n\t\t\t\t\tif($.os.android && parseFloat($.os.version) < 4.4) {\n\t\t\t\t\t\t//解决Android平台4.4版本以下，resume后，父窗体标题延迟渲染的问题；\n\t\t\t\t\t\tif(plus.webview.currentWebview().parent() == null) {\n\t\t\t\t\t\t\tdocument.addEventListener(\"resume\", function() {\n\t\t\t\t\t\t\t\tvar body = document.body;\n\t\t\t\t\t\t\t\tbody.style.display = 'none';\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tbody.style.display = '';\n\t\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t//已支持iframe嵌入\n\t\t\t\t//\t\t\t\tif (subpages.length > 0) {\n\t\t\t\t//\t\t\t\t\tvar err = document.createElement('div');\n\t\t\t\t//\t\t\t\t\terr.className = 'mui-error';\n\t\t\t\t//\t\t\t\t\t//文字描述\n\t\t\t\t//\t\t\t\t\tvar span = document.createElement('span');\n\t\t\t\t//\t\t\t\t\tspan.innerHTML = '在该浏览器下，不支持创建子页面，具体参考';\n\t\t\t\t//\t\t\t\t\terr.appendChild(span);\n\t\t\t\t//\t\t\t\t\tvar a = document.createElement('a');\n\t\t\t\t//\t\t\t\t\ta.innerHTML = '\"mui框架适用场景\"';\n\t\t\t\t//\t\t\t\t\ta.href = 'http://ask.dcloud.net.cn/article/113';\n\t\t\t\t//\t\t\t\t\terr.appendChild(a);\n\t\t\t\t//\t\t\t\t\tdocument.body.appendChild(err);\n\t\t\t\t//\t\t\t\t\tconsole.log('在该浏览器下，不支持创建子页面');\n\t\t\t\t//\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t});\n\twindow.addEventListener('preload', function() {\n\t\t//处理预加载部分\n\t\tvar webviews = $.options.preloadPages || [];\n\t\t$.plusReady(function() {\n\t\t\t$.each(webviews, function(index, webview) {\n\t\t\t\t$.createWindow($.extend(webview, {\n\t\t\t\t\tpreload: true\n\t\t\t\t}));\n\t\t\t});\n\n\t\t});\n\t});\n\t$.supportStatusbarOffset = function() {\n\t\treturn $.os.plus && $.os.ios && parseFloat($.os.version) >= 7;\n\t};\n\t$.ready(function() {\n\t\t//标识当前环境支持statusbar\n\t\tif($.supportStatusbarOffset()) {\n\t\t\tdocument.body.classList.add('mui-statusbar');\n\t\t}\n\t});\n})(mui);\n\n/**\n * mui back\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\t/**\n\t * register back\n\t * @param {type} back\n\t * @returns {$.gestures}\n\t */\n\t$.addBack = function(back) {\n\t\treturn $.addAction('backs', back);\n\t};\n\t/**\n\t * default\n\t */\n\t$.addBack({\n\t\tname: 'browser',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tif (window.history.length > 1) {\n\t\t\t\twindow.history.back();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t});\n\t/**\n\t * 后退\n\t */\n\t$.back = function() {\n\t\tif (typeof $.options.beforeback === 'function') {\n\t\t\tif ($.options.beforeback() === false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$.doAction('backs');\n\t};\n\twindow.addEventListener('tap', function(e) {\n\t\tvar action = $.targets.action;\n\t\tif (action && action.classList.contains('mui-action-back')) {\n\t\t\t$.back();\n\t\t\t$.targets.action = false;\n\t\t}\n\t});\n\twindow.addEventListener('swiperight', function(e) {\n\t\tvar detail = e.detail;\n\t\tif ($.options.swipeBack === true && Math.abs(detail.angle) < 3) {\n\t\t\t$.back();\n\t\t}\n\t});\n\n})(mui, window);\n/**\n * mui back 5+\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\tif ($.os.plus && $.os.android) {\n\t\t$.addBack({\n\t\t\tname: 'mui',\n\t\t\tindex: 5,\n\t\t\thandle: function() {\n\t\t\t\t//后续重新设计此处，将back放到各个空间内部实现\n\t\t\t\t//popover\n\t\t\t\tif ($.targets._popover && $.targets._popover.classList.contains('mui-active')) {\n\t\t\t\t\t$($.targets._popover).popover('hide');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//offcanvas\n\t\t\t\tvar offCanvas = document.querySelector('.mui-off-canvas-wrap.mui-active');\n\t\t\t\tif (offCanvas) {\n\t\t\t\t\t$(offCanvas).offCanvas('close');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage();\n\t\t\t\tif (previewImage && previewImage.isShown()) {\n\t\t\t\t\tpreviewImage.close();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//popup\n\t\t\t\treturn $.closePopup();\n\t\t\t}\n\t\t});\n\t}\n\t//首次按下back按键的时间\n\t$.__back__first = null;\n\t/**\n\t * 5+ back\n\t */\n\t$.addBack({\n\t\tname: '5+',\n\t\tindex: 10,\n\t\thandle: function() {\n\t\t\tif (!window.plus) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar wobj = plus.webview.currentWebview();\n\t\t\tvar parent = wobj.parent();\n\t\t\tif (parent) {\n\t\t\t\tparent.evalJS('mui&&mui.back();');\n\t\t\t} else {\n\t\t\t\twobj.canBack(function(e) {\n\t\t\t\t\t//by chb 暂时注释，在碰到类似popover之类的锚点的时候，需多次点击才能返回；\n\t\t\t\t\tif (e.canBack) { //webview history back\n\t\t\t\t\t\twindow.history.back();\n\t\t\t\t\t} else { //webview close or hide\n\t\t\t\t\t\t//fixed by fxy 此处不应该用opener判断，因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了，导致不能执行close\n\t\t\t\t\t\tif (wobj.id === plus.runtime.appid) { //首页\n\t\t\t\t\t\t\t//首页不存在opener的情况下，后退实际上应该是退出应用；\n\t\t\t\t\t\t\t//首次按键，提示‘再按一次退出应用’\n\t\t\t\t\t\t\tif (!$.__back__first) {\n\t\t\t\t\t\t\t\t$.__back__first = new Date().getTime();\n\t\t\t\t\t\t\t\tmui.toast('再按一次退出应用');\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t$.__back__first = null;\n\t\t\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (new Date().getTime() - $.__back__first < 2000) {\n\t\t\t\t\t\t\t\t\tplus.runtime.quit();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else { //其他页面，\n\t\t\t\t\t\t\tif (wobj.preload) {\n\t\t\t\t\t\t\t\twobj.hide(\"auto\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//关闭页面时，需要将其打开的所有子页面全部关闭；\n\t\t\t\t\t\t\t\t$.closeAll(wobj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t});\n\n\n\t$.menu = function() {\n\t\tvar menu = document.querySelector('.mui-action-menu');\n\t\tif (menu) {\n\t\t\t$.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话，找不到当前targets的问题\n\t\t\t$.trigger(menu, 'tap');\n\t\t} else { //执行父窗口的menu\n\t\t\tif (window.plus) {\n\t\t\t\tvar wobj = $.currentWebview;\n\t\t\t\tvar parent = wobj.parent();\n\t\t\t\tif (parent) { //又得evalJS\n\t\t\t\t\tparent.evalJS('mui&&mui.menu();');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar __back = function() {\n\t\t$.back();\n\t};\n\tvar __menu = function() {\n\t\t$.menu();\n\t};\n\t//默认监听\n\t$.plusReady(function() {\n\t\tif ($.options.keyEventBind.backbutton) {\n\t\t\tplus.key.addEventListener('backbutton', __back, false);\n\t\t}\n\t\tif ($.options.keyEventBind.menubutton) {\n\t\t\tplus.key.addEventListener('menubutton', __menu, false);\n\t\t}\n\t});\n\t//处理按键监听事件\n\t$.addInit({\n\t\tname: 'keyEventBind',\n\t\tindex: 1000,\n\t\thandle: function() {\n\t\t\t$.plusReady(function() {\n\t\t\t\t//如果不为true，则移除默认监听\n\t\t\t\tif (!$.options.keyEventBind.backbutton) {\n\t\t\t\t\tplus.key.removeEventListener('backbutton', __back);\n\t\t\t\t}\n\t\t\t\tif (!$.options.keyEventBind.menubutton) {\n\t\t\t\t\tplus.key.removeEventListener('menubutton', __menu);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(mui, window);\n/**\n * mui.init pulldownRefresh\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.addInit({\n\t\tname: 'pullrefresh',\n\t\tindex: 1000,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar pullRefreshOptions = options.pullRefresh || {};\n\t\t\tvar hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback');\n\t\t\tvar hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback');\n\t\t\tif(hasPulldown || hasPullup) {\n\t\t\t\tvar container = pullRefreshOptions.container;\n\t\t\t\tif(container) {\n\t\t\t\t\tvar $container = $(container);\n\t\t\t\t\tif($container.length === 1) {\n\t\t\t\t\t\tif($.os.plus) { //5+环境\n\t\t\t\t\t\t\tif(hasPulldown && pullRefreshOptions.down.style == \"circle\") { //原生转圈\n\t\t\t\t\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t\t\t\t\t//这里改写$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t$.fn.pullRefresh = $.fn.pullRefresh_native;\n\t\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t} else if($.os.android) { //非原生转圈，但是Android环境\n\t\t\t\t\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t\t\t\t\t//这里改写$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t$.fn.pullRefresh = $.fn.pullRefresh_native\n\t\t\t\t\t\t\t\t\tvar webview = plus.webview.currentWebview();\n\t\t\t\t\t\t\t\t\tif(window.__NWin_Enable__ === false) { //不支持多webview\n\t\t\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif(hasPullup) {\n\t\t\t\t\t\t\t\t\t\t\t//当前页面初始化pullup\n\t\t\t\t\t\t\t\t\t\t\tvar upOptions = {};\n\t\t\t\t\t\t\t\t\t\t\tupOptions.up = pullRefreshOptions.up;\n\t\t\t\t\t\t\t\t\t\t\tupOptions.webviewId = webview.id || webview.getURL();\n\t\t\t\t\t\t\t\t\t\t\t$container.pullRefresh(upOptions);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif(hasPulldown) {\n\t\t\t\t\t\t\t\t\t\t\tvar parent = webview.parent();\n\t\t\t\t\t\t\t\t\t\t\tvar id = webview.id || webview.getURL();\n\t\t\t\t\t\t\t\t\t\t\tif(parent) {\n\t\t\t\t\t\t\t\t\t\t\t\tif(!hasPullup) { //如果没有上拉加载，需要手动初始化一个默认的pullRefresh，以便当前页面容器可以调用endPulldownToRefresh等方法\n\t\t\t\t\t\t\t\t\t\t\t\t\t$container.pullRefresh({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebviewId: id\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tvar downOptions = {\n\t\t\t\t\t\t\t\t\t\t\t\t\twebviewId: id//子页面id\n\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\tdownOptions.down = $.extend({}, pullRefreshOptions.down);\n\t\t\t\t\t\t\t\t\t\t\t\tdownOptions.down.callback = '_CALLBACK';\n\t\t\t\t\t\t\t\t\t\t\t\t//改写父页面的$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t\t\t\tparent.evalJS(\"mui.fn.pullRefresh=mui.fn.pullRefresh_native\");\n\t\t\t\t\t\t\t\t\t\t\t\t//父页面初始化pulldown\n\t\t\t\t\t\t\t\t\t\t\t\tparent.evalJS(\"mui&&mui(document.querySelector('.mui-content')).pullRefresh('\" + JSON.stringify(downOptions) + \"')\");\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else { //非原生转圈，iOS环境\n\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(mui);\n/**\n * mui ajax\n * @param {type} $\n * @returns {undefined}\n */\n(function($, window, undefined) {\n\n\tvar jsonType = 'application/json';\n\tvar htmlType = 'text/html';\n\tvar rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi;\n\tvar scriptTypeRE = /^(?:text|application)\\/javascript/i;\n\tvar xmlTypeRE = /^(?:text|application)\\/xml/i;\n\tvar blankRE = /^\\s*$/;\n\n\t$.ajaxSettings = {\n\t\ttype: 'GET',\n\t\tbeforeSend: $.noop,\n\t\tsuccess: $.noop,\n\t\terror: $.noop,\n\t\tcomplete: $.noop,\n\t\tcontext: null,\n\t\txhr: function(protocol) {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t},\n\t\taccepts: {\n\t\t\tscript: 'text/javascript, application/javascript, application/x-javascript',\n\t\t\tjson: jsonType,\n\t\t\txml: 'application/xml, text/xml',\n\t\t\thtml: htmlType,\n\t\t\ttext: 'text/plain'\n\t\t},\n\t\ttimeout: 0,\n\t\tprocessData: true,\n\t\tcache: true\n\t};\n\tvar ajaxBeforeSend = function(xhr, settings) {\n\t\tvar context = settings.context\n\t\tif(settings.beforeSend.call(context, xhr, settings) === false) {\n\t\t\treturn false;\n\t\t}\n\t};\n\tvar ajaxSuccess = function(data, xhr, settings) {\n\t\tsettings.success.call(settings.context, data, 'success', xhr);\n\t\tajaxComplete('success', xhr, settings);\n\t};\n\t// type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n\tvar ajaxError = function(error, type, xhr, settings) {\n\t\tsettings.error.call(settings.context, xhr, type, error);\n\t\tajaxComplete(type, xhr, settings);\n\t};\n\t// status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n\tvar ajaxComplete = function(status, xhr, settings) {\n\t\tsettings.complete.call(settings.context, xhr, status);\n\t};\n\n\tvar serialize = function(params, obj, traditional, scope) {\n\t\tvar type, array = $.isArray(obj),\n\t\t\thash = $.isPlainObject(obj);\n\t\t$.each(obj, function(key, value) {\n\t\t\ttype = $.type(value);\n\t\t\tif(scope) {\n\t\t\t\tkey = traditional ? scope :\n\t\t\t\t\tscope + '[' + (hash || type === 'object' || type === 'array' ? key : '') + ']';\n\t\t\t}\n\t\t\t// handle data in serializeArray() format\n\t\t\tif(!scope && array) {\n\t\t\t\tparams.add(value.name, value.value);\n\t\t\t}\n\t\t\t// recurse into nested objects\n\t\t\telse if(type === \"array\" || (!traditional && type === \"object\")) {\n\t\t\t\tserialize(params, value, traditional, key);\n\t\t\t} else {\n\t\t\t\tparams.add(key, value);\n\t\t\t}\n\t\t});\n\t};\n\tvar serializeData = function(options) {\n\t\tif(options.processData && options.data && typeof options.data !== \"string\") {\n\t\t\tvar contentType = options.contentType;\n\t\t\tif(!contentType && options.headers) {\n\t\t\t\tcontentType = options.headers['Content-Type'];\n\t\t\t}\n\t\t\tif(contentType && ~contentType.indexOf(jsonType)) { //application/json\n\t\t\t\toptions.data = JSON.stringify(options.data);\n\t\t\t} else {\n\t\t\t\toptions.data = $.param(options.data, options.traditional);\n\t\t\t}\n\t\t}\n\t\tif(options.data && (!options.type || options.type.toUpperCase() === 'GET')) {\n\t\t\toptions.url = appendQuery(options.url, options.data);\n\t\t\toptions.data = undefined;\n\t\t}\n\t};\n\tvar appendQuery = function(url, query) {\n\t\tif(query === '') {\n\t\t\treturn url;\n\t\t}\n\t\treturn(url + '&' + query).replace(/[&?]{1,2}/, '?');\n\t};\n\tvar mimeToDataType = function(mime) {\n\t\tif(mime) {\n\t\t\tmime = mime.split(';', 2)[0];\n\t\t}\n\t\treturn mime && (mime === htmlType ? 'html' :\n\t\t\tmime === jsonType ? 'json' :\n\t\t\tscriptTypeRE.test(mime) ? 'script' :\n\t\t\txmlTypeRE.test(mime) && 'xml') || 'text';\n\t};\n\tvar parseArguments = function(url, data, success, dataType) {\n\t\tif($.isFunction(data)) {\n\t\t\tdataType = success, success = data, data = undefined;\n\t\t}\n\t\tif(!$.isFunction(success)) {\n\t\t\tdataType = success, success = undefined;\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: success,\n\t\t\tdataType: dataType\n\t\t};\n\t};\n\t$.ajax = function(url, options) {\n\t\tif(typeof url === \"object\") {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\t\tvar settings = options || {};\n\t\tsettings.url = url || settings.url;\n\t\tfor(var key in $.ajaxSettings) {\n\t\t\tif(settings[key] === undefined) {\n\t\t\t\tsettings[key] = $.ajaxSettings[key];\n\t\t\t}\n\t\t}\n\t\tserializeData(settings);\n\t\tvar dataType = settings.dataType;\n\n\t\tif(settings.cache === false || ((!options || options.cache !== true) && ('script' === dataType))) {\n\t\t\tsettings.url = appendQuery(settings.url, '_=' + $.now());\n\t\t}\n\t\tvar mime = settings.accepts[dataType && dataType.toLowerCase()];\n\t\tvar headers = {};\n\t\tvar setHeader = function(name, value) {\n\t\t\theaders[name.toLowerCase()] = [name, value];\n\t\t};\n\t\tvar protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol;        \n\t\tvar xhr = settings.xhr(settings);\n        \n        if(location.protocol === 'file:' && $.os.ios && window.webkit && window.webkit.messageHandlers && !(xhr instanceof plus.net.XMLHttpRequest)){\n            console.error(\"当前运行环境为WKWebview，需在plusReady事件触发后再调用mui.ajax，否则可能会执行失败或报Script error的错误\")\n        }\n\t\tvar nativeSetHeader = xhr.setRequestHeader;\n\t\tvar abortTimeout;\n\n\t\tsetHeader('X-Requested-With', 'XMLHttpRequest');\n\t\tsetHeader('Accept', mime || '*/*');\n\t\tif(!!(mime = settings.mimeType || mime)) {\n\t\t\tif(mime.indexOf(',') > -1) {\n\t\t\t\tmime = mime.split(',', 2)[0];\n\t\t\t}\n\t\t\txhr.overrideMimeType && xhr.overrideMimeType(mime);\n\t\t}\n\t\tif(settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() !== 'GET')) {\n\t\t\tsetHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');\n\t\t}\n\t\tif(settings.headers) {\n\t\t\tfor(var name in settings.headers)\n\t\t\t\tsetHeader(name, settings.headers[name]);\n\t\t}\n\t\txhr.setRequestHeader = setHeader;\n\n\t\txhr.onreadystatechange = function() {\n\t\t\tif(xhr.readyState === 4) {\n\t\t\t\txhr.onreadystatechange = $.noop;\n\t\t\t\tclearTimeout(abortTimeout);\n\t\t\t\tvar result, error = false;\n\t\t\t\tvar isLocal = protocol === 'file:';\n\t\t\t\tif((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || (xhr.status === 0 && isLocal && xhr.responseText)) {\n\t\t\t\t\tdataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));\n\t\t\t\t\tresult = xhr.responseText;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// http://perfectionkills.com/global-eval-what-are-the-options/\n\t\t\t\t\t\tif(dataType === 'script') {\n\t\t\t\t\t\t\t(1, eval)(result);\n\t\t\t\t\t\t} else if(dataType === 'xml') {\n\t\t\t\t\t\t\tresult = xhr.responseXML;\n\t\t\t\t\t\t} else if(dataType === 'json') {\n\t\t\t\t\t\t\tresult = blankRE.test(result) ? null : $.parseJSON(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\terror = e;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(error) {\n\t\t\t\t\t\tajaxError(error, 'parsererror', xhr, settings);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tajaxSuccess(result, xhr, settings);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar status = xhr.status ? 'error' : 'abort';\n\t\t\t\t\tvar statusText = xhr.statusText || null;\n\t\t\t\t\tif(isLocal) {\n\t\t\t\t\t\tstatus = 'error';\n\t\t\t\t\t\tstatusText = '404';\n\t\t\t\t\t}\n\t\t\t\t\tajaxError(statusText, status, xhr, settings);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif(ajaxBeforeSend(xhr, settings) === false) {\n\t\t\txhr.abort();\n\t\t\tajaxError(null, 'abort', xhr, settings);\n\t\t\treturn xhr;\n\t\t}\n\n\t\tif(settings.xhrFields) {\n\t\t\tfor(var name in settings.xhrFields) {\n\t\t\t\txhr[name] = settings.xhrFields[name];\n\t\t\t}\n\t\t}\n\n\t\tvar async = 'async' in settings ? settings.async : true;\n\n\t\txhr.open(settings.type.toUpperCase(), settings.url, async, settings.username, settings.password);\n\n\t\tfor(var name in headers) {\n\t\t\tif(headers.hasOwnProperty(name)) {\n\t\t\t\tnativeSetHeader.apply(xhr, headers[name]);\n\t\t\t}\n\t\t}\n\t\tif(settings.timeout > 0) {\n\t\t\tabortTimeout = setTimeout(function() {\n\t\t\t\txhr.onreadystatechange = $.noop;\n\t\t\t\txhr.abort();\n\t\t\t\tajaxError(null, 'timeout', xhr, settings);\n\t\t\t}, settings.timeout);\n\t\t}\n\t\txhr.send(settings.data ? settings.data : null);\n\t\treturn xhr;\n\t};\n\n\t$.param = function(obj, traditional) {\n\t\tvar params = [];\n\t\tparams.add = function(k, v) {\n\t\t\tthis.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n\t\t};\n\t\tserialize(params, obj, traditional);\n\t\treturn params.join('&').replace(/%20/g, '+');\n\t};\n\t$.get = function( /* url, data, success, dataType */ ) {\n\t\treturn $.ajax(parseArguments.apply(null, arguments));\n\t};\n\n\t$.post = function( /* url, data, success, dataType */ ) {\n\t\tvar options = parseArguments.apply(null, arguments);\n\t\toptions.type = 'POST';\n\t\treturn $.ajax(options);\n\t};\n\n\t$.getJSON = function( /* url, data, success */ ) {\n\t\tvar options = parseArguments.apply(null, arguments);\n\t\toptions.dataType = 'json';\n\t\treturn $.ajax(options);\n\t};\n\n\t$.fn.load = function(url, data, success) {\n\t\tif(!this.length)\n\t\t\treturn this;\n\t\tvar self = this,\n\t\t\tparts = url.split(/\\s/),\n\t\t\tselector,\n\t\t\toptions = parseArguments(url, data, success),\n\t\t\tcallback = options.success;\n\t\tif(parts.length > 1)\n\t\t\toptions.url = parts[0], selector = parts[1];\n\t\toptions.success = function(response) {\n\t\t\tif(selector) {\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tdiv.innerHTML = response.replace(rscript, \"\");\n\t\t\t\tvar selectorDiv = document.createElement('div');\n\t\t\t\tvar childs = div.querySelectorAll(selector);\n\t\t\t\tif(childs && childs.length > 0) {\n\t\t\t\t\tfor(var i = 0, len = childs.length; i < len; i++) {\n\t\t\t\t\t\tselectorDiv.appendChild(childs[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself[0].innerHTML = selectorDiv.innerHTML;\n\t\t\t} else {\n\t\t\t\tself[0].innerHTML = response;\n\t\t\t}\n\t\t\tcallback && callback.apply(self, arguments);\n\t\t};\n\t\t$.ajax(options);\n\t\treturn this;\n\t};\n\n})(mui, window);\n/**\n * 5+ ajax\n */\n(function($) {\n\tvar originAnchor = document.createElement('a');\n\toriginAnchor.href = window.location.href;\n\t$.plusReady(function() {\n\t\t$.ajaxSettings = $.extend($.ajaxSettings, {\n\t\t\txhr: function(settings) {\n\t\t\t\tif (settings.crossDomain) { //强制使用plus跨域\n\t\t\t\t\treturn new plus.net.XMLHttpRequest();\n\t\t\t\t}\n\t\t\t\t//仅在webview的url为远程文件，且ajax请求的资源不同源下使用plus.net.XMLHttpRequest\n\t\t\t\tif (originAnchor.protocol !== 'file:') {\n\t\t\t\t\tvar urlAnchor = document.createElement('a');\n\t\t\t\t\turlAnchor.href = settings.url;\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\tsettings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host);\n\t\t\t\t\tif (settings.crossDomain) {\n\t\t\t\t\t\treturn new plus.net.XMLHttpRequest();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ($.os.ios && window.webkit && window.webkit.messageHandlers) { //wkwebview下同样使用5+ xhr\n                    return new plus.net.XMLHttpRequest();\n                }\n\t\t\t\treturn new window.XMLHttpRequest();\n\t\t\t}\n\t\t});\n\t});\n})(mui);\n/**\n * mui layout(offset[,position,width,height...])\n * @param {type} $\n * @param {type} window\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, undefined) {\n\t$.offset = function(element) {\n\t\tvar box = {\n\t\t\ttop : 0,\n\t\t\tleft : 0\n\t\t};\n\t\tif ( typeof element.getBoundingClientRect !== undefined) {\n\t\t\tbox = element.getBoundingClientRect();\n\t\t}\n\t\treturn {\n\t\t\ttop : box.top + window.pageYOffset - element.clientTop,\n\t\t\tleft : box.left + window.pageXOffset - element.clientLeft\n\t\t};\n\t};\n})(mui, window); \n/**\n * mui animation\n */\n(function($, window) {\n\t/**\n\t * scrollTo\n\t */\n\t$.scrollTo = function(scrollTop, duration, callback) {\n\t\tduration = duration || 1000;\n\t\tvar scroll = function(duration) {\n\t\t\tif (duration <= 0) {\n\t\t\t\twindow.scrollTo(0, scrollTop);\n\t\t\t\tcallback && callback();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar distaince = scrollTop - window.scrollY;\n\t\t\tsetTimeout(function() {\n\t\t\t\twindow.scrollTo(0, window.scrollY + distaince / duration * 10);\n\t\t\t\tscroll(duration - 10);\n\t\t\t}, 16.7);\n\t\t};\n\t\tscroll(duration);\n\t};\n\t$.animationFrame = function(cb) {\n\t\tvar args, isQueued, context;\n\t\treturn function() {\n\t\t\targs = arguments;\n\t\t\tcontext = this;\n\t\t\tif (!isQueued) {\n\t\t\t\tisQueued = true;\n\t\t\t\trequestAnimationFrame(function() {\n\t\t\t\t\tcb.apply(context, args);\n\t\t\t\t\tisQueued = false;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t};\n\n})(mui, window);\n(function($) {\n\tvar initializing = false,\n\t\tfnTest = /xyz/.test(function() {\n\t\t\txyz;\n\t\t}) ? /\\b_super\\b/ : /.*/;\n\n\tvar Class = function() {};\n\tClass.extend = function(prop) {\n\t\tvar _super = this.prototype;\n\t\tinitializing = true;\n\t\tvar prototype = new this();\n\t\tinitializing = false;\n\t\tfor (var name in prop) {\n\t\t\tprototype[name] = typeof prop[name] == \"function\" &&\n\t\t\t\ttypeof _super[name] == \"function\" && fnTest.test(prop[name]) ?\n\t\t\t\t(function(name, fn) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tvar tmp = this._super;\n\n\t\t\t\t\t\tthis._super = _super[name];\n\n\t\t\t\t\t\tvar ret = fn.apply(this, arguments);\n\t\t\t\t\t\tthis._super = tmp;\n\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t};\n\t\t\t\t})(name, prop[name]) :\n\t\t\t\tprop[name];\n\t\t}\n\t\tfunction Class() {\n\t\t\tif (!initializing && this.init)\n\t\t\t\tthis.init.apply(this, arguments);\n\t\t}\n\t\tClass.prototype = prototype;\n\t\tClass.prototype.constructor = Class;\n\t\tClass.extend = arguments.callee;\n\t\treturn Class;\n\t};\n\t$.Class = Class;\n})(mui);\n(function($, document, undefined) {\n    var CLASS_PULL_TOP_POCKET = 'mui-pull-top-pocket';\n    var CLASS_PULL_BOTTOM_POCKET = 'mui-pull-bottom-pocket';\n    var CLASS_PULL = 'mui-pull';\n    var CLASS_PULL_LOADING = 'mui-pull-loading';\n    var CLASS_PULL_CAPTION = 'mui-pull-caption';\n    var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down';\n    var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh';\n    var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore';\n\n    var CLASS_ICON = 'mui-icon';\n    var CLASS_SPINNER = 'mui-spinner';\n    var CLASS_ICON_PULLDOWN = 'mui-icon-pulldown';\n\n    var CLASS_BLOCK = 'mui-block';\n    var CLASS_HIDDEN = 'mui-hidden';\n    var CLASS_VISIBILITY = 'mui-visibility';\n\n    var CLASS_LOADING_UP = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;\n    var CLASS_LOADING_DOWN = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;\n    var CLASS_LOADING = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_SPINNER;\n\n    var pocketHtml = ['<div class=\"' + CLASS_PULL + '\">', '<div class=\"{icon}\"></div>', '<div class=\"' + CLASS_PULL_CAPTION + '\">{contentrefresh}</div>', '</div>'].join('');\n\n    var PullRefresh = {\n        init: function(element, options) {\n            this._super(element, $.extend(true, {\n                scrollY: true,\n                scrollX: false,\n                indicators: true,\n                deceleration: 0.003,\n                down: {\n                    height: 50,\n                    contentinit: '下拉可以刷新',\n                    contentdown: '下拉可以刷新',\n                    contentover: '释放立即刷新',\n                    contentrefresh: '正在刷新...'\n                },\n                up: {\n                    height: 50,\n                    auto: false,\n                    contentinit: '上拉显示更多',\n                    contentdown: '上拉显示更多',\n                    contentrefresh: '正在加载...',\n                    contentnomore: '没有更多数据了',\n                    duration: 300\n                }\n            }, options));\n        },\n        _init: function() {\n            this._super();\n            this._initPocket();\n        },\n        _initPulldownRefresh: function() {\n            this.pulldown = true;\n            if (this.topPocket) {\n                this.pullPocket = this.topPocket;\n                this.pullPocket.classList.add(CLASS_BLOCK);\n                this.pullPocket.classList.add(CLASS_VISIBILITY);\n                this.pullCaption = this.topCaption;\n                this.pullLoading = this.topLoading;\n            }\n        },\n        _initPullupRefresh: function() {\n            this.pulldown = false;\n            if (this.bottomPocket) {\n                this.pullPocket = this.bottomPocket;\n                this.pullPocket.classList.add(CLASS_BLOCK);\n                this.pullPocket.classList.add(CLASS_VISIBILITY);\n                this.pullCaption = this.bottomCaption;\n                this.pullLoading = this.bottomLoading;\n            }\n        },\n        _initPocket: function() {\n            var options = this.options;\n            if (options.down && options.down.hasOwnProperty('callback')) {\n                this.topPocket = this.scroller.querySelector('.' + CLASS_PULL_TOP_POCKET);\n                if (!this.topPocket) {\n                    this.topPocket = this._createPocket(CLASS_PULL_TOP_POCKET, options.down, CLASS_LOADING_DOWN);\n                    this.wrapper.insertBefore(this.topPocket, this.wrapper.firstChild);\n                }\n                this.topLoading = this.topPocket.querySelector('.' + CLASS_PULL_LOADING);\n                this.topCaption = this.topPocket.querySelector('.' + CLASS_PULL_CAPTION);\n            }\n            if (options.up && options.up.hasOwnProperty('callback')) {\n                this.bottomPocket = this.scroller.querySelector('.' + CLASS_PULL_BOTTOM_POCKET);\n                if (!this.bottomPocket) {\n                    this.bottomPocket = this._createPocket(CLASS_PULL_BOTTOM_POCKET, options.up, CLASS_LOADING);\n                    this.scroller.appendChild(this.bottomPocket);\n                }\n                this.bottomLoading = this.bottomPocket.querySelector('.' + CLASS_PULL_LOADING);\n                this.bottomCaption = this.bottomPocket.querySelector('.' + CLASS_PULL_CAPTION);\n                //TODO only for h5\n                this.wrapper.addEventListener('scrollbottom', this);\n            }\n        },\n        _createPocket: function(clazz, options, iconClass) {\n            var pocket = document.createElement('div');\n            pocket.className = clazz;\n            pocket.innerHTML = pocketHtml.replace('{contentrefresh}', options.contentinit).replace('{icon}', iconClass);\n            return pocket;\n        },\n        _resetPullDownLoading: function() {\n            var loading = this.pullLoading;\n            if (loading) {\n                this.pullCaption.innerHTML = this.options.down.contentdown;\n                loading.style.webkitTransition = \"\";\n                loading.style.webkitTransform = \"\";\n                loading.style.webkitAnimation = \"\";\n                loading.className = CLASS_LOADING_DOWN;\n            }\n        },\n        _setCaptionClass: function(isPulldown, caption, title) {\n            if (!isPulldown) {\n                switch (title) {\n                    case this.options.up.contentdown:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                        break;\n                    case this.options.up.contentrefresh:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH\n                        break;\n                    case this.options.up.contentnomore:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;\n                        break;\n                }\n            }\n        },\n        _setCaption: function(title, reset) {\n            if (this.loading) {\n                return;\n            }\n            var options = this.options;\n            var pocket = this.pullPocket;\n            var caption = this.pullCaption;\n            var loading = this.pullLoading;\n            var isPulldown = this.pulldown;\n            var self = this;\n            if (pocket) {\n                if (reset) {\n                    setTimeout(function() {\n                        caption.innerHTML = self.lastTitle = title;\n                        if (isPulldown) {\n                            loading.className = CLASS_LOADING_DOWN;\n                        } else {\n                            self._setCaptionClass(false, caption, title);\n                            loading.className = CLASS_LOADING;\n                        }\n                        loading.style.webkitAnimation = \"\";\n                        loading.style.webkitTransition = \"\";\n                        loading.style.webkitTransform = \"\";\n                    }, 100);\n                } else {\n                    if (title !== this.lastTitle) {\n                        caption.innerHTML = title;\n                        if (isPulldown) {\n                            if (title === options.down.contentrefresh) {\n                                loading.className = CLASS_LOADING;\n                                loading.style.webkitAnimation = \"spinner-spin 1s step-end infinite\";\n                            } else if (title === options.down.contentover) {\n                                loading.className = CLASS_LOADING_UP;\n                                loading.style.webkitTransition = \"-webkit-transform 0.3s ease-in\";\n                                loading.style.webkitTransform = \"rotate(180deg)\";\n                            } else if (title === options.down.contentdown) {\n                                loading.className = CLASS_LOADING_DOWN;\n                                loading.style.webkitTransition = \"-webkit-transform 0.3s ease-in\";\n                                loading.style.webkitTransform = \"rotate(0deg)\";\n                            }\n                        } else {\n                            if (title === options.up.contentrefresh) {\n                                loading.className = CLASS_LOADING + ' ' + CLASS_VISIBILITY;\n                            } else {\n                                loading.className = CLASS_LOADING + ' ' + CLASS_HIDDEN;\n                            }\n                            self._setCaptionClass(false, caption, title);\n                        }\n                        this.lastTitle = title;\n                    }\n                }\n\n            }\n        }\n    };\n    $.PullRefresh = PullRefresh;\n})(mui, document);\n(function($, window, document, undefined) {\n\tvar CLASS_SCROLL = 'mui-scroll';\n\tvar CLASS_SCROLLBAR = 'mui-scrollbar';\n\tvar CLASS_INDICATOR = 'mui-scrollbar-indicator';\n\tvar CLASS_SCROLLBAR_VERTICAL = CLASS_SCROLLBAR + '-vertical';\n\tvar CLASS_SCROLLBAR_HORIZONTAL = CLASS_SCROLLBAR + '-horizontal';\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\tvar ease = {\n\t\tquadratic: {\n\t\t\tstyle: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n\t\t\tfn: function(k) {\n\t\t\t\treturn k * (2 - k);\n\t\t\t}\n\t\t},\n\t\tcircular: {\n\t\t\tstyle: 'cubic-bezier(0.1, 0.57, 0.1, 1)',\n\t\t\tfn: function(k) {\n\t\t\t\treturn Math.sqrt(1 - (--k * k));\n\t\t\t}\n\t\t},\n\t\toutCirc: {\n\t\t\tstyle: 'cubic-bezier(0.075, 0.82, 0.165, 1)'\n\t\t},\n\t\toutCubic: {\n\t\t\tstyle: 'cubic-bezier(0.165, 0.84, 0.44, 1)'\n\t\t}\n\t}\n\tvar Scroll = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.wrapper = this.element = element;\n\t\t\tthis.scroller = this.wrapper.children[0];\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t\tthis.stopped = false;\n\n\t\t\tthis.options = $.extend(true, {\n\t\t\t\tscrollY: true, //是否竖向滚动\n\t\t\t\tscrollX: false, //是否横向滚动\n\t\t\t\tstartX: 0, //初始化时滚动至x\n\t\t\t\tstartY: 0, //初始化时滚动至y\n\n\t\t\t\tindicators: true, //是否显示滚动条\n\t\t\t\tstopPropagation: false,\n\t\t\t\thardwareAccelerated: true,\n\t\t\t\tfixedBadAndorid: false,\n\t\t\t\tpreventDefaultException: {\n\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/\n\t\t\t\t},\n\t\t\t\tmomentum: true,\n\n\t\t\t\tsnapX: 0.5, //横向切换距离(以当前容器宽度为基准)\n\t\t\t\tsnap: false, //图片轮播，拖拽式选项卡\n\n\t\t\t\tbounce: true, //是否启用回弹\n\t\t\t\tbounceTime: 500, //回弹动画时间\n\t\t\t\tbounceEasing: ease.outCirc, //回弹动画曲线\n\n\t\t\t\tscrollTime: 500,\n\t\t\t\tscrollEasing: ease.outCubic, //轮播动画曲线\n\n\t\t\t\tdirectionLockThreshold: 5,\n\n\t\t\t\tparallaxElement: false, //视差元素\n\t\t\t\tparallaxRatio: 0.5\n\t\t\t}, options);\n\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tthis.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : '';\n\n\t\t\tthis._init();\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.refresh();\n\t\t\t\t//\t\t\t\tif (this.options.startX !== 0 || this.options.startY !== 0) { //需要判断吗？后续根据实际情况再看看\n\t\t\t\tthis.scrollTo(this.options.startX, this.options.startY);\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._initParallax();\n\t\t\tthis._initIndicators();\n\t\t\tthis._initEvent();\n\t\t},\n\t\t_initParallax: function() {\n\t\t\tif (this.options.parallaxElement) {\n\t\t\t\tthis.parallaxElement = document.querySelector(this.options.parallaxElement);\n\t\t\t\tthis.parallaxStyle = this.parallaxElement.style;\n\t\t\t\tthis.parallaxHeight = this.parallaxElement.offsetHeight;\n\t\t\t\tthis.parallaxImgStyle = this.parallaxElement.querySelector('img').style;\n\t\t\t}\n\t\t},\n\t\t_initIndicators: function() {\n\t\t\tvar self = this;\n\t\t\tself.indicators = [];\n\t\t\tif (!this.options.indicators) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar indicators = [],\n\t\t\t\tindicator;\n\n\t\t\t// Vertical scrollbar\n\t\t\tif (self.options.scrollY) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: this._createScrollBar(CLASS_SCROLLBAR_VERTICAL),\n\t\t\t\t\tlistenX: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\t// Horizontal scrollbar\n\t\t\tif (this.options.scrollX) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: this._createScrollBar(CLASS_SCROLLBAR_HORIZONTAL),\n\t\t\t\t\tlistenY: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\tfor (var i = indicators.length; i--;) {\n\t\t\t\tthis.indicators.push(new Indicator(this, indicators[i]));\n\t\t\t}\n\n\t\t},\n\t\t_initSnap: function() {\n\t\t\tthis.currentPage = {};\n\t\t\tthis.pages = [];\n\t\t\tvar snaps = this.snaps;\n\t\t\tvar length = snaps.length;\n\t\t\tvar m = 0;\n\t\t\tvar n = -1;\n\t\t\tvar x = 0;\n\t\t\tvar leftX = 0;\n\t\t\tvar rightX = 0;\n\t\t\tvar snapX = 0;\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar snap = snaps[i];\n\t\t\t\tvar offsetLeft = snap.offsetLeft;\n\t\t\t\tvar offsetWidth = snap.offsetWidth;\n\t\t\t\tif (i === 0 || offsetLeft <= snaps[i - 1].offsetLeft) {\n\t\t\t\t\tm = 0;\n\t\t\t\t\tn++;\n\t\t\t\t}\n\t\t\t\tif (!this.pages[m]) {\n\t\t\t\t\tthis.pages[m] = [];\n\t\t\t\t}\n\t\t\t\tx = this._getSnapX(offsetLeft);\n\t\t\t\tsnapX = Math.round((offsetWidth) * this.options.snapX);\n\t\t\t\tleftX = x - snapX;\n\t\t\t\trightX = x - offsetWidth + snapX;\n\t\t\t\tthis.pages[m][n] = {\n\t\t\t\t\tx: x,\n\t\t\t\t\tleftX: leftX,\n\t\t\t\t\trightX: rightX,\n\t\t\t\t\tpageX: m,\n\t\t\t\t\telement: snap\n\t\t\t\t}\n\t\t\t\tif (snap.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\tthis.currentPage = this.pages[m][0];\n\t\t\t\t}\n\t\t\t\tif (x >= this.maxScrollX) {\n\t\t\t\t\tm++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.options.startX = this.currentPage.x || 0;\n\t\t},\n\t\t_getSnapX: function(offsetLeft) {\n\t\t\treturn Math.max(Math.min(0, -offsetLeft + (this.wrapperWidth / 2)), this.maxScrollX);\n\t\t},\n\t\t_gotoPage: function(index) {\n\t\t\tthis.currentPage = this.pages[Math.min(index, this.pages.length - 1)][0];\n\t\t\tfor (var i = 0, len = this.snaps.length; i < len; i++) {\n\t\t\t\tif (i === index) {\n\t\t\t\t\tthis.snaps[i].classList.add(CLASS_ACTIVE);\n\t\t\t\t} else {\n\t\t\t\t\tthis.snaps[i].classList.remove(CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollTo(this.currentPage.x, 0, this.options.scrollTime);\n\t\t},\n\t\t_nearestSnap: function(x) {\n\t\t\tif (!this.pages.length) {\n\t\t\t\treturn {\n\t\t\t\t\tx: 0,\n\t\t\t\t\tpageX: 0\n\t\t\t\t};\n\t\t\t}\n\t\t\tvar i = 0;\n\t\t\tvar length = this.pages.length;\n\t\t\tif (x > 0) {\n\t\t\t\tx = 0;\n\t\t\t} else if (x < this.maxScrollX) {\n\t\t\t\tx = this.maxScrollX;\n\t\t\t}\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tvar nearestX = this.direction === 'left' ? this.pages[i][0].leftX : this.pages[i][0].rightX;\n\t\t\t\tif (x >= nearestX) {\n\t\t\t\t\treturn this.pages[i][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tx: 0,\n\t\t\t\tpageX: 0\n\t\t\t};\n\t\t},\n\t\t_initEvent: function(detach) {\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\twindow[action]('orientationchange', this);\n\t\t\twindow[action]('resize', this);\n\n\t\t\tthis.scroller[action]('webkitTransitionEnd', this);\n\n\t\t\tthis.wrapper[action]($.EVENT_START, this);\n\t\t\tthis.wrapper[action]($.EVENT_CANCEL, this);\n\t\t\tthis.wrapper[action]($.EVENT_END, this);\n\t\t\tthis.wrapper[action]('drag', this);\n\t\t\tthis.wrapper[action]('dragend', this);\n\t\t\tthis.wrapper[action]('flick', this);\n\t\t\tthis.wrapper[action]('scrollend', this);\n\t\t\tif (this.options.scrollX) {\n\t\t\t\tthis.wrapper[action]('swiperight', this);\n\t\t\t}\n\t\t\tvar segmentedControl = this.wrapper.querySelector('.mui-segmented-control');\n\t\t\tif (segmentedControl) { //靠，这个bug排查了一下午，阻止hash跳转，一旦hash跳转会导致可拖拽选项卡的tab不见\n\t\t\t\tmui(segmentedControl)[detach ? 'off' : 'on']('click', 'a', $.preventDefault);\n\t\t\t}\n\n\t\t\tthis.wrapper[action]('scrollstart', this);\n\t\t\tthis.wrapper[action]('refresh', this);\n\t\t},\n\t\t_handleIndicatorScrollend: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade();\n\t\t\t});\n\t\t},\n\t\t_handleIndicatorScrollstart: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade(1);\n\t\t\t});\n\t\t},\n\t\t_handleIndicatorRefresh: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.refresh();\n\t\t\t});\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tif (this.stopped) {\n\t\t\t\tthis.resetPosition();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\tthis._start(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis.options.stopPropagation && e.stopPropagation();\n\t\t\t\t\tthis._drag(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\tcase 'flick':\n\t\t\t\t\tthis.options.stopPropagation && e.stopPropagation();\n\t\t\t\t\tthis._flick(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tcase $.EVENT_END:\n\t\t\t\t\tthis._end(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd':\n\t\t\t\t\tthis.transitionTimer && this.transitionTimer.cancel();\n\t\t\t\t\tthis._transitionEnd(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollstart':\n\t\t\t\t\tthis._handleIndicatorScrollstart(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollend':\n\t\t\t\t\tthis._handleIndicatorScrollend(e);\n\t\t\t\t\tthis._scrollend(e);\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'orientationchange':\n\t\t\t\tcase 'resize':\n\t\t\t\t\tthis._resize();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swiperight':\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'refresh':\n\t\t\t\t\tthis._handleIndicatorRefresh(e);\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t},\n\t\t_start: function(e) {\n\t\t\tthis.moved = this.needReset = false;\n\t\t\tthis._transitionTime();\n\t\t\tif (this.isInTransition) {\n\t\t\t\tthis.needReset = true;\n\t\t\t\tthis.isInTransition = false;\n\t\t\t\tvar pos = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));\n\t\t\t\tthis.setTranslate(Math.round(pos.x), Math.round(pos.y));\n\t\t\t\t//\t\t\t\tthis.resetPosition(); //reset\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t\t//\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tthis.reLayout();\n\t\t\t$.trigger(this.scroller, 'beforescrollstart', this);\n\t\t},\n\t\t_getDirectionByAngle: function(angle) {\n\t\t\tif (angle < -80 && angle > -100) {\n\t\t\t\treturn 'up';\n\t\t\t} else if (angle >= 80 && angle < 100) {\n\t\t\t\treturn 'down';\n\t\t\t} else if (angle >= 170 || angle <= -170) {\n\t\t\t\treturn 'left';\n\t\t\t} else if (angle >= -35 && angle <= 10) {\n\t\t\t\treturn 'right';\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t_drag: function(e) {\n\t\t\t//\t\t\tif (this.needReset) {\n\t\t\t//\t\t\t\te.stopPropagation(); //disable parent drag(nested scroller)\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tif (this.options.scrollY || detail.direction === 'up' || detail.direction === 'down') { //如果是竖向滚动或手势方向是上或下\n\t\t\t\t//ios8 hack\n\t\t\t\tif ($.os.ios && parseFloat($.os.version) >= 8) { //多webview时，离开当前webview会导致后续touch事件不触发\n\t\t\t\t\tvar clientY = detail.gesture.touches[0].clientY;\n\t\t\t\t\t//下拉刷新 or 上拉加载\n\t\t\t\t\tif ((clientY + 10) > window.innerHeight || clientY < 10) {\n\t\t\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar isPreventDefault = isReturn = false;\n\t\t\tvar direction = this._getDirectionByAngle(detail.angle);\n\t\t\tif (detail.direction === 'left' || detail.direction === 'right') {\n\t\t\t\tif (this.options.scrollX) {\n\t\t\t\t\tisPreventDefault = true;\n\t\t\t\t\tif (!this.moved) { //识别角度(该角度导致轮播不灵敏)\n\t\t\t\t\t\t//\t\t\t\t\t\tif (direction !== 'left' && direction !== 'right') {\n\t\t\t\t\t\t//\t\t\t\t\t\t\tisReturn = true;\n\t\t\t\t\t\t//\t\t\t\t\t\t} else {\n\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (this.options.scrollY && !this.moved) {\n\t\t\t\t\tisReturn = true;\n\t\t\t\t}\n\t\t\t} else if (detail.direction === 'up' || detail.direction === 'down') {\n\t\t\t\tif (this.options.scrollY) {\n\t\t\t\t\tisPreventDefault = true;\n\t\t\t\t\t//\t\t\t\t\tif (!this.moved) { //识别角度,竖向滚动似乎没必要进行小角度验证\n\t\t\t\t\t//\t\t\t\t\t\tif (direction !== 'up' && direction !== 'down') {\n\t\t\t\t\t//\t\t\t\t\t\t\tisReturn = true;\n\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t\tif (!this.moved) {\n\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.options.scrollX && !this.moved) {\n\t\t\t\t\tisReturn = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisReturn = true;\n\t\t\t}\n\t\t\tif (this.moved || isPreventDefault) {\n\t\t\t\te.stopPropagation(); //阻止冒泡(scroll类嵌套)\n\t\t\t\tdetail.gesture && detail.gesture.preventDefault();\n\t\t\t}\n\t\t\tif (isReturn) { //禁止非法方向滚动\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.moved) {\n\t\t\t\t$.trigger(this.scroller, 'scrollstart', this);\n\t\t\t} else {\n\t\t\t\te.stopPropagation(); //move期间阻止冒泡(scroll嵌套)\n\t\t\t}\n\t\t\tvar deltaX = 0;\n\t\t\tvar deltaY = 0;\n\t\t\tif (!this.moved) { //start\n\t\t\t\tdeltaX = detail.deltaX;\n\t\t\t\tdeltaY = detail.deltaY;\n\t\t\t} else { //move\n\t\t\t\tdeltaX = detail.deltaX - $.gestures.session.prevTouch.deltaX;\n\t\t\t\tdeltaY = detail.deltaY - $.gestures.session.prevTouch.deltaY;\n\t\t\t}\n\t\t\tvar absDeltaX = Math.abs(detail.deltaX);\n\t\t\tvar absDeltaY = Math.abs(detail.deltaY);\n\t\t\tif (absDeltaX > absDeltaY + this.options.directionLockThreshold) {\n\t\t\t\tdeltaY = 0;\n\t\t\t} else if (absDeltaY >= absDeltaX + this.options.directionLockThreshold) {\n\t\t\t\tdeltaX = 0;\n\t\t\t}\n\n\t\t\tdeltaX = this.hasHorizontalScroll ? deltaX : 0;\n\t\t\tdeltaY = this.hasVerticalScroll ? deltaY : 0;\n\t\t\tvar newX = this.x + deltaX;\n\t\t\tvar newY = this.y + deltaY;\n\t\t\t// Slow down if outside of the boundaries\n\t\t\tif (newX > 0 || newX < this.maxScrollX) {\n\t\t\t\tnewX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n\t\t\t}\n\t\t\tif (newY > 0 || newY < this.maxScrollY) {\n\t\t\t\tnewY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n\t\t\t}\n\n\t\t\tif (!this.requestAnimationFrame) {\n\t\t\t\tthis._updateTranslate();\n\t\t\t}\n\t\t\tthis.direction = detail.deltaX > 0 ? 'right' : 'left';\n\t\t\tthis.moved = true;\n\t\t\tthis.x = newX;\n\t\t\tthis.y = newY;\n\t\t\t$.trigger(this.scroller, 'scroll', this);\n\t\t},\n\t\t_flick: function(e) {\n\t\t\t//\t\t\tif (!this.moved || this.needReset) {\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tif (!this.moved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t\tvar detail = e.detail;\n\t\t\tthis._clearRequestAnimationFrame();\n\t\t\tif (e.type === 'dragend' && detail.flick) { //dragend\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar newX = Math.round(this.x);\n\t\t\tvar newY = Math.round(this.y);\n\n\t\t\tthis.isInTransition = false;\n\t\t\t// reset if we are outside of the boundaries\n\t\t\tif (this.resetPosition(this.options.bounceTime)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.scrollTo(newX, newY); // ensures that the last position is rounded\n\n\t\t\tif (e.type === 'dragend') { //dragend\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar time = 0;\n\t\t\tvar easing = '';\n\t\t\t// start momentum animation if needed\n\t\t\tif (this.options.momentum && detail.flickTime < 300) {\n\t\t\t\tmomentumX = this.hasHorizontalScroll ? this._momentum(this.x, detail.flickDistanceX, detail.flickTime, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : {\n\t\t\t\t\tdestination: newX,\n\t\t\t\t\tduration: 0\n\t\t\t\t};\n\t\t\t\tmomentumY = this.hasVerticalScroll ? this._momentum(this.y, detail.flickDistanceY, detail.flickTime, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : {\n\t\t\t\t\tdestination: newY,\n\t\t\t\t\tduration: 0\n\t\t\t\t};\n\t\t\t\tnewX = momentumX.destination;\n\t\t\t\tnewY = momentumY.destination;\n\t\t\t\ttime = Math.max(momentumX.duration, momentumY.duration);\n\t\t\t\tthis.isInTransition = true;\n\t\t\t}\n\n\t\t\tif (newX != this.x || newY != this.y) {\n\t\t\t\tif (newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY) {\n\t\t\t\t\teasing = ease.quadratic;\n\t\t\t\t}\n\t\t\t\tthis.scrollTo(newX, newY, time, easing);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t//\t\t\te.stopPropagation();\n\t\t},\n\t\t_end: function(e) {\n\t\t\tthis.needReset = false;\n\t\t\tif ((!this.moved && this.needReset) || e.type === $.EVENT_CANCEL) {\n\t\t\t\tthis.resetPosition();\n\t\t\t}\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target != this.scroller || !this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._transitionTime();\n\t\t\tif (!this.resetPosition(this.options.bounceTime)) {\n\t\t\t\tthis.isInTransition = false;\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t_scrollend: function(e) {\n\t\t\tif ((this.y === 0 && this.maxScrollY === 0) || (Math.abs(this.y) > 0 && this.y <= this.maxScrollY)) {\n\t\t\t\t$.trigger(this.scroller, 'scrollbottom', this);\n\t\t\t}\n\t\t},\n\t\t_resize: function() {\n\t\t\tvar that = this;\n\t\t\tclearTimeout(that.resizeTimeout);\n\t\t\tthat.resizeTimeout = setTimeout(function() {\n\t\t\t\tthat.refresh();\n\t\t\t}, that.options.resizePolling);\n\t\t},\n\t\t_transitionTime: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tthis.scrollerStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\t}\n\t\t\tif (this.options.fixedBadAndorid && !time && $.os.isBadAndroid) {\n\t\t\t\tthis.scrollerStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].transitionTime(time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (time) { //自定义timer，保证webkitTransitionEnd始终触发\n\t\t\t\tthis.transitionTimer && this.transitionTimer.cancel();\n\t\t\t\tthis.transitionTimer = $.later(function() {\n\t\t\t\t\t$.trigger(this.scroller, 'webkitTransitionEnd');\n\t\t\t\t}, time + 100, this);\n\t\t\t}\n\t\t},\n\t\t_transitionTimingFunction: function(easing) {\n\t\t\tthis.scrollerStyle['webkitTransitionTimingFunction'] = easing;\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = easing;\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].transitionTimingFunction(easing);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_translate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t},\n\t\t_clearRequestAnimationFrame: function() {\n\t\t\tif (this.requestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(this.requestAnimationFrame);\n\t\t\t\tthis.requestAnimationFrame = null;\n\t\t\t}\n\t\t},\n\t\t_updateTranslate: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.x !== self.lastX || self.y !== self.lastY) {\n\t\t\t\tself.setTranslate(self.x, self.y);\n\t\t\t}\n\t\t\tself.requestAnimationFrame = requestAnimationFrame(function() {\n\t\t\t\tself._updateTranslate();\n\t\t\t});\n\t\t},\n\t\t_createScrollBar: function(clazz) {\n\t\t\tvar scrollbar = document.createElement('div');\n\t\t\tvar indicator = document.createElement('div');\n\t\t\tscrollbar.className = CLASS_SCROLLBAR + ' ' + clazz;\n\t\t\tindicator.className = CLASS_INDICATOR;\n\t\t\tscrollbar.appendChild(indicator);\n\t\t\tif (clazz === CLASS_SCROLLBAR_VERTICAL) {\n\t\t\t\tthis.scrollbarY = scrollbar;\n\t\t\t\tthis.scrollbarIndicatorY = indicator;\n\t\t\t} else if (clazz === CLASS_SCROLLBAR_HORIZONTAL) {\n\t\t\t\tthis.scrollbarX = scrollbar;\n\t\t\t\tthis.scrollbarIndicatorX = indicator;\n\t\t\t}\n\t\t\tthis.wrapper.appendChild(scrollbar);\n\t\t\treturn scrollbar;\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t_reLayout: function() {\n\t\t\tif (!this.hasHorizontalScroll) {\n\t\t\t\tthis.maxScrollX = 0;\n\t\t\t\tthis.scrollerWidth = this.wrapperWidth;\n\t\t\t}\n\n\t\t\tif (!this.hasVerticalScroll) {\n\t\t\t\tthis.maxScrollY = 0;\n\t\t\t\tthis.scrollerHeight = this.wrapperHeight;\n\t\t\t}\n\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.refresh();\n\t\t\t});\n\n\t\t\t//以防slider类嵌套使用\n\t\t\tif (this.options.snap && typeof this.options.snap === 'string') {\n\t\t\t\tvar items = this.scroller.querySelectorAll(this.options.snap);\n\t\t\t\tthis.itemLength = 0;\n\t\t\t\tthis.snaps = [];\n\t\t\t\tfor (var i = 0, len = items.length; i < len; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item.parentNode === this.scroller) {\n\t\t\t\t\t\tthis.itemLength++;\n\t\t\t\t\t\tthis.snaps.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._initSnap(); //需要每次都_initSnap么。其实init的时候执行一次，后续resize的时候执行一次就行了吧.先这么做吧，如果影响性能，再调整\n\t\t\t}\n\t\t},\n\t\t_momentum: function(current, distance, time, lowerMargin, wrapperSize, deceleration) {\n\t\t\tvar speed = parseFloat(Math.abs(distance) / time),\n\t\t\t\tdestination,\n\t\t\t\tduration;\n\n\t\t\tdeceleration = deceleration === undefined ? 0.0006 : deceleration;\n\t\t\tdestination = current + (speed * speed) / (2 * deceleration) * (distance < 0 ? -1 : 1);\n\t\t\tduration = speed / deceleration;\n\t\t\tif (destination < lowerMargin) {\n\t\t\t\tdestination = wrapperSize ? lowerMargin - (wrapperSize / 2.5 * (speed / 8)) : lowerMargin;\n\t\t\t\tdistance = Math.abs(destination - current);\n\t\t\t\tduration = distance / speed;\n\t\t\t} else if (destination > 0) {\n\t\t\t\tdestination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0;\n\t\t\t\tdistance = Math.abs(current) + destination;\n\t\t\t\tduration = distance / speed;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdestination: Math.round(destination),\n\t\t\t\tduration: duration\n\t\t\t};\n\t\t},\n\t\t_getTranslateStr: function(x, y) {\n\t\t\tif (this.options.hardwareAccelerated) {\n\t\t\t\treturn 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ;\n\t\t\t}\n\t\t\treturn 'translate(' + x + 'px,' + y + 'px) ';\n\t\t},\n\t\t//API\n\t\tsetStopped: function(stopped) {\n\t\t\t// this.stopped = !!stopped;\n\n\t\t\t// fixed ios双webview模式下拉刷新\n\t\t\tif(stopped) {\n\t\t\t\tthis.disablePullupToRefresh();\n\t\t\t\tthis.disablePulldownToRefresh();\n\t\t\t} else {\n\t\t\t\tthis.enablePullupToRefresh();\n\t\t\t\tthis.enablePulldownToRefresh();\n\t\t\t}\n\t\t},\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.scrollerStyle['webkitTransform'] = this._getTranslateStr(x, y);\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tvar parallaxY = y * this.options.parallaxRatio;\n\t\t\t\tvar scale = 1 + parallaxY / ((this.parallaxHeight - parallaxY) / 2);\n\t\t\t\tif (scale > 1) {\n\t\t\t\t\tthis.parallaxImgStyle['opacity'] = 1 - parallaxY / 100 * this.options.parallaxRatio;\n\t\t\t\t\tthis.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -parallaxY) + ' scale(' + scale + ',' + scale + ')';\n\t\t\t\t} else {\n\t\t\t\t\tthis.parallaxImgStyle['opacity'] = 1;\n\t\t\t\t\tthis.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -1) + ' scale(1,1)';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].updatePosition();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.lastX = this.x;\n\t\t\tthis.lastY = this.y;\n\t\t\t$.trigger(this.scroller, 'scroll', this);\n\t\t},\n\t\treLayout: function() {\n\t\t\tthis.wrapper.offsetHeight;\n\n\t\t\tvar paddingLeft = parseFloat($.getStyles(this.wrapper, 'padding-left')) || 0;\n\t\t\tvar paddingRight = parseFloat($.getStyles(this.wrapper, 'padding-right')) || 0;\n\t\t\tvar paddingTop = parseFloat($.getStyles(this.wrapper, 'padding-top')) || 0;\n\t\t\tvar paddingBottom = parseFloat($.getStyles(this.wrapper, 'padding-bottom')) || 0;\n\n\t\t\tvar clientWidth = this.wrapper.clientWidth;\n\t\t\tvar clientHeight = this.wrapper.clientHeight;\n\n\t\t\tthis.scrollerWidth = this.scroller.offsetWidth;\n\t\t\tthis.scrollerHeight = this.scroller.offsetHeight;\n\n\t\t\tthis.wrapperWidth = clientWidth - paddingLeft - paddingRight;\n\t\t\tthis.wrapperHeight = clientHeight - paddingTop - paddingBottom;\n\n\t\t\tthis.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);\n\t\t\tthis.maxScrollY = Math.min(this.wrapperHeight - this.scrollerHeight, 0);\n\t\t\tthis.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;\n\t\t\tthis.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;\n\t\t\tthis._reLayout();\n\t\t},\n\t\tresetPosition: function(time) {\n\t\t\tvar x = this.x,\n\t\t\t\ty = this.y;\n\n\t\t\ttime = time || 0;\n\t\t\tif (!this.hasHorizontalScroll || this.x > 0) {\n\t\t\t\tx = 0;\n\t\t\t} else if (this.x < this.maxScrollX) {\n\t\t\t\tx = this.maxScrollX;\n\t\t\t}\n\n\t\t\tif (!this.hasVerticalScroll || this.y > 0) {\n\t\t\t\ty = 0;\n\t\t\t} else if (this.y < this.maxScrollY) {\n\t\t\t\ty = this.maxScrollY;\n\t\t\t}\n\n\t\t\tif (x == this.x && y == this.y) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.scrollTo(x, y, time, this.options.scrollEasing);\n\n\t\t\treturn true;\n\t\t},\n\t\t_reInit: function() {\n\t\t\tvar groups = this.wrapper.querySelectorAll('.' + CLASS_SCROLL);\n\t\t\tfor (var i = 0, len = groups.length; i < len; i++) {\n\t\t\t\tif (groups[i].parentNode === this.wrapper) {\n\t\t\t\t\tthis.scroller = groups[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t},\n\t\trefresh: function() {\n\t\t\tthis._reInit();\n\t\t\tthis.reLayout();\n\t\t\t$.trigger(this.scroller, 'refresh', this);\n\t\t\tthis.resetPosition();\n\t\t},\n\t\tscrollTo: function(x, y, time, easing) {\n\t\t\tvar easing = easing || ease.circular;\n\t\t\t//\t\t\tthis.isInTransition = time > 0 && (this.lastX != x || this.lastY != y);\n\t\t\t//暂不严格判断x,y，否则会导致部分版本上不正常触发轮播\n\t\t\tthis.isInTransition = time > 0;\n\t\t\tif (this.isInTransition) {\n\t\t\t\tthis._clearRequestAnimationFrame();\n\t\t\t\tthis._transitionTimingFunction(easing.style);\n\t\t\t\tthis._transitionTime(time);\n\t\t\t\tthis.setTranslate(x, y);\n\t\t\t} else {\n\t\t\t\tthis.setTranslate(x, y);\n\t\t\t}\n\n\t\t},\n\t\tscrollToBottom: function(time, easing) {\n\t\t\ttime = time || this.options.scrollTime;\n\t\t\tthis.scrollTo(0, this.maxScrollY, time, easing);\n\t\t},\n\t\tgotoPage: function(index) {\n\t\t\tthis._gotoPage(index);\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._initEvent(true); //detach\n\t\t\tdelete $.data[this.wrapper.getAttribute('data-scroll')];\n\t\t\tthis.wrapper.setAttribute('data-scroll', '');\n\t\t}\n\t});\n\t//Indicator\n\tvar Indicator = function(scroller, options) {\n\t\tthis.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n\t\tthis.wrapperStyle = this.wrapper.style;\n\t\tthis.indicator = this.wrapper.children[0];\n\t\tthis.indicatorStyle = this.indicator.style;\n\t\tthis.scroller = scroller;\n\n\t\tthis.options = $.extend({\n\t\t\tlistenX: true,\n\t\t\tlistenY: true,\n\t\t\tfade: false,\n\t\t\tspeedRatioX: 0,\n\t\t\tspeedRatioY: 0\n\t\t}, options);\n\n\t\tthis.sizeRatioX = 1;\n\t\tthis.sizeRatioY = 1;\n\t\tthis.maxPosX = 0;\n\t\tthis.maxPosY = 0;\n\n\t\tif (this.options.fade) {\n\t\t\tthis.wrapperStyle['webkitTransform'] = this.scroller.translateZ;\n\t\t\tthis.wrapperStyle['webkitTransitionDuration'] = this.options.fixedBadAndorid && $.os.isBadAndroid ? '0.001s' : '0ms';\n\t\t\tthis.wrapperStyle.opacity = '0';\n\t\t}\n\t}\n\tIndicator.prototype = {\n\t\thandleEvent: function(e) {\n\n\t\t},\n\t\ttransitionTime: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tthis.indicatorStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\tif (this.scroller.options.fixedBadAndorid && !time && $.os.isBadAndroid) {\n\t\t\t\tthis.indicatorStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t}\n\t\t},\n\t\ttransitionTimingFunction: function(easing) {\n\t\t\tthis.indicatorStyle['webkitTransitionTimingFunction'] = easing;\n\t\t},\n\t\trefresh: function() {\n\t\t\tthis.transitionTime();\n\n\t\t\tif (this.options.listenX && !this.options.listenY) {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n\t\t\t} else if (this.options.listenY && !this.options.listenX) {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t\t} else {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t\t}\n\n\t\t\tthis.wrapper.offsetHeight; // force refresh\n\n\t\t\tif (this.options.listenX) {\n\t\t\t\tthis.wrapperWidth = this.wrapper.clientWidth;\n\t\t\t\tthis.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n\t\t\t\tthis.indicatorStyle.width = this.indicatorWidth + 'px';\n\n\t\t\t\tthis.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n\t\t\t\tthis.minBoundaryX = 0;\n\t\t\t\tthis.maxBoundaryX = this.maxPosX;\n\n\t\t\t\tthis.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));\n\t\t\t}\n\n\t\t\tif (this.options.listenY) {\n\t\t\t\tthis.wrapperHeight = this.wrapper.clientHeight;\n\t\t\t\tthis.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n\t\t\t\tthis.indicatorStyle.height = this.indicatorHeight + 'px';\n\n\t\t\t\tthis.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n\t\t\t\tthis.minBoundaryY = 0;\n\t\t\t\tthis.maxBoundaryY = this.maxPosY;\n\n\t\t\t\tthis.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));\n\t\t\t}\n\n\t\t\tthis.updatePosition();\n\t\t},\n\n\t\tupdatePosition: function() {\n\t\t\tvar x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n\t\t\t\ty = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n\t\t\tif (x < this.minBoundaryX) {\n\t\t\t\tthis.width = Math.max(this.indicatorWidth + x, 8);\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\tx = this.minBoundaryX;\n\t\t\t} else if (x > this.maxBoundaryX) {\n\t\t\t\tthis.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\tx = this.maxPosX + this.indicatorWidth - this.width;\n\t\t\t} else if (this.width != this.indicatorWidth) {\n\t\t\t\tthis.width = this.indicatorWidth;\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t}\n\n\t\t\tif (y < this.minBoundaryY) {\n\t\t\t\tthis.height = Math.max(this.indicatorHeight + y * 3, 8);\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\ty = this.minBoundaryY;\n\t\t\t} else if (y > this.maxBoundaryY) {\n\t\t\t\tthis.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\ty = this.maxPosY + this.indicatorHeight - this.height;\n\t\t\t} else if (this.height != this.indicatorHeight) {\n\t\t\t\tthis.height = this.indicatorHeight;\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t}\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\n\t\t\tthis.indicatorStyle['webkitTransform'] = this.scroller._getTranslateStr(x, y);\n\n\t\t},\n\t\tfade: function(val, hold) {\n\t\t\tif (hold && !this.visible) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(this.fadeTimeout);\n\t\t\tthis.fadeTimeout = null;\n\n\t\t\tvar time = val ? 250 : 500,\n\t\t\t\tdelay = val ? 0 : 300;\n\n\t\t\tval = val ? '1' : '0';\n\n\t\t\tthis.wrapperStyle['webkitTransitionDuration'] = time + 'ms';\n\n\t\t\tthis.fadeTimeout = setTimeout((function(val) {\n\t\t\t\tthis.wrapperStyle.opacity = val;\n\t\t\t\tthis.visible = +val;\n\t\t\t}).bind(this, val), delay);\n\t\t}\n\t};\n\n\t$.Scroll = Scroll;\n\n\t$.fn.scroll = function(options) {\n\t\tvar scrollApis = [];\n\t\tthis.each(function() {\n\t\t\tvar scrollApi = null;\n\t\t\tvar self = this;\n\t\t\tvar id = self.getAttribute('data-scroll');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\tvar _options = $.extend({}, options);\n\t\t\t\tif (self.classList.contains('mui-segmented-control')) {\n\t\t\t\t\t_options = $.extend(_options, {\n\t\t\t\t\t\tscrollY: false,\n\t\t\t\t\t\tscrollX: true,\n\t\t\t\t\t\tindicators: false,\n\t\t\t\t\t\tsnap: '.mui-control-item'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$.data[id] = scrollApi = new Scroll(self, _options);\n\t\t\t\tself.setAttribute('data-scroll', id);\n\t\t\t} else {\n\t\t\t\tscrollApi = $.data[id];\n\t\t\t}\n\t\t\tscrollApis.push(scrollApi);\n\t\t});\n\t\treturn scrollApis.length === 1 ? scrollApis[0] : scrollApis;\n\t};\n})(mui, window, document);\n(function($, window, document, undefined) {\n\n    var CLASS_VISIBILITY = 'mui-visibility';\n    var CLASS_HIDDEN = 'mui-hidden';\n\n    var PullRefresh = $.Scroll.extend($.extend({\n        handleEvent: function(e) {\n            this._super(e);\n            if (e.type === 'scrollbottom') {\n                if (e.target === this.scroller) {\n                    this._scrollbottom();\n                }\n            }\n        },\n        _scrollbottom: function() {\n            if (!this.pulldown && !this.loading) {\n                this.pulldown = false;\n                this._initPullupRefresh();\n                this.pullupLoading();\n            }\n        },\n        _start: function(e) {\n            //仅下拉刷新在start阻止默认事件\n            if (e.touches && e.touches.length && e.touches[0].clientX > 30) {\n                e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n            }\n            if (!this.loading) {\n                this.pulldown = this.pullPocket = this.pullCaption = this.pullLoading = false\n            }\n            this._super(e);\n        },\n        _drag: function(e) {\n            if (this.y >= 0 && this.disablePulldown && e.detail.direction === 'down') { //禁用下拉刷新\n                return;\n            }\n            this._super(e);\n            if (!this.pulldown && !this.loading && this.topPocket && e.detail.direction === 'down' && this.y >= 0) {\n                this._initPulldownRefresh();\n            }\n            if (this.pulldown) {\n                this._setCaption(this.y > this.options.down.height ? this.options.down.contentover : this.options.down.contentdown);\n            }\n        },\n\n        _reLayout: function() {\n            this.hasVerticalScroll = true;\n            this._super();\n        },\n        //API\n        resetPosition: function(time) {\n            if (this.pulldown && !this.disablePulldown) {\n                if (this.y >= this.options.down.height) {\n                    this.pulldownLoading(undefined, time || 0);\n                    return true;\n                } else {\n                    !this.loading && this.topPocket.classList.remove(CLASS_VISIBILITY);\n                }\n            }\n            return this._super(time);\n        },\n        pulldownLoading: function(y, time) {\n            typeof y === 'undefined' && (y = this.options.down.height); //默认高度\n            this.scrollTo(0, y, time, this.options.bounceEasing);\n            if (this.loading) {\n                return;\n            }\n            //\t\t\tif (!this.pulldown) {\n            this._initPulldownRefresh();\n            //\t\t\t}\n            this._setCaption(this.options.down.contentrefresh);\n            this.loading = true;\n            this.indicators.map(function(indicator) {\n                indicator.fade(0);\n            });\n            var callback = this.options.down.callback;\n            callback && callback.call(this);\n        },\n        endPulldownToRefresh: function() {\n            var self = this;\n            if (self.topPocket && self.loading && this.pulldown) {\n                self.scrollTo(0, 0, self.options.bounceTime, self.options.bounceEasing);\n                self.loading = false;\n                self._setCaption(self.options.down.contentdown, true);\n                setTimeout(function() {\n                    self.loading || self.topPocket.classList.remove(CLASS_VISIBILITY);\n                }, 350);\n            }\n        },\n        pullupLoading: function(callback, x, time) {\n            x = x || 0;\n            this.scrollTo(x, this.maxScrollY, time, this.options.bounceEasing);\n            if (this.loading) {\n                return;\n            }\n            this._initPullupRefresh();\n            this._setCaption(this.options.up.contentrefresh);\n            this.indicators.map(function(indicator) {\n                indicator.fade(0);\n            });\n            this.loading = true;\n            callback = callback || this.options.up.callback;\n            callback && callback.call(this);\n        },\n        endPullupToRefresh: function(finished) {\n            var self = this;\n            if (self.bottomPocket) { // && self.loading && !this.pulldown\n                self.loading = false;\n                if (finished) {\n                    this.finished = true;\n                    self._setCaption(self.options.up.contentnomore);\n                    //\t\t\t\t\tself.bottomPocket.classList.remove(CLASS_VISIBILITY);\n                    //\t\t\t\t\tself.bottomPocket.classList.add(CLASS_HIDDEN);\n                    self.wrapper.removeEventListener('scrollbottom', self);\n                } else {\n                    self._setCaption(self.options.up.contentdown);\n                    //\t\t\t\t\tsetTimeout(function() {\n                    self.loading || self.bottomPocket.classList.remove(CLASS_VISIBILITY);\n                    //\t\t\t\t\t}, 300);\n                }\n            }\n        },\n        disablePullupToRefresh: function() {\n            this._initPullupRefresh();\n            this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN;\n            this.wrapper.removeEventListener('scrollbottom', this);\n        },\n        disablePulldownToRefresh: function() {\n            this._initPulldownRefresh();\n            this.topPocket.className = 'mui-pull-top-pocket' + ' ' + CLASS_HIDDEN;\n            this.disablePulldown = true;\n        },\n        enablePulldownToRefresh: function() {\n            this._initPulldownRefresh();\n            this.topPocket.classList.remove(CLASS_HIDDEN);\n            this._setCaption(this.options.down.contentdown);\n            this.disablePulldown = false;\n        },\n        enablePullupToRefresh: function() {\n            this._initPullupRefresh();\n            this.bottomPocket.classList.remove(CLASS_HIDDEN);\n            this._setCaption(this.options.up.contentdown);\n            this.wrapper.addEventListener('scrollbottom', this);\n        },\n        refresh: function(isReset) {\n            if (isReset && this.finished) {\n                this.enablePullupToRefresh();\n                this.finished = false;\n            }\n            this._super();\n        },\n    }, $.PullRefresh));\n    $.fn.pullRefresh = function(options) {\n        if (this.length === 1) {\n            var self = this[0];\n            var pullRefreshApi = null;\n            var id = self.getAttribute('data-pullrefresh');\n            if (!id && typeof options === 'undefined') {\n                return false;\n            }\n            options = options || {};\n            if (!id) {\n                id = ++$.uuid;\n                $.data[id] = pullRefreshApi = new PullRefresh(self, options);\n                self.setAttribute('data-pullrefresh', id);\n            } else {\n                pullRefreshApi = $.data[id];\n            }\n            if (options.down && options.down.auto) { //如果设置了auto，则自动下拉一次\n                pullRefreshApi.pulldownLoading(options.down.autoY);\n            } else if (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n                pullRefreshApi.pullupLoading();\n            }\n            //暂不提供这种调用方式吧\t\t\t\n            //\t\t\tif (typeof options === 'string') {\n            //\t\t\t\tvar methodValue = pullRefreshApi[options].apply(pullRefreshApi, $.slice.call(arguments, 1));\n            //\t\t\t\tif (methodValue !== undefined) {\n            //\t\t\t\t\treturn methodValue;\n            //\t\t\t\t}\n            //\t\t\t}\n            return pullRefreshApi;\n        }\n    };\n})(mui, window, document);\n/**\n * snap 重构\n * @param {Object} $\n * @param {Object} window\n */\n(function($, window) {\n\tvar CLASS_SLIDER = 'mui-slider';\n\tvar CLASS_SLIDER_GROUP = 'mui-slider-group';\n\tvar CLASS_SLIDER_LOOP = 'mui-slider-loop';\n\tvar CLASS_SLIDER_INDICATOR = 'mui-slider-indicator';\n\tvar CLASS_ACTION_PREVIOUS = 'mui-action-previous';\n\tvar CLASS_ACTION_NEXT = 'mui-action-next';\n\tvar CLASS_SLIDER_ITEM = 'mui-slider-item';\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\tvar SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM;\n\tvar SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR;\n\tvar SELECTOR_SLIDER_PROGRESS_BAR = '.mui-slider-progress-bar';\n\n\tvar Slider = $.Slider = $.Scroll.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis._super(element, $.extend(true, {\n\t\t\t\tfingers: 1,\n\t\t\t\tinterval: 0, //设置为0，则不定时轮播\n\t\t\t\tscrollY: false,\n\t\t\t\tscrollX: true,\n\t\t\t\tindicators: false,\n\t\t\t\tscrollTime: 1000,\n\t\t\t\tstartX: false,\n\t\t\t\tslideTime: 0, //滑动动画时间\n\t\t\t\tsnap: SELECTOR_SLIDER_ITEM\n\t\t\t}, options));\n\t\t\tif (this.options.startX) {\n\t\t\t\t//\t\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._reInit();\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.scrollerStyle = this.scroller.style;\n\t\t\t\tthis.progressBar = this.wrapper.querySelector(SELECTOR_SLIDER_PROGRESS_BAR);\n\t\t\t\tif (this.progressBar) {\n\t\t\t\t\tthis.progressBarWidth = this.progressBar.offsetWidth;\n\t\t\t\t\tthis.progressBarStyle = this.progressBar.style;\n\t\t\t\t}\n\t\t\t\t//忘记这个代码是干什么的了？\n\t\t\t\t//\t\t\t\tthis.x = this._getScroll();\n\t\t\t\t//\t\t\t\tif (this.options.startX === false) {\n\t\t\t\t//\t\t\t\t\tthis.options.startX = this.x;\n\t\t\t\t//\t\t\t\t}\n\t\t\t\t//根据active修正startX\n\n\t\t\t\tthis._super();\n\t\t\t\tthis._initTimer();\n\t\t\t}\n\t\t},\n\t\t_triggerSlide: function() {\n\t\t\tvar self = this;\n\t\t\tself.isInTransition = false;\n\t\t\tvar page = self.currentPage;\n\t\t\tself.slideNumber = self._fixedSlideNumber();\n\t\t\tif (self.loop) {\n\t\t\t\tif (self.slideNumber === 0) {\n\t\t\t\t\tself.setTranslate(self.pages[1][0].x, 0);\n\t\t\t\t} else if (self.slideNumber === self.itemLength - 3) {\n\t\t\t\t\tself.setTranslate(self.pages[self.itemLength - 2][0].x, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self.lastSlideNumber != self.slideNumber) {\n\t\t\t\tself.lastSlideNumber = self.slideNumber;\n\t\t\t\tself.lastPage = self.currentPage;\n\t\t\t\t$.trigger(self.wrapper, 'slide', {\n\t\t\t\t\tslideNumber: self.slideNumber\n\t\t\t\t});\n\t\t\t}\n\t\t\tself._initTimer();\n\t\t},\n\t\t_handleSlide: function(e) {\n\t\t\tvar self = this;\n\t\t\tif (e.target !== self.wrapper) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tdetail.slideNumber = detail.slideNumber || 0;\n\t\t\tvar temps = self.scroller.querySelectorAll(SELECTOR_SLIDER_ITEM);\n\t\t\tvar items = [];\n\t\t\tfor (var i = 0, len = temps.length; i < len; i++) {\n\t\t\t\tvar item = temps[i];\n\t\t\t\tif (item.parentNode === self.scroller) {\n\t\t\t\t\titems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar _slideNumber = detail.slideNumber;\n\t\t\tif (self.loop) {\n\t\t\t\t_slideNumber += 1;\n\t\t\t}\n\t\t\tif (!self.wrapper.classList.contains('mui-segmented-control')) {\n\t\t\t\tfor (var i = 0, len = items.length; i < len; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item.parentNode === self.scroller) {\n\t\t\t\t\t\tif (i === _slideNumber) {\n\t\t\t\t\t\t\titem.classList.add(CLASS_ACTIVE);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.classList.remove(CLASS_ACTIVE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar indicatorWrap = self.wrapper.querySelector('.mui-slider-indicator');\n\t\t\tif (indicatorWrap) {\n\t\t\t\tif (indicatorWrap.getAttribute('data-scroll')) { //scroll\n\t\t\t\t\t$(indicatorWrap).scroll().gotoPage(detail.slideNumber);\n\t\t\t\t}\n\t\t\t\tvar indicators = indicatorWrap.querySelectorAll('.mui-indicator');\n\t\t\t\tif (indicators.length > 0) { //图片轮播\n\t\t\t\t\tfor (var i = 0, len = indicators.length; i < len; i++) {\n\t\t\t\t\t\tindicators[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar number = indicatorWrap.querySelector('.mui-number span');\n\t\t\t\t\tif (number) { //图文表格\n\t\t\t\t\t\tnumber.innerText = (detail.slideNumber + 1);\n\t\t\t\t\t} else { //segmented controls\n\t\t\t\t\t\tvar controlItems = indicatorWrap.querySelectorAll('.mui-control-item');\n\t\t\t\t\t\tfor (var i = 0, len = controlItems.length; i < len; i++) {\n\t\t\t\t\t\t\tcontrolItems[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t},\n\t\t_handleTabShow: function(e) {\n\t\t\tvar self = this;\n\t\t\tself.gotoItem((e.detail.tabNumber || 0), self.options.slideTime);\n\t\t},\n\t\t_handleIndicatorTap: function(event) {\n\t\t\tvar self = this;\n\t\t\tvar target = event.target;\n\t\t\tif (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) {\n\t\t\t\tself[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem']();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\t_initEvent: function(detach) {\n\t\t\tvar self = this;\n\t\t\tself._super(detach);\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\tself.wrapper[action]('slide', this);\n\t\t\tself.wrapper[action]($.eventName('shown', 'tab'), this);\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tthis._super(e);\n\t\t\tswitch (e.type) {\n\t\t\t\tcase 'slide':\n\t\t\t\t\tthis._handleSlide(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.eventName('shown', 'tab'):\n\t\t\t\t\tif (~this.snaps.indexOf(e.target)) { //避免嵌套监听错误的tab show\n\t\t\t\t\t\tthis._handleTabShow(e);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t_scrollend: function(e) {\n\t\t\tthis._super(e);\n\t\t\tthis._triggerSlide(e);\n\t\t},\n\t\t_drag: function(e) {\n\t\t\tthis._super(e);\n\t\t\tvar direction = e.detail.direction;\n\t\t\tif (direction === 'left' || direction === 'right') {\n\t\t\t\t//拖拽期间取消定时\n\t\t\t\tvar slidershowTimer = this.wrapper.getAttribute('data-slidershowTimer');\n\t\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\t_initTimer: function() {\n\t\t\tvar self = this;\n\t\t\tvar slider = self.wrapper;\n\t\t\tvar interval = self.options.interval;\n\t\t\tvar slidershowTimer = slider.getAttribute('data-slidershowTimer');\n\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\t\t\tif (interval) {\n\t\t\t\tslidershowTimer = window.setTimeout(function() {\n\t\t\t\t\tif (!slider) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t//仅slider显示状态进行自动轮播\n\t\t\t\t\tif (!!(slider.offsetWidth || slider.offsetHeight)) {\n\t\t\t\t\t\tself.nextItem(true);\n\t\t\t\t\t\t//下一个\n\t\t\t\t\t}\n\t\t\t\t\tself._initTimer();\n\t\t\t\t}, interval);\n\t\t\t\tslider.setAttribute('data-slidershowTimer', slidershowTimer);\n\t\t\t}\n\t\t},\n\n\t\t_fixedSlideNumber: function(page) {\n\t\t\tpage = page || this.currentPage;\n\t\t\tvar slideNumber = page.pageX;\n\t\t\tif (this.loop) {\n\t\t\t\tif (page.pageX === 0) {\n\t\t\t\t\tslideNumber = this.itemLength - 3;\n\t\t\t\t} else if (page.pageX === (this.itemLength - 1)) {\n\t\t\t\t\tslideNumber = 0;\n\t\t\t\t} else {\n\t\t\t\t\tslideNumber = page.pageX - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn slideNumber;\n\t\t},\n\t\t_reLayout: function() {\n\t\t\tthis.hasHorizontalScroll = true;\n\t\t\tthis.loop = this.scroller.classList.contains(CLASS_SLIDER_LOOP);\n\t\t\tthis._super();\n\t\t},\n\t\t_getScroll: function() {\n\t\t\tvar result = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));\n\t\t\treturn result ? result.x : 0;\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target !== this.scroller || !this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._transitionTime();\n\t\t\tthis.isInTransition = false;\n\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t},\n\t\t_flick: function(e) {\n\t\t\tif (!this.moved) { //无moved\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tthis._clearRequestAnimationFrame();\n\t\t\tthis.isInTransition = true;\n\t\t\t//\t\t\tif (direction === 'up' || direction === 'down') {\n\t\t\t//\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tif (e.type === 'flick') {\n\t\t\t\tif (detail.deltaTime < 200) { //flick，太容易触发，额外校验一下deltaTime\n\t\t\t\t\tthis.x = this._getPage((this.slideNumber + (direction === 'right' ? -1 : 1)), true).x;\n\t\t\t\t}\n\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t} else if (e.type === 'dragend' && !detail.flick) {\n\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t},\n\t\t_initSnap: function() {\n\t\t\tthis.scrollerWidth = this.itemLength * this.scrollerWidth;\n\t\t\tthis.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);\n\t\t\tthis._super();\n\t\t\tif (!this.currentPage.x) {\n\t\t\t\t//当slider处于隐藏状态时，导致snap计算是错误的，临时先这么判断一下，后续要考虑解决所有scroll在隐藏状态下初始化属性不正确的问题\n\t\t\t\tvar currentPage = this.pages[this.loop ? 1 : 0];\n\t\t\t\tcurrentPage = currentPage || this.pages[0];\n\t\t\t\tif (!currentPage) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.currentPage = currentPage[0];\n\t\t\t\tthis.slideNumber = 0;\n\t\t\t\tthis.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? 0 : this.lastSlideNumber;\n\t\t\t} else {\n\t\t\t\tthis.slideNumber = this._fixedSlideNumber();\n\t\t\t\tthis.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? this.slideNumber : this.lastSlideNumber;\n\t\t\t}\n\t\t\tthis.options.startX = this.currentPage.x || 0;\n\t\t},\n\t\t_getSnapX: function(offsetLeft) {\n\t\t\treturn Math.max(-offsetLeft, this.maxScrollX);\n\t\t},\n\t\t_getPage: function(slideNumber, isFlick) {\n\t\t\tif (this.loop) {\n\t\t\t\tif (slideNumber > (this.itemLength - (isFlick ? 2 : 3))) {\n\t\t\t\t\tslideNumber = 1;\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (slideNumber < (isFlick ? -1 : 0)) {\n\t\t\t\t\tslideNumber = this.itemLength - 2;\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else {\n\t\t\t\t\tslideNumber += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isFlick) {\n\t\t\t\t\tif (slideNumber > (this.itemLength - 1)) {\n\t\t\t\t\t\tslideNumber = 0;\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t} else if (slideNumber < 0) {\n\t\t\t\t\t\tslideNumber = this.itemLength - 1;\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tslideNumber = Math.min(Math.max(0, slideNumber), this.itemLength - 1);\n\t\t\t}\n\t\t\treturn this.pages[slideNumber][0];\n\t\t},\n\t\t_gotoItem: function(slideNumber, time) {\n\t\t\tthis.currentPage = this._getPage(slideNumber, true); //此处传true。可保证程序切换时，动画与人手操作一致(第一张，最后一张的切换动画)\n\t\t\tthis.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);\n\t\t\tif (time === 0) {\n\t\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t//API\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis._super(x, y);\n\t\t\tvar progressBar = this.progressBar;\n\t\t\tif (progressBar) {\n\t\t\t\tthis.progressBarStyle.webkitTransform = this._getTranslateStr((-x * (this.progressBarWidth / this.wrapperWidth)), 0);\n\t\t\t}\n\t\t},\n\t\tresetPosition: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tif (this.x > 0) {\n\t\t\t\tthis.x = 0;\n\t\t\t} else if (this.x < this.maxScrollX) {\n\t\t\t\tthis.x = this.maxScrollX;\n\t\t\t}\n\t\t\tthis.currentPage = this._nearestSnap(this.x);\n\t\t\tthis.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);\n\t\t\treturn true;\n\t\t},\n\t\tgotoItem: function(slideNumber, time) {\n\t\t\tthis._gotoItem(slideNumber, typeof time === 'undefined' ? this.options.scrollTime : time);\n\t\t},\n\t\tnextItem: function() {\n\t\t\tthis._gotoItem(this.slideNumber + 1, this.options.scrollTime);\n\t\t},\n\t\tprevItem: function() {\n\t\t\tthis._gotoItem(this.slideNumber - 1, this.options.scrollTime);\n\t\t},\n\t\tgetSlideNumber: function() {\n\t\t\treturn this.slideNumber || 0;\n\t\t},\n\t\t_reInit: function() {\n\t\t\tvar groups = this.wrapper.querySelectorAll('.' + CLASS_SLIDER_GROUP);\n\t\t\tfor (var i = 0, len = groups.length; i < len; i++) {\n\t\t\t\tif (groups[i].parentNode === this.wrapper) {\n\t\t\t\t\tthis.scroller = groups[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t\tif (this.progressBar) {\n\t\t\t\tthis.progressBarWidth = this.progressBar.offsetWidth;\n\t\t\t\tthis.progressBarStyle = this.progressBar.style;\n\t\t\t}\n\t\t},\n\t\trefresh: function(options) {\n\t\t\tif (options) {\n\t\t\t\t$.extend(this.options, options);\n\t\t\t\tthis._super();\n\t\t\t\tthis._initTimer();\n\t\t\t} else {\n\t\t\t\tthis._super();\n\t\t\t}\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._initEvent(true); //detach\n\t\t\tdelete $.data[this.wrapper.getAttribute('data-slider')];\n\t\t\tthis.wrapper.setAttribute('data-slider', '');\n\t\t}\n\t});\n\t$.fn.slider = function(options) {\n\t\tvar slider = null;\n\t\tthis.each(function() {\n\t\t\tvar sliderElement = this;\n\t\t\tif (!this.classList.contains(CLASS_SLIDER)) {\n\t\t\t\tsliderElement = this.querySelector('.' + CLASS_SLIDER);\n\t\t\t}\n\t\t\tif (sliderElement && sliderElement.querySelector(SELECTOR_SLIDER_ITEM)) {\n\t\t\t\tvar id = sliderElement.getAttribute('data-slider');\n\t\t\t\tif (!id) {\n\t\t\t\t\tid = ++$.uuid;\n\t\t\t\t\t$.data[id] = slider = new Slider(sliderElement, options);\n\t\t\t\t\tsliderElement.setAttribute('data-slider', id);\n\t\t\t\t} else {\n\t\t\t\t\tslider = $.data[id];\n\t\t\t\t\tif (slider && options) {\n\t\t\t\t\t\tslider.refresh(options);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn slider;\n\t};\n\t$.ready(function() {\n\t\t//\t\tsetTimeout(function() {\n\t\t$('.mui-slider').slider();\n\t\t$('.mui-scroll-wrapper.mui-slider-indicator.mui-segmented-control').scroll({\n\t\t\tscrollY: false,\n\t\t\tscrollX: true,\n\t\t\tindicators: false,\n\t\t\tsnap: '.mui-control-item'\n\t\t});\n\t\t//\t\t}, 500); //临时处理slider宽度计算不正确的问题(初步确认是scrollbar导致的)\n\n\t});\n})(mui, window);\n/**\n * pullRefresh 5+\n * @param {type} $\n * @returns {undefined}\n */\n(function($, document) {\n    if (!($.os.plus)) { //仅在5+android支持多webview的使用\n        return;\n    }\n    $.plusReady(function() {\n        if (window.__NWin_Enable__ === false) { //不支持多webview，则不用5+下拉刷新\n            return;\n        }\n        var CLASS_PLUS_PULLREFRESH = 'mui-plus-pullrefresh';\n        var CLASS_VISIBILITY = 'mui-visibility';\n        var CLASS_HIDDEN = 'mui-hidden';\n        var CLASS_BLOCK = 'mui-block';\n\n        var CLASS_PULL_CAPTION = 'mui-pull-caption';\n        var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down';\n        var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh';\n        var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore';\n\n        var PlusPullRefresh = $.Class.extend({\n            init: function(element, options) {\n                this.element = element;\n                this.options = options;\n                this.wrapper = this.scroller = element;\n                this._init();\n                this._initPulldownRefreshEvent();\n            },\n            _init: function() {\n                var self = this;\n                //document.addEventListener('plusscrollbottom', this);\n                window.addEventListener('dragup', self);\n                document.addEventListener(\"plusscrollbottom\", self);\n                self.scrollInterval = window.setInterval(function() {\n                    if (self.isScroll && !self.loading) {\n                        if (window.pageYOffset + window.innerHeight + 10 >= document.documentElement.scrollHeight) {\n                            self.isScroll = false; //放在这里是因为快速滚动的话，有可能检测时，还没到底，所以只要有滚动，没到底之前一直检测高度变化\n                            if (self.bottomPocket) {\n                                self.pullupLoading();\n                            }\n                        }\n                    }\n                }, 100);\n            },\n            _initPulldownRefreshEvent: function() {\n                var self = this;\n                $.plusReady(function() {\n                    if (self.options.down.style == \"circle\") {\n                        //单webview、原生转圈\n                        self.options.webview = plus.webview.currentWebview();\n                        self.options.webview.setPullToRefresh({\n                            support: true,\n                            color: self.options.down.color || '#2BD009',\n                            height: self.options.down.height || '50px',\n                            range: self.options.down.range || '100px',\n                            style: 'circle',\n                            offset: self.options.down.offset || '0px'\n                        }, function() {\n                            self.options.down.callback();\n                        });\n                    } else if (self.topPocket && self.options.webviewId) {\n                        var webview = plus.webview.getWebviewById(self.options.webviewId); //子窗口\n                        if (!webview) {\n                            return;\n                        }\n                        self.options.webview = webview;\n                        var downOptions = self.options.down;\n                        var height = downOptions.height;\n                        webview.addEventListener('close', function() {\n                            var attrWebviewId = self.options.webviewId && self.options.webviewId.replace(/\\//g, \"_\"); //替换所有\"/\" \n                            self.element.removeAttribute('data-pullrefresh-plus-' + attrWebviewId);\n                        });\n                        webview.addEventListener(\"dragBounce\", function(e) {\n                            if (!self.pulldown) {\n                                self._initPulldownRefresh();\n                            } else {\n                                self.pullPocket.classList.add(CLASS_BLOCK);\n                            }\n                            switch (e.status) {\n                                case \"beforeChangeOffset\": //下拉可刷新状态\n                                    self._setCaption(downOptions.contentdown);\n                                    break;\n                                case \"afterChangeOffset\": //松开可刷新状态\n                                    self._setCaption(downOptions.contentover);\n                                    break;\n                                case \"dragEndAfterChangeOffset\": //正在刷新状态\n                                    //执行下拉刷新所在webview的回调函数\n                                    webview.evalJS(\"window.mui&&mui.options.pullRefresh.down.callback()\");\n                                    self._setCaption(downOptions.contentrefresh);\n                                    break;\n                                default:\n                                    break;\n                            }\n                        }, false);\n\n                        webview.setBounce({\n                            position: {\n                                top: height * 2 + 'px'\n                            },\n                            changeoffset: {\n                                top: height + 'px'\n                            }\n                        });\n\n                    }\n                });\n            },\n            handleEvent: function(e) {\n                var self = this;\n                if (self.stopped) {\n                    return;\n                }\n                self.isScroll = false;\n                if (e.type === 'dragup' || e.type === 'plusscrollbottom') {\n                    self.isScroll = true;\n                    setTimeout(function() {\n                        self.isScroll = false;\n                    }, 1000);\n                }\n            }\n        }).extend($.extend({\n            setStopped: function(stopped) { //该方法是子页面调用的\n                this.stopped = !!stopped;\n                // TODO 此处需要设置当前webview的bounce为none,目前5+有BUG\n                if (this.stopped) {\n                    this.disablePullupToRefresh();\n                    this.disablePulldownToRefresh();\n                } else {\n                    this.enablePullupToRefresh();\n                    this.enablePulldownToRefresh();\n                }\n            },\n            beginPulldown: function() {\n                var self = this;\n                $.plusReady(function() {\n                    //这里延时的目的是为了保证下拉刷新组件初始化完成，后续应该做成有状态的\n                    setTimeout(function() {\n                        if (self.options.down.style == \"circle\") { //单webview下拉刷新\n                            plus.webview.currentWebview().beginPullToRefresh();\n                        } else { //双webview模式\n                            var webview = self.options.webview;\n                            if (webview) {\n                                webview.setBounce({\n                                    offset: {\n                                        top: self.options.down.height + \"px\"\n                                    }\n                                });\n                            }\n                        }\n                    }, 15);\n                }.bind(this));\n            },\n            pulldownLoading: function() { //该方法是子页面调用的，兼容老的历史API\n                this.beginPulldown();\n            },\n            _pulldownLoading: function() { //该方法是父页面调用的\n                var self = this;\n                $.plusReady(function() {\n                    var childWebview = plus.webview.getWebviewById(self.options.webviewId);\n                    childWebview && childWebview.setBounce({\n                        offset: {\n                            top: self.options.down.height + \"px\"\n                        }\n                    });\n                });\n            },\n            endPulldown: function() {\n                var _wv = plus.webview.currentWebview();\n                //双webview的下拉刷新，需要修改父窗口提示信息\n                if (_wv.parent() && this.options.down.style !== \"circle\") {\n                    _wv.parent().evalJS(\"mui&&mui(document.querySelector('.mui-content')).pullRefresh('\" + JSON.stringify({\n                        webviewId: _wv.id\n                    }) + \"')._endPulldownToRefresh()\");\n                } else {\n                    _wv.endPullToRefresh();\n                }\n            },\n            endPulldownToRefresh: function() { //该方法是子页面调用的，兼容老的历史API\n                this.endPulldown();\n            },\n            _endPulldownToRefresh: function() { //该方法是父页面调用的\n                var self = this;\n                if (self.topPocket && self.options.webview) {\n                    self.options.webview.endPullToRefresh(); //下拉刷新所在webview回弹\n                    self.loading = false;\n                    self._setCaption(self.options.down.contentdown, true);\n                    setTimeout(function() {\n                        self.loading || self.topPocket.classList.remove(CLASS_BLOCK);\n                    }, 350);\n                }\n            },\n            beginPullup: function(callback) { //开始上拉加载\n                var self = this;\n                if (self.isLoading) return;\n                self.isLoading = true;\n                if (self.pulldown !== false) {\n                    self._initPullupRefresh();\n                } else {\n                    this.pullPocket.classList.add(CLASS_BLOCK);\n                }\n                setTimeout(function() {\n                    self.pullLoading.classList.add(CLASS_VISIBILITY);\n                    self.pullLoading.classList.remove(CLASS_HIDDEN);\n                    self.pullCaption.innerHTML = ''; //修正5+里边第一次加载时，文字显示的bug(还会显示出来个“多”,猜测应该是渲染问题导致的)\n                    self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH;\n                    self.pullCaption.innerHTML = self.options.up.contentrefresh;\n                    callback = callback || self.options.up.callback;\n                    callback && callback.call(self);\n                }, 300);\n            },\n            pullupLoading: function(callback) { //兼容老的API\n                this.beginPullup(callback);\n            },\n            endPullup: function(finished) { //上拉加载结束\n                var self = this;\n                if (self.pullLoading) {\n                    self.pullLoading.classList.remove(CLASS_VISIBILITY);\n                    self.pullLoading.classList.add(CLASS_HIDDEN);\n                    self.isLoading = false;\n                    if (finished) {\n                        self.finished = true;\n                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;\n                        self.pullCaption.innerHTML = self.options.up.contentnomore;\n                        //取消5+的plusscrollbottom事件\n                        document.removeEventListener('plusscrollbottom', self);\n                        window.removeEventListener('dragup', self);\n                    } else { //初始化时隐藏，后续不再隐藏\n                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                        self.pullCaption.innerHTML = self.options.up.contentdown;\n                    }\n                }\n            },\n            endPullupToRefresh: function(finished) { //上拉加载结束，兼容老的API\n                this.endPullup(finished);\n            },\n            disablePulldownToRefresh: function() {\n                var webview = plus.webview.currentWebview();\n                if (this.options.down.style && this.options.down.style == 'circle') { // 单webview模式禁止原生下拉刷新\n                    this.options.webview.setPullToRefresh({\n                        support: false,\n                        style: 'circle'\n                    });\n                } else { // 双webview模式禁止下拉刷新\n                    webview.setStyle({\n                        bounce: 'none'\n                    });\n                    webview.setBounce({\n                        position: {\n                            top: 'none'\n                        }\n                    });\n                }\n            },\n            enablePulldownToRefresh: function() {\n                var self = this,\n                    webview = plus.webview.currentWebview(),\n                    height = this.options.down.height;\n                // 单webview模式禁止原生下拉刷新\n                if (this.options.down.style && this.options.down.style == 'circle') {\n                    webview.setPullToRefresh({\n                        support: true,\n                        height: height || '50px',\n                        range: self.options.down.range || '100px',\n                        style: 'circle',\n                        offset: self.options.down.offset || '0px'\n                    });\n                } else { // 重新初始化双webview模式下拉刷新\n                    webview.setStyle({\n                        bounce: 'vertical'\n                    });\n                    webview.setBounce({\n                        position: {\n                            top: height * 2 + 'px'\n                        },\n                        changeoffset: {\n                            top: height + 'px'\n                        }\n                    });\n                }\n            },\n            disablePullupToRefresh: function() {\n                this._initPullupRefresh();\n                this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN;\n                window.removeEventListener('dragup', this);\n            },\n            enablePullupToRefresh: function() {\n                this._initPullupRefresh();\n                this.bottomPocket.classList.remove(CLASS_HIDDEN);\n                this.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                this.pullCaption.innerHTML = this.options.up.contentdown;\n                document.addEventListener(\"plusscrollbottom\", this);\n                window.addEventListener('dragup', this);\n            },\n            scrollTo: function(x, y, time) {\n                $.scrollTo(y, time);\n            },\n            scrollToBottom: function(time) {\n                $.scrollTo(document.documentElement.scrollHeight, time);\n            },\n            refresh: function(isReset) {\n                if (isReset && this.finished) {\n                    this.enablePullupToRefresh();\n                    this.finished = false;\n                }\n            }\n        }, $.PullRefresh));\n\n        //override h5 pullRefresh\n        $.fn.pullRefresh_native = function(options) {\n            var self;\n            if (this.length === 0) {\n                self = document.createElement('div');\n                self.className = 'mui-content';\n                document.body.appendChild(self);\n            } else {\n                self = this[0];\n            }\n            var args = options;\n            //一个父需要支持多个子下拉刷新\n            options = options || {}\n            if (typeof options === 'string') {\n                options = $.parseJSON(options);\n            };\n            !options.webviewId && (options.webviewId = (plus.webview.currentWebview().id || plus.webview.currentWebview().getURL()));\n            var pullRefreshApi = null;\n            var attrWebviewId = options.webviewId && options.webviewId.replace(/\\//g, \"_\"); //替换所有\"/\"\n            var id = self.getAttribute('data-pullrefresh-plus-' + attrWebviewId);\n            if (!id && typeof args === 'undefined') {\n                return false;\n            }\n            if (!id) { //避免重复初始化5+ pullrefresh\n                id = ++$.uuid;\n                self.setAttribute('data-pullrefresh-plus-' + attrWebviewId, id);\n                document.body.classList.add(CLASS_PLUS_PULLREFRESH);\n                $.data[id] = pullRefreshApi = new PlusPullRefresh(self, options);\n            } else {\n                pullRefreshApi = $.data[id];\n            }\n            if (options.down && options.down.auto) { //如果设置了auto，则自动下拉一次\n                //pullRefreshApi._pulldownLoading(); //parent webview\n                pullRefreshApi.beginPulldown();\n            } else if (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n                pullRefreshApi.beginPullup();\n            }\n            return pullRefreshApi;\n        };\n    });\n\n})(mui, document);\n/**\n * off-canvas\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} action\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\tvar CLASS_OFF_CANVAS_LEFT = 'mui-off-canvas-left';\n\tvar CLASS_OFF_CANVAS_RIGHT = 'mui-off-canvas-right';\n\tvar CLASS_ACTION_BACKDROP = 'mui-off-canvas-backdrop';\n\tvar CLASS_OFF_CANVAS_WRAP = 'mui-off-canvas-wrap';\n\n\tvar CLASS_SLIDE_IN = 'mui-slide-in';\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\n\tvar CLASS_TRANSITIONING = 'mui-transitioning';\n\n\tvar SELECTOR_INNER_WRAP = '.mui-inner-wrap';\n\n\n\tvar OffCanvas = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.wrapper = this.element = element;\n\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\tthis.classList = this.wrapper.classList;\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.options = $.extend(true, {\n\t\t\t\t\tdragThresholdX: 10,\n\t\t\t\t\tscale: 0.8,\n\t\t\t\t\topacity: 0.1,\n\t\t\t\t\tpreventDefaultException: {\n\t\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/\n\t\t\t\t\t},\n\t\t\t\t}, options);\n\t\t\t\tdocument.body.classList.add('mui-fullscreen'); //fullscreen\n\t\t\t\tthis.refresh();\n\t\t\t\tthis.initEvent();\n\t\t\t}\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\trefresh: function(offCanvas) {\n\t\t\t//\t\t\toffCanvas && !offCanvas.classList.contains(CLASS_ACTIVE) && this.classList.remove(CLASS_ACTIVE);\n\t\t\tthis.slideIn = this.classList.contains(CLASS_SLIDE_IN);\n\t\t\tthis.scalable = this.classList.contains('mui-scalable') && !this.slideIn;\n\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\t//\t\t\t!offCanvas && this.scroller.classList.remove(CLASS_TRANSITIONING);\n\t\t\t//\t\t\t!offCanvas && this.scroller.setAttribute('style', '');\n\t\t\tthis.offCanvasLefts = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_LEFT);\n\t\t\tthis.offCanvasRights = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_RIGHT);\n\t\t\tif (offCanvas) {\n\t\t\t\tif (offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {\n\t\t\t\t\tthis.offCanvasLeft = offCanvas;\n\t\t\t\t} else if (offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {\n\t\t\t\t\tthis.offCanvasRight = offCanvas;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.offCanvasRight = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT);\n\t\t\t\tthis.offCanvasLeft = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT);\n\t\t\t}\n\t\t\tthis.offCanvasRightWidth = this.offCanvasLeftWidth = 0;\n\t\t\tthis.offCanvasLeftSlideIn = this.offCanvasRightSlideIn = false;\n\t\t\tif (this.offCanvasRight) {\n\t\t\t\tthis.offCanvasRightWidth = this.offCanvasRight.offsetWidth;\n\t\t\t\tthis.offCanvasRightSlideIn = this.slideIn && (this.offCanvasRight.parentNode === this.wrapper);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.classList.remove(CLASS_ACTIVE);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.setAttribute('style', '');\n\t\t\t}\n\t\t\tif (this.offCanvasLeft) {\n\t\t\t\tthis.offCanvasLeftWidth = this.offCanvasLeft.offsetWidth;\n\t\t\t\tthis.offCanvasLeftSlideIn = this.slideIn && (this.offCanvasLeft.parentNode === this.wrapper);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.classList.remove(CLASS_ACTIVE);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.setAttribute('style', '');\n\t\t\t}\n\t\t\tthis.backdrop = this.scroller.querySelector('.' + CLASS_ACTION_BACKDROP);\n\n\t\t\tthis.options.dragThresholdX = this.options.dragThresholdX || 10;\n\n\t\t\tthis.visible = false;\n\t\t\tthis.startX = null;\n\t\t\tthis.lastX = null;\n\t\t\tthis.offsetX = null;\n\t\t\tthis.lastTranslateX = null;\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\te.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd': //有个bug需要处理，需要考虑假设没有触发webkitTransitionEnd的情况\n\t\t\t\t\tif (e.target === this.scroller) {\n\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tvar detail = e.detail;\n\t\t\t\t\tif (!this.startX) {\n\t\t\t\t\t\tthis.startX = detail.center.x;\n\t\t\t\t\t\tthis.lastX = this.startX;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastX = detail.center.x;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.isDragging && Math.abs(this.lastX - this.startX) > this.options.dragThresholdX && (detail.direction === 'left' || (detail.direction === 'right'))) {\n\t\t\t\t\t\tif (this.slideIn) {\n\t\t\t\t\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\t\t\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\tif (this.offCanvasRight && this.offCanvasRight.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (detail.direction === 'left' && this.offCanvasRight) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t} else if (detail.direction === 'right' && this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.scroller = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\tif (detail.direction === 'left') {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (detail.direction === 'right') {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.offCanvas && this.scroller) {\n\t\t\t\t\t\t\tthis.startX = this.lastX;\n\t\t\t\t\t\t\tthis.isDragging = true;\n\n\t\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\n\t\t\t\t\t\t\tthis.offCanvas.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\t\t\tthis.scroller.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\t\t\tthis.offsetX = this.getTranslateX();\n\t\t\t\t\t\t\tthis._initOffCanvasVisible();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.isDragging) {\n\t\t\t\t\t\tthis.updateTranslate(this.offsetX + (this.lastX - this.startX));\n\t\t\t\t\t\tdetail.gesture.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tif (this.isDragging) {\n\t\t\t\t\t\tvar detail = e.detail;\n\t\t\t\t\t\tvar direction = detail.direction;\n\t\t\t\t\t\tthis.isDragging = false;\n\t\t\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tvar ratio = 0;\n\t\t\t\t\t\tvar x = this.getTranslateX();\n\t\t\t\t\t\tif (!this.slideIn) {\n\t\t\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 0) {\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t\tthis._dispatchEvent(); //此处不触发webkitTransitionEnd,所以手动dispatch\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (direction === 'right' && ratio >= 0 && (ratio >= 0.5 || detail.swipe)) { //右滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio < 0 && (ratio > -0.5 || detail.swipe)) { //右滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && ratio < 0.5) { //右滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio < 0.5) { //右滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio <= 0 && (ratio <= -0.5 || detail.swipe)) { //左滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio > 0 && (ratio <= 0.5 || detail.swipe)) { //左滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio < 0 && ratio >= -0.5) { //左滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio > 0.5) { //左滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else { //默认关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 1 || ratio === -1) { //此处不触发webkitTransitionEnd,所以手动dispatch\n\t\t\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (direction === 'right' && ratio <= 0 && (ratio >= -0.5 || detail.swipe)) { //右滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && (ratio >= 0.5 || detail.swipe)) { //右滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio <= -0.5) { //右滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && ratio <= 0.5) { //右滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= 0 && (ratio <= 0.5 || detail.swipe)) { //左滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio < 0 && (ratio <= -0.5 || detail.swipe)) { //左滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= 0.5) { //左滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= -0.5 && ratio < 0) { //左滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 1 || ratio === -1 || ratio === 0) {\n\t\t\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t_dispatchEvent: function() {\n\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t$.trigger(this.wrapper, 'shown', this);\n\t\t\t} else {\n\t\t\t\t$.trigger(this.wrapper, 'hidden', this);\n\t\t\t}\n\t\t},\n\t\t_initOffCanvasVisible: function() {\n\t\t\tif (!this.visible) {\n\t\t\t\tthis.visible = true;\n\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\tthis.offCanvasLeft.style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\tthis.offCanvasRight.style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinitEvent: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.backdrop) {\n\t\t\t\tself.backdrop.addEventListener('tap', function(e) {\n\t\t\t\t\tself.close();\n\t\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.classList.contains('mui-draggable')) {\n\t\t\t\tthis.wrapper.addEventListener($.EVENT_START, this); //临时处理\n\t\t\t\tthis.wrapper.addEventListener('drag', this);\n\t\t\t\tthis.wrapper.addEventListener('dragend', this);\n\t\t\t}\n\t\t\tthis.wrapper.addEventListener('webkitTransitionEnd', this);\n\t\t},\n\t\topenPercentage: function(percentage) {\n\t\t\tvar p = percentage / 100;\n\t\t\tif (!this.slideIn) {\n\t\t\t\tif (this.offCanvasLeft && percentage >= 0) {\n\t\t\t\t\tthis.updateTranslate(this.offCanvasLeftWidth * p);\n\t\t\t\t\tthis.offCanvasLeft.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t} else if (this.offCanvasRight && percentage <= 0) {\n\t\t\t\t\tthis.updateTranslate(this.offCanvasRightWidth * p);\n\t\t\t\t\tthis.offCanvasRight.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tthis.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t} else {\n\t\t\t\tif (this.offCanvasLeft && percentage >= 0) {\n\t\t\t\t\tp = p === 0 ? -1 : 0;\n\t\t\t\t\tthis.updateTranslate(this.offCanvasLeftWidth * p);\n\t\t\t\t\tthis.offCanvasLeft.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t} else if (this.offCanvasRight && percentage <= 0) {\n\t\t\t\t\tp = p === 0 ? 1 : 0;\n\t\t\t\t\tthis.updateTranslate(this.offCanvasRightWidth * p);\n\t\t\t\t\tthis.offCanvasRight.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tthis.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t}\n\t\t},\n\t\tupdateTranslate: function(x) {\n\t\t\tif (x !== this.lastTranslateX) {\n\t\t\t\tif (!this.slideIn) {\n\t\t\t\t\tif ((!this.offCanvasLeft && x > 0) || (!this.offCanvasRight && x < 0)) {\n\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.leftShowing && x > this.offCanvasLeftWidth) {\n\t\t\t\t\t\tthis.setTranslateX(this.offCanvasLeftWidth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.rightShowing && x < -this.offCanvasRightWidth) {\n\t\t\t\t\t\tthis.setTranslateX(-this.offCanvasRightWidth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setTranslateX(x);\n\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\tthis.leftShowing = true;\n\t\t\t\t\t\tthis.rightShowing = false;\n\t\t\t\t\t\tif (x > 0) {\n\t\t\t\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t$.each(this.offCanvasLefts, function(index, offCanvas) {\n\t\t\t\t\t\t\t\t\tif (offCanvas === this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t\t\tthis.offCanvasLeft.style.zIndex = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = -1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}.bind(this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\t\t\t\tthis.offCanvasRight.style.zIndex = -1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.rightShowing = true;\n\t\t\t\t\t\tthis.leftShowing = false;\n\t\t\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\t\t\t$.each(this.offCanvasRights, function(index, offCanvas) {\n\t\t\t\t\t\t\t\tif (offCanvas === this.offCanvasRight) {\n\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = -1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}.bind(this));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\t\t\tthis.offCanvasLeft.style.zIndex = -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x > this.offCanvasRightWidth) {\n\t\t\t\t\t\t\tthis.setTranslateX(this.offCanvasRightWidth);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (x > 0) {\n\t\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x < -this.offCanvasLeftWidth) {\n\t\t\t\t\t\t\tthis.setTranslateX(-this.offCanvasLeftWidth);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.setTranslateX(x);\n\t\t\t\t}\n\t\t\t\tthis.lastTranslateX = x;\n\t\t\t}\n\t\t},\n\t\tsetTranslateX: $.animationFrame(function(x) {\n\t\t\tif (this.scroller) {\n\t\t\t\tif (this.scalable && this.offCanvas.parentNode === this.wrapper) {\n\t\t\t\t\tvar percent = Math.abs(x) / this.offCanvasWidth;\n\t\t\t\t\tvar zoomOutScale = 1 - (1 - this.options.scale) * percent;\n\t\t\t\t\tvar zoomInScale = this.options.scale + (1 - this.options.scale) * percent;\n\t\t\t\t\tvar zoomOutOpacity = 1 - (1 - this.options.opacity) * percent;\n\t\t\t\t\tvar zoomInOpacity = this.options.opacity + (1 - this.options.opacity) * percent;\n\t\t\t\t\tif (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransformOrigin = '-100%';\n\t\t\t\t\t\tthis.scroller.style.webkitTransformOrigin = 'left';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransformOrigin = '200%';\n\t\t\t\t\t\tthis.scroller.style.webkitTransformOrigin = 'right';\n\t\t\t\t\t}\n\t\t\t\t\tthis.offCanvas.style.opacity = zoomInOpacity;\n\t\t\t\t\tthis.offCanvas.style.webkitTransform = 'translate3d(0,0,0) scale(' + zoomInScale + ')';\n\t\t\t\t\tthis.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0) scale(' + zoomOutScale + ')';\n\t\t\t\t} else {\n\t\t\t\t\tif (this.slideIn) {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}),\n\t\tgetTranslateX: function() {\n\t\t\tif (this.offCanvas) {\n\t\t\t\tvar scroller = this.slideIn ? this.offCanvas : this.scroller;\n\t\t\t\tvar result = $.parseTranslateMatrix($.getStyles(scroller, 'webkitTransform'));\n\t\t\t\treturn (result && result.x) || 0;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\tisShown: function(direction) {\n\t\t\tvar shown = false;\n\t\t\tif (!this.slideIn) {\n\t\t\t\tvar x = this.getTranslateX();\n\t\t\t\tif (direction === 'right') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x < 0;\n\t\t\t\t} else if (direction === 'left') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x > 0;\n\t\t\t\t} else {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x !== 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (direction === 'left') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);\n\t\t\t\t} else if (direction === 'right') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE);\n\t\t\t\t} else {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && (this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn shown;\n\t\t},\n\t\tclose: function() {\n\t\t\tthis._initOffCanvasVisible();\n\t\t\tthis.offCanvas = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);\n\t\t\tthis.offCanvasWidth = this.offCanvas.offsetWidth;\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.offCanvas.offsetHeight;\n\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.openPercentage(0);\n\t\t\t}\n\t\t},\n\t\tshow: function(direction) {\n\t\t\tthis._initOffCanvasVisible();\n\t\t\tif (this.isShown(direction)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!direction) {\n\t\t\t\tdirection = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT) ? 'right' : 'left';\n\t\t\t}\n\t\t\tif (direction === 'right') {\n\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t} else {\n\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t}\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.offCanvas.offsetHeight;\n\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.openPercentage(direction === 'left' ? 100 : -100);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\ttoggle: function(directionOrOffCanvas) {\n\t\t\tvar direction = directionOrOffCanvas;\n\t\t\tif (directionOrOffCanvas && directionOrOffCanvas.classList) {\n\t\t\t\tdirection = directionOrOffCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT) ? 'left' : 'right';\n\t\t\t\tthis.refresh(directionOrOffCanvas);\n\t\t\t}\n\t\t\tif (!this.show(direction)) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t});\n\n\t//hash to offcanvas\n\tvar findOffCanvasContainer = function(target) {\n\t\tparentNode = target.parentNode;\n\t\tif (parentNode) {\n\t\t\tif (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\treturn parentNode;\n\t\t\t} else {\n\t\t\t\tparentNode = parentNode.parentNode;\n\t\t\t\tif (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\t\treturn parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\tvar offcanvas = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif (offcanvas) {\n\t\t\t\tvar container = findOffCanvasContainer(offcanvas);\n\t\t\t\tif (container) {\n\t\t\t\t\t$.targets._container = container;\n\t\t\t\t\treturn offcanvas;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 60,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\twindow.addEventListener('tap', function(e) {\n\t\tif (!$.targets.offcanvas) {\n\t\t\treturn;\n\t\t}\n\t\t//TODO 此处类型的代码后续考虑统一优化(target机制)，现在的实现费力不讨好\n\t\tvar target = e.target;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.tagName === 'A' && target.hash && target.hash === ('#' + $.targets.offcanvas.id)) {\n\t\t\t\te.detail && e.detail.gesture && e.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\t\t$($.targets._container).offCanvas().toggle($.targets.offcanvas);\n\t\t\t\t$.targets.offcanvas = $.targets._container = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\t$.fn.offCanvas = function(options) {\n\t\tvar offCanvasApis = [];\n\t\tthis.each(function() {\n\t\t\tvar offCanvasApi = null;\n\t\t\tvar self = this;\n\t\t\t//hack old version\n\t\t\tif (!self.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\tself = findOffCanvasContainer(self);\n\t\t\t}\n\t\t\tvar id = self.getAttribute('data-offCanvas');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = offCanvasApi = new OffCanvas(self, options);\n\t\t\t\tself.setAttribute('data-offCanvas', id);\n\t\t\t} else {\n\t\t\t\toffCanvasApi = $.data[id];\n\t\t\t}\n\t\t\tif (options === 'show' || options === 'close' || options === 'toggle') {\n\t\t\t\toffCanvasApi.toggle();\n\t\t\t}\n\t\t\toffCanvasApis.push(offCanvasApi);\n\t\t});\n\t\treturn offCanvasApis.length === 1 ? offCanvasApis[0] : offCanvasApis;\n\t};\n\t$.ready(function() {\n\t\t$('.mui-off-canvas-wrap').offCanvas();\n\t});\n})(mui, window, document, 'offcanvas');\n/**\n * actions\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar CLASS_ACTION = 'mui-action';\n\n\tvar handle = function(event, target) {\n\t\tvar className = target.className || '';\n\t\tif (typeof className !== 'string') { //svg className(SVGAnimatedString)\n\t\t\tclassName = '';\n\t\t}\n\t\tif (className && ~className.indexOf(CLASS_ACTION)) {\n\t\t\tif (target.classList.contains('mui-action-back')) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\treturn target;\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 50,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisContinue: true\n\t});\n\n})(mui, 'action');\n/**\n * Modals\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} name\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\tvar CLASS_MODAL = 'mui-modal';\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\tvar modal = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif (modal && modal.classList.contains(CLASS_MODAL)) {\n\t\t\t\treturn modal;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 50,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\twindow.addEventListener('tap', function(event) {\n\t\tif ($.targets.modal) {\n\t\t\tevent.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\t$.targets.modal.classList.toggle('mui-active');\n\t\t}\n\t});\n})(mui, window, document, 'modal');\n/**\n * Popovers\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} name\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\n\tvar CLASS_POPOVER = 'mui-popover';\n\tvar CLASS_POPOVER_ARROW = 'mui-popover-arrow';\n\tvar CLASS_ACTION_POPOVER = 'mui-popover-action';\n\tvar CLASS_BACKDROP = 'mui-backdrop';\n\tvar CLASS_BAR_POPOVER = 'mui-bar-popover';\n\tvar CLASS_BAR_BACKDROP = 'mui-bar-backdrop';\n\tvar CLASS_ACTION_BACKDROP = 'mui-backdrop-action';\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_BOTTOM = 'mui-bottom';\n\n\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\t$.targets._popover = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif ($.targets._popover && $.targets._popover.classList.contains(CLASS_POPOVER)) {\n\t\t\t\treturn target;\n\t\t\t} else {\n\t\t\t\t$.targets._popover = null;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 60,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\tvar onPopoverShown = function(e) {\n\t\tthis.removeEventListener('webkitTransitionEnd', onPopoverShown);\n\t\tthis.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\t$.trigger(this, 'shown', this);\n\t}\n\tvar onPopoverHidden = function(e) {\n\t\tsetStyle(this, 'none');\n\t\tthis.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\tthis.removeEventListener($.EVENT_MOVE, $.preventDefault);\n\t\t$.trigger(this, 'hidden', this);\n\t};\n\n\tvar backdrop = (function() {\n\t\tvar element = document.createElement('div');\n\t\telement.classList.add(CLASS_BACKDROP);\n\t\telement.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\telement.addEventListener('tap', function(e) {\n\t\t\tvar popover = $.targets._popover;\n\t\t\tif (popover) {\n\t\t\t\tpopover.addEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t\tpopover.classList.remove(CLASS_ACTIVE);\n\t\t\t\tremoveBackdrop(popover);\n\t\t\t}\n\t\t});\n\n\t\treturn element;\n\t}());\n\tvar removeBackdropTimer;\n\tvar removeBackdrop = function(popover) {\n\t\tbackdrop.setAttribute('style', 'opacity:0');\n\t\t$.targets.popover = $.targets._popover = null; //reset\n\t\tremoveBackdropTimer = $.later(function() {\n\t\t\tif (!popover.classList.contains(CLASS_ACTIVE) && backdrop.parentNode && backdrop.parentNode === document.body) {\n\t\t\t\tdocument.body.removeChild(backdrop);\n\t\t\t}\n\t\t}, 350);\n\t};\n\twindow.addEventListener('tap', function(e) {\n\t\tif (!$.targets.popover) {\n\t\t\treturn;\n\t\t}\n\t\tvar toggle = false;\n\t\tvar target = e.target;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target === $.targets.popover) {\n\t\t\t\ttoggle = true;\n\t\t\t}\n\t\t}\n\t\tif (toggle) {\n\t\t\te.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\ttogglePopover($.targets._popover, $.targets.popover);\n\t\t}\n\n\t});\n\n\tvar togglePopover = function(popover, anchor, state) {\n\t\tif ((state === 'show' && popover.classList.contains(CLASS_ACTIVE)) || (state === 'hide' && !popover.classList.contains(CLASS_ACTIVE))) {\n\t\t\treturn;\n\t\t}\n\t\tremoveBackdropTimer && removeBackdropTimer.cancel(); //取消remove的timer\n\t\t//remove一遍，以免来回快速切换，导致webkitTransitionEnd不触发，无法remove\n\t\tpopover.removeEventListener('webkitTransitionEnd', onPopoverShown);\n\t\tpopover.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\tbackdrop.classList.remove(CLASS_BAR_BACKDROP);\n\t\tbackdrop.classList.remove(CLASS_ACTION_BACKDROP);\n\t\tvar _popover = document.querySelector('.mui-popover.mui-active');\n\t\tif (_popover) {\n\t\t\t//\t\t\t_popover.setAttribute('style', '');\n\t\t\t_popover.addEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t_popover.classList.remove(CLASS_ACTIVE);\n\t\t\t//\t\t\t_popover.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t//同一个弹出则直接返回，解决同一个popover的toggle\n\t\t\tif (popover === _popover) {\n\t\t\t\tremoveBackdrop(_popover);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tvar isActionSheet = false;\n\t\tif (popover.classList.contains(CLASS_BAR_POPOVER) || popover.classList.contains(CLASS_ACTION_POPOVER)) { //navBar\n\t\t\tif (popover.classList.contains(CLASS_ACTION_POPOVER)) { //action sheet popover\n\t\t\t\tisActionSheet = true;\n\t\t\t\tbackdrop.classList.add(CLASS_ACTION_BACKDROP);\n\t\t\t} else { //bar popover\n\t\t\t\tbackdrop.classList.add(CLASS_BAR_BACKDROP);\n\t\t\t\t//\t\t\t\tif (anchor) {\n\t\t\t\t//\t\t\t\t\tif (anchor.parentNode) {\n\t\t\t\t//\t\t\t\t\t\tvar offsetWidth = anchor.offsetWidth;\n\t\t\t\t//\t\t\t\t\t\tvar offsetLeft = anchor.offsetLeft;\n\t\t\t\t//\t\t\t\t\t\tvar innerWidth = window.innerWidth;\n\t\t\t\t//\t\t\t\t\t\tpopover.style.left = (Math.min(Math.max(offsetLeft, defaultPadding), innerWidth - offsetWidth - defaultPadding)) + \"px\";\n\t\t\t\t//\t\t\t\t\t} else {\n\t\t\t\t//\t\t\t\t\t\t//TODO anchor is position:{left,top,bottom,right}\n\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsetStyle(popover, 'block'); //actionsheet transform\n\t\tpopover.offsetHeight;\n\t\tpopover.classList.add(CLASS_ACTIVE);\n\t\tbackdrop.setAttribute('style', '');\n\t\tdocument.body.appendChild(backdrop);\n\t\tcalPosition(popover, anchor, isActionSheet); //position\n\t\tbackdrop.classList.add(CLASS_ACTIVE);\n\t\tpopover.addEventListener('webkitTransitionEnd', onPopoverShown);\n\t};\n\tvar setStyle = function(popover, display, top, left) {\n\t\tvar style = popover.style;\n\t\tif (typeof display !== 'undefined')\n\t\t\tstyle.display = display;\n\t\tif (typeof top !== 'undefined')\n\t\t\tstyle.top = top + 'px';\n\t\tif (typeof left !== 'undefined')\n\t\t\tstyle.left = left + 'px';\n\t};\n\tvar calPosition = function(popover, anchor, isActionSheet) {\n\t\tif (!popover || !anchor) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isActionSheet) { //actionsheet\n\t\t\tsetStyle(popover, 'block')\n\t\t\treturn;\n\t\t}\n\n\t\tvar wWidth = window.innerWidth;\n\t\tvar wHeight = window.innerHeight;\n\n\t\tvar pWidth = popover.offsetWidth;\n\t\tvar pHeight = popover.offsetHeight;\n\n\t\tvar aWidth = anchor.offsetWidth;\n\t\tvar aHeight = anchor.offsetHeight;\n\t\tvar offset = $.offset(anchor);\n\n\t\tvar arrow = popover.querySelector('.' + CLASS_POPOVER_ARROW);\n\t\tif (!arrow) {\n\t\t\tarrow = document.createElement('div');\n\t\t\tarrow.className = CLASS_POPOVER_ARROW;\n\t\t\tpopover.appendChild(arrow);\n\t\t}\n\t\tvar arrowSize = arrow && arrow.offsetWidth / 2 || 0;\n\n\n\n\t\tvar pTop = 0;\n\t\tvar pLeft = 0;\n\t\tvar diff = 0;\n\t\tvar arrowLeft = 0;\n\t\tvar defaultPadding = popover.classList.contains(CLASS_ACTION_POPOVER) ? 0 : 5;\n\n\t\tvar position = 'top';\n\t\tif ((pHeight + arrowSize) < (offset.top - window.pageYOffset)) { //top\n\t\t\tpTop = offset.top - pHeight - arrowSize;\n\t\t} else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset) - aHeight)) { //bottom\n\t\t\tposition = 'bottom';\n\t\t\tpTop = offset.top + aHeight + arrowSize;\n\t\t} else { //middle\n\t\t\tposition = 'middle';\n\t\t\tpTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset, 0);\n\t\t\tpLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0);\n\t\t}\n\t\tif (position === 'top' || position === 'bottom') {\n\t\t\tpLeft = aWidth / 2 + offset.left - pWidth / 2;\n\t\t\tdiff = pLeft;\n\t\t\tif (pLeft < defaultPadding) pLeft = defaultPadding;\n\t\t\tif (pLeft + pWidth > wWidth) pLeft = wWidth - pWidth - defaultPadding;\n\n\t\t\tif (arrow) {\n\t\t\t\tif (position === 'top') {\n\t\t\t\t\tarrow.classList.add(CLASS_BOTTOM);\n\t\t\t\t} else {\n\t\t\t\t\tarrow.classList.remove(CLASS_BOTTOM);\n\t\t\t\t}\n\t\t\t\tdiff = diff - pLeft;\n\t\t\t\tarrowLeft = (pWidth / 2 - arrowSize / 2 + diff);\n\t\t\t\tarrowLeft = Math.max(Math.min(arrowLeft, pWidth - arrowSize * 2 - 6), 6);\n\t\t\t\tarrow.setAttribute('style', 'left:' + arrowLeft + 'px');\n\t\t\t}\n\t\t} else if (position === 'middle') {\n\t\t\tarrow.setAttribute('style', 'display:none');\n\t\t}\n\t\tsetStyle(popover, 'block', pTop, pLeft);\n\t};\n\n\t$.createMask = function(callback) {\n\t\tvar element = document.createElement('div');\n\t\telement.classList.add(CLASS_BACKDROP);\n\t\telement.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\telement.addEventListener('tap', function() {\n\t\t\tmask.close();\n\t\t});\n\t\tvar mask = [element];\n\t\tmask._show = false;\n\t\tmask.show = function() {\n\t\t\tmask._show = true;\n\t\t\telement.setAttribute('style', 'opacity:1');\n\t\t\tdocument.body.appendChild(element);\n\t\t\treturn mask;\n\t\t};\n\t\tmask._remove = function() {\n\t\t\tif (mask._show) {\n\t\t\t\tmask._show = false;\n\t\t\t\telement.setAttribute('style', 'opacity:0');\n\t\t\t\t$.later(function() {\n\t\t\t\t\tvar body = document.body;\n\t\t\t\t\telement.parentNode === body && body.removeChild(element);\n\t\t\t\t}, 350);\n\t\t\t}\n\t\t\treturn mask;\n\t\t};\n\t\tmask.close = function() {\n\t\t\tif (callback) {\n\t\t\t\tif (callback() !== false) {\n\t\t\t\t\tmask._remove();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmask._remove();\n\t\t\t}\n\t\t};\n\t\treturn mask;\n\t};\n\t$.fn.popover = function() {\n\t\tvar args = arguments;\n\t\tthis.each(function() {\n\t\t\t$.targets._popover = this;\n\t\t\tif (args[0] === 'show' || args[0] === 'hide' || args[0] === 'toggle') {\n\t\t\t\ttogglePopover(this, args[1], args[0]);\n\t\t\t}\n\t\t});\n\t};\n\n})(mui, window, document, 'popover');\n/**\n * segmented-controllers\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, document, name, undefined) {\n\n    var CLASS_CONTROL_ITEM = 'mui-control-item';\n    var CLASS_SEGMENTED_CONTROL = 'mui-segmented-control';\n    var CLASS_SEGMENTED_CONTROL_VERTICAL = 'mui-segmented-control-vertical';\n    var CLASS_CONTROL_CONTENT = 'mui-control-content';\n    var CLASS_TAB_BAR = 'mui-bar-tab';\n    var CLASS_TAB_ITEM = 'mui-tab-item';\n    var CLASS_SLIDER_ITEM = 'mui-slider-item';\n\n   var handle = function(event, target) {\n        if (target.classList && (target.classList.contains(CLASS_CONTROL_ITEM) || target.classList.contains(CLASS_TAB_ITEM))) {\n            if (target.parentNode && target.parentNode.classList && target.parentNode.classList.contains(CLASS_SEGMENTED_CONTROL_VERTICAL)) {\n                //vertical 如果preventDefault会导致无法滚动\n            } else {\n\n                    event.preventDefault();      \n                    // if(target.tagName == 'A') {\n                    //     // fixed 底部选项卡href 无法跳转 && stop hash change\n                    //     var curr_href = location.hostname + location.pathname,\n                    //         target_href = target.hostname + target.pathname;\n                   \n                    //     if (curr_href == target_href && target.hash !== \"\") {\n                    //         event.preventDefault();\n                    //         return target;\n                    //     }else{\n                    //             return false\n                    //     }\n                    // }\n            }\n            //          if (target.hash) {\n            return target;\n            //          }\n        }\n        return false;\n    };\n\n    $.registerTarget({\n        name: name,\n        index: 80,\n        handle: handle,\n        target: false\n    });\n\n    window.addEventListener('tap', function(e) {\n\n        var targetTab = $.targets.tab;\n        if (!targetTab) {\n            return;\n        }\n        var activeTab;\n        var activeBodies;\n        var targetBody;\n        var className = 'mui-active';\n        var classSelector = '.' + className;\n        var segmentedControl = targetTab.parentNode;\n\n        for (; segmentedControl && segmentedControl !== document; segmentedControl = segmentedControl.parentNode) {\n            if (segmentedControl.classList.contains(CLASS_SEGMENTED_CONTROL)) {\n                activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_CONTROL_ITEM);\n                break;\n            } else if (segmentedControl.classList.contains(CLASS_TAB_BAR)) {\n                activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_TAB_ITEM);\n            }\n        }\n\n        if (activeTab) {\n            activeTab.classList.remove(className);\n        }\n\n        var isLastActive = targetTab === activeTab;\n        if (targetTab) {\n            targetTab.classList.add(className);\n        }\n\n        if (!targetTab.hash) {\n            return;\n        }\n        targetBody = document.getElementById(targetTab.hash.replace('#', ''));\n\n        if (!targetBody) {\n            return;\n        }\n        if (!targetBody.classList.contains(CLASS_CONTROL_CONTENT)) { //tab bar popover\n            targetTab.classList[isLastActive ? 'remove' : 'add'](className);\n            return;\n        }\n        if (isLastActive) { //same\n            return;\n        }\n        var parentNode = targetBody.parentNode;\n        activeBodies = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT + classSelector);\n        for (var i = 0; i < activeBodies.length; i++) {\n            var activeBody = activeBodies[i];\n            activeBody.parentNode === parentNode && activeBody.classList.remove(className);\n        }\n\n        targetBody.classList.add(className);\n\n        var contents = [];\n        var _contents = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT);\n        for (var i = 0; i < _contents.length; i++) { //查找直属子节点\n            _contents[i].parentNode === parentNode && (contents.push(_contents[i]));\n        }\n        $.trigger(targetBody, $.eventName('shown', name), {\n            tabNumber: Array.prototype.indexOf.call(contents, targetBody)\n        });\n        e.detail && e.detail.gesture.preventDefault(); //fixed hashchange\n    });\n\n})(mui, window, document, 'tab');\n/**\n * Toggles switch\n * @param {type} $\n * @param {type} window\n * @param {type} name\n * @returns {undefined}\n */\n(function($, window, name) {\n\n\tvar CLASS_SWITCH = 'mui-switch';\n\tvar CLASS_SWITCH_HANDLE = 'mui-switch-handle';\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_DRAGGING = 'mui-dragging';\n\n\tvar CLASS_DISABLED = 'mui-disabled';\n\n\tvar SELECTOR_SWITCH_HANDLE = '.' + CLASS_SWITCH_HANDLE;\n\n\tvar handle = function(event, target) {\n\t\tif (target.classList && target.classList.contains(CLASS_SWITCH)) {\n\t\t\treturn target;\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 100,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\n\n\tvar Toggle = function(element) {\n\t\tthis.element = element;\n\t\tthis.classList = this.element.classList;\n\t\tthis.handle = this.element.querySelector(SELECTOR_SWITCH_HANDLE);\n\t\tthis.init();\n\t\tthis.initEvent();\n\t};\n\tToggle.prototype.init = function() {\n\t\tthis.toggleWidth = this.element.offsetWidth;\n\t\tthis.handleWidth = this.handle.offsetWidth;\n\t\tthis.handleX = this.toggleWidth - this.handleWidth - 3;\n\t};\n\tToggle.prototype.initEvent = function() {\n\t\tthis.element.addEventListener($.EVENT_START, this);\n\t\tthis.element.addEventListener('drag', this);\n\t\tthis.element.addEventListener('swiperight', this);\n\t\tthis.element.addEventListener($.EVENT_END, this);\n\t\tthis.element.addEventListener($.EVENT_CANCEL, this);\n\n\t};\n\tToggle.prototype.handleEvent = function(e) {\n\t\tif (this.classList.contains(CLASS_DISABLED)) {\n\t\t\treturn;\n\t\t}\n\t\tswitch (e.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tthis.start(e);\n\t\t\t\tbreak;\n\t\t\tcase 'drag':\n\t\t\t\tthis.drag(e);\n\t\t\t\tbreak;\n\t\t\tcase 'swiperight':\n\t\t\t\tthis.swiperight();\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tthis.end(e);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\tToggle.prototype.start = function(e) {\n\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';\n\t\tthis.classList.add(CLASS_DRAGGING);\n\t\tif (this.toggleWidth === 0 || this.handleWidth === 0) { //当switch处于隐藏状态时，width为0，需要重新初始化\n\t\t\tthis.init();\n\t\t}\n\t};\n\tToggle.prototype.drag = function(e) {\n\t\tvar detail = e.detail;\n\t\tif (!this.isDragging) {\n\t\t\tif (detail.direction === 'left' || detail.direction === 'right') {\n\t\t\t\tthis.isDragging = true;\n\t\t\t\tthis.lastChanged = undefined;\n\t\t\t\tthis.initialState = this.classList.contains(CLASS_ACTIVE);\n\t\t\t}\n\t\t}\n\t\tif (this.isDragging) {\n\t\t\tthis.setTranslateX(detail.deltaX);\n\t\t\te.stopPropagation();\n\t\t\tdetail.gesture.preventDefault();\n\t\t}\n\t};\n\tToggle.prototype.swiperight = function(e) {\n\t\tif (this.isDragging) {\n\t\t\te.stopPropagation();\n\t\t}\n\t};\n\tToggle.prototype.end = function(e) {\n\t\tthis.classList.remove(CLASS_DRAGGING);\n\t\tif (this.isDragging) {\n\t\t\tthis.isDragging = false;\n\t\t\te.stopPropagation();\n\t\t\t$.trigger(this.element, 'toggle', {\n\t\t\t\tisActive: this.classList.contains(CLASS_ACTIVE)\n\t\t\t});\n\t\t} else {\n\t\t\tthis.toggle();\n\t\t}\n\t};\n\tToggle.prototype.toggle = function(animate) {\n\t\tvar classList = this.classList;\n\t\tif (animate === false) {\n\t\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '0s';\n\t\t} else {\n\t\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';\n\t\t}\n\t\tif (classList.contains(CLASS_ACTIVE)) {\n\t\t\tclassList.remove(CLASS_ACTIVE);\n\t\t\tthis.handle.style.webkitTransform = 'translate(0,0)';\n\t\t} else {\n\t\t\tclassList.add(CLASS_ACTIVE);\n\t\t\tthis.handle.style.webkitTransform = 'translate(' + this.handleX + 'px,0)';\n\t\t}\n\t\t$.trigger(this.element, 'toggle', {\n\t\t\tisActive: this.classList.contains(CLASS_ACTIVE)\n\t\t});\n\t};\n\tToggle.prototype.setTranslateX = $.animationFrame(function(x) {\n\t\tif (!this.isDragging) {\n\t\t\treturn;\n\t\t}\n\t\tvar isChanged = false;\n\t\tif ((this.initialState && -x > (this.handleX / 2)) || (!this.initialState && x > (this.handleX / 2))) {\n\t\t\tisChanged = true;\n\t\t}\n\t\tif (this.lastChanged !== isChanged) {\n\t\t\tif (isChanged) {\n\t\t\t\tthis.handle.style.webkitTransform = 'translate(' + (this.initialState ? 0 : this.handleX) + 'px,0)';\n\t\t\t\tthis.classList[this.initialState ? 'remove' : 'add'](CLASS_ACTIVE);\n\t\t\t} else {\n\t\t\t\tthis.handle.style.webkitTransform = 'translate(' + (this.initialState ? this.handleX : 0) + 'px,0)';\n\t\t\t\tthis.classList[this.initialState ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t}\n\t\t\tthis.lastChanged = isChanged;\n\t\t}\n\n\t});\n\n\t$.fn['switch'] = function(options) {\n\t\tvar switchApis = [];\n\t\tthis.each(function() {\n\t\t\tvar switchApi = null;\n\t\t\tvar id = this.getAttribute('data-switch');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = new Toggle(this);\n\t\t\t\tthis.setAttribute('data-switch', id);\n\t\t\t} else {\n\t\t\t\tswitchApi = $.data[id];\n\t\t\t}\n\t\t\tswitchApis.push(switchApi);\n\t\t});\n\t\treturn switchApis.length > 1 ? switchApis : switchApis[0];\n\t};\n\t$.ready(function() {\n\t\t$('.' + CLASS_SWITCH)['switch']();\n\t});\n})(mui, window, 'toggle');\n/**\n * Tableviews\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_SELECTED = 'mui-selected';\n\tvar CLASS_GRID_VIEW = 'mui-grid-view';\n\tvar CLASS_RADIO_VIEW = 'mui-table-view-radio';\n\tvar CLASS_TABLE_VIEW_CELL = 'mui-table-view-cell';\n\tvar CLASS_COLLAPSE_CONTENT = 'mui-collapse-content';\n\tvar CLASS_DISABLED = 'mui-disabled';\n\tvar CLASS_TOGGLE = 'mui-switch';\n\tvar CLASS_BTN = 'mui-btn';\n\n\tvar CLASS_SLIDER_HANDLE = 'mui-slider-handle';\n\tvar CLASS_SLIDER_LEFT = 'mui-slider-left';\n\tvar CLASS_SLIDER_RIGHT = 'mui-slider-right';\n\tvar CLASS_TRANSITIONING = 'mui-transitioning';\n\n\n\tvar SELECTOR_SLIDER_HANDLE = '.' + CLASS_SLIDER_HANDLE;\n\tvar SELECTOR_SLIDER_LEFT = '.' + CLASS_SLIDER_LEFT;\n\tvar SELECTOR_SLIDER_RIGHT = '.' + CLASS_SLIDER_RIGHT;\n\tvar SELECTOR_SELECTED = '.' + CLASS_SELECTED;\n\tvar SELECTOR_BUTTON = '.' + CLASS_BTN;\n\tvar overFactor = 0.8;\n\tvar cell, a;\n\n\tvar isMoved = isOpened = openedActions = progress = false;\n\tvar sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;\n\tvar timer = translateX = lastTranslateX = sliderActionLeftWidth = sliderActionRightWidth = 0;\n\n\n\n\tvar toggleActive = function(isActive) {\n\t\tif (isActive) {\n\t\t\tif (a) {\n\t\t\t\ta.classList.add(CLASS_ACTIVE);\n\t\t\t} else if (cell) {\n\t\t\t\tcell.classList.add(CLASS_ACTIVE);\n\t\t\t}\n\t\t} else {\n\t\t\ttimer && timer.cancel();\n\t\t\tif (a) {\n\t\t\t\ta.classList.remove(CLASS_ACTIVE);\n\t\t\t} else if (cell) {\n\t\t\t\tcell.classList.remove(CLASS_ACTIVE);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar updateTranslate = function() {\n\t\tif (translateX !== lastTranslateX) {\n\t\t\tif (buttonsRight && buttonsRight.length > 0) {\n\t\t\t\tprogress = translateX / sliderActionRightWidth;\n\t\t\t\tif (translateX < -sliderActionRightWidth) {\n\t\t\t\t\ttranslateX = -sliderActionRightWidth - Math.pow(-translateX - sliderActionRightWidth, overFactor);\n\t\t\t\t}\n\t\t\t\tfor (var i = 0, len = buttonsRight.length; i < len; i++) {\n\t\t\t\t\tvar buttonRight = buttonsRight[i];\n\t\t\t\t\tif (typeof buttonRight._buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonRight._buttonOffset = buttonRight.offsetLeft;\n\t\t\t\t\t}\n\t\t\t\t\tbuttonOffset = buttonRight._buttonOffset;\n\t\t\t\t\tsetTranslate(buttonRight, (translateX - buttonOffset * (1 + Math.max(progress, -1))));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (buttonsLeft && buttonsLeft.length > 0) {\n\t\t\t\tprogress = translateX / sliderActionLeftWidth;\n\t\t\t\tif (translateX > sliderActionLeftWidth) {\n\t\t\t\t\ttranslateX = sliderActionLeftWidth + Math.pow(translateX - sliderActionLeftWidth, overFactor);\n\t\t\t\t}\n\t\t\t\tfor (var i = 0, len = buttonsLeft.length; i < len; i++) {\n\t\t\t\t\tvar buttonLeft = buttonsLeft[i];\n\t\t\t\t\tif (typeof buttonLeft._buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t\tbuttonOffset = buttonLeft._buttonOffset;\n\t\t\t\t\tif (buttonsLeft.length > 1) {\n\t\t\t\t\t\tbuttonLeft.style.zIndex = buttonsLeft.length - i;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonLeft, (translateX + buttonOffset * (1 - Math.min(progress, 1))));\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTranslate(sliderHandle, translateX);\n\t\t\tlastTranslateX = translateX;\n\t\t}\n\t\tsliderRequestAnimationFrame = requestAnimationFrame(function() {\n\t\t\tupdateTranslate();\n\t\t});\n\t};\n\tvar setTranslate = function(element, x) {\n\t\tif (element) {\n\t\t\telement.style.webkitTransform = 'translate(' + x + 'px,0)';\n\t\t}\n\t};\n\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tif (cell) {\n\t\t\ttoggleActive(false);\n\t\t}\n\t\tcell = a = false;\n\t\tisMoved = isOpened = openedActions = false;\n\t\tvar target = event.target;\n\t\tvar isDisabled = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList) {\n\t\t\t\tvar classList = target.classList;\n\t\t\t\tif ((target.tagName === 'INPUT' && target.type !== 'radio' && target.type !== 'checkbox') || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN) || classList.contains(CLASS_DISABLED)) {\n\t\t\t\t\tisDisabled = true;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_COLLAPSE_CONTENT)) { //collapse content\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_TABLE_VIEW_CELL)) {\n\t\t\t\t\tcell = target;\n\t\t\t\t\t//TODO swipe to delete close\n\t\t\t\t\tvar selected = cell.parentNode.querySelector(SELECTOR_SELECTED);\n\t\t\t\t\tif (!cell.parentNode.classList.contains(CLASS_RADIO_VIEW) && selected && selected !== cell) {\n\t\t\t\t\t\t$.swipeoutClose(selected);\n\t\t\t\t\t\tcell = isDisabled = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!cell.parentNode.classList.contains(CLASS_GRID_VIEW)) {\n\t\t\t\t\t\tvar link = cell.querySelector('a');\n\t\t\t\t\t\tif (link && link.parentNode === cell) { //li>a\n\t\t\t\t\t\t\ta = link;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar handle = cell.querySelector(SELECTOR_SLIDER_HANDLE);\n\t\t\t\t\tif (handle) {\n\t\t\t\t\t\ttoggleEvents(cell);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tif (!isDisabled) {\n\t\t\t\t\t\tif (handle) {\n\t\t\t\t\t\t\tif (timer) {\n\t\t\t\t\t\t\t\ttimer.cancel();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimer = $.later(function() {\n\t\t\t\t\t\t\t\ttoggleActive(true);\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoggleActive(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\twindow.addEventListener($.EVENT_MOVE, function(event) {\n\t\ttoggleActive(false);\n\t});\n\n\tvar handleEvent = {\n\t\thandleEvent: function(event) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis.drag(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis.dragend(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'flick':\n\t\t\t\t\tthis.flick(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swiperight':\n\t\t\t\t\tthis.swiperight(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swipeleft':\n\t\t\t\t\tthis.swipeleft(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tdrag: function(event) {\n\t\t\tif (!cell) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isMoved) { //init\n\t\t\t\tsliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;\n\t\t\t\tsliderHandle = cell.querySelector(SELECTOR_SLIDER_HANDLE);\n\t\t\t\tif (sliderHandle) {\n\t\t\t\t\tsliderActionLeft = cell.querySelector(SELECTOR_SLIDER_LEFT);\n\t\t\t\t\tsliderActionRight = cell.querySelector(SELECTOR_SLIDER_RIGHT);\n\t\t\t\t\tif (sliderActionLeft) {\n\t\t\t\t\t\tsliderActionLeftWidth = sliderActionLeft.offsetWidth;\n\t\t\t\t\t\tbuttonsLeft = sliderActionLeft.querySelectorAll(SELECTOR_BUTTON);\n\t\t\t\t\t}\n\t\t\t\t\tif (sliderActionRight) {\n\t\t\t\t\t\tsliderActionRightWidth = sliderActionRight.offsetWidth;\n\t\t\t\t\t\tbuttonsRight = sliderActionRight.querySelectorAll(SELECTOR_BUTTON);\n\t\t\t\t\t}\n\t\t\t\t\tcell.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tisOpened = cell.classList.contains(CLASS_SELECTED);\n\t\t\t\t\tif (isOpened) {\n\t\t\t\t\t\topenedActions = cell.querySelector(SELECTOR_SLIDER_LEFT + SELECTOR_SELECTED) ? 'left' : 'right';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tvar angle = detail.angle;\n\t\t\tif (direction === 'left' && (angle > 150 || angle < -150)) {\n\t\t\t\tif (buttonsRight || (buttonsLeft && isOpened)) { //存在右侧按钮或存在左侧按钮且是已打开状态\n\t\t\t\t\tisMoved = true;\n\t\t\t\t}\n\t\t\t} else if (direction === 'right' && (angle > -30 && angle < 30)) {\n\t\t\t\tif (buttonsLeft || (buttonsRight && isOpened)) { //存在左侧按钮或存在右侧按钮且是已打开状态\n\t\t\t\t\tisMoved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\tvar translate = event.detail.deltaX;\n\t\t\t\tif (isOpened) {\n\t\t\t\t\tif (openedActions === 'right') {\n\t\t\t\t\t\ttranslate = translate - sliderActionRightWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttranslate = translate + sliderActionLeftWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ((translate > 0 && !buttonsLeft) || (translate < 0 && !buttonsRight)) {\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttranslate = 0;\n\t\t\t\t}\n\t\t\t\tif (translate < 0) {\n\t\t\t\t\tsliderDirection = 'toLeft';\n\t\t\t\t} else if (translate > 0) {\n\t\t\t\t\tsliderDirection = 'toRight';\n\t\t\t\t} else {\n\t\t\t\t\tif (!sliderDirection) {\n\t\t\t\t\t\tsliderDirection = 'toLeft';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!sliderRequestAnimationFrame) {\n\t\t\t\t\tupdateTranslate();\n\t\t\t\t}\n\t\t\t\ttranslateX = translate;\n\t\t\t}\n\t\t},\n\t\tflick: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tswipeleft: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tswiperight: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tdragend: function(event) {\n\t\t\tif (!isMoved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.stopPropagation();\n\t\t\tif (sliderRequestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(sliderRequestAnimationFrame);\n\t\t\t\tsliderRequestAnimationFrame = null;\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tisMoved = false;\n\t\t\tvar action = 'close';\n\t\t\tvar actionsWidth = sliderDirection === 'toLeft' ? sliderActionRightWidth : sliderActionLeftWidth;\n\t\t\tvar isToggle = detail.swipe || (Math.abs(translateX) > actionsWidth / 2);\n\t\t\tif (isToggle) {\n\t\t\t\tif (!isOpened) {\n\t\t\t\t\taction = 'open';\n\t\t\t\t} else if (detail.direction === 'left' && openedActions === 'right') {\n\t\t\t\t\taction = 'open';\n\t\t\t\t} else if (detail.direction === 'right' && openedActions === 'left') {\n\t\t\t\t\taction = 'open';\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tcell.classList.add(CLASS_TRANSITIONING);\n\t\t\tvar buttons;\n\t\t\tif (action === 'open') {\n\t\t\t\tvar newTranslate = sliderDirection === 'toLeft' ? -actionsWidth : actionsWidth;\n\t\t\t\tsetTranslate(sliderHandle, newTranslate);\n\t\t\t\tbuttons = sliderDirection === 'toLeft' ? buttonsRight : buttonsLeft;\n\t\t\t\tif (typeof buttons !== 'undefined') {\n\t\t\t\t\tvar button = null;\n\t\t\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\t\t\t\t\tsetTranslate(button, newTranslate);\n\t\t\t\t\t}\n\t\t\t\t\tbutton.parentNode.classList.add(CLASS_SELECTED);\n\t\t\t\t\tcell.classList.add(CLASS_SELECTED);\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\t$.trigger(cell, sliderDirection === 'toLeft' ? 'slideleft' : 'slideright');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsetTranslate(sliderHandle, 0);\n\t\t\t\tsliderActionLeft && sliderActionLeft.classList.remove(CLASS_SELECTED);\n\t\t\t\tsliderActionRight && sliderActionRight.classList.remove(CLASS_SELECTED);\n\t\t\t\tcell.classList.remove(CLASS_SELECTED);\n\t\t\t}\n\t\t\tvar buttonOffset;\n\t\t\tif (buttonsLeft && buttonsLeft.length > 0 && buttonsLeft !== buttons) {\n\t\t\t\tfor (var i = 0, len = buttonsLeft.length; i < len; i++) {\n\t\t\t\t\tvar buttonLeft = buttonsLeft[i];\n\t\t\t\t\tbuttonOffset = buttonLeft._buttonOffset;\n\t\t\t\t\tif (typeof buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonLeft, buttonOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (buttonsRight && buttonsRight.length > 0 && buttonsRight !== buttons) {\n\t\t\t\tfor (var i = 0, len = buttonsRight.length; i < len; i++) {\n\t\t\t\t\tvar buttonRight = buttonsRight[i];\n\t\t\t\t\tbuttonOffset = buttonRight._buttonOffset;\n\t\t\t\t\tif (typeof buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonRight._buttonOffset = buttonRight.offsetLeft;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonRight, -buttonOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction toggleEvents(element, isRemove) {\n\t\tvar method = !!isRemove ? 'removeEventListener' : 'addEventListener';\n\t\telement[method]('drag', handleEvent);\n\t\telement[method]('dragend', handleEvent);\n\t\telement[method]('swiperight', handleEvent);\n\t\telement[method]('swipeleft', handleEvent);\n\t\telement[method]('flick', handleEvent);\n\t};\n\t/**\n\t * 打开滑动菜单\n\t * @param {Object} el\n\t * @param {Object} direction\n\t */\n\t$.swipeoutOpen = function(el, direction) {\n\t\tif (!el) return;\n\t\tvar classList = el.classList;\n\t\tif (classList.contains(CLASS_SELECTED)) return;\n\t\tif (!direction) {\n\t\t\tif (el.querySelector(SELECTOR_SLIDER_RIGHT)) {\n\t\t\t\tdirection = 'right';\n\t\t\t} else {\n\t\t\t\tdirection = 'left';\n\t\t\t}\n\t\t}\n\t\tvar swipeoutAction = el.querySelector($.classSelector(\".slider-\" + direction));\n\t\tif (!swipeoutAction) return;\n\t\tswipeoutAction.classList.add(CLASS_SELECTED);\n\t\tclassList.add(CLASS_SELECTED);\n\t\tclassList.remove(CLASS_TRANSITIONING);\n\t\tvar buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);\n\t\tvar swipeoutWidth = swipeoutAction.offsetWidth;\n\t\tvar translate = (direction === 'right') ? -swipeoutWidth : swipeoutWidth;\n\t\tvar length = buttons.length;\n\t\tvar button;\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tbutton = buttons[i];\n\t\t\tif (direction === 'right') {\n\t\t\t\tsetTranslate(button, -button.offsetLeft);\n\t\t\t} else {\n\t\t\t\tsetTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));\n\t\t\t}\n\t\t}\n\t\tclassList.add(CLASS_TRANSITIONING);\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsetTranslate(buttons[i], translate);\n\t\t}\n\t\tsetTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), translate);\n\t};\n\t/**\n\t * 关闭滑动菜单\n\t * @param {Object} el\n\t */\n\t$.swipeoutClose = function(el) {\n\t\tif (!el) return;\n\t\tvar classList = el.classList;\n\t\tif (!classList.contains(CLASS_SELECTED)) return;\n\t\tvar direction = el.querySelector(SELECTOR_SLIDER_RIGHT + SELECTOR_SELECTED) ? 'right' : 'left';\n\t\tvar swipeoutAction = el.querySelector($.classSelector(\".slider-\" + direction));\n\t\tif (!swipeoutAction) return;\n\t\tswipeoutAction.classList.remove(CLASS_SELECTED);\n\t\tclassList.remove(CLASS_SELECTED);\n\t\tclassList.add(CLASS_TRANSITIONING);\n\t\tvar buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);\n\t\tvar swipeoutWidth = swipeoutAction.offsetWidth;\n\t\tvar length = buttons.length;\n\t\tvar button;\n\t\tsetTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), 0);\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tbutton = buttons[i];\n\t\t\tif (direction === 'right') {\n\t\t\t\tsetTranslate(button, (-button.offsetLeft));\n\t\t\t} else {\n\t\t\t\tsetTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));\n\t\t\t}\n\t\t}\n\t};\n\n\twindow.addEventListener($.EVENT_END, function(event) { //使用touchend来取消高亮，避免一次点击既不触发tap，doubletap，longtap的事件\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleActive(false);\n\t\tsliderHandle && toggleEvents(cell, true);\n\t});\n\twindow.addEventListener($.EVENT_CANCEL, function(event) { //使用touchcancel来取消高亮，避免一次点击既不触发tap，doubletap，longtap的事件\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleActive(false);\n\t\tsliderHandle && toggleEvents(cell, true);\n\t});\n\tvar radioOrCheckboxClick = function(event) {\n\t\tvar type = event.target && event.target.type || '';\n\t\tif (type === 'radio' || type === 'checkbox') {\n\t\t\treturn;\n\t\t}\n\t\tvar classList = cell.classList;\n\t\tif (classList.contains('mui-radio')) {\n\t\t\tvar input = cell.querySelector('input[type=radio]');\n\t\t\tif (input) {\n\t\t\t\t//\t\t\t\tinput.click();\n\t\t\t\tif (!input.disabled && !input.readOnly) {\n\t\t\t\t\tinput.checked = !input.checked;\n\t\t\t\t\t$.trigger(input, 'change');\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (classList.contains('mui-checkbox')) {\n\t\t\tvar input = cell.querySelector('input[type=checkbox]');\n\t\t\tif (input) {\n\t\t\t\t//\t\t\t\tinput.click();\n\t\t\t\tif (!input.disabled && !input.readOnly) {\n\t\t\t\t\tinput.checked = !input.checked;\n\t\t\t\t\t$.trigger(input, 'change');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t//fixed hashchange(android)\n\twindow.addEventListener($.EVENT_CLICK, function(e) {\n\t\tif (cell && cell.classList.contains('mui-collapse')) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\twindow.addEventListener('doubletap', function(event) {\n\t\tif (cell) {\n\t\t\tradioOrCheckboxClick(event);\n\t\t}\n\t});\n\tvar preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;\n\twindow.addEventListener('tap', function(event) {\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\tvar isExpand = false;\n\t\tvar classList = cell.classList;\n\t\tvar ul = cell.parentNode;\n\t\tif (ul && ul.classList.contains(CLASS_RADIO_VIEW)) {\n\t\t\tif (classList.contains(CLASS_SELECTED)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar selected = ul.querySelector('li' + SELECTOR_SELECTED);\n\t\t\tif (selected) {\n\t\t\t\tselected.classList.remove(CLASS_SELECTED);\n\t\t\t}\n\t\t\tclassList.add(CLASS_SELECTED);\n\t\t\t$.trigger(cell, 'selected', {\n\t\t\t\tel: cell\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (classList.contains('mui-collapse') && !cell.parentNode.classList.contains('mui-unfold')) {\n\t\t\tif (!preventDefaultException.test(event.target.tagName)) {\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t}\n\n\t\t\tif (!classList.contains(CLASS_ACTIVE)) { //展开时,需要收缩其他同类\n\t\t\t\tvar collapse = cell.parentNode.querySelector('.mui-collapse.mui-active');\n\t\t\t\tif (collapse) {\n\t\t\t\t\tcollapse.classList.remove(CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tisExpand = true;\n\t\t\t}\n\t\t\tclassList.toggle(CLASS_ACTIVE);\n\t\t\tif (isExpand) {\n\t\t\t\t//触发展开事件\n\t\t\t\t$.trigger(cell, 'expand');\n\n\t\t\t\t//scroll\n\t\t\t\t//暂不滚动\n\t\t\t\t// var offsetTop = $.offset(cell).top;\n\t\t\t\t// var scrollTop = document.body.scrollTop;\n\t\t\t\t// var height = window.innerHeight;\n\t\t\t\t// var offsetHeight = cell.offsetHeight;\n\t\t\t\t// var cellHeight = (offsetTop - scrollTop + offsetHeight);\n\t\t\t\t// if (offsetHeight > height) {\n\t\t\t\t// \t$.scrollTo(offsetTop, 300);\n\t\t\t\t// } else if (cellHeight > height) {\n\t\t\t\t// \t$.scrollTo(cellHeight - height + scrollTop, 300);\n\t\t\t\t// }\n\t\t\t}\n\t\t} else {\n\t\t\tradioOrCheckboxClick(event);\n\t\t}\n\t});\n})(mui, window, document);\n(function($, window) {\n\t/**\n\t * 警告消息框\n\t */\n\t$.alert = function(message, title, btnValue, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tif (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnValue = '确定';\n\t\t\t\t} else if (typeof btnValue === 'function') {\n\t\t\t\t\tcallback = btnValue;\n\t\t\t\t\tbtnValue = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.alert(message, callback, title, btnValue);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//TODO H5版本\n\t\t\twindow.alert(message);\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\t/**\n\t * 确认消息框\n\t */\n\t$.confirm = function(message, title, btnArray, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tif (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof btnArray === 'function') {\n\t\t\t\t\tcallback = btnArray;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.confirm(message, callback, title, btnArray);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//H5版本，0为确认，1为取消\n\t\t\tif (window.confirm(message)) {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 0\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\t/**\n\t * 输入对话框\n\t */\n\t$.prompt = function(text, defaultText, title, btnArray, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\n\t\t\t\tif (typeof defaultText === 'function') {\n\t\t\t\t\tcallback = defaultText;\n\t\t\t\t\tdefaultText = null;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof btnArray === 'function') {\n\t\t\t\t\tcallback = btnArray;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.prompt(text, callback, title, defaultText, btnArray);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//H5版本(确认index为0，取消index为1)\n\t\t\tvar result = window.prompt(text);\n\t\t\tif (result) {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tvalue: result\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 1,\n\t\t\t\t\tvalue: ''\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\tvar CLASS_ACTIVE = 'mui-active';\n\t/**\n\t * 自动消失提示框\n\t */\n\t$.toast = function(message,options) {\n\t\tvar durations = {\n\t\t    'long': 3500,\n\t\t    'short': 2000\n\t\t};\n\n\t\t//计算显示时间\n\t\t options = $.extend({\n\t        duration: 'short'\n\t    }, options || {});\n\n\n\t\tif ($.os.plus && options.type !== 'div') {\n\t\t\t//默认显示在底部；\n\t\t\t$.plusReady(function() {\n\t\t\t\tplus.nativeUI.toast(message, {\n\t\t\t\t\tverticalAlign: 'bottom',\n\t\t\t\t\tduration:options.duration\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tif (typeof options.duration === 'number') {\n\t\t        duration = options.duration>0 ? options.duration:durations['short'];\n\t\t    } else {\n\t\t        duration = durations[options.duration];\n\t\t    }\n\t\t    if (!duration) {\n\t\t        duration = durations['short'];\n\t\t    }\n\t\t\tvar toast = document.createElement('div');\n\t\t\ttoast.classList.add('mui-toast-container');\n\t\t\ttoast.innerHTML = '<div class=\"' + 'mui-toast-message' + '\">' + message + '</div>';\n\t\t\ttoast.addEventListener('webkitTransitionEnd', function() {\n\t\t\t\tif (!toast.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\ttoast.parentNode.removeChild(toast);\n\t\t\t\t\ttoast = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t//点击则自动消失\n\t\t\ttoast.addEventListener('click', function() {\n\t\t        toast.parentNode.removeChild(toast);\n\t\t        toast = null;\n\t\t    });\n\t\t\tdocument.body.appendChild(toast);\n\t\t\ttoast.offsetHeight;\n\t\t\ttoast.classList.add(CLASS_ACTIVE);\n\t\t\tsetTimeout(function() {\n\t\t\t\ttoast && toast.classList.remove(CLASS_ACTIVE);\n\t\t\t}, duration);\n\t\t\t\n\t\t\treturn {\n\t\t        isVisible: function() {return !!toast;}\n\t\t    }\n\t\t}   \n\t};\n\n})(mui, window);\n/**\n * Popup(alert,confirm,prompt)  \n * @param {Object} $\n * @param {Object} window\n * @param {Object} document\n */\n(function($, window, document) {\n    var CLASS_POPUP = 'mui-popup';\n    var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop';\n    var CLASS_POPUP_IN = 'mui-popup-in';\n    var CLASS_POPUP_OUT = 'mui-popup-out';\n    var CLASS_POPUP_INNER = 'mui-popup-inner';\n    var CLASS_POPUP_TITLE = 'mui-popup-title';\n    var CLASS_POPUP_TEXT = 'mui-popup-text';\n    var CLASS_POPUP_INPUT = 'mui-popup-input';\n    var CLASS_POPUP_BUTTONS = 'mui-popup-buttons';\n    var CLASS_POPUP_BUTTON = 'mui-popup-button';\n    var CLASS_POPUP_BUTTON_BOLD = 'mui-popup-button-bold';\n    var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop';\n    var CLASS_ACTIVE = 'mui-active';\n\n    var popupStack = [];\n    var backdrop = (function() {\n        var element = document.createElement('div');\n        element.classList.add(CLASS_POPUP_BACKDROP);\n        element.addEventListener($.EVENT_MOVE, $.preventDefault);\n        element.addEventListener('webkitTransitionEnd', function() {\n            if (!this.classList.contains(CLASS_ACTIVE)) {\n                element.parentNode && element.parentNode.removeChild(element);\n            }\n        });\n        return element;\n    }());\n\n    var createInput = function(placeholder) {\n        return '<div class=\"' + CLASS_POPUP_INPUT + '\"><input type=\"text\" autofocus placeholder=\"' + (placeholder || '') + '\"/></div>';\n    };\n    var createInner = function(message, title, extra) {\n        return '<div class=\"' + CLASS_POPUP_INNER + '\"><div class=\"' + CLASS_POPUP_TITLE + '\">' + title + '</div><div class=\"' + CLASS_POPUP_TEXT + '\">' + message.replace(/\\r\\n/g, \"<br/>\").replace(/\\n/g, \"<br/>\") + '</div>' + (extra || '') + '</div>';\n    };\n    var createButtons = function(btnArray) {\n        var length = btnArray.length;\n        var btns = [];\n        for (var i = 0; i < length; i++) {\n            btns.push('<span class=\"' + CLASS_POPUP_BUTTON + (i === length - 1 ? (' ' + CLASS_POPUP_BUTTON_BOLD) : '') + '\">' + btnArray[i] + '</span>');\n        }\n        return '<div class=\"' + CLASS_POPUP_BUTTONS + '\">' + btns.join('') + '</div>';\n    };\n\n    var createPopup = function(html, callback) {\n        var popupElement = document.createElement('div');\n        popupElement.className = CLASS_POPUP;\n        popupElement.innerHTML = html;\n        var removePopupElement = function() {\n            popupElement.parentNode && popupElement.parentNode.removeChild(popupElement);\n            popupElement = null;\n        };\n        popupElement.addEventListener($.EVENT_MOVE, $.preventDefault);\n        popupElement.addEventListener('webkitTransitionEnd', function(e) {\n            if (popupElement && e.target === popupElement && popupElement.classList.contains(CLASS_POPUP_OUT)) {\n                removePopupElement();\n            }\n        });\n        popupElement.style.display = 'block';\n        document.body.appendChild(popupElement);\n        popupElement.offsetHeight;\n        popupElement.classList.add(CLASS_POPUP_IN);\n\n        if (!backdrop.classList.contains(CLASS_ACTIVE)) {\n            backdrop.style.display = 'block';\n            document.body.appendChild(backdrop);\n            backdrop.offsetHeight;\n            backdrop.classList.add(CLASS_ACTIVE);\n        }\n        var btns = $.qsa('.' + CLASS_POPUP_BUTTON, popupElement);\n        var input = popupElement.querySelector('.' + CLASS_POPUP_INPUT + ' input');\n        var popup = {\n            element: popupElement,\n            close: function(index, animate) {\n                if (popupElement) {\n                    var result = callback && callback({\n                        index: index || 0,\n                        value: input && input.value || ''\n                    });\n                    if (result === false) { //返回false则不关闭当前popup\n                        return;\n                    }\n                    if (animate !== false) {\n                        popupElement.classList.remove(CLASS_POPUP_IN);\n                        popupElement.classList.add(CLASS_POPUP_OUT);\n                    } else {\n                        removePopupElement();\n                    }\n                    popupStack.pop();\n                    //如果还有其他popup，则不remove backdrop\n                    if (popupStack.length) {\n                        popupStack[popupStack.length - 1]['show'](animate);\n                    } else {\n                        backdrop.classList.remove(CLASS_ACTIVE);\n                    }\n                }\n            }\n        };\n        var handleEvent = function(e) {\n            popup.close(btns.indexOf(e.target));\n        };\n        $(popupElement).on('tap', '.' + CLASS_POPUP_BUTTON, handleEvent);\n        if (popupStack.length) {\n            popupStack[popupStack.length - 1]['hide']();\n        }\n        popupStack.push({\n            close: popup.close,\n            show: function(animate) {\n                popupElement.style.display = 'block';\n                popupElement.offsetHeight;\n                popupElement.classList.add(CLASS_POPUP_IN);\n            },\n            hide: function() {\n                popupElement.style.display = 'none';\n                popupElement.classList.remove(CLASS_POPUP_IN);\n            }\n        });\n        return popup;\n    };\n    var createAlert = function(message, title, btnValue, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof title === 'function') {\n                callback = title;\n                type = btnValue;\n                title = null;\n                btnValue = null;\n            } else if (typeof btnValue === 'function') {\n                type = callback;\n                callback = btnValue;\n                btnValue = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示') + createButtons([btnValue || '确定']), callback);\n        }\n        return plus.nativeUI.alert(message, callback, title || '提示', btnValue || '确定');\n    };\n    var createConfirm = function(message, title, btnArray, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof title === 'function') {\n                callback = title;\n                type = btnArray;\n                title = null;\n                btnArray = null;\n            } else if (typeof btnArray === 'function') {\n                type = callback;\n                callback = btnArray;\n                btnArray = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示') + createButtons(btnArray || ['取消', '确认']), callback);\n        }\n        return plus.nativeUI.confirm(message, callback, title, btnArray || ['取消', '确认']);\n    };\n    var createPrompt = function(message, placeholder, title, btnArray, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof placeholder === 'function') {\n                callback = placeholder;\n                type = title;\n                placeholder = null;\n                title = null;\n                btnArray = null;\n            } else if (typeof title === 'function') {\n                callback = title;\n                type = btnArray;\n                title = null;\n                btnArray = null;\n            } else if (typeof btnArray === 'function') {\n                type = callback;\n                callback = btnArray;\n                btnArray = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示', createInput(placeholder)) + createButtons(btnArray || ['取消', '确认']), callback);\n        }\n        return plus.nativeUI.prompt(message, callback, title || '提示', placeholder, btnArray || ['取消', '确认']);\n    };\n    var closePopup = function() {\n        if (popupStack.length) {\n            popupStack[popupStack.length - 1]['close']();\n            return true;\n        } else {\n            return false;\n        }\n    };\n    var closePopups = function() {\n        while (popupStack.length) {\n            popupStack[popupStack.length - 1]['close']();\n        }\n    };\n\n    $.closePopup = closePopup;\n    $.closePopups = closePopups;\n    $.alert = createAlert;\n    $.confirm = createConfirm;\n    $.prompt = createPrompt;\n})(mui, window, document);\n(function($, document) {\n\tvar CLASS_PROGRESSBAR = 'mui-progressbar';\n\tvar CLASS_PROGRESSBAR_IN = 'mui-progressbar-in';\n\tvar CLASS_PROGRESSBAR_OUT = 'mui-progressbar-out';\n\tvar CLASS_PROGRESSBAR_INFINITE = 'mui-progressbar-infinite';\n\n\tvar SELECTOR_PROGRESSBAR = '.mui-progressbar';\n\n\tvar _findProgressbar = function(container) {\n\t\tcontainer = $(container || 'body');\n\t\tif (container.length === 0) return;\n\t\tcontainer = container[0];\n\t\tif (container.classList.contains(CLASS_PROGRESSBAR)) {\n\t\t\treturn container;\n\t\t}\n\t\tvar progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR);\n\t\tif (progressbars) {\n\t\t\tfor (var i = 0, len = progressbars.length; i < len; i++) {\n\t\t\t\tvar progressbar = progressbars[i];\n\t\t\t\tif (progressbar.parentNode === container) {\n\t\t\t\t\treturn progressbar;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * 创建并显示进度条 \n\t * @param {Object} container  可选，默认body，支持selector,DOM Node,mui wrapper\n\t * @param {Object} progress 可选，undefined表示循环，数字表示具体进度\n\t * @param {Object} color 可选，指定颜色样式(目前暂未提供实际样式，可暂时不暴露此参数)\n\t */\n\tvar showProgressbar = function(container, progress, color) {\n\t\tif (typeof container === 'number') {\n\t\t\tcolor = progress;\n\t\t\tprogress = container;\n\t\t\tcontainer = 'body';\n\t\t}\n\t\tcontainer = $(container || 'body');\n\t\tif (container.length === 0) return;\n\t\tcontainer = container[0];\n\t\tvar progressbar;\n\t\tif (container.classList.contains(CLASS_PROGRESSBAR)) {\n\t\t\tprogressbar = container;\n\t\t} else {\n\t\t\tvar progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR + ':not(.' + CLASS_PROGRESSBAR_OUT + ')');\n\t\t\tif (progressbars) {\n\t\t\t\tfor (var i = 0, len = progressbars.length; i < len; i++) {\n\t\t\t\t\tvar _progressbar = progressbars[i];\n\t\t\t\t\tif (_progressbar.parentNode === container) {\n\t\t\t\t\t\tprogressbar = _progressbar;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!progressbar) {\n\t\t\t\tprogressbar = document.createElement('span');\n\t\t\t\tprogressbar.className = CLASS_PROGRESSBAR + ' ' + CLASS_PROGRESSBAR_IN + (typeof progress !== 'undefined' ? '' : (' ' + CLASS_PROGRESSBAR_INFINITE)) + (color ? (' ' + CLASS_PROGRESSBAR + '-' + color) : '');\n\t\t\t\tif (typeof progress !== 'undefined') {\n\t\t\t\t\tprogressbar.innerHTML = '<span></span>';\n\t\t\t\t}\n\t\t\t\tcontainer.appendChild(progressbar);\n\t\t\t} else {\n\t\t\t\tprogressbar.classList.add(CLASS_PROGRESSBAR_IN);\n\t\t\t}\n\t\t}\n\t\tif (progress) setProgressbar(container, progress);\n\t\treturn progressbar;\n\t};\n\t/**\n\t * 关闭进度条 \n\t * @param {Object} container 可选，默认body，支持selector,DOM Node,mui wrapper\n\t */\n\tvar hideProgressbar = function(container) {\n\t\tvar progressbar = _findProgressbar(container);\n\t\tif (!progressbar) {\n\t\t\treturn;\n\t\t}\n\t\tvar classList = progressbar.classList;\n\t\tif (!classList.contains(CLASS_PROGRESSBAR_IN) || classList.contains(CLASS_PROGRESSBAR_OUT)) {\n\t\t\treturn;\n\t\t}\n\t\tclassList.remove(CLASS_PROGRESSBAR_IN);\n\t\tclassList.add(CLASS_PROGRESSBAR_OUT);\n\t\tprogressbar.addEventListener('webkitAnimationEnd', function() {\n\t\t\tprogressbar.parentNode && progressbar.parentNode.removeChild(progressbar);\n\t\t\tprogressbar = null;\n\t\t});\n\t\treturn;\n\t};\n\t/**\n\t * 设置指定进度条进度 \n\t * @param {Object} container  可选，默认body，支持selector,DOM Node,mui wrapper\n\t * @param {Object} progress 可选，默认0 取值范围[0-100]\n\t * @param {Object} speed 进度条动画时间\n\t */\n\tvar setProgressbar = function(container, progress, speed) {\n\t\tif (typeof container === 'number') {\n\t\t\tspeed = progress;\n\t\t\tprogress = container;\n\t\t\tcontainer = false;\n\t\t}\n\t\tvar progressbar = _findProgressbar(container);\n\t\tif (!progressbar || progressbar.classList.contains(CLASS_PROGRESSBAR_INFINITE)) {\n\t\t\treturn;\n\t\t}\n\t\tif (progress) progress = Math.min(Math.max(progress, 0), 100);\n\t\tprogressbar.offsetHeight;\n\t\tvar span = progressbar.querySelector('span');\n\t\tif (span) {\n\t\t\tvar style = span.style;\n\t\t\tstyle.webkitTransform = 'translate3d(' + (-100 + progress) + '%,0,0)';\n\t\t\tif (typeof speed !== 'undefined') {\n\t\t\t\tstyle.webkitTransitionDuration = speed + 'ms';\n\t\t\t} else {\n\t\t\t\tstyle.webkitTransitionDuration = '';\n\t\t\t}\n\t\t}\n\t\treturn progressbar;\n\t};\n\t$.fn.progressbar = function(options) {\n\t\tvar progressbarApis = [];\n\t\toptions = options || {};\n\t\tthis.each(function() {\n\t\t\tvar self = this;\n\t\t\tvar progressbarApi = self.mui_plugin_progressbar;\n\t\t\tif (!progressbarApi) {\n\t\t\t\tself.mui_plugin_progressbar = progressbarApi = {\n\t\t\t\t\toptions: options,\n\t\t\t\t\tsetOptions: function(options) {\n\t\t\t\t\t\tthis.options = options;\n\t\t\t\t\t},\n\t\t\t\t\tshow: function() {\n\t\t\t\t\t\treturn showProgressbar(self, this.options.progress, this.options.color);\n\t\t\t\t\t},\n\t\t\t\t\tsetProgress: function(progress) {\n\t\t\t\t\t\treturn setProgressbar(self, progress);\n\t\t\t\t\t},\n\t\t\t\t\thide: function() {\n\t\t\t\t\t\treturn hideProgressbar(self);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else if (options) {\n\t\t\t\tprogressbarApi.setOptions(options);\n\t\t\t}\n\t\t\tprogressbarApis.push(progressbarApi);\n\t\t});\n\t\treturn progressbarApis.length === 1 ? progressbarApis[0] : progressbarApis;\n\t};\n\t//\t$.setProgressbar = setProgressbar;\n\t//\t$.showProgressbar = showProgressbar;\n\t//\t$.hideProgressbar = hideProgressbar;\n})(mui, document);\n/**\n * Input(TODO resize)\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n\tvar CLASS_ICON = 'mui-icon';\n\tvar CLASS_ICON_CLEAR = 'mui-icon-clear';\n\tvar CLASS_ICON_SPEECH = 'mui-icon-speech';\n\tvar CLASS_ICON_SEARCH = 'mui-icon-search';\n\tvar CLASS_ICON_PASSWORD = 'mui-icon-eye';\n\tvar CLASS_INPUT_ROW = 'mui-input-row';\n\tvar CLASS_PLACEHOLDER = 'mui-placeholder';\n\tvar CLASS_TOOLTIP = 'mui-tooltip';\n\tvar CLASS_HIDDEN = 'mui-hidden';\n\tvar CLASS_FOCUSIN = 'mui-focusin';\n\tvar SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR;\n\tvar SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH;\n\tvar SELECTOR_ICON_PASSWORD = '.' + CLASS_ICON_PASSWORD;\n\tvar SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER;\n\tvar SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP;\n\n\tvar findRow = function(target) {\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList && target.classList.contains(CLASS_INPUT_ROW)) {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\tvar Input = function(element, options) {\n\t\tthis.element = element;\n\t\tthis.options = options || {\n\t\t\tactions: 'clear'\n\t\t};\n\t\tif (~this.options.actions.indexOf('slider')) { //slider\n\t\t\tthis.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN;\n\t\t\tthis.sliderActionSelector = SELECTOR_TOOLTIP;\n\t\t} else { //clear,speech,search\n\t\t\tif (~this.options.actions.indexOf('clear')) {\n\t\t\t\tthis.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + ' ' + CLASS_HIDDEN;\n\t\t\t\tthis.clearActionSelector = SELECTOR_ICON_CLOSE;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('speech')) { //only for 5+\n\t\t\t\tthis.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH;\n\t\t\t\tthis.speechActionSelector = SELECTOR_ICON_SPEECH;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('search')) {\n\t\t\t\tthis.searchActionClass = CLASS_PLACEHOLDER;\n\t\t\t\tthis.searchActionSelector = SELECTOR_PLACEHOLDER;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('password')) {\n\t\t\t\tthis.passwordActionClass = CLASS_ICON + ' ' + CLASS_ICON_PASSWORD;\n\t\t\t\tthis.passwordActionSelector = SELECTOR_ICON_PASSWORD;\n\t\t\t}\n\t\t}\n\t\tthis.init();\n\t};\n\tInput.prototype.init = function() {\n\t\tthis.initAction();\n\t\tthis.initElementEvent();\n\t};\n\tInput.prototype.initAction = function() {\n\t\tvar self = this;\n\n\t\tvar row = self.element.parentNode;\n\t\tif (row) {\n\t\t\tif (self.sliderActionClass) {\n\t\t\t\tself.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector);\n\t\t\t} else {\n\t\t\t\tif (self.searchActionClass) {\n\t\t\t\t\tself.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector);\n\t\t\t\t\tself.searchAction.addEventListener('tap', function(e) {\n\t\t\t\t\t\t$.focus(self.element);\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.speechActionClass) {\n\t\t\t\t\tself.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector);\n\t\t\t\t\tself.speechAction.addEventListener('click', $.stopPropagation);\n\t\t\t\t\tself.speechAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.speechActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.clearActionClass) {\n\t\t\t\t\tself.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector);\n\t\t\t\t\tself.clearAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.clearActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.passwordActionClass) {\n\t\t\t\t\tself.passwordAction = self.createAction(row, self.passwordActionClass, self.passwordActionSelector);\n\t\t\t\t\tself.passwordAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.passwordActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tInput.prototype.createAction = function(row, actionClass, actionSelector) {\n\t\tvar action = row.querySelector(actionSelector);\n\t\tif (!action) {\n\t\t\tvar action = document.createElement('span');\n\t\t\taction.className = actionClass;\n\t\t\tif (actionClass === this.searchActionClass) {\n\t\t\t\taction.innerHTML = '<span class=\"' + CLASS_ICON + ' ' + CLASS_ICON_SEARCH + '\"></span><span>' + this.element.getAttribute('placeholder') + '</span>';\n\t\t\t\tthis.element.setAttribute('placeholder', '');\n\t\t\t\tif (this.element.value.trim()) {\n\t\t\t\t\trow.classList.add('mui-active');\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.insertBefore(action, this.element.nextSibling);\n\t\t}\n\t\treturn action;\n\t};\n\tInput.prototype.initElementEvent = function() {\n\t\tvar element = this.element;\n\n\t\tif (this.sliderActionClass) {\n\t\t\tvar tooltip = this.sliderAction;\n\t\t\tvar timer = null;\n\t\t\tvar showTip = function() { //每次重新计算是因为控件可能被隐藏，初始化时计算是不正确的\n\t\t\t\ttooltip.classList.remove(CLASS_HIDDEN);\n\t\t\t\tvar offsetLeft = element.offsetLeft;\n\t\t\t\tvar width = element.offsetWidth - 28;\n\t\t\t\tvar tooltipWidth = tooltip.offsetWidth;\n\t\t\t\tvar distince = Math.abs(element.max - element.min);\n\t\t\t\tvar scaleWidth = (width / distince) * Math.abs(element.value - element.min);\n\t\t\t\ttooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px';\n\t\t\t\ttooltip.innerText = element.value;\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\ttooltip.classList.add(CLASS_HIDDEN);\n\t\t\t\t}, 1000);\n\t\t\t};\n\t\t\telement.addEventListener('input', showTip);\n\t\t\telement.addEventListener('tap', showTip);\n\t\t\telement.addEventListener($.EVENT_MOVE, function(e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t} else {\n\t\t\tif (this.clearActionClass) {\n\t\t\t\tvar action = this.clearAction;\n\t\t\t\tif (!action) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.each(['keyup', 'change', 'input', 'focus', 'cut', 'paste'], function(index, type) {\n\t\t\t\t\t(function(type) {\n\t\t\t\t\t\telement.addEventListener(type, function() {\n\t\t\t\t\t\t\taction.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN);\n\t\t\t\t\t\t});\n\t\t\t\t\t})(type);\n\t\t\t\t});\n\t\t\t\telement.addEventListener('blur', function() {\n\t\t\t\t\taction.classList.add(CLASS_HIDDEN);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.searchActionClass) {\n\t\t\t\telement.addEventListener('focus', function() {\n\t\t\t\t\telement.parentNode.classList.add('mui-active');\n\t\t\t\t});\n\t\t\t\telement.addEventListener('blur', function() {\n\t\t\t\t\tif (!element.value.trim()) {\n\t\t\t\t\t\telement.parentNode.classList.remove('mui-active');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\tInput.prototype.setPlaceholder = function(text) {\n\t\tif (this.searchActionClass) {\n\t\t\tvar placeholder = this.element.parentNode.querySelector(SELECTOR_PLACEHOLDER);\n\t\t\tplaceholder && (placeholder.getElementsByTagName('span')[1].innerText = text);\n\t\t} else {\n\t\t\tthis.element.setAttribute('placeholder', text);\n\t\t}\n\t};\n\tInput.prototype.passwordActionClick = function(event) {\n\t\tif (this.element.type === 'text') {\n\t\t\tthis.element.type = 'password';\n\t\t} else {\n\t\t\tthis.element.type = 'text';\n\t\t}\n\t\tthis.passwordAction.classList.toggle('mui-active');\n\t\tevent.preventDefault();\n\t};\n\tInput.prototype.clearActionClick = function(event) {\n\t\tvar self = this;\n\t\tself.element.value = '';\n\t\t$.focus(self.element);\n\t\tself.clearAction.classList.add(CLASS_HIDDEN);\n\t\tevent.preventDefault();\n\t};\n\tInput.prototype.speechActionClick = function(event) {\n\t\tif (window.plus) {\n\t\t\tvar self = this;\n\t\t\tvar oldValue = self.element.value;\n\t\t\tself.element.value = '';\n\t\t\tdocument.body.classList.add(CLASS_FOCUSIN);\n\t\t\tplus.speech.startRecognize({\n\t\t\t\tengine: 'iFly'\n\t\t\t}, function(s) {\n\t\t\t\tself.element.value += s;\n\t\t\t\t$.focus(self.element);\n\t\t\t\tplus.speech.stopRecognize();\n\t\t\t\t$.trigger(self.element, 'recognized', {\n\t\t\t\t\tvalue: self.element.value\n\t\t\t\t});\n\t\t\t\tif (oldValue !== self.element.value) {\n\t\t\t\t\t$.trigger(self.element, 'change');\n\t\t\t\t\t$.trigger(self.element, 'input');\n\t\t\t\t}\n\t\t\t\t// document.body.classList.remove(CLASS_FOCUSIN);\n\t\t\t}, function(e) {\n\t\t\t\tdocument.body.classList.remove(CLASS_FOCUSIN);\n\t\t\t});\n\t\t} else {\n\t\t\talert('only for 5+');\n\t\t}\n\t\tevent.preventDefault();\n\t};\n\t$.fn.input = function(options) {\n\t\tvar inputApis = [];\n\t\tthis.each(function() {\n\t\t\tvar inputApi = null;\n\t\t\tvar actions = [];\n\t\t\tvar row = findRow(this.parentNode);\n\t\t\tif (this.type === 'range' && row.classList.contains('mui-input-range')) {\n\t\t\t\tactions.push('slider');\n\t\t\t} else {\n\t\t\t\tvar classList = this.classList;\n\t\t\t\tif (classList.contains('mui-input-clear')) {\n\t\t\t\t\tactions.push('clear');\n\t\t\t\t}\n\t\t\t\tif (!($.os.android && $.os.stream) && classList.contains('mui-input-speech')) {\n\t\t\t\t\tactions.push('speech');\n\t\t\t\t}\n\t\t\t\tif (classList.contains('mui-input-password')) {\n\t\t\t\t\tactions.push('password');\n\t\t\t\t}\n\t\t\t\tif (this.type === 'search' && row.classList.contains('mui-search')) {\n\t\t\t\t\tactions.push('search');\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar id = this.getAttribute('data-input-' + actions[0]);\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\tinputApi = $.data[id] = new Input(this, {\n\t\t\t\t\tactions: actions.join(',')\n\t\t\t\t});\n\t\t\t\tfor (var i = 0, len = actions.length; i < len; i++) {\n\t\t\t\t\tthis.setAttribute('data-input-' + actions[i], id);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinputApi = $.data[id];\n\t\t\t}\n\t\t\tinputApis.push(inputApi);\n\t\t});\n\t\treturn inputApis.length === 1 ? inputApis[0] : inputApis;\n\t};\n\t$.ready(function() {\n\t\t$('.mui-input-row input').input();\n\t});\n})(mui, window, document);\n(function($, window) {\n    var CLASS_ACTIVE = 'mui-active';\n    var rgbaRegex = /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n    var getColor = function(colorStr) {\n        var matches = colorStr.match(rgbaRegex);\n        if (matches && matches.length === 5) {\n            return [\n                matches[1],\n                matches[2],\n                matches[3],\n                matches[4]\n            ];\n        }\n        return [];\n    };\n    var Transparent = function(element, options) {\n        this.element = element;\n        this.options = $.extend({\n            top: 0, //距离顶部高度(到达该高度即触发)\n            offset: 150, //滚动透明距离\n            duration: 16, //过渡时间\n            scrollby: window//监听滚动距离容器\n        }, options || {});\n\n        this.scrollByElem = this.options.scrollby || window;\n        if (!this.scrollByElem) {\n            throw new Error(\"监听滚动的元素不存在\");\n        }\n        this.isNativeScroll = false;\n        if (this.scrollByElem === window) {\n            this.isNativeScroll = true;\n        } else if (!~this.scrollByElem.className.indexOf('mui-scroll-wrapper')) {\n            this.isNativeScroll = true;\n        }\n\n        this._style = this.element.style;\n        this._bgColor = this._style.backgroundColor;\n        var color = getColor(mui.getStyles(this.element, 'backgroundColor'));\n        if (color.length) {\n            this._R = color[0];\n            this._G = color[1];\n            this._B = color[2];\n            this._A = parseFloat(color[3]);\n            this.lastOpacity = this._A;\n            this._bufferFn = $.buffer(this.handleScroll, this.options.duration, this);\n            this.initEvent();\n        } else {\n            throw new Error(\"元素背景颜色必须为RGBA\");\n        }\n    };\n\n    Transparent.prototype.initEvent = function() {\n        this.scrollByElem.addEventListener('scroll', this._bufferFn);\n        if (this.isNativeScroll) { //原生scroll\n            this.scrollByElem.addEventListener($.EVENT_MOVE, this._bufferFn);\n        }\n    }\n    Transparent.prototype.handleScroll = function(e) {\n        var y = window.scrollY;\n        if (!this.isNativeScroll && e && e.detail) {\n            y = -e.detail.y;\n        }\n        var opacity = (y - this.options.top) / this.options.offset + this._A;\n        opacity = Math.min(Math.max(this._A, opacity), 1);\n        this._style.backgroundColor = 'rgba(' + this._R + ',' + this._G + ',' + this._B + ',' + opacity + ')';\n        if (opacity > this._A) {\n            this.element.classList.add(CLASS_ACTIVE);\n        } else {\n            this.element.classList.remove(CLASS_ACTIVE);\n        }\n        if (this.lastOpacity !== opacity) {\n            $.trigger(this.element, 'alpha', {\n                alpha: opacity\n            });\n            this.lastOpacity = opacity;\n        }\n    };\n    Transparent.prototype.destory = function() {\n        this.scrollByElem.removeEventListener('scroll', this._bufferFn);\n        this.scrollByElem.removeEventListener($.EVENT_MOVE, this._bufferFn);\n        this.element.style.backgroundColor = this._bgColor;\n        this.element.mui_plugin_transparent = null;\n    };\n    $.fn.transparent = function(options) {\n        options = options || {};\n        var transparentApis = [];\n        this.each(function() {\n            var transparentApi = this.mui_plugin_transparent;\n            if (!transparentApi) {\n                var top = this.getAttribute('data-top');\n                var offset = this.getAttribute('data-offset');\n                var duration = this.getAttribute('data-duration');\n                var scrollby = this.getAttribute('data-scrollby');\n                if (top !== null && typeof options.top === 'undefined') {\n                    options.top = top;\n                }\n                if (offset !== null && typeof options.offset === 'undefined') {\n                    options.offset = offset;\n                }\n                if (duration !== null && typeof options.duration === 'undefined') {\n                    options.duration = duration;\n                }\n                if (scrollby !== null && typeof options.scrollby === 'undefined') {\n                    options.scrollby = document.querySelector(scrollby) || window;\n                }\n                transparentApi = this.mui_plugin_transparent = new Transparent(this, options);\n            }\n            transparentApis.push(transparentApi);\n        });\n        return transparentApis.length === 1 ? transparentApis[0] : transparentApis;\n    };\n    $.ready(function() {\n        $('.mui-bar-transparent').transparent();\n    });\n})(mui, window);\n/**\n * 数字输入框\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($) {\n\n    var touchSupport = ('ontouchstart' in document);\n    var tapEventName = touchSupport ? 'tap' : 'click';\n    var changeEventName = 'change';\n    var holderClassName = 'mui-numbox';\n    var plusClassSelector = '.mui-btn-numbox-plus,.mui-numbox-btn-plus';\n    var minusClassSelector = '.mui-btn-numbox-minus,.mui-numbox-btn-minus';\n    var inputClassSelector = '.mui-input-numbox,.mui-numbox-input';\n\n    var Numbox = $.Numbox = $.Class.extend({\n        /**\n         * 构造函数\n         **/\n        init: function(holder, options) {\n            var self = this;\n            if (!holder) {\n                throw \"构造 numbox 时缺少容器元素\";\n            }\n            self.holder = holder;\n            options = options || {};\n            options.step = parseInt(options.step || 1);\n            self.options = options;\n            self.input = $.qsa(inputClassSelector, self.holder)[0];\n            self.plus = $.qsa(plusClassSelector, self.holder)[0];\n            self.minus = $.qsa(minusClassSelector, self.holder)[0];\n            self.checkValue();\n            self.initEvent();\n        },\n        /**\n         * 初始化事件绑定\n         **/\n        initEvent: function() {\n            var self = this;\n            self.plus.addEventListener(tapEventName, function(event) {\n                var val = parseInt(self.input.value) + self.options.step;\n                self.input.value = val.toString();\n                $.trigger(self.input, changeEventName, null);\n            });\n            self.minus.addEventListener(tapEventName, function(event) {\n                var val = parseInt(self.input.value) - self.options.step;\n                self.input.value = val.toString();\n                $.trigger(self.input, changeEventName, null);\n            });\n            self.input.addEventListener(changeEventName, function(event) {\n                self.checkValue();\n                var val = parseInt(self.input.value);\n                //触发顶层容器\n                $.trigger(self.holder, changeEventName, {\n                    value: val\n                });\n            });\n        },\n        /**\n         * 获取当前值\n         **/\n        getValue: function() {\n            var self = this;\n            return parseInt(self.input.value);\n        },\n        /**\n         * 验证当前值是法合法\n         **/\n        checkValue: function() {\n            var self = this;\n            var val = self.input.value;\n            if (val == null || val == '' || isNaN(val)) {\n                self.input.value = self.options.min || 0;\n                self.minus.disabled = self.options.min != null;\n            } else {\n                var val = parseInt(val);\n                if (self.options.max != null && !isNaN(self.options.max) && val >= parseInt(self.options.max)) {\n                    val = self.options.max;\n                    self.plus.disabled = true;\n                } else {\n                    self.plus.disabled = false;\n                }\n                if (self.options.min != null && !isNaN(self.options.min) && val <= parseInt(self.options.min)) {\n                    val = self.options.min;\n                    self.minus.disabled = true;\n                } else {\n                    self.minus.disabled = false;\n                }\n                self.input.value = val;\n            }\n        },\n        /**\n         * 更新选项\n         **/\n        setOption: function(name, value) {\n            var self = this;\n            self.options[name] = value;\n        },\n        /**\n         * 动态设置新值\n         **/\n        setValue: function(value) {\n            this.input.value = value;\n            this.checkValue();\n        }\n    });\n\n    $.fn.numbox = function(options) {\n        var instanceArray = [];\n        //遍历选择的元素\n        this.each(function(i, element) {\n            if (element.numbox) {\n                return;\n            }\n            if (options) {\n                element.numbox = new Numbox(element, options);\n            } else {\n                var optionsText = element.getAttribute('data-numbox-options');\n                var options = optionsText ? JSON.parse(optionsText) : {};\n                options.step = element.getAttribute('data-numbox-step') || options.step;\n                options.min = element.getAttribute('data-numbox-min') || options.min;\n                options.max = element.getAttribute('data-numbox-max') || options.max;\n                element.numbox = new Numbox(element, options);\n            }\n        });\n        return this[0] ? this[0].numbox : null;\n    }\n\n    //自动处理 class='mui-locker' 的 dom\n    $.ready(function() {\n        $('.' + holderClassName).numbox();\n    });\n\n}(mui));\n/**\n * Button\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n    var CLASS_ICON = 'mui-icon';\n    var CLASS_DISABLED = 'mui-disabled';\n\n    var STATE_RESET = 'reset';\n    var STATE_LOADING = 'loading';\n\n    var defaultOptions = {\n        loadingText: 'Loading...', //文案\n        loadingIcon: 'mui-spinner' + ' ' + 'mui-spinner-white', //图标，可为空\n        loadingIconPosition: 'left' //图标所处位置，仅支持left|right\n    };\n\n    var Button = function(element, options) {\n        this.element = element;\n        this.options = $.extend({}, defaultOptions, options);\n        if (!this.options.loadingText) {\n            this.options.loadingText = defaultOptions.loadingText;\n        }\n        if (this.options.loadingIcon === null) {\n            this.options.loadingIcon = 'mui-spinner';\n            if ($.getStyles(this.element, 'color') === 'rgb(255, 255, 255)') {\n                this.options.loadingIcon += ' ' + 'mui-spinner-white';\n            }\n        }\n        this.isInput = this.element.tagName === 'INPUT';\n        this.resetHTML = this.isInput ? this.element.value : this.element.innerHTML;\n        this.state = '';\n    };\n    Button.prototype.loading = function() {\n        this.setState(STATE_LOADING);\n    };\n    Button.prototype.reset = function() {\n        this.setState(STATE_RESET);\n    };\n    Button.prototype.setState = function(state) {\n        if (this.state === state) {\n            return false;\n        }\n        this.state = state;\n        if (state === STATE_RESET) {\n            this.element.disabled = false;\n            this.element.classList.remove(CLASS_DISABLED);\n            this.setHtml(this.resetHTML);\n        } else if (state === STATE_LOADING) {\n            this.element.disabled = true;\n            this.element.classList.add(CLASS_DISABLED);\n            var html = this.isInput ? this.options.loadingText : ('<span>' + this.options.loadingText + '</span>');\n            if (this.options.loadingIcon && !this.isInput) {\n                if (this.options.loadingIconPosition === 'right') {\n                    html += '&nbsp;<span class=\"' + this.options.loadingIcon + '\"></span>';\n                } else {\n                    html = '<span class=\"' + this.options.loadingIcon + '\"></span>&nbsp;' + html;\n                }\n            }\n            this.setHtml(html);\n        }\n    };\n    Button.prototype.setHtml = function(html) {\n        if (this.isInput) {\n            this.element.value = html;\n        } else {\n            this.element.innerHTML = html;\n        }\n    }\n    $.fn.button = function(state) {\n        var buttonApis = [];\n        this.each(function() {\n            var buttonApi = this.mui_plugin_button;\n            if (!buttonApi) {\n                var loadingText = this.getAttribute('data-loading-text');\n                var loadingIcon = this.getAttribute('data-loading-icon');\n                var loadingIconPosition = this.getAttribute('data-loading-icon-position');\n                this.mui_plugin_button = buttonApi = new Button(this, {\n                    loadingText: loadingText,\n                    loadingIcon: loadingIcon,\n                    loadingIconPosition: loadingIconPosition\n                });\n            }\n            if (state === STATE_LOADING || state === STATE_RESET) {\n                buttonApi.setState(state);\n            }\n            buttonApis.push(buttonApi);\n        });\n        return buttonApis.length === 1 ? buttonApis[0] : buttonApis;\n    };\n})(mui, window, document);"
  },
  {
    "path": "examples/hello-mui/.project",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>hello-mui</name>\n\t<comment></comment>\n\t<projects>\n\t</projects>\n\t<buildSpec>\n\t\t<buildCommand>\n\t\t\t<name>com.aptana.ide.core.unifiedBuilder</name>\n\t\t\t<arguments>\n\t\t\t</arguments>\n\t\t</buildCommand>\n\t\t<buildCommand>\n\t\t\t<name>com.pandora.projects.ui.MKeyBuilder</name>\n\t\t\t<arguments>\n\t\t\t</arguments>\n\t\t</buildCommand>\n\t</buildSpec>\n\t<natures>\n\t\t<nature>com.pandora.projects.ui.MKeyNature</nature>\n\t</natures>\n</projectDescription>\n"
  },
  {
    "path": "examples/hello-mui/css/app.css",
    "content": "/*\n *这是单独为hello mui准备的个性化css，可以覆盖标准mui的css定义；\n * 在实际项目开发时，建议为App单独写一个css文件，从而实现项目的自定义皮肤功能；\n * \n * */\n.mui-plus header.mui-bar{\r\n\tdisplay: none;\r\n}\r\n.mui-plus .mui-bar-nav~.mui-content{\r\n\tpadding: 0;\r\n}\n\n/*hm开头的表示仅为 Hello MUI示例定义*/\n.hm-description{\n\tmargin: .5em 0;\n}\n\n.hm-description>li {\n\tfont-size: 14px;\n\tcolor: #8f8f94;\n}\n"
  },
  {
    "path": "examples/hello-mui/css/feedback.css",
    "content": "/*!\n * ======================================================\n * FeedBack Template For MUI (http://dev.dcloud.net.cn/mui)\n * =======================================================\n * @version:1.0.0\n * @author:cuihongbao@dcloud.io\n */\n\n.feedback body {\n\tbackground-color: #EFEFF4;\n}\n.feedback input,\n.feedback textarea {\n\tborder: none !important;\n}\n.feedback textarea {\n\theight: 100px;\n\tmargin-bottom: 0 !important;\n\tpadding-bottom: 0 !important;\n}\n.feedback .row {\n\twidth: 100%;\n\tbackground-color: #fff;\n}\n.feedback p {\n\tpadding: 10px 15px 0;\n}\n/*.feedback button#submit { \r\n\twidth: 90%;\r\n\theight: 46px;\r\n\tleft: 50%;\r\n\t-webkit-transform: translate(-50%);\r\n}*/\n\ninput::-webkit-input-placeholder,textarea::-webkit-input-placeholder{\n\tfont-size: 14px;\n}\n\n.feedback .hidden {\n\tdisplay: none;\n}\n.feedback .image-list {\n\twidth: 100%;\n\theight: 85px;\n\tbackground-size: cover;\n\tpadding: 10px 10px;\n\toverflow: hidden;\n}\n.feedback .image-item {\n\twidth: 65px;\n\theight: 65px;\n\t/*background-image: url(../images/iconfont-tianjia.png);*/\n\tbackground-size: 100% 100%;\n\tdisplay: inline-block;\n\tposition: relative;\n\tborder-radius: 5px;\n\tmargin-right: 10px;\n\tmargin-bottom: 10px;\n\tborder: solid 1px #e8e8e8;\n\tvertical-align: top;\n}\n.feedback .image-item .file {\n\tposition: absolute;\n\tleft: 0px;\n\ttop: 0px;\n\twidth: 100%;\n\theight: 100%;\n\topacity: 0;\n\tcursor: pointer;\n\tz-index: 0;\n}\n.feedback .image-item.space {\n\tborder: none;\n}\n.feedback .image-item .image-close {\n\tposition: absolute;\n\tdisplay: inline-block;\n\tright: -6px;\n\ttop: -6px;\n\twidth: 20px;\n\theight: 20px;\n\ttext-align: center;\n\tline-height: 20px;\n\tborder-radius: 12px;\n\tbackground-color: #FF5053;\n\tcolor: #f3f3f3;\n\tborder: solid 1px #FF5053;\n\tfont-size: 9px;\n\tfont-weight: 200;\n\tz-index: 1;\n}\n.feedback .image-item .image-up{\n\theight: 65px;\n\twidth: 65px;\n\tborder-radius: 10px;\n\tline-height: 65px;\n\tborder: 1px solid #ccc;\n\tcolor: #ccc; \n\tdisplay: inline-block;\n\ttext-align: center;\n}\n.feedback .image-item .image-up:after{\n\tfont-family: \"微软雅黑\";\n\tcontent: '+';\n\tfont-size: 60px;\n}\n.feedback .image-item.space .image-close {\n\tdisplay: none;\n}\n.feedback .mui-inline{\r\n\tvertical-align: bottom;\n\tfont-size: 14px;\n\tcolor: #8f8f94;\r\n}\n.mui-icon-star{\n\tcolor: #B5B5B5;\n\tfont-size: 22px;\n}\n.mui-icon-star-filled{\n\tcolor: #FFB400;\n\tfont-size: 22px;\n} \n.mui-popover {\n\theight: 180px;\n}\n.stream{\n\tdisplay: none;\n}\n.mui-plus-stream .stream{\n\tdisplay: block;\n}\n"
  },
  {
    "path": "examples/hello-mui/css/icons-extra.css",
    "content": "@font-face {\n    font-family: MuiiconSpread;\n    font-weight: normal;\n    font-style: normal;\n    src:  url('../fonts/mui-icons-extra.ttf') format('truetype'); /* iOS 4.1- */\n}\n.mui-icon-extra\n{\n    font-family: MuiiconSpread;\n    font-size: 24px;\n    font-weight: normal;\n    font-style: normal;\n    line-height: 1;\n    display: inline-block;\n    text-decoration: none;\n    -webkit-font-smoothing: antialiased;\n}\n.mui-icon-extra-cold:before { content: \"\\e500\"; }\n.mui-icon-extra-share:before { content: \"\\e200\"; }\n.mui-icon-extra-class:before { content: \"\\e118\"; }\n.mui-icon-extra-custom:before { content: \"\\e117\"; }\n.mui-icon-extra-new:before { content: \"\\e103\"; }\n.mui-icon-extra-card:before { content: \"\\e104\"; }\n.mui-icon-extra-grech:before { content: \"\\e105\"; }\n.mui-icon-extra-trend:before { content: \"\\e106\"; }\n.mui-icon-extra-filter:before { content: \"\\e207\"; }\n.mui-icon-extra-holiday:before { content: \"\\e300\"; }\n.mui-icon-extra-cart:before { content: \"\\e107\"; }\n.mui-icon-extra-heart:before { content: \"\\e180\"; }\n.mui-icon-extra-computer:before { content: \"\\e600\"; }\n.mui-icon-extra-express:before { content: \"\\e108\"; }\n.mui-icon-extra-gift:before { content: \"\\e109\"; }\n.mui-icon-extra-gold:before { content: \"\\e102\"; }\n.mui-icon-extra-lamp:before { content: \"\\e601\"; }\n.mui-icon-extra-rank:before { content: \"\\e110\"; }\n.mui-icon-extra-notice:before { content: \"\\e111\"; }\n.mui-icon-extra-sweep:before { content: \"\\e202\"; }\n.mui-icon-extra-arrowleftcricle:before { content: \"\\e401\"; }\n.mui-icon-extra-dictionary:before { content: \"\\e602\"; }\n.mui-icon-extra-heart-filled:before { content: \"\\e119\"; }\n.mui-icon-extra-xiaoshuo:before { content: \"\\e607\"; }\n.mui-icon-extra-top:before { content: \"\\e403\"; }\n.mui-icon-extra-people:before { content: \"\\e203\"; }\n.mui-icon-extra-topic:before { content: \"\\e603\"; }\n.mui-icon-extra-hotel:before { content: \"\\e301\"; }\n.mui-icon-extra-like:before { content: \"\\e206\"; }\n.mui-icon-extra-regist:before { content: \"\\e201\"; }\n.mui-icon-extra-order:before { content: \"\\e113\"; }\n.mui-icon-extra-alipay:before { content: \"\\e114\"; }\n.mui-icon-extra-find:before { content: \"\\e400\"; }\n.mui-icon-extra-arrowrightcricle:before { content: \"\\e402\"; }\n.mui-icon-extra-calendar:before { content: \"\\e115\"; }\n.mui-icon-extra-prech:before { content: \"\\e116\"; }\n.mui-icon-extra-cate:before { content: \"\\e501\"; }\n.mui-icon-extra-comment:before { content: \"\\e209\"; }\n.mui-icon-extra-at:before { content: \"\\e208\"; }\n.mui-icon-extra-addpeople:before { content: \"\\e204\"; }\n.mui-icon-extra-peoples:before { content: \"\\e205\"; }\n.mui-icon-extra-calc:before { content: \"\\e101\"; }\n.mui-icon-extra-classroom:before { content: \"\\e604\"; }\n.mui-icon-extra-phone:before { content: \"\\e404\"; }\n.mui-icon-extra-university:before { content: \"\\e605\"; }\n.mui-icon-extra-outline:before { content: \"\\e606\"; }\n"
  },
  {
    "path": "examples/hello-mui/css/mui.dtpicker.css",
    "content": ".mui-dtpicker {\n\tposition: fixed;\n\tleft: 0px;\n\twidth: 100%;\n\tz-index: 999999;\n\tbackground-color: #eee;\n\tborder-top: solid 1px #ccc;\n\tbox-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1);\n\t-webkit-transition: .3s;\n\tbottom: 0px;\n\t-webkit-transform: translateY(300px);\n}\n.mui-dtpicker.mui-active {\n\t-webkit-transform: translateY(0px);\n}\n/*用于将 html body 禁止滚动条*/\n\n.mui-dtpicker-active-for-page {\n\toverflow: hidden !important;\n}\n.mui-android-5-1 .mui-dtpicker {\n\tbottom: -300px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-android-5-1 .mui-dtpicker.mui-active {\n\tbottom: 0px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-dtpicker-header {\n\tpadding: 6px;\n\tfont-size: 14px;\n\tcolor: #888;\n}\n.mui-dtpicker-header button {\n\tfont-size: 12px;\n\tpadding: 5px 10px;\n}\n.mui-dtpicker-header button:last-child {\n\tfloat: right;\n}\n.mui-dtpicker-body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 200px;\n\t/*border-top: solid 1px #eee;\r\n\tbackground-color: #fff;*/\n}\n.mui-ios .mui-dtpicker-body {\n\t-webkit-perspective: 1200px;\n\tperspective: 1200px;\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n.mui-dtpicker-title h5 {\n\tdisplay: inline-block;\n\twidth: 20%;\n\tmargin: 0px;\n\tpadding: 8px;\n\ttext-align: center;\n\tborder-top: solid 1px #ddd;\n\tbackground-color: #f0f0f0;\n\tborder-bottom: solid 1px #ccc;\n}\n.mui-dtpicker .mui-picker {\n\twidth: 20%;\n\theight: 100%;\n\tmargin: 0px;\n\tfloat: left;\n\tborder: none;\n}\n/*年月日时分*/\n\n[data-type=\"datetime\"] .mui-picker,\n[data-type=\"time\"] .mui-dtpicker-title h5 {\n\twidth: 20%;\n}\n[data-type=\"datetime\"] [data-id=\"picker-h\"],\n[data-type=\"datetime\"] [data-id=\"title-h\"] {\n\tborder-left: dotted 1px #ccc;\n}\n/*年月日*/\n\n[data-type=\"date\"] .mui-picker,\n[data-type=\"date\"] .mui-dtpicker-title h5 {\n\twidth: 33.3%;\n}\n[data-type=\"date\"] [data-id=\"picker-h\"],\n[data-type=\"date\"] [data-id=\"picker-i\"],\n[data-type=\"date\"] [data-id=\"title-h\"],\n[data-type=\"date\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}\n/*年月日时*/\n\n[data-type=\"hour\"] .mui-picker,\n[data-type=\"hour\"] .mui-dtpicker-title h5 {\n\twidth: 25%;\n}\n[data-type=\"hour\"] [data-id=\"picker-i\"],\n[data-type=\"hour\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}\n[data-type=\"hour\"] [data-id=\"picker-h\"],\n[data-type=\"hour\"] [data-id=\"title-h\"] {\n\tborder-left: dotted 1px #ccc;\n}\n/*时分*/\n\n[data-type=\"time\"] .mui-picker,\n[data-type=\"time\"] .mui-dtpicker-title h5 {\n\twidth: 50%;\n}\n[data-type=\"time\"] [data-id=\"picker-y\"],\n[data-type=\"time\"] [data-id=\"picker-m\"],\n[data-type=\"time\"] [data-id=\"picker-d\"],\n[data-type=\"time\"] [data-id=\"title-y\"],\n[data-type=\"time\"] [data-id=\"title-m\"],\n[data-type=\"time\"] [data-id=\"title-d\"] {\n\tdisplay: none;\n}\n/*年月*/\n\n[data-type=\"month\"] .mui-picker,\n[data-type=\"month\"] .mui-dtpicker-title h5 {\n\twidth: 50%;\n}\n[data-type=\"month\"] [data-id=\"picker-d\"],\n[data-type=\"month\"] [data-id=\"picker-h\"],\n[data-type=\"month\"] [data-id=\"picker-i\"],\n[data-type=\"month\"] [data-id=\"title-d\"],\n[data-type=\"month\"] [data-id=\"title-h\"],\n[data-type=\"month\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}"
  },
  {
    "path": "examples/hello-mui/css/mui.imageviewer.css",
    "content": ".mui-imageviewer {\n\tposition: absolute;\n\tposition: fixed;\n\tbackground-color: rgba(0, 0, 0, 0.9);\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 99;\n\tleft: 0px;\n\ttop: 0px;\n\tdisplay: none;\n\topacity: 0;\n\t-webkit-transition: all 0.6s ease-in-out;\n\ttransition: all 0.6s ease-in-out;\n\t-webkit-transform-style: preserve-3d;\n\t-webkit-backface-visibility: hidden;\n\toverflow: hidden;\n\tmargin: 0px;\n\tpadding: 0px;\n\tbox-sizing: border-box;\n}\n.mui-imageviewer-mask {\n\tposition: absolute;\n\tz-index: 11;\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0px;\n\ttop: 0px;\n\tdisplay: none;\n}\n.mui-imageviewer .mui-imageviewer-header {\n\tposition: absolute;\n\theight: 45px;\n\twidth: 100%;\n\tleft: 0px;\n\ttop: 0px;\n\tz-index: 10;\n\tbackground-color: rgba(0, 0, 0, 0.5);\n\tmargin: 0px;\n\tpadding: 0px;\n\tbox-sizing: border-box;\n}\n.mui-imageviewer .mui-imageviewer-state {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 100%;\n\tline-height: 100%;\n\tcolor: #eee;\n\ttext-align: center;\n\tfont-size: 16px;\n\tpadding: 15px;\n}\n.mui-imageviewer .mui-imageviewer-header .mui-imageviewer-close {\n\tposition: absolute;\n\ttop: 5px;\n\tright: 5px;\n\tfont-size: 32px;\n\tcolor: #aaa;\n}\n.mui-imageviewer .mui-imageviewer-header .mui-imageviewer-close:active {\n\tcolor: #FF5053;\n}\n.mui-imageviewer .mui-imageviewer-item {\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0px;\n\ttop: 0px;\n\tposition: absolute;\n\tz-index: 0;\n\tmargin: 0px;\n\tpadding: 0px;\n\tbox-sizing: border-box;\n\t-webkit-transition: -webkit-transform 500ms ease-in-out;\n\ttransition: transform 500ms ease-in-out;\n\tdisplay: table;\n\toverflow: hidden;\n}\n.mui-imageviewer .mui-imageviewer-item-center {\n\t-webkit-transform: translateX(0);\n\ttransform: translateX(0);\n}\n.mui-imageviewer .mui-imageviewer-item-left {\n\t-webkit-transform: translateX(-100%);\n\ttransform: translateX(-100%);\n}\n.mui-imageviewer .mui-imageviewer-item-right {\n\t-webkit-transform: translateX(100%);\n\ttransform: translateX(100%);\n}\n.mui-imageviewer .mui-imageviewer-item span {\n\tdisplay: table-cell;\n\ttext-align: center;\n\tvertical-align: middle;\n\tline-height: 100%;\n\tfont-size: 100%;\n\tmargin: 0px;\n\tpadding: 0px;\n\tbox-sizing: border-box;\n\toverflow: auto;\n}\n.mui-imageviewer .mui-imageviewer-item img {\n\tbackface-visibility: hidden;\n\ttransform-origin: 50% 50% 0px;\n\tmax-width: 100%;\n}\n.mui-imageviewer-left,\n.mui-imageviewer-right {\n\tposition: absolute;\n\tz-index: 2;\n\tcolor: #aaa;\n\ttop: 50%;\n\tmargin-top: -18px;\n\tfont-size: 36px;\n}\n.mui-imageviewer-left {\n\tleft: 5px;\n}\n.mui-imageviewer-right {\n\tright: 5px;\n}\n.mui-imageviewer-left:active,\n.mui-imageviewer-right:active {\n\tcolor: #fff;\n}"
  },
  {
    "path": "examples/hello-mui/css/mui.indexedlist.css",
    "content": ".mui-indexed-list {\n\tposition: relative;\n\tborder-top: solid 1px #e3e3e3;\n\tborder-bottom: solid 1px #e3e3e3;\n\toverflow: hidden;\n\tbackground-color: #fafafa;\n\theight: 300px;\n\tcursor: default;\n}\n.mui-indexed-list-inner {\n\tmargin: 0px;\n\tpadding: 0px;\n\toverflow-y: auto;\n\tborder: none;\n}\n.mui-indexed-list-inner::-webkit-scrollbar {\n\twidth: 0px;\n\theight: 0px;\n\tvisibility: hidden;\n}\n.mui-indexed-list-empty-alert,\n.mui-indexed-list-inner.empty ul {\n\tdisplay: none;\n}\n.mui-indexed-list-inner.empty .mui-indexed-list-empty-alert {\n\tdisplay: block;\n}\n.mui-indexed-list-empty-alert {\n\tpadding: 30px 15px;\n\ttext-align: center;\n\tcolor: #ccc;\n\tpadding-right: 45px;\n}\n.mui-ios .mui-indexed-list-inner {\n\twidth: calc(100% + 10px);\n}\n.mui-indexed-list-group,\n.mui-indexed-list-item {\n\tpadding-right: 45px;\n}\n.mui-ios .mui-indexed-list-group,\n.mui-ios .mui-indexed-list-item,\n.mui-ios .mui-indexed-list-empty-alert {\n\tpadding-right: 55px;\n}\n.mui-indexed-list-group {\n\tbackground-color: #f7f7f7;\n}\n.mui-indexed-list-group {\n\tpadding-top: 3px;\n\tpadding-bottom: 3px;\n}\n.mui-indexed-list-search {\n\tborder-bottom: solid 1px #e3e3e3;\n\tz-index: 15;\n}\n.mui-indexed-list-search.mui-search:before {\n\tmargin-top: -10px;\n}\n.mui-indexed-list-search input {\n\tborder-radius: 0px;\n\tmargin: 0px;\n\tbackground-color: #fafafa;\n}\n.mui-indexed-list-bar {\n\twidth: 23px;\n\tbackground-color: lightgrey;\n\tposition: absolute;\n\theight: 100%;\n\tz-index: 10;\n\tright: 0px;\n\t-webkit-transition: .2s;\n}\n.mui-indexed-list-bar a {\n\tdisplay: block;\n\ttext-align: center;\n\tfont-size: 11px;\n\tpadding: 0px;\n\tmargin: 0px;\n\tline-height: 15px;\n\tcolor: #aaa;\n}\n.mui-indexed-list-bar.active {\n\tbackground-color: rgb(200,200,200);\n}\n.mui-indexed-list-bar.active a {\n\tcolor: #333;\n}\n.mui-indexed-list-bar.active a.active {\n\tcolor: #007aff;\n}\n.mui-indexed-list-alert {\n\tposition: absolute;\n\tz-index: 20;\n\tbackground-color: rgba(0, 0, 0, 0.5);\n\twidth: 80px;\n\theight: 80px;\n\tleft: 50%;\n\ttop: 50%;\n\tmargin-left: -40px;\n\tmargin-top: -40px;\n\tborder-radius: 40px;\n\ttext-align: center;\n\tline-height: 80px;\n\tfont-size: 35px;\n\tcolor: #fff;\n\tdisplay: none;\n\t-webkit-transition: .2s;\n}\n.mui-indexed-list-alert.active {\n\tdisplay: block;\n}"
  },
  {
    "path": "examples/hello-mui/css/mui.listpicker.css",
    "content": "/**\n * 选择列表插件\n * varstion 1.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n.mui-listpicker {\n\tposition: relative;\n\tborder: solid 1px #ccc;\n\tpadding: 0px;\n\tmargin: 3px;\n\theight: 185px;\n\tbackground-color: #fff;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n.mui-listpicker .mui-listpicker-inner {\n\twidth: 100%;\n\theight: 100%;\n\tposition: absolute;\n\tleft: 0px;\n\ttop: 0px;\n\tz-index: 1;\n\tborder-radius: 3px;\n\t-webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n\t-webkit-mask-box-image: linear-gradient(to top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n}\n.mui-ios .mui-listpicker .mui-listpicker-inner {\n\twidth: calc(100% + 8px);\n\tpadding-right: 8px;\n}\n.mui-android .mui-listpicker .mui-listpicker-inner {\n\toverflow-y: auto;\n\t-webkit-overflow-scrolling: touch;\n}\n.mui-listpicker .mui-listpicker-inner::-webkit-scrollbar {\n\twidth: 0px;\n\theight: 0px;\n\tvisibility: hidden;\n}\n.mui-listpicker ul {\n\tlist-style-type: none;\n\tmargin: 0px;\n\tpadding: 0px;\n\tposition: relative;\n}\n.mui-listpicker ul li {\n\tbox-sizing: border-box;\n\tposition: relative;\n\theight: 36px;\n\tline-height: 36px;\n\ttext-align: center;\n\tcolor: #555;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.mui-listpicker.three-dimensional {\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n.mui-listpicker.three-dimensional .mui-listpicker-inner {\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n.mui-listpicker.three-dimensional ul {\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n.mui-listpicker.three-dimensional ul li {\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n.mui-listpicker ul li:last-child {\n\tborder-bottom: none;\n}\n.mui-listpicker ul li::first-child {\n\tborder-top: none;\n}\n.mui-listpicker .mui-listpicker-rule {\n\tposition: absolute;\n\tborder: solid 1px #ccc;\n\tborder-left: none;\n\tborder-right: none;\n\tbackground-color: #dfd;\n\topacity: 0.5;\n\twidth: 100%;\n\tleft: 0px;\n\ttop: 50%;\n\tz-index: 0;\n}\n.mui-listpicker .mui-listpicker-item-selected {\n\tcolor: green;\n}"
  },
  {
    "path": "examples/hello-mui/css/mui.picker.all.css",
    "content": "/**\n * 选择列表插件\n * varstion 2.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n.mui-picker {\n    background-color: #ddd;\n    position: relative;\n    height: 200px;\n    overflow: hidden;\n    border: solid 1px rgba(0, 0, 0, 0.1);\n    -webkit-user-select: none;\n    user-select: none;\n    box-sizing: border-box;\n}\n.mui-picker-inner {\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n    -webkit-mask-box-image: linear-gradient(top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n}\n.mui-pciker-list,\n.mui-pciker-rule {\n    box-sizing: border-box;\n    padding: 0px;\n    margin: 0px;\n    width: 100%;\n    height: 36px;\n    line-height: 36px;\n    position: absolute;\n    left: 0px;\n    top: 50%;\n    margin-top: -18px;\n}\n.mui-pciker-rule-bg {\n    z-index: 0;\n    /*background-color: #cfd5da;*/\n}\n.mui-pciker-rule-ft {\n    z-index: 2;\n    border-top: solid 1px rgba(0, 0, 0, 0.1);\n    border-bottom: solid 1px rgba(0, 0, 0, 0.1);\n    /*-webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/\n    /*box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/\n}\n.mui-pciker-list {\n    z-index: 1;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    -webkit-transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n    transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n}\n.mui-pciker-list li {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    text-align: center;\n    vertical-align: middle;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    overflow: hidden;\n    box-sizing: border-box;\n    font-size: 16px;\n    font-family: \"Helvetica Neue\", \"Helvetica\", \"Arial\", \"sans-serif\";\n    color: #888;\n    padding: 0px 8px;\n    white-space: nowrap;\n    -webkit-text-overflow: ellipsis;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    cursor: default;\n    visibility: hidden;\n}\n.mui-pciker-list li.highlight,\n.mui-pciker-list li.visible {\n    visibility: visible;\n}\n.mui-pciker-list li.highlight {\n    color: #222;\n}\n.mui-poppicker {\n\tposition: fixed;\n\tleft: 0px;\n\twidth: 100%;\n\tz-index: 999;\n\tbackground-color: #eee;\n\tborder-top: solid 1px #ccc;\n\tbox-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1);\n\t-webkit-transition: .3s;\n\tbottom: 0px;\n\t-webkit-transform: translateY(300px);\n}\n.mui-poppicker.mui-active {\n\t-webkit-transform: translateY(0px);\n}\n.mui-android-5-1 .mui-poppicker {\n\tbottom: -300px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-android-5-1 .mui-poppicker.mui-active {\n\tbottom: 0px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-poppicker-header {\n\tpadding: 6px;\n\tfont-size: 14px;\n\tcolor: #888;\n}\n.mui-poppicker-header .mui-btn {\n\tfont-size: 12px;\n\tpadding: 5px 10px;\n}\n.mui-poppicker-btn-cancel {\n\tfloat: left;\n}\n.mui-poppicker-btn-ok {\n\tfloat: right;\n}\n.mui-poppicker-clear {\n\tclear: both;\n\theight: 0px;\n\tline-height: 0px;\n\tfont-size: 0px;\n\toverflow: hidden;\n}\n.mui-poppicker-body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 200px;\n\tborder-top: solid 1px #ddd;\n\t/*-webkit-perspective: 1200px;\r\n\tperspective: 1200px;\r\n\t-webkit-transform-style: preserve-3d;\r\n\ttransform-style: preserve-3d;*/\n}\n.mui-poppicker-body .mui-picker {\n\twidth: 100%;\n\theight: 100%;\n\tmargin: 0px;\n\tborder: none;\n\tfloat: left;\n}\n.mui-dtpicker {\n\tposition: fixed;\n\tleft: 0px;\n\twidth: 100%;\n\tz-index: 999999;\n\tbackground-color: #eee;\n\tborder-top: solid 1px #ccc;\n\tbox-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1);\n\t-webkit-transition: .3s;\n\tbottom: 0px;\n\t-webkit-transform: translateY(300px);\n}\n.mui-dtpicker.mui-active {\n\t-webkit-transform: translateY(0px);\n}\n/*用于将 html body 禁止滚动条*/\n\n.mui-dtpicker-active-for-page {\n\toverflow: hidden !important;\n}\n.mui-android-5-1 .mui-dtpicker {\n\tbottom: -300px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-android-5-1 .mui-dtpicker.mui-active {\n\tbottom: 0px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-dtpicker-header {\n\tpadding: 6px;\n\tfont-size: 14px;\n\tcolor: #888;\n}\n.mui-dtpicker-header button {\n\tfont-size: 12px;\n\tpadding: 5px 10px;\n}\n.mui-dtpicker-header button:last-child {\n\tfloat: right;\n}\n.mui-dtpicker-body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 200px;\n\t/*border-top: solid 1px #eee;\r\n\tbackground-color: #fff;*/\n}\n.mui-ios .mui-dtpicker-body {\n\t-webkit-perspective: 1200px;\n\tperspective: 1200px;\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n.mui-dtpicker-title h5 {\n\tdisplay: inline-block;\n\twidth: 20%;\n\tmargin: 0px;\n\tpadding: 8px;\n\ttext-align: center;\n\tborder-top: solid 1px #ddd;\n\tbackground-color: #f0f0f0;\n\tborder-bottom: solid 1px #ccc;\n}\n.mui-dtpicker .mui-picker {\n\twidth: 20%;\n\theight: 100%;\n\tmargin: 0px;\n\tfloat: left;\n\tborder: none;\n}\n/*年月日时分*/\n\n[data-type=\"datetime\"] .mui-picker,\n[data-type=\"time\"] .mui-dtpicker-title h5 {\n\twidth: 20%;\n}\n[data-type=\"datetime\"] [data-id=\"picker-h\"],\n[data-type=\"datetime\"] [data-id=\"title-h\"] {\n\tborder-left: dotted 1px #ccc;\n}\n/*年月日*/\n\n[data-type=\"date\"] .mui-picker,\n[data-type=\"date\"] .mui-dtpicker-title h5 {\n\twidth: 33.3%;\n}\n[data-type=\"date\"] [data-id=\"picker-h\"],\n[data-type=\"date\"] [data-id=\"picker-i\"],\n[data-type=\"date\"] [data-id=\"title-h\"],\n[data-type=\"date\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}\n/*年月日时*/\n\n[data-type=\"hour\"] .mui-picker,\n[data-type=\"hour\"] .mui-dtpicker-title h5 {\n\twidth: 25%;\n}\n[data-type=\"hour\"] [data-id=\"picker-i\"],\n[data-type=\"hour\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}\n[data-type=\"hour\"] [data-id=\"picker-h\"],\n[data-type=\"hour\"] [data-id=\"title-h\"] {\n\tborder-left: dotted 1px #ccc;\n}\n/*时分*/\n\n[data-type=\"time\"] .mui-picker,\n[data-type=\"time\"] .mui-dtpicker-title h5 {\n\twidth: 50%;\n}\n[data-type=\"time\"] [data-id=\"picker-y\"],\n[data-type=\"time\"] [data-id=\"picker-m\"],\n[data-type=\"time\"] [data-id=\"picker-d\"],\n[data-type=\"time\"] [data-id=\"title-y\"],\n[data-type=\"time\"] [data-id=\"title-m\"],\n[data-type=\"time\"] [data-id=\"title-d\"] {\n\tdisplay: none;\n}\n/*年月*/\n\n[data-type=\"month\"] .mui-picker,\n[data-type=\"month\"] .mui-dtpicker-title h5 {\n\twidth: 50%;\n}\n[data-type=\"month\"] [data-id=\"picker-d\"],\n[data-type=\"month\"] [data-id=\"picker-h\"],\n[data-type=\"month\"] [data-id=\"picker-i\"],\n[data-type=\"month\"] [data-id=\"title-d\"],\n[data-type=\"month\"] [data-id=\"title-h\"],\n[data-type=\"month\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}"
  },
  {
    "path": "examples/hello-mui/css/mui.picker.css",
    "content": "/**\n * 选择列表插件\n * varstion 2.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n.mui-picker {\n    background-color: #ddd;\n    position: relative;\n    height: 200px;\n    overflow: hidden;\n    border: solid 1px rgba(0, 0, 0, 0.1);\n    -webkit-user-select: none;\n    user-select: none;\n    box-sizing: border-box;\n}\n.mui-picker-inner {\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n    -webkit-mask-box-image: linear-gradient(top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n}\n.mui-pciker-list,\n.mui-pciker-rule {\n    box-sizing: border-box;\n    padding: 0px;\n    margin: 0px;\n    width: 100%;\n    height: 36px;\n    line-height: 36px;\n    position: absolute;\n    left: 0px;\n    top: 50%;\n    margin-top: -18px;\n}\n.mui-pciker-rule-bg {\n    z-index: 0;\n    /*background-color: #cfd5da;*/\n}\n.mui-pciker-rule-ft {\n    z-index: 2;\n    border-top: solid 1px rgba(0, 0, 0, 0.1);\n    border-bottom: solid 1px rgba(0, 0, 0, 0.1);\n    /*-webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/\n    /*box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/\n}\n.mui-pciker-list {\n    z-index: 1;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    -webkit-transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n    transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n}\n.mui-pciker-list li {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    text-align: center;\n    vertical-align: middle;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    overflow: hidden;\n    box-sizing: border-box;\n    font-size: 16px;\n    font-family: \"Helvetica Neue\", \"Helvetica\", \"Arial\", \"sans-serif\";\n    color: #888;\n    padding: 0px 8px;\n    white-space: nowrap;\n    -webkit-text-overflow: ellipsis;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    cursor: default;\n    visibility: hidden;\n}\n.mui-pciker-list li.highlight,\n.mui-pciker-list li.visible {\n    visibility: visible;\n}\n.mui-pciker-list li.highlight {\n    color: #222;\n}"
  },
  {
    "path": "examples/hello-mui/css/mui.poppicker.css",
    "content": ".mui-poppicker {\n\tposition: fixed;\n\tleft: 0px;\n\twidth: 100%;\n\tz-index: 999;\n\tbackground-color: #eee;\n\tborder-top: solid 1px #ccc;\n\tbox-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1);\n\t-webkit-transition: .3s;\n\tbottom: 0px;\n\t-webkit-transform: translateY(300px);\n}\n.mui-poppicker.mui-active {\n\t-webkit-transform: translateY(0px);\n}\n.mui-android-5-1 .mui-poppicker {\n\tbottom: -300px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-android-5-1 .mui-poppicker.mui-active {\n\tbottom: 0px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-poppicker-header {\n\tpadding: 6px;\n\tfont-size: 14px;\n\tcolor: #888;\n}\n.mui-poppicker-header .mui-btn {\n\tfont-size: 12px;\n\tpadding: 5px 10px;\n}\n.mui-poppicker-btn-cancel {\n\tfloat: left;\n}\n.mui-poppicker-btn-ok {\n\tfloat: right;\n}\n.mui-poppicker-clear {\n\tclear: both;\n\theight: 0px;\n\tline-height: 0px;\n\tfont-size: 0px;\n\toverflow: hidden;\n}\n.mui-poppicker-body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 200px;\n\tborder-top: solid 1px #ddd;\n\t/*-webkit-perspective: 1200px;\r\n\tperspective: 1200px;\r\n\t-webkit-transform-style: preserve-3d;\r\n\ttransform-style: preserve-3d;*/\n}\n.mui-poppicker-body .mui-picker {\n\twidth: 100%;\n\theight: 100%;\n\tmargin: 0px;\n\tborder: none;\n\tfloat: left;\n}"
  },
  {
    "path": "examples/hello-mui/examples/accordion.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t\n\t</head>\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">折叠面板</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">表单</a>\n\t\t\t\t\t\t<div class=\"mui-collapse-content\">\n\t\t\t\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t\t\t\t\t<label>Input</label>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" placeholder=\"普通输入框\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t\t\t\t\t<label>Input</label>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"mui-input-clear\" placeholder=\"带清除按钮的输入框\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\n\t\t\t\t\t\t\t\t<div class=\"mui-input-row mui-plus-visible\">\n\t\t\t\t\t\t\t\t\t<label>Input</label>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"mui-input-speech mui-input-clear\" placeholder=\"语音输入\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mui-button-row\">\n\t\t\t\t\t\t\t\t\t<button class=\"mui-btn mui-btn-primary\" type=\"button\" onclick=\"return false;\">确认</button>&nbsp;&nbsp;\n\t\t\t\t\t\t\t\t\t<button class=\"mui-btn mui-btn-primary\" type=\"button\" onclick=\"return false;\">取消</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">图片轮播</a>\n\t\t\t\t\t\t<div class=\"mui-collapse-content\">\n\t\t\t\t\t\t\t<div id=\"slider\" class=\"mui-slider\">\n\t\t\t\t\t\t\t\t<div class=\"mui-slider-group mui-slider-loop\">\n\t\t\t\t\t\t\t\t\t<!-- 额外增加的一个节点(循环轮播：第一个节点是最后一张轮播) -->\n\t\t\t\t\t\t\t\t\t<div class=\"mui-slider-item mui-slider-item-duplicate\">\n\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t\t\t<img src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<!-- 第一张 -->\n\t\t\t\t\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t\t\t<img src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<!-- 第二张 -->\n\t\t\t\t\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t\t\t<img src=\"../images/muwu.jpg\">\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<!-- 第三张 -->\n\t\t\t\t\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t\t\t<img src=\"../images/cbd.jpg\">\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<!-- 第四张 -->\n\t\t\t\t\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t\t\t<img src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<!-- 额外增加的一个节点(循环轮播：最后一个节点是第一张轮播) -->\n\t\t\t\t\t\t\t\t\t<div class=\"mui-slider-item mui-slider-item-duplicate\">\n\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t\t\t<img src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mui-slider-indicator\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-indicator mui-active\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">文字排版</a>\n\t\t\t\t\t\t<div class=\"mui-collapse-content\">\n\t\t\t\t\t\t\t<h1>h1. Heading</h1>\n\t\t\t\t\t\t\t<h2>h2. Heading</h2>\n\t\t\t\t\t\t\t<h3>h3. Heading</h3>\n\t\t\t\t\t\t\t<h4>h4. Heading</h4>\n\t\t\t\t\t\t\t<h5>h5. Heading</h5>\n\t\t\t\t\t\t\t<h6>h6. Heading</h6>\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\tp. 目前最接近原生App效果的框架。\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/actionsheet-plus.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\tspan.mui-icon {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #007aff;\n\t\t\t\tmargin-left: -15px;\n\t\t\t\tpadding-right: 10px;\n\t\t\t}\n\t\t\t#info{\n\t\t  \t\tpadding: 20px 10px ;\n\t\t  \t}\n\t\t  \t.des{\n\t\t  \t\tmargin: .5em 0;\n\t\t  \t}\n\t\t  \t.des>li{\n\t\t  \t\tfont-size: 14px;\n\t\t\t\tcolor: #8f8f94;\n\t\t  \t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">原生模式actionsheet</h1>\n\t\t</header>\n\t\t<nav class=\"mui-bar mui-bar-tab\">\n\t\t\t<a id=\"delete-btn\" class=\"mui-tab-item\">\n\t\t\t\t<span class=\"mui-icon mui-icon-trash\"></span>\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#\">\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#\">\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#\">\n\t\t\t</a>\n\t\t</nav>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>这是5+ runtime封装的原生actionsheet，该模式具备如下优点：</p>\n\t\t\t\t<ul class=\"des\">\n\t\t\t\t\t<li>支持覆盖顶部状态栏</li>\n\t\t\t\t\t<li>支持跨webview的遮罩</li>\n\t\t\t\t\t<li>在有map等原生组件时，依然会显示在最顶层，不会被遮挡</li>\n\t\t\t\t</ul>\t\n\t\t\t\t<p>另一方面，原生模式的actionsheet目前不支持自定义样式</p>\t\n\t\t\t\t\n\t\t\t\t<p>\n\t\t\t\t\t<a id=\"picture-btn\" class=\"mui-btn mui-btn-primary mui-btn-block mui-btn-outlined\" style=\"padding: 5px 20px;\">打开actionsheet</a>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<p id=\"info\"></p>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\tmui('body').on('shown', '.mui-popover', function(e) {\n\t\t\t//console.log('shown', e.detail.id);//detail为当前popover元素\n\t\t});\n\t\tmui('body').on('hidden', '.mui-popover', function(e) {\n\t\t\t//console.log('hidden', e.detail.id);//detail为当前popover元素\n\t\t});\n\t\tvar info = document.getElementById(\"info\");\n\t\tdocument.getElementById(\"picture-btn\").addEventListener('tap',function () {\n\t\t\tvar btnArray = [{title:\"拍照或录像\"},{title:\"选取现有的\"}];\r\n\t\t\tplus.nativeUI.actionSheet( {\r\n\t\t\t\ttitle:\"选择照片\",\r\n\t\t\t\tcancel:\"取消\",\r\n\t\t\t\tbuttons:btnArray\r\n\t\t\t}, function(e){\r\n\t\t\t\tvar index = e.index;\r\n\t\t\t\tvar text = \"你刚点击了\\\"\";\r\n\t\t\t\tswitch (index){\r\n\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\ttext += \"取消\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\ttext += \"拍照或录像\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\ttext += \"选取现有的\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tinfo.innerHTML = text+\"\\\"按钮\";\r\n\t\t\t} );\n\t\t});\n\t\tdocument.getElementById(\"delete-btn\").addEventListener('tap',function () {\n\t\t\tvar btnArray = [{title:\"删除信息\",style:\"destructive\"}];\n\t\t\tplus.nativeUI.actionSheet( {\n\t\t\t\tcancel:\"取消\",\n\t\t\t\tbuttons:btnArray\n\t\t\t}, function(e){\n\t\t\t\tvar index = e.index;\n\t\t\t\tvar text = \"你刚点击了\\\"\";\n\t\t\t\tswitch (index){\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\ttext += \"取消\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\ttext += \"删除信息\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tinfo.innerHTML = text+\"\\\"按钮\";\n\t\t\t} );\n\t\t});\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/actionsheet.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\tspan.mui-icon {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #007aff;\n\t\t\t\tmargin-left: -15px;\n\t\t\t\tpadding-right: 10px;\n\t\t\t}\n\t\t\t#info {\n\t\t\t\tpadding: 20px 10px;\n\t\t\t}\n\t\t\t/*.des {\r\n\t\t\t\tmargin: .5em 0;\r\n\t\t\t}\r\n\t\t\t.des>li {\r\n\t\t\t\tfont-size: 14px;\r\n\t\t\t\tcolor: #8f8f94;\r\n\t\t\t}*/\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">H5模式actionsheet</h1>\n\t\t</header>\n\t\t<nav class=\"mui-bar mui-bar-tab\">\n\t\t\t<a class=\"mui-tab-item\" href=\"#delete\">\n\t\t\t\t<span class=\"mui-icon mui-icon-trash\"></span>\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#\">\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#\">\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#forward\">\n\t\t\t\t<span class=\"mui-icon mui-icon-undo\"></span>\n\t\t\t</a>\n\t\t</nav>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>actionsheet一般从底部弹出，显示一系列可选择的操作按钮，供用户选择； actionSheet可从任意位置触发， 点击本页面左下角\n\t\t\t\t\t<span class=\"mui-icon mui-icon-trash\"></span>会弹出删除信息确认框； 点击本页面右下角\n\t\t\t\t\t<span class=\"mui-icon mui-icon-undo\"></span>会弹出转发确认框； 你也可点击如下按钮，打开照片选择框：\n\t\t\t\t</p>\n\t\t\t\t<p>\n\t\t\t\t\t<a href=\"#picture\" class=\"mui-btn mui-btn-primary mui-btn-block mui-btn-outlined\" style=\"padding: 5px 20px;\">打开actionsheet</a>\n\t\t\t\t</p>\n\t\t\t\t<p>本页面为H5模式的actionsheet演示示例，该模式具有如下优点：</p>\n\t\t\t\t<ul class=\"des\">\n\t\t\t\t\t<li>可通过css自由定制展现样式</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p>另一方面，H5模式的actionsheet也具备如下缺点：</p>\n\t\t\t\t<ul class=\"hm-description\">\n\t\t\t\t\t<li>不支持覆盖顶部状态栏</li>\n\t\t\t\t\t<li>不支持跨webview的遮罩</li>\n\t\t\t\t\t<li>在有map等原生组件时，容易被遮挡</li>\n\t\t\t\t</ul>\n\t\t\t\t<p id=\"info\"></p>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"delete\" class=\"mui-popover mui-popover-action mui-popover-bottom\">\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#\" style=\"color: #FF3B30;\">删除信息</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#delete\"><b>取消</b></a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div id=\"forward\" class=\"mui-popover mui-popover-action mui-popover-bottom\">\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#\">回复</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#\">转发</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#\">打印</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#forward\"><b>取消</b></a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div id=\"picture\" class=\"mui-popover mui-popover-action mui-popover-bottom\">\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#\">拍照或录像</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#\">选取现有的</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a href=\"#picture\"><b>取消</b></a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\tmui('body').on('shown', '.mui-popover', function(e) {\n\t\t\t//console.log('shown', e.detail.id);//detail为当前popover元素\n\t\t});\n\t\tmui('body').on('hidden', '.mui-popover', function(e) {\n\t\t\t//console.log('hidden', e.detail.id);//detail为当前popover元素\n\t\t});\n\t\tvar info = document.getElementById(\"info\");\n\t\tmui('body').on('tap', '.mui-popover-action li>a', function() {\n\t\t\tvar a = this,\n\t\t\t\tparent;\n\t\t\t//根据点击按钮，反推当前是哪个actionsheet\n\t\t\tfor (parent = a.parentNode; parent != document.body; parent = parent.parentNode) {\n\t\t\t\tif (parent.classList.contains('mui-popover-action')) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//关闭actionsheet\n\t\t\tmui('#' + parent.id).popover('toggle');\n\t\t\tinfo.innerHTML = \"你刚点击了\\\"\" + a.innerHTML + \"\\\"按钮\";\n\t\t})\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/ad.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title>advertisement（广告演示）</title>\n\t\t<link href=\"../css/mui.min.css\" rel=\"stylesheet\" />\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">advertisement（广告演示）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>DCloud广告联盟，可以给DCloud的开发者提供更好的变现方式，更优质的广告体验。点击如下链接前往体验：<a href=\"http://m3w.cn/helload\">广告演示</a></p>\n\t\t\t\t<p>目前已支持悬浮红包、推送广告，更多广告陆续接通中，包括开屏广告、信息流广告。</p>\n\t\t\t\t<p>了解更多DCloud广告联盟的优势及加入广告联盟的方式，请点击<a href=\"http://dcloud.io/dad\">http://dcloud.io/dad</a></p>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script type=\"text/javascript\">\n\t\tmui.init();\n\t\tmui.plusReady(function () {\n\t\t\tif(plus.networkinfo.getCurrentType() == plus.networkinfo.CONNECTION_NONE){\n\t\t\t\tmui.toast(\"当前网络不给力\");\n\t\t\t}\n\t\t});\t\t\n\n\t\t//处理点击事件，需要打开原生浏览器\n\t\tmui('body').on('tap', 'a', function(e) {\n\t\t\tvar href = this.getAttribute('href');\n\t\t\tif (href) {\n\t\t\t\tif (window.plus) {\n\t\t\t\t\tplus.runtime.openURL(href);\n\t\t\t\t} else {\n\t\t\t\t\tlocation.href = href;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/ajax.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t \t.mui-content-padded {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t\tbody,body .mui-content {\n\t\t\t\tbackground-color: #fff !important;\n\t\t\t}\n\t\t\tcode {\n\t\t\t\tword-wrap: break-word;\n\t\t\t\tword-break: normal;\n\t\t\t\tfont-size: 90%;\n\t\t\t\tcolor: #c7254e;\n\t\t\t\tbackground-color: #f9f2f4;\n\t\t\t\tborder-radius: 4px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">ajax（网络请求）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\" style=\"padding-bottom: 50px;\">\n\t\t\t\t<p style=\"text-indent: 22px;\">\n\t\t\t\t\tmui基于html5plus的<a href=\"http://www.dcloud.io/docs/api/zh_cn/xhr.shtml\">XMLHttpRequest</a>，封装了常用的ajax函数，支持Get、Post请求方式， 支持返回json、xml、html、text、script数据类型；\n\t\t\t\t</p>\n\t\t\t\t<h4 class=\"mui-content-padded\">发送请求：</h4>\n\t\t\t\t<div class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t\t<label>type:</label>\n\t\t\t\t\t\t<select id=\"method\">\n\t\t\t\t\t\t\t<option value=\"get\">GET</option>\n\t\t\t\t\t\t\t<option value=\"post\">POST</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t\t<label>dataType:</label>\n\t\t\t\t\t\t<select id=\"dataType\">\n\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\n\t\t\t\t\t\t\t<option value=\"json\">JSON</option>\n\t\t\t\t\t\t\t<option value=\"xml\">XML</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-button-row\">\n\t\t\t\t\t\t<button type=\"button\" id=\"confirm\" class=\"mui-btn mui-btn-primary\">发送请求</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<h4 class=\"mui-content-padded\">获得响应：</h4>\n\t\t\t\t<code id=\"response\"></code>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\t(function($) {\n\t\t\t\t$.init({\n\t\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tvar network = true;\n\t\t\t\tif(mui.os.plus){\n\t\t\t\t\tmui.plusReady(function () {\n\t\t\t\t\t\tif(plus.networkinfo.getCurrentType()==plus.networkinfo.CONNECTION_NONE){\n\t\t\t\t\t\t\tnetwork = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar methodEl = document.getElementById(\"method\");\n\t\t\t\tvar dataTypeEl = document.getElementById(\"dataType\");\n\t\t\t\tvar respnoseEl = document.getElementById(\"response\");\n\t\t\t\t//成功响应的回调函数\n\t\t\t\tvar success = function(response) {\n\t\t\t\t\tvar dataType = dataTypeEl.value;\n\t\t\t\t\tif (dataType === 'json') {\n\t\t\t\t\t\tresponse = JSON.stringify(response);\n\t\t\t\t\t} else if (dataType === 'xml') {\n\t\t\t\t\t\tresponse = new XMLSerializer().serializeToString(response).replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\t\t\t\t\t}\n\t\t\t\t\trespnoseEl.innerHTML = response;\n\t\t\t\t};\n\t\t\t\t//设置全局beforeSend\n\t\t\t\t$.ajaxSettings.beforeSend = function(xhr, setting) {\n\t\t\t\t\t//beforeSend演示,也可在$.ajax({beforeSend:function(){}})中设置单个Ajax的beforeSend\n\t\t\t\t\tconsole.log('beforeSend:::' + JSON.stringify(setting));\n\t\t\t\t};\n\t\t\t\t//设置全局complete\n\t\t\t\t$.ajaxSettings.complete = function(xhr, status) {\n\t\t\t\t\tconsole.log('complete:::' + status);\n\t\t\t\t}\n\t\t\t\tvar ajax = function() {\n\t\t\t\t\t//利用RunJS的Echo Ajax功能测试\n\t\t\t\t\tvar url = 'https://service.dcloud.net.cn/ajax/echo/';\n\t\t\t\t\t//请求方式，默认为Get；\n\t\t\t\t\tvar type = methodEl.value;\n\t\t\t\t\t//预期服务器范围的数据类型\n\t\t\t\t\tvar dataType = dataTypeEl.value;\n\t\t\t\t\t//发送数据\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\tname: \"mui\",\n\t\t\t\t\t\tversion: \"pre-release\",\n\t\t\t\t\t\tauthor: \"chb\",\n\t\t\t\t\t\tdescription: \"最接近原生APP体验的高性能前端框架\"\n\t\t\t\t\t};\n\t\t\t\t\turl = url + (dataType === 'html' ? 'text' : dataType);\n\t\t\t\t\trespnoseEl.innerHTML = '正在请求中...';\n\t\t\t\t\tif (type === 'get') {\n\t\t\t\t\t\tif (dataType === 'json') {\n\t\t\t\t\t\t\t$.getJSON(url, data, success);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.get(url, data, success, dataType);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (type === 'post') {\n\t\t\t\t\t\t$.post(url, data, success, dataType);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t//发送请求按钮的点击事件\n\t\t\t\tdocument.getElementById(\"confirm\").addEventListener('tap', function() {\n\t\t\t\t\tif(network){\n\t\t\t\t\t\tajax();\n\t\t\t\t\t}else{\n\t\t\t\t\t\tmui.toast(\"当前网络不给力，请稍后再试\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t//点击描述中链接时，打开对应网页介绍；\n\t\t\t\t$('body').on('tap', 'a', function(e) {\n\t\t\t\t\tvar href = this.getAttribute('href');\n\t\t\t\t\tif (href) {\n\t\t\t\t\t\tif (window.plus) {\n\t\t\t\t\t\t\tplus.runtime.openURL(href);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlocation.href = href;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})(mui);\n\t\t</script>\n\t</body>\n\n</html>\n"
  },
  {
    "path": "examples/hello-mui/examples/badges.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t\th5 {\n\t\t\t\tmargin: 10px;\n\t\t\t}\n\t\t\t.mui-badge {\n\t\t\t\tmargin: 10px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">badge（数字角标）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h5>有底色</h5>\n\t\t\t\t<span class=\"mui-badge\">1</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-primary\">12</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-success\">123</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-warning\">3</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-danger\">45</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-purple\">456</span>\n\t\t\t\t<h5>无底色（使用父元素背景色）</h5>\n\t\t\t\t<span class=\"mui-badge mui-badge-inverted\">1</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-primary mui-badge-inverted\">2</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-success mui-badge-inverted\">3</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-warning mui-badge-inverted\">4</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-danger mui-badge-inverted\">5</span>\n\t\t\t\t<span class=\"mui-badge mui-badge-royal mui-badge-inverted\">6</span>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/best-practices/list-to-detail/detail.html",
    "content": "<!doctype html>\n<html>\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t\t<title></title>\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<link href=\"../../../css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"list-to-detail.css\" />\n\t</head>\n\n\t<body>\n\n\t\t<div class=\"mui-content\">\n\t\t\t<!--顶部banner图 开始-->\n\t\t\t<div id=\"kr-article-banner\" class=\"kr-article-banner\">\n\t\t\t\t<div id=\"kr-article-cover\" class=\"kr-article-cover\">\n\t\t\t\t\t<img :src=\"cover\">\n\t\t\t\t</div>\n\t\t\t\t<h2 id=\"kr-article-title\" class=\"kr-article-title\">{{title}}</h2>\n\t\t\t</div>\n\t\t\t<!--顶部banner图 结束-->\n\t\t\t\n\t\t\t<div class=\"kr-article-content\">\n\t\t\t\t<!-- 文章作者、发布时间等信息 -->\n\t\t\t\t<div class=\"kr-article-meta\">\n\t\t\t\t\t<div id=\"kr-article-author\" class=\"kr-article-author\">{{author}}</div>\n\t\t\t\t\t<div class=\"kr-article-text\">发表于</div>\n\t\t\t\t\t<div id=\"kr-article-time\" class=\"kr-article-time\">{{time}}</div>\n\t\t\t\t</div>\n\t\t\t\t<!--文章详细内容-->\n\t\t\t\t<div id=\"kr-article-article\" class=\"kr-article-article\" v-html=\"content\"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<script src=\"../../../js/mui.min.js\"></script>\n\t\t<script src=\"vue.min.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tmui.init();\n\n\t\t\tfunction getDefaultData() {\n\t\t\t\treturn {\n\t\t\t\t\tcover: '',\n\t\t\t\t\ttitle: '',\n\t\t\t\t\tauthor: '',\n\t\t\t\t\ttime: '',\n\t\t\t\t\tcontent: ''\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar vm = new Vue({\n\t\t\t\tel: '.mui-content',\n\t\t\t\tdata: getDefaultData(),\n\t\t\t\tmethods: {\n\t\t\t\t\tresetData: function() {//重置数据\n\t\t\t\t\t\tObject.assign(this.$data, getDefaultData());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//监听自定义事件，获取新闻详情\n\t\t\tdocument.addEventListener('get_detail', function(event) {\n\t\t\t\tvar guid = event.detail.guid;\n\t\t\t\tif(!guid) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//前页传入的数据，直接渲染，无需等待ajax请求详情后\n\t\t\t\tvm.cover = event.detail.cover;\n\t\t\t\tvm.title = event.detail.title;\n\t\t\t\tvm.author = event.detail.author;\n\t\t\t\tvm.time = event.detail.time;\n\t\t\t\t//向服务端请求文章详情内容\n\t\t\t\tmui.ajax('http://spider.dcloud.net.cn/api/news/36kr/' + guid, {\n\t\t\t\t\ttype:'GET',\n\t\t\t\t\tdataType: 'json', //服务器返回json格式数据\n\t\t\t\t\ttimeout: 15000, //15秒超时\n\t\t\t\t\tsuccess: function(rsp) {\n\t\t\t\t\t\tvm.content = rsp.content;\n\t\t\t\t\t},\n\t\t\t\t\terror: function(xhr, type, errorThrown) {\n\t\t\t\t\t\tmui.toast('获取文章内容失败');\n\t\t\t\t\t\t//TODO 此处可以向服务端告警\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t//重写返回逻辑\n\t\t\tmui.back = function() {\n\t\t\t\tplus.webview.currentWebview().hide(\"auto\", 300);\n\t\t\t}\n\t\t\t\n\t\t\t//窗口隐藏时，重置页面数据\n\t\t\tmui.plusReady(function () {\r\n\t\t\t\tvar self = plus.webview.currentWebview();\r\n\t\t\t\tself.addEventListener(\"hide\",function (e) {\n\t\t\t\t\twindow.scrollTo(0, 0);\n\t\t\t\t\tvm.resetData();\n\t\t\t\t},false);\r\n\t\t\t})\n\t\t\t\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/best-practices/list-to-detail/list-to-detail.css",
    "content": ".mui-bar-nav {\n\tbackground-color: #4a82d1;\n\t-webkit-box-shadow: none;\n\tbox-shadow: none;\n}\n.mui-bar-nav a,\n.mui-bar .mui-btn-link {\n\tcolor: white;\n}\n.kr-title {\n\tcolor: white;\n}\n\n.kr-article .kr-slider a {\n\theight: 180px;\n\tbackground-position: center;\n\tbackground-size: 100%;\n\tbackground-repeat: no-repeat;\n}\n\n/*无需重复显示大图*/\n#kr-article-article img.fr-fin.fr-dib.fr-tag{\n\tdisplay: none;\n}\n\n#kr-article-article p img:first-child{\n\tdisplay: none;\n}\n\n.kr-article .kr-slider a .mui-slider-title {\n\tbackground: transparent;\n\tcolor: white;\n\topacity: 1;\n\tbottom: 15px;\n\tfont-size: 20px;\n\tfont-weight: 500;\n\tpadding: 0 15px;\n\twhite-space: normal;\n\tline-height: 22px;\n\tword-break: break-all;\n\theight: 44px;\n\ttext-align: justify;\n\ttext-indent: 0;\n\tz-index: 1;\n}\n.kr-article .kr-table-view .mui-table-view-cell {\n\tpadding: 11px;\n}\n.kr-article .kr-table-view .mui-table-view-cell>a:not(.mui-btn) {\n\tmargin: -11px;\n}\n.kr-article .kr-table-view .mui-media-object {\n\tmax-width: 90px;\n\twidth: 90px;\n\theight: 90px;\n\tline-height: 90px;\n\toverflow: hidden;\n}\n.kr-article .kr-table-view .mui-media-object img {\n\theight: 90px;\n}\n.kr-article .kr-table-view .mui-media-body {\n\tposition: relative;\n\tfont-size: 14px;\n\twhite-space: normal;\n\theight: 90px;\n}\n\n.kr-article-banner {\n\theight: 180px;\n\tposition: relative;\n\toverflow: hidden;\n}\n.kr-article-cover {\n\tbackground-position: center;\n\tbackground-color: #ccc;\n\tbackground-size: cover;\n\tbackground-repeat: no-repeat;\n\twidth: 100%;\n\theight: 180px;\n\tposition: relative;\n}\n.kr-article-cover img {\n\twidth: 100%;\n}\n.kr-article-bar a {\n\tcolor: gray;\n}\n.kr-article-title {\n\tposition: absolute;\n\tleft: 15px;\n\tbottom: 15px;\n\twidth: 90%;\n\tfont-size: 16px;\n\tfont-weight: 400;\n\tline-height: 21px;\n\tcolor: white;\n\tz-index: 11;\n}\n.kr-article-content {\n\tbackground: #efeff4;\n}\n.kr-article-meta {\n\tpadding: 10px 0 10px 20px;\n\tdisplay: table;\n}\n.kr-article-meta div {\n\theight: 30px;\n\tfont-size: 15px;\n\tdisplay: table-cell;\n\tvertical-align: middle;\n\tcolor: gray;\n\tpadding: 0 5px;\n}\n.kr-article-avatar img {\n\twidth: 30px;\n}\n.kr-article-text {\n\tfont-size: 13px!important;\n}\n.kr-article-author,\n.kr-article-time {\n\tfont-weight: 600;\n}\n.kr-article-article {\n\tfont-size: 15px;\n\tpadding: 0 15px;\n\tcolor: #000;\n}\n.kr-article-article ol {\n\tmargin: 0 0 0 20px;\n\tpadding: 0;\n}\n.kr-article-article p {\n\tcolor: #000;\n\tfont-size: 15px;\n\tline-height: 23px;\n}\n\n.kr-article-article img,\n.kr-article-article iframe {\n\tmax-width: 100%;\n\twidth: 100%;\n\theight: auto;\n}\nembed,object{\n\tdisplay: none;\n}\n.kr-article-content {}\n.kr-browser .mui-bar .mui-btn {\n\ttop: 10px;\n\tpadding: 2px 12px 2px;\n}\n.kr-browser-bar .mui-spinner {\n\twidth: 20px;\n\theight: 20px;\n}\n.kr-browser-bar a {\n\tcolor: gray;\n}"
  },
  {
    "path": "examples/hello-mui/examples/best-practices/list-to-detail/listview.html",
    "content": "<!doctype html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t\t<title>列表到详情最佳实践</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<link href=\"../../../css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<style type=\"text/css\">\n\t\t\t.mui-media {\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-table-view .mui-media-object {\n\t\t\t\tmax-width: initial;\n\t\t\t\twidth: 90px;\n\t\t\t\theight: 70px;\n\t\t\t}\n\t\t\t\n\t\t\t.meta-info {\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 115px;\n\t\t\t\tright: 15px;\n\t\t\t\tbottom: 8px;\n\t\t\t\tcolor: #8f8f94;\n\t\t\t}\n\t\t\t\n\t\t\t.meta-info .author,\n\t\t\t.meta-info .time {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t\t\n\t\t\t.meta-info .time {\n\t\t\t\tfloat: right;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-table-view:before,\n\t\t\t.mui-table-view:after {\n\t\t\t\theight: 0;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content>.mui-table-view:first-child {\n\t\t\t\tmargin-top: 1px;\n\t\t\t}\n\t\t\t\n\t\t\t.banner {\n\t\t\t\theight: 180px;\n\t\t\t\toverflow: hidden;\n\t\t\t\tposition: relative;\n\t\t\t\tbackground-position: center;\n\t\t\t\tbackground-color: #ccc;\n\t\t\t}\n\t\t\t\n\t\t\t.banner img {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: auto;\n\t\t\t}\n\t\t\t\n\t\t\t.banner .title {\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 15px;\n\t\t\t\tbottom: 15px;\n\t\t\t\twidth: 90%;\n\t\t\t\tfont-size: 16px;\n\t\t\t\tfont-weight: 400;\n\t\t\t\tline-height: 21px;\n\t\t\t\tcolor: white;\n\t\t\t\tz-index: 11;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<div class=\"mui-content\" id=\"news\">\n\t\t\t<!--顶部banner图 开始-->\n\t\t\t<div class=\"banner\">\n\t\t\t\t<a href=\"javascript:;\" :data-guid=\"banner.guid\" @tap=\"open_detail(banner)\">\n\t\t\t\t\t<img :src=\"banner.cover\" />\n\t\t\t\t\t<h2 class=\"title mui-ellipsis-2\">{{banner.title}}</h2>\n\t\t\t\t\t<div style=\"display: none;\">\n\t\t\t\t\t\t<div class=\"author\">{{banner.author}}</div>\n\t\t\t\t\t\t<div class=\"time\">{{banner.time}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t\t<!--顶部banner图 结束-->\n\n\t\t\t<!--列表信息流 开始-->\n\t\t\t<div id=\"list\" class=\"mui-scroll-wrapper\">\n\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media\" v-for=\"item in items\">\n\t\t\t\t\t\t\t<a href=\"javascript:;\" :data-guid=\"item.guid\" @tap=\"open_detail(item)\">\n\t\t\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-left\" :src=\"item.cover\">\n\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-ellipsis-2\">{{item.title}}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"meta-info\">\n\t\t\t\t\t\t\t\t\t<div class=\"author\">{{item.author}}</div>\n\t\t\t\t\t\t\t\t\t<div class=\"time\">{{item.time}}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<!--列表信息流 结束-->\n\t\t</div>\n\n\t\t<script src=\"../../../js/mui.min.js\"></script>\n\t\t<script src=\"vue.min.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tvar lastId = '',\n\t\t\t\tminId = ''; //最新新闻的id \n\t\t\tvar webview_detail = null; //详情页webview\n\t\t\tvar titleNView = { //详情页原生导航配置\n\t\t\t\tbackgroundColor: '#f7f7f7', //导航栏背景色\n\t\t\t\ttitleText: '', //导航栏标题\n\t\t\t\ttitleColor: '#000000', //文字颜色\n\t\t\t\ttype: 'transparent', //透明渐变样式\n\t\t\t\tautoBackButton: true, //自动绘制返回箭头\n\t\t\t\tsplitLine: { //底部分割线\n\t\t\t\t\tcolor: '#cccccc'\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//mui初始化，配置下拉刷新\n\t\t\tmui.init({\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#list',\n\t\t\t\t\tdown: {\n\t\t\t\t\t\tstyle: 'circle',\n\t\t\t\t\t\toffset: '0px',\n\t\t\t\t\t\tauto: true,\n\t\t\t\t\t\tcallback: pulldownRefresh\n\t\t\t\t\t},\n\t\t\t\t\tup: {\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\n\t\t\t *  下拉刷新获取最新列表 \n\t\t\t */\n\t\t\tfunction pulldownRefresh() {\n\n\t\t\t\tif(window.plus && plus.networkinfo.getCurrentType() === plus.networkinfo.CONNECTION_NONE) {\n\t\t\t\t\tplus.nativeUI.toast('似乎已断开与互联网的连接', {\n\t\t\t\t\t\tverticalAlign: 'top'\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar data = {\n\t\t\t\t\tcolumn: \"id,post_id,title,author_name,cover,published_at\" //需要的字段名\n\t\t\t\t}\n\n\t\t\t\tif(lastId) { //说明已有数据，目前处于下拉刷新，增加时间戳，触发服务端立即刷新，返回最新数据\n\t\t\t\t\tdata.lastId = lastId;\n\t\t\t\t\tdata.time = new Date().getTime() + \"\";\n\t\t\t\t}\n\n\t\t\t\t//请求顶部banner信息\n\t\t\t\tmui.getJSON(\"http://spider.dcloud.net.cn/api/banner/36kr\", data, function(rsp) {\n\t\t\t\t\tnews.banner = {\n\t\t\t\t\t\tguid: rsp.post_id,\n\t\t\t\t\t\ttitle: rsp.title,\n\t\t\t\t\t\tcover: rsp.cover,\n\t\t\t\t\t\tauthor: rsp.author_name,\n\t\t\t\t\t\ttime: dateUtils.format(rsp.published_at)\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\t//请求最新列表信息流\n\t\t\t\tmui.getJSON(\"http://spider.dcloud.net.cn/api/news\", data, function(rsp) {\n\t\t\t\t\tmui('#list').pullRefresh().endPulldownToRefresh();\n\t\t\t\t\tif(rsp && rsp.length > 0) {\n\t\t\t\t\t\tlastId = rsp[0].id; //保存最新消息的id，方便下拉刷新时使用\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!minId) {//首次拉取列表时保存最后一条消息的id，方便上拉加载时使用\n\t\t\t\t\t\t\tminId = rsp[rsp.length - 1].id; \t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnews.items = convert(rsp).concat(news.items);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * 上拉加载拉取历史列表 \n\t\t\t */\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tvar data = {\n\t\t\t\t\tcolumn: \"id,post_id,title,author_name,cover,published_at\" //需要的字段名\n\t\t\t\t};\n\n\t\t\t\tif(minId) { //说明已有数据，目前处于上拉加载，传递当前minId 返回历史数据\n\t\t\t\t\tdata.minId = minId;\n\t\t\t\t\tdata.time = new Date().getTime() + \"\";\n\t\t\t\t\tdata.pageSize = 10;\n\t\t\t\t}\n\t\t\t\t//请求历史列表信息流\n\t\t\t\tmui.getJSON(\"http://spider.dcloud.net.cn/api/news\", data, function(rsp) {\n\t\t\t\t\tmui('#list').pullRefresh().endPullupToRefresh();\n\t\t\t\t\tif(rsp && rsp.length > 0) {\n\t\t\t\t\t\tminId = rsp[rsp.length - 1].id; //保存最后一条消息的id，上拉加载时使用\n\t\t\t\t\t\tnews.items = news.items.concat(convert(rsp));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tmui.plusReady(function() {\n\t\t\t\t//预加载详情页\n\t\t\t\twebview_detail = mui.preload({\n\t\t\t\t\turl: 'detail.html',\n\t\t\t\t\tid: 'news_detail',\n\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\"render\": \"always\",\n\t\t\t\t\t\t\"popGesture\": \"hide\",\n\t\t\t\t\t\t\"bounce\": \"vertical\",\n\t\t\t\t\t\t\"bounceBackground\": \"#efeff4\",\n\t\t\t\t\t\t\"titleNView\": titleNView\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tvar news = new Vue({\n\t\t\t\tel: '#news',\n\t\t\t\tdata: {\n\t\t\t\t\tbanner: {}, //顶部banner数据\n\t\t\t\t\titems: [] //列表信息流数据\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\n\t\t\t * 打开新闻详情\n\t\t\t * \n\t\t\t * @param {Object} item 当前点击的新闻对象\n\t\t\t */\n\t\t\tfunction open_detail(item) {\n\t\t\t\t//触发子窗口变更新闻详情\n\t\t\t\tmui.fire(webview_detail, 'get_detail', {\n\t\t\t\t\tguid: item.guid,\n\t\t\t\t\ttitle: item.title,\n\t\t\t\t\tauthor: item.author,\n\t\t\t\t\ttime: item.time,\n\t\t\t\t\tcover: item.cover\n\t\t\t\t});\n\n\t\t\t\t//更改详情页原生导航条信息\n\t\t\t\ttitleNView.titleText = item.title;\n\t\t\t\twebview_detail.setStyle({\n\t\t\t\t\t\"titleNView\": titleNView\n\t\t\t\t});\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twebview_detail.show(\"slide-in-right\", 300);\n\t\t\t\t}, 150);\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * 1、将服务端返回数据，转换成前端需要的格式\n\t\t\t * 2、若服务端返回格式和前端所需格式相同，则不需要改功能\n\t\t\t * \n\t\t\t * @param {Array} items \n\t\t\t */\n\t\t\tfunction convert(items) {\n\t\t\t\tvar newItems = [];\n\t\t\t\titems.forEach(function(item) {\n\t\t\t\t\tnewItems.push({\n\t\t\t\t\t\tguid: item.post_id,\n\t\t\t\t\t\ttitle: item.title,\n\t\t\t\t\t\tauthor: item.author_name,\n\t\t\t\t\t\tcover: item.cover,\n\t\t\t\t\t\ttime: dateUtils.format(item.published_at)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn newItems;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * 格式化时间的辅助类，将一个时间转换成x小时前、y天前等\n\t\t\t */\n\t\t\tvar dateUtils = {\n\t\t\t\tUNITS: {\n\t\t\t\t\t'年': 31557600000,\n\t\t\t\t\t'月': 2629800000,\n\t\t\t\t\t'天': 86400000,\n\t\t\t\t\t'小时': 3600000,\n\t\t\t\t\t'分钟': 60000,\n\t\t\t\t\t'秒': 1000\n\t\t\t\t},\n\t\t\t\thumanize: function(milliseconds) {\n\t\t\t\t\tvar humanize = '';\n\t\t\t\t\tmui.each(this.UNITS, function(unit, value) {\n\t\t\t\t\t\tif(milliseconds >= value) {\n\t\t\t\t\t\t\thumanize = Math.floor(milliseconds / value) + unit + '前';\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t\treturn humanize || '刚刚';\n\t\t\t\t},\n\t\t\t\tformat: function(dateStr) {\n\t\t\t\t\tvar date = this.parse(dateStr)\n\t\t\t\t\tvar diff = Date.now() - date.getTime();\n\t\t\t\t\tif(diff < this.UNITS['天']) {\n\t\t\t\t\t\treturn this.humanize(diff);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar _format = function(number) {\n\t\t\t\t\t\treturn(number < 10 ? ('0' + number) : number);\n\t\t\t\t\t};\n\t\t\t\t\treturn date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' + _format(date.getHours()) + ':' + _format(date.getMinutes());\n\t\t\t\t},\n\t\t\t\tparse: function(str) { //将\"yyyy-mm-dd HH:MM:ss\"格式的字符串，转化为一个Date对象\n\t\t\t\t\tvar a = str.split(/[^0-9]/);\n\t\t\t\t\treturn new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);\n\t\t\t\t}\n\t\t\t};\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/buttons-with-badges.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t\t.mui-btn{\n\t\t        margin-top: 10px;\n\t\t        margin-right: 100px;\n\t\t        margin-left: 10px;\n\t\t    }\n\t\t</style>\n\t\t\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-back mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">带数字的按钮</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t    <div class=\"mui-content-padded\">\n\t\t        <button type=\"button\" class=\"mui-btn\">Badge button <span class=\"mui-badge\">1</span></button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-primary\">Badge button <span class=\"mui-badge mui-badge-primary\">2</span></button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-success\">Badge button <span class=\"mui-badge mui-badge-success\">12</span></button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-warning\">Badge button <span class=\"mui-badge mui-badge-warning\">121</span></button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-danger\">Badge button <span class=\"mui-badge mui-badge-danger\">999</span></button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-royal\">Badge button <span class=\"mui-badge mui-badge-royal\">999</span></button>\n\t\t\n\t\t    </div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/buttons-with-block.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t\t<style>\n\t\t\t.mui-content-padded{\n\t\t\t  \tmargin: 10px;\n\t\t\t  }\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-back mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">块级按钮</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t    <div class=\"mui-content-padded\">\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-block\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-block\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-success mui-btn-block\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-warning mui-btn-block\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-block\">Block button</button>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-royal mui-btn-block\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-block mui-btn-outlined\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-block mui-btn-outlined\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-success mui-btn-block mui-btn-outlined\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-warning mui-btn-block mui-btn-outlined\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-block mui-btn-outlined\">Block button</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-royal mui-btn-block mui-btn-outlined\">Block button</button>\n\t\t    </div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/buttons-with-icons.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\t .mui-btn{\n\t\t        margin-top: 10px;\n\t\t        margin-left: 10px;\n\t\t    }\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-back mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">带图标按钮</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t    <div class=\"mui-content-padded\">\n\t\t    \t\t<h5>图标居左：</h5>\n\t\t        <button type=\"button\" class=\"mui-btn mui-icon mui-icon-home\">\n\t\t            首页\n\t\t        </button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-primary mui-icon mui-icon-search\">\n\t\t            搜索\n\t\t        </button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-success mui-icon mui-icon-plus\">添加</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-outlined\">\n\t\t            <span class=\"mui-icon mui-icon-trash\"></span>\n\t\t            删除\t\n\t\t        </button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-link\">\n\t\t            <span class=\"mui-icon mui-icon-back\"></span>\n\t\t            返回\n\t\t        </button>\n\t\t        <h5>图标居右：</h5>\n\t\t        <button type=\"button\" class=\"mui-btn mui-icon mui-icon-home mui-right\">\n\t\t            首页\n\t\t        </button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-primary mui-icon mui-icon-search mui-right\">\n\t\t            搜索\n\t\t        </button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-success mui-icon mui-icon-plus mui-right\">添加</button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-outlined\">\n\t\t            删除\t\n\t\t            <span class=\"mui-icon mui-icon-trash\"></span>\n\t\t        </button>\n\t\t        <button type=\"button\" class=\"mui-btn mui-btn-link\">\n\t\t            下一步\n\t\t            <span class=\"mui-icon mui-icon-forward\"></span>\n\t\t        </button>\n\t\t    </div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/buttons-with-loading.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <meta charset=\"utf-8\">\n        <title>Hello MUI</title>\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n        <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n        <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n        <!--标准mui.css-->\n        <link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n        <!--App自定义的css-->\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n        <style>\n            input,\n            button,\n            .mui-btn {\n                margin: 5px 15px 10px 5px;\n                \n            }\n            .mui-spinner {\n                display: inline-block;\n                width: 24px;\n                height: 24px;\n                -webkit-transform-origin: 50%;\n                transform-origin: 50%;\n                -webkit-animation: spinner-spin 1s step-end infinite;\n                animation: spinner-spin 1s step-end infinite;\n            }\n            \n            .mui-spinner:after {\n                display: block;\n                content: \"\";\n                width: 100%;\n                height: 100%;\n                background-position: 50%;\n                background-size: 100%;\n                background-repeat: no-repeat;\n            }\n            \n            .mui-spinner-custom:after {\n                background-image: url(\"data:image/svg+xml;charset=utf-8,<svg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><defs><line id='l' x1='60' x2='60' y1='7' y2='27' stroke='red' stroke-width='11' stroke-linecap='round'/></defs><g><use xlink:href='%23l' opacity='.27'/><use xlink:href='%23l' opacity='.27' transform='rotate(30 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(60 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(90 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(120 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(150 60,60)'/><use xlink:href='%23l' opacity='.37' transform='rotate(180 60,60)'/><use xlink:href='%23l' opacity='.46' transform='rotate(210 60,60)'/><use xlink:href='%23l' opacity='.56' transform='rotate(240 60,60)'/><use xlink:href='%23l' opacity='.66' transform='rotate(270 60,60)'/><use xlink:href='%23l' opacity='.75' transform='rotate(300 60,60)'/><use xlink:href='%23l' opacity='.85' transform='rotate(330 60,60)'/></g></svg>\");\n            }\n        </style>\n    </head>\n\n    <body>\n        <header class=\"mui-bar mui-bar-nav\">\n            <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n            <h1 class=\"mui-title\">加载中按钮插件</h1>\n        </header>\n        <div class=\"mui-content\">\n            <div class=\"mui-content-padded\">\n            \t\t<p style=\"margin-bottom: 25px;\">当用户点击按钮后，需要向服务端提交数据或等待服务端响应时，\n            \t\t\t常常需要提示“正在提交”，并将按钮设置为disabled，避免用户重复点击、重复提交；\n            \t\t\tmui的加载中按钮就实现了类似效果，点击如下按钮体验：</p>\n                <h5>左侧loading图标：</h5>\n                <button type=\"button\" class=\"mui-btn mui-btn-primary\" >确认</button>\n                <h5>右侧loading图标：</h5>\n                <button type=\"button\" class=\"mui-btn mui-btn-primary\" data-loading-text = \"提交中\" data-loading-icon-position=\"right\">确认</button>\n                <h5>无loading图标：</h5>\n                <button type=\"button\" class=\"mui-btn mui-btn-primary\" data-loading-icon=\"\">确认</button>\n                <h5>自定义loading图标：</h5>\n                <button type=\"button\" class=\"mui-btn mui-btn-primary\" data-loading-icon=\"mui-spinner mui-spinner-custom\">确认</button>\n                <h5>其他button效果</h5>\n                <button type=\"button\" class=\"mui-btn\">确认</button>\n                <button type=\"button\" class=\"mui-btn mui-btn-outlined mui-btn-primary\">确认</button>\n                <button type=\"button\" class=\"mui-btn mui-btn-primary\">确认 <span class=\"mui-badge mui-badge-primary\">2</span></button>\n                <button type=\"button\" class=\"mui-btn mui-btn-block mui-btn-primary\">确认</button>\n            </div>\n        </div>\n    </body>\n    <script src=\"../js/mui.min.js\"></script>\n    <script>\n        mui.init({\n            swipeBack: true //启用右滑关闭功能\n        });\n        mui(document.body).on('tap', '.mui-btn', function(e) {\n            mui(this).button('loading');\n            setTimeout(function() {\n                mui(this).button('reset');\n            }.bind(this), 2000);\n        });\n    </script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/buttons.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t\tinput, button, .mui-btn {\n\t\t\t\tmargin-top: 10px;\n\t\t\t\tmargin-left: 10px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">普通按钮</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h5>有底色按钮：</h5>\n\t\t\t\t<button type=\"button\" class=\"mui-btn\">\n\t\t\t\t\t默认\n\t\t\t\t</button>\n\t\t\t\t<div class=\"mui-btn mui-btn-primary\">\n\t\t\t\t\t蓝色\n\t\t\t\t</div>\n\t\t\t\t<span class=\"mui-btn mui-btn-success\">\n\t\t\t\t\t绿色\n\t\t\t\t</span>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-warning\">\n\t\t\t\t\t黄色\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-danger\">\n\t\t\t\t\t红色\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-royal\">\n\t\t\t\t\t紫色\n\t\t\t\t</button>\n\t\t\n\t\t\t\t<h5 style=\"margin-top: 10px;\">无底色按钮（使用父元素的背景色）：</h5>\t\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-outlined\">\n\t\t\t\t\t默认\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-outlined\">\n\t\t\t\t\t操作\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-success mui-btn-outlined\">\n\t\t\t\t\t成功\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-warning mui-btn-outlined\">\n\t\t\t\t\t警告\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-outlined\">\n\t\t\t\t\t危险\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-royal mui-btn-outlined\">\n\t\t\t\t\t高贵\n\t\t\t\t</button>\n\t\t\t\t<h5 style=\"margin-top: 15px;\">链接按钮：</h5>\t\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-link\">\n\t\t\t\t\t添加\n\t\t\t\t</button>\n\t\t\t\t<h5 style=\"margin-top: 10px;\">默认input标签样式：</h5>\t\n\t\t\t\t<input type=\"button\" value=\"type=button\" />\n\t\t\t\t<input type=\"reset\" value=\"type=reset\" />\n\t\t\t\t<input type=\"submit\" value=\"type=submit\" />\n\t\t\t\t<h5 style=\"margin-top: 10px;\">默认button标签样式：</h5>\t\n\t\t\t\t<button type=\"button\" >按钮</button>\n\t\t\n\t\t\t</div>\n\t\t</div>\n\t\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/card.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">cardview（卡片视图）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<div class=\"mui-card-content\">\n\t\t\t\t\t<div class=\"mui-card-content-inner\">\n\t\t\t\t\t\t这是一个最简单的卡片视图控件；卡片视图常用来显示完整独立的一段信息，比如一篇文章的预览图、作者信息、点赞数量等\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<div class=\"mui-card-header\">页眉</div>\n\t\t\t\t<div class=\"mui-card-content\">\n\t\t\t\t\t<div class=\"mui-card-content-inner\">\n\t\t\t\t\t\t包含页眉页脚的卡片，页眉常用来显示面板标题，页脚用来显示额外信息或支持的操作（比如点赞、评论等）\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-card-footer\">页脚</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<div class=\"mui-card-header mui-card-media\" style=\"height:40vw;background-image:url(../images/cbd.jpg)\"></div>\n\t\t\t\t<div class=\"mui-card-content\">\n\t\t\t\t\t<div class=\"mui-card-content-inner\">\n\t\t\t\t\t\t<p>Posted on January 18, 2016</p>\n\t\t\t\t\t\t<p style=\"color: #333;\">这里显示文章摘要，让读者对文章内容有个粗略的概念...</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-card-footer\">\n\t\t\t\t\t<a class=\"mui-card-link\">Like</a>\n\t\t\t\t\t<a class=\"mui-card-link\">Read more</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t\n\t\t\t<!--<div class=\"mui-card\">\r\n\t\t\t\t<div class=\"mui-card-header mui-card-media\">\r\n\t\t\t\t\t<div class=\"mui-card-media-object mui-pull-left\">\r\n\t\t\t\t\t\t<img src=\"../images/logo.png\" width=\"34px\" height=\"34px\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"mui-card-media-body\">\r\n\t\t\t\t\t\t小M\r\n\t\t\t\t\t\t<p class=\"mui-ellipsis\">发表于 6小时前</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"mui-card-content mui-card-media\" style=\"height:40vw;background-image:url(../images/yuantiao.jpg)\"></div>\r\n\t\t\t\t<div class=\"mui-card-footer\">\r\n\t\t\t\t\t<a class=\"mui-card-link\">Like</a>\r\n\t\t\t\t\t<a class=\"mui-card-link\">Comment</a>\r\n\t\t\t\t\t<a class=\"mui-card-link\">Read more</a>\r\n\t\t\t\t</div>\r\n\t\t\t</div>-->\n\t\t\t\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<div class=\"mui-card-header mui-card-media\">\n\t\t\t\t\t<img src=\"../images/logo.png\" />\r\n\t\t\t\t\t<div class=\"mui-media-body\">\r\n\t\t\t\t\t\t小M\r\n\t\t\t\t\t\t<p>发表于 2016-06-30 15:30</p>\r\n\t\t\t\t\t</div>\n\t\t\t\t\t<!--<img class=\"mui-pull-left\" src=\"../images/logo.png\" width=\"34px\" height=\"34px\" />\r\n\t\t\t\t\t<h2>小M</h2>\r\n\t\t\t\t\t<p>发表于 2016-06-30 15:30</p>-->\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-card-content\" >\r\n\t\t\t\t\t<img src=\"../images/yuantiao.jpg\" alt=\"\" width=\"100%\"/>\r\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-card-footer\">\n\t\t\t\t\t<a class=\"mui-card-link\">Like</a>\n\t\t\t\t\t<a class=\"mui-card-link\">Comment</a>\n\t\t\t\t\t<a class=\"mui-card-link\">Read more</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/checkbox.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t</head>\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">checkbox（复选框）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<h5 class=\"mui-content-padded\">图标左对齐</h5>\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row mui-checkbox mui-left\">\n\t\t\t\t\t\t<label>checked：false</label>\n\t\t\t\t\t\t<input name=\"checkbox\" value=\"Item 1\" type=\"checkbox\" >\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-checkbox mui-left\">\n\t\t\t\t\t\t<label>checked：true</label>\n\t\t\t\t\t\t<input name=\"checkbox\" value=\"Item 2\" type=\"checkbox\" checked>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-checkbox mui-left mui-disabled\">\n\t\t\t\t\t\t<label>disabled checkbox</label>\n\t\t\t\t\t\t<input name=\"checkbox\" type=\"checkbox\" disabled=\"disabled\">\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">图标右对齐</h5>\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row mui-checkbox\">\n\t\t\t\t\t\t<label>checked：false</label>\n\t\t\t\t\t\t<input name=\"checkbox1\" value=\"Item 3\" type=\"checkbox\" >\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-checkbox\">\n\t\t\t\t\t\t<label>checked：true</label>\n\t\t\t\t\t\t<input name=\"checkbox1\" value=\"Item 4\" type=\"checkbox\" checked>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-checkbox mui-disabled\">\n\t\t\t\t\t\t<label>disabled checkbox</label>\n\t\t\t\t\t\t<input name=\"checkbox1\" type=\"checkbox\" disabled=\"disabled\">\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\tmui('.mui-input-group').on('change', 'input', function() {\n\t\t\tvar value = this.checked?\"true\":\"false\";\n\t\t\tthis.previousElementSibling.innerText = \"checked：\"+value;\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/date.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />-->\n\t\t<style>\n\t\t\t#info {\n\t\t\t\tpadding: 20px 10px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-btn {\n\t\t\t\tfont-size: 16px;\n\t\t\t\tpadding: 8px;\n\t\t\t\tmargin: 3px;\n\t\t\t}\n\t\t</style>\n\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">native模式</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t\n \t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h5 class=\"mui-content-padded\">日期示例</h5>\n\t\t\t\t<button id='pickDateBtn' type=\"button\" class=\"mui-btn mui-btn-block\">选择日期</button>\n\t\t\t\t<h5 class=\"mui-content-padded\">时间示例</h5>\n\t\t\t\t<button id='pickTimeBtn' type=\"button\" class=\"mui-btn mui-btn-block\">选择时间</button>\n\t\t\t\t<div id=\"info\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\t //mui初始化\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar info = document.getElementById(\"info\");\n\t\t\t\n\t\t\tdocument.getElementById(\"pickDateBtn\").addEventListener('tap', function() {\n\t\t\t\tvar dDate = new Date();\n\t\t\t\tdDate.setFullYear(2014, 7, 16);\n\t\t\t\tvar minDate = new Date();\n\t\t\t\tminDate.setFullYear(2010, 0, 1);\n\t\t\t\tvar maxDate = new Date();\n\t\t\t\tmaxDate.setFullYear(2016, 11, 31);\n\t\t\t\tplus.nativeUI.pickDate(function(e) {\n\t\t\t\t\tvar d = e.date;\n\t\t\t\t\tinfo.innerText = '您选择的日期是:' + d.getFullYear() + \"-\" + (d.getMonth() + 1) + \"-\" + d.getDate();\n\t\t\t\t}, function(e) {\n\t\t\t\t\tinfo.innerText = \"您没有选择日期\";\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"请选择日期\",\n\t\t\t\t\tdate: dDate,\n\t\t\t\t\tminDate: minDate,\n\t\t\t\t\tmaxDate: maxDate\n\t\t\t\t});\n\t\t\t})\n\t\t\t document.getElementById(\"pickTimeBtn\").addEventListener('tap', function() {\n\t\t\t\tvar dTime = new Date();\n\t\t\t\tdTime.setHours(6, 0);\n\t\t\t\tplus.nativeUI.pickTime(function(e) {\n\t\t\t\t\tvar d = e.date;\n\t\t\t\t\tinfo.innerText = \"您选择的时间是：\" + d.getHours() + \":\" + d.getMinutes();\n\t\t\t\t}, function(e) {\n\t\t\t\t\tinfo.innerText = \"您没有选择时间\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"请选择时间\",\n\t\t\t\t\tis24Hour: true,\n\t\t\t\t\ttime: dTime\n\t\t\t\t});\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/dialog.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />-->\n\t\t<style>\n\t\t\t.mui-btn {\n\t\t\t\tdisplay: block;\n\t\t\t\twidth: 120px;\n\t\t\t\tmargin: 10px auto;\n\t\t\t}\n\t\t\t\n\t\t\t#info {\n\t\t\t\tpadding: 20px 10px;\n\t\t\t}\n\t\t</style>\n\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">dialog（消息框）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\" style=\"margin: 5px;text-align: center;\">\n\t\t\t\t<button id='alertBtn' type=\"button\" class=\"mui-btn mui-btn-blue mui-btn-outlined\">警告消息框</button>\n\t\t\t\t<button id='confirmBtn' type=\"button\" class=\"mui-btn mui-btn-blue mui-btn-outlined\">确认消息框</button>\n\t\t\t\t<button id='promptBtn' type=\"button\" class=\"mui-btn mui-btn-blue mui-btn-outlined\">输入对话框</button>\n\t\t\t\t<button id='toastBtn' type=\"button\" class=\"mui-btn mui-btn-blue mui-btn-outlined\">自动消失提示框</button>\n\t\t\t\t<div id=\"info\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\t//mui初始化\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar info = document.getElementById(\"info\");\n\t\t\tdocument.getElementById(\"alertBtn\").addEventListener('tap', function() {\n\t\t\t\tmui.alert('欢迎使用Hello MUI', 'Hello MUI', function() {\n\t\t\t\t\tinfo.innerText = '你刚关闭了警告框';\n\t\t\t\t});\n\t\t\t});\n\t\t\tdocument.getElementById(\"confirmBtn\").addEventListener('tap', function() {\n\t\t\t\tvar btnArray = ['否', '是'];\n\t\t\t\tmui.confirm('MUI是个好框架，确认？', 'Hello MUI', btnArray, function(e) {\n\t\t\t\t\tif (e.index == 1) {\n\t\t\t\t\t\tinfo.innerText = '你刚确认MUI是个好框架';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinfo.innerText = 'MUI没有得到你的认可，继续加油'\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t\t\tdocument.getElementById(\"promptBtn\").addEventListener('tap', function(e) {\n\t\t\t\te.detail.gesture.preventDefault(); //修复iOS 8.x平台存在的bug，使用plus.nativeUI.prompt会造成输入法闪一下又没了\n\t\t\t\tvar btnArray = ['取消', '确定'];\n\t\t\t\tmui.prompt('请输入你对MUI的评语：', '性能好', 'Hello MUI', btnArray, function(e) {\n\t\t\t\t\tif (e.index == 1) {\n\t\t\t\t\t\tinfo.innerText = '谢谢你的评语：' + e.value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinfo.innerText = '你点了取消按钮';\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t\t\tdocument.getElementById(\"toastBtn\").addEventListener('tap', function() {\n\t\t\t\tmui.toast('欢迎体验Hello MUI');\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/dtpicker.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t\t<!--<link href=\"../css/mui.picker.css\" rel=\"stylesheet\" />\n\t\t<link href=\"../css/mui.dtpicker.css\" rel=\"stylesheet\" />-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/mui.picker.min.css\" />\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody,\n\t\t\t.mui-content {\n\t\t\t\theight: 0px;\n\t\t\t\tmargin: 0px;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\th5.mui-content-padded {\n\t\t\t\tmargin-left: 3px;\n\t\t\t\tmargin-top: 20px !important;\n\t\t\t}\n\t\t\th5.mui-content-padded:first-child {\n\t\t\t\tmargin-top: 12px !important;\n\t\t\t}\n\t\t\t.mui-btn {\n\t\t\t\tfont-size: 16px;\n\t\t\t\tpadding: 8px;\n\t\t\t\tmargin: 3px;\n\t\t\t}\n\t\t\t.ui-alert {\n\t\t\t\ttext-align: center;\n\t\t\t\tpadding: 20px 10px;\n\t\t\t\tfont-size: 16px;\n\t\t\t}\n\t\t\t* {\n\t\t\t\t-webkit-touch-callout: none;\n\t\t\t\t-webkit-user-select: none;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">dtpicker（日期时间选择器）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h5 class=\"mui-content-padded\">常规示例</h5>\n\t\t\t\t<button id='demo1' data-options='{}' class=\"btn mui-btn mui-btn-block\">选择日期时间 ...</button>\n\t\t\t\t<h5 class=\"mui-content-padded\">设定年份区间</h5>\n\t\t\t\t<button id='demo2' data-options='{\"type\":\"date\",\"beginYear\":2014,\"endYear\":2016}' class=\"btn mui-btn mui-btn-block\">选择日期 ...</button>\n\t\t\t\t<h5 class=\"mui-content-padded\">设定选中的时间</h5>\n\t\t\t\t<button id='demo3' data-options='{\"value\":\"2015-10-10 10:10\",\"beginYear\":2010,\"endYear\":2020}' class=\"btn mui-btn mui-btn-block\">选择日期时间 ...</button>\n\t\t\t\t<h5 class=\"mui-content-padded\">指定类型</h5>\n\t\t\t\t<button id='demo4' data-options='{\"type\":\"date\"}' class=\"btn mui-btn mui-btn-block\">选择日期 ...</button>\n\t\t\t\t<button id='demo5' data-options='{\"type\":\"time\"}' class=\"btn mui-btn mui-btn-block\">选择时间 ...</button>\n\t\t\t\t<button id='demo6' data-options='{\"type\":\"month\"}' class=\"btn mui-btn mui-btn-block\">选择月份 ...</button>\n\t\t\t\t<h5 class=\"mui-content-padded\">自定义数据</h5>\n\t\t\t\t<button id='demo7' data-options='{\"type\":\"hour\",\"customData\":{\"h\":[{\"text\":\"上午\",\"value\":\"上午\"},{\"text\":\"下午\",\"value\":\"下午\"},{\"text\":\"晚上\",\"value\":\"晚上\"}]},\"labels\":[\"年\", \"月\", \"日\", \"时段\", \"分\"]}' class=\"btn mui-btn mui-btn-block\">选择时段 ...</button>\n\t\t\t\t<div id='result' class=\"ui-alert\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<!--<script src=\"../js/mui.picker.js\"></script>\n\t\t<script src=\"../js/mui.dtpicker.js\"></script>-->\n\t\t<script src=\"../js/mui.picker.min.js\"></script>\n\t\t<script>\n\t\t\t(function($) {\n\t\t\t\t$.init();\n\t\t\t\tvar result = $('#result')[0];\n\t\t\t\tvar btns = $('.btn');\n\t\t\t\tbtns.each(function(i, btn) {\n\t\t\t\t\tbtn.addEventListener('tap', function() {\n\t\t\t\t\t\tvar _self = this;\n\t\t\t\t\t\tif(_self.picker) {\n\t\t\t\t\t\t\t_self.picker.show(function (rs) {\n\t\t\t\t\t\t\t\tresult.innerText = '选择结果: ' + rs.text;\n\t\t\t\t\t\t\t\t_self.picker.dispose();\n\t\t\t\t\t\t\t\t_self.picker = null;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar optionsJson = this.getAttribute('data-options') || '{}';\n\t\t\t\t\t\t\tvar options = JSON.parse(optionsJson);\n\t\t\t\t\t\t\tvar id = this.getAttribute('id');\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t * 首次显示时实例化组件\n\t\t\t\t\t\t\t * 示例为了简洁，将 options 放在了按钮的 dom 上\n\t\t\t\t\t\t\t * 也可以直接通过代码声明 optinos 用于实例化 DtPicker\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t_self.picker = new $.DtPicker(options);\n\t\t\t\t\t\t\t_self.picker.show(function(rs) {\n\t\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t\t * rs.value 拼合后的 value\n\t\t\t\t\t\t\t\t * rs.text 拼合后的 text\n\t\t\t\t\t\t\t\t * rs.y 年，可以通过 rs.y.vaue 和 rs.y.text 获取值和文本\n\t\t\t\t\t\t\t\t * rs.m 月，用法同年\n\t\t\t\t\t\t\t\t * rs.d 日，用法同年\n\t\t\t\t\t\t\t\t * rs.h 时，用法同年\n\t\t\t\t\t\t\t\t * rs.i 分（minutes 的第二个字母），用法同年\n\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\tresult.innerText = '选择结果: ' + rs.text;\n\t\t\t\t\t\t\t\t/* \n\t\t\t\t\t\t\t\t * 返回 false 可以阻止选择框的关闭\n\t\t\t\t\t\t\t\t * return false;\n\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t\t * 释放组件资源，释放后将将不能再操作组件\n\t\t\t\t\t\t\t\t * 通常情况下，不需要示放组件，new DtPicker(options) 后，可以一直使用。\n\t\t\t\t\t\t\t\t * 当前示例，因为内容较多，如不进行资原释放，在某些设备上会较慢。\n\t\t\t\t\t\t\t\t * 所以每次用完便立即调用 dispose 进行释放，下次用时再创建新实例。\n\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t_self.picker.dispose();\n\t\t\t\t\t\t\t\t_self.picker = null;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}, false);\n\t\t\t\t});\n\t\t\t})(mui);\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/echarts.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>ECharts 示例</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!-- <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" /> -->\n\t\t<style>\n\t\t\t.chart {\n\t\t\t\theight: 200px;\n\t\t\t\tmargin: 0px;\n\t\t\t\tpadding: 0px;\n\t\t\t}\n\t\t\th5 {\n\t\t\t\tmargin-top: 30px;\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t\th5:first-child {\n\t\t\t\tmargin-top: 15px;\n\t\t\t}\n\t\t</style>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">chart（EChart图表）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p style=\"text-indent: 22px;\">\n\t\t\t\t\t这是mui集成百度ECharts的图表示例，ECharts的详细用法及 API 请参考其官方网站: <a id='echarts' data-url='http://echarts.baidu.com'>http://echarts.baidu.com</a>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h5>柱图示例</h5>\n\t\t\t\t<div class=\"chart\" id=\"barChart\"></div>\n\t\t\t\t<h5>线图示例</h5>\n\t\t\t\t<div class=\"chart\" id=\"lineChart\"></div>\n\t\t\t\t<h5>饼图示例</h5>\n\t\t\t\t<div class=\"chart\" id=\"pieChart\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t\n\t\t<script src=\"../libs/echarts-all.js\"></script>\n\t\t<script>\n\t\t\tvar getOption = function(chartType) {\n\t\t\t\tvar chartOption = chartType == 'pie' ? {\n\t\t\t\t\tcalculable: false,\n\t\t\t\t\tseries: [{\n\t\t\t\t\t\tname: '访问来源',\n\t\t\t\t\t\ttype: 'pie',\n\t\t\t\t\t\tradius: '65%',\n\t\t\t\t\t\tcenter: ['50%', '50%'],\n\t\t\t\t\t\tdata: [{\n\t\t\t\t\t\t\tvalue: 335,\n\t\t\t\t\t\t\tname: '直接访问'\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\tvalue: 310,\n\t\t\t\t\t\t\tname: '邮件营销'\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\tvalue: 234,\n\t\t\t\t\t\t\tname: '联盟广告'\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\tvalue: 135,\n\t\t\t\t\t\t\tname: '视频广告'\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\tvalue: 1548,\n\t\t\t\t\t\t\tname: '搜索引擎'\n\t\t\t\t\t\t}]\n\t\t\t\t\t}]\n\t\t\t\t} : {\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdata: ['蒸发量', '降水量']\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tx: 35,\n\t\t\t\t\t\tx2: 10,\n\t\t\t\t\t\ty: 30,\n\t\t\t\t\t\ty2: 25\n\t\t\t\t\t},\n\t\t\t\t\ttoolbox: {\n\t\t\t\t\t\tshow: false,\n\t\t\t\t\t\tfeature: {\n\t\t\t\t\t\t\tmark: {\n\t\t\t\t\t\t\t\tshow: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdataView: {\n\t\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\t\treadOnly: false\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmagicType: {\n\t\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\t\ttype: ['line', 'bar']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trestore: {\n\t\t\t\t\t\t\t\tshow: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsaveAsImage: {\n\t\t\t\t\t\t\t\tshow: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tcalculable: false,\n\t\t\t\t\txAxis: [{\n\t\t\t\t\t\ttype: 'category',\n\t\t\t\t\t\tdata: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']\n\t\t\t\t\t}],\n\t\t\t\t\tyAxis: [{\n\t\t\t\t\t\ttype: 'value',\n\t\t\t\t\t\tsplitArea: {\n\t\t\t\t\t\t\tshow: true\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tseries: [{\n\t\t\t\t\t\tname: '蒸发量',\n\t\t\t\t\t\ttype: chartType,\n\t\t\t\t\t\tdata: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]\n\t\t\t\t\t}, {\n\t\t\t\t\t\tname: '降水量',\n\t\t\t\t\t\ttype: chartType,\n\t\t\t\t\t\tdata: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]\n\t\t\t\t\t}]\n\t\t\t\t};\n\t\t\t\treturn chartOption;\n\t\t\t};\n\t\t\tvar byId = function(id) {\n\t\t\t\treturn document.getElementById(id);\n\t\t\t};\n\t\t\tvar barChart = echarts.init(byId('barChart'));\n\t\t\tbarChart.setOption(getOption('bar'));\n\t\t\tvar lineChart = echarts.init(byId('lineChart'));\n\t\t\tlineChart.setOption(getOption('line'));\n\t\t\tvar pieChart = echarts.init(byId('pieChart'));\n\t\t\tpieChart.setOption(getOption('pie'));\n\t\t\tbyId(\"echarts\").addEventListener('tap',function(){\n\t\t\t\tvar url = this.getAttribute('data-url');\n\t\t\t\tplus.runtime.openURL(url);\n\t\t\t},false);\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/feedback.html",
    "content": "<!doctype html>\n<html lang=\"en\" class=\"feedback\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title>问题反馈</title>\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/mui.min.css\" />\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/feedback.css\" />\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<button id=\"submit\" class=\"mui-btn mui-btn-blue mui-btn-link mui-pull-right\">发送</button>\n\t\t\t<h1 class=\"mui-title\">问题反馈</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<div class=\"mui-inline\">问题和意见</div>\n\t\t\t\t<a class=\"mui-pull-right mui-inline\" href=\"#popover\">\n\t\t\t\t\t快捷输入\n\t\t\t\t\t<span class=\"mui-icon mui-icon-arrowdown\"></span>\n\t\t\t\t</a>\n\t\t\t\t<!--快捷输入具体内容，开发者可自己替换常用语-->\n\t\t\t\t<div id=\"popover\" class=\"mui-popover\">\n\t\t\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t<!--仅流应用环境下显示-->\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell stream\">\n\t\t\t\t\t\t\t\t\t<a href=\"#\">桌面快捷方式创建失败</a>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">界面显示错乱</a></li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">启动缓慢，卡出翔了</a></li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">偶发性崩溃</a></li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">UI无法直视，丑哭了</a></li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"row mui-input-row\">\n\t\t\t\t<textarea id='question' class=\"mui-input-clear question\" placeholder=\"请详细描述你的问题和意见...\"></textarea>\n\t\t\t</div>\n\t\t\t<p>图片(选填,提供问题截图,总大小10M以下)</p>\n\t\t\t<div id='image-list' class=\"row image-list\"></div>\n\t\t\t<p>QQ/邮箱</p>\n\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t<input id='contact' type=\"text\" class=\"mui-input-clear contact\" placeholder=\"(选填,方便我们联系你 )\" />\n\t\t\t</div>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<div class=\"mui-inline\">应用评分</div>\n\t\t\t\t<div class=\"icons mui-inline\" style=\"margin-left: 6px;\">\n\t\t\t\t\t<i data-index=\"1\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t<i data-index=\"2\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t<i data-index=\"3\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t<i data-index=\"4\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t<i data-index=\"5\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t</div>\n\t\t\t</div><br />\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script src=\" ../js/feedback.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tmui.init();\n\t\t\tmui('.mui-scroll-wrapper').scroll();\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/grid-default.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t</head>\n\n\t<body>\n\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">9宫格默认样式</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t        <ul class=\"mui-table-view mui-grid-view mui-grid-9\">\n\t\t            <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-home\"></span>\n\t\t                    <div class=\"mui-media-body\">Home</div></a></li>\n\t\t            <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-email\"><span class=\"mui-badge\">5</span></span>\n\t\t                    <div class=\"mui-media-body\">Email</div></a></li>\n\t\t            <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-chatbubble\"></span>\n\t\t                    <div class=\"mui-media-body\">Chat</div></a></li>\n\t\t            <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-location\"></span>\n\t\t                    <div class=\"mui-media-body\">location</div></a></li>\n\t\t            <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-search\"></span>\n\t\t                    <div class=\"mui-media-body\">Search</div></a></li>\n\t\t            <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-phone\"></span>\n\t\t                    <div class=\"mui-media-body\">Phone</div></a></li>\n\t\t            <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-gear\"></span>\n\t\t                    <div class=\"mui-media-body\">Setting</div></a></li>\n\t\t            <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-info\"></span>\n\t\t                    <div class=\"mui-media-body\">about</div></a></li>\n\t\t           <li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\"><a href=\"#\">\n\t\t                    <span class=\"mui-icon mui-icon-more\"></span>\n\t\t                    <div class=\"mui-media-body\">more</div></a></li>\n\t\t        </ul> \n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/grid-pagination.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />-->\n\t\t<style>\n\t\t\t.mui-slider-indicator {\n\t\t\t\tbottom: 0;\n\t\t\t}\n\t\t\t.mui-slider {\n\t\t\t\tbackground-color: #f2f2f2;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">左右拖动分页9宫</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t循环\n\t\t\t\t\t<div id=\"Gallery_Toggle\" class=\"mui-switch\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<div id=\"Gallery\" class=\"mui-slider\" style=\"margin-top:15px;\">\n\t\t\t\t<div class=\"mui-slider-group\">\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-grid-view mui-grid-9\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-home\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Home</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-email\"><span class=\"mui-badge\">5</span></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Email</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-chatbubble\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Chat</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-location\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">location</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-search\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Search</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-phone\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Phone</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-gear\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Setting</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-info\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">about</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-more\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">more</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-grid-view mui-grid-9\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-home\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Home</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-email\"><span class=\"mui-badge\">5</span></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Email</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-chatbubble\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Chat</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-location\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">location</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-search\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Search</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-phone\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Phone</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-gear\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Setting</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-info\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">about</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-more\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">more</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-grid-view mui-grid-9\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-home\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Home</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-email\"><span class=\"mui-badge\">5</span></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Email</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-chatbubble\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Chat</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-location\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">location</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-search\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Search</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-phone\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Phone</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-gear\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">Setting</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-info\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">about</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\">\n\t\t\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-more\"></span>\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">more</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-slider-indicator\">\n\t\t\t\t\t<div class=\"mui-indicator mui-active\"></div>\n\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init();\n\t\tmui.ready(function() {\n\t\t\tvar slider = document.getElementById('Gallery');\n\t\t\tvar group = slider.querySelector('.mui-slider-group');\n\t\t\tvar items = mui('.mui-slider-item', group);\n\t\t\t//克隆第一个节点\n\t\t\tvar first = items[0].cloneNode(true);\n\t\t\tfirst.classList.add('mui-slider-item-duplicate');\n\t\t\t//克隆最后一个节点\n\t\t\tvar last = items[items.length - 1].cloneNode(true);\n\t\t\tlast.classList.add('mui-slider-item-duplicate');\n\t\t\t//处理是否循环逻辑，若支持循环，需支持两点：\n\t\t\t//1、在.mui-slider-group节点上增加.mui-slider-loop类\n\t\t\t//2、重复增加2个循环节点，图片顺序变为：N、1、2...N、1\n\t\t\tvar sliderApi = mui(slider).slider();\n\n\t\t\tfunction toggleLoop(loop) {\n\t\t\t\t\tif (loop) {\n\t\t\t\t\t\tgroup.classList.add('mui-slider-loop');\n\t\t\t\t\t\tgroup.insertBefore(last, group.firstChild);\n\t\t\t\t\t\tgroup.appendChild(first);\n\t\t\t\t\t\tsliderApi.refresh();\n\t\t\t\t\t\tsliderApi.gotoItem(0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgroup.classList.remove('mui-slider-loop');\n\t\t\t\t\t\tgroup.removeChild(first);\n\t\t\t\t\t\tgroup.removeChild(last);\n\t\t\t\t\t\tsliderApi.refresh();\n\t\t\t\t\t\tsliderApi.gotoItem(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//按下“循环”按钮的处理逻辑；\n\t\t\tdocument.getElementById('Gallery_Toggle').addEventListener('toggle', function(e) {\n\t\t\t\tvar loop = e.detail.isActive;\n\t\t\t\ttoggleLoop(loop);\n\t\t\t});\n\t\t});\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/guide.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\t#close {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 160px;\n\t\t\t\tleft: 50%;\n\t\t\t\tmargin-left: -80px;\n\t\t\t\tbottom: 15%;\n\t\t\t\tpadding: 10px;\n\t\t\t\tcolor: #fff;\n\t\t\t\tborder-color: #fff;\n\t\t\t}\n\t\t\t.item-logo {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tposition: relative;\n\t\t\t}\n\t\t\t.item-logo a {\n\t\t\t\twidth: 200px;\n\t\t\t\theight: 200px;\n\t\t\t\tdisplay: block;\n\t\t\t\tborder: 1px solid #FFFFFF;\n\t\t\t\tborder-color: rgba(255, 255, 255, 0.5);\n\t\t\t\ttext-align: center;\n\t\t\t\tline-height: 200px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tfont-size: 40px;\n\t\t\t\tcolor: #fff;\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 15%;\n\t\t\t\tleft: 50%;\n\t\t\t\tmargin-left: -100px;\n\t\t\t}\n\t\t\t.animate {\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 0;\n\t\t\t\tbottom: 15%;\n\t\t\t\twidth: 100%;\n\t\t\t\tcolor: #fff;\n\t\t\t\tdisplay: -moz-box;\n\t\t\t}\n\t\t\t.animate h2 {\n\t\t\t\ttext-align: center;\n\t\t\t\tmargin-bottom: 20px;\n\t\t\t}\n\t\t\t.animate li {\n\t\t\t\twidth: 50%;\n\t\t\t\theight: 30px;\n\t\t\t\tline-height: 30px;\n\t\t\t\tlist-style: none;\n\t\t\t\tfont-size: 16px;\n\t\t\t\ttext-align: right;\n\t\t\t}\n\t\t\t.animate li:nth-child(3) {\n\t\t\t\ttext-align: left;\n\t\t\t\tfloat: right;\n\t\t\t}\n\t\t\t.animated {\n\t\t\t\t-webkit-animation-duration: 1s;\n\t\t\t\t-webkit-animation-play-state: paused;\n\t\t\t\t-webkit-animation-fill-mode: both;\n\t\t\t}\n\t\t\t.guide-show .bounceInDown {\n\t\t\t\t-webkit-animation-name: bounceInDown;\n\t\t\t\t-webkit-animation-play-state: running;\n\t\t\t\t-webkit-animation-delay: 1s;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t\t.guide-show .bounceInLeft {\n\t\t\t\t-webkit-animation-name: bounceInLeft;\n\t\t\t\tdisplay: block;\n\t\t\t\t-webkit-animation-play-state: running;\n\t\t\t}\n\t\t\t.guide-show .bounceInRight {\n\t\t\t\t-webkit-animation-name: bounceInRight;\n\t\t\t\tdisplay: block;\n\t\t\t\t-webkit-animation-play-state: running;\n\t\t\t\t-webkit-animation-delay: 0.5s;\n\t\t\t}\n\t\t\t@-webkit-keyframes bounceInDown {\n\t\t\t\t0%, 60%, 75%, 90%, 100% {\n\t\t\t\t\t-webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t\tanimation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t}\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -3000px, 0);\n\t\t\t\t\ttransform: translate3d(0, -3000px, 0);\n\t\t\t\t}\n\t\t\t\t60% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 25px, 0);\n\t\t\t\t\ttransform: translate3d(0, 25px, 0);\n\t\t\t\t}\n\t\t\t\t75% {\n\t\t\t\t\t-webkit-transform: translate3d(0, -5px, 0);\n\t\t\t\t\ttransform: translate3d(0, -5px, 0);\n\t\t\t\t}\n\t\t\t\t90% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 3px, 0);\n\t\t\t\t\ttransform: translate3d(0, 3px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\t-webkit-transform: none;\n\t\t\t\t\ttransform: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-webkit-keyframes bounceInLeft {\n\t\t\t\t0%, 60%, 75%, 90%, 100% {\n\t\t\t\t\t-webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t\tanimation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t}\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(-3000px, 0, 0);\n\t\t\t\t\ttransform: translate3d(-3000px, 0, 0);\n\t\t\t\t}\n\t\t\t\t60% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(25px, 0, 0);\n\t\t\t\t\ttransform: translate3d(25px, 0, 0);\n\t\t\t\t}\n\t\t\t\t75% {\n\t\t\t\t\t-webkit-transform: translate3d(-10px, 0, 0);\n\t\t\t\t\ttransform: translate3d(-10px, 0, 0);\n\t\t\t\t}\n\t\t\t\t90% {\n\t\t\t\t\t-webkit-transform: translate3d(5px, 0, 0);\n\t\t\t\t\ttransform: translate3d(5px, 0, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\t-webkit-transform: none;\n\t\t\t\t\ttransform: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-webkit-keyframes bounceInRight {\n\t\t\t\t0%, 60%, 75%, 90%, 100% {\n\t\t\t\t\t-webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t\tanimation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t}\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(3000px, 0, 0);\n\t\t\t\t\ttransform: translate3d(3000px, 0, 0);\n\t\t\t\t}\n\t\t\t\t60% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(-25px, 0, 0);\n\t\t\t\t\ttransform: translate3d(-25px, 0, 0);\n\t\t\t\t}\n\t\t\t\t75% {\n\t\t\t\t\t-webkit-transform: translate3d(10px, 0, 0);\n\t\t\t\t\ttransform: translate3d(10px, 0, 0);\n\t\t\t\t}\n\t\t\t\t90% {\n\t\t\t\t\t-webkit-transform: translate3d(-5px, 0, 0);\n\t\t\t\t\ttransform: translate3d(-5px, 0, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\t-webkit-transform: none;\n\t\t\t\t\ttransform: none;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"slider\" class=\"mui-slider mui-fullscreen\" style=\"background-color: black;\">\n\t\t\t<div class=\"mui-slider-group\">\n\t\t\t\t<!-- 第一张 -->\n\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t<div class=\"item-logo\" style=\"background-color: #D74B28\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\tMUI\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"animate guide-show\">\n\t\t\t\t\t\t\t<h2 class=\"animated bounceInDown\">小巧高能</h2>\n\t\t\t\t\t\t\t<li class=\"animated bounceInLeft\">几十K的JS和CSS</li>\n\t\t\t\t\t\t\t<li class=\"animated bounceInRight\">上百种控件样式和模板</li>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 第二张 -->\n\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t<div class=\"item-logo\" style=\"background-color: #02C1ED;\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\tMUI\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div id=\"tips-2\" class=\"animate mui-hidden\">\n\t\t\t\t\t\t\t<h2 class=\"animated bounceInDown\">原生UI</h2>\n\t\t\t\t\t\t\t<li class=\"animated bounceInLeft\">以iOS原生UI为基础</li>\n\t\t\t\t\t\t\t<li class=\"animated bounceInRight\">补充Android特有样式</li>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 第三张 -->\n\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t<div class=\"item-logo\" style=\"background-color: #67C962;\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\tMUI\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div id=\"tips-3\" class=\"animate mui-hidden\">\n\t\t\t\t\t\t\t<h2 class=\"animated bounceInDown\">流畅体验</h2>\n\t\t\t\t\t\t\t<li class=\"animated bounceInLeft\">下拉刷新、转场动画</li>\n\t\t\t\t\t\t\t<li class=\"animated bounceInRight\">整个世界都流畅了</li>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- 第四张 -->\n\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t<div class=\"item-logo\" style=\"background-color: #FCD208;\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\tMUI\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"animate\">\n\t\t\t\t\t\t\t<button id='close' class=\"mui-btn mui-btn-warning mui-btn-outlined\">立即体验</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"mui-slider-indicator\">\n\t\t\t\t<div class=\"mui-indicator mui-active\"></div>\n\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.back = function() {};\n\t\t\tmui.plusReady(function() {\n\t\t\t\tif(mui.os.ios){\n\t\t\t\t\tplus.navigator.setFullscreen(true);\n\t\t\t\t}\n\t\t\t\tplus.navigator.closeSplashscreen();\n\t\t\t});\n\t\t\t//立即体验按钮点击事件\n\t\t\tdocument.getElementById(\"close\").addEventListener('tap', function(event) {\n\t\t\t\tplus.storage.setItem(\"lauchFlag\", \"true\");\n\t\t\t\tplus.navigator.setFullscreen(false);\n\t\t\t\tplus.webview.currentWebview().close();\n\t\t\t}, false);\n\t\t\t//图片切换时，触发动画\n\t\t\tdocument.querySelector('.mui-slider').addEventListener('slide', function(event) {\n\t\t\t \t//注意slideNumber是从0开始的；\n\t\t\t \tvar index = event.detail.slideNumber+1;\n\t\t\t \tif(index==2||index==3){\n\t\t\t \t\tvar item = document.getElementById(\"tips-\"+index);\n\t\t\t \t\tif(item.classList.contains(\"mui-hidden\")){\n\t\t\t \t\t\titem.classList.remove(\"mui-hidden\");\n\t\t\t \t\t\titem.classList.add(\"guide-show\");\n\t\t\t \t\t}\n\t\t\t \t}\n\t\t\t});\n\t\t\t\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/icons-extra.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/icons-extra.css\" />\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t\t<style>\n\t\t\t.flex-container {\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\tdisplay: flex;\n\t\t\t\t-webkit-flex-flow: row wrap;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content-padded {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content-padded a {\n\t\t\t\tmargin: 3px;\n\t\t\t\twidth: 50px;\n\t\t\t\theight: 50px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\ttext-align: center;\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tborder: 1px solid #ddd;\n\t\t\t\tborder-radius: 25px;\n\t\t\t\tbackground-clip: padding-box;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content-padded a .mui-icon-extra {\n\t\t\t\tmargin-top: 12px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-spinner,\n\t\t\t.mui-spinner-white {\n\t\t\t\tmargin-top: 12px\n\t\t\t}\n\t\t\t\n\t\t\t.active .mui-spinner-indicator {\n\t\t\t\tbackground: #007AFF;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content a {\n\t\t\t\tcolor: #8F8F94;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content a.active {\n\t\t\t\tcolor: #007aff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">icons（扩展图标）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p style=\"text-align: center;\">点击图标查看高亮样式</p>\n\t\t\t\t<div class=\"flex-container\">\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-calc\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-new\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-card\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-grech\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-trend\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-cart\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-custom\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-express\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-class\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-gift\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-gold\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-heart\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-order\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-alipay\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-calendar\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-prech\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-heart-filled\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-rank\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-notice\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-share\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-regist\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-sweep\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-people\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-addpeople\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-peoples\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-like\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-filter\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-at\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-comment\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-computer\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-lamp\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-dictionary\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-xiaoshuo\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-topic\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-classroom\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-university\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-outline\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-find\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-arrowleftcricle\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-arrowrightcricle\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-top\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-phone\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-holiday\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-hotel\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-cold\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon-extra mui-icon-extra-cate\"></span></a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar active = null,\n\t\t\t\tlastid, span;\n\t\t\tmui(\".mui-content\").on(\"tap\", \"a\", function() {\n\t\t\t\tvar id = this.getAttribute(\"id\");\n\t\t\t\tif(!active) {\n\t\t\t\t\tthis.classList.add(\"active\");\n\t\t\t\t\tif(id) {\n\t\t\t\t\t\tspan = this.querySelector(\"span\");\n\t\t\t\t\t\tspan.classList.remove(\"mui-\" + id);\n\t\t\t\t\t\tspan.classList.add(\"mui-\" + id + \"-filled\");\n\t\t\t\t\t}\n\t\t\t\t\tactive = this;\n\t\t\t\t} else {\n\t\t\t\t\tactive.classList.remove(\"active\");\n\t\t\t\t\tif(lastid) {\n\t\t\t\t\t\tspan.classList.remove(\"mui-\" + lastid + \"-filled\");\n\t\t\t\t\t\tspan.classList.add(\"mui-\" + lastid);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.classList.add(\"active\");\n\t\t\t\t\tif(id) {\n\t\t\t\t\t\tspan = this.querySelector(\"span\");\n\t\t\t\t\t\tspan.classList.remove(\"mui-\" + id);\n\t\t\t\t\t\tspan.classList.add(\"mui-\" + id + \"-filled\");\n\t\t\t\t\t}\n\n\t\t\t\t\tactive = this;\n\t\t\t\t}\n\t\t\t\tlastid = id;\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/icons.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t\t<style>\n\t\t\t.flex-container {\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\tdisplay: flex;\n\t\t\t\t-webkit-flex-flow: row wrap;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t.mui-content-padded {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t\t.mui-content-padded a {\n\t\t\t\tmargin: 3px;\n\t\t\t\twidth: 50px;\n\t\t\t\theight: 50px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\ttext-align: center;\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tborder: 1px solid #ddd;\n\t\t\t\tborder-radius: 25px;\n\t\t\t\tbackground-clip: padding-box;\n\t\t\t}\n\t\t\t.mui-content-padded a .mui-icon {\n\t\t\t\tmargin-top: 12px;\n\t\t\t}\n\t\t\t.mui-spinner,\n\t\t\t.mui-spinner-white {\n\t\t\t\tmargin-top: 12px\n\t\t\t}\n\t\t\t.active .mui-spinner-indicator {\n\t\t\t\tbackground: #007AFF;\n\t\t\t}\n\t\t\t.mui-content a {\n\t\t\t\tcolor: #8F8F94;\n\t\t\t}\n\t\t\t.mui-content a.active {\n\t\t\t\tcolor: #007aff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">icon（图标）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p style=\"text-align: center;\">点击图标查看高亮样式</p>\n\t\t\t\t<div class=\"flex-container\">\n\t\t\t\t\t<a id=\"icon-icon-contact\"><span class=\"mui-icon mui-icon-contact\"></span></a>\n\t\t\t\t\t<a id=\"icon-person\"><span class=\"mui-icon mui-icon-person\"></span></a>\n\t\t\t\t\t<a id=\"icon-personadd\"><span class=\"mui-icon mui-icon-personadd\"></span></a>\n\t\t\t\t\t<a id=\"icon-phone\"><span class=\"mui-icon mui-icon-phone\"></span></a>\n\t\t\t\t\t<a id=\"icon-email\"><span class=\"mui-icon mui-icon-email\"></span></a>\n\t\t\t\t\t<a id=\"icon-chatbubble\"><span class=\"mui-icon mui-icon-chatbubble\"></span></a>\n\t\t\t\t\t<a id=\"icon-chatboxes\"><span class=\"mui-icon mui-icon-chatboxes\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-weibo\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-weixin\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-pengyouquan\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-chat\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-qq\"></span></a>\n\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-videocam\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-camera\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-image\"></span></a>\n\t\t\t\t\t<a id=\"icon-mic\"><span class=\"mui-icon mui-icon-mic\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-micoff\"></span></a>\n\t\t\t\t\t<a id=\"icon-location\"><span class=\"mui-icon mui-icon-location\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-map\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-compose\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-trash\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-upload\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-download\"></span></a>\n\t\t\t\t\t<a id=\"icon-close\"><span class=\"mui-icon mui-icon-close\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-closeempty\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-redo\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-undo\"></span></a>\n\t\t\t\t\t<a id=\"icon-refresh\"><span class=\"mui-icon mui-icon-refresh\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-refreshempty\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-reload\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-loop\"></span></a>\n\t\t\t\t\t<!--<a><span class=\"mui-icon mui-icon-loopstrong\"></span></a>-->\n\t\t\t\t\t<a>\n\t\t\t\t\t\t<span class=\"mui-spinner\"></span>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a id=\"icon-star\"><span class=\"mui-icon mui-icon-star\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-starhalf\"></span></a>\n\t\t\t\t\t<a id=\"icon-plus\"><span class=\"mui-icon mui-icon-plus\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-plusempty\"></span></a>\n\t\t\t\t\t<a id=\"icon-minus\"><span class=\"mui-icon mui-icon-minus\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-checkmarkempty\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-search\"></span></a>\n\t\t\t\t\t<!--<a><span class=\"mui-icon mui-icon-searchstrong\"></span></a>-->\n\t\t\t\t\t<!--<a><span class=\"mui-icon mui-icon-share\"></span></a>-->\n\n\t\t\t\t\t<a id=\"icon-home\"><span class=\"mui-icon mui-icon-home\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-navigate\"></span></a>\n\t\t\t\t\t<a id=\"icon-gear\"><span class=\"mui-icon mui-icon-gear\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-settings\"></span></a>\n\t\t\t\t\t<!--<a><span class=\"mui-icon mui-icon-settingsstrong\"></span></a>-->\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-list\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-bars\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-paperplane\"></span></a>\n\t\t\t\t\t<a id=\"icon-info\"><span class=\"mui-icon mui-icon-info\"></span></a>\n\t\t\t\t\t<a id=\"icon-help\"><span class=\"mui-icon mui-icon-help\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-locked\"></span></a>\n\t\t\t\t\t<a id=\"icon-more\"><span class=\"mui-icon mui-icon-more\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-flag\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-paperclip\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-eye\"></span></a>\n\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-back\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-forward\"></span></a>\n\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-arrowup\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-arrowdown\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-arrowleft\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-arrowright\"></span></a>\n\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-arrowthinup\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-arrowthindown\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-arrowthinleft\"></span></a>\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-arrowthinright\"></span></a>\n\n\t\t\t\t\t<a><span class=\"mui-icon mui-icon-pulldown\"></span></a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar active = null,\n\t\t\t\tlastid, span;\n\t\t\tmui(\".mui-content\").on(\"tap\", \"a\", function() {\n\t\t\t\tvar id = this.getAttribute(\"id\");\n\t\t\t\tif (!active) {\n\t\t\t\t\tthis.classList.add(\"active\");\n\t\t\t\t\tif (id) {\n\t\t\t\t\t\tspan = this.querySelector(\"span\");\n\t\t\t\t\t\tspan.classList.remove(\"mui-\" + id);\n\t\t\t\t\t\tspan.classList.add(\"mui-\" + id + \"-filled\");\n\t\t\t\t\t}\n\t\t\t\t\tactive = this;\n\t\t\t\t} else {\n\t\t\t\t\tactive.classList.remove(\"active\");\n\t\t\t\t\tif (lastid) {\n\t\t\t\t\t\tspan.classList.remove(\"mui-\" + lastid + \"-filled\");\n\t\t\t\t\t\tspan.classList.add(\"mui-\" + lastid);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.classList.add(\"active\");\n\t\t\t\t\tif (id) {\n\t\t\t\t\t\tspan = this.querySelector(\"span\");\n\t\t\t\t\t\tspan.classList.remove(\"mui-\" + id);\n\t\t\t\t\t\tspan.classList.add(\"mui-\" + id + \"-filled\");\n\t\t\t\t\t}\n\n\t\t\t\t\tactive = this;\n\t\t\t\t}\n\t\t\t\tlastid = id;\n\t\t\t});\n\t\t</script>\n\t</body>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/im-chat.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"../css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t\t<link href=\"../css/mui.imageviewer.css\" rel=\"stylesheet\" />\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\theight: 100%;\n\t\t\t\tmargin: 0px;\n\t\t\t\tpadding: 0px;\n\t\t\t\toverflow: hidden;\n\t\t\t\t-webkit-touch-callout: none;\n\t\t\t\t-webkit-user-select: none;\n\t\t\t}\n\t\t\tfooter {\n\t\t\t\tposition: fixed;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 50px;\n\t\t\t\tmin-height: 50px;\n\t\t\t\tborder-top: solid 1px #bbb;\n\t\t\t\tleft: 0px;\n\t\t\t\tbottom: 0px;\n\t\t\t\toverflow: hidden;\n\t\t\t\tpadding: 0px 50px;\n\t\t\t\tbackground-color: #fafafa;\n\t\t\t}\n\t\t\t.footer-left {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 50px;\n\t\t\t\theight: 50px;\n\t\t\t\tleft: 0px;\n\t\t\t\tbottom: 0px;\n\t\t\t\ttext-align: center;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tline-height: 100%;\n\t\t\t\tpadding: 12px 4px;\n\t\t\t}\n\t\t\t.footer-right {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 50px;\n\t\t\t\theight: 50px;\n\t\t\t\tright: 0px;\n\t\t\t\tbottom: 0px;\n\t\t\t\ttext-align: center;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tline-height: 100%;\n\t\t\t\tpadding: 12px 5px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t\t.footer-center {\n\t\t\t\theight: 100%;\n\t\t\t\tpadding: 5px 0px;\n\t\t\t}\n\t\t\t.footer-center [class*=input] {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tborder-radius: 5px;\n\t\t\t}\n\t\t\t.footer-center .input-text {\n\t\t\t\tbackground: #fff;\n\t\t\t\tborder: solid 1px #ddd;\n\t\t\t\tpadding: 10px !important;\n\t\t\t\tfont-size: 16px !important;\n\t\t\t\tline-height: 18px !important;\n\t\t\t\tfont-family: verdana !important;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.footer-center .input-sound {\n\t\t\t\tbackground-color: #eee;\n\t\t\t}\n\t\t\t.mui-content {\n\t\t\t\theight: 100%;\n\t\t\t\tpadding: 44px 0px 50px 0px;\n\t\t\t\toverflow: auto;\n\t\t\t\tbackground-color: #eaeaea;\n\t\t\t}\n\t\t\t#msg-list {\n\t\t\t\theight: 100%;\n\t\t\t\toverflow: auto;\n\t\t\t\t-webkit-overflow-scrolling: touch;\n\t\t\t}\n\t\t\t.msg-item {\n\t\t\t\tpadding: 8px;\n\t\t\t\tclear: both;\n\t\t\t}\n\t\t\t.msg-item .mui-item-clear {\n\t\t\t\tclear: both;\n\t\t\t}\n\t\t\t.msg-item .msg-user {\n\t\t\t\twidth: 38px;\n\t\t\t\theight: 38px;\n\t\t\t\tborder: solid 1px #d3d3d3;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tbackground: #fff;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tvertical-align: top;\n\t\t\t\ttext-align: center;\n\t\t\t\tfloat: left;\n\t\t\t\tpadding: 3px;\n\t\t\t\tcolor: #ddd;\n\t\t\t}\n\t\t\t\n\t\t\t.msg-item .msg-user-img{\n\t\t\t\twidth: 38px;\n\t\t\t\theight: 38px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tvertical-align: top;\n\t\t\t\ttext-align: center;\n\t\t\t\tfloat: left;\n\t\t\t\tcolor: #ddd;\n\t\t\t}\n\t\t\t\n\t\t\t.msg-item .msg-content {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tborder-radius: 5px;\n\t\t\t\tborder: solid 1px #d3d3d3;\n\t\t\t\tbackground-color: #FFFFFF;\n\t\t\t\tcolor: #333;\n\t\t\t\tpadding: 8px;\n\t\t\t\tvertical-align: top;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tposition: relative;\n\t\t\t\tmargin: 0px 8px;\n\t\t\t\tmax-width: 75%;\n\t\t\t\tmin-width: 35px;\n\t\t\t\tfloat: left;\n\t\t\t}\n\t\t\t.msg-item .msg-content .msg-content-inner {\n\t\t\t\toverflow-x: hidden;\n\t\t\t}\n\t\t\t.msg-item .msg-content .msg-content-arrow {\n\t\t\t\tposition: absolute;\n\t\t\t\tborder: solid 1px #d3d3d3;\n\t\t\t\tborder-right: none;\n\t\t\t\tborder-top: none;\n\t\t\t\tbackground-color: #FFFFFF;\n\t\t\t\twidth: 10px;\n\t\t\t\theight: 10px;\n\t\t\t\tleft: -5px;\n\t\t\t\ttop: 12px;\n\t\t\t\t-webkit-transform: rotateZ(45deg);\n\t\t\t\ttransform: rotateZ(45deg);\n\t\t\t}\n\t\t\t.msg-item-self .msg-user,\n\t\t\t.msg-item-self .msg-content {\n\t\t\t\tfloat: right;\n\t\t\t}\n\t\t\t.msg-item-self .msg-content .msg-content-arrow {\n\t\t\t\tleft: auto;\n\t\t\t\tright: -5px;\n\t\t\t\t-webkit-transform: rotateZ(225deg);\n\t\t\t\ttransform: rotateZ(225deg);\n\t\t\t}\n\t\t\t.msg-item-self .msg-content,\n\t\t\t.msg-item-self .msg-content .msg-content-arrow {\n\t\t\t\tbackground-color: #4CD964;\n\t\t\t\tcolor: #fff;\n\t\t\t\tborder-color: #2AC845;\n\t\t\t}\n\t\t\tfooter .mui-icon {\n\t\t\t\tcolor: #000;\n\t\t\t}\n\t\t\tfooter .mui-icon:active {\n\t\t\t\tcolor: #007AFF !important;\n\t\t\t}\n\t\t\tfooter .mui-icon-paperplane:before {\n\t\t\t\tcontent: \"发送\";\n\t\t\t}\n\t\t\tfooter .mui-icon-paperplane {\n\t\t\t\t/*-webkit-transform: rotateZ(45deg);\n\t\t\t\ttransform: rotateZ(45deg);*/\n\t\t\t\t\n\t\t\t\tfont-size: 16px;\n\t\t\t\tword-break: keep-all;\n\t\t\t\tline-height: 100%;\n\t\t\t\tpadding-top: 6px;\n\t\t\t\tcolor: rgba(0, 135, 250, 1);\n\t\t\t}\n\t\t\t#msg-sound {\n\t\t\t\t-webkit-user-select: none !important;\n\t\t\t\tuser-select: none !important;\n\t\t\t}\n\t\t\t.rprogress {\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 50%;\n\t\t\t\ttop: 50%;\n\t\t\t\twidth: 140px;\n\t\t\t\theight: 140px;\n\t\t\t\tmargin-left: -70px;\n\t\t\t\tmargin-top: -70px;\n\t\t\t\tbackground-image: url(../images/arecord.png);\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\tbackground-position: center center;\n\t\t\t\tbackground-size: 30px 30px;\n\t\t\t\tbackground-color: rgba(0, 0, 0, 0.7);\n\t\t\t\tborder-radius: 5px;\n\t\t\t\tdisplay: none;\n\t\t\t\t-webkit-transition: .15s;\n\t\t\t}\n\t\t\t.rschedule {\n\t\t\t\tbackground-color: rgba(0, 0, 0, 0);\n\t\t\t\tborder: 5px solid rgba(0, 183, 229, 0.9);\n\t\t\t\topacity: .9;\n\t\t\t\tborder-left: 5px solid rgba(0, 0, 0, 0);\n\t\t\t\tborder-right: 5px solid rgba(0, 0, 0, 0);\n\t\t\t\tborder-radius: 50px;\n\t\t\t\tbox-shadow: 0 0 15px #2187e7;\n\t\t\t\twidth: 46px;\n\t\t\t\theight: 46px;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 50%;\n\t\t\t\ttop: 50%;\n\t\t\t\tmargin-left: -23px;\n\t\t\t\tmargin-top: -23px;\n\t\t\t\t-webkit-animation: spin 1s infinite linear;\n\t\t\t\tanimation: spin 1s infinite linear;\n\t\t\t}\n\t\t\t.r-sigh{\n\t\t\t\tdisplay: none;\n\t\t\t\tborder-radius: 50px;\n\t\t\t\tbox-shadow: 0 0 15px #2187e7;\n\t\t\t\twidth: 46px;\n\t\t\t\theight: 46px;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 50%;\n\t\t\t\ttop: 50%;\n\t\t\t\tmargin-left: -23px;\n\t\t\t\tmargin-top: -23px;\n\t\t\t\ttext-align: center;\n\t\t\t\tline-height: 46px;\n\t\t\t\tfont-size: 40px;\n\t\t\t\tfont-weight: bold;\n\t\t\t\tcolor: #2187e7;\n\t\t\t}\n\t\t\t.rprogress-sigh{\n\t\t\t\tbackground-image: none !important;\n\t\t\t}\n\t\t\t.rprogress-sigh .rschedule{\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\t\t\t.rprogress-sigh .r-sigh{\n\t\t\t\tdisplay: block !important;\n\t\t\t}\n\t\t\t.rsalert {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tcolor: #bbb;\n\t\t\t\ttext-align: center;\n\t\t\t\tposition: absolute;\n\t\t\t\tborder-radius: 5px;\n\t\t\t\twidth: 130px;\n\t\t\t\tmargin: 5px 5px;\n\t\t\t\tpadding: 5px;\n\t\t\t\tleft: 0px;\n\t\t\t\tbottom: 0px;\n\t\t\t}\n\t\t\t@-webkit-keyframes spin {\n\t\t\t\t0% {\n\t\t\t\t\t-webkit-transform: rotate(0deg);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\t-webkit-transform: rotate(360deg);\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes spin {\n\t\t\t\t0% {\n\t\t\t\t\ttransform: rotate(0deg);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\ttransform: rotate(360deg);\n\t\t\t\t}\n\t\t\t}\n\t\t\t#h {\n\t\t\t\tbackground: #fff;\n\t\t\t\tborder: solid 1px #ddd;\n\t\t\t\tpadding: 10px !important;\n\t\t\t\tfont-size: 16px !important;\n\t\t\t\tfont-family: verdana !important;\n\t\t\t\tline-height: 18px !important;\n\t\t\t\toverflow: visible;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: -1000px;\n\t\t\t\tright: 0px;\n\t\t\t\tword-break: break-all;\n\t\t\t\tword-wrap: break-word;\n\t\t\t}\n\t\t\t.cancel {\n\t\t\t\tbackground-color: darkred;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body contextmenu=\"return false;\">\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">chat (聊天窗口)</h1>\n\t\t</header>\n\t\t<pre id='h'></pre>\n\t\t<script id='msg-template' type=\"text/template\">\n\t\t\t<% for(var i in record){ var item=record[i]; %>\n\t\t\t\t<div class=\"msg-item <%= (item.sender=='self'?' msg-item-self':'') %>\" msg-type='<%=(item.type)%>' msg-content='<%=(item.content)%>'>\n\t\t\t\t\t<% if(item.sender=='self' ) { %>\n\t\t\t\t\t\t<i class=\"msg-user mui-icon mui-icon-person\"></i>\n\t\t\t\t\t<% } else { %>\n\t\t\t\t\t\t<img class=\"msg-user-img\" src=\"../images/logo.png\" alt=\"\" />\n\t\t\t\t\t<% } %>\n\t\t\t\t\t<div class=\"msg-content\">\n\t\t\t\t\t\t<div class=\"msg-content-inner\">\n\t\t\t\t\t\t\t<% if(item.type=='text' ) { %>\n\t\t\t\t\t\t\t\t<%=( item.content|| '&nbsp;&nbsp;') %>\n\t\t\t\t\t\t\t<% } else if(item.type=='image' ) { %>\n\t\t\t\t\t\t\t\t<img class=\"msg-content-image\" src=\"<%=(item.content)%>\" style=\"max-width: 100px;\" />\n\t\t\t\t\t\t\t<% } else if(item.type=='sound' ) { %>\n\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-mic\" style=\"font-size: 18px;font-weight: bold;\"></span>\n\t\t\t\t\t\t\t\t<span class=\"play-state\">点击播放</span>\n\t\t\t\t\t\t\t<% } %>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"msg-content-arrow\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-item-clear\"></div>\n\t\t\t\t</div>\n\t\t\t<% } %>\n\t\t</script>\n\t\t<div class=\"mui-content\">\n\t\t\t<div id='msg-list'>\n\t\t\t</div>\n\t\t</div>\n\t\t<footer>\n\t\t\t<div class=\"footer-left\">\n\t\t\t\t<i id='msg-image' class=\"mui-icon mui-icon-camera\" style=\"font-size: 28px;\"></i>\n\t\t\t</div>\n\t\t\t<div class=\"footer-center\">\n\t\t\t\t<textarea id='msg-text' type=\"text\" class='input-text'></textarea>\n\t\t\t\t<button id='msg-sound' type=\"button\" class='input-sound' style=\"display: none;\">按住说话</button>\n\t\t\t</div>\n\t\t\t<label for=\"\" class=\"footer-right\">\n\t\t\t\t<i id='msg-type' class=\"mui-icon mui-icon-mic\"></i>\n\t\t\t</label>\n\t\t</footer>\n\t\t<div id='sound-alert' class=\"rprogress\">\n\t\t\t<div class=\"rschedule\"></div>\n\t\t\t<div class=\"r-sigh\">!</div>\n\t\t\t<div id=\"audio_tips\" class=\"rsalert\">手指上滑，取消发送</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script src=\"../js/mui.imageViewer.js\"></script>\n\t\t<script src=\"../js/arttmpl.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\t(function($, doc) {\n\t\t\t\tvar MIN_SOUND_TIME = 800;\n\t\t\t\t$.init({\n\t\t\t\t\tgestureConfig: {\n\t\t\t\t\t\ttap: true, //默认为true\n\t\t\t\t\t\tdoubletap: true, //默认为false\n\t\t\t\t\t\tlongtap: true, //默认为false\n\t\t\t\t\t\tswipe: true, //默认为true\n\t\t\t\t\t\tdrag: true, //默认为true\n\t\t\t\t\t\thold: true, //默认为false，不监听\n\t\t\t\t\t\trelease: true //默认为false，不监听\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttemplate.config('escape', false);\n\t\t\t\t\n\t\t\t\tif(mui.os.ios){\n\t\t\t\t\t// 解决在ios上fixed元素focusin时位置出现错误的问题 \n\t\t\t\t\tdocument.addEventListener('DOMContentLoaded',function(){\n\t\t\t\t\t\tvar footerDom = document.querySelector('footer');\n\t\t\t\t\t\t\n\t\t\t\t\t\tdocument.addEventListener('focusin', function() {\r\n\t\t\t\t\t\t\tfooterDom.style.position = 'absolute';\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdocument.addEventListener('focusout', function() {\r\n\t\t\t\t\t\t\tfooterDom.style.position = 'fixed';\r\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.webview.currentWebview().setStyle({\n\t\t\t\t\t\tsoftinputMode: \"adjustResize\"\n\t\t\t\t\t});\n\t\t\t\t\tvar showKeyboard = function() {\n\t\t\t\t\t\tif ($.os.ios) {\n\t\t\t\t\t\t\tvar webView = plus.webview.currentWebview().nativeInstanceObject();\n\t\t\t\t\t\t\twebView.plusCallMethod({\n\t\t\t\t\t\t\t\t\"setKeyboardDisplayRequiresUserAction\": false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar Context = plus.android.importClass(\"android.content.Context\");\n\t\t\t\t\t\t\tvar InputMethodManager = plus.android.importClass(\"android.view.inputmethod.InputMethodManager\");\n\t\t\t\t\t\t\tvar main = plus.android.runtimeMainActivity();\n\t\t\t\t\t\t\tvar imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);\n\t\t\t\t\t\t\timm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);\n\t\t\t\t\t\t\t//var view = ((ViewGroup)main.findViewById(android.R.id.content)).getChildAt(0);\n\t\t\t\t\t\t\timm.showSoftInput(main.getWindow().getDecorView(), InputMethodManager.SHOW_IMPLICIT);\n\t\t\t\t\t\t\t//alert(\"ll\");\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tvar record = [{\n\t\t\t\t\t\tsender: 'zs',\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\tcontent: 'Hi，我是 MUI 小管家！'\n\t\t\t\t\t}];\n\t\t\t\t\tvar ui = {\n\t\t\t\t\t\tbody: doc.querySelector('body'),\n\t\t\t\t\t\tfooter: doc.querySelector('footer'),\n\t\t\t\t\t\tfooterRight: doc.querySelector('.footer-right'),\n\t\t\t\t\t\tfooterLeft: doc.querySelector('.footer-left'),\n\t\t\t\t\t\tbtnMsgType: doc.querySelector('#msg-type'),\n\t\t\t\t\t\tboxMsgText: doc.querySelector('#msg-text'),\n\t\t\t\t\t\tboxMsgSound: doc.querySelector('#msg-sound'),\n\t\t\t\t\t\tbtnMsgImage: doc.querySelector('#msg-image'),\n\t\t\t\t\t\tareaMsgList: doc.querySelector('#msg-list'),\n\t\t\t\t\t\tboxSoundAlert: doc.querySelector('#sound-alert'),\n\t\t\t\t\t\th: doc.querySelector('#h'),\n\t\t\t\t\t\tcontent: doc.querySelector('.mui-content')\n\t\t\t\t\t};\n\t\t\t\t\tui.h.style.width = ui.boxMsgText.offsetWidth + 'px';\n\t\t\t\t\t//alert(ui.boxMsgText.offsetWidth );\n\t\t\t\t\tvar footerPadding = ui.footer.offsetHeight - ui.boxMsgText.offsetHeight;\n\t\t\t\t\tvar msgItemTap = function(msgItem, event) {\n\t\t\t\t\t\tvar msgType = msgItem.getAttribute('msg-type');\n\t\t\t\t\t\tvar msgContent = msgItem.getAttribute('msg-content')\n\t\t\t\t\t\tif (msgType == 'sound') {\n\t\t\t\t\t\t\tplayer = plus.audio.createPlayer(msgContent);\n\t\t\t\t\t\t\tvar playState = msgItem.querySelector('.play-state');\n\t\t\t\t\t\t\tplayState.innerText = '正在播放...';\n\t\t\t\t\t\t\tplayer.play(function() {\n\t\t\t\t\t\t\t\tplayState.innerText = '点击播放';\n\t\t\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\t\t\tplayState.innerText = '点击播放';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tvar imageViewer = new $.ImageViewer('.msg-content-image', {\n\t\t\t\t\t\tdbl: false\n\t\t\t\t\t});\n\t\t\t\t\tvar bindMsgList = function() {\n\t\t\t\t\t\t//绑定数据:\n\t\t\t\t\t\t/*tp.bind({\n\t\t\t\t\t\t\ttemplate: 'msg-template',\n\t\t\t\t\t\t\telement: 'msg-list',\n\t\t\t\t\t\t\tmodel: record\n\t\t\t\t\t\t});*/\n\t\t\t\t\t\tui.areaMsgList.innerHTML = template('msg-template', {\n\t\t\t\t\t\t\t\"record\": record\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar msgItems = ui.areaMsgList.querySelectorAll('.msg-item');\n\t\t\t\t\t\t[].forEach.call(msgItems, function(item, index) {\n\t\t\t\t\t\t\titem.addEventListener('tap', function(event) {\n\t\t\t\t\t\t\t\tmsgItemTap(item, event);\n\t\t\t\t\t\t\t}, false);\n\t\t\t\t\t\t});\n\t\t\t\t\t\timageViewer.findAllImage();\n\t\t\t\t\t\tui.areaMsgList.scrollTop = ui.areaMsgList.scrollHeight + ui.areaMsgList.offsetHeight;\n\t\t\t\t\t};\n\t\t\t\t\tbindMsgList();\n\t\t\t\t\twindow.addEventListener('resize', function() {\n\t\t\t\t\t\tui.areaMsgList.scrollTop = ui.areaMsgList.scrollHeight + ui.areaMsgList.offsetHeight;\n\t\t\t\t\t}, false);\n\t\t\t\t\tvar send = function(msg) {\n\t\t\t\t\t\trecord.push(msg);\n\t\t\t\t\t\tbindMsgList();\n\t\t\t\t\t\ttoRobot(msg.content);\n\t\t\t\t\t};\n\t\t\t\t\tvar toRobot = function(info) {\n\t\t\t\t\t\tvar apiUrl = 'http://www.tuling123.com/openapi/api';\n\t\t\t\t\t\t$.getJSON(apiUrl, {\n\t\t\t\t\t\t\t\"key\": 'acfbca724ea1b5db96d2eef88ce677dc',\n\t\t\t\t\t\t\t\"info\": info,\n\t\t\t\t\t\t\t\"userid\": plus.device.uuid\n\t\t\t\t\t\t}, function(data) {\n\t\t\t\t\t\t\t//alert(JSON.stringify(data));\n\t\t\t\t\t\t\trecord.push({\n\t\t\t\t\t\t\t\tsender: 'zs',\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\tcontent: data.text\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbindMsgList();\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\tfunction msgTextFocus() {\n\t\t\t\t\t\t\tui.boxMsgText.focus();\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tui.boxMsgText.focus();\n\t\t\t\t\t\t\t}, 150);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//解决长按“发送”按钮，导致键盘关闭的问题；\n\t\t\t\t\tui.footerRight.addEventListener('touchstart', function(event) {\n\t\t\t\t\t\tif (ui.btnMsgType.classList.contains('mui-icon-paperplane')) {\n\t\t\t\t\t\t\tmsgTextFocus();\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t//解决长按“发送”按钮，导致键盘关闭的问题；\n\t\t\t\t\tui.footerRight.addEventListener('touchmove', function(event) {\n\t\t\t\t\t\tif (ui.btnMsgType.classList.contains('mui-icon-paperplane')) {\n\t\t\t\t\t\t\tmsgTextFocus();\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t//\t\t\t\t\tui.footerRight.addEventListener('touchcancel', function(event) {\n\t\t\t\t\t//\t\t\t\t\t\tif (ui.btnMsgType.classList.contains('mui-icon-paperplane')) {\n\t\t\t\t\t//\t\t\t\t\t\t\tmsgTextFocus();\n\t\t\t\t\t//\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t//\t\t\t\t\t});\n\t\t\t\t\t//\t\t\t\t\tui.footerRight.addEventListener('touchend', function(event) {\n\t\t\t\t\t//\t\t\t\t\t\tif (ui.btnMsgType.classList.contains('mui-icon-paperplane')) {\n\t\t\t\t\t//\t\t\t\t\t\t\tmsgTextFocus();\n\t\t\t\t\t//\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t//\t\t\t\t\t});\n\t\t\t\t\tui.footerRight.addEventListener('release', function(event) {\n\t\t\t\t\t\tif (ui.btnMsgType.classList.contains('mui-icon-paperplane')) {\n\t\t\t\t\t\t\t//showKeyboard();\n\t\t\t\t\t\t\tui.boxMsgText.focus();\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tui.boxMsgText.focus();\n\t\t\t\t\t\t\t}, 150);\n\t\t\t\t\t\t\t//\t\t\t\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\t\t\t\tsend({\n\t\t\t\t\t\t\t\tsender: 'self',\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\tcontent: ui.boxMsgText.value.replace(new RegExp('\\n', 'gm'), '<br/>')\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tui.boxMsgText.value = '';\n\t\t\t\t\t\t\t$.trigger(ui.boxMsgText, 'input', null);\n\t\t\t\t\t\t} else if (ui.btnMsgType.classList.contains('mui-icon-mic')) {\n\t\t\t\t\t\t\tui.btnMsgType.classList.add('mui-icon-compose');\n\t\t\t\t\t\t\tui.btnMsgType.classList.remove('mui-icon-mic');\n\t\t\t\t\t\t\tui.boxMsgText.style.display = 'none';\n\t\t\t\t\t\t\tui.boxMsgSound.style.display = 'block';\n\t\t\t\t\t\t\tui.boxMsgText.blur();\n\t\t\t\t\t\t\tdocument.body.focus();\n\t\t\t\t\t\t} else if (ui.btnMsgType.classList.contains('mui-icon-compose')) {\n\t\t\t\t\t\t\tui.btnMsgType.classList.add('mui-icon-mic');\n\t\t\t\t\t\t\tui.btnMsgType.classList.remove('mui-icon-compose');\n\t\t\t\t\t\t\tui.boxMsgSound.style.display = 'none';\n\t\t\t\t\t\t\tui.boxMsgText.style.display = 'block';\n\t\t\t\t\t\t\t//--\n\t\t\t\t\t\t\t//showKeyboard();\n\t\t\t\t\t\t\tui.boxMsgText.focus();\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tui.boxMsgText.focus();\n\t\t\t\t\t\t\t}, 150);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t\tui.footerLeft.addEventListener('tap', function(event) {\n\t\t\t\t\t\tvar btnArray = [{\n\t\t\t\t\t\t\ttitle: \"拍照\"\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\ttitle: \"从相册选择\"\n\t\t\t\t\t\t}];\n\t\t\t\t\t\tplus.nativeUI.actionSheet({\n\t\t\t\t\t\t\ttitle: \"选择照片\",\n\t\t\t\t\t\t\tcancel: \"取消\",\n\t\t\t\t\t\t\tbuttons: btnArray\n\t\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\t\tvar index = e.index;\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tvar cmr = plus.camera.getCamera();\n\t\t\t\t\t\t\t\t\tcmr.captureImage(function(path) {\n\t\t\t\t\t\t\t\t\t\tsend({\n\t\t\t\t\t\t\t\t\t\t\tsender: 'self',\n\t\t\t\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t\t\t\t\tcontent: \"file://\" + plus.io.convertLocalFileSystemURL(path)\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}, function(err) {});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\tplus.gallery.pick(function(path) {\n\t\t\t\t\t\t\t\t\t\tsend({\n\t\t\t\t\t\t\t\t\t\t\tsender: 'self',\n\t\t\t\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t\t\t\t\tcontent: path\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}, function(err) {}, null);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, false); \n\t\t\t\t\tvar setSoundAlertVisable=function(show){\n\t\t\t\t\t\tif(show){\n\t\t\t\t\t\t\tui.boxSoundAlert.style.display = 'block';\n\t\t\t\t\t\t\tui.boxSoundAlert.style.opacity = 1;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tui.boxSoundAlert.style.opacity = 0;\n\t\t\t\t\t\t\t//fadeOut 完成再真正隐藏\n\t\t\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t\t\tui.boxSoundAlert.style.display = 'none';\n\t\t\t\t\t\t\t},200);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tvar recordCancel = false;\n\t\t\t\t\tvar recorder = null;\n\t\t\t\t\tvar audio_tips = document.getElementById(\"audio_tips\");\n\t\t\t\t\tvar startTimestamp = null;\n\t\t\t\t\tvar stopTimestamp = null;\n\t\t\t\t\tvar stopTimer = null;\n\t\t\t\t\tui.boxMsgSound.addEventListener('hold', function(event) {\n\t\t\t\t\t\trecordCancel = false;\n\t\t\t\t\t\tif(stopTimer)clearTimeout(stopTimer);\n\t\t\t\t\t\taudio_tips.innerHTML = \"手指上划，取消发送\";\n\t\t\t\t\t\tui.boxSoundAlert.classList.remove('rprogress-sigh');\n\t\t\t\t\t\tsetSoundAlertVisable(true);\n\t\t\t\t\t\trecorder = plus.audio.getRecorder();\n\t\t\t\t\t\tif (recorder == null) {\n\t\t\t\t\t\t\tplus.nativeUI.toast(\"不能获取录音对象\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstartTimestamp = (new Date()).getTime();\n\t\t\t\t\t\trecorder.record({\n\t\t\t\t\t\t\tfilename: \"_doc/audio/\"\n\t\t\t\t\t\t}, function(path) {\n\t\t\t\t\t\t\tif (recordCancel) return;\n\t\t\t\t\t\t\tsend({\n\t\t\t\t\t\t\t\tsender: 'self',\n\t\t\t\t\t\t\t\ttype: 'sound',\n\t\t\t\t\t\t\t\tcontent: path\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\t\tplus.nativeUI.toast(\"录音时出现异常: \" + e.message);\n\t\t\t\t\t\t});\n\t\t\t\t\t}, false);\n\t\t\t\t\tui.body.addEventListener('drag', function(event) {\n\t\t\t\t\t\t//console.log('drag');\n\t\t\t\t\t\tif (Math.abs(event.detail.deltaY) > 50) {\n\t\t\t\t\t\t\tif (!recordCancel) {\n\t\t\t\t\t\t\t\trecordCancel = true;\n\t\t\t\t\t\t\t\tif (!audio_tips.classList.contains(\"cancel\")) {\n\t\t\t\t\t\t\t\t\taudio_tips.classList.add(\"cancel\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\taudio_tips.innerHTML = \"松开手指，取消发送\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (recordCancel) {\n\t\t\t\t\t\t\t\trecordCancel = false;\n\t\t\t\t\t\t\t\tif (audio_tips.classList.contains(\"cancel\")) {\n\t\t\t\t\t\t\t\t\taudio_tips.classList.remove(\"cancel\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\taudio_tips.innerHTML = \"手指上划，取消发送\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t\tui.boxMsgSound.addEventListener('release', function(event) {\n\t\t\t\t\t\t//console.log('release');\n\t\t\t\t\t\tif (audio_tips.classList.contains(\"cancel\")) {\n\t\t\t\t\t\t\taudio_tips.classList.remove(\"cancel\");\n\t\t\t\t\t\t\taudio_tips.innerHTML = \"手指上划，取消发送\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//\n\t\t\t\t\t\tstopTimestamp = (new Date()).getTime();\n\t\t\t\t\t\tif (stopTimestamp - startTimestamp < MIN_SOUND_TIME) {\n\t\t\t\t\t\t\taudio_tips.innerHTML = \"录音时间太短\";\n\t\t\t\t\t\t\tui.boxSoundAlert.classList.add('rprogress-sigh');\n\t\t\t\t\t\t\trecordCancel = true;\n\t\t\t\t\t\t\tstopTimer=setTimeout(function(){\n\t\t\t\t\t\t\t\tsetSoundAlertVisable(false);\n\t\t\t\t\t\t\t},800);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tsetSoundAlertVisable(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trecorder.stop();\n\t\t\t\t\t}, false);\n\t\t\t\t\tui.boxMsgSound.addEventListener(\"touchstart\", function(e) {\n\t\t\t\t\t\t//console.log(\"start....\");\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t});\n\t\t\t\t\tui.boxMsgText.addEventListener('input', function(event) {\n\t\t\t\t\t\tui.btnMsgType.classList[ui.boxMsgText.value == '' ? 'remove' : 'add']('mui-icon-paperplane');\n\t\t\t\t\t\tui.btnMsgType.setAttribute(\"for\", ui.boxMsgText.value == '' ? '' : 'msg-text');\n\t\t\t\t\t\tui.h.innerText = ui.boxMsgText.value.replace(new RegExp('\\n', 'gm'), '\\n-') || '-';\n\t\t\t\t\t\tui.footer.style.height = (ui.h.offsetHeight + footerPadding) + 'px';\n\t\t\t\t\t\tui.content.style.paddingBottom = ui.footer.style.height;\n\t\t\t\t\t});\n\t\t\t\t\tvar focus = false;\n\t\t\t\t\tui.boxMsgText.addEventListener('tap', function(event) {\n\t\t\t\t\t\tui.boxMsgText.focus();\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\tui.boxMsgText.focus();\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\tfocus = true;\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tfocus = false;\n\t\t\t\t\t\t},1000);\n\t\t\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\t\t}, false);\n\t\t\t\t\t//点击消息列表，关闭键盘\n\t\t\t\t\tui.areaMsgList.addEventListener('click',function (event) {\n\t\t\t\t\t\tif(!focus){\n\t\t\t\t\t\t\tui.boxMsgText.blur();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t}(mui, document));\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/imageviewer-native.html",
    "content": "<html>\n\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Hello MUI</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <!--标准mui.css-->\n    <link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n    <!--App自定义的css-->\n    <style type=\"text/css\">\n      p img {\n        max-width: 100%;\n        height: auto;\n      }\n      \n      .mui-content>.mui-table-view:first-child {\n        margin-top: 0;\n      }\n      \n      body,\n      .mui-content {\n        background-color: #FFFFFF;\n      }\n    </style>\n\n  </head>\n\n  <body>\n    <div class=\"mui-content\">\n      <ul class=\"mui-table-view\">\n        <li class=\"mui-table-view-cell\" id=\"loop_switch\">\n          是否循环预览\n          <div class=\"mui-switch\">\n            <div class=\"mui-switch-handle\"></div>\n          </div>\n        </li>\n      </ul>\n      <div class=\"mui-content-padded\">\n        <!--<div class=\"mui-input-row\" id=\"loop_switch\">\n          <label>是否循环预览</label>\n          <div class=\"mui-switch mui-active\">\n            <div class=\"mui-switch-handle\"></div>\n          </div>\n        </div>-->\n        <p>这是图片放大预览示例，点击如下图片体验全屏预览功能</p>\n        <p>\n          <img src=\"../images/yuantiao.jpg\" />\n        </p>\n        <p>图片全屏后，双击或双指缩放均可对图片进行放大、缩小操作，左右滑动可查看其它图片，点击会关闭预览</p>\n        <p>\n          <img src=\"../images/muwu.jpg\" />\n        </p>\n        <p>第三张图片，纯粹为了占位： </p>\n        <p>\n          <img src=\"../images/shuijiao.jpg\" />\n        </p>\n      </div>\n    </div>\n  </body>\n  <script src=\"../js/mui.min.js\"></script>\n  <script type=\"text/javascript\">\n    mui.plusReady(function() {\n      var loopFlag = false; //默认不支持轮播\n      var loopSwitch = document.getElementById('loop_switch');\n      loopSwitch.addEventListener('toggle', function(event) {\n        if(event.detail.isActive) {\n          loopFlag = true;\n        } else {\n          loopFlag = false;\n        }\n      });\n      var images = [].slice.call(document.querySelectorAll('.mui-content-padded img'));\n      var urls = [];\n      images.forEach(function(item) {\n        urls.push(item.src);\n      });\n      mui('.mui-content-padded').on('tap', 'img', function() {\n        var index = images.indexOf(this);\n        plus.nativeUI.previewImage(urls, {\n          current: index,\n          loop: loopFlag,\n          indicator: 'number'\n        });\n      });\n    });\n  </script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/imageviewer.html",
    "content": "<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<style type=\"text/css\">\n\t\t\t.mui-preview-image.mui-fullscreen {\n\t\t\t\tposition: fixed;\n\t\t\t\tz-index: 20;\n\t\t\t\tbackground-color: #000;\n\t\t\t}\n\t\t\t.mui-preview-header,\n\t\t\t.mui-preview-footer {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 100%;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 10;\n\t\t\t}\n\t\t\t.mui-preview-header {\n\t\t\t\theight: 44px;\n\t\t\t\ttop: 0;\n\t\t\t}\n\t\t\t.mui-preview-footer {\n\t\t\t\theight: 50px;\n\t\t\t\tbottom: 0px;\n\t\t\t}\n\t\t\t.mui-preview-header .mui-preview-indicator {\n\t\t\t\tdisplay: block;\n\t\t\t\tline-height: 25px;\n\t\t\t\tcolor: #fff;\n\t\t\t\ttext-align: center;\n\t\t\t\tmargin: 15px auto 4;\n\t\t\t\twidth: 70px;\n\t\t\t\tbackground-color: rgba(0, 0, 0, 0.4);\n\t\t\t\tborder-radius: 12px;\n\t\t\t\tfont-size: 16px;\n\t\t\t}\n\t\t\t.mui-preview-image {\n\t\t\t\tdisplay: none;\n\t\t\t\t-webkit-animation-duration: 0.5s;\n\t\t\t\tanimation-duration: 0.5s;\n\t\t\t\t-webkit-animation-fill-mode: both;\n\t\t\t\tanimation-fill-mode: both;\n\t\t\t}\n\t\t\t.mui-preview-image.mui-preview-in {\n\t\t\t\t-webkit-animation-name: fadeIn;\n\t\t\t\tanimation-name: fadeIn;\n\t\t\t}\n\t\t\t.mui-preview-image.mui-preview-out {\n\t\t\t\tbackground: none;\n\t\t\t\t-webkit-animation-name: fadeOut;\n\t\t\t\tanimation-name: fadeOut;\n\t\t\t}\n\t\t\t.mui-preview-image.mui-preview-out .mui-preview-header,\n\t\t\t.mui-preview-image.mui-preview-out .mui-preview-footer {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.mui-zoom-scroller {\n\t\t\t\tposition: absolute;\n\t\t\t\tdisplay: -webkit-box;\n\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\tdisplay: flex;\n\t\t\t\t-webkit-box-align: center;\n\t\t\t\t-webkit-align-items: center;\n\t\t\t\talign-items: center;\n\t\t\t\t-webkit-box-pack: center;\n\t\t\t\t-webkit-justify-content: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tbottom: 0;\n\t\t\t\ttop: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t\t-webkit-backface-visibility: hidden;\n\t\t\t}\n\t\t\t.mui-zoom {\n\t\t\t\t-webkit-transform-style: preserve-3d;\n\t\t\t\ttransform-style: preserve-3d;\n\t\t\t}\n\t\t\t.mui-slider .mui-slider-group .mui-slider-item img {\n\t\t\t\twidth: auto;\n\t\t\t\theight: auto;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tmax-height: 100%;\n\t\t\t}\n\t\t\t.mui-android-4-1 .mui-slider .mui-slider-group .mui-slider-item img {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.mui-android-4-1 .mui-slider.mui-preview-image .mui-slider-group .mui-slider-item {\n\t\t\t\tdisplay: inline-table;\n\t\t\t}\n\t\t\t.mui-android-4-1 .mui-slider.mui-preview-image .mui-zoom-scroller img {\n\t\t\t\tdisplay: table-cell;\n\t\t\t\tvertical-align: middle;\n\t\t\t}\n\t\t\t.mui-preview-loading {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.mui-preview-loading.mui-active {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t\t.mui-preview-loading .mui-spinner-white {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 50%;\n\t\t\t\tleft: 50%;\n\t\t\t\tmargin-left: -25px;\n\t\t\t\tmargin-top: -25px;\n\t\t\t\theight: 50px;\n\t\t\t\twidth: 50px;\n\t\t\t}\n\t\t\t.mui-preview-image img.mui-transitioning {\n\t\t\t\t-webkit-transition: -webkit-transform 0.5s ease, opacity 0.5s ease;\n\t\t\t\ttransition: transform 0.5s ease, opacity 0.5s ease;\n\t\t\t}\n\t\t\t@-webkit-keyframes fadeIn {\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes fadeIn {\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-webkit-keyframes fadeOut {\n\t\t\t\t0% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes fadeOut {\n\t\t\t\t0% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tp img {\n\t\t\t\tmax-width: 100%;\n\t\t\t\theight: auto;\n\t\t\t}\n\t\t</style>\n\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">image viewer（图片预览）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>这是图片放大预览示例，点击如下图片体验全屏预览功能</p>\n\t\t\t\t<p>\n\t\t\t\t\t<img src=\"../images/yuantiao.jpg\" data-preview-src=\"\" data-preview-group=\"1\" />\n\t\t\t\t</p>\n\t\t\t\t<p>图片全屏后，双击或双指缩放均可对图片进行放大、缩小操作，左右滑动可查看同组(data-preview-group相同的图片为一组)其它图片，点击会关闭预览</p>\n\t\t\t\t<p>\n\t\t\t\t\t<img src=\"../images/muwu.jpg\" data-preview-src=\"\" data-preview-group=\"1\" />\n\t\t\t\t</p>\n\t\t\t\t<p>第三张图片，纯粹为了占位： </p>\n\t\t\t\t<p>\n\t\t\t\t\t<img src=\"../images/shuijiao.jpg\" data-preview-src=\"\" data-preview-group=\"1\" />\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script src=\"../js/mui.zoom.js\"></script>\n\t<script src=\"../js/mui.previewimage.js\"></script>\n\t<script>\n\t\tmui.previewImage();\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/indexed-list-select.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"../css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<link href=\"../css/mui.indexedlist.css\" rel=\"stylesheet\" />\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\theight: 100%;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.mui-bar {\n\t\t\t\t-webkit-box-shadow: none;\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\t\t\t#done.mui-disabled{\n\t\t\t\tcolor: gray;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">选择机场</h1>\n\t\t\t<a id='done' class=\"mui-btn mui-btn-link mui-pull-right mui-btn-blue mui-disabled\">完成</a>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div id='list' class=\"mui-indexed-list\">\n\t\t\t\t<div class=\"mui-indexed-list-search mui-input-row mui-search\">\n\t\t\t\t\t<input type=\"search\" class=\"mui-input-clear mui-indexed-list-search-input\" placeholder=\"搜索机场\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-indexed-list-bar\">\n\t\t\t\t\t<a>A</a>\n\t\t\t\t\t<a>B</a>\n\t\t\t\t\t<a>C</a>\n\t\t\t\t\t<a>D</a>\n\t\t\t\t\t<a>E</a>\n\t\t\t\t\t<a>F</a>\n\t\t\t\t\t<a>G</a>\n\t\t\t\t\t<a>H</a>\n\t\t\t\t\t<a>I</a>\n\t\t\t\t\t<a>J</a>\n\t\t\t\t\t<a>K</a>\n\t\t\t\t\t<a>L</a>\n\t\t\t\t\t<a>M</a>\n\t\t\t\t\t<a>N</a>\n\t\t\t\t\t<a>O</a>\n\t\t\t\t\t<a>P</a>\n\t\t\t\t\t<a>Q</a>\n\t\t\t\t\t<a>R</a>\n\t\t\t\t\t<a>S</a>\n\t\t\t\t\t<a>T</a>\n\t\t\t\t\t<a>U</a>\n\t\t\t\t\t<a>V</a>\n\t\t\t\t\t<a>W</a>\n\t\t\t\t\t<a>X</a>\n\t\t\t\t\t<a>Y</a>\n\t\t\t\t\t<a>Z</a>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-indexed-list-alert\"></div>\n\t\t\t\t<div class=\"mui-indexed-list-inner\">\n\t\t\t\t\t<div class=\"mui-indexed-list-empty-alert\">没有数据</div>\n\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t<li data-group=\"A\" class=\"mui-table-view-divider mui-indexed-list-group\">A</li>\n\t\t\t\t\t\t<li data-value=\"AKU\" data-tags=\"AKeSu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />阿克苏机场</li>\n\t\t\t\t\t\t<li data-value=\"BPL\" data-tags=\"ALaShanKou\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />阿拉山口机场</li>\n\t\t\t\t\t\t<li data-value=\"AAT\" data-tags=\"ALeTai\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />阿勒泰机场</li>\n\t\t\t\t\t\t<li data-value=\"NGQ\" data-tags=\"ALiKunSha\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />阿里昆莎机场</li>\n\t\t\t\t\t\t<li data-value=\"AQG\" data-tags=\"AnQingTianZhuShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />安庆天柱山机场</li>\n\t\t\t\t\t\t<li data-value=\"MFM\" data-tags=\"AoMenGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />澳门国际机场</li>\n\t\t\t\t\t\t<li data-group=\"B\" class=\"mui-table-view-divider mui-indexed-list-group\">B</li>\n\t\t\t\t\t\t<li data-value=\"BSD\" data-tags=\"BaoShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />保山机场</li>\n\t\t\t\t\t\t<li data-value=\"BAV\" data-tags=\"BaoTou\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />包头机场</li>\n\t\t\t\t\t\t<li data-value=\"BHY\" data-tags=\"BeiHaiFuCheng\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />北海福成机场</li>\n\t\t\t\t\t\t<li data-value=\"NAY\" data-tags=\"BeiJingNanYuan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />北京南苑机场</li>\n\t\t\t\t\t\t<li data-value=\"PEK\" data-tags=\"BeiJingShouDuGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />北京首都国际机场</li>\n\t\t\t\t\t\t<li data-group=\"C\" class=\"mui-table-view-divider mui-indexed-list-group\">C</li>\n\t\t\t\t\t\t<li data-value=\"NBS\" data-tags=\"ChangBaiShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />长白山机场</li>\n\t\t\t\t\t\t<li data-value=\"CGQ\" data-tags=\"ChangChunLongJiaGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />长春龙嘉国际机场</li>\n\t\t\t\t\t\t<li data-value=\"CGD\" data-tags=\"ChangDeTaoHuaYuan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />常德桃花源机场</li>\n\t\t\t\t\t\t<li data-value=\"BPX\" data-tags=\"ChangDuBangDa\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />昌都邦达机场</li>\n\t\t\t\t\t\t<li data-value=\"CSX\" data-tags=\"ChangShaHuangHuaGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />长沙黄花国际机场</li>\n\t\t\t\t\t\t<li data-value=\"CIH\" data-tags=\"ChangZhiWangCun\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />长治王村机场</li>\n\t\t\t\t\t\t<li data-value=\"CZX\" data-tags=\"ChangZhouBenNiu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />常州奔牛机场</li>\n\t\t\t\t\t\t<li data-value=\"CTU\" data-tags=\"ChengDuShuangLiuGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />成都双流国际机场</li>\n\t\t\t\t\t\t<li data-value=\"CIF\" data-tags=\"ChiFeng\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />赤峰机场</li>\n\t\t\t\t\t\t<li data-group=\"D\" class=\"mui-table-view-divider mui-indexed-list-group\">D</li>\n\t\t\t\t\t\t<li data-value=\"DLU\" data-tags=\"DaLi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />大理机场</li>\n\t\t\t\t\t\t<li data-value=\"DLC\" data-tags=\"DaLianZhouShuiZiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />大连周水子国际机场</li>\n\t\t\t\t\t\t<li data-value=\"DQA\" data-tags=\"DaQingSaErTu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />大庆萨尔图机场</li>\n\t\t\t\t\t\t<li data-value=\"DAT\" data-tags=\"DaTongDongWangZhuang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />大同东王庄机场</li>\n\t\t\t\t\t\t<li data-value=\"DAX\" data-tags=\"DaZhouHeShi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />达州河市机场</li>\n\t\t\t\t\t\t<li data-value=\"DDG\" data-tags=\"DanDongLangTou\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />丹东浪头机场</li>\n\t\t\t\t\t\t<li data-value=\"LUM\" data-tags=\"DeHongMangShi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />德宏芒市机场</li>\n\t\t\t\t\t\t<li data-value=\"DIG\" data-tags=\"DiQingXiangGeLiLa\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />迪庆香格里拉机场</li>\n\t\t\t\t\t\t<li data-value=\"DOY\" data-tags=\"DongYing\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />东营机场</li>\n\t\t\t\t\t\t<li data-value=\"DNH\" data-tags=\"DunHuang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />敦煌机场</li>\n\t\t\t\t\t\t<li data-group=\"E\" class=\"mui-table-view-divider mui-indexed-list-group\">E</li>\n\t\t\t\t\t\t<li data-value=\"DSN\" data-tags=\"EErDuoSi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />鄂尔多斯机场</li>\n\t\t\t\t\t\t<li data-value=\"ENH\" data-tags=\"EnShiXuJiaPing\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />恩施许家坪机场</li>\n\t\t\t\t\t\t<li data-value=\"ERL\" data-tags=\"ErLianHaoTeSaiWuSuGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />二连浩特赛乌苏国际机场</li>\n\t\t\t\t\t\t<li data-group=\"F\" class=\"mui-table-view-divider mui-indexed-list-group\">F</li>\n\t\t\t\t\t\t<li data-value=\"FUG\" data-tags=\"FuYangXiGuan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />阜阳西关机场</li>\n\t\t\t\t\t\t<li data-value=\"FOC\" data-tags=\"FuZhouChangLeGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />福州长乐国际机场</li>\n\t\t\t\t\t\t<li data-group=\"G\" class=\"mui-table-view-divider mui-indexed-list-group\">G</li>\n\t\t\t\t\t\t<li data-value=\"KOW\" data-tags=\"GanZhouHuangJin\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />赣州黄金机场</li>\n\t\t\t\t\t\t<li data-value=\"GOQ\" data-tags=\"GeErMu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />格尔木机场</li>\n\t\t\t\t\t\t<li data-value=\"GYU\" data-tags=\"GuYuanLiuPanShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />固原六盘山机场</li>\n\t\t\t\t\t\t<li data-value=\"GYS\" data-tags=\"GuangYuanPanLong\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />广元盘龙机场</li>\n\t\t\t\t\t\t<li data-value=\"CAN\" data-tags=\"GuangZhouBaiYunGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />广州白云国际机场</li>\n\t\t\t\t\t\t<li data-value=\"KWL\" data-tags=\"GuiLinLiangJiangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />桂林两江国际机场</li>\n\t\t\t\t\t\t<li data-value=\"KWE\" data-tags=\"GuiYangLongDongBaoGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />贵阳龙洞堡国际机场</li>\n\t\t\t\t\t\t<li data-group=\"H\" class=\"mui-table-view-divider mui-indexed-list-group\">H</li>\n\t\t\t\t\t\t<li data-value=\"HRB\" data-tags=\"HaErBinTaiPingGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />哈尔滨太平国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HMI\" data-tags=\"HaMi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />哈密机场</li>\n\t\t\t\t\t\t<li data-value=\"HAK\" data-tags=\"HaiKouMeiLanGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />海口美兰国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HLD\" data-tags=\"HaiLaErDongShanGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />海拉尔东山国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HDG\" data-tags=\"HanDan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />邯郸机场</li>\n\t\t\t\t\t\t<li data-value=\"HZG\" data-tags=\"HanZhong\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />汉中机场</li>\n\t\t\t\t\t\t<li data-value=\"HGH\" data-tags=\"HangZhouXiaoShanGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />杭州萧山国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HFE\" data-tags=\"HeFeiLuoGangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />合肥骆岗国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HTN\" data-tags=\"HeTian\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />和田机场</li>\n\t\t\t\t\t\t<li data-value=\"HEK\" data-tags=\"HeiHe\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />黑河机场</li>\n\t\t\t\t\t\t<li data-value=\"HET\" data-tags=\"HuHeHaoTeBaiTaGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />呼和浩特白塔国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HIA\" data-tags=\"HuaiAnLianShui\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />淮安涟水机场</li>\n\t\t\t\t\t\t<li data-value=\"TXN\" data-tags=\"HuangShanTunXiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />黄山屯溪国际机场</li>\n\t\t\t\t\t\t<li data-group=\"J\" class=\"mui-table-view-divider mui-indexed-list-group\">J</li>\n\t\t\t\t\t\t<li data-value=\"TNA\" data-tags=\"JiNanYaoQiangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />济南遥墙国际机场</li>\n\t\t\t\t\t\t<li data-value=\"JNG\" data-tags=\"JiNingQuFu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />济宁曲阜机场</li>\n\t\t\t\t\t\t<li data-value=\"JXA\" data-tags=\"JiXiXingKaiHu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />鸡西兴凯湖机场</li>\n\t\t\t\t\t\t<li data-value=\"JMU\" data-tags=\"JiaMuSiDongJiao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />佳木斯东郊机场</li>\n\t\t\t\t\t\t<li data-value=\"JGN\" data-tags=\"JiaYuGuan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />嘉峪关机场</li>\n\t\t\t\t\t\t<li data-value=\"JNZ\" data-tags=\"JinZhouXiaoLingZi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />锦州小岭子机场</li>\n\t\t\t\t\t\t<li data-value=\"JDZ\" data-tags=\"JingDeZhen\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />景德镇机场</li>\n\t\t\t\t\t\t<li data-value=\"JGS\" data-tags=\"JingGangShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />井冈山机场</li>\n\t\t\t\t\t\t<li data-value=\"JIU\" data-tags=\"JiuJiangLuShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />九江庐山机场</li>\n\t\t\t\t\t\t<li data-value=\"JZH\" data-tags=\"JiuZhaiHuangLong\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />九寨黄龙机场</li>\n\t\t\t\t\t\t<li data-group=\"K\" class=\"mui-table-view-divider mui-indexed-list-group\">K</li>\n\t\t\t\t\t\t<li data-value=\"KHG\" data-tags=\"KaShi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />喀什机场</li>\n\t\t\t\t\t\t<li data-value=\"KRY\" data-tags=\"KeLaMaYi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />克拉玛依机场</li>\n\t\t\t\t\t\t<li data-value=\"KCA\" data-tags=\"KuCheGuiZi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />库车龟兹机场</li>\n\t\t\t\t\t\t<li data-value=\"KRL\" data-tags=\"KuErLe\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />库尔勒机场</li>\n\t\t\t\t\t\t<li data-value=\"KMG\" data-tags=\"KunMingWuJiaBaGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />昆明巫家坝国际机场</li>\n\t\t\t\t\t\t<li data-group=\"L\" class=\"mui-table-view-divider mui-indexed-list-group\">L</li>\n\t\t\t\t\t\t<li data-value=\"LXA\" data-tags=\"LaSaGongGa\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />拉萨贡嘎机场</li>\n\t\t\t\t\t\t<li data-value=\"LHW\" data-tags=\"LanZhouZhongChuan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />兰州中川机场</li>\n\t\t\t\t\t\t<li data-value=\"LJG\" data-tags=\"LiJiangSanYi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />丽江三义机场</li>\n\t\t\t\t\t\t<li data-value=\"HZH\" data-tags=\"LiPing\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />黎平机场</li>\n\t\t\t\t\t\t<li data-value=\"LYG\" data-tags=\"LianYunGangBaiTaBu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />连云港白塔埠机场</li>\n\t\t\t\t\t\t<li data-value=\"LNJ\" data-tags=\"LinCang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />临沧机场</li>\n\t\t\t\t\t\t<li data-value=\"LYI\" data-tags=\"LinYi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />临沂机场</li>\n\t\t\t\t\t\t<li data-value=\"LZY\" data-tags=\"LinZhiMiLin\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />林芝米林机场</li>\n\t\t\t\t\t\t<li data-value=\"LZH\" data-tags=\"LiuZhouBaiLian\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />柳州白莲机场</li>\n\t\t\t\t\t\t<li data-value=\"LCX\" data-tags=\"LongYanGuanZhiShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />龙岩冠豸山机场</li>\n\t\t\t\t\t\t<li data-value=\"LZO\" data-tags=\"LuZhouLanTian\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />泸州蓝田机场</li>\n\t\t\t\t\t\t<li data-value=\"LYA\" data-tags=\"LuoYangBeiJiao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />洛阳北郊机场</li>\n\t\t\t\t\t\t<li data-group=\"M\" class=\"mui-table-view-divider mui-indexed-list-group\">M</li>\n\t\t\t\t\t\t<li data-value=\"NZH\" data-tags=\"ManZhouLiXiJiao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />满洲里西郊机场</li>\n\t\t\t\t\t\t<li data-value=\"MIG\" data-tags=\"MianYangNanJiao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />绵阳南郊机场</li>\n\t\t\t\t\t\t<li data-value=\"OHE\" data-tags=\"MoHeGuLian\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />漠河古莲机场</li>\n\t\t\t\t\t\t<li data-value=\"MDG\" data-tags=\"MuDanJiangHaiLang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />牡丹江海浪机场</li>\n\t\t\t\t\t\t<li data-group=\"N\" class=\"mui-table-view-divider mui-indexed-list-group\">N</li>\n\t\t\t\t\t\t<li data-value=\"KHN\" data-tags=\"NanChangChangBeiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />南昌昌北国际机场</li>\n\t\t\t\t\t\t<li data-value=\"NAO\" data-tags=\"NanChongGaoPing\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />南充高坪机场</li>\n\t\t\t\t\t\t<li data-value=\"NKG\" data-tags=\"NanJingLuKouGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />南京禄口国际机场</li>\n\t\t\t\t\t\t<li data-value=\"NNG\" data-tags=\"NanNingWuXu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />南宁吴圩机场</li>\n\t\t\t\t\t\t<li data-value=\"NTG\" data-tags=\"NanTongXingDong\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />南通兴东机场</li>\n\t\t\t\t\t\t<li data-value=\"NNY\" data-tags=\"NanYangJiangYing\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />南阳姜营机场</li>\n\t\t\t\t\t\t<li data-value=\"NGB\" data-tags=\"NingBoLiSheGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />宁波栎社国际机场</li>\n\t\t\t\t\t\t<li data-group=\"P\" class=\"mui-table-view-divider mui-indexed-list-group\">P</li>\n\t\t\t\t\t\t<li data-value=\"SYM\" data-tags=\"PuErSiMao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />普洱思茅机场</li>\n\t\t\t\t\t\t<li data-group=\"Q\" class=\"mui-table-view-divider mui-indexed-list-group\">Q</li>\n\t\t\t\t\t\t<li data-value=\"NDG\" data-tags=\"QiQiHaErSanJiaZi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />齐齐哈尔三家子机场</li>\n\t\t\t\t\t\t<li data-value=\"SHP\" data-tags=\"QinHuangDaoShanHaiGuan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />秦皇岛山海关机场</li>\n\t\t\t\t\t\t<li data-value=\"TAO\" data-tags=\"QingDaoLiuTingGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />青岛流亭国际机场</li>\n\t\t\t\t\t\t<li data-value=\"JUZ\" data-tags=\"QuZhou\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />衢州机场</li>\n\t\t\t\t\t\t<li data-value=\"JJN\" data-tags=\"QuanZhouJinJiang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />泉州晋江机场</li>\n\t\t\t\t\t\t<li data-group=\"R\" class=\"mui-table-view-divider mui-indexed-list-group\">R</li>\n\t\t\t\t\t\t<li data-value=\"RKZ\" data-tags=\"RiKaZeHePing\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />日喀则和平机场</li>\n\t\t\t\t\t\t<li data-group=\"S\" class=\"mui-table-view-divider mui-indexed-list-group\">S</li>\n\t\t\t\t\t\t<li data-value=\"SYX\" data-tags=\"SanYaFengHuangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />三亚凤凰国际机场</li>\n\t\t\t\t\t\t<li data-value=\"SWA\" data-tags=\"ShanTouWaiSha\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />汕头外砂机场</li>\n\t\t\t\t\t\t<li data-value=\"SHA\" data-tags=\"ShangHaiHongQiaoGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />上海虹桥国际机场</li>\n\t\t\t\t\t\t<li data-value=\"PVG\" data-tags=\"ShangHaiPuDongGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />上海浦东国际机场</li>\n\t\t\t\t\t\t<li data-value=\"SZX\" data-tags=\"ShenChouBaoAnGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />深圳宝安国际机场</li>\n\t\t\t\t\t\t<li data-value=\"SHE\" data-tags=\"ShenYangTaoXianGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />沈阳桃仙国际机场</li>\n\t\t\t\t\t\t<li data-value=\"SJW\" data-tags=\"ShiJiaZhuangZhengDingGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />石家庄正定国际机场</li>\n\t\t\t\t\t\t<li data-value=\"WUX\" data-tags=\"SuNanShuoFangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />苏南硕放国际机场</li>\n\t\t\t\t\t\t<li data-group=\"T\" class=\"mui-table-view-divider mui-indexed-list-group\">T</li>\n\t\t\t\t\t\t<li data-value=\"TCG\" data-tags=\"TaCheng\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />塔城机场</li>\n\t\t\t\t\t\t<li data-value=\"TYN\" data-tags=\"TaiYuanWuSuGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />太原武宿国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HYN\" data-tags=\"TaiZhouLuQiao-HuangYanJiChang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />台州路桥机场 (黄岩机场)</li>\n\t\t\t\t\t\t<li data-value=\"TVS\" data-tags=\"TangShanSanNvHe\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />唐山三女河机场</li>\n\t\t\t\t\t\t<li data-value=\"TCZ\" data-tags=\"TengChongTuoFeng\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />腾冲驼峰机场</li>\n\t\t\t\t\t\t<li data-value=\"TSN\" data-tags=\"TianJinBinHaiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />天津滨海国际机场</li>\n\t\t\t\t\t\t<li data-value=\"TGO\" data-tags=\"TongLiao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />通辽机场</li>\n\t\t\t\t\t\t<li data-value=\"TEN\" data-tags=\"TongRenFengHuang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />铜仁凤凰机场</li>\n\t\t\t\t\t\t<li data-group=\"W\" class=\"mui-table-view-divider mui-indexed-list-group\">W</li>\n\t\t\t\t\t\t<li data-value=\"WXN\" data-tags=\"WanZhouWuQiao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />万州五桥机场</li>\n\t\t\t\t\t\t<li data-value=\"WEF\" data-tags=\"WeiFang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />潍坊机场</li>\n\t\t\t\t\t\t<li data-value=\"WEH\" data-tags=\"WeiHaiDaShuiBo\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />威海大水泊机场</li>\n\t\t\t\t\t\t<li data-value=\"WNH\" data-tags=\"WenShanPuZheHei\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />文山普者黑机场</li>\n\t\t\t\t\t\t<li data-value=\"WNZ\" data-tags=\"WenZhouYongQiangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />温州永强国际机场</li>\n\t\t\t\t\t\t<li data-value=\"WUA\" data-tags=\"WuHai\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />乌海机场</li>\n\t\t\t\t\t\t<li data-value=\"WUH\" data-tags=\"WuHanTianHeGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />武汉天河国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HLH\" data-tags=\"WuLanHaoTe\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />乌兰浩特机场</li>\n\t\t\t\t\t\t<li data-value=\"URC\" data-tags=\"WuLuMuQiDiWoBaoGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />乌鲁木齐地窝堡国际机场</li>\n\t\t\t\t\t\t<li data-value=\"WUS\" data-tags=\"WuYiShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />武夷山机场</li>\n\t\t\t\t\t\t<li data-value=\"WUZ\" data-tags=\"WuZhouChangZhouDao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />梧州长洲岛机场</li>\n\t\t\t\t\t\t<li data-group=\"X\" class=\"mui-table-view-divider mui-indexed-list-group\">X</li>\n\t\t\t\t\t\t<li data-value=\"XIY\" data-tags=\"XiAnXianYangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />西安咸阳国际机场</li>\n\t\t\t\t\t\t<li data-value=\"XIC\" data-tags=\"XiChangQingShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />西昌青山机场</li>\n\t\t\t\t\t\t<li data-value=\"XIL\" data-tags=\"XiLinHaoTe\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />锡林浩特机场</li>\n\t\t\t\t\t\t<li data-value=\"XNN\" data-tags=\"XiNingCaoJiaBao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />西宁曹家堡机场</li>\n\t\t\t\t\t\t<li data-value=\"JHG\" data-tags=\"XiShuangBanNaGaSa\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />西双版纳嘎洒机场</li>\n\t\t\t\t\t\t<li data-value=\"XMN\" data-tags=\"XiaMenGaoQiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />厦门高崎国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HKG\" data-tags=\"XiangGangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />香港国际机场</li>\n\t\t\t\t\t\t<li data-value=\"XFN\" data-tags=\"XiangYangLiuJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />襄阳刘集机场</li>\n\t\t\t\t\t\t<li data-value=\"ACX\" data-tags=\"XingYi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />兴义机场</li>\n\t\t\t\t\t\t<li data-value=\"XUZ\" data-tags=\"XuZhouGuanYin\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />徐州观音机场</li>\n\t\t\t\t\t\t<li data-group=\"Y\" class=\"mui-table-view-divider mui-indexed-list-group\">Y</li>\n\t\t\t\t\t\t<li data-value=\"ENY\" data-tags=\"YanAnErShiLiBao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />延安二十里堡机场</li>\n\t\t\t\t\t\t<li data-value=\"YNZ\" data-tags=\"YanCheng\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />盐城机场</li>\n\t\t\t\t\t\t<li data-value=\"YNJ\" data-tags=\"YanJiChaoYangChuan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />延吉朝阳川机场</li>\n\t\t\t\t\t\t<li data-value=\"YNT\" data-tags=\"YanTaiLaiShanGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />烟台莱山国际机场</li>\n\t\t\t\t\t\t<li data-value=\"YBP\" data-tags=\"YiBinCaiBa\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />宜宾菜坝机场</li>\n\t\t\t\t\t\t<li data-value=\"YIH\" data-tags=\"YiChangSanXia\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />宜昌三峡机场</li>\n\t\t\t\t\t\t<li data-value=\"LDS\" data-tags=\"YiChunLinDu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />伊春林都机场</li>\n\t\t\t\t\t\t<li data-value=\"YIN\" data-tags=\"YiNing\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />伊宁机场</li>\n\t\t\t\t\t\t<li data-value=\"YIW\" data-tags=\"YiWu\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />义乌机场</li>\n\t\t\t\t\t\t<li data-value=\"INC\" data-tags=\"YinChuanHeDong\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />银川河东机场</li>\n\t\t\t\t\t\t<li data-value=\"LLF\" data-tags=\"YongZhouLingLing\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />永州零陵机场</li>\n\t\t\t\t\t\t<li data-value=\"UYN\" data-tags=\"YuLinYuYang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />榆林榆阳机场</li>\n\t\t\t\t\t\t<li data-value=\"YUS\" data-tags=\"YuShuBaTang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />玉树巴塘机场</li>\n\t\t\t\t\t\t<li data-value=\"YCU\" data-tags=\"YunChengZhangXiao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />运城张孝机场</li>\n\t\t\t\t\t\t<li data-group=\"Z\" class=\"mui-table-view-divider mui-indexed-list-group\">Z</li>\n\t\t\t\t\t\t<li data-value=\"ZHA\" data-tags=\"ZhanJiang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />湛江机场</li>\n\t\t\t\t\t\t<li data-value=\"ZAT\" data-tags=\"ZhaoTong\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />昭通机场</li>\n\t\t\t\t\t\t<li data-value=\"CGO\" data-tags=\"ZhengZhouXinZhengGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />郑州新郑国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HJJ\" data-tags=\"ZhiJiang\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />芷江机场</li>\n\t\t\t\t\t\t<li data-value=\"CKG\" data-tags=\"ZhongQingJiangBeiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />重庆江北国际机场</li>\n\t\t\t\t\t\t<li data-value=\"ZHY\" data-tags=\"ZhongWeiXiangShan\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />中卫香山机场</li>\n\t\t\t\t\t\t<li data-value=\"HSN\" data-tags=\"ZhouShanZhuJiaJian\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />舟山朱家尖机场</li>\n\t\t\t\t\t\t<li data-value=\"ZUH\" data-tags=\"ZhuHaiSanZao\" class=\"mui-table-view-cell mui-indexed-list-item mui-checkbox mui-left\">\n\t\t\t\t\t\t\t<input type=\"checkbox\" />珠海三灶机场</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script src=\"../js/mui.indexedlist.js\"></script>\n\t\t<!--<script src=\"../js/mui.grouplist.testdata.js\"></script>-->\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tmui.init();\n\t\t\tmui.ready(function() {\n\t\t\t\tvar header = document.querySelector('header.mui-bar');\n\t\t\t\tvar list = document.getElementById('list');\n\t\t\t\tvar done = document.getElementById('done');\n\t\t\t\t//calc hieght\n\t\t\t\tlist.style.height = (document.body.offsetHeight - header.offsetHeight) + 'px';\n\t\t\t\t//create\n\t\t\t\twindow.indexedList = new mui.IndexedList(list);\n\t\t\t\t//done event\n\t\t\t\tdone.addEventListener('tap', function() {\n\t\t\t\t\tvar checkboxArray = [].slice.call(list.querySelectorAll('input[type=\"checkbox\"]'));\n\t\t\t\t\tvar checkedValues = [];\n\t\t\t\t\tcheckboxArray.forEach(function(box) {\n\t\t\t\t\t\tif (box.checked) {\n\t\t\t\t\t\t\tcheckedValues.push(box.parentNode.innerText);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (checkedValues.length > 0) {\n\t\t\t\t\t\tmui.alert('你选择了: ' + checkedValues);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmui.alert('你没选择任何机场');\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t\tmui('.mui-indexed-list-inner').on('change', 'input', function() {\n\t\t\t\t\tvar count = list.querySelectorAll('input[type=\"checkbox\"]:checked').length;\n\t\t\t\t\tvar value = count ? \"完成(\" + count + \")\" : \"完成\";\n\t\t\t\t\tdone.innerHTML = value;\n\t\t\t\t\tif (count) {\n\t\t\t\t\t\tif (done.classList.contains(\"mui-disabled\")) {\n\t\t\t\t\t\t\tdone.classList.remove(\"mui-disabled\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!done.classList.contains(\"mui-disabled\")) {\n\t\t\t\t\t\t\tdone.classList.add(\"mui-disabled\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/indexed-list.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"../css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<link href=\"../css/mui.indexedlist.css\" rel=\"stylesheet\" />\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\theight: 100%;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.mui-bar {\n\t\t\t\t-webkit-box-shadow: none;\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">indexed list（索引列表）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div id='list' class=\"mui-indexed-list\">\n\t\t\t\t<div class=\"mui-indexed-list-search mui-input-row mui-search\">\n\t\t\t\t\t<input type=\"search\" class=\"mui-input-clear mui-indexed-list-search-input\" placeholder=\"搜索机场\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-indexed-list-bar\">\n\t\t\t\t\t<a>A</a>\n\t\t\t\t\t<a>B</a>\n\t\t\t\t\t<a>C</a>\n\t\t\t\t\t<a>D</a>\n\t\t\t\t\t<a>E</a>\n\t\t\t\t\t<a>F</a>\n\t\t\t\t\t<a>G</a>\n\t\t\t\t\t<a>H</a>\n\t\t\t\t\t<a>I</a>\n\t\t\t\t\t<a>J</a>\n\t\t\t\t\t<a>K</a>\n\t\t\t\t\t<a>L</a>\n\t\t\t\t\t<a>M</a>\n\t\t\t\t\t<a>N</a>\n\t\t\t\t\t<a>O</a>\n\t\t\t\t\t<a>P</a>\n\t\t\t\t\t<a>Q</a>\n\t\t\t\t\t<a>R</a>\n\t\t\t\t\t<a>S</a>\n\t\t\t\t\t<a>T</a>\n\t\t\t\t\t<a>U</a>\n\t\t\t\t\t<a>V</a>\n\t\t\t\t\t<a>W</a>\n\t\t\t\t\t<a>X</a>\n\t\t\t\t\t<a>Y</a>\n\t\t\t\t\t<a>Z</a>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-indexed-list-alert\"></div>\n\t\t\t\t<div class=\"mui-indexed-list-inner\">\n\t\t\t\t\t<div class=\"mui-indexed-list-empty-alert\">没有数据</div>\n\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t<li data-group=\"A\" class=\"mui-table-view-divider mui-indexed-list-group\">A</li>\n\t\t\t\t\t\t<li data-value=\"AKU\" data-tags=\"AKeSu\" class=\"mui-table-view-cell mui-indexed-list-item\">阿克苏机场</li>\n\t\t\t\t\t\t<li data-value=\"BPL\" data-tags=\"ALaShanKou\" class=\"mui-table-view-cell mui-indexed-list-item\">阿拉山口机场</li>\n\t\t\t\t\t\t<li data-value=\"AAT\" data-tags=\"ALeTai\" class=\"mui-table-view-cell mui-indexed-list-item\">阿勒泰机场</li>\n\t\t\t\t\t\t<li data-value=\"NGQ\" data-tags=\"ALiKunSha\" class=\"mui-table-view-cell mui-indexed-list-item\">阿里昆莎机场</li>\n\t\t\t\t\t\t<li data-value=\"AQG\" data-tags=\"AnQingTianZhuShan\" class=\"mui-table-view-cell mui-indexed-list-item\">安庆天柱山机场</li>\n\t\t\t\t\t\t<li data-value=\"MFM\" data-tags=\"AoMenGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">澳门国际机场</li>\n\t\t\t\t\t\t<li data-group=\"B\" class=\"mui-table-view-divider mui-indexed-list-group\">B</li>\n\t\t\t\t\t\t<li data-value=\"BSD\" data-tags=\"BaoShan\" class=\"mui-table-view-cell mui-indexed-list-item\">保山机场</li>\n\t\t\t\t\t\t<li data-value=\"BAV\" data-tags=\"BaoTou\" class=\"mui-table-view-cell mui-indexed-list-item\">包头机场</li>\n\t\t\t\t\t\t<li data-value=\"BHY\" data-tags=\"BeiHaiFuCheng\" class=\"mui-table-view-cell mui-indexed-list-item\">北海福成机场</li>\n\t\t\t\t\t\t<li data-value=\"NAY\" data-tags=\"BeiJingNanYuan\" class=\"mui-table-view-cell mui-indexed-list-item\">北京南苑机场</li>\n\t\t\t\t\t\t<li data-value=\"PEK\" data-tags=\"BeiJingShouDuGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">北京首都国际机场</li>\n\t\t\t\t\t\t<li data-group=\"C\" class=\"mui-table-view-divider mui-indexed-list-group\">C</li>\n\t\t\t\t\t\t<li data-value=\"NBS\" data-tags=\"ChangBaiShan\" class=\"mui-table-view-cell mui-indexed-list-item\">长白山机场</li>\n\t\t\t\t\t\t<li data-value=\"CGQ\" data-tags=\"ChangChunLongJiaGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">长春龙嘉国际机场</li>\n\t\t\t\t\t\t<li data-value=\"CGD\" data-tags=\"ChangDeTaoHuaYuan\" class=\"mui-table-view-cell mui-indexed-list-item\">常德桃花源机场</li>\n\t\t\t\t\t\t<li data-value=\"BPX\" data-tags=\"ChangDuBangDa\" class=\"mui-table-view-cell mui-indexed-list-item\">昌都邦达机场</li>\n\t\t\t\t\t\t<li data-value=\"CSX\" data-tags=\"ChangShaHuangHuaGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">长沙黄花国际机场</li>\n\t\t\t\t\t\t<li data-value=\"CIH\" data-tags=\"ChangZhiWangCun\" class=\"mui-table-view-cell mui-indexed-list-item\">长治王村机场</li>\n\t\t\t\t\t\t<li data-value=\"CZX\" data-tags=\"ChangZhouBenNiu\" class=\"mui-table-view-cell mui-indexed-list-item\">常州奔牛机场</li>\n\t\t\t\t\t\t<li data-value=\"CTU\" data-tags=\"ChengDuShuangLiuGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">成都双流国际机场</li>\n\t\t\t\t\t\t<li data-value=\"CIF\" data-tags=\"ChiFeng\" class=\"mui-table-view-cell mui-indexed-list-item\">赤峰机场</li>\n\t\t\t\t\t\t<li data-group=\"D\" class=\"mui-table-view-divider mui-indexed-list-group\">D</li>\n\t\t\t\t\t\t<li data-value=\"DLU\" data-tags=\"DaLi\" class=\"mui-table-view-cell mui-indexed-list-item\">大理机场</li>\n\t\t\t\t\t\t<li data-value=\"DLC\" data-tags=\"DaLianZhouShuiZiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">大连周水子国际机场</li>\n\t\t\t\t\t\t<li data-value=\"DQA\" data-tags=\"DaQingSaErTu\" class=\"mui-table-view-cell mui-indexed-list-item\">大庆萨尔图机场</li>\n\t\t\t\t\t\t<li data-value=\"DAT\" data-tags=\"DaTongDongWangZhuang\" class=\"mui-table-view-cell mui-indexed-list-item\">大同东王庄机场</li>\n\t\t\t\t\t\t<li data-value=\"DAX\" data-tags=\"DaZhouHeShi\" class=\"mui-table-view-cell mui-indexed-list-item\">达州河市机场</li>\n\t\t\t\t\t\t<li data-value=\"DDG\" data-tags=\"DanDongLangTou\" class=\"mui-table-view-cell mui-indexed-list-item\">丹东浪头机场</li>\n\t\t\t\t\t\t<li data-value=\"LUM\" data-tags=\"DeHongMangShi\" class=\"mui-table-view-cell mui-indexed-list-item\">德宏芒市机场</li>\n\t\t\t\t\t\t<li data-value=\"DIG\" data-tags=\"DiQingXiangGeLiLa\" class=\"mui-table-view-cell mui-indexed-list-item\">迪庆香格里拉机场</li>\n\t\t\t\t\t\t<li data-value=\"DOY\" data-tags=\"DongYing\" class=\"mui-table-view-cell mui-indexed-list-item\">东营机场</li>\n\t\t\t\t\t\t<li data-value=\"DNH\" data-tags=\"DunHuang\" class=\"mui-table-view-cell mui-indexed-list-item\">敦煌机场</li>\n\t\t\t\t\t\t<li data-group=\"E\" class=\"mui-table-view-divider mui-indexed-list-group\">E</li>\n\t\t\t\t\t\t<li data-value=\"DSN\" data-tags=\"EErDuoSi\" class=\"mui-table-view-cell mui-indexed-list-item\">鄂尔多斯机场</li>\n\t\t\t\t\t\t<li data-value=\"ENH\" data-tags=\"EnShiXuJiaPing\" class=\"mui-table-view-cell mui-indexed-list-item\">恩施许家坪机场</li>\n\t\t\t\t\t\t<li data-value=\"ERL\" data-tags=\"ErLianHaoTeSaiWuSuGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">二连浩特赛乌苏国际机场</li>\n\t\t\t\t\t\t<li data-group=\"F\" class=\"mui-table-view-divider mui-indexed-list-group\">F</li>\n\t\t\t\t\t\t<li data-value=\"FUG\" data-tags=\"FuYangXiGuan\" class=\"mui-table-view-cell mui-indexed-list-item\">阜阳西关机场</li>\n\t\t\t\t\t\t<li data-value=\"FOC\" data-tags=\"FuZhouChangLeGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">福州长乐国际机场</li>\n\t\t\t\t\t\t<li data-group=\"G\" class=\"mui-table-view-divider mui-indexed-list-group\">G</li>\n\t\t\t\t\t\t<li data-value=\"KOW\" data-tags=\"GanZhouHuangJin\" class=\"mui-table-view-cell mui-indexed-list-item\">赣州黄金机场</li>\n\t\t\t\t\t\t<li data-value=\"GOQ\" data-tags=\"GeErMu\" class=\"mui-table-view-cell mui-indexed-list-item\">格尔木机场</li>\n\t\t\t\t\t\t<li data-value=\"GYU\" data-tags=\"GuYuanLiuPanShan\" class=\"mui-table-view-cell mui-indexed-list-item\">固原六盘山机场</li>\n\t\t\t\t\t\t<li data-value=\"GYS\" data-tags=\"GuangYuanPanLong\" class=\"mui-table-view-cell mui-indexed-list-item\">广元盘龙机场</li>\n\t\t\t\t\t\t<li data-value=\"CAN\" data-tags=\"GuangZhouBaiYunGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">广州白云国际机场</li>\n\t\t\t\t\t\t<li data-value=\"KWL\" data-tags=\"GuiLinLiangJiangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">桂林两江国际机场</li>\n\t\t\t\t\t\t<li data-value=\"KWE\" data-tags=\"GuiYangLongDongBaoGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">贵阳龙洞堡国际机场</li>\n\t\t\t\t\t\t<li data-group=\"H\" class=\"mui-table-view-divider mui-indexed-list-group\">H</li>\n\t\t\t\t\t\t<li data-value=\"HRB\" data-tags=\"HaErBinTaiPingGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">哈尔滨太平国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HMI\" data-tags=\"HaMi\" class=\"mui-table-view-cell mui-indexed-list-item\">哈密机场</li>\n\t\t\t\t\t\t<li data-value=\"HAK\" data-tags=\"HaiKouMeiLanGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">海口美兰国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HLD\" data-tags=\"HaiLaErDongShanGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">海拉尔东山国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HDG\" data-tags=\"HanDan\" class=\"mui-table-view-cell mui-indexed-list-item\">邯郸机场</li>\n\t\t\t\t\t\t<li data-value=\"HZG\" data-tags=\"HanZhong\" class=\"mui-table-view-cell mui-indexed-list-item\">汉中机场</li>\n\t\t\t\t\t\t<li data-value=\"HGH\" data-tags=\"HangZhouXiaoShanGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">杭州萧山国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HFE\" data-tags=\"HeFeiLuoGangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">合肥骆岗国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HTN\" data-tags=\"HeTian\" class=\"mui-table-view-cell mui-indexed-list-item\">和田机场</li>\n\t\t\t\t\t\t<li data-value=\"HEK\" data-tags=\"HeiHe\" class=\"mui-table-view-cell mui-indexed-list-item\">黑河机场</li>\n\t\t\t\t\t\t<li data-value=\"HET\" data-tags=\"HuHeHaoTeBaiTaGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">呼和浩特白塔国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HIA\" data-tags=\"HuaiAnLianShui\" class=\"mui-table-view-cell mui-indexed-list-item\">淮安涟水机场</li>\n\t\t\t\t\t\t<li data-value=\"TXN\" data-tags=\"HuangShanTunXiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">黄山屯溪国际机场</li>\n\t\t\t\t\t\t<li data-group=\"J\" class=\"mui-table-view-divider mui-indexed-list-group\">J</li>\n\t\t\t\t\t\t<li data-value=\"TNA\" data-tags=\"JiNanYaoQiangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">济南遥墙国际机场</li>\n\t\t\t\t\t\t<li data-value=\"JNG\" data-tags=\"JiNingQuFu\" class=\"mui-table-view-cell mui-indexed-list-item\">济宁曲阜机场</li>\n\t\t\t\t\t\t<li data-value=\"JXA\" data-tags=\"JiXiXingKaiHu\" class=\"mui-table-view-cell mui-indexed-list-item\">鸡西兴凯湖机场</li>\n\t\t\t\t\t\t<li data-value=\"JMU\" data-tags=\"JiaMuSiDongJiao\" class=\"mui-table-view-cell mui-indexed-list-item\">佳木斯东郊机场</li>\n\t\t\t\t\t\t<li data-value=\"JGN\" data-tags=\"JiaYuGuan\" class=\"mui-table-view-cell mui-indexed-list-item\">嘉峪关机场</li>\n\t\t\t\t\t\t<li data-value=\"JNZ\" data-tags=\"JinZhouXiaoLingZi\" class=\"mui-table-view-cell mui-indexed-list-item\">锦州小岭子机场</li>\n\t\t\t\t\t\t<li data-value=\"JDZ\" data-tags=\"JingDeZhen\" class=\"mui-table-view-cell mui-indexed-list-item\">景德镇机场</li>\n\t\t\t\t\t\t<li data-value=\"JGS\" data-tags=\"JingGangShan\" class=\"mui-table-view-cell mui-indexed-list-item\">井冈山机场</li>\n\t\t\t\t\t\t<li data-value=\"JIU\" data-tags=\"JiuJiangLuShan\" class=\"mui-table-view-cell mui-indexed-list-item\">九江庐山机场</li>\n\t\t\t\t\t\t<li data-value=\"JZH\" data-tags=\"JiuZhaiHuangLong\" class=\"mui-table-view-cell mui-indexed-list-item\">九寨黄龙机场</li>\n\t\t\t\t\t\t<li data-group=\"K\" class=\"mui-table-view-divider mui-indexed-list-group\">K</li>\n\t\t\t\t\t\t<li data-value=\"KHG\" data-tags=\"KaShi\" class=\"mui-table-view-cell mui-indexed-list-item\">喀什机场</li>\n\t\t\t\t\t\t<li data-value=\"KRY\" data-tags=\"KeLaMaYi\" class=\"mui-table-view-cell mui-indexed-list-item\">克拉玛依机场</li>\n\t\t\t\t\t\t<li data-value=\"KCA\" data-tags=\"KuCheGuiZi\" class=\"mui-table-view-cell mui-indexed-list-item\">库车龟兹机场</li>\n\t\t\t\t\t\t<li data-value=\"KRL\" data-tags=\"KuErLe\" class=\"mui-table-view-cell mui-indexed-list-item\">库尔勒机场</li>\n\t\t\t\t\t\t<li data-value=\"KMG\" data-tags=\"KunMingWuJiaBaGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">昆明巫家坝国际机场</li>\n\t\t\t\t\t\t<li data-group=\"L\" class=\"mui-table-view-divider mui-indexed-list-group\">L</li>\n\t\t\t\t\t\t<li data-value=\"LXA\" data-tags=\"LaSaGongGa\" class=\"mui-table-view-cell mui-indexed-list-item\">拉萨贡嘎机场</li>\n\t\t\t\t\t\t<li data-value=\"LHW\" data-tags=\"LanZhouZhongChuan\" class=\"mui-table-view-cell mui-indexed-list-item\">兰州中川机场</li>\n\t\t\t\t\t\t<li data-value=\"LJG\" data-tags=\"LiJiangSanYi\" class=\"mui-table-view-cell mui-indexed-list-item\">丽江三义机场</li>\n\t\t\t\t\t\t<li data-value=\"HZH\" data-tags=\"LiPing\" class=\"mui-table-view-cell mui-indexed-list-item\">黎平机场</li>\n\t\t\t\t\t\t<li data-value=\"LYG\" data-tags=\"LianYunGangBaiTaBu\" class=\"mui-table-view-cell mui-indexed-list-item\">连云港白塔埠机场</li>\n\t\t\t\t\t\t<li data-value=\"LNJ\" data-tags=\"LinCang\" class=\"mui-table-view-cell mui-indexed-list-item\">临沧机场</li>\n\t\t\t\t\t\t<li data-value=\"LYI\" data-tags=\"LinYi\" class=\"mui-table-view-cell mui-indexed-list-item\">临沂机场</li>\n\t\t\t\t\t\t<li data-value=\"LZY\" data-tags=\"LinZhiMiLin\" class=\"mui-table-view-cell mui-indexed-list-item\">林芝米林机场</li>\n\t\t\t\t\t\t<li data-value=\"LZH\" data-tags=\"LiuZhouBaiLian\" class=\"mui-table-view-cell mui-indexed-list-item\">柳州白莲机场</li>\n\t\t\t\t\t\t<li data-value=\"LCX\" data-tags=\"LongYanGuanZhiShan\" class=\"mui-table-view-cell mui-indexed-list-item\">龙岩冠豸山机场</li>\n\t\t\t\t\t\t<li data-value=\"LZO\" data-tags=\"LuZhouLanTian\" class=\"mui-table-view-cell mui-indexed-list-item\">泸州蓝田机场</li>\n\t\t\t\t\t\t<li data-value=\"LYA\" data-tags=\"LuoYangBeiJiao\" class=\"mui-table-view-cell mui-indexed-list-item\">洛阳北郊机场</li>\n\t\t\t\t\t\t<li data-group=\"M\" class=\"mui-table-view-divider mui-indexed-list-group\">M</li>\n\t\t\t\t\t\t<li data-value=\"NZH\" data-tags=\"ManZhouLiXiJiao\" class=\"mui-table-view-cell mui-indexed-list-item\">满洲里西郊机场</li>\n\t\t\t\t\t\t<li data-value=\"MIG\" data-tags=\"MianYangNanJiao\" class=\"mui-table-view-cell mui-indexed-list-item\">绵阳南郊机场</li>\n\t\t\t\t\t\t<li data-value=\"OHE\" data-tags=\"MoHeGuLian\" class=\"mui-table-view-cell mui-indexed-list-item\">漠河古莲机场</li>\n\t\t\t\t\t\t<li data-value=\"MDG\" data-tags=\"MuDanJiangHaiLang\" class=\"mui-table-view-cell mui-indexed-list-item\">牡丹江海浪机场</li>\n\t\t\t\t\t\t<li data-group=\"N\" class=\"mui-table-view-divider mui-indexed-list-group\">N</li>\n\t\t\t\t\t\t<li data-value=\"KHN\" data-tags=\"NanChangChangBeiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">南昌昌北国际机场</li>\n\t\t\t\t\t\t<li data-value=\"NAO\" data-tags=\"NanChongGaoPing\" class=\"mui-table-view-cell mui-indexed-list-item\">南充高坪机场</li>\n\t\t\t\t\t\t<li data-value=\"NKG\" data-tags=\"NanJingLuKouGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">南京禄口国际机场</li>\n\t\t\t\t\t\t<li data-value=\"NNG\" data-tags=\"NanNingWuXu\" class=\"mui-table-view-cell mui-indexed-list-item\">南宁吴圩机场</li>\n\t\t\t\t\t\t<li data-value=\"NTG\" data-tags=\"NanTongXingDong\" class=\"mui-table-view-cell mui-indexed-list-item\">南通兴东机场</li>\n\t\t\t\t\t\t<li data-value=\"NNY\" data-tags=\"NanYangJiangYing\" class=\"mui-table-view-cell mui-indexed-list-item\">南阳姜营机场</li>\n\t\t\t\t\t\t<li data-value=\"NGB\" data-tags=\"NingBoLiSheGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">宁波栎社国际机场</li>\n\t\t\t\t\t\t<li data-group=\"P\" class=\"mui-table-view-divider mui-indexed-list-group\">P</li>\n\t\t\t\t\t\t<li data-value=\"SYM\" data-tags=\"PuErSiMao\" class=\"mui-table-view-cell mui-indexed-list-item\">普洱思茅机场</li>\n\t\t\t\t\t\t<li data-group=\"Q\" class=\"mui-table-view-divider mui-indexed-list-group\">Q</li>\n\t\t\t\t\t\t<li data-value=\"NDG\" data-tags=\"QiQiHaErSanJiaZi\" class=\"mui-table-view-cell mui-indexed-list-item\">齐齐哈尔三家子机场</li>\n\t\t\t\t\t\t<li data-value=\"SHP\" data-tags=\"QinHuangDaoShanHaiGuan\" class=\"mui-table-view-cell mui-indexed-list-item\">秦皇岛山海关机场</li>\n\t\t\t\t\t\t<li data-value=\"TAO\" data-tags=\"QingDaoLiuTingGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">青岛流亭国际机场</li>\n\t\t\t\t\t\t<li data-value=\"JUZ\" data-tags=\"QuZhou\" class=\"mui-table-view-cell mui-indexed-list-item\">衢州机场</li>\n\t\t\t\t\t\t<li data-value=\"JJN\" data-tags=\"QuanZhouJinJiang\" class=\"mui-table-view-cell mui-indexed-list-item\">泉州晋江机场</li>\n\t\t\t\t\t\t<li data-group=\"R\" class=\"mui-table-view-divider mui-indexed-list-group\">R</li>\n\t\t\t\t\t\t<li data-value=\"RKZ\" data-tags=\"RiKaZeHePing\" class=\"mui-table-view-cell mui-indexed-list-item\">日喀则和平机场</li>\n\t\t\t\t\t\t<li data-group=\"S\" class=\"mui-table-view-divider mui-indexed-list-group\">S</li>\n\t\t\t\t\t\t<li data-value=\"SYX\" data-tags=\"SanYaFengHuangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">三亚凤凰国际机场</li>\n\t\t\t\t\t\t<li data-value=\"SWA\" data-tags=\"ShanTouWaiSha\" class=\"mui-table-view-cell mui-indexed-list-item\">汕头外砂机场</li>\n\t\t\t\t\t\t<li data-value=\"SHA\" data-tags=\"ShangHaiHongQiaoGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">上海虹桥国际机场</li>\n\t\t\t\t\t\t<li data-value=\"PVG\" data-tags=\"ShangHaiPuDongGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">上海浦东国际机场</li>\n\t\t\t\t\t\t<li data-value=\"SZX\" data-tags=\"ShenChouBaoAnGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">深圳宝安国际机场</li>\n\t\t\t\t\t\t<li data-value=\"SHE\" data-tags=\"ShenYangTaoXianGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">沈阳桃仙国际机场</li>\n\t\t\t\t\t\t<li data-value=\"SJW\" data-tags=\"ShiJiaZhuangZhengDingGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">石家庄正定国际机场</li>\n\t\t\t\t\t\t<li data-value=\"WUX\" data-tags=\"SuNanShuoFangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">苏南硕放国际机场</li>\n\t\t\t\t\t\t<li data-group=\"T\" class=\"mui-table-view-divider mui-indexed-list-group\">T</li>\n\t\t\t\t\t\t<li data-value=\"TCG\" data-tags=\"TaCheng\" class=\"mui-table-view-cell mui-indexed-list-item\">塔城机场</li>\n\t\t\t\t\t\t<li data-value=\"TYN\" data-tags=\"TaiYuanWuSuGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">太原武宿国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HYN\" data-tags=\"TaiZhouLuQiao-HuangYanJiChang\" class=\"mui-table-view-cell mui-indexed-list-item\">台州路桥机场 (黄岩机场)</li>\n\t\t\t\t\t\t<li data-value=\"TVS\" data-tags=\"TangShanSanNvHe\" class=\"mui-table-view-cell mui-indexed-list-item\">唐山三女河机场</li>\n\t\t\t\t\t\t<li data-value=\"TCZ\" data-tags=\"TengChongTuoFeng\" class=\"mui-table-view-cell mui-indexed-list-item\">腾冲驼峰机场</li>\n\t\t\t\t\t\t<li data-value=\"TSN\" data-tags=\"TianJinBinHaiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">天津滨海国际机场</li>\n\t\t\t\t\t\t<li data-value=\"TGO\" data-tags=\"TongLiao\" class=\"mui-table-view-cell mui-indexed-list-item\">通辽机场</li>\n\t\t\t\t\t\t<li data-value=\"TEN\" data-tags=\"TongRenFengHuang\" class=\"mui-table-view-cell mui-indexed-list-item\">铜仁凤凰机场</li>\n\t\t\t\t\t\t<li data-group=\"W\" class=\"mui-table-view-divider mui-indexed-list-group\">W</li>\n\t\t\t\t\t\t<li data-value=\"WXN\" data-tags=\"WanZhouWuQiao\" class=\"mui-table-view-cell mui-indexed-list-item\">万州五桥机场</li>\n\t\t\t\t\t\t<li data-value=\"WEF\" data-tags=\"WeiFang\" class=\"mui-table-view-cell mui-indexed-list-item\">潍坊机场</li>\n\t\t\t\t\t\t<li data-value=\"WEH\" data-tags=\"WeiHaiDaShuiBo\" class=\"mui-table-view-cell mui-indexed-list-item\">威海大水泊机场</li>\n\t\t\t\t\t\t<li data-value=\"WNH\" data-tags=\"WenShanPuZheHei\" class=\"mui-table-view-cell mui-indexed-list-item\">文山普者黑机场</li>\n\t\t\t\t\t\t<li data-value=\"WNZ\" data-tags=\"WenZhouYongQiangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">温州永强国际机场</li>\n\t\t\t\t\t\t<li data-value=\"WUA\" data-tags=\"WuHai\" class=\"mui-table-view-cell mui-indexed-list-item\">乌海机场</li>\n\t\t\t\t\t\t<li data-value=\"WUH\" data-tags=\"WuHanTianHeGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">武汉天河国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HLH\" data-tags=\"WuLanHaoTe\" class=\"mui-table-view-cell mui-indexed-list-item\">乌兰浩特机场</li>\n\t\t\t\t\t\t<li data-value=\"URC\" data-tags=\"WuLuMuQiDiWoBaoGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">乌鲁木齐地窝堡国际机场</li>\n\t\t\t\t\t\t<li data-value=\"WUS\" data-tags=\"WuYiShan\" class=\"mui-table-view-cell mui-indexed-list-item\">武夷山机场</li>\n\t\t\t\t\t\t<li data-value=\"WUZ\" data-tags=\"WuZhouChangZhouDao\" class=\"mui-table-view-cell mui-indexed-list-item\">梧州长洲岛机场</li>\n\t\t\t\t\t\t<li data-group=\"X\" class=\"mui-table-view-divider mui-indexed-list-group\">X</li>\n\t\t\t\t\t\t<li data-value=\"XIY\" data-tags=\"XiAnXianYangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">西安咸阳国际机场</li>\n\t\t\t\t\t\t<li data-value=\"XIC\" data-tags=\"XiChangQingShan\" class=\"mui-table-view-cell mui-indexed-list-item\">西昌青山机场</li>\n\t\t\t\t\t\t<li data-value=\"XIL\" data-tags=\"XiLinHaoTe\" class=\"mui-table-view-cell mui-indexed-list-item\">锡林浩特机场</li>\n\t\t\t\t\t\t<li data-value=\"XNN\" data-tags=\"XiNingCaoJiaBao\" class=\"mui-table-view-cell mui-indexed-list-item\">西宁曹家堡机场</li>\n\t\t\t\t\t\t<li data-value=\"JHG\" data-tags=\"XiShuangBanNaGaSa\" class=\"mui-table-view-cell mui-indexed-list-item\">西双版纳嘎洒机场</li>\n\t\t\t\t\t\t<li data-value=\"XMN\" data-tags=\"XiaMenGaoQiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">厦门高崎国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HKG\" data-tags=\"XiangGangGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">香港国际机场</li>\n\t\t\t\t\t\t<li data-value=\"XFN\" data-tags=\"XiangYangLiuJi\" class=\"mui-table-view-cell mui-indexed-list-item\">襄阳刘集机场</li>\n\t\t\t\t\t\t<li data-value=\"ACX\" data-tags=\"XingYi\" class=\"mui-table-view-cell mui-indexed-list-item\">兴义机场</li>\n\t\t\t\t\t\t<li data-value=\"XUZ\" data-tags=\"XuZhouGuanYin\" class=\"mui-table-view-cell mui-indexed-list-item\">徐州观音机场</li>\n\t\t\t\t\t\t<li data-group=\"Y\" class=\"mui-table-view-divider mui-indexed-list-group\">Y</li>\n\t\t\t\t\t\t<li data-value=\"ENY\" data-tags=\"YanAnErShiLiBao\" class=\"mui-table-view-cell mui-indexed-list-item\">延安二十里堡机场</li>\n\t\t\t\t\t\t<li data-value=\"YNZ\" data-tags=\"YanCheng\" class=\"mui-table-view-cell mui-indexed-list-item\">盐城机场</li>\n\t\t\t\t\t\t<li data-value=\"YNJ\" data-tags=\"YanJiChaoYangChuan\" class=\"mui-table-view-cell mui-indexed-list-item\">延吉朝阳川机场</li>\n\t\t\t\t\t\t<li data-value=\"YNT\" data-tags=\"YanTaiLaiShanGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">烟台莱山国际机场</li>\n\t\t\t\t\t\t<li data-value=\"YBP\" data-tags=\"YiBinCaiBa\" class=\"mui-table-view-cell mui-indexed-list-item\">宜宾菜坝机场</li>\n\t\t\t\t\t\t<li data-value=\"YIH\" data-tags=\"YiChangSanXia\" class=\"mui-table-view-cell mui-indexed-list-item\">宜昌三峡机场</li>\n\t\t\t\t\t\t<li data-value=\"LDS\" data-tags=\"YiChunLinDu\" class=\"mui-table-view-cell mui-indexed-list-item\">伊春林都机场</li>\n\t\t\t\t\t\t<li data-value=\"YIN\" data-tags=\"YiNing\" class=\"mui-table-view-cell mui-indexed-list-item\">伊宁机场</li>\n\t\t\t\t\t\t<li data-value=\"YIW\" data-tags=\"YiWu\" class=\"mui-table-view-cell mui-indexed-list-item\">义乌机场</li>\n\t\t\t\t\t\t<li data-value=\"INC\" data-tags=\"YinChuanHeDong\" class=\"mui-table-view-cell mui-indexed-list-item\">银川河东机场</li>\n\t\t\t\t\t\t<li data-value=\"LLF\" data-tags=\"YongZhouLingLing\" class=\"mui-table-view-cell mui-indexed-list-item\">永州零陵机场</li>\n\t\t\t\t\t\t<li data-value=\"UYN\" data-tags=\"YuLinYuYang\" class=\"mui-table-view-cell mui-indexed-list-item\">榆林榆阳机场</li>\n\t\t\t\t\t\t<li data-value=\"YUS\" data-tags=\"YuShuBaTang\" class=\"mui-table-view-cell mui-indexed-list-item\">玉树巴塘机场</li>\n\t\t\t\t\t\t<li data-value=\"YCU\" data-tags=\"YunChengZhangXiao\" class=\"mui-table-view-cell mui-indexed-list-item\">运城张孝机场</li>\n\t\t\t\t\t\t<li data-group=\"Z\" class=\"mui-table-view-divider mui-indexed-list-group\">Z</li>\n\t\t\t\t\t\t<li data-value=\"ZHA\" data-tags=\"ZhanJiang\" class=\"mui-table-view-cell mui-indexed-list-item\">湛江机场</li>\n\t\t\t\t\t\t<li data-value=\"ZAT\" data-tags=\"ZhaoTong\" class=\"mui-table-view-cell mui-indexed-list-item\">昭通机场</li>\n\t\t\t\t\t\t<li data-value=\"CGO\" data-tags=\"ZhengZhouXinZhengGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">郑州新郑国际机场</li>\n\t\t\t\t\t\t<li data-value=\"HJJ\" data-tags=\"ZhiJiang\" class=\"mui-table-view-cell mui-indexed-list-item\">芷江机场</li>\n\t\t\t\t\t\t<li data-value=\"CKG\" data-tags=\"ZhongQingJiangBeiGuoJi\" class=\"mui-table-view-cell mui-indexed-list-item\">重庆江北国际机场</li>\n\t\t\t\t\t\t<li data-value=\"ZHY\" data-tags=\"ZhongWeiXiangShan\" class=\"mui-table-view-cell mui-indexed-list-item\">中卫香山机场</li>\n\t\t\t\t\t\t<li data-value=\"HSN\" data-tags=\"ZhouShanZhuJiaJian\" class=\"mui-table-view-cell mui-indexed-list-item\">舟山朱家尖机场</li>\n\t\t\t\t\t\t<li data-value=\"ZUH\" data-tags=\"ZhuHaiSanZao\" class=\"mui-table-view-cell mui-indexed-list-item\">珠海三灶机场</li>\t\t\t\t\t\t\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script src=\"../js/mui.indexedlist.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tmui.init();\n\t\t\tmui.ready(function() {\n\t\t\t\tvar header = document.querySelector('header.mui-bar');\n\t\t\t\tvar list = document.getElementById('list');\n\t\t\t\t//calc hieght\n\t\t\t\tlist.style.height = (document.body.offsetHeight - header.offsetHeight) + 'px';\n\t\t\t\t//create\n\t\t\t\twindow.indexedList = new mui.IndexedList(list);\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/info.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!-- <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" /> -->\n\t\t<style>\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t\tpadding: 5px 8px;\n\t\t\t}\n\t\t\t\n\t\t\thtml,\n\t\t\tbody,\n\t\t\t.mui-content {\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t\t\n\t\t\th4 {\n\t\t\t\tmargin-left: 5px;\n\t\t\t}\n\t\t\t\n\t\t\t.qrcode {\n\t\t\t\t/*position: absolute;*/\n\t\t\t\ttop: 50px;\n\t\t\t\t/*left: 50%;*/\n\t\t\t\twidth: 100%;\n\t\t\t\t/*-webkit-transform: translate(-50%, 0);\n\t\t\t\ttransform: translate(-50%, 0);*/\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t\n\t\t\t.qrcode img {\n\t\t\t\tmargin: 0 auto;\n\t\t\t}\n\t\t\t\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">关于</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<div class=\"qrcode\">\n\t\t\t\t\t<img id=\"qrcode\" src=\"../images/qrcode.png\" width=\"100%\" />\n\t\t\t\t\t<a id=\"shortcut\" style=\"width: 60%;margin: 15px auto;padding: 5px;\" class=\"mui-hidden mui-btn mui-btn-block mui-btn-red\">创建桌面图标</a>\n\t\t\t\t</div>\n\t\t\t\t<!--<h4 style=\"margin-top:10px;\">mui</h4>-->\n\t\t\t\t<p>mui是一款小巧高能的前端UI框架，其UI控件富有原生UI样式；\n\t\t\t\t\t通过封装多webview、启动原生动画，使得mui成为目前最接近原生体验的前端框架，\n\t\t\t\t\t更多详细介绍，请到<a href=\"http://dev.dcloud.net.cn/mui\">mui官网</a>查看</p>\n\t\t\t\t<p style=\"text-align: center;color: #ccc;text-indent: 0;\">当前版本：<span id=\"version\">3.7.0</span></p>\t\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tmui.init({\n\t\t\t\tgestureConfig: {\n\t\t\t\t\tlongtap: true\n\t\t\t\t},\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\t//处理点击事件，需要打开原生浏览器\n\t\t\tmui('body').on('tap', 'a', function(e) {\n\t\t\t\tvar href = this.getAttribute('href');\n\t\t\t\tif (href) {\n\t\t\t\t\tif (window.plus) {\n\t\t\t\t\t\tplus.runtime.openURL(href);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlocation.href = href;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar qrcodeEl = document.getElementById(\"qrcode\");\n\t\t\tqrcodeEl.addEventListener('longtap', function() {\n\t\t\t\tplus.nativeUI.actionSheet({\n\t\t\t\t\tcancel: '取消',\n\t\t\t\t\tbuttons: [{\n\t\t\t\t\t\ttitle: '保存到相册'\n\t\t\t\t\t}]\n\t\t\t\t}, function(e) {\n\t\t\t\t\tvar index = e.index;\n\t\t\t\t\tif (e.index === 1) {\n\t\t\t\t\t\tplus.gallery.save(qrcodeEl.src, function() {\n\t\t\t\t\t\t\tmui.toast('保存成功');\n\t\t\t\t\t\t}, function() {\n\t\t\t\t\t\t\tmui.toast('保存失败，请重试！');\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (mui.os.android&&mui.os.stream) { //创建快捷方式\n\t\t\t\tvar shortcutElem = document.getElementById(\"shortcut\");\n\t\t\t\tshortcutElem.classList.remove('mui-hidden');\n\t\t\t\tshortcutElem.addEventListener('tap', function() {\n\t\t\t\t\tplus.navigator.createShortcut({\n\t\t\t\t\t\tname: \"hello-mui\",\n\t\t\t\t\t\ticon: \"images/logo.png\"\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/input.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!-- <link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" /> -->\n\t\t<style>\n\t\t\th5 {\n\t\t\t\tmargin: 5px 7px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">input（输入框）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\" style=\"margin: 5px;\">\n\t\t\t\t<h5>默认搜索框：</h5>\n\t\t\t\t<div class=\"mui-input-row mui-search\">\n\t\t\t\t\t<input type=\"search\" class=\"mui-input-clear\" placeholder=\"\">\n\t\t\t\t</div>\n\t\t\t\t<h5 class=\"mui-plus-visible\">语音输入搜索框：</h5>\n\t\t\t\t<div class=\"mui-input-row mui-search mui-plus-visible\">\n\t\t\t\t\t<input id=\"search\" type=\"search\" class=\"mui-input-speech mui-input-clear\" placeholder=\"带语音输入的搜索框\">\n\t\t\t\t</div>\n\t\t\t\t<h5>密码框：</h5>\n\t\t\t\t<div class=\"mui-input-row mui-password\">\n\t\t\t\t\t<input type=\"password\" class=\"mui-input-password\">\n\t\t\t\t</div>\n\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t\t<label>Input</label>\n\t\t\t\t\t\t<input type=\"text\" placeholder=\"普通输入框\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t\t<label>Input</label>\n\t\t\t\t\t\t<input type=\"text\" class=\"mui-input-clear\" placeholder=\"带清除按钮的输入框\">\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mui-input-row mui-plus-visible\">\n\t\t\t\t\t\t<label>Input</label>\n\t\t\t\t\t\t<input type=\"text\" class=\"mui-input-speech mui-input-clear\" placeholder=\"语音输入\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-button-row\">\n\t\t\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-primary\" onclick=\"return false;\">确认</button>&nbsp;&nbsp;\n\t\t\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-danger\" onclick=\"return false;\">取消</button>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t\t<div class=\"mui-input-row\" style=\"margin: 10px 5px;\">\n\t\t\t\t\t<textarea id=\"textarea\" rows=\"5\" placeholder=\"多行文本框\"></textarea>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\t //语音识别完成事件\n\t\t\tdocument.getElementById(\"search\").addEventListener('recognized', function(e) {\n\t\t\t\tconsole.log(e.detail.value);\n\t\t\t});\n\n\t\t\tvar nativeWebview, imm, InputMethodManager;\n\t\t\tvar initNativeObjects = function() {\n\t\t\t\tif (mui.os.android) {\n\t\t\t\t\tvar main = plus.android.runtimeMainActivity();\n\t\t\t\t\tvar Context = plus.android.importClass(\"android.content.Context\");\n\t\t\t\t\tInputMethodManager = plus.android.importClass(\"android.view.inputmethod.InputMethodManager\");\n\t\t\t\t\timm = main.getSystemService(Context.INPUT_METHOD_SERVICE);\n\t\t\t\t} else {\n\t\t\t\t\tnativeWebview = plus.webview.currentWebview().nativeInstanceObject();\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar showSoftInput = function() {\n\t\t\t\tif (mui.os.android) {\n\t\t\t\t\timm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);\n\t\t\t\t} else {\n\t\t\t\t\tnativeWebview.plusCallMethod({\n\t\t\t\t\t\t\"setKeyboardDisplayRequiresUserAction\": false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar inputElem = document.querySelector('input');\n\t\t\t\t\tinputElem.focus();\n\t\t\t\t\tinputElem.parentNode.classList.add('mui-active'); //第一个是search，加上激活样式\n\t\t\t\t}, 200);\n\t\t\t};\n\t\t\tmui.plusReady(function() {\n\t\t\t\tinitNativeObjects();\n\t\t\t\tshowSoftInput();\n\t\t\t});\n\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/lazyload-image.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t\t<style type=\"text/css\">\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\t.des {\n\t\t\t\tmargin: .5em 0;\n\t\t\t}\n\t\t\t.des>li {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #8f8f94;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">lazyload（延迟加载） </h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>延迟加载的理念：页面初始化时，暂不加载处于屏幕可见区域之外的图片。该方案会有如下几大好处：</p>\n\t\t\t\t<ul class=\"des\">\n\t\t\t\t\t<li>加快页面渲染速度</li>\n\t\t\t\t\t<li>提升页面滚动性能</li>\n\t\t\t\t\t<li>默认不下载屏幕外的图片，减少网络流量</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<ul id=\"list\" class=\"mui-table-view mui-table-view-chevron\">\n\n\t\t\t</ul>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js \"></script>\n\t<script src=\"../js/mui.lazyload.js\"></script>\n\t<script src=\"../js/mui.lazyload.img.js\"></script>\n\t<script>\n\t\tmui.init();\n\t\tvar createFragment = function(count) {\n\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\tvar li;\n\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\tli = document.createElement('li');\n\t\t\t\tli.className = 'mui-table-view-cell mui-media';\n\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\"><img class=\"mui-media-object mui-pull-left\" data-lazyload=\"http://www.dcloud.io/hellomui/images/' + (i % 5 + 1) + '.jpg?version=' + Math.random() * 1000 + '\"><div class=\"mui-media-body\">主标题<p class=\"mui-ellipsis\">列表二级标题</p></div></a>';\n\t\t\t\tfragment.appendChild(li);\n\t\t\t}\n\t\t\treturn fragment;\n\t\t};\n\t\t(function($) {\n\t\t\tvar list = document.getElementById(\"list\");\n\t\t\tlist.appendChild(createFragment(50));\n\t\t\t$(document).imageLazyload({\n\t\t\t\tplaceholder: '../images/60x60.gif'\n\t\t\t});\n\t\t})(mui);\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/list-triplex-row.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t\t<style>\n\t\t\t.mui-table h4,.mui-table h5,.mui-table .mui-h5,.mui-table .mui-h6,.mui-table p{\n\t\t        margin-top: 0;\n\t\t    }\n\t\t    .mui-table h4{\n\t\t        line-height: 21px;\n\t\t        font-weight: 500;\n\t\t    }\n\t\t\n\t\t    .mui-table .oa-icon{\n\t\t        position: absolute;\n\t\t        right:0;\n\t\t        bottom: 0;\n\t\t    }\n\t\t    .mui-table .oa-icon-star-filled{\n\t\t        color:#f14e41;\n\t\t    }\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">三行列表</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t    <ul class=\"mui-table-view mui-table-view-striped mui-table-view-condensed\">\n\t\t        <li class=\"mui-table-view-cell\">\n\t\t            <div class=\"mui-table\">\n\t\t                <div class=\"mui-table-cell mui-col-xs-10\">\n\t\t                    <h4 class=\"mui-ellipsis\">信息化推进办公室张彦合同付款信息化</h4>\n\t\t                    <h5>申请人：李四</h5>\n\t\t                    <p class=\"mui-h6 mui-ellipsis\">Hi，李明明，申请交行信息卡，100元等你拿，李明明，申请交行信息卡，100元等你拿，</p>\n\t\t                </div>\n\t\t                <div class=\"mui-table-cell mui-col-xs-2 mui-text-right\">\n\t\t                    <span class=\"mui-h5\">12:25</span>\n\t\t                </div>\n\t\t            </div>\n\t\t        </li>\n\t\t        <li class=\"mui-table-view-cell\">\n\t\t            <div class=\"mui-table\">\n\t\t                <div class=\"mui-table-cell mui-col-xs-10\">\n\t\t                    <h4 class=\"mui-ellipsis-2\">信息化推进办公室张彦合同付款信息化推进办公室张彦合同付款信息化推进办公室张彦合同付款</h4>\n\t\t                    <h5>申请人：李四</h5>\n\t\t                    <p class=\"mui-h6 mui-ellipsis\">Hi，李明明，申请交行信息卡，100元等你拿，李明明，申请交行信息卡，100元等你拿，</p>\n\t\t                </div>\n\t\t                <div class=\"mui-table-cell mui-col-xs-2 mui-text-right\">\n\t\t                    <span class=\"mui-h5\">12:25</span>\n\t\t                     \n\t\t                </div>\n\t\t            </div>\n\t\t        </li>\n\t\t        <li class=\"mui-table-view-cell\">\n\t\t            <div class=\"mui-table\">\n\t\t                <div class=\"mui-table-cell mui-col-xs-10\">\n\t\t                    <h4 class=\"mui-ellipsis-2\">信息化推进办公室张彦合同付款信息化推进办公室张彦合同付款信息化推进办公室张彦合同付款</h4>\n\t\t                    <h5>申请人：李四</h5>\n\t\t                    <p class=\"mui-h6 mui-ellipsis\">Hi，李明明，申请交行信息卡，100元等你拿，李明明，申请交行信息卡，100元等你拿，</p>\n\t\t                </div>\n\t\t                <div class=\"mui-table-cell mui-col-xs-2 mui-text-right\">\n\t\t                    <span class=\"mui-h5\">12:25</span>\n\t\t                    \n\t\t                </div>\n\t\t            </div>\n\t\t        </li>\n\t\t        <li class=\"mui-table-view-cell\">\n\t\t            <div class=\"mui-table\">\n\t\t                <div class=\"mui-table-cell mui-col-xs-10\">\n\t\t                    <h4 class=\"mui-ellipsis-2\">信息化推进办公室张彦合同付款信息化推进办公室张彦合同付款信息化推进办公室张彦合同付款</h4>\n\t\t                    <h5>申请人：李四</h5>\n\t\t                    <p class=\"mui-h6 mui-ellipsis\">Hi，李明明，申请交行信息卡，100元等你拿，李明明，申请交行信息卡，100元等你拿，</p>\n\t\t                </div>\n\t\t                <div class=\"mui-table-cell mui-col-xs-2 mui-text-right\">\n\t\t                    <span class=\"mui-h5\">12:25</span>\n\t\t                   \n\t\t                </div>\n\t\t            </div>\n\t\t        </li>\n\t\t        <li class=\"mui-table-view-cell\">\n\t\t            <div class=\"mui-table\">\n\t\t                <div class=\"mui-table-cell mui-col-xs-10\">\n\t\t                    <h4 class=\"mui-ellipsis-2\">信息化推进办公室张彦合同付款信息化推进办公室张彦合同付款信息化推进办公室张彦合同付款</h4>\n\t\t                    <h5>申请人：李四</h5>\n\t\t                    <p class=\"mui-h6 mui-ellipsis\">Hi，李明明，申请交行信息卡，100元等你拿，李明明，申请交行信息卡，100元等你拿，</p>\n\t\t                </div>\n\t\t                <div class=\"mui-table-cell mui-col-xs-2 mui-text-right\">\n\t\t                    <span class=\"mui-h5\">12:25</span>\n\t\t                     \n\t\t                </div>\n\t\t            </div>\n\t\t        </li>\n\t\t    </ul>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/list-with-input.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t</head>\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">列表带input类控件</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\tcard（圆角列表）\n\t\t\t\t\t\t<div id=\"M_Toggle\" class=\"mui-switch mui-active\">\n\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\tItem 1\n\t\t\t\t\t\t<button type=\"button\" class=\"mui-btn\">\n\t\t\t\t\t\t\tButton\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\tItem 2\n\t\t\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-primary\">\n\t\t\t\t\t\t\tButton\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\tItem 3\n\t\t\t\t\t\t<div class=\"mui-switch mui-active\">\n\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\tItem 4\n\t\t\t\t\t\t<div class=\"mui-switch mui-switch-blue mui-switch-mini mui-active\">\n\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-radio mui-left\">\n\t\t\t\t\t\t<input name=\"radio\" type=\"radio\">Item 5\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-radio mui-left\">\n\t\t\t\t\t\t<input name=\"radio\" type=\"radio\">Item 6\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-checkbox mui-left\">\n\t\t\t\t\t\t<input name=\"checkbox\" type=\"checkbox\">Item 7\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-checkbox mui-left\">\n\t\t\t\t\t\t<input name=\"checkbox\" type=\"checkbox\">Item 8\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\t\n\t\t//圆角列表开关处理\n\t\tdocument.getElementById(\"M_Toggle\").addEventListener('toggle',function (e) {\n\t\t\tvar isActive = e.detail.isActive;\n\t\t\tvar table = document.querySelector('.mui-table-view');\n\t\t\tvar card = document.querySelector('.mui-card');\n\t\t\tif (isActive) {\n\t\t\t\tcard.appendChild(table);\n\t\t\t\tcard.style.display = '';\n\t\t\t} else {\n\t\t\t\tvar content = document.querySelector('.mui-content');\n\t\t\t\tcontent.insertBefore(table, card);\n\t\t\t\tcard.style.display = 'none';\n\t\t\t}\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/locker-dom.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t\t<title>手势锁屏示例</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />-->\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tmargin: 0px;\n\t\t\t\tpadding: 0px;\n\t\t\t\toverflow: hidden;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t#holder {\n\t\t\t\twidth: 300px;\n\t\t\t\theight: 300px;\n\t\t\t\tborder: solid 1px #bbb;\n\t\t\t\tborder-radius: 5px;\n\t\t\t\tmargin: 50px auto;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t\t#alert {\n\t\t\t\ttext-align: center;\n\t\t\t\tpadding: 20px 10px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">locker（手势图案锁屏）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div id='holder' class=\"mui-locker\" data-locker-options='{\"ringColor\":\"rgba(210,210,210,1)\",\"fillColor\":\"#ffffff\",\"pointColor\":\"rgba(0,136,204,1)\",\"lineColor\":\"rgba(0,136,204,1)\"}' data-locker-width='300' data-locker-height='300'></div>\n\t\t\t<div id='alert'></div>\n\t\t</div>\n\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script src=\"../js/mui.locker.js\"></script>\n\t\t<script>\n\t\t\t(function($, doc) {\n\t\t\t\t$.init();\n\t\t\t\tvar holder = doc.querySelector('#holder'),\n\t\t\t\t\talert = doc.querySelector('#alert'),\n\t\t\t\t\trecord = [];\n\t\t\t\t//处理事件\n\t\t\t\tholder.addEventListener('done', function(event) {\n\t\t\t\t\tvar rs = event.detail;\n\t\t\t\t\tif (rs.points.length < 4) {\n\t\t\t\t\t\talert.innerText = '设定的手势太简单了';\n\t\t\t\t\t\trecord = [];\n\t\t\t\t\t\trs.sender.clear();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(rs.points.join(''));\n\t\t\t\t\trecord.push(rs.points.join(''));\n\t\t\t\t\tif (record.length >= 2) {\n\t\t\t\t\t\tif (record[0] == record[1]) {\n\t\t\t\t\t\t\talert.innerText = '手势设定完成';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert.innerText = '两次手势设定不一致';\n\t\t\t\t\t\t}\n\t\t\t\t\t\trs.sender.clear();\n\t\t\t\t\t\trecord = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\talert.innerText = '请确认手势设定';\n\t\t\t\t\t\trs.sender.clear();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}(mui, document));\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/login.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"../css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t\t<style>\n\t\t\th5,\n\t\t\tp,\n\t\t\tol,\n\t\t\tli {\n\t\t\t\tcolor: #666;\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\t\t\th5 {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t\tp,\n\t\t\tol {\n\t\t\t\tpadding: 5px auto;\n\t\t\t\tmargin-bottom: 20px;\n\t\t\t}\n\t\t\tp,\n\t\t\tli {\n\t\t\t\tcolor: #999;\n\t\t\t}\n\t\t\timg {\n\t\t\t\twidth: 90%;\n\t\t\t\tborder: solid 1px #ddd;\n\t\t\t\tborder-radius: 5px;\n\t\t\t\tbox-shadow: 0px 0px 5px 1px #aaa;\n\t\t\t\tmargin: 5px auto;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">login（登录）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h5>简单说明</h5>\n\t\t\t\t<p>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们为 “登录模板” 制作了一独立的 “演示应用”，包括 “账号密码登录、第三方账号登录、账号注册、手势锁屏、分享” 等功能演示。\n\t\t\t\t</p>\n\t\t\t\t<h5>体验方式</h5>\n\t\t\t\t<ol>\n\t\t\t\t\t<li>在 HBuilder 中新建“移动App”工程，选择 “mui登录模板” ；</li>\n\t\t\t\t\t<li>在 GitHub 上查看或下载 <a _src='https://github.com/dcloudio/mui/tree/master/examples/login'>登录模板源码</a> 。\n\t\t\t\t\t</li>\n\t\t\t\t</ol>\n\t\t\t\t<h5>演示截图</h5>\n\t\t\t\t<p style=\"text-align: center;\">\n\t\t\t\t\t<img src=\"../images/login-1.png\" />\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\t(function(mui, window, document, undefined) {\n\t\t\t\tmui.init();\n\t\t\t\tvar qsa = function() {\n\t\t\t\t\treturn [].slice.call(document.querySelectorAll.apply(document, arguments));\n\t\t\t\t};\n\t\t\t\tqsa(\"[_src]\").forEach(function(item) {\n\t\t\t\t\titem.addEventListener('tap', function() {\n\t\t\t\t\t\tvar url = this.getAttribute('_src');\n\t\t\t\t\t\tif (url) {\n\t\t\t\t\t\t\tplus.runtime.openURL(url);\n\t\t\t\t\t\t};\n\t\t\t\t\t}, false);\n\t\t\t\t});\n\t\t\t})(mui, window, document, undefined);\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/media-list.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t\t<style>\n\t\t\t.title {\n\t\t\t\tmargin: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">media list（图文列表）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<!--<ul class=\"mui-table-view mui-unfold\">\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse mui-media mui-media-icon\">\r\n\t\t\t\t\t<a href=\"javascript:;\">\r\n\t\t\t\t\t\t<div class=\"mui-media-object mui-pull-left\">\r\n\t\t\t\t\t\t\t<img src=\"../images/shuijiao.jpg\">\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"mui-media-body\">\r\n\t\t\t\t\t\t\t幸福\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-media-icon\">\r\n\t\t\t\t\t\t\t<a href=\"javascript:;\">\r\n\t\t\t\t\t\t\t\t<div class=\"mui-media-object mui-pull-left\"><span class=\"mui-icon mui-icon-contact\"></span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">\r\n\t\t\t\t\t\t\t\t\t幸福\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-media-icon\">\r\n\t\t\t\t\t\t\t<a href=\"javascript:;\">\r\n\t\t\t\t\t\t\t\t<div class=\"mui-media-object mui-pull-left\"><span class=\"mui-icon mui-icon-contact\"></span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">\r\n\t\t\t\t\t\t\t\t\t幸福\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-media-icon\">\r\n\t\t\t\t\t<a href=\"javascript:;\">\r\n\t\t\t\t\t\t<div class=\"mui-media-object mui-pull-left\"><span class=\"mui-icon mui-icon-contact\"></span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"mui-media-body\">\r\n\t\t\t\t\t\t\t幸福\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-media mui-media-icon\">\r\n\t\t\t\t\t<a href=\"javascript:;\">\r\n\t\t\t\t\t\t<div class=\"mui-media-object mui-pull-left\"><span class=\"mui-icon mui-icon-contact\"></span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"mui-media-body\">\r\n\t\t\t\t\t\t\t幸福\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>-->\n\t\t\t<div class=\"title\">\n\t\t\t\t缩略图居左\n\t\t\t</div>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-left\" src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t幸福\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>能和心爱的人一起睡觉，是件幸福的事情；可是，打呼噜怎么办？</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-left\" src=\"../images/muwu.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t木屋\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>想要这样一间小木屋，夏天挫冰吃瓜，冬天围炉取暖.</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-left\" src=\"../images/cbd.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\tCBD\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>烤炉模式的城，到黄昏，如同打翻的调色盘一般.</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\n\t\t\t</ul>\n\t\t\t<div class=\"title\">\n\t\t\t\t缩略图居右\n\t\t\t</div>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-right\" src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t远眺\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>静静的看这个世界，最后终于疯了</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-right\" src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t幸福\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>能和心爱的人一起睡觉，是件幸福的事情；可是，打呼噜怎么办？</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-right\" src=\"../images/muwu.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t木屋\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>想要这样一间小木屋，夏天挫冰吃瓜，冬天围炉取暖.</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<div class=\"title\">\n\t\t\t\t右侧带导航箭头\n\t\t\t</div>\n\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-left\" src=\"../images/cbd.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\tCBD\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>烤炉模式的城，到黄昏，如同打翻的调色盘一般.</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a class='mui-navigate-right' href=\"javascript:;\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-left\" src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t远眺\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>静静的看这个世界，最后终于疯了</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-left\" src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t幸福\n\t\t\t\t\t\t\t<p class='mui-ellipsis'>能和心爱的人一起睡觉，是件幸福的事情；可是，打呼噜怎么办？</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<div class=\"title\">\n\t\t\t\tcard（圆角列表）\n\t\t\t</div>\n\t\t\t<div class=\"mui-card\" style=\"margin-bottom: 35px;\">\n\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-right\" src=\"../images/muwu.jpg\">\n\t\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t\t木屋\n\t\t\t\t\t\t\t\t<p class='mui-ellipsis'>想要这样一间小木屋，夏天挫冰吃瓜，冬天围炉取暖.</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-right\" src=\"../images/cbd.jpg\">\n\t\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t\tCBD\n\t\t\t\t\t\t\t\t<p class='mui-ellipsis'>烤炉模式的城，到黄昏，如同打翻的调色盘一般.</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t\t<a href=\"javascript:;\">\n\t\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-right\" src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t\t远眺\n\t\t\t\t\t\t\t\t<p class='mui-ellipsis'>静静的看这个世界，最后终于疯了</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/message-bottom.html",
    "content": "<!doctype html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t\t<title></title>\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<link href=\"../css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<style type=\"text/css\">\n\t\t\t.message {\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tz-index: 99;\n\t\t\t\tbox-shadow: 0px -5px 5px 0px rgba(150, 150, 150, .2);\n\t\t\t}\n\t\t\t\n\t\t\t.message.bottom {\n\t\t\t\tposition: fixed;\n\t\t\t\tpadding: 15px;\n\t\t\t\tbottom: 0;\n\t\t\t\tleft: 0px;\n\t\t\t\tright: 0px;\n\t\t\t}\n\t\t\t\n\t\t\t.message .icon {\n\t\t\t\twidth: 42px;\n\t\t\t\theight: 42px;\n\t\t\t\tfloat: left;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t\n\t\t\t.message .content {\n\t\t\t\tpadding-left: 55px;\n\t\t\t\tfont-size: 13px;\n\t\t\t}\n\t\t\t\n\t\t\t.icon .mui-icon {\n\t\t\t\tfont-weight: 28px;\n\t\t\t\tfont-weight: 700;\n\t\t\t\tline-height: 42px;\n\t\t\t\tcolor: #007AFF;\n\t\t\t}\n\t\t\t\n\t\t\t.action {\n\t\t\t\ttext-align: right;\n\t\t\t\tpadding-right: 2px;\n\t\t\t\tmargin-top: 18px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<h1 class=\"mui-title\">底部提醒消息控件</h1>\n\t\t</header>\n\t\t\n\t\t<div class=\"mui-content\">\n\t\t    <div class=\"mui-content-padded\">\n\t\t    \t\t<p style=\"text-indent: 22px;\">这是底部提醒消息示例，可放置图标、提示信息、用户操作按钮等</p>\n\t\t    </div>\n\t\t</div>\n\n\t\t<div class=\"message bottom\">\n\t\t\t<div class=\"icon\">\r\n\t\t\t\t<span class=\"mui-icon mui-icon-info\"></span>\r\n\t\t\t</div>\n\t\t\t<p class=\"content\">应用当前版本过低，存在安全漏洞，请升级至最新版</p>\n\t\t\t<div class=\"action\">\n\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-blue mui-btn-link\">取消</button>\n\t\t\t\t<button id=\"install\" type=\"button\" class=\"mui-btn mui-btn-blue\">立即升级</button>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tmui.init();\n\t\t\tmui(\".action\").on(\"tap\",\".mui-btn\",function () {\n\t\t\t\t//关闭消息框\n\t\t\t\tdocument.querySelector(\".message\").classList.add(\"mui-hidden\");\n\t\t\t\tvar id = this.getAttribute(\"id\");\n\t\t\t\tif(id && id==\"install\"){\n\t\t\t\t\tconsole.log(\"click install button,begin install app...\");\n\t\t\t\t}\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/modals.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<style>\n\t\t\thtml,body {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t</style>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t\t</script>\n\t</head>\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t\t<h1 class=\"mui-title\">modal（弹出窗口）</h1>\n\t\t\t</header>\n\t\t\t<div class=\"mui-content\">\n\t\t\t\t<a href=\"#modal\" class=\"mui-btn mui-btn-primary mui-btn-block\">Click</a>\n\t\t\t</div>\n\t\t\t<div id=\"modal\" class=\"mui-modal\">\n\t\t\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t\t\t<a class=\"mui-icon mui-icon-close mui-pull-right\" href=\"#modal\"></a>\n\t\t\t\t\t<h1 class=\"mui-title\">Modal</h1>\n\t\t\t\t</header>\n\t\t\t\t<div class=\"mui-content\" style=\"height: 100%;\">\n\t\t\t\t\t<p class=\"mui-content-padded\">The contents of my modal go here. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/nav-nativeObj.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-pull-left .mui-icon {\n\t\t\t\tpadding-right: 5px;\n\t\t\t\tfont-size: 28px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-btn {\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-size: 17px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-btn-link {\n\t\t\t\ttop: 1px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<p style=\"margin: 35px 15px;\">这个页面的标题栏是使用nativeObj绘制的，开发者可以使用nativeObj绘制图片、文字、背景色、线条等。</p>\n\t\t</div>\t\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t</script>\n\t</body>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/nav.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.mui-bar .mui-pull-left .mui-icon {\n\t\t\t\tpadding-right: 5px;\n\t\t\t\tfont-size: 28px;\n\t\t\t}\n\t\t\t.mui-bar .mui-btn {\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-size: 17px;\n\t\t\t}\n\t\t\t.mui-bar .mui-btn-link {\n\t\t\t\ttop: 1px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<header id=\"header\" class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">导航栏</h1>\n\t\t</header>\n\n\t\t<div class=\"mui-content\">\n\t\t\t<p style=\"margin: 35px 15px;\">这是nav bar（顶部导航栏）演示页面， 你可以在顶部导航中放置多种控件，点击如下单选框切换导航栏显示内容；\n\t\t\t</p>\n\t\t\t<h5 class=\"mui-content-padded\">左侧显示内容</h5>\n\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>不显示</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"left-none\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>仅图标</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" checked value=\"left-icon\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>图标加文字按钮</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"left-btn\">\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t<h5 class=\"mui-content-padded\" style=\"margin-top: 35px;\">右侧显示内容</h5>\n\t\t\t<form class=\"mui-input-group\" style=\"margin-bottom: 15px;\">\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>不显示</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" checked=\"\" value=\"right-none\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>仅图标</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"right-icon\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>文字按钮</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"right-btn\">\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar header = document.getElementById(\"header\");\n\t\t\t //左侧icon\n\t\t\tvar lefticon = document.createElement('a');\n\t\t\tlefticon.className = 'mui-action-back mui-icon mui-icon-left-nav mui-pull-left';\n\t\t\t //左侧图标+文字按钮\n\t\t\tvar leftbtn = document.createElement('button');\n\t\t\tleftbtn.className = 'mui-action-back mui-btn mui-btn-blue mui-btn-link mui-btn-nav mui-pull-left';\n\t\t\tvar span = document.createElement('span');\n\t\t\tspan.className = 'mui-icon mui-icon-left-nav';\n\t\t\tleftbtn.appendChild(span);\n\t\t\tvar text = document.createTextNode('首页');\n\t\t\tleftbtn.appendChild(text);\n\t\t\t //右侧icon\n\t\t\tvar righticon = document.createElement('a');\n\t\t\trighticon.className = 'mui-icon mui-icon-bars mui-pull-right';\n\t\t\t //右侧文字按钮\n\t\t\tvar rightbtn = document.createElement('button');\n\t\t\trightbtn.className = 'mui-btn mui-btn-blue mui-btn-link mui-pull-right';\n\t\t\trightbtn.innerText = '编辑';\n\t\t\t //删除原先存在的节点\n\t\t\tfunction remove(selector) {\n\t\t\t\tvar elem = header.querySelector(selector);\n\t\t\t\tif (elem) {\n\t\t\t\t\theader.removeChild(elem);\n\t\t\t\t}\n\t\t\t}\n\t\t\tmui('.mui-input-group').on('change', 'input', function() {\n\t\t\t\tif (this.checked) {\n\t\t\t\t\tswitch (this.value) {\n\t\t\t\t\t\tcase 'left-none':\n\t\t\t\t\t\t\tremove('.mui-pull-left')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'left-icon':\n\t\t\t\t\t\t\tremove('.mui-pull-left');\n\t\t\t\t\t\t\theader.appendChild(lefticon);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'left-btn':\n\t\t\t\t\t\t\tremove('.mui-pull-left');\n\t\t\t\t\t\t\theader.appendChild(leftbtn);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'right-none':\n\t\t\t\t\t\t\tremove('.mui-pull-right');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'right-icon':\n\t\t\t\t\t\t\tremove('.mui-pull-right')\n\t\t\t\t\t\t\theader.appendChild(righticon);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'right-btn':\n\t\t\t\t\t\t\tremove('.mui-pull-right');\n\t\t\t\t\t\t\theader.appendChild(rightbtn);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t</script>\n\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/nav_transparent.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-pull-left .mui-icon {\n\t\t\t\tpadding-right: 5px;\n\t\t\t\tfont-size: 28px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-btn {\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-size: 17px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-btn-link {\n\t\t\t\ttop: 1px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content img{\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.hm-description{\n\t\t\t\tmargin: 15px;\n\t\t\t}\n\t\t\t\n\t\t\t.hm-description>li {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #8f8f94;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<header id=\"header\" class=\"mui-bar mui-bar-transparent\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">导航栏</h1>\n\t\t</header>\n\n\t\t<div class=\"mui-content\">\n\t\t\t<!--静态图片-->\n\t\t\t<img id=\"img1\" src=\"../images/yuantiao.jpg\"/>\n\t\t\t<!--轮播图片-->\n\t\t\t<div id=\"slider\" class=\"mui-slider mui-hidden\" >\n\t\t\t  <div class=\"mui-slider-group\">\n\t\t\t    <!-- 第一张 -->\n\t\t\t     <div class=\"mui-slider-item\">\n\t\t\t      <a href=\"#\">\n\t\t\t        <img src=\"../images/shuijiao.jpg\">\n\t\t\t      </a>\n\t\t\t    </div>\n\t\t\t    <!-- 第二张 -->\n\t\t\t    <div class=\"mui-slider-item\">\n\t\t\t      <a href=\"#\">\n\t\t\t        <img src=\"../images/yuantiao.jpg\">\n\t\t\t      </a>\n\t\t\t    </div>\n\t\t\t  </div>\n\t\t\t  <div class=\"mui-slider-indicator\">\n\t\t\t    <div class=\"mui-indicator mui-active\"></div>\n\t\t\t    <div class=\"mui-indicator\"></div>\n\t\t\t  </div>\n\t\t\t</div>\n\t\t\t<p style=\"margin: 30px 15px 20px;\">这是transparent bar（透明导航栏）演示页面， 默认情况下标题栏透明，\n\t\t\t\t当用户向下滚动时，标题栏逐渐由透明转变为不透明；当用户再次向上滚动时，标题栏又从不透明变为透明状态。\n\t\t\t</p>\n\t\t\t<p style=\"margin: 5px 15px 15px 15px;\">\n\t\t\t\t这是一种解决滚动条通顶问题的变通解决方案，该方案相比双webview的方案，性能更高，动效更酷，但也有其适用场景：\n\t\t\t</p>\n\t\t\t<ul class=\"hm-description\">\n\t\t\t\t<li>顶部最好有图片或轮播组件</li>\n\t\t\t\t<li>导航栏字体颜色和图片颜色协调</li>\n\t\t\t</ul>\n\t\t\t<h5 class=\"mui-content-padded\">图片类型</h5>\n\t\t\t<form class=\"mui-input-group\" style=\"margin-bottom: 300px;\">\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>静态图片</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" checked value=\"static\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>轮播图</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"slider\">\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar slider = document.getElementById(\"slider\");\n\t\t\tmui('.mui-input-group').on('change', 'input', function() {\n\t\t\t\tif (this.checked) {\n\t\t\t\t\tswitch (this.value) {\n\t\t\t\t\t\tcase 'static':\n\t\t\t\t\t\t\tdocument.getElementById(\"img1\").className = \"\";\n\t\t\t\t\t\t\tdocument.getElementById(\"slider\").classList.add(\"mui-hidden\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'slider':\n\t\t\t\t\t\t\tdocument.getElementById(\"img1\").className = \"mui-hidden\";\n\t\t\t\t\t\t\tif(slider.classList.contains(\"mui-hidden\")){\n\t\t\t\t\t\t\t\tdocument.getElementById(\"slider\").classList.remove(\"mui-hidden\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t</script>\n\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/nav_transparent_native.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-pull-left .mui-icon {\n\t\t\t\tpadding-right: 5px;\n\t\t\t\tfont-size: 28px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-btn {\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-size: 17px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar .mui-btn-link {\n\t\t\t\ttop: 1px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content img {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t\n\t\t\t.hm-description {\n\t\t\t\tmargin: 15px;\n\t\t\t}\n\t\t\t\n\t\t\t.hm-description>li {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #8f8f94;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<!--静态图片-->\n\t\t\t<img id=\"img1\" src=\"../images/yuantiao.jpg\" />\n\t\t\t<!--轮播图片-->\n\t\t\t<div id=\"slider\" class=\"mui-slider mui-hidden\">\n\t\t\t\t<div class=\"mui-slider-group\">\n\t\t\t\t\t<!-- 第一张 -->\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t<img src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 第二张 -->\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t<img src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-slider-indicator\">\n\t\t\t\t\t<div class=\"mui-indicator mui-active\"></div>\n\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<p style=\"margin: 30px 15px 20px;\">这是原生实现的的transparent bar（透明导航栏）演示页面；默认情况下标题栏透明， 当用户向下滚动时，标题栏逐渐由透明转变为不透明；当用户再次向上滚动时，标题栏又从不透明变为透明状态。\n\t\t\t</p>\n\t\t\t<p style=\"margin: 5px 15px 25px 15px;\">\n\t\t\t\t这是一种解决滚动条通顶问题的变通解决方案，该方案有如下优点：\n\t\t\t</p>\n\t\t\t\n\t\t\t<div>\n\t\t\t\t<ul class=\"hm-description\">\n\t\t\t\t\t<li>相比双webview的方案，性能更高，动效更酷</li>\n\t\t\t\t\t<li>相比H5版本的透明导航栏，使用原生渐变动画，也有更高的性能体验</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t\n\t\t\t<h5 class=\"mui-content-padded\">图片类型</h5>\n\t\t\t<form class=\"mui-input-group\" style=\"margin-bottom: 300px;\">\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>静态图片</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" checked value=\"static\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>轮播图</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"slider\">\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tmui.init();\n\t\t\tvar slider = document.getElementById(\"slider\");\n\t\t\tmui('.mui-input-group').on('change', 'input', function() {\n\t\t\t\tif(this.checked) {\n\t\t\t\t\tswitch(this.value) {\n\t\t\t\t\t\tcase 'static':\n\t\t\t\t\t\t\tdocument.getElementById(\"img1\").className = \"\";\n\t\t\t\t\t\t\tdocument.getElementById(\"slider\").classList.add(\"mui-hidden\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'slider':\n\t\t\t\t\t\t\tdocument.getElementById(\"img1\").className = \"mui-hidden\";\n\t\t\t\t\t\t\tif(slider.classList.contains(\"mui-hidden\")) {\n\t\t\t\t\t\t\t\tdocument.getElementById(\"slider\").classList.remove(\"mui-hidden\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t</script>\n\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/numbox.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>数字输入框</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody,\n\t\t\t.mui-content {\n\t\t\t\theight: 0px;\n\t\t\t\tmargin: 0px;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\th5.mui-content-padded {\n\t\t\t\tmargin-left: 0px !important;\n\t\t\t\tmargin-top: 20px !important;\n\t\t\t}\n\t\t\t.mui-card {\n\t\t\t\tmargin: 0px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">number box（数字输入框）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h5 class=\"mui-content-padded\">默认</h5>\n\t\t\t\t<div class=\"mui-numbox\">\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-minus\" type=\"button\">-</button>\n\t\t\t\t\t<input class=\"mui-input-numbox\" type=\"number\" />\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-plus\" type=\"button\">+</button>\n\t\t\t\t</div>\n\t\t\t\t<h5 class=\"mui-content-padded\">限定最小值和最大值(1~9)</h5>\n\t\t\t\t<div class=\"mui-numbox\" data-numbox-min='1' data-numbox-max='9'>\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-minus\" type=\"button\">-</button>\n\t\t\t\t\t<input id=\"test\" class=\"mui-input-numbox\" type=\"number\" value=\"5\" />\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-plus\" type=\"button\">+</button>\n\t\t\t\t</div>\n\t\t\t\t<h5 class=\"mui-content-padded\">设定步长值(步长 10)</h5>\n\t\t\t\t<div class=\"mui-numbox\" data-numbox-step='10' data-numbox-min='10' data-numbox-max='90'>\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-minus\" type=\"button\">-</button>\n\t\t\t\t\t<input class=\"mui-input-numbox\" type=\"number\" />\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-plus\" type=\"button\">+</button>\n\t\t\t\t</div>\n\t\t\t\t<h5 class=\"mui-content-padded\">取值操作</h5>\n\t\t\t\t<div class=\"mui-numbox\">\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-minus\" type=\"button\">-</button>\n\t\t\t\t\t<input id=\"box\" class=\"mui-input-numbox\" type=\"number\" />\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-plus\" type=\"button\">+</button>\n\t\t\t\t</div>\n\t\t\t\t<button id=\"btn\" class=\"mui-btn\" style=\"padding: 7px 12px;\">取当前值</button>\n\t\t\t\t<h5 class=\"mui-content-padded\">在行内</h5> 购买数量:\n\t\t\t\t<div class=\"mui-numbox\">\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-minus\" type=\"button\">-</button>\n\t\t\t\t\t<input class=\"mui-input-numbox\" type=\"number\" />\n\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-plus\" type=\"button\">+</button>\n\t\t\t\t</div>\n\t\t\t\t<h5 class=\"mui-content-padded\">在表单中</h5>\n\t\t\t\t<div class=\"mui-card\">\n\t\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t\t\t<label>数字框一</label>\n\t\t\t\t\t\t\t<div class=\"mui-numbox\">\n\t\t\t\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-minus\" type=\"button\">-</button>\n\t\t\t\t\t\t\t\t<input class=\"mui-input-numbox\" type=\"number\" />\n\t\t\t\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-plus\" type=\"button\">+</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t\t\t<label>数字框二</label>\n\t\t\t\t\t\t\t<div class=\"mui-numbox\">\n\t\t\t\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-minus\" type=\"button\">-</button>\n\t\t\t\t\t\t\t\t<input class=\"mui-input-numbox\" type=\"number\" />\n\t\t\t\t\t\t\t\t<button class=\"mui-btn mui-btn-numbox-plus\" type=\"button\">+</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</form>\n\t\t\t\t</div>\n\t\t\t\t<h5 class=\"mui-content-padded\">通过样式定义大小(220x60)</h5>\n\t\t\t\t<div class=\"mui-numbox\" style=\"width: 220px;height: 60px;\">\n\t\t\t\t\t<button class=\"mui-btn-numbox-minus\" type=\"button\">-</button>\n\t\t\t\t\t<input class=\"mui-input-numbox\" type=\"number\" />\n\t\t\t\t\t<button class=\"mui-btn-numbox-plus\" type=\"button\">+</button>\n\t\t\t\t</div>\n\t\t\t\t<br/>\n\t\t\t\t<br />\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init();\n\t\t\tdocument.getElementById(\"btn\").addEventListener('tap', function(event) {\n\t\t\t\tmui.alert('当前值: ' + document.getElementById(\"box\").value, null, \"提示\");\n\t\t\t});\n\t\t\tvar testBox=document.getElementById(\"test\");\n\t\t\ttestBox.addEventListener('change',function(){\n\t\t\t\tconsole.log(testBox.value);\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/offcanvas-drag-down.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tmin-height: 100%;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.animated {\n\t\t\t\t-webkit-animation-duration: 0.5s;\n\t\t\t\tanimation-duration: 0.5s;\n\t\t\t\t-webkit-animation-fill-mode: both;\n\t\t\t\tanimation-fill-mode: both;\n\t\t\t}\n\t\t\t@-webkit-keyframes bounceInDown {\n\t\t\t\t0%, 60%, 75%, 90%, 100% {\n\t\t\t\t\t-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t\ttransition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t}\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\t}\n\t\t\t\t60% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 25px, 0);\n\t\t\t\t\ttransform: translate3d(0, 25px, 0);\n\t\t\t\t}\n\t\t\t\t75% {\n\t\t\t\t\t-webkit-transform: translate3d(0, -10px, 0);\n\t\t\t\t\ttransform: translate3d(0, -10px, 0);\n\t\t\t\t}\n\t\t\t\t90% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 5px, 0);\n\t\t\t\t\ttransform: translate3d(0, 5px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\t-webkit-transform: none;\n\t\t\t\t\ttransform: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes bounceInDown {\n\t\t\t\t0%, 60%, 75%, 90%, 100% {\n\t\t\t\t\t-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t\ttransition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t}\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\t}\n\t\t\t\t60% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 25px, 0);\n\t\t\t\t\ttransform: translate3d(0, 25px, 0);\n\t\t\t\t}\n\t\t\t\t75% {\n\t\t\t\t\t-webkit-transform: translate3d(0, -10px, 0);\n\t\t\t\t\ttransform: translate3d(0, -10px, 0);\n\t\t\t\t}\n\t\t\t\t90% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 5px, 0);\n\t\t\t\t\ttransform: translate3d(0, 5px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\t-webkit-transform: none;\n\t\t\t\t\ttransform: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.bounce-in-down {\n\t\t\t\t-webkit-animation-name: bounceInDown;\n\t\t\t\tanimation-name: bounceInDown;\n\t\t\t}\n\t\t\t@-webkit-keyframes fadeInDown {\n\t\t\t\t0%, 60%, 75%, 90%, 100% {\n\t\t\t\t\t-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t\ttransition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t}\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\t}\n\t\t\t\t60% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t75% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t90% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\t-webkit-transform: none;\n\t\t\t\t\ttransform: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes fadeInDown {\n\t\t\t\t0%, 60%, 75%, 90%, 100% {\n\t\t\t\t\t-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t\ttransition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n\t\t\t\t}\n\t\t\t\t0% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\t}\n\t\t\t\t60% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t75% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t90% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\t-webkit-transform: none;\n\t\t\t\t\ttransform: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.fade-in-down {\n\t\t\t\t-webkit-animation-name: fadeInDown;\n\t\t\t\tanimation-name: fadeInDown;\n\t\t\t}\n\t\t\t@-webkit-keyframes bounceOutUp {\n\t\t\t\t20% {\n\t\t\t\t\t-webkit-transform: translate3d(0, -10px, 0);\n\t\t\t\t\ttransform: translate3d(0, -10px, 0);\n\t\t\t\t}\n\t\t\t\t40%,\n\t\t\t\t45% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 20px, 0);\n\t\t\t\t\ttransform: translate3d(0, 20px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes bounceOutUp {\n\t\t\t\t20% {\n\t\t\t\t\t-webkit-transform: translate3d(0, -10px, 0);\n\t\t\t\t\ttransform: translate3d(0, -10px, 0);\n\t\t\t\t}\n\t\t\t\t40%,\n\t\t\t\t45% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 20px, 0);\n\t\t\t\t\ttransform: translate3d(0, 20px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\t.bounce-out-up {\n\t\t\t\t-webkit-animation-name: bounceOutUp;\n\t\t\t\tanimation-name: bounceOutUp;\n\t\t\t}\n\t\t\t@-webkit-keyframes fadeOutUp {\n\t\t\t\t20% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t40%,\n\t\t\t\t45% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes fadeOutUp {\n\t\t\t\t20% {\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t40%,\n\t\t\t\t45% {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\t-webkit-transform: translate3d(0, 0px, 0);\n\t\t\t\t\ttransform: translate3d(0, 0px, 0);\n\t\t\t\t}\n\t\t\t\t100% {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\t.fade-out-up {\n\t\t\t\t-webkit-animation-name: fadeOutUp;\n\t\t\t\tanimation-name: fadeOutUp;\n\t\t\t}\n\t\t\t.menu-open {\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.menu-open .mui-scroll-wrapper {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 48;\n\t\t\t\tbottom: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 1;\n\t\t\t\twidth: 100%;\n\t\t\t\toverflow: hidden;\n\t\t\t\t-webkit-backface-visibility: hidden;\n\t\t\t}\n\t\t\t.menu-backdrop {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.menu-open .menu-backdrop {\n\t\t\t\tposition: fixed;\n\t\t\t\ttop: 0;\n\t\t\t\tbottom: 0;\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 100%;\n\t\t\t\tdisplay: block;\n\t\t\t\tz-index: 998;\n\t\t\t}\n\t\t\t.menu-wrapper {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 48px;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tz-index: 999;\n\t\t\t\ttext-align: center;\n\t\t\t\tbackground-color: #333;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.menu-wrapper.hidden {\n\t\t\t\t-webkit-transform: translate3d(0, -100%, 0);\n\t\t\t\ttransform: translate3d(0, -100%, 0);\n\t\t\t\tz-index: -1;\n\t\t\t}\n\t\t\t.menu {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.menu .mui-table-view-inverted {\n\t\t\t\tcolor: gray;\n\t\t\t\tfont-size: 19px;\n\t\t\t}\n\t\t\t.menu .mui-table-view-inverted .mui-table-view-cell:after {\n\t\t\t\theight: 2px;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t}\n\t\t\t.menu-wrapper.mui-active,\n\t\t\t.menu-wrapper.mui-active .menu {\n\t\t\t\t-webkit-transform: translate3d(0, 0, 0);\n\t\t\t\ttransform: translate3d(0, 0, 0);\n\t\t\t}\n\t\t\t#info{\n\t\t\t  \tpadding: 20px 10px ;\n\t\t\t }\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a id=\"icon-menu\" class=\"mui-action-menu mui-icon mui-icon-bars mui-pull-left\"></a>\n\t\t\t<a class=\"mui-action-back mui-btn mui-btn-link mui-pull-right\">关闭</a>\n\t\t\t<h1 class=\"mui-title\">div模式下拉菜单</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\" >\n\t\t\t\t<p>这是div模式下沉菜单示例，主页面和菜单在一个HTML文件中，\n\t\t\t\t\t\n\t\t\t\t\t当前页面为主界面，你可以在主界面放置任何内容；\n\t\t\t\t\t 打开侧滑菜单有多种方式：  1、点击页面左上角的\n\t\t\t\t\t<span class=\"mui-icon mui-icon-bars\"></span> 图标；\n\t\t\t\t\t 2、通过JS API触发（例如点击如下蓝色按钮体验）；\n\t\t\t\t\t <span class=\"android-only\">3、Android手机按menu键；</span>\n\t\t\t\t</p>\n\t\t\t\t<p style=\"padding: 5px 20px;margin-bottom: 5px;\">\n\t\t\t\t\t<button id=\"menu-btn\" type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-block\" style=\"padding: 10px;\">\n\t\t\t\t\t\t显示下拉菜单\n\t\t\t\t\t</button>\n\t\t\t\t</p>\n\t\t\t\t<div id=\"info\"></div>\n\t\t\t</div>\n\t\t\t\n\t\t</div>\n\t\t<div id=\"menu-wrapper\" class=\"menu-wrapper hidden\">\n\t\t\t<div id=\"menu\" class=\"menu\">\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-inverted\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"javascript:;\">Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"javascript:;\">Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"javascript:;\">Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"javascript:;\">Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"javascript:;\">Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"javascript:;\">Item 6</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"javascript:;\">Item 7</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"menu-backdrop\" class=\"menu-backdrop\"></div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar menuWrapper = document.getElementById(\"menu-wrapper\");\n\t\t\tvar menu = document.getElementById(\"menu\");\n\t\t\tvar menuWrapperClassList = menuWrapper.classList;\n\t\t\tvar backdrop = document.getElementById(\"menu-backdrop\");\n\t\t\tvar info = document.getElementById(\"info\");\n\t\t\t\n\t\t\tbackdrop.addEventListener('tap', toggleMenu);\n\t\t\tdocument.getElementById(\"menu-btn\").addEventListener('tap', toggleMenu);\n\t\t\tdocument.getElementById(\"icon-menu\").addEventListener('tap',toggleMenu)\n\t\t\t//下沉菜单中的点击事件\n\t\t\tmui('#menu').on('tap', 'a', function() {\n\t\t\t\ttoggleMenu();\n\t\t\t\tinfo.innerHTML = '你已选择：'+this.innerHTML;\n\t\t\t});\n\t\t\tvar busying = false;\n\n\t\t\tfunction toggleMenu() {\n\t\t\t\tif (busying) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbusying = true;\n\t\t\t\tif (menuWrapperClassList.contains('mui-active')) {\n\t\t\t\t\tdocument.body.classList.remove('menu-open');\n\t\t\t\t\tmenuWrapper.className = 'menu-wrapper fade-out-up animated';\n\t\t\t\t\tmenu.className = 'menu bounce-out-up animated';\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tbackdrop.style.opacity = 0;\n\t\t\t\t\t\tmenuWrapper.classList.add('hidden');\n\t\t\t\t\t}, 500);\n\t\t\t\t} else {\n\t\t\t\t\tdocument.body.classList.add('menu-open');\n\t\t\t\t\tmenuWrapper.className = 'menu-wrapper fade-in-down animated mui-active';\n\t\t\t\t\tmenu.className = 'menu bounce-in-down animated';\n\t\t\t\t\tbackdrop.style.opacity = 1;\n\t\t\t\t}\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tbusying = false;\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/offcanvas-drag-left-plus-main.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\tspan.mui-icon {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #007aff;\n\t\t\t\tmargin-left: -15px;\n\t\t\t\tpadding-right: 10px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-menu mui-icon mui-icon-bars mui-pull-right\"></a>\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-back mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">off canvas（侧滑导航）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>这是webview模式右滑导航示例，主页面和菜单在不同的webview中，\n\t\t\t\t\t优点是支持菜单内容在多页面的复用，缺点是不支持拖动手势（跟手）；\n\t\t\t\t\t当前页面为主界面，你可以在主界面放置任何内容；\n\t\t\t\t\t 打开侧滑菜单有多种方式：\n\t\t\t\t\t 1、在当前页面快速向左滑动（swipe）； \n\t\t\t\t\t 2、点击页面右上角的\n\t\t\t\t\t<span class=\"mui-icon mui-icon-bars\"></span> 图标；\n\t\t\t\t\t 3、通过JS API触发（例如点击如下蓝色按钮体验）；\n\t\t\t\t\t <span class=\"android-only\">4、Android手机按menu键；</span>\n\t\t\t\t</p>\n\t\t\t\t<p style=\"padding: 5px 20px;margin-bottom: 5px;\">\n\t\t\t\t\t<button id=\"show-btn\" type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-block\" style=\"padding: 10px;\">\n\t\t\t\t\t\t显示侧滑菜单\n\t\t\t\t\t</button>\n\t\t\t\t</p>\n\t\t\t\t<p >侧滑菜单的移动动画，支持多种效果，切换如下选项体验不同动画效果：</p>\n\n\t\t\t</div>\n\t\t\t<form class=\"mui-input-group\" style=\"margin-bottom: 15px;\">\r\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\r\n\t\t\t\t\t<label>主界面移动、菜单不动</label>\r\n\t\t\t\t\t<input name=\"style\" type=\"radio\" checked=\"\" value=\"main-move\">\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\r\n\t\t\t\t\t<label>主界面不动、菜单移动</label>\r\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"menu-move\">\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"mui-input-row mui-radio mui-hidden\" id=\"move-togger\">\r\n\t\t\t\t\t<label>整体移动</label>\r\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"all-move\">\r\n\t\t\t\t</div>\r\n\t\t\t</form>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tvar main,menu, mask = mui.createMask(_closeMenu);\n\t\t\tvar showMenu = false,\n\t\t\t\tmode = 'main-move';\n\n\t\t\t //整体滑动暂不支持android手机，因为两个页面的移动动画，无法保证同步性；\n\t\t\tif (!mui.os.android) {\n\t\t\t\t//整体滑动暂不支持android手机，因为两个页面的移动动画，无法保证同步性；\n\t\t\t\tdocument.getElementById(\"move-togger\").classList.remove('mui-hidden');\n\t\t\t\tvar spans = document.querySelectorAll('.android-only');\n\t\t\t\tfor (var i=0,len=spans.length;i<len;i++) {\n\t\t\t\t\tspans[i].style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tbeforeback: back\n\t\t\t});\n\n\t\t\tfunction back() {\n\t\t\t\t\tif (showMenu) {\n\t\t\t\t\t\t//菜单处于显示状态，返回键应该先关闭菜单,阻止主窗口执行mui.back逻辑；\n\t\t\t\t\t\tcloseMenu();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//菜单处于隐藏状态，执行返回时，要先close菜单页面，然后继续执行mui.back逻辑关闭主窗口；\n\t\t\t\t\t\tmenu.close('none');\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t//plusReady事件后，自动创建menu窗口；\n\t\t\tmui.plusReady(function() {\n\t\t\t\tmain = plus.webview.currentWebview();\n\t\t\t\t//setTimeout的目的是等待窗体动画结束后，再执行create webview操作，避免资源竞争，导致窗口动画不流畅；\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tmenu = mui.preload({\n\t\t\t\t\t\tid: 'offcanvas-drag-left-plus-menu',\n\t\t\t\t\t\turl: 'offcanvas-drag-left-plus-menu.html',\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\tleft: \"30%\",\n\t\t\t\t\t\t\twidth: '70%',\n\t\t\t\t\t\t\tzindex: 9997\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},300);\n\t\t\t});\n\n\t\t\t/*\n\t\t\t * 显示菜单菜单\n\t\t\t */\n\t\t\tfunction openMenu() {\n\t\t\t\t\tif (!showMenu) {\n\t\t\t\t\t\t//解决android 4.4以下版本webview移动时，导致fixed定位元素错乱的bug;\n\t\t\t\t\t\tif (mui.os.android && parseFloat(mui.os.version) < 4.4) {\n\t\t\t\t\t\t\tdocument.querySelector(\"header.mui-bar\").style.position = \"static\";\n\t\t\t\t\t\t\t//同时需要修改以下.mui-contnt的padding-top，否则会多出空白；\n\t\t\t\t\t\t\tdocument.querySelector(\".mui-bar-nav~.mui-content\").style.paddingTop = \"0px\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//侧滑菜单处于隐藏状态，则立即显示出来；\n\t\t\t\t\t\t//显示完毕后，根据不同动画效果移动窗体；\n\t\t\t\t\t\tmenu.show('none', 0, function() {\n\t\t\t\t\t\t\tswitch (mode){\n\t\t\t\t\t\t\t\tcase 'main-move':\n\t\t\t\t\t\t\t\t\t//主窗体开始侧滑；\n\t\t\t\t\t\t\t\t\tmain.setStyle({\n\t\t\t\t\t\t\t\t\t\tleft: '-70%',\n\t\t\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'menu-move':\n\t\t\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\t\t\tleft: '30%',\n\t\t\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'all-move':\n\t\t\t\t\t\t\t\t\tmain.setStyle({\n\t\t\t\t\t\t\t\t\t\tleft: '-70%',\n\t\t\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\t\t\tleft: '30%',\n\t\t\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//显示主窗体遮罩\n\t\t\t\t\t\tmask.show();\n\t\t\t\t\t\tshowMenu = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tfunction closeMenu () {\n\t\t\t\t//窗体移动\n\t\t\t\t_closeMenu();\n\t\t\t\t//关闭遮罩\n\t\t\t\tmask.close();\n\t\t\t}\n\t\t\t\n\t\t\t/**\n\t\t\t * 关闭侧滑菜单(业务部分)\n\t\t\t */\n\t\t\tfunction _closeMenu() {\n\t\t\t\tif (showMenu) {\n\t\t\t\t\t//解决android 4.4以下版本webview移动时，导致fixed定位元素错乱的bug;\n\t\t\t\t\tif (mui.os.android && parseFloat(mui.os.version) < 4.4) {\n\t\t\t\t\t\tdocument.querySelector(\"header.mui-bar\").style.position = \"fixed\";\n\t\t\t\t\t\t//同时需要修改以下.mui-contnt的padding-top，否则会多出空白；\n\t\t\t\t\t\tdocument.querySelector(\".mui-bar-nav~.mui-content\").style.paddingTop = \"44px\";\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (mode){\n\t\t\t\t\t\tcase 'main-move':\n\t\t\t\t\t\t\t//主窗体开始侧滑；\n\t\t\t\t\t\t\tmain.setStyle({\n\t\t\t\t\t\t\t\tleft: '0',\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'menu-move':\n\t\t\t\t\t\t\t//主窗体开始侧滑；\n\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\tleft: '100%',\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'all-move':\n\t\t\t\t\t\t\t//主窗体开始侧滑；\n\t\t\t\t\t\t\tmain.setStyle({\n\t\t\t\t\t\t\t\tleft: '0',\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t//menu页面同时移动\n\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\tleft: '100%',\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t//等窗体动画结束后，隐藏菜单webview，节省资源；\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmenu.hide();\n\t\t\t\t\t}, 300);\n\t\t\t\t\tshowMenu = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//变换侧滑动画移动效果；\n\t\t\tmui('.mui-input-group').on('change', 'input', function() {\n\t\t\t\tif (this.checked) {\n\t\t\t\t\tswitch (this.value) {\n\t\t\t\t\t\tcase 'main-move':\n\t\t\t\t\t\t\t//仅主窗口移动的时候，menu页面的zindex值要低一点；\n\t\t\t\t\t\t\tmenu.setStyle({left:'30%',zindex:9997});\n//\t\t\t\t\t\t\tmenu.hide();\n\t\t\t\t\t\t\tmode = 'main-move';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'menu-move':\n\t\t\t\t\t\t\tmenu.setStyle({left:'100%',zindex:9999});\n\t\t\t\t\t\t\tmode = 'menu-move';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'all-move':\n\t\t\t\t\t\t\t//切换为整体移动\n\t\t\t\t\t\t\t//变换menu界面初始化位置，整体移动时，Menu界面left需要在-70%的地方；\n\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\tleft: '100%'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tmode = 'all-move';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tdocument.getElementById(\"show-btn\").addEventListener('tap',openMenu);\n\t\t\t //点击侧滑图标，打开侧滑菜单；\n\t\t\tdocument.querySelector('.mui-action-menu').addEventListener('tap', openMenu);\n\t\t\t //在android4.4中的swipe事件，需要preventDefault一下，否则触发不正常\n\t\t\t //故，在dragleft，dragright中preventDefault\n\t\t\twindow.addEventListener('dragright', function(e) {\n\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t});\n\t\t\twindow.addEventListener('dragleft', function(e) {\n\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t});\n\t\t\t //主界面向左滑动，若菜单未显示，则显示菜单；否则不做任何操作；\n\t\t\twindow.addEventListener(\"swipeleft\", openMenu);\n\t\t\t //主界面向右滑动，若菜单已显示，则关闭菜单；否则，不做任何操作；\n\t\t\twindow.addEventListener(\"swiperight\", closeMenu);\n\t\t\t //menu页面向右滑动，关闭菜单；\n\t\t\twindow.addEventListener(\"menu:swiperight\", closeMenu);\n\n\t\t\t //重写mui.menu方法，Android版本menu按键按下可自动打开、关闭侧滑菜单；\n\t\t\tmui.menu = function() {\n\t\t\t\tif (showMenu) {\n\t\t\t\t\tcloseMenu();\n\t\t\t\t} else {\n\t\t\t\t\topenMenu();\n\t\t\t\t}\n\t\t\t}\n\t\t</script>\n\t</body>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/offcanvas-drag-left-plus-menu.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\tbody,.mui-content {\n\t\t\t\tbackground-color: #333;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\t\t\theader.mui-bar{\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.mui-bar-nav~.mui-content{\n\t\t\t\tpadding: 0;\n\t\t\t}\n\t\t\t.title{\n\t\t\t  \tmargin: 35px 15px 10px;\n\t\t\t  }\n\t\t\t  .title+.content{\n\t\t\t  \tmargin: 10px 15px 35px;\n\t\t\t  \tcolor: #bbb;\n\t\t\t  \ttext-indent: 1em;\n\t\t\t  \tfont-size: 14px;\n\t\t\t  \tline-height: 24px;\n\t\t\t  }\n\t\t\t  .mui-table-view{\n\t\t\t  \tmargin-bottom: 35px;\n\t\t\t  }\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"title\">侧滑导航</div>\n\t\t\t\t<div class=\"content\">\n\t\t\t\t\t这是侧滑菜单示例，你可以在这里放置任何内容；关闭侧滑菜单有多种方式：\n\t\t\t\t\t1.在手机屏幕任意位置快速向右滑动(swipe)；\n\t\t\t\t\t2.点击本侧滑菜单页之外的任意位置;\n\t\t\t\t\t3.点击如下红色按钮；\n\t\t\t\t\t<span class=\"android-only\">\n\t\t\t\t\t\t4.Android手机按back键；5.Android手机按menu键\n\t\t\t\t\t</span>。\n\t\t\t\t\t<p style=\"margin: 10px 15px;\">\n\t\t\t\t\t\t<button id=\"close-btn\" type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-block\" style=\"padding: 5px 20px;\">关闭侧滑菜单</button>\n\t\t\t\t\t</p>\n\t\t\t\t\t\n\t\t\t\t</div>\n\t\t\t\t<div class=\"title\" style=\"margin-bottom: 25px;\">侧滑列表示例</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron mui-table-view-inverted\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">Item 6</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t</div>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t//关闭back、menu按键监听，这样侧滑主界面会自动获得back和memu的按键事件，仅在主界面处理按键逻辑即可；\n\t\tmui.init({\n\t\t\tkeyEventBind: {\n\t\t\t\tbackbutton: false,\n\t\t\t\tmenubutton: false\n\t\t\t}\n\t\t});\n\t\tvar main = null;\n\t\tmui.plusReady(function () {\n\t\t\tmain = plus.webview.currentWebview().opener();\n\t\t})\n\t\t\n\t\tfunction closeMenu () {\n\t\t\tmui.fire(main,\"menu:swiperight\");\n\t\t}\n\t\t\n\t\t//左滑显示出来的菜单，只需监听右滑，然后将菜单关闭即可；在该菜单上左滑，不做任何操作；\n\t\twindow.addEventListener(\"swiperight\",closeMenu);\n\t\t\n\t\tdocument.getElementById(\"close-btn\").addEventListener('tap',closeMenu);\n\t</script>\n</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/offcanvas-drag-left.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\tspan.mui-icon {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #007aff;\n\t\t\t\tmargin-left: -15px;\n\t\t\t\tpadding-right: 10px;\n\t\t\t}\n\t\t\t.mui-off-canvas-right {\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\t\t\t.title {\n\t\t\t\tmargin: 35px 15px 10px;\n\t\t\t}\n\t\t\t.title+.content {\n\t\t\t\tmargin: 10px 15px 35px;\n\t\t\t\tcolor: #bbb;\n\t\t\t\ttext-indent: 1em;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tline-height: 24px;\n\t\t\t}\n\t\t\tinput {\n\t\t\t\tcolor: #000;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<!--侧滑菜单容器-->\n\t\t<div id=\"offCanvasWrapper\" class=\"mui-off-canvas-wrap mui-draggable\">\n\t\t\t<!--菜单部分-->\n\t\t\t<aside id=\"offCanvasSide\" class=\"mui-off-canvas-right\">\n\t\t\t\t<div id=\"offCanvasSideScroll\" class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<div class=\"title\">侧滑导航</div>\n\t\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t\t这是可拖动式侧滑菜单示例，你可以在这里放置任何内容；关闭侧滑菜单有多种方式： 1.在手机屏幕任意位置向右拖动(drag)；2.点击本侧滑菜单页之外的任意位置; 3.点击如下红色按钮\n\t\t\t\t\t\t\t<span class=\"android-only\">；4.Android手机按back键；5.Android手机按menu键\n\t\t\t\t\t\t\t</span>。\n\t\t\t\t\t\t\t<p style=\"margin: 10px 15px;\">\n\t\t\t\t\t\t\t\t<button id=\"offCanvasHide\" type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-block\" style=\"padding: 5px 20px;\">关闭侧滑菜单</button>\n\t\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"title\" style=\"margin-bottom: 25px;\">侧滑列表示例</div>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron mui-table-view-inverted\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 1\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 2\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 3\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 4\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 5\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\tItem 6\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</aside>\n\t\t\t<div class=\"mui-inner-wrap\">\n\t\t\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t\t\t<a class=\"mui-action-back mui-icon mui-icon-back mui-pull-left\"></a>\n\t\t\t\t\t<a id=\"offCanvasBtn\" href=\"#offCanvasSide\" class=\"mui-icon mui-action-menu mui-icon-bars mui-pull-right\"></a>\n\t\t\t\t\t<h1 class=\"mui-title\">左滑导航</h1>\n\t\t\t\t</header>\n\t\t\t\t<div id=\"offCanvasContentScroll\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t\t\t\t<p>这是可拖动式左滑导航示例，主页面和菜单在一个HTML文件中， 优点是支持拖动手势（跟手），缺点是不支持菜单内容在多页面的复用； 当前页面为主界面，你可以在主界面放置任何内容； 打开侧滑菜单有多种方式： 1、在当前页面向左拖动； 2、点击页面右上角的\n\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-bars\"></span> 图标； 3、通过JS API触发（例如点击如下蓝色按钮体验）；\n\t\t\t\t\t\t\t\t<span class=\"android-only\">4、Android手机按menu键；</span>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p style=\"padding: 5px 20px;margin-bottom: 5px;\">\n\t\t\t\t\t\t\t\t<button id=\"offCanvasShow\" type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-block\" style=\"padding: 5px;\">\n\t\t\t\t\t\t\t\t\t显示侧滑菜单\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p>侧滑菜单的移动动画，支持多种效果，切换如下选项体验不同动画效果：</p>\n\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<form class=\"mui-input-group\" style=\"margin-bottom: 15px;\">\n\t\t\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t\t\t<label>主界面移动、菜单不动</label>\n\t\t\t\t\t\t\t\t<input name=\"style\" type=\"radio\" checked=\"\" value=\"main-move\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t\t\t<label>主界面不动、菜单移动</label>\n\t\t\t\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"menu-move\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mui-input-row mui-radio mui-hidden\" id=\"move-togger\">\n\t\t\t\t\t\t\t\t<label>整体移动</label>\n\t\t\t\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"all-move\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t\t\t<label>缩放式侧滑（类手机QQ）</label>\n\t\t\t\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"main-move-scalable\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form>\n\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- off-canvas backdrop -->\n\t\t\t\t<div class=\"mui-off-canvas-backdrop\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t});\n\t\t\t //侧滑容器父节点\n\t\t\tvar offCanvasWrapper = mui('#offCanvasWrapper');\n\t\t\t //主界面容器\n\t\t\tvar offCanvasInner = offCanvasWrapper[0].querySelector('.mui-inner-wrap');\n\t\t\t //菜单容器\n\t\t\tvar offCanvasSide = document.getElementById(\"offCanvasSide\");\n\t\t\t //Android暂不支持整体移动动画\n\t\t\tif (!mui.os.android) {\n\t\t\t\tdocument.getElementById(\"move-togger\").classList.remove('mui-hidden');\n\t\t\t\tvar spans = document.querySelectorAll('.android-only');\n\t\t\t\tfor (var i = 0, len = spans.length; i < len; i++) {\n\t\t\t\t\tspans[i].style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\t\t\t //移动效果是否为整体移动\n\t\t\tvar moveTogether = false;\n\t\t\t //侧滑容器的class列表，增加.mui-slide-in即可实现菜单移动、主界面不动的效果；\n\t\t\tvar classList = offCanvasWrapper[0].classList;\n\t\t\t //变换侧滑动画移动效果；\n\t\t\tmui('.mui-input-group').on('change', 'input', function() {\n\t\t\t\tif (this.checked) {\n\t\t\t\t\toffCanvasSide.classList.remove('mui-transitioning');\n\t\t\t\t\toffCanvasSide.setAttribute('style', '');\n\t\t\t\t\tclassList.remove('mui-slide-in');\n\t\t\t\t\tclassList.remove('mui-scalable');\n\t\t\t\t\tswitch (this.value) {\n\t\t\t\t\t\tcase 'main-move':\n\t\t\t\t\t\t\tif (moveTogether) {\n\t\t\t\t\t\t\t\t//仅主内容滑动时，侧滑菜单在off-canvas-wrap内，和主界面并列\n\t\t\t\t\t\t\t\toffCanvasWrapper[0].insertBefore(offCanvasSide, offCanvasWrapper[0].firstElementChild);\n\t\t\t\t\t\t\t\tmoveTogether = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'main-move-scalable':\n\t\t\t\t\t\t\tif (moveTogether) {\n\t\t\t\t\t\t\t\t//仅主内容滑动时，侧滑菜单在off-canvas-wrap内，和主界面并列\n\t\t\t\t\t\t\t\toffCanvasWrapper[0].insertBefore(offCanvasSide, offCanvasWrapper[0].firstElementChild);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclassList.add('mui-scalable');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'menu-move':\n\t\t\t\t\t\t\tclassList.add('mui-slide-in');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'all-move':\n\t\t\t\t\t\t\tmoveTogether = true;\n\t\t\t\t\t\t\t//整体滑动时，侧滑菜单在inner-wrap内\n\t\t\t\t\t\t\toffCanvasInner.insertBefore(offCanvasSide, offCanvasInner.firstElementChild);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\toffCanvasWrapper.offCanvas().refresh();\n\t\t\t\t}\n\t\t\t});\n\t\t\tdocument.getElementById('offCanvasShow').addEventListener('tap', function() {\n\t\t\t\toffCanvasWrapper.offCanvas('show');\n\t\t\t});\n\t\t\tdocument.getElementById('offCanvasHide').addEventListener('tap', function() {\n\t\t\t\toffCanvasWrapper.offCanvas('close');\n\t\t\t});\n\t\t\t //主界面和侧滑菜单界面均支持区域滚动；\n\t\t\tmui('#offCanvasSideScroll').scroll();\n\t\t\tmui('#offCanvasContentScroll').scroll();\n\t\t\t //实现ios平台的侧滑关闭页面；\n\t\t\tif (mui.os.plus && mui.os.ios) {\n\t\t\t\toffCanvasWrapper[0].addEventListener('shown', function(e) { //菜单显示完成事件\n\t\t\t\t\tplus.webview.currentWebview().setStyle({\n\t\t\t\t\t\t'popGesture': 'none'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\toffCanvasWrapper[0].addEventListener('hidden', function(e) { //菜单关闭完成事件\n\t\t\t\t\tplus.webview.currentWebview().setStyle({\n\t\t\t\t\t\t'popGesture': 'close'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/offcanvas-drag-right-plus-main.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\tspan.mui-icon {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #007aff;\n\t\t\t\tmargin-left: -15px;\n\t\t\t\tpadding-right: 10px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-menu mui-icon mui-icon-bars mui-pull-left\"></a>\n\t\t\t<a class=\"mui-action-back mui-btn mui-btn-link mui-pull-right\">关闭</a>\n\t\t\t<h1 class=\"mui-title\">off canvas（侧滑导航）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>这是webview模式右滑导航示例，主页面和菜单在不同的webview中，\n\t\t\t\t\t优点是支持菜单内容在多页面的复用，缺点是不支持拖动手势（跟手）；\n\t\t\t\t\t当前页面为主界面，你可以在主界面放置任何内容；\n\t\t\t\t\t 打开侧滑菜单有多种方式：\n\t\t\t\t\t 1、在当前页面快速向右滑动（swipe）； \n\t\t\t\t\t 2、点击页面左上角的\n\t\t\t\t\t<span class=\"mui-icon mui-icon-bars\"></span> 图标；\n\t\t\t\t\t 3、通过JS API触发（例如点击如下蓝色按钮体验）；\n\t\t\t\t\t <span class=\"android-only\">4、Android手机按menu键；</span>\n\t\t\t\t</p>\n\t\t\t\t<p style=\"padding: 5px 20px;margin-bottom: 5px;\">\n\t\t\t\t\t<button id=\"show-btn\" type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-block\" style=\"padding: 10px;\">\n\t\t\t\t\t\t显示侧滑菜单\n\t\t\t\t\t</button>\n\t\t\t\t</p>\n\t\t\t\t<p >侧滑菜单的移动动画，支持多种效果，切换如下选项体验不同动画效果：</p>\n\n\t\t\t</div>\n\t\t\t<form class=\"mui-input-group\" style=\"margin-bottom: 15px;\">\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>主界面移动、菜单不动</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" checked=\"\" value=\"main-move\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t<label>主界面不动、菜单移动</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"menu-move\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row mui-radio mui-hidden\" id=\"move-togger\">\n\t\t\t\t\t<label>整体移动</label>\n\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"all-move\">\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tvar main,menu, mask = mui.createMask(_closeMenu);\n\t\tvar showMenu = false,mode = 'main-move';\n\t\t \n\t\tif (!mui.os.android) {\n\t\t\t//整体滑动暂不支持android手机，因为两个页面的移动动画，无法保证同步性；\n\t\t\tdocument.getElementById(\"move-togger\").classList.remove('mui-hidden');\n\t\t\tvar spans = document.querySelectorAll('.android-only');\n\t\t\tfor (var i=0,len=spans.length;i<len;i++) {\n\t\t\t\tspans[i].style.display = \"none\";\n\t\t\t}\n\t\t}\n\n\t\tmui.init({\n\t\t\tswipeBack: false,\n\t\t\tbeforeback: back\n\t\t});\n\n\t\tfunction back() {\n\t\t\tif (showMenu) {\n\t\t\t\t//菜单处于显示状态，返回键应该先关闭菜单,阻止主窗口执行mui.back逻辑；\n\t\t\t\tcloseMenu();\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\t//菜单处于隐藏状态，执行返回时，要先close菜单页面，然后继续执行mui.back逻辑关闭主窗口；\n\t\t\t\tmenu.close('none');\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t//plusReady事件后，自动创建menu窗口；\n\t\tmui.plusReady(function() {\n\t\t\tmain = plus.webview.currentWebview();\n\t\t\t//setTimeout的目的是等待窗体动画结束后，再执行create webview操作，避免资源竞争，导致窗口动画不流畅；\n\t\t\tsetTimeout(function () {\n\t\t\t\t//侧滑菜单默认隐藏，这样可以节省内存；\n\t\t\t\tmenu = mui.preload({\n\t\t\t\t\tid: 'offcanvas-drag-right-plus-menu',\n\t\t\t\t\turl: 'offcanvas-drag-right-plus-menu.html',\n\t\t\t\t\tstyles: {\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\twidth: '70%',\n\t\t\t\t\t\tzindex: 9997\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},300);\n\t\t\t\n\t\t});\n\t\t/**\n\t\t * 显示菜单菜单\n\t\t */\n\t\tfunction openMenu() {\n\t\t\tif (!showMenu) {\n\t\t\t\t//侧滑菜单处于隐藏状态，则立即显示出来；\n\t\t\t\t//显示完毕后，根据不同动画效果移动窗体；\n\t\t\t\tmenu.show('none', 0, function() {\n\t\t\t\t\tswitch (mode){\n\t\t\t\t\t\tcase 'main-move':\n\t\t\t\t\t\t\t//主窗体开始侧滑；\n\t\t\t\t\t\t\tmain.setStyle({\n\t\t\t\t\t\t\t\tleft: '70%',\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'menu-move':\n\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\tleft: '0%',\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'all-move':\n\t\t\t\t\t\t\tmain.setStyle({\n\t\t\t\t\t\t\t\tleft: '70%',\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\tleft: '0%',\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t//显示遮罩\n\t\t\t\tmask.show();\n\t\t\t\tshowMenu = true;\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * 关闭侧滑菜单\n\t\t */\n\t\tfunction closeMenu () {\n\t\t\t_closeMenu();\n\t\t\t//关闭遮罩\n\t\t\tmask.close();\n\t\t}\n\t\t\n\t\t/**\n\t\t * 关闭侧滑菜单（业务部分）\n\t\t */\n\t\tfunction _closeMenu() {\n\t\t\tif (showMenu) {\n\t\t\t\t//关闭遮罩；\n\t\t\t\tswitch (mode){\n\t\t\t\t\tcase 'main-move':\n\t\t\t\t\t\t//主窗体开始侧滑；\n\t\t\t\t\t\tmain.setStyle({\n\t\t\t\t\t\t\tleft: '0',\n\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'menu-move':\n\t\t\t\t\t\t//主窗体开始侧滑；\n\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\tleft: '-70%',\n\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'all-move':\n\t\t\t\t\t\t//主窗体开始侧滑；\n\t\t\t\t\t\tmain.setStyle({\n\t\t\t\t\t\t\tleft: '0',\n\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//menu页面同时移动\n\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\tleft: '-70%',\n\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\tduration: 150\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//等窗体动画结束后，隐藏菜单webview，节省资源；\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmenu.hide();\n\t\t\t\t}, 200);\n\t\t\t\t//改变标志位\n\t\t\t\tshowMenu = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\t//变换侧滑动画移动效果；\n\t\tmui('.mui-input-group').on('change', 'input', function() {\n\t\t\tif (this.checked) {\n\t\t\t\tswitch (this.value) {\n\t\t\t\t\tcase 'main-move':\n\t\t\t\t\t\t//仅主窗口移动的时候，menu页面的zindex值要低一点；\n\t\t\t\t\t\tmenu.setStyle({left:'0',zindex:9997});\n\t\t\t\t\t\tif(mode=='all-move'){\n\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\tleft: '0%'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmode = 'main-move';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'menu-move':\n\t\t\t\t\t\tmenu.setStyle({left:'-70%',zindex:9999});\n\t\t\t\t\t\tif(mode=='all-move'){\n\t\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\t\tleft: '0%'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmode = 'menu-move';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'all-move':\n\t\t\t\t\t\t//切换为整体移动\n\t\t\t\t\t\t//首先改变移动标志\n\t\t\t\t\t\tslideTogether = true;\n\t\t\t\t\t\t//变换menu界面初始化位置，整体移动时，Menu界面left需要在-70%的地方；\n\t\t\t\t\t\tmenu.setStyle({\n\t\t\t\t\t\t\tleft: '-70%'\n\t\t\t\t\t\t});\n\t\t\t\t\t\tmode = 'all-move';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t //点击左上角图标，打开侧滑菜单；\n\t\tdocument.querySelector('.mui-icon-bars').addEventListener('tap', openMenu);\n\t\tdocument.getElementById(\"show-btn\").addEventListener('tap',openMenu);\n\t\t //在android4.4中的swipe事件，需要preventDefault一下，否则触发不正常\n\t\t //故，在dragleft，dragright中preventDefault\n\t\twindow.addEventListener('dragright', function(e) {\n\t\t\te.detail.gesture.preventDefault();\n\t\t});\n\t\twindow.addEventListener('dragleft', function(e) {\n\t\t\te.detail.gesture.preventDefault();\n\t\t});\n\t\t //主界面向右滑动，若菜单未显示，则显示菜单；否则不做任何操作；\n\t\twindow.addEventListener(\"swiperight\", openMenu);\n\t\t //主界面向左滑动，若菜单已显示，则关闭菜单；否则，不做任何操作；\n\t\twindow.addEventListener(\"swipeleft\", closeMenu);\n\t\t //menu页面向左滑动，关闭菜单；\n\t\twindow.addEventListener(\"menu:swipeleft\", closeMenu);\n\n\t\t//重写mui.menu方法，Android版本menu按键按下可自动打开、关闭侧滑菜单；\n\t\tmui.menu = function() {\n\t\t\tif (showMenu) {\n\t\t\t\tcloseMenu();\n\t\t\t} else {\n\t\t\t\topenMenu();\n\t\t\t}\n\t\t}\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/offcanvas-drag-right-plus-menu.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\tbody, .mui-content {\n\t\t\t\tbackground-color: #333;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\t\t\theader.mui-bar{\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.mui-bar-nav~.mui-content{\n\t\t\t\tpadding: 0;\n\t\t\t}\n\t\t\t .title{\n\t\t\t  \tmargin: 35px 15px 10px;\n\t\t\t  }\n\t\t\t  .title+.content{\n\t\t\t  \tmargin: 10px 15px 35px;\n\t\t\t  \tcolor: #bbb;\n\t\t\t  \ttext-indent: 1em;\n\t\t\t  \tfont-size: 14px;\n\t\t\t  \tline-height: 24px;\n\t\t\t  }\n\t\t\t  .mui-table-view{\n\t\t\t  \tmargin-bottom: 35px;\n\t\t\t  }\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"title\">侧滑导航</div>\n\t\t\t\t<div class=\"content\">\n\t\t\t\t\t这是侧滑菜单示例，你可以在这里放置任何内容；关闭侧滑菜单有多种方式：\n\t\t\t\t\t1.在手机屏幕任意位置快速向左滑动(swipe)；\n\t\t\t\t\t2.点击本侧滑菜单页之外的任意位置;\n\t\t\t\t\t3.点击如下红色按钮；\n\t\t\t\t\t<span class=\"android-only\">\n\t\t\t\t\t\t4.Android手机按back键；5.Android手机按menu键\n\t\t\t\t\t</span>。\n\t\t\t\t\t<p style=\"margin: 10px 15px;\">\n\t\t\t\t\t\t<button id=\"close-btn\" type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-block\" style=\"padding: 5px 20px;\">关闭侧滑菜单</button>\n\t\t\t\t\t</p>\n\t\t\t\t\t\n\t\t\t\t</div>\n\t\t\t\t<div class=\"title\" style=\"margin-bottom: 25px;\">侧滑列表示例</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron mui-table-view-inverted\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 1\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 2\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 3\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 4\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 5\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 6\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tmui.init({\n\t\t\t\tkeyEventBind: {\n\t\t\t\t\tbackbutton: false,\n\t\t\t\t\tmenubutton: false\n\t\t\t\t}\n\t\t\t});\n\t\t\t//获得侧滑主窗口webview对象\n\t\t\tvar main = null;\n\t\t\tmui.plusReady(function () {\n\t\t\t\tmain = plus.webview.currentWebview().opener();\n\t\t\t})\n\t\t\tfunction closeMenu () {\n\t\t\t\tmui.fire(main,\"menu:swipeleft\");\n\t\t\t}\n\t\t\t//优化显示出来的侧滑菜单，只需监听该菜单的左滑事件，然后将其关闭即可；在菜单上右滑，不做任何操作；\n\t\t\twindow.addEventListener(\"swipeleft\",closeMenu);  \n\t\t\tdocument.getElementById(\"close-btn\").addEventListener('tap',closeMenu);\n\t\t\tmui.menu = closeMenu;\n\t\t</script>\n</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/offcanvas-drag-right.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\tspan.mui-icon {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #007aff;\n\t\t\t\tmargin-left: -15px;\n\t\t\t\tpadding-right: 10px;\n\t\t\t}\n\t\t\t.mui-off-canvas-left {\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\t\t\t.title {\n\t\t\t\tmargin: 35px 15px 10px;\n\t\t\t}\n\t\t\t.title+.content {\n\t\t\t\tmargin: 10px 15px 35px;\n\t\t\t\tcolor: #bbb;\n\t\t\t\ttext-indent: 1em;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tline-height: 24px;\n\t\t\t}\n\t\t\tinput {\n\t\t\t\tcolor: #000;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"offCanvasWrapper\" class=\"mui-off-canvas-wrap mui-draggable\">\n\t\t\t<!--侧滑菜单部分-->\n\t\t\t<aside id=\"offCanvasSide\" class=\"mui-off-canvas-left\">\n\t\t\t\t<div id=\"offCanvasSideScroll\" class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<div class=\"title\">侧滑导航</div>\n\t\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t\t这是可拖动式侧滑菜单示例，你可以在这里放置任何内容；关闭侧滑菜单有多种方式： 1.在手机屏幕任意位置向左拖动(drag)；2.点击本侧滑菜单页之外的任意位置; 3.点击如下红色按钮\n\t\t\t\t\t\t\t<span class=\"android-only\">；4.Android手机按back键；5.Android手机按menu键\n\t\t\t\t\t\t\t</span>。\n\t\t\t\t\t\t\t<p style=\"margin: 10px 15px;\">\n\t\t\t\t\t\t\t\t<button id=\"offCanvasHide\" type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-block\" style=\"padding: 5px 20px;\">关闭侧滑菜单</button>\n\t\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"title\" style=\"margin-bottom: 25px;\">侧滑列表示例</div>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron mui-table-view-inverted\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 1\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 2\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 3\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 4\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 5\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\t\t\tItem 6\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</aside>\n\t\t\t<!--主界面部分-->\n\t\t\t<div class=\"mui-inner-wrap\">\n\t\t\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t\t\t<a href=\"#offCanvasSide\" class=\"mui-icon mui-action-menu mui-icon-bars mui-pull-left\"></a>\n\t\t\t\t\t<a class=\"mui-action-back mui-btn mui-btn-link mui-pull-right\">关闭</a>\n\t\t\t\t\t<h1 class=\"mui-title\">div模式右滑菜单</h1>\n\t\t\t\t</header>\n\t\t\t\t<div id=\"offCanvasContentScroll\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t\t\t\t<p>这是可拖动式右滑导航示例，主页面和菜单在一个HTML文件中， 优点是支持拖动手势（跟手），缺点是不支持菜单内容在多页面的复用； 当前页面为主界面，你可以在主界面放置任何内容； 打开侧滑菜单有多种方式： 1、在当前页面向右拖动； 2、点击页面左上角的\n\t\t\t\t\t\t\t\t<span class=\"mui-icon mui-icon-bars\"></span> 图标； 3、通过JS API触发（例如点击如下蓝色按钮体验）；\n\t\t\t\t\t\t\t\t<span class=\"android-only\">4、Android手机按menu键；</span>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p style=\"padding: 5px 20px;margin-bottom: 5px;\">\n\t\t\t\t\t\t\t\t<button id=\"offCanvasShow\" type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-block\" style=\"padding: 10px;\">\n\t\t\t\t\t\t\t\t\t显示侧滑菜单\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p>侧滑菜单的移动动画，支持多种效果，切换如下选项体验不同动画效果：</p>\n\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<form class=\"mui-input-group\" style=\"margin-bottom: 15px;\">\n\t\t\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t\t\t<label>主界面移动、菜单不动</label>\n\t\t\t\t\t\t\t\t<input name=\"style\" type=\"radio\" checked=\"\" value=\"main-move\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t\t\t<label>主界面不动、菜单移动</label>\n\t\t\t\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"menu-move\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mui-input-row mui-radio mui-hidden\" id=\"move-togger\">\n\t\t\t\t\t\t\t\t<label>整体移动</label>\n\t\t\t\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"all-move\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t\t\t<label>缩放式侧滑（类手机QQ）</label>\n\t\t\t\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"main-move-scalable\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form>\n\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- off-canvas backdrop -->\n\t\t\t\t<div class=\"mui-off-canvas-backdrop\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init();\n\t\t\t //侧滑容器父节点\n\t\t\tvar offCanvasWrapper = mui('#offCanvasWrapper');\n\t\t\t //主界面容器\n\t\t\tvar offCanvasInner = offCanvasWrapper[0].querySelector('.mui-inner-wrap');\n\t\t\t //菜单容器\n\t\t\tvar offCanvasSide = document.getElementById(\"offCanvasSide\");\n\t\t\tif (!mui.os.android) {\n\t\t\t\tdocument.getElementById(\"move-togger\").classList.remove('mui-hidden');\n\t\t\t\tvar spans = document.querySelectorAll('.android-only');\n\t\t\t\tfor (var i = 0, len = spans.length; i < len; i++) {\n\t\t\t\t\tspans[i].style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\t\t\t //移动效果是否为整体移动\n\t\t\tvar moveTogether = false;\n\t\t\t //侧滑容器的class列表，增加.mui-slide-in即可实现菜单移动、主界面不动的效果；\n\t\t\tvar classList = offCanvasWrapper[0].classList;\n\t\t\t //变换侧滑动画移动效果；\n\t\t\tmui('.mui-input-group').on('change', 'input', function() {\n\t\t\t\tif (this.checked) {\n\t\t\t\t\toffCanvasSide.classList.remove('mui-transitioning');\n\t\t\t\t\toffCanvasSide.setAttribute('style', '');\n\t\t\t\t\tclassList.remove('mui-slide-in');\n\t\t\t\t\tclassList.remove('mui-scalable');\n\t\t\t\t\tswitch (this.value) {\n\t\t\t\t\t\tcase 'main-move':\n\t\t\t\t\t\t\tif (moveTogether) {\n\t\t\t\t\t\t\t\t//仅主内容滑动时，侧滑菜单在off-canvas-wrap内，和主界面并列\n\t\t\t\t\t\t\t\toffCanvasWrapper[0].insertBefore(offCanvasSide, offCanvasWrapper[0].firstElementChild);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'main-move-scalable':\n\t\t\t\t\t\t\tif (moveTogether) {\n\t\t\t\t\t\t\t\t//仅主内容滑动时，侧滑菜单在off-canvas-wrap内，和主界面并列\n\t\t\t\t\t\t\t\toffCanvasWrapper[0].insertBefore(offCanvasSide, offCanvasWrapper[0].firstElementChild);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclassList.add('mui-scalable');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'menu-move':\n\t\t\t\t\t\t\tclassList.add('mui-slide-in');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'all-move':\n\t\t\t\t\t\t\tmoveTogether = true;\n\t\t\t\t\t\t\t//整体滑动时，侧滑菜单在inner-wrap内\n\t\t\t\t\t\t\toffCanvasInner.insertBefore(offCanvasSide, offCanvasInner.firstElementChild);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\toffCanvasWrapper.offCanvas().refresh();\n\t\t\t\t}\n\t\t\t});\n\t\t\t //主界面‘显示侧滑菜单’按钮的点击事件\n\t\t\tdocument.getElementById('offCanvasShow').addEventListener('tap', function() {\n\t\t\t\toffCanvasWrapper.offCanvas('show');\n\t\t\t});\n\t\t\t //菜单界面，‘关闭侧滑菜单’按钮的点击事件\n\t\t\tdocument.getElementById('offCanvasHide').addEventListener('tap', function() {\n\t\t\t\toffCanvasWrapper.offCanvas('close');\n\t\t\t});\n\t\t\t //主界面和侧滑菜单界面均支持区域滚动；\n\t\t\tmui('#offCanvasSideScroll').scroll();\n\t\t\tmui('#offCanvasContentScroll').scroll();\n\t\t\t //实现ios平台原生侧滑关闭页面；\n\t\t\tif (mui.os.plus && mui.os.ios) {\n\t\t\t\tmui.plusReady(function() { //5+ iOS暂时无法屏蔽popGesture时传递touch事件，故该demo直接屏蔽popGesture功能\n\t\t\t\t\tplus.webview.currentWebview().setStyle({\n\t\t\t\t\t\t'popGesture': 'none'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/pagination.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">pagination（分页）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<h5 class=\"mui-content-padded\">分页(默认尺寸)</h5>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<ul class=\"mui-pagination\">\n\t\t\t\t\t<li class=\"mui-previous mui-disabled\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t&laquo;\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-active\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t2\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t3\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t4\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t5\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-next\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t&raquo;\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">分页(大尺寸)</h5>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<ul class=\"mui-pagination mui-pagination-lg\">\n\t\t\t\t\t<li class=\"mui-previous\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t&laquo;\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t2\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t3\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t4\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-active\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t5\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-next mui-disabled\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t&raquo;\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">分页(小尺寸)</h5>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<ul class=\"mui-pagination mui-pagination-sm\">\n\t\t\t\t\t<li class=\"mui-previous\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t&laquo;\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t2\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-active\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t3\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t4\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t5\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-next\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t&raquo;\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">翻页(默认)</h5>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<ul class=\"mui-pager\">\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t上一页\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t下一页\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">翻页(对齐)</h5>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<ul class=\"mui-pager\">\n\t\t\t\t\t<li class=\"mui-previous\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t上一页\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-next\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t下一页\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">翻页(禁用)</h5>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<ul class=\"mui-pager\">\n\t\t\t\t\t<li class=\"mui-disabled\">\n\t\t\t\t\t\t<span> 上一页 </span>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t下一页\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t\t\t(function($) {\n\t\t\t\t$('.mui-pagination').on('tap', 'a', function() {\n\t\t\t\t\tvar li = this.parentNode;\n\t\t\t\t\tvar classList = li.classList;\n\t\t\t\t\tif (!classList.contains('mui-active') && !classList.contains('mui-disabled')) {\n\t\t\t\t\t\tvar active = li.parentNode.querySelector('.mui-active');\n\t\t\t\t\t\tif (classList.contains('mui-previous')) {//previous\n\t\t\t\t\t\t\tif (active) {\n\t\t\t\t\t\t\t\tvar previous = active.previousElementSibling;\n\t\t\t\t\t\t\t\tconsole.log('previous', previous);\n\t\t\t\t\t\t\t\tif (previous && !previous.classList.contains('mui-previous')) {\n\t\t\t\t\t\t\t\t\t$.trigger(previous.querySelector('a'), 'tap');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tclassList.add('mui-disabled');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (classList.contains('mui-next')) {//next\n\t\t\t\t\t\t\tif (active) {\n\t\t\t\t\t\t\t\tvar next = active.nextElementSibling;\n\t\t\t\t\t\t\t\tif (next && !next.classList.contains('mui-next')) {\n\t\t\t\t\t\t\t\t\t$.trigger(next.querySelector('a'), 'tap');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tclassList.add('mui-disabled');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {//page\n\t\t\t\t\t\t\tactive.classList.remove('mui-active');\n\t\t\t\t\t\t\tclassList.add('mui-active');\n\t\t\t\t\t\t\tvar page = parseInt(this.innerText);\n\t\t\t\t\t\t\tvar previousPageElement = li.parentNode.querySelector('.mui-previous');\n\t\t\t\t\t\t\tvar nextPageElement = li.parentNode.querySelector('.mui-next');\n\t\t\t\t\t\t\tpreviousPageElement.classList.remove('mui-disabled');\n\t\t\t\t\t\t\tnextPageElement.classList.remove('mui-disabled');\n\t\t\t\t\t\t\tif (page <= 1) {\n\t\t\t\t\t\t\t\tpreviousPageElement.classList.add('mui-disabled');\n\t\t\t\t\t\t\t} else if (page >= 5) {\n\t\t\t\t\t\t\t\tnextPageElement.classList.add('mui-disabled');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})(mui); \n\t\t</script>\n\t</body>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/picker.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t\t<link href=\"../css/mui.picker.css\" rel=\"stylesheet\" />\r\n\t\t<link href=\"../css/mui.poppicker.css\" rel=\"stylesheet\" />\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/mui.picker.min.css\" />-->\n\t\t<style>\n\t\t\t.mui-btn {\n\t\t\t\tfont-size: 16px;\n\t\t\t\tpadding: 8px;\n\t\t\t\tmargin: 3px;\n\t\t\t}\n\t\t\th5.mui-content-padded {\n\t\t\t\tmargin-left: 3px;\n\t\t\t\tmargin-top: 20px !important;\n\t\t\t}\n\t\t\th5.mui-content-padded:first-child {\n\t\t\t\tmargin-top: 12px !important;\n\t\t\t}\n\t\t\t.ui-alert {\n\t\t\t\ttext-align: center;\n\t\t\t\tpadding: 20px 10px;\n\t\t\t\tfont-size: 16px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">picker（选择器）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h5 class=\"mui-content-padded\">原生 SELECT</h5>\n\t\t\t\t<select class=\"mui-btn mui-btn-block\">\n\t\t\t\t\t<option value=\"item-1\">item-1</option>\n\t\t\t\t\t<option value=\"item-2\">item-2</option>\n\t\t\t\t\t<option value=\"item-3\">item-3</option>\n\t\t\t\t\t<option value=\"item-4\">item-4</option>\n\t\t\t\t\t<option value=\"item-5\">item-5</option>\n\t\t\t\t</select>\n\t\t\t\t<br />\n\t\t\t\t<p>原生 SELECT（选择框）在不同的设备上UI可能会有差异，并且不支持多级联动(多个 SELECT 可实现，但较麻烦)，故mui封装了picker组件，参见如下示例。</p>\n\t\t\t\t<h5 class=\"mui-content-padded\">普通示例</h5>\n\t\t\t\t<button id='showUserPicker' class=\"mui-btn mui-btn-block\" type='button'>一级选择示例 ...</button>\n\t\t\t\t<div id='userResult' class=\"ui-alert\"></div>\n\t\t\t\t<h5 class=\"mui-content-padded\">级联示例</h5>\n\t\t\t\t<button id='showCityPicker' class=\"mui-btn mui-btn-block\" type='button'>二级联动示例 ...</button>\n\t\t\t\t<div id='cityResult' class=\"ui-alert\"></div>\n\t\t\t\t<button id='showCityPicker3' class=\"mui-btn mui-btn-block\" type='button'>三级联动示例 ...</button>\n\t\t\t\t<div id='cityResult3' class=\"ui-alert\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<!--<script src=\"../js/mui.picker.min.js\"></script>-->\n\t\t<script src=\"../js/mui.picker.js\"></script>\r\n\t\t<script src=\"../js/mui.poppicker.js\"></script>\n\t\t<script src=\"../js/city.data.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\t\t<script src=\"../js/city.data-3.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\t\t<script>\n\t\t\t(function($, doc) {\n\t\t\t\t$.init();\n\t\t\t\t$.ready(function() {\n\t\t\t\t\t/**\n\t\t\t\t\t * 获取对象属性的值\n\t\t\t\t\t * 主要用于过滤三级联动中，可能出现的最低级的数据不存在的情况，实际开发中需要注意这一点；\n\t\t\t\t\t * @param {Object} obj 对象\n\t\t\t\t\t * @param {String} param 属性名\n\t\t\t\t\t */\n\t\t\t\t\tvar _getParam = function(obj, param) {\n\t\t\t\t\t\treturn obj[param] || '';\n\t\t\t\t\t};\n\t\t\t\t\t//普通示例\n\t\t\t\t\tvar userPicker = new $.PopPicker();\n\t\t\t\t\tuserPicker.setData([{\n\t\t\t\t\t\tvalue: 'ywj',\n\t\t\t\t\t\ttext: '董事长 叶文洁'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'aaa',\n\t\t\t\t\t\ttext: '总经理 艾AA'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'lj',\n\t\t\t\t\t\ttext: '罗辑'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'ymt',\n\t\t\t\t\t\ttext: '云天明'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'shq',\n\t\t\t\t\t\ttext: '史强'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'zhbh',\n\t\t\t\t\t\ttext: '章北海'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'zhy',\n\t\t\t\t\t\ttext: '庄颜'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'gyf',\n\t\t\t\t\t\ttext: '关一帆'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'zhz',\n\t\t\t\t\t\ttext: '智子'\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: 'gezh', \n\t\t\t\t\t\ttext: '歌者'\n\t\t\t\t\t}]);\n\t\t\t\t\tvar showUserPickerButton = doc.getElementById('showUserPicker');\n\t\t\t\t\tvar userResult = doc.getElementById('userResult');\n\t\t\t\t\tshowUserPickerButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\tuserPicker.show(function(items) {\n\t\t\t\t\t\t\tuserResult.innerText = JSON.stringify(items[0]);\n\t\t\t\t\t\t\t//返回 false 可以阻止选择框的关闭\n\t\t\t\t\t\t\t//return false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}, false);\n\t\t\t\t\t//-----------------------------------------\n\t\t\t\t\t//级联示例\n\t\t\t\t\tvar cityPicker = new $.PopPicker({\n\t\t\t\t\t\tlayer: 2\n\t\t\t\t\t});\n\t\t\t\t\tcityPicker.setData(cityData);\n\t\t\t\t\tvar showCityPickerButton = doc.getElementById('showCityPicker');\n\t\t\t\t\tvar cityResult = doc.getElementById('cityResult');\n\t\t\t\t\tshowCityPickerButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\tcityPicker.show(function(items) {\n\t\t\t\t\t\t\tcityResult.innerText = \"你选择的城市是:\" + items[0].text + \" \" + items[1].text;\n\t\t\t\t\t\t\t//返回 false 可以阻止选择框的关闭\n\t\t\t\t\t\t\t//return false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}, false);\n\t\t\t\t\t//-----------------------------------------\n\t\t\t\t\t//\t\t\t\t\t//级联示例\n\t\t\t\t\tvar cityPicker3 = new $.PopPicker({\n\t\t\t\t\t\tlayer: 3\n\t\t\t\t\t});\n\t\t\t\t\tcityPicker3.setData(cityData3);\n\t\t\t\t\tvar showCityPickerButton = doc.getElementById('showCityPicker3');\n\t\t\t\t\tvar cityResult3 = doc.getElementById('cityResult3');\n\t\t\t\t\tshowCityPickerButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\tcityPicker3.show(function(items) {\n\t\t\t\t\t\t\tcityResult3.innerText = \"你选择的城市是:\" + _getParam(items[0], 'text') + \" \" + _getParam(items[1], 'text') + \" \" + _getParam(items[2], 'text');\n\t\t\t\t\t\t\t//返回 false 可以阻止选择框的关闭\n\t\t\t\t\t\t\t//return false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}, false);\n\t\t\t\t});\n\t\t\t})(mui, document);\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/popovers.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />-->\n\t\t<style>\n\t\t\t\n\t\t\t.mui-plus .plus{\n\t\t\t\tdisplay: inline;\n\t\t\t}\n\t\t\t\n\t\t\t.plus{\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t\n\t\t\t#topPopover {\n\t\t\t\tposition: fixed;\n\t\t\t\ttop: 16px;\n\t\t\t\tright: 6px;\n\t\t\t}\n\t\t\t#topPopover .mui-popover-arrow {\n\t\t\t\tleft: auto;\n\t\t\t\tright: 6px;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\tspan.mui-icon {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #007aff;\n\t\t\t\tmargin-left: -15px;\n\t\t\t\tpadding-right: 10px;\n\t\t\t}\n\t\t\t.mui-popover {\n\t\t\t\theight: 300px;\n\t\t\t}\n\t\t\t.mui-content {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<a id=\"menu\" class=\"mui-action-menu mui-icon mui-icon-bars mui-pull-right\" href=\"#topPopover\"></a>\n\t\t\t<h1 class=\"mui-title\">popover（弹出菜单）</h1>\n\t\t</header>\n\t\t<footer class=\"mui-bar mui-bar-footer\">\n\t\t\t<a href=\"#bottomPopover\" class=\"mui-btn mui-btn-link mui-pull-right\">菜单</a>\n\t\t</footer>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>popover（弹出菜单）是mobile App中常见的UI组件，在用户点击位置附近弹出悬浮菜单，向用户展示更多信息或提供快捷操作。</p>\n\t\t\t\t<p>popover最常用的两个位置：顶部导航栏右侧和底部工具栏右侧； 点击本页右上角的\n\t\t\t\t\t<span class=\"mui-icon mui-icon-bars\"></span> 图标体验，\n\t\t\t\t\t<!--TODO 后续增加原生标题示例-->\n\t\t\t\t\t<!--<span class=\"plus\">这是一个<strong>原生标题栏</strong>触发的popover示例，\r\n\t\t\t\t\t<span class=\"mui-icon mui-icon-bars\"></span>在父webview中，点击后通过自定义事件 通知子webview， 子webview再执行popover的显示隐藏逻辑； </span>-->\n\t\t\t\t\t接着点击本页面右下角的“菜单”按钮体验。\n\t\t\t\t</p>\n\t\t\t\t<p>除了页面顶部导航栏、底部工具栏固定位置之外，其它区域要使用弹出菜单，都要准确计算物理位置，从而实现弹出菜单的绝对定位； mui封装的手势事件中，可以获得点击位置，通过这些位置可实现任意区域的弹出菜单显示，点击如下按钮体验：\n\t\t\t\t</p>\n\t\t\t\t<p style=\"text-indent: 0;\">\n\t\t\t\t\t<a href=\"#middlePopover\" class=\"mui-btn mui-btn-primary mui-btn-block mui-btn-outlined\" style=\"padding: 5px 20px;\">打开弹出菜单</a>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<!--右上角弹出菜单-->\n\t\t<div id=\"topPopover\" class=\"mui-popover\">\n\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t<a href=\"#\">Item1</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item2</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item3</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item4</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item5</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item6</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item7</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item8</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item9</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item10</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t\t<div id=\"middlePopover\" class=\"mui-popover\">\n\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item1</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item2</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item3</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item4</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item5</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item6</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item7</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item8</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item9</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item10</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t\t<!--右下角弹出菜单-->\n\t\t<div id=\"bottomPopover\" class=\"mui-popover mui-popover-bottom\">\n\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item1</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item2</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item3</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item4</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item5</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item6</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item7</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item8</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item9</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Item10</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init();\n\t\t\t\n\t\t\tmui.plusReady(function () {\n//\t\t\t\tvar view = plus.nativeObj.View.getViewById(\"title\");\r\n//\t\t\t\t\r\n//\t\t\t\tvar bitmap = new plus.nativeObj.Bitmap(\"back\");\r\n//\t\t\t\tbitmap.loadBase64Data(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAb1BMVEUAAAAAev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8AAACubimgAAAAI3RSTlMAGfUTGfQTGPMSGPIYGhgaGBsXGxcbFxwXHBccFhwWHRYdHWufDPQAAAABYktHRACIBR1IAAAAB3RJTUUH4QETEBwooeTlkQAAAJVJREFUSMft1EkSgkAQRNFGUXFWHBDBibr/HTUwD5B/48Ig1y+io7u6MqUhf5hsNEY+j5hMgZ/FJ8Xc9ovos3T96utjbfqN/Nb0O/m96Uv5g+mP8ifTn+Ur01/ka9Nf5RvTt/I309/lH6Z/yr9Mn+Q71/MT8B34K/E58Enzv8R/K98HvnF8p3lr8F7izce7lbf3kJ/lDQp9HdBhgg3PAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTAxLTE5VDE2OjI4OjQwKzA4OjAwpTDFwQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wMS0xOVQxNjoyODo0MCswODowMNRtfX0AAAAASUVORK5CYII=\");\r\n//\t\t\t\tview.drawBitmap(bitmap, {}, {\r\n//\t\t\t\t\ttop: \"10px\",\r\n//\t\t\t\t\tleft: \"10px\",\r\n//\t\t\t\t\twidth: \"24px\",\r\n//\t\t\t\t\theight: \"24px\"\r\n//\t\t\t\t});\r\n//\t\t\t\t\r\n//\t\t\t\tview.setTouchEventRect({top:\"0px\",left:\"0px\",width:\"44px\",height:\"100%\"});\n\t\t\t});\n\t\t\t\n\t\t\tmui('.mui-scroll-wrapper').scroll();\n\t\t\tmui('body').on('shown', '.mui-popover', function(e) {\n\t\t\t\t//console.log('shown', e.detail.id);//detail为当前popover元素\n\t\t\t});\n\t\t\tmui('body').on('hidden', '.mui-popover', function(e) {\n\t\t\t\t//console.log('hidden', e.detail.id);//detail为当前popover元素\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/progressbar.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />-->\n\t\t<style>\n\t\t\th5 {\n\t\t\t\tmargin-bottom: 10px;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-demo-container{\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tpadding: 10px 15px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-btn-block{\n\t\t\t\tpadding: 5px 0;\n\t\t\t}\n\t\t\t\n\t\t\t#demo5 .mui-progressbar{\n\t\t\t\tmargin: 15px 10px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-progressbar-success span {\n\t\t\t\tbackground-color: #4cd964;\n\t\t\t}\n\t\t\t.mui-progressbar-warning span {\n\t\t\t\tbackground-color: #f0ad4e;\n\t\t\t}\n\t\t\t.mui-progressbar-danger span {\n\t\t\t\tbackground-color: #dd524d;\n\t\t\t}\n\t\t\t.mui-progressbar-royal span {\n\t\t\t\tbackground-color: #8a6de9;\n\t\t\t}\n\t\t\t\n\t\t\t/*Android平台使用父子webview，因此需要修改顶部进度条的显示位置*/\n\t\t\t.mui-plus.mui-android>.mui-progressbar{\n\t\t\t\ttop:0\n\t\t\t}\n\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">progress bar（进度条）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-demo-container\">\n\t\t\t\t<div id=\"demo1\" class=\"mui-text-center\">\n\t\t\t\t\t<h5>动态设置进度条进度</h5>\n\t\t\t\t\t<p class=\"mui-progressbar mui-progressbar-in\" data-progress=\"20\"><span></span></p>\n\t\t\t\t\t<ul id=\"progressbarBtn1\" class=\"mui-pagination\">\n\t\t\t\t\t\t<li><a href=\"javascript:;\" data-progress=\"10\">10%</a></li>\n\t\t\t\t\t\t<li><a href=\"javascript:;\" data-progress=\"30\">30%</a></li>\n\t\t\t\t\t\t<li><a href=\"javascript:;\" data-progress=\"50\">50%</a></li>\n\t\t\t\t\t\t<li><a href=\"javascript:;\" data-progress=\"100\">100%</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"demo2\">\n\t\t\t\t\t<h5>动态创建内联进度条及销毁</h5>\n\t\t\t\t\t<p style=\"height: 2px;\"></p>\n\t\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-outlined mui-btn-block\">开始加载</button>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"demo3\">\n\t\t\t\t\t<h5>动态创建页面顶部进度条</h5>\n\t\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-outlined mui-btn-block\">开始加载</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div style=\"padding-left: 10px;margin: 15px 0;\">\n\t\t\t\t<h5>无限循环进度条</h5>\n\t\t\t</div>\n\t\t\t<div class=\"mui-demo-container\">\n\t\t\t\t<div>\n\t\t\t\t\t<h5>内联无限循环进度条</h5>\n\t\t\t\t\t<p class=\"mui-progressbar mui-progressbar-infinite\"></p>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"demo4\" style=\"margin-top: 18px;\">\n\t\t\t\t\t<h5>页面顶部无限循环进度条</h5>\n\t\t\t\t\t<button type=\"button\" class=\"mui-btn mui-btn-primary mui-btn-outlined mui-btn-block\">开始加载</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div style=\"padding-left: 10px;margin: 15px 0;\"><h5>自定义进度条颜色</h5></div>\n\t\t\t<div id=\"demo5\" class=\"mui-demo-container\" style=\"padding-bottom: 30px;\">\n\t\t\t\t<p class=\"mui-progressbar mui-progressbar-success\" data-progress=\"20\"><span></span></p>\n\t\t\t\t<p class=\"mui-progressbar mui-progressbar-warning\" data-progress=\"30\" ><span></span></p>\n\t\t\t\t<p class=\"mui-progressbar mui-progressbar-danger\" data-progress=\"50\"><span></span></p>\n\t\t\t\t<p class=\"mui-progressbar mui-progressbar-royal\" data-progress=\"80\"><span></span></p>\n\t\t\t</div>\n\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\t//示例1\n\t\t\tvar progressbar1 = mui('#demo1');\n\t\t\tmui(progressbar1).progressbar().setProgress(10)\n\t\t\tprogressbar1.on('tap', 'a', function() {\n\t\t\t\tmui(progressbar1).progressbar().setProgress(this.getAttribute('data-progress'));\n\t\t\t});\n\t\t\t/**\n\t\t\t * 通过随机数模拟业务进度，真实业务中需根据实际进度修改\n\t\t\t * @param {Object} container\n\t\t\t * @param {Object} progress\n\t\t\t */\n\t\t\tfunction simulateLoading(container, progress) {\n\t\t\t\tif (typeof container === 'number') {\n\t\t\t\t\tprogress = container;\n\t\t\t\t\tcontainer = 'body';\n\t\t\t\t}\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tprogress += Math.random() * 20;\n\t\t\t\t\tmui(container).progressbar().setProgress(progress);\n\t\t\t\t\tif (progress < 100) {\n\t\t\t\t\t\tsimulateLoading(container, progress);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmui(container).progressbar().hide();\n\t\t\t\t\t}\n\t\t\t\t}, Math.random() * 200 + 200);\n\t\t\t}\n\t\t\t//动态创建内联进度条\n\t\t\tmui(\"#demo2\").on('tap', '.mui-btn', function() {\n\t\t\t\tvar container = mui(\"#demo2 p\");\n\t\t\t\tif (container.progressbar({\n\t\t\t\t\t\tprogress: 0\n\t\t\t\t\t}).show()) {\n\t\t\t\t\tsimulateLoading(container, 0);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//页面顶部进度条\n\t\t\tvar progressbar3 = mui('#demo3');\n\t\t\tprogressbar3.on('tap', 'button', function() {\n\t\t\t\tmui('body').progressbar({\n\t\t\t\t\tprogress: 0\n\t\t\t\t}).show();\n\t\t\t\tsimulateLoading(0);\n\t\t\t});\n\t\t\t//页面顶部无限进度条\n\t\t\tvar progressbar4 = mui('#demo4');\n\t\t\tprogressbar4.on('tap', 'button', function() {\n\t\t\t\t//因为本页面既有顶部准确进度的进度条，也有顶部无限循环的进度条，因此这里需要强制定义progress: undefined覆盖；\n\t\t\t\t//一般使用时，mui(container).progress()构造方法中不传入参数，就表示无限循环；\n\t\t\t\tmui('body').progressbar({\n\t\t\t\t\tprogress: undefined\n\t\t\t\t}).show();\n\t\t\t\t//本示例5秒后自动消失，实际可根据实际情况决定关闭进度条的时机；\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('body').progressbar().hide();\n\t\t\t\t}, 5000);\n\t\t\t});\n\t\t\t\n\t\t\t//自定义颜色示例\n\t\t\tmui(\"#demo5 .mui-progressbar\").each(function () {\n\t\t\t\tmui(this).progressbar({progress:this.getAttribute(\"data-progress\")}).show();\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/pullrefresh.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style type=\"text/css\">\n\t\t\t.mui-content>.mui-table-view:first-child {\n\t\t\t\tmargin-top: -1px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<!--下拉刷新容器-->\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<!--数据列表-->\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\"></ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\t\t<script>\n\t\t\t\n\t\t\tmui.init({\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#pullrefresh',\n\t\t\t\t\tdown: {\n\t\t\t\t\t\tstyle:'circle',\n\t\t\t\t\t\tcallback: pulldownRefresh\n\t\t\t\t\t},\n\t\t\t\t\tup: {\n\t\t\t\t\t\tauto:true,\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tvar count = 0;\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tvar newCount = cells.length>0?5:20;//首次加载20条，满屏\n\t\t\t\t\tfor (var i = cells.length, len = i + newCount; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\ttable.appendChild(li);\n\t\t\t\t\t}\n\t\t\t\t}, 1500);\n\t\t\t}\n\n\t\t\tfunction addData() {\n\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\tfor(var i = cells.length, len = i + 5; i < len; i++) {\n\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">Item ' + (i + 1) + '</a>';\n\t\t\t\t\t//下拉刷新，新纪录插到最前面；\n\t\t\t\t\ttable.insertBefore(li, table.firstChild);\n\t\t\t\t}\n\t\t\t}\n\t\t\t/**\n\t\t\t * 下拉刷新具体业务实现\n\t\t\t */\n\t\t\tfunction pulldownRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\taddData();\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPulldownToRefresh();\n\t\t\t\t\tmui.toast(\"为你推荐了5篇文章\");\n\t\t\t\t}, 1500);\n\t\t\t}\n\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/pullrefresh_main.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title></title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a id=\"back\" class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 id=\"title\" class=\"mui-title\">下拉刷新和上拉加载更多</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\"></div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script type=\"text/javascript\">\n\t\t//启用双击监听\n\t\tmui.init({\n\t\t\tgestureConfig:{\n\t\t\t\tdoubletap:true\n\t\t\t},\n\t\t\tsubpages:[{\n\t\t\t\turl:'pullrefresh_sub.html',\n\t\t\t\tid:'pullrefresh_sub.html',\n\t\t\t\tstyles:{\n\t\t\t\t\ttop: '45px',\n\t\t\t\t\tbottom: '0px',\n\t\t\t\t}\n\t\t\t}]\n\t\t});\n\t\n\t\tvar contentWebview = null;\n\t\tdocument.querySelector('header').addEventListener('doubletap',function () {\n\t\t\tif(contentWebview==null){\n\t\t\t\tcontentWebview = plus.webview.currentWebview().children()[0];\n\t\t\t}\n\t\t\tcontentWebview.evalJS(\"mui('#pullrefresh').pullRefresh().scrollTo(0,0,100)\");\n\t\t});\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/pullrefresh_sub.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t</head>\n\n\t<body>\n\t\t<!--下拉刷新容器-->\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<!--数据列表-->\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#pullrefresh',\n\t\t\t\t\tdown: {\n\t\t\t\t\t\tcallback: pulldownRefresh\n\t\t\t\t\t},\n\t\t\t\t\tup: {\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t/**\n\t\t\t * 下拉刷新具体业务实现\n\t\t\t */\n\t\t\tfunction pulldownRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor (var i = cells.length, len = i + 3; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\t//下拉刷新，新纪录插到最前面；\n\t\t\t\t\t\ttable.insertBefore(li, table.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPulldownToRefresh(); //refresh completed\n\t\t\t\t}, 1500);\n\t\t\t}\n\t\t\tvar count = 0;\n\t\t\t/**\n\t\t\t * 上拉加载具体业务实现\n\t\t\t */\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor (var i = cells.length, len = i + 5; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\ttable.appendChild(li);\n\t\t\t\t\t}\n\t\t\t\t}, 1500);\n\t\t\t}\n//\t\t\tif (mui.os.plus) {\r\n//\t\t\t\tmui.plusReady(function() {\r\n//\t\t\t\t\tsetTimeout(function() {\r\n//\t\t\t\t\t\tmui('#pullrefresh').pullRefresh().pullupLoading();\r\n//\t\t\t\t\t}, 10);\r\n//\r\n//\t\t\t\t});\r\n//\t\t\t} else {\r\n//\t\t\t\tmui.ready(function() {\r\n//\t\t\t\t\tmui('#pullrefresh').pullRefresh().pullupLoading();\r\n//\t\t\t\t});\r\n//\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/pullrefresh_with_tab.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.mui-bar~.mui-content .mui-fullscreen {\n\t\t\t\ttop: 44px;\n\t\t\t\theight: auto;\n\t\t\t}\n\t\t\t.mui-pull-top-tips {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: -20px;\n\t\t\t\tleft: 50%;\n\t\t\t\tmargin-left: -25px;\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t\t.mui-bar~.mui-pull-top-tips {\n\t\t\t\ttop: 24px;\n\t\t\t}\n\t\t\t.mui-pull-top-wrapper {\n\t\t\t\twidth: 42px;\n\t\t\t\theight: 42px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttext-align: center;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t\tborder: 1px solid #ddd;\n\t\t\t\tborder-radius: 25px;\n\t\t\t\tbackground-clip: padding-box;\n\t\t\t\tbox-shadow: 0 4px 10px #bbb;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.mui-pull-top-tips.mui-transitioning {\n\t\t\t\t-webkit-transition-duration: 200ms;\n\t\t\t\ttransition-duration: 200ms;\n\t\t\t}\n\t\t\t.mui-pull-top-tips .mui-pull-loading {\n\t\t\t\t/*-webkit-backface-visibility: hidden;\n\t\t\t\t-webkit-transition-duration: 400ms;\n\t\t\t\ttransition-duration: 400ms;*/\n\t\t\t\t\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t.mui-pull-top-wrapper .mui-icon,\n\t\t\t.mui-pull-top-wrapper .mui-spinner {\n\t\t\t\tmargin-top: 7px;\n\t\t\t}\n\t\t\t.mui-pull-top-wrapper .mui-icon.mui-reverse {\n\t\t\t\t/*-webkit-transform: rotate(180deg) translateZ(0);*/\n\t\t\t}\n\t\t\t.mui-pull-bottom-tips {\n\t\t\t\ttext-align: center;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tline-height: 40px;\n\t\t\t\tcolor: #777;\n\t\t\t}\n\t\t\t.mui-pull-top-canvas {\n\t\t\t\toverflow: hidden;\n\t\t\t\tbackground-color: #fafafa;\n\t\t\t\tborder-radius: 40px;\n\t\t\t\tbox-shadow: 0 4px 10px #bbb;\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t\tmargin: 0 auto;\n\t\t\t}\n\t\t\t.mui-pull-top-canvas canvas {\n\t\t\t\twidth: 40px;\n\t\t\t}\n\t\t\t.mui-slider-indicator.mui-segmented-control {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">选项卡切换+下拉刷新（div模式）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div id=\"slider\" class=\"mui-slider mui-fullscreen\">\n\t\t\t\t<div id=\"sliderSegmentedControl\" class=\"mui-scroll-wrapper mui-slider-indicator mui-segmented-control mui-segmented-control-inverted\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<a class=\"mui-control-item mui-active\" href=\"#item1mobile\">\n\t\t\t\t\t\t\t推荐\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item2mobile\">\n\t\t\t\t\t\t\t热点\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item3mobile\">\n\t\t\t\t\t\t\t北京\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item4mobile\">\n\t\t\t\t\t\t\t社会\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item5mobile\">\n\t\t\t\t\t\t\t娱乐\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item6mobile\">\n\t\t\t\t\t\t\t科技\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-slider-group\">\n\t\t\t\t\t<div id=\"item1mobile\" class=\"mui-slider-item mui-control-content mui-active\">\n\t\t\t\t\t\t<div id=\"scroll1\" class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-1\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-2\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-3\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-4\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-5\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-6\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-7\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-8\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-9\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-10\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-11\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-12\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-13\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-14\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-15\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-16\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-17\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-18\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-19\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第1个选项卡子项-20\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"item2mobile\" class=\"mui-slider-item mui-control-content\">\n\t\t\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-1\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-2\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-3\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-4\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-5\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-6\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-7\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-8\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-9\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-10\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-11\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-12\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-13\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-14\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-15\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-16\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-17\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-18\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-19\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第2个选项卡子项-20\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"item3mobile\" class=\"mui-slider-item mui-control-content\">\n\t\t\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-1\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-2\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-3\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-4\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-5\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-6\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-7\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-8\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-9\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-10\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-11\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-12\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-13\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-14\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-15\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-16\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-17\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-18\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-19\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第3个选项卡子项-20\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"item4mobile\" class=\"mui-slider-item mui-control-content\">\n\t\t\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-1\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-2\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-3\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-4\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-5\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-6\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-7\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-8\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-9\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-10\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-11\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-12\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-13\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-14\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-15\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-16\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-17\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-18\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-19\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第4个选项卡子项-20\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"item5mobile\" class=\"mui-slider-item mui-control-content\">\n\t\t\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-1\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-2\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-3\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-4\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-5\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-6\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-7\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-8\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-9\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-10\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-11\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-12\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-13\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-14\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-15\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-16\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-17\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-18\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-19\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第5个选项卡子项-20\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"item6mobile\" class=\"mui-slider-item mui-control-content\">\n\t\t\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-1\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-2\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-3\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-4\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-5\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-6\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-7\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-8\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-9\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-10\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-11\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-12\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-13\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-14\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-15\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-16\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-17\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-18\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-19\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第6个选项卡子项-20\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script src=\"../js/mui.pullToRefresh.js\"></script>\n\t\t<script src=\"../js/mui.pullToRefresh.material.js\"></script>\n\t\t<script>\n\t\t\tmui.init();\n\t\t\t(function($) {\n\t\t\t\t//阻尼系数\n\t\t\t\tvar deceleration = mui.os.ios?0.003:0.0009;\n\t\t\t\t$('.mui-scroll-wrapper').scroll({\n\t\t\t\t\tbounce: false,\n\t\t\t\t\tindicators: true, //是否显示滚动条\n\t\t\t\t\tdeceleration:deceleration\n\t\t\t\t});\n\t\t\t\t$.ready(function() {\n\t\t\t\t\t//循环初始化所有下拉刷新，上拉加载。\n\t\t\t\t\t$.each(document.querySelectorAll('.mui-slider-group .mui-scroll'), function(index, pullRefreshEl) {\n\t\t\t\t\t\t$(pullRefreshEl).pullToRefresh({\n\t\t\t\t\t\t\tdown: {\n\t\t\t\t\t\t\t\tcallback: function() {\n\t\t\t\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t\tvar ul = self.element.querySelector('.mui-table-view');\n\t\t\t\t\t\t\t\t\t\tul.insertBefore(createFragment(ul, index, 10, true), ul.firstChild);\n\t\t\t\t\t\t\t\t\t\tself.endPullDownToRefresh();\n\t\t\t\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tup: {\n\t\t\t\t\t\t\t\tcallback: function() {\n\t\t\t\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t\tvar ul = self.element.querySelector('.mui-table-view');\n\t\t\t\t\t\t\t\t\t\tul.appendChild(createFragment(ul, index, 5));\n\t\t\t\t\t\t\t\t\t\tself.endPullUpToRefresh();\n\t\t\t\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tvar createFragment = function(ul, index, count, reverse) {\n\t\t\t\t\t\tvar length = ul.querySelectorAll('li').length;\n\t\t\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\t\t\tvar li;\n\t\t\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\t\t\tli = document.createElement('li');\n\t\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\t\tli.innerHTML = '第' + (index + 1) + '个选项卡子项-' + (length + (reverse ? (count - i) : (i + 1)));\n\t\t\t\t\t\t\tfragment.appendChild(li);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fragment;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t})(mui);\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/radio.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t</head>\n\n\t<body>\n\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">单选框（radio）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<h5 class=\"mui-content-padded\">图标左对齐</h5>\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row mui-radio mui-left\">\n\t\t\t\t\t\t<label>radio</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio mui-left\">\n\t\t\t\t\t\t<label>radio</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\" checked>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio mui-left mui-disabled\">\n\t\t\t\t\t\t<label>disabled radio</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\" disabled=\"disabled\">\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t\n\t\t\t<h5 class=\"mui-content-padded\">图标右对齐</h5>\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label>radio</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label>radio</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\" checked>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio mui-disabled\">\n\t\t\t\t\t\t<label>disabled radio</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\" disabled=\"disabled\">\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">列表模式的单选框</h5>\n\t\t\t<ul class=\"mui-table-view mui-table-view-radio\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\tItem 1\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell mui-selected\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\tItem 2\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\tItem 3\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p id=\"info\"></p>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\tvar info = document.getElementById(\"info\");\n\t\tdocument.querySelector('.mui-table-view.mui-table-view-radio').addEventListener('selected',function(e){\n\t\t\tinfo.innerHTML = \"当前选中的为：\"+e.detail.el.innerText;\n\t\t});\n\t\t\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/range.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t\t\n\t\t\t h5{\n\t\t        padding-top: 15px;\n\t\t    }\n\t\t\n\t\t    .field-contain label{\n\t\t        width: auto;\n\t\t        padding-right: 0;\n\t\t    }\n\t\t\n\t\t    .field-contain input[type='text']{\n\t\t        width: 40px;\n\t\t        height: 30px;\n\t\t        padding: 5px 0;\n\t\t        float: none;\n\t\t        text-align: center;\n\t\t    }\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">滑块（range）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t    <div class=\"mui-content-padded\">  \n\t\t        <h5 style='margin-top:35px;'>label+输入框+滑块：</h5> \n\t\t        <div class=\"mui-input-row mui-input-range field-contain\">\n\t\t            <div style=\"float:left\">\n\t\t                <label >滑块：</label>\n\t\t                <input type=\"text\" id='field-range-input' value='60'>\n\t\t            </div>\n\t\t            <div style=\"margin-left:121px;\">\n\t\t                <input type=\"range\" id='field-range' value=\"60\" min=\"0\" max=\"100\" />\n\t\t            </div>\n\t\t        </div>   \n\t\t        <h5>label+滑块：<span id='inline-range-val'>20</span></h5> \n\t\t        <div class=\"mui-input-row mui-input-range\">\n\t\t            <label>滑块：</label>\n\t\t            <input type=\"range\" id='inline-range' value=\"20\" min=\"0\" max=\"100\" >\n\t\t        </div>\n\t\t\n\t\t        <h5 style=\"clear: left;\">整行滑块：<span id='block-range-val'>50</span></h5>   \n\t\t        <div class=\"mui-input-row mui-input-range\">\n\t\t            <input type=\"range\" id='block-range' value=\"50\" min=\"0\" max=\"100\" >\n\t\t        </div>\n\t\t    </div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t    //监听input事件，获取range的value值，也可以直接element.value获取该range的值\n\t    var rangeList = document.querySelectorAll('input[type=\"range\"]');\n\t    for(var i=0,len=rangeList.length;i<len;i++){\n\t        rangeList[i].addEventListener('input',function(){\n\t            if(this.id.indexOf('field')>=0){\n\t                document.getElementById(this.id+'-input').value = this.value;\n\t            }else{\n\t                document.getElementById(this.id+'-val').innerHTML = this.value;\n\t            }\n\t            \n\t\n\t        });\n\t    }\n\t\n\t    document.getElementById('field-range-input').addEventListener('input',function(){\n\t        document.getElementById('field-range').value = this.value;\n\t    });\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/setting.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.mui-views,\n\t\t\t.mui-view,\n\t\t\t.mui-pages,\n\t\t\t.mui-page,\n\t\t\t.mui-page-content {\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\ttop: 0;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.mui-pages {\n\t\t\t\ttop: 46px;\n\t\t\t\theight: auto;\n\t\t\t}\n\t\t\t.mui-scroll-wrapper,\n\t\t\t.mui-scroll {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.mui-page.mui-transitioning {\n\t\t\t\t-webkit-transition: -webkit-transform 300ms ease;\n\t\t\t\ttransition: transform 300ms ease;\n\t\t\t}\n\t\t\t.mui-page-left {\n\t\t\t\t-webkit-transform: translate3d(0, 0, 0);\n\t\t\t\ttransform: translate3d(0, 0, 0);\n\t\t\t}\n\t\t\t.mui-ios .mui-page-left {\n\t\t\t\t-webkit-transform: translate3d(-20%, 0, 0);\n\t\t\t\ttransform: translate3d(-20%, 0, 0);\n\t\t\t}\n\t\t\t.mui-navbar {\n\t\t\t\tposition: fixed;\n\t\t\t\tright: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 10;\n\t\t\t\theight: 44px;\n\t\t\t\tbackground-color: #f7f7f8;\n\t\t\t}\n\t\t\t.mui-navbar .mui-bar {\n\t\t\t\tposition: absolute;\n\t\t\t\tbackground: transparent;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t.mui-android .mui-navbar-inner.mui-navbar-left {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t.mui-ios .mui-navbar-left .mui-left,\n\t\t\t.mui-ios .mui-navbar-left .mui-center,\n\t\t\t.mui-ios .mui-navbar-left .mui-right {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t.mui-navbar .mui-btn-nav {\n\t\t\t\t-webkit-transition: none;\n\t\t\t\ttransition: none;\n\t\t\t\t-webkit-transition-duration: .0s;\n\t\t\t\ttransition-duration: .0s;\n\t\t\t}\n\t\t\t.mui-navbar .mui-bar .mui-title {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t\t.mui-page-shadow {\n\t\t\t\tposition: absolute;\n\t\t\t\tright: 100%;\n\t\t\t\ttop: 0;\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 100%;\n\t\t\t\tz-index: -1;\n\t\t\t\tcontent: '';\n\t\t\t}\n\t\t\t.mui-page-shadow {\n\t\t\t\tbackground: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 10%, rgba(0, 0, 0, .01) 50%, rgba(0, 0, 0, .2) 100%);\n\t\t\t\tbackground: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 10%, rgba(0, 0, 0, .01) 50%, rgba(0, 0, 0, .2) 100%);\n\t\t\t}\n\t\t\t.mui-navbar-inner.mui-transitioning,\n\t\t\t.mui-navbar-inner .mui-transitioning {\n\t\t\t\t-webkit-transition: opacity 300ms ease, -webkit-transform 300ms ease;\n\t\t\t\ttransition: opacity 300ms ease, transform 300ms ease;\n\t\t\t}\n\t\t\t.mui-page {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.mui-pages .mui-page {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t\t.mui-page .mui-table-view:first-child {\n\t\t\t\tmargin-top: 15px;\n\t\t\t}\n\t\t\t.mui-page .mui-table-view:last-child {\n\t\t\t\tmargin-bottom: 30px;\n\t\t\t}\n\t\t\t.mui-table-view {\n\t\t\t\tmargin-top: 20px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-table-view span.mui-pull-right {\n\t\t\t\tcolor: #999;\n\t\t\t}\n\t\t\t.mui-table-view-divider {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\t\t\t.mui-table-view-divider:before,\n\t\t\t.mui-table-view-divider:after {\n\t\t\t\theight: 0;\n\t\t\t}\n\t\t\t.head {\n\t\t\t\theight: 40px;\n\t\t\t}\n\t\t\t#head {\n\t\t\t\tline-height: 40px;\n\t\t\t}\n\t\t\t.head-img {\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t}\n\t\t\t#head-img1 {\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 10px;\n\t\t\t\tright: 40px;\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t}\n\t\t\t.update {\n\t\t\t\tfont-style: normal;\n\t\t\t\tcolor: #999999;\n\t\t\t\tmargin-right: -25px;\n\t\t\t\tfont-size: 15px\n\t\t\t}\n\t\t\t.mui-fullscreen {\n\t\t\t\tposition: fixed;\n\t\t\t\tz-index: 20;\n\t\t\t\tbackground-color: #000;\n\t\t\t}\n\t\t\t.mui-ios .mui-navbar .mui-bar .mui-title {\n\t\t\t\tposition: static;\n\t\t\t}\n\t\t\t/*问题反馈在setting页面单独的css*/\n\t\t\t#feedback .mui-popover{\n\t\t\t\tposition: fixed;\n\t\t\t}\n\t\t\t#feedback .mui-table-view:last-child {\n\t\t\t    margin-bottom: 0px;\n\t\t\t}\n\t\t\t#feedback .mui-table-view:first-child {\n\t\t\t    margin-top: 0px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-plus.mui-plus-stream .mui-stream-hidden{\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\t\t\t\n\t\t\t/*问题反馈在setting页面单独的css==end*/\n\t\t\t\n\t\t</style>\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/feedback.css\" />\n\t</head>\n\n\t<body class=\"mui-fullscreen\">\n\t\t<!--页面主结构开始-->\n\t\t<div id=\"app\" class=\"mui-views\">\n\t\t\t<div class=\"mui-view\">\n\t\t\t\t<div class=\"mui-navbar\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-pages\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!--页面主结构结束-->\n\t\t<!--单页面开始-->\n\t\t<div id=\"setting\" class=\"mui-page\">\n\t\t\t<!--页面标题栏开始-->\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">设置</h1>\n\t\t\t</div>\n\t\t\t<!--页面标题栏结束-->\n\t\t\t<!--页面主内容区开始-->\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-media\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#account\">\n\t\t\t\t\t\t\t\t\t<img class=\"mui-media-object mui-pull-left head-img\" id=\"head-img\" src=\"\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-media-body\">\n\t\t\t\t\t\t\t\t\t\tHello MUI\n\t\t\t\t\t\t\t\t\t\t<p class='mui-ellipsis'>账号:hellomui</p>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a href=\"#account\" class=\"mui-navigate-right\">账号与安全</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a href=\"#notifications\" class=\"mui-navigate-right\">新消息通知</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a href=\"#privacy\" class=\"mui-navigate-right\">隐私</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a href=\"#general\" class=\"mui-navigate-right\">通用</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a href=\"#about\" class=\"mui-navigate-right\">关于MUI <i class=\"mui-pull-right update\">V3.1.0</i></a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\" style=\"text-align: center;\">\n\t\t\t\t\t\t\t\t<a>退出登录</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<!--页面主内容区结束-->\n\t\t</div>\n\t\t<!--单页面结束-->\n\t\t<div id=\"account\" class=\"mui-page\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>设置\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">账号与安全</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a id=\"head\" class=\"mui-navigate-right\">头像\n\t\t\t\t\t\t\t\t<span class=\"mui-pull-right head\">\n\t\t\t\t\t\t\t\t\t<img class=\"head-img mui-action-preview\" id=\"head-img1\" src=\"\"/>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a>姓名<span class=\"mui-pull-right\">Hbuilder</span></a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a>HBuilder账号<span class=\"mui-pull-right\">hbuilder@dcloud.io</span></a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a>QQ号<span class=\"mui-pull-right\">88888888</span></a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a>手机号<span class=\"mui-pull-right\">18601234567</span></a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a>邮箱地址<span class=\"mui-pull-right\">hbuilder@dcloud.io</span></a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"notifications\" class=\"mui-page\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>设置\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">新消息通知</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a>接收新消息通知<span class=\"mui-pull-right\">已开启</span></a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t通知显示消息详情\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-active mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t\t\t\t<p>若关闭，当收到新消息时，通知提示将不显示发信人和内容摘要</p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a href=\"#notifications_disturb\" class=\"mui-navigate-right\">功能消息免打扰</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t\t\t\t<p>设置系统功能消息提示声音和震动的时段</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a>接收新消息通知<span class=\"mui-pull-right\">已开启</span></a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t声音\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-active mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t震动\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-active mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t\t\t\t<p>当HelloMUI在运行时，你可以设置是否需要声音或者震动</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"notifications_disturb\" class=\"mui-page\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>新消息通知\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">功能消息免打扰</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-radio\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">开启</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">只在夜间开启</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">关闭</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"privacy\" class=\"mui-page\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>设置\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">隐私</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-divider\">通讯录</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t加我为朋友时需要验证\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-active mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t向我推荐QQ好友\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t通过QQ号搜索到我\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t可通过手机号搜索到我\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-active mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t向我推荐通讯录朋友\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-divider\">开启后，为你推荐已经开通HBuilder的手机联系人</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t通过HBuilder账号搜索到我\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-active mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-divider\">关闭后，其他用户将不能通过HBuilder号搜索到你</li>\n\t\t\t\t\t\t</ul>\n\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"general\" class=\"mui-page\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>设置\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">通用</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t多语言\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t听筒模式\n\t\t\t\t\t\t\t\t<div class=\"mui-switch mui-switch-mini\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t功能\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"about\" class=\"mui-page\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>设置\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">关于MUI</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible mui-stream-hidden\">\n\t\t\t\t\t\t\t\t<a id=\"rate\" class=\"mui-navigate-right\">评分鼓励</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\n\t\t\t\t\t\t\t\t<a id=\"welcome\" class=\"mui-navigate-right\">欢迎页</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\n\t\t\t\t\t\t\t\t<a id=\"share\" class=\"mui-navigate-right\">分享推荐</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a id=\"tel\" class=\"mui-navigate-right\">客服电话</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a id=\"feedback-btn\" href=\"#feedback\" class=\"mui-navigate-right\">问题反馈</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li id=\"check_update\" class=\"mui-table-view-cell mui-plus-visible\">\n\t\t\t\t\t\t\t\t<a id=\"update\" class=\"mui-navigate-right\">检查更新</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"feedback\" class=\"mui-page feedback\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>关于MUI\n\t\t\t\t</button>\n\t\t\t\t<button id=\"submit\" class=\"mui-btn mui-btn-blue mui-btn-link mui-pull-right\">发送</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">问题反馈</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t\t<div class=\"mui-inline\">问题和意见</div>\n\t\t\t\t\t<a class=\"mui-pull-right mui-inline\" href=\"#popover\">\n\t\t\t\t\t\t快捷输入\n\t\t\t\t\t\t<span class=\"mui-icon mui-icon-arrowdown\"></span>\n\t\t\t\t\t</a>\n\t\t\t\t\t<!--快捷输入具体内容，开发者可自己替换常用语-->\n\t\t\t\t\t<div id=\"popover\" class=\"mui-popover\">\n\t\t\t\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t\t<!--仅流应用环境下显示-->\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell stream\">\n\t\t\t\t\t\t\t\t\t\t<a href=\"#\">桌面快捷方式创建失败</a>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">界面显示错乱</a></li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">启动缓慢，卡出翔了</a></li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">偶发性崩溃</a></li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">UI无法直视，丑哭了</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"row mui-input-row\">\n\t\t\t\t\t<textarea id='question' class=\"mui-input-clear question\" placeholder=\"请详细描述你的问题和意见...\"></textarea>\n\t\t\t\t</div>\n\t\t\t\t<p>图片(选填,提供问题截图,总大小10M以下)</p>\n\t\t\t\t<div id='image-list' class=\"row image-list\"></div>\n\t\t\t\t<p>QQ/邮箱</p>\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<input id='contact' type=\"text\" class=\"mui-input-clear contact\" placeholder=\"(选填,方便我们联系你 )\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t\t<div class=\"mui-inline\">应用评分</div>\n\t\t\t\t\t<div class=\"icons mui-inline\" style=\"margin-left: 6px;\">\n\t\t\t\t\t\t<i data-index=\"1\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t\t<i data-index=\"2\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t\t<i data-index=\"3\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t\t<i data-index=\"4\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t\t<i data-index=\"5\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t</div>\n\t\t\t\t</div><br />\n\t\t\t</div>\n\t\t</div>\n\n\t</body>\n\t<script src=\"../js/mui.min.js \"></script>\n\t<script src=\"../js/mui.view.js \"></script>\n\t<script src='../js/feedback.js'></script>\n\t<script>\n\t\tmui.init();\n\t\t//初始化单页view\n\t\tvar viewApi = mui('#app').view({\n\t\t\tdefaultPage: '#setting'\n\t\t});\n\t\t//初始化单页的区域滚动\n\t\tmui('.mui-scroll-wrapper').scroll();\n\t\t//分享操作\n\t\tvar shares = {};\n\t\t\n\t\tmui.plusReady(function() {\n\t\t\tplus.share.getServices(function(s) {\n\t\t\t\tif (s && s.length > 0) {\n\t\t\t\t\tfor (var i = 0; i < s.length; i++) {\n\t\t\t\t\t\tvar t = s[i];\n\t\t\t\t\t\tshares[t.id] = t;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, function() {\n\t\t\t\tconsole.log(\"获取分享服务列表失败\");\n\t\t\t});\n\t\t});\n\t\t\n\t\tsetTimeout(function () {\n\t\t\tdefaultImg();\n\t\t\tsetTimeout(function() {\n\t\t\t\tinitImgPreview();\n\t\t\t}, 300);\n\t\t},500);\n\t\t\n\t\t//分享链接点击事件\n\t\tdocument.getElementById(\"share\").addEventListener('tap', function() {\n\t\t\tvar ids = [{\n\t\t\t\t\tid: \"weixin\",\n\t\t\t\t\tex: \"WXSceneSession\"\n\t\t\t\t}, {\n\t\t\t\t\tid: \"weixin\",\n\t\t\t\t\tex: \"WXSceneTimeline\"\n\t\t\t\t}, {\n\t\t\t\t\tid: \"sinaweibo\"\n\t\t\t\t}, {\n\t\t\t\t\tid: \"tencentweibo\"\n\t\t\t\t}, {\n\t\t\t\t\tid: \"qq\"\n\t\t\t\t}],\n\t\t\t\tbts = [{\n\t\t\t\t\ttitle: \"发送给微信好友\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"分享到微信朋友圈\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"分享到新浪微博\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"分享到腾讯微博\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"分享到QQ\"\n\t\t\t\t}];\n\t\t\tplus.nativeUI.actionSheet({\n\t\t\t\tcancel: \"取消\",\n\t\t\t\tbuttons: bts\n\t\t\t}, function(e) {\n\t\t\t\tvar i = e.index;\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tvar s_id = ids[i - 1].id;\n\t\t\t\t\tvar share = shares[s_id];\n\t\t\t\t\tif (share) {\n\t\t\t\t\t\tif (share.authenticated) {\n\t\t\t\t\t\t\tshareMessage(share, ids[i - 1].ex);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tshare.authorize(function() {\n\t\t\t\t\t\t\t\tshareMessage(share, ids[i - 1].ex);\n\t\t\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\t\t\tconsole.log(\"认证授权失败：\" + e.code + \" - \" + e.message);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmui.toast(\"无法获取分享服务，请检查manifest.json中分享插件参数配置，并重新打包\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tfunction shareMessage(share, ex) {\n\t\t\tvar msg = {\n\t\t\t\textra: {\n\t\t\t\t\tscene: ex\n\t\t\t\t}\n\t\t\t};\n\t\t\tmsg.href = \"http://www.dcloud.io/hellomui/\";\n\t\t\tmsg.title = \"最接近原生APP体验的高性能前端框架\";\n\t\t\tmsg.content = \"我正在体验HelloMUI，果然很流畅，基本看不出和原生App的差距\";\n\t\t\tif (~share.id.indexOf('weibo')) {\n\t\t\t\tmsg.content += \"；体验地址：http://www.dcloud.io/hellomui/\";\n\t\t\t}\n\t\t\tmsg.thumbs = [\"_www/images/logo.png\"];\n\t\t\tshare.send(msg, function() {\n\t\t\t\tconsole.log(\"分享到\\\"\" + share.description + \"\\\"成功！ \");\n\t\t\t}, function(e) {\n\t\t\t\tconsole.log(\"分享到\\\"\" + share.description + \"\\\"失败: \" + e.code + \" - \" + e.message);\n\t\t\t});\n\t\t}\n\t\t//去评分\n\t\tdocument.getElementById(\"rate\").addEventListener('tap', function() {\n\t\t\tif (mui.os.ios) {\n\t\t\t\tlocation.href = 'https://itunes.apple.com/cn/app/hello-mui/id907931805?l=en&mt=8';\n\t\t\t} else if (mui.os.android) {\n\t\t\t\tplus.runtime.openURL(\"market://details?id=io.dcloud.HelloMUI\", function(e) {\n\t\t\t\t\tplus.runtime.openURL(\"market://details?id=io.dcloud.HelloMUI\", function(e) {\n\t\t\t\t\t\tmui.alert(\"360手机助手和应用宝，你一个都没装，暂时无法评分，感谢支持\");\n\t\t\t\t\t}, \"com.qihoo.appstore\");\n\t\t\t\t}, \"com.tencent.android.qqdownloader\");\n\t\t\t}\n\t\t});\n\t\t//客服电话\n\t\tdocument.getElementById(\"tel\").addEventListener('tap', function() {\n\t\t\tif(mui.os.plus){\n\t\t\t\tplus.device.dial(\"114\");\n\t\t\t}else{\n\t\t\t\tlocation.href = 'tel:114';\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t//检查更新\n\t\tdocument.getElementById(\"update\").addEventListener('tap', function() {\n\t\t\tvar server = \"http://www.dcloud.io/check/update\"; //获取升级描述文件服务器地址\n\t\t\tmui.getJSON(server, {\n\t\t\t\t\"appid\": plus.runtime.appid,\n\t\t\t\t\"version\": plus.runtime.version,\n\t\t\t\t\"imei\": plus.device.imei\n\t\t\t}, function(data) {\n\t\t\t\tif (data.status) {\n\t\t\t\t\tplus.ui.confirm(data.note, function(i) {\n\t\t\t\t\t\tif (0 == i) {\n\t\t\t\t\t\t\tplus.runtime.openURL(data.url);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, data.title, [\"立即更新\", \"取　　消\"]);\n\t\t\t\t} else {\n\t\t\t\t\tmui.toast('Hello MUI 已是最新版本~')\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tvar view = viewApi.view;\n\t\t(function($) {\n\t\t\t//处理view的后退与webview后退\n\t\t\tvar oldBack = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tif (viewApi.canBack()) { //如果view可以后退，则执行view的后退\n\t\t\t\t\tviewApi.back();\n\t\t\t\t} else { //执行webview后退\n\t\t\t\t\toldBack();\n\t\t\t\t}\n\t\t\t};\n\t\t\t//监听页面切换事件方案1,通过view元素监听所有页面切换事件，目前提供pageBeforeShow|pageShow|pageBeforeBack|pageBack四种事件(before事件为动画开始前触发)\n\t\t\t//第一个参数为事件名称，第二个参数为事件回调，其中e.detail.page为当前页面的html对象\n\t\t\tview.addEventListener('pageBeforeShow', function(e) {\n\t\t\t\t//\t\t\t\tconsole.log(e.detail.page.id + ' beforeShow');\n\t\t\t});\n\t\t\tview.addEventListener('pageShow', function(e) {\n\t\t\t\t//\t\t\t\tconsole.log(e.detail.page.id + ' show');\n\t\t\t});\n\t\t\tview.addEventListener('pageBeforeBack', function(e) {\n\t\t\t\t//\t\t\t\tconsole.log(e.detail.page.id + ' beforeBack');\n\t\t\t});\n\t\t\tview.addEventListener('pageBack', function(e) {\n\t\t\t\t//\t\t\t\tconsole.log(e.detail.page.id + ' back');\n\t\t\t});\n\t\t})(mui);\n\t\t//更换头像\n\t\tmui(\".mui-table-view-cell\").on(\"tap\", \"#head\", function(e) {\n\t\t\tif(mui.os.plus){\n\t\t\t\tvar a = [{\n\t\t\t\t\ttitle: \"拍照\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"从手机相册选择\"\n\t\t\t\t}];\n\t\t\t\tplus.nativeUI.actionSheet({\n\t\t\t\t\ttitle: \"修改头像\",\n\t\t\t\t\tcancel: \"取消\",\n\t\t\t\t\tbuttons: a\n\t\t\t\t}, function(b) {\n\t\t\t\t\tswitch (b.index) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\tgetImage();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\tgalleryImg();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t})\t\n\t\t\t}\n\t\t\t\n\t\t});\n\n\t\tfunction getImage() {\n\t\t\tvar c = plus.camera.getCamera();\n\t\t\tc.captureImage(function(e) {\n\t\t\t\tplus.io.resolveLocalFileSystemURL(e, function(entry) {\n\t\t\t\t\tvar s = entry.toLocalURL() + \"?version=\" + new Date().getTime();\n\t\t\t\t\tconsole.log(s);\n\t\t\t\t\tdocument.getElementById(\"head-img\").src = s;\n\t\t\t\t\tdocument.getElementById(\"head-img1\").src = s;\n\t\t\t\t\t//变更大图预览的src\n\t\t\t\t\t//目前仅有一张图片，暂时如此处理，后续需要通过标准组件实现\n\t\t\t\t\tdocument.querySelector(\"#__mui-imageview__group .mui-slider-item img\").src = s + \"?version=\" + new Date().getTime();;;\n\t\t\t\t}, function(e) {\n\t\t\t\t\tconsole.log(\"读取拍照文件错误：\" + e.message);\n\t\t\t\t});\n\t\t\t}, function(s) {\n\t\t\t\tconsole.log(\"error\" + s);\n\t\t\t}, {\n\t\t\t\tfilename: \"_doc/head.jpg\"\n\t\t\t})\n\t\t}\n\n\t\tfunction galleryImg() {\n\t\t\tplus.gallery.pick(function(a) {\n\t\t\t\tplus.io.resolveLocalFileSystemURL(a, function(entry) {\n\t\t\t\t\tplus.io.resolveLocalFileSystemURL(\"_doc/\", function(root) {\n\t\t\t\t\t\troot.getFile(\"head.jpg\", {}, function(file) {\n\t\t\t\t\t\t\t//文件已存在\n\t\t\t\t\t\t\tfile.remove(function() {\n\t\t\t\t\t\t\t\tconsole.log(\"file remove success\");\n\t\t\t\t\t\t\t\tentry.copyTo(root, 'head.jpg', function(e) {\n\t\t\t\t\t\t\t\t\t\tvar e = e.fullPath + \"?version=\" + new Date().getTime();\n\t\t\t\t\t\t\t\t\t\tdocument.getElementById(\"head-img\").src = e;\n\t\t\t\t\t\t\t\t\t\tdocument.getElementById(\"head-img1\").src = e;\n\t\t\t\t\t\t\t\t\t\t//变更大图预览的src\n\t\t\t\t\t\t\t\t\t\t//目前仅有一张图片，暂时如此处理，后续需要通过标准组件实现\n\t\t\t\t\t\t\t\t\t\tdocument.querySelector(\"#__mui-imageview__group .mui-slider-item img\").src = e + \"?version=\" + new Date().getTime();;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfunction(e) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('copy image fail:' + e.message);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, function() {\n\t\t\t\t\t\t\t\tconsole.log(\"delete image fail:\" + e.message);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, function() {\n\t\t\t\t\t\t\t//文件不存在\n\t\t\t\t\t\t\tentry.copyTo(root, 'head.jpg', function(e) {\n\t\t\t\t\t\t\t\t\tvar path = e.fullPath + \"?version=\" + new Date().getTime();\n\t\t\t\t\t\t\t\t\tdocument.getElementById(\"head-img\").src = path;\n\t\t\t\t\t\t\t\t\tdocument.getElementById(\"head-img1\").src = path;\n\t\t\t\t\t\t\t\t\t//变更大图预览的src\n\t\t\t\t\t\t\t\t\t//目前仅有一张图片，暂时如此处理，后续需要通过标准组件实现\n\t\t\t\t\t\t\t\t\tdocument.querySelector(\"#__mui-imageview__group .mui-slider-item img\").src = path;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfunction(e) {\n\t\t\t\t\t\t\t\t\tconsole.log('copy image fail:' + e.message);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\tconsole.log(\"get _www folder fail\");\n\t\t\t\t\t})\n\t\t\t\t}, function(e) {\n\t\t\t\t\tconsole.log(\"读取拍照文件错误：\" + e.message);\n\t\t\t\t});\n\t\t\t}, function(a) {}, {\n\t\t\t\tfilter: \"image\"\n\t\t\t})\n\t\t};\n\n\t\tfunction defaultImg() {\n\t\t\tif(mui.os.plus){\n\t\t\t\tplus.io.resolveLocalFileSystemURL(\"_doc/head.jpg\", function(entry) {\n\t\t\t\t\tvar s = entry.fullPath + \"?version=\" + new Date().getTime();;\n\t\t\t\t\tdocument.getElementById(\"head-img\").src = s;\n\t\t\t\t\tdocument.getElementById(\"head-img1\").src = s;\n\t\t\t\t}, function(e) {\n\t\t\t\t\tdocument.getElementById(\"head-img\").src = '../images/logo.png';\n\t\t\t\t\tdocument.getElementById(\"head-img1\").src = '../images/logo.png';\n\t\t\t\t})\n\t\t\t}else{\n\t\t\t\tdocument.getElementById(\"head-img\").src = '../images/logo.png';\n\t\t\t\tdocument.getElementById(\"head-img1\").src = '../images/logo.png';\n\t\t\t}\n\t\t\t\n\t\t}\n\t\tdocument.getElementById(\"head-img1\").addEventListener('tap', function(e) {\n\t\t\te.stopPropagation();\n\t\t});\n\t\tdocument.getElementById(\"welcome\").addEventListener('tap', function(e) {\n\t\t\t//显示启动导航\n\t\t\tmui.openWindow({\n\t\t\t\tid: 'guide',\n\t\t\t\turl: 'guide.html',\n\t\t\t\tshow: {\n\t\t\t\t\taniShow: 'fade-in',\n\t\t\t\t\tduration: 300\n\t\t\t\t},\n\t\t\t\twaiting: {\n\t\t\t\t\tautoShow: false\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tfunction initImgPreview() {\n\t\t\tvar imgs = document.querySelectorAll(\"img.mui-action-preview\");\n\t\t\timgs = mui.slice.call(imgs);\n\t\t\tif (imgs && imgs.length > 0) {\n\t\t\t\tvar slider = document.createElement(\"div\");\n\t\t\t\tslider.setAttribute(\"id\", \"__mui-imageview__\");\n\t\t\t\tslider.classList.add(\"mui-slider\");\n\t\t\t\tslider.classList.add(\"mui-fullscreen\");\n\t\t\t\tslider.style.display = \"none\";\n\t\t\t\tslider.addEventListener(\"tap\", function() {\n\t\t\t\t\tslider.style.display = \"none\";\n\t\t\t\t});\n\t\t\t\tslider.addEventListener(\"touchmove\", function(event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t})\n\t\t\t\tvar slider_group = document.createElement(\"div\");\n\t\t\t\tslider_group.setAttribute(\"id\", \"__mui-imageview__group\");\n\t\t\t\tslider_group.classList.add(\"mui-slider-group\");\n\t\t\t\timgs.forEach(function(value, index, array) {\n\t\t\t\t\t//给图片添加点击事件，触发预览显示；\n\t\t\t\t\tvalue.addEventListener('tap', function() {\n\t\t\t\t\t\tslider.style.display = \"block\";\n\t\t\t\t\t\t_slider.refresh();\n\t\t\t\t\t\t_slider.gotoItem(index, 0);\n\t\t\t\t\t})\n\t\t\t\t\tvar item = document.createElement(\"div\");\n\t\t\t\t\titem.classList.add(\"mui-slider-item\");\n\t\t\t\t\tvar a = document.createElement(\"a\");\n\t\t\t\t\tvar img = document.createElement(\"img\");\n\t\t\t\t\timg.setAttribute(\"src\", value.src);\n\t\t\t\t\ta.appendChild(img)\n\t\t\t\t\titem.appendChild(a);\n\t\t\t\t\tslider_group.appendChild(item);\n\t\t\t\t});\n\t\t\t\tslider.appendChild(slider_group);\n\t\t\t\tdocument.body.appendChild(slider);\n\t\t\t\tvar _slider = mui(slider).slider();\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(mui.os.stream){\n\t\t\tdocument.getElementById(\"check_update\").display = \"none\";\n\t\t}\n\t\t\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/slider-default.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">图片轮播</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t<li id=\"switch\" class=\"mui-table-view-cell\">\r\n\t\t\t\t\t定时轮播\r\n\t\t\t\t\t<div class=\"mui-switch\">\r\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\n\t\t</div>\n\t\t<div id=\"slider\" class=\"mui-slider\" >\n\t\t\t<div class=\"mui-slider-group mui-slider-loop\">\n\t\t\t\t<!-- 额外增加的一个节点(循环轮播：第一个节点是最后一张轮播) -->\n\t\t\t\t<div class=\"mui-slider-item mui-slider-item-duplicate\">\n\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t<img src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<!-- 第一张 -->\n\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t<img src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<!-- 第二张 -->\n\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t<img src=\"../images/muwu.jpg\">\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<!-- 第三张 -->\n\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t<img src=\"../images/cbd.jpg\">\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<!-- 第四张 -->\n\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t<img src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<!-- 额外增加的一个节点(循环轮播：最后一个节点是第一张轮播) -->\n\t\t\t\t<div class=\"mui-slider-item mui-slider-item-duplicate\">\n\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t<img src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"mui-slider-indicator\">\n\t\t\t\t<div class=\"mui-indicator mui-active\"></div>\n\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar slider = mui(\"#slider\");\r\n\t\t\tdocument.getElementById(\"switch\").addEventListener('toggle', function(e) {\r\n\t\t\t\tif (e.detail.isActive) {\r\n\t\t\t\t\tslider.slider({\r\n\t\t\t\t\t\tinterval: 5000\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tslider.slider({\r\n\t\t\t\t\t\tinterval: 0\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/slider-native.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style type=\"text/css\">\n\t\t\tp {\n\t\t\t\ttext-indent: 22px;\n\t\t\t}\n\t\t\t.mui-content{\n\t\t\t\tpadding-top: 215px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>\n\t\t\t\t\t这是通过webview的subNViews属性配置的原生图片轮播示例，目前支持自动轮播、循环播放、点击预览、双指放大功能；\n\t\t\t\t\t将ImageSliderStyles的position属性值设置为\"static\"后，轮播控件在页面中正常定位，如果页面存在滚动条，轮播控件随窗口内容一起滚动。\n\t\t\t\t</p>\n\t\t\t\t<p>原生版本的图片轮播，适合类似商品详情的场景，用户需要点击图片放大预览，而不是点击跳转新页面。</p>\n\t\t\t\t<p style=\"margin-top: 100px;margin-bottom: 300px;\">这是为了演示页面滚动，而增加的额外文字段落。</p>\n\t\t\t</div>\n\t\t</div>\n\t\t\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tmui.init();\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/slider-table-default.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t\th5{\n\t\t        padding-top: 8px;\n\t\t        padding-bottom: 8px;\n\t\t        text-indent: 12px;\n\t\t    }\n\t\t    \n\t\t\t.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-body{\n\t\t\t\tfont-size: 15px;\n\t\t\t\tmargin-top:8px;\n\t\t\t\tcolor: #333;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">图文表格</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\" style=\"background-color:#fff\">\n\t\t    <h5 style=\"background-color:#efeff4\">慢生活</h5>\n\t\t    <ul class=\"mui-table-view mui-grid-view\">\n\t\t        <li class=\"mui-table-view-cell mui-media mui-col-xs-6\">\n\t\t            <a href=\"#\">\n\t\t                <img class=\"mui-media-object\" src=\"../images/shuijiao.jpg\">\n\t\t                <div class=\"mui-media-body\">幸福就是可以一起睡觉</div></a></li>\n\t\t        <li class=\"mui-table-view-cell mui-media mui-col-xs-6\">\n\t\t            <a href=\"#\">\n\t\t                <img class=\"mui-media-object\" src=\"../images/muwu.jpg\">\n\t\t                <div class=\"mui-media-body\">想要一间这样的木屋，静静的喝咖啡</div></a></li>\n\t\t        <li class=\"mui-table-view-cell mui-media mui-col-xs-6\">\n\t\t            <a href=\"#\"><img class=\"mui-media-object\" src=\"../images/cbd.jpg\">\n\t\t                <div class=\"mui-media-body\">Color of SIP CBD</div></a></li>\n\t\t        <li class=\"mui-table-view-cell mui-media mui-col-xs-6\">\n\t\t            <a href=\"#\">\n\t\t                <img class=\"mui-media-object\" src=\"../images/yuantiao.jpg\">\n\t\t                <div class=\"mui-media-body\">静静看这世界</div></a></li>\n\t\t    </ul>    \n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/slider-table-pagination.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">左右滑动分页</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t    <div class=\"mui-slider\">\n\t\t        <div class=\"mui-slider-group mui-slider-loop\">\n\t\t        \t<!-- 额外增加的一个节点(循环轮播：第一个节点是最后一个图文表格) -->\n\t\t            <div class=\"mui-slider-item mui-slider-item-duplicate\">\n\t\t                <ul class=\"mui-table-view mui-grid-view\">\n\t\t                    <li class=\"mui-table-view-cell mui-media mui-col-xs-6\"><a href=\"#\"><img class=\"mui-media-object\" src=\"../images/cbd.jpg\">\n\t\t                            <div class=\"mui-media-body\">Color of SIP CBD</div></a></li>\n\t\t                    <li class=\"mui-table-view-cell mui-media mui-col-xs-6\"><a href=\"#\"><img class=\"mui-media-object\" src=\"../images/yuantiao.jpg\">\n\t\t                            <div class=\"mui-media-body\">静静看这世界</div></a></li>\n\t\t                </ul>\n\t\t            </div>\n\t\t            <div class=\"mui-slider-item\">\n\t\t                <ul class=\"mui-table-view mui-grid-view\">\n\t\t                    <li class=\"mui-table-view-cell mui-media mui-col-xs-6\"><a href=\"#\"><img class=\"mui-media-object\" src=\"../images/shuijiao.jpg\">\n\t\t                            <div class=\"mui-media-body\">幸福就是可以一起睡觉</div></a></li>\n\t\t                    <li class=\"mui-table-view-cell mui-media mui-col-xs-6\"><a href=\"#\"><img class=\"mui-media-object\" src=\"../images/muwu.jpg\">\n\t\t                            <div class=\"mui-media-body\">想要一间这样的木屋，静静的喝咖啡</div></a></li>\n\t\t                </ul>\n\t\t            </div>\n\t\t            <div class=\"mui-slider-item\">\n\t\t                <ul class=\"mui-table-view mui-grid-view\">\n\t\t                    <li class=\"mui-table-view-cell mui-media mui-col-xs-6\"><a href=\"#\"><img class=\"mui-media-object\" src=\"../images/cbd.jpg\">\n\t\t                            <div class=\"mui-media-body\">Color of SIP CBD</div></a></li>\n\t\t                    <li class=\"mui-table-view-cell mui-media mui-col-xs-6\"><a href=\"#\"><img class=\"mui-media-object\" src=\"../images/yuantiao.jpg\">\n\t\t                            <div class=\"mui-media-body\">静静看这世界</div></a></li>\n\t\t                </ul>\n\t\t            </div>\n\t\t            <!-- 额外增加的一个节点(循环轮播：最后一个节点是第一个图文表格) -->\n\t\t            <div class=\"mui-slider-item mui-slider-item-duplicate\">\n\t\t                <ul class=\"mui-table-view mui-grid-view\">\n\t\t                    <li class=\"mui-table-view-cell mui-media mui-col-xs-6\"><a href=\"#\"><img class=\"mui-media-object\" src=\"../images/shuijiao.jpg\">\n\t\t                            <div class=\"mui-media-body\">幸福就是可以一起睡觉</div></a></li>\n\t\t                    <li class=\"mui-table-view-cell mui-media mui-col-xs-6\"><a href=\"#\"><img class=\"mui-media-object\" src=\"../images/muwu.jpg\">\n\t\t                            <div class=\"mui-media-body\">想要一间这样的木屋，静静的喝咖啡</div></a></li>\n\t\t                </ul>\n\t\t            </div>\n\t\t        </div>\n\t\t        <div class=\"mui-slider-indicator\" style=\"position: static;background-color: #fff;\">\n\t\t            <span class=\"mui-action mui-action-previous mui-icon mui-icon-back\"></span>\n\t\t            <div class=\"mui-number\">\n\t\t                <span>1</span> / 2\n\t\t            </div>\n\t\t            <span class=\"mui-action mui-action-next mui-icon mui-icon-forward\"></span>\n\t\t        </div>\n\t\t    </div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t    mui.init();\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/slider-with-title.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">下方悬浮标题</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t<li id=\"switch\" class=\"mui-table-view-cell\">\n\t\t\t\t\t定时轮播\n\t\t\t\t\t<div class=\"mui-switch\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<div id=\"slider\" class=\"mui-slider\">\n\t\t\t\t<div class=\"mui-slider-group mui-slider-loop\">\n\t\t\t\t\t<!-- 额外增加的一个节点(循环轮播：第一个节点是最后一张轮播) -->\n\t\t\t\t\t<div class=\"mui-slider-item mui-slider-item-duplicate\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t<img src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t\t\t<p class=\"mui-slider-title\">静静看这世界</p>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t<img src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t\t\t<p class=\"mui-slider-title\">幸福就是可以一起睡觉</p>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t<img src=\"../images/muwu.jpg\">\n\t\t\t\t\t\t\t<p class=\"mui-slider-title\">想要一间这样的木屋，静静的喝咖啡</p>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t<img src=\"../images/cbd.jpg\">\n\t\t\t\t\t\t\t<p class=\"mui-slider-title\">Color of SIP CBD</p>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-item\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t<img src=\"../images/yuantiao.jpg\">\n\t\t\t\t\t\t\t<p class=\"mui-slider-title\">静静看这世界</p>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<!-- 额外增加的一个节点(循环轮播：最后一个节点是第一张轮播) -->\n\t\t\t\t\t<div class=\"mui-slider-item mui-slider-item-duplicate\">\n\t\t\t\t\t\t<a href=\"#\">\n\t\t\t\t\t\t\t<img src=\"../images/shuijiao.jpg\">\n\t\t\t\t\t\t\t<p class=\"mui-slider-title\">幸福就是可以一起睡觉</p>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-slider-indicator mui-text-right\">\n\t\t\t\t\t<div class=\"mui-indicator mui-active\"></div>\n\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t\t<div class=\"mui-indicator\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\tvar slider = mui(\"#slider\");\n\t\tdocument.getElementById(\"switch\").addEventListener('toggle', function(e) {\n\t\t\tif (e.detail.isActive) {\n\t\t\t\tslider.slider({\n\t\t\t\t\tinterval: 5000\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tslider.slider({\n\t\t\t\t\tinterval: 0\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/switches.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t</head>\n\n\t<body>\n\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">开关（switch）</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<div class=\"mui-switch mui-active\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<div class=\"mui-switch\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<div class=\"mui-switch mui-switch-mini mui-active \">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<div class=\"mui-switch mui-switch-mini\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<div class=\"mui-switch mui-switch-blue mui-active\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<div class=\"mui-switch mui-switch-blue\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<div class=\"mui-switch mui-switch-blue mui-switch-mini mui-active\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<div class=\"mui-switch mui-switch-blue mui-switch-mini\">\n\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t\t});\n\t\t\tmui('.mui-content .mui-switch').each(function() { //循环所有toggle\n\t\t\t\t//toggle.classList.contains('mui-active') 可识别该toggle的开关状态\n\t\t\t\tthis.parentNode.querySelector('span').innerText = '状态：' + (this.classList.contains('mui-active') ? 'true' : 'false');\n\t\t\t\t/**\n\t\t\t\t * toggle 事件监听\n\t\t\t\t */\n\t\t\t\tthis.addEventListener('toggle', function(event) {\n\t\t\t\t\t//event.detail.isActive 可直接获取当前状态\n\t\t\t\t\tthis.parentNode.querySelector('span').innerText = '状态：' + (event.detail.isActive ? 'true' : 'false');\n\t\t\t\t});\n\t\t\t});\n\t\t</script>\n\t</body>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-top-subpage-1.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t\n\t\t\t.title {\n\t\t\t\tpadding: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t这是webview模式选项卡中的第1个子页面\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 6</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 7</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 8</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 9</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 10</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 11</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 12</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 13</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 14</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 15</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 16</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 17</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 18</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 19</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">推荐-Item 20</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tkeyEventBind: {\n\t\t\t\t\tbackbutton: false //关闭back按键监听\n\t\t\t\t},\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#pullrefresh',\n\t\t\t\t\tup: {\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tvar count = 0;\n\t\t\t/**\n\t\t\t * 上拉加载具体业务实现\n\t\t\t */\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor(var i = cells.length, len = i + 20; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">推荐-Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\ttable.appendChild(li);\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-top-subpage-2.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t\n\t\t\t.title {\n\t\t\t\tpadding: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t这是webview模式选项卡中的第2个子页面，该页面展示一个支持上拉加载的消息列表\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 6</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 7</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 8</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 9</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 10</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 11</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 12</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 13</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 14</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 15</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 16</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 17</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 18</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 19</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">热点-Item 20</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tkeyEventBind: {\n\t\t\t\t\tbackbutton: false //关闭back按键监听\n\t\t\t\t},\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#pullrefresh',\n\t\t\t\t\tup: {\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tvar count = 0;\n\t\t\t/**\n\t\t\t * 上拉加载具体业务实现\n\t\t\t */\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor(var i = cells.length, len = i + 20; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">热点-Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\ttable.appendChild(li);\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-top-subpage-3.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.title {\n\t\t\t\tpadding: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t这是webview模式选项卡中的第3个子页面\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">北京-Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">北京-Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">北京-Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">北京-Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">北京-Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tkeyEventBind: {\n\t\t\t\t\tbackbutton: false //关闭back按键监听\n\t\t\t\t}\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-top-subpage-4.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.title {\n\t\t\t\tpadding: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t这是webview模式选项卡中的第4个子页面，该页面展示一个支持上拉加载的消息列表\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 6</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 7</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 8</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 9</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 10</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 11</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 12</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 13</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 14</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 15</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 16</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 17</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 18</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 19</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">社会-Item 20</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tkeyEventBind: {\n\t\t\t\t\tbackbutton: false //关闭back按键监听\n\t\t\t\t},\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#pullrefresh',\n\t\t\t\t\tup: {\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tvar count = 0;\n\t\t\t/**\n\t\t\t * 上拉加载具体业务实现\n\t\t\t */\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor (var i = cells.length, len = i + 20; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">社会-Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\ttable.appendChild(li);\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-top-subpage-5.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t\n\t\t\t.title {\n\t\t\t\tpadding: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t这是webview模式选项卡中的第5个子页面，该页面展示一个支持上拉加载的消息列表\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 6</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 7</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 8</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 9</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 10</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 11</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 12</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 13</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 14</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 15</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 16</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 17</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 18</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 19</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">娱乐-Item 20</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tkeyEventBind: {\n\t\t\t\t\tbackbutton: false //关闭back按键监听\n\t\t\t\t},\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#pullrefresh',\n\t\t\t\t\tup: {\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tvar count = 0;\n\t\t\t/**\n\t\t\t * 上拉加载具体业务实现\n\t\t\t */\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor(var i = cells.length, len = i + 20; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">娱乐-Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\ttable.appendChild(li);\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-top-webview-main.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar~.mui-content .mui-fullscreen {\n\t\t\t\ttop: 44px;\n\t\t\t\theight: auto;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-top-tips {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: -20px;\n\t\t\t\tleft: 50%;\n\t\t\t\tmargin-left: -25px;\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-bar~.mui-pull-top-tips {\n\t\t\t\ttop: 24px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-top-wrapper {\n\t\t\t\twidth: 42px;\n\t\t\t\theight: 42px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttext-align: center;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t\tborder: 1px solid #ddd;\n\t\t\t\tborder-radius: 25px;\n\t\t\t\tbackground-clip: padding-box;\n\t\t\t\tbox-shadow: 0 4px 10px #bbb;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-top-tips.mui-transitioning {\n\t\t\t\t-webkit-transition-duration: 200ms;\n\t\t\t\ttransition-duration: 200ms;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-top-tips .mui-pull-loading {\n\t\t\t\t/*-webkit-backface-visibility: hidden;\n\t\t\t\t-webkit-transition-duration: 400ms;\n\t\t\t\ttransition-duration: 400ms;*/\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-top-wrapper .mui-icon,\n\t\t\t.mui-pull-top-wrapper .mui-spinner {\n\t\t\t\tmargin-top: 7px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-top-wrapper .mui-icon.mui-reverse {\n\t\t\t\t/*-webkit-transform: rotate(180deg) translateZ(0);*/\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-bottom-tips {\n\t\t\t\ttext-align: center;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tline-height: 40px;\n\t\t\t\tcolor: #777;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-top-canvas {\n\t\t\t\toverflow: hidden;\n\t\t\t\tbackground-color: #fafafa;\n\t\t\t\tborder-radius: 40px;\n\t\t\t\tbox-shadow: 0 4px 10px #bbb;\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t\tmargin: 0 auto;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-pull-top-canvas canvas {\n\t\t\t\twidth: 40px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-slider-indicator.mui-segmented-control {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">顶部选项卡-可左右拖动(webview)</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div id=\"slider\" class=\"mui-slider mui-fullscreen\">\n\t\t\t\t<div id=\"sliderSegmentedControl\" class=\"mui-scroll-wrapper mui-slider-indicator mui-segmented-control mui-segmented-control-inverted\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<a class=\"mui-control-item mui-active\" href=\"#item1mobile\" data-wid=\"tab-top-subpage-1.html\">\n\t\t\t\t\t\t\t推荐\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item2mobile\" data-wid=\"tab-top-subpage-2.html\">\n\t\t\t\t\t\t\t热点\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item3mobile\" data-wid=\"tab-top-subpage-3.html\">\n\t\t\t\t\t\t\t北京\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item4mobile\" data-wid=\"tab-top-subpage-4.html\">\n\t\t\t\t\t\t\t社会\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item5mobile\" data-wid=\"tab-top-subpage-5.html\">\n\t\t\t\t\t\t\t娱乐\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script src=\"../js/webviewGroup.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\t\t<script>\n\t\t\tmui.init();\n\t\t\t\n\t\t\tmui.plusReady(function() {\n\t\t\t\tvar _self = plus.webview.currentWebview();\n\t\t\t\tvar group = new webviewGroup(_self.id, {\n\t\t\t\t\titems: [{\n\t\t\t\t\t\tid: \"tab-top-subpage-1.html\",\n\t\t\t\t\t\turl: \"tab-top-subpage-1.html\",\n\t\t\t\t\t\textras: {}\n\t\t\t\t\t}, {\n\t\t\t\t\t\tid: \"tab-top-subpage-2.html\",\n\t\t\t\t\t\turl: \"tab-top-subpage-2.html\",\n\t\t\t\t\t\textras: {}\n\t\t\t\t\t}, {\n\t\t\t\t\t\tid: \"tab-top-subpage-3.html\",\n\t\t\t\t\t\turl: \"tab-top-subpage-3.html\",\n\t\t\t\t\t\textras: {}\n\t\t\t\t\t}, {\n\t\t\t\t\t\tid: \"tab-top-subpage-4.html\",\n\t\t\t\t\t\turl: \"tab-top-subpage-4.html\",\n\t\t\t\t\t\textras: {}\n\t\t\t\t\t}, {\n\t\t\t\t\t\tid: \"tab-top-subpage-5.html\",\n\t\t\t\t\t\turl: \"tab-top-subpage-5.html\",\n\t\t\t\t\t\textras: {}\n\t\t\t\t\t}],\n\t\t\t\t\tonChange: function(obj) {\n\t\t\t\t\t\tvar c = document.querySelector(\".mui-control-item.mui-active\");\n\t\t\t\t\t\tif(c) {\n\t\t\t\t\t\t\tc.classList.remove(\"mui-active\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar target = document.querySelector(\".mui-scroll .mui-control-item:nth-child(\" + (parseInt(obj.index) + 1) + \")\");\n\t\t\t\t\t\ttarget.classList.add(\"mui-active\");\n\t\t\t\t\t\tif(target.scrollIntoView) {\n\t\t\t\t\t\t\ttarget.scrollIntoView();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tmui(\".mui-scroll\").on(\"tap\", \".mui-control-item\", function(e) {\n\t\t\t\t\tvar wid = this.getAttribute(\"data-wid\");\n\t\t\t\t\tgroup.switchTab(wid);\n\t\t\t\t});\n\n\t\t\t});\n\t\t\tmui.back = function() {\n\t\t\t\tvar _self = plus.webview.currentWebview();\n\t\t\t\t_self.close(\"auto\");\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>\n"
  },
  {
    "path": "examples/hello-mui/examples/tab-vertical-scroll.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t\t<style>\n\t\t\t.mui-row.mui-fullscreen>[class*=\"mui-col-\"] {\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-col-xs-3,\n\t\t\t.mui-col-xs-9 {\n\t\t\t\toverflow-y: auto;\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-segmented-control .mui-control-item {\n\t\t\t\tline-height: 50px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-control-content {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active {\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">侧面选项卡-div模式</h1>\n\t\t</header>\n\t\t<div class=\"mui-content mui-row mui-fullscreen\">\n\t\t\t<div class=\"mui-col-xs-3\">\n\t\t\t\t<div id=\"segmentedControls\" class=\"mui-segmented-control mui-segmented-control-inverted mui-segmented-control-vertical\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"segmentedControlContents\" class=\"mui-col-xs-9\" style=\"border-left: 1px solid #c8c7cc;\">\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar controls = document.getElementById(\"segmentedControls\");\n\t\t\tvar contents = document.getElementById(\"segmentedControlContents\");\n\t\t\tvar html = [];\n\t\t\tvar i = 1,\n\t\t\t\tj = 1,\n\t\t\t\tm = 16, //左侧选项卡数量+1\n\t\t\t\tn = 21; //每个选项卡列表数量+1\n\t\t\tfor (; i < m; i++) {\n\t\t\t\thtml.push('<a class=\"mui-control-item\" data-index=\"' + (i - 1) + '\" href=\"#content' + i + '\">选项' + i + '</a>');\n\t\t\t}\n\t\t\tcontrols.innerHTML = html.join('');\n\t\t\thtml = [];\n\t\t\tfor (i = 1; i < m; i++) {\n\t\t\t\thtml.push('<div id=\"content' + i + '\" class=\"mui-control-content\"><ul class=\"mui-table-view\">');\n\t\t\t\tfor (j = 1; j < n; j++) {\n\t\t\t\t\thtml.push('<li class=\"mui-table-view-cell\">第' + i + '个选项卡子项-' + j + '</li>');\n\t\t\t\t}\n\t\t\t\thtml.push('</ul></div>');\n\t\t\t}\n\t\t\tcontents.innerHTML = html.join('');\n\t\t\t//默认选中第一个\n\t\t\tcontrols.querySelector('.mui-control-item').classList.add('mui-active');\n//\t\t\tcontents.querySelector('.mui-control-content').classList.add('mui-active');\n\t\t\t(function() {\n\t\t\t\tvar controlsElem = document.getElementById(\"segmentedControls\");\n\t\t\t\tvar contentsElem = document.getElementById(\"segmentedControlContents\");\n\t\t\t\tvar controlListElem = controlsElem.querySelectorAll('.mui-control-item');\n\t\t\t\tvar contentListElem = contentsElem.querySelectorAll('.mui-control-content');\n\t\t\t\tvar controlWrapperElem = controlsElem.parentNode;\n\t\t\t\tvar controlWrapperHeight = controlWrapperElem.offsetHeight;\n\t\t\t\tvar controlMaxScroll = controlWrapperElem.scrollHeight - controlWrapperHeight;//左侧类别最大可滚动高度\n\t\t\t\tvar maxScroll = contentsElem.scrollHeight - contentsElem.offsetHeight;//右侧内容最大可滚动高度\n\t\t\t\tvar controlHeight = controlListElem[0].offsetHeight;//左侧类别每一项的高度\n\t\t\t\tvar controlTops = []; //存储control的scrollTop值\n\t\t\t\tvar contentTops = [0]; //存储content的scrollTop值\n\t\t\t\tvar length = contentListElem.length;\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tcontrolTops.push(controlListElem[i].offsetTop + controlHeight);\n\t\t\t\t}\n\t\t\t\tfor (var i = 1; i < length; i++) {\n\t\t\t\t\tvar offsetTop = contentListElem[i].offsetTop;\n\t\t\t\t\tif (offsetTop + 100 >= maxScroll) {\n\t\t\t\t\t\tvar height = Math.max(offsetTop + 100 - maxScroll, 100);\n\t\t\t\t\t\tvar totalHeight = 0;\n\t\t\t\t\t\tvar heights = [];\n\t\t\t\t\t\tfor (var j = i; j < length; j++) {\n\t\t\t\t\t\t\tvar offsetHeight = contentListElem[j].offsetHeight;\n\t\t\t\t\t\t\ttotalHeight += offsetHeight;\n\t\t\t\t\t\t\theights.push(totalHeight);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (var m = 0, len = heights.length; m < len; m++) {\n\t\t\t\t\t\t\tcontentTops.push(parseInt(maxScroll - (height - heights[m] / totalHeight * height)));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontentTops.push(parseInt(offsetTop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontentsElem.addEventListener('scroll', function() {\n\t\t\t\t\tvar scrollTop = contentsElem.scrollTop;\n\t\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\t\tvar offsetTop = contentTops[i];\n\t\t\t\t\t\tvar offset = Math.abs(offsetTop - scrollTop);\n//\t\t\t\t\t\tconsole.log(\"i:\"+i+\",scrollTop:\"+scrollTop+\",offsetTop:\"+offsetTop+\",offset:\"+offset);\n\t\t\t\t\t\tif (scrollTop < offsetTop) {\n\t\t\t\t\t\t\tif (scrollTop >= maxScroll) {\n\t\t\t\t\t\t\t\tonScroll(length - 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonScroll(i - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (offset < 20) {\n\t\t\t\t\t\t\tonScroll(i);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}else if(scrollTop >= maxScroll){\n\t\t\t\t\t\t\tonScroll(length - 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tvar lastIndex = 0;\n\t\t\t\t//监听content滚动\n\t\t\t\tvar onScroll = function(index) {\n\t\t\t\t\tif (lastIndex !== index) {\n\t\t\t\t\t\tlastIndex = index;\n\t\t\t\t\t\tvar lastActiveElem = controlsElem.querySelector('.mui-active');\n\t\t\t\t\t\tlastActiveElem && (lastActiveElem.classList.remove('mui-active'));\n\t\t\t\t\t\tvar currentElem = controlsElem.querySelector('.mui-control-item:nth-child(' + (index + 1) + ')');\n\t\t\t\t\t\tcurrentElem.classList.add('mui-active');\n\t\t\t\t\t\t//简单处理左侧分类滚动，要么滚动到底，要么滚动到顶\n\t\t\t\t\t\tvar controlScrollTop = controlWrapperElem.scrollTop;\n\t\t\t\t\t\tif (controlScrollTop + controlWrapperHeight < controlTops[index]) {\n\t\t\t\t\t\t\tcontrolWrapperElem.scrollTop = controlMaxScroll;\n\t\t\t\t\t\t} else if (controlScrollTop > controlTops[index] - controlHeight) {\n\t\t\t\t\t\t\tcontrolWrapperElem.scrollTop = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t//滚动到指定content\n\t\t\t\tvar scrollTo = function(index) {\n\t\t\t\t\tcontentsElem.scrollTop = contentTops[index];\n\t\t\t\t};\n\t\t\t\tmui(controlsElem).on('tap', '.mui-control-item', function(e) {\n\t\t\t\t\tscrollTo(this.getAttribute('data-index'));\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t})();\n\t\t</script>\n\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-webview-main.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 id=\"title\" class=\"mui-title\">首页</h1>\n\t\t</header>\n\t\t<nav class=\"mui-bar mui-bar-tab\">\n\t\t\t<a id=\"defaultTab\" class=\"mui-tab-item mui-active\" href=\"tab-webview-subpage-about.html\">\n\t\t\t\t<span class=\"mui-icon mui-icon-home\"></span>\n\t\t\t\t<span class=\"mui-tab-label\">首页</span>\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"tab-webview-subpage-chat.html\">\n\t\t\t\t<span class=\"mui-icon mui-icon-email\"><span class=\"mui-badge\">9</span></span>\n\t\t\t\t<span class=\"mui-tab-label\">消息</span>\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"tab-webview-subpage-contact.html\">\n\t\t\t\t<span class=\"mui-icon mui-icon-contact\"></span>\n\t\t\t\t<span class=\"mui-tab-label\">通讯录</span>\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"tab-webview-subpage-setting.html\">\n\t\t\t\t<span class=\"mui-icon mui-icon-gear\"></span>\n\t\t\t\t<span class=\"mui-tab-label\">设置</span>\n\t\t\t</a>\n\t\t</nav>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\t //mui初始化\n\t\t\tmui.init();\n\t\t\tvar subpages = ['tab-webview-subpage-about.html', 'tab-webview-subpage-chat.html', 'tab-webview-subpage-contact.html', 'tab-webview-subpage-setting.html'];\n\t\t\tvar subpage_style = {\n\t\t\t\ttop: '45px',\n\t\t\t\tbottom: '51px'\n\t\t\t};\n\t\t\t\n\t\t\tvar aniShow = {};\n\t\t\t\n\t\t\t //创建子页面，首个选项卡页面显示，其它均隐藏；\n\t\t\tmui.plusReady(function() {\n\t\t\t\tvar self = plus.webview.currentWebview();\n\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\tvar temp = {};\n\t\t\t\t\tvar sub = plus.webview.create(subpages[i], subpages[i], subpage_style);\n\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\tsub.hide();\n\t\t\t\t\t}else{\n\t\t\t\t\t\ttemp[subpages[i]] = \"true\";\n\t\t\t\t\t\tmui.extend(aniShow,temp);\n\t\t\t\t\t}\n\t\t\t\t\tself.append(sub);\n\t\t\t\t}\n\t\t\t});\n\t\t\t //当前激活选项\n\t\t\tvar activeTab = subpages[0];\n\t\t\tvar title = document.getElementById(\"title\");\n\t\t\t //选项卡点击事件\n\t\t\tmui('.mui-bar-tab').on('tap', 'a', function(e) {\n\t\t\t\tvar targetTab = this.getAttribute('href');\n\t\t\t\tif (targetTab == activeTab) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//更换标题\n\t\t\t\ttitle.innerHTML = this.querySelector('.mui-tab-label').innerHTML;\n\t\t\t\t//显示目标选项卡\n\t\t\t\t//若为iOS平台或非首次显示，则直接显示\n\t\t\t\tif(mui.os.ios||aniShow[targetTab]){\n\t\t\t\t\tplus.webview.show(targetTab);\n\t\t\t\t}else{\n\t\t\t\t\t//否则，使用fade-in动画，且保存变量\n\t\t\t\t\tvar temp = {};\n\t\t\t\t\ttemp[targetTab] = \"true\";\n\t\t\t\t\tmui.extend(aniShow,temp);\n\t\t\t\t\tplus.webview.show(targetTab,\"fade-in\",300);\n\t\t\t\t}\n\t\t\t\t//隐藏当前;\n\t\t\t\tplus.webview.hide(activeTab);\n\t\t\t\t//更改当前活跃的选项卡\n\t\t\t\tactiveTab = targetTab;\n\t\t\t});\n\t\t\t //自定义事件，模拟点击“首页选项卡”\n\t\t\tdocument.addEventListener('gohome', function() {\n\t\t\t\tvar defaultTab = document.getElementById(\"defaultTab\");\n\t\t\t\t//模拟首页点击\n\t\t\t\tmui.trigger(defaultTab, 'tap');\n\t\t\t\t//切换选项卡高亮\n\t\t\t\tvar current = document.querySelector(\".mui-bar-tab>.mui-tab-item.mui-active\");\n\t\t\t\tif (defaultTab !== current) {\n\t\t\t\t\tcurrent.classList.remove('mui-active');\n\t\t\t\t\tdefaultTab.classList.add('mui-active');\n\t\t\t\t}\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-webview-subpage-about.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,body {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.title{\n\t\t\t\tmargin: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"title\">\n\t\t\t\t<p>这是webview模式选项卡的第1个子页面</p>\n\t\t\t\t<p>何谓webview模式？其实就是每个选项卡内容都是一个独立的webview，彼此之间互相独立、互不影响；\n\t\t\t\t\t对于较为复杂的业务系统，推荐使用该模式。</p>\n\t\t\t\t<p>基于webview模式的选项卡，支持原生加速的下拉刷新，点击第二个选项卡（“消息”），切换选项卡，体验下拉刷新；</p>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-webview-subpage-chat.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.title {\n\t\t\t\tpadding: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t这是webview模式选项卡中的第2个子页面，该页面展示一个支持下拉刷新、上拉加载的消息列表\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 6</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 7</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 8</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 9</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 10</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 11</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 12</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 13</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 14</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 15</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 16</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 17</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 18</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 19</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 20</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#pullrefresh',\n\t\t\t\t\tdown: {\n\t\t\t\t\t\tcallback: pulldownRefresh\n\t\t\t\t\t},\n\t\t\t\t\tup: {\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t/**\n\t\t\t * 下拉刷新具体业务实现\n\t\t\t */\n\t\t\tfunction pulldownRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor (var i = cells.length, len = i + 3; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\t//下拉刷新，新纪录插到最前面；\n\t\t\t\t\t\ttable.insertBefore(li, table.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPulldownToRefresh(); //refresh completed\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t\tvar count = 0;\n\t\t\t/**\n\t\t\t * 上拉加载具体业务实现\n\t\t\t */\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor (var i = cells.length, len = i + 20; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\ttable.appendChild(li);\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-webview-subpage-contact.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,body {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.title{\n\t\t\t\tmargin: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t}\n\t\t\t .oa-contact-cell.mui-table .mui-table-cell {\n\t\t\t\tpadding: 11px 0;\n\t\t\t\tvertical-align: middle;\n\t\t\t}\n\t\t\t\n\t\t\t.oa-contact-cell {\n\t\t\t\tposition: relative;\n\t\t\t\tmargin: -11px 0;\n\t\t\t}\n\t\n\t\t\t.oa-contact-avatar {\n\t\t\t\twidth: 75px;\n\t\t\t}\n\t\t\t.oa-contact-avatar img {\n\t\t\t\tborder-radius: 50%;\n\t\t\t}\n\t\t\t.oa-contact-content {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.oa-contact-name {\n\t\t\t\tmargin-right: 20px;\n\t\t\t}\n\t\t\t.oa-contact-name, oa-contact-position {\n\t\t\t\tfloat: left;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"title\">\n\t\t\t\t这是webview模式选项卡中的第3个子页面，该页面展示一个通讯录示例\n\t\t\t</div>\n\n\t\t\t<ul class=\"mui-table-view mui-table-view-striped mui-table-view-condensed\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">叶文洁</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">董事长</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tyewenjie@sina.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">艾AA</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">总经理</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\taaa@163.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">罗辑</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tluoji@126.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">云天明</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tytm@163.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">史强</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tshiqiang@gmail.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-webview-subpage-setting.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,body {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.title{\n\t\t\t\tmargin: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<!--<header class=\"mui-bar mui-bar-nav\">\r\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\r\n\t\t\t<h1 class=\"mui-title\">设置</h1>\r\n\t\t</header>-->\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"title\">\n\t\t\t\t这是webview模式选项卡中的第4个子页面，该页面展示一个常见的设置示例\n\t\t\t</div>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t新消息通知\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t隐私\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t通用\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"mui-table-view\" style=\"margin-top: 25px;\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a id=\"about\" class=\"mui-navigate-right\">\n\t\t\t\t\t\t关于mui\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"mui-table-view\" style=\"margin-top: 25px;\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a style=\"text-align: center;color: #FF3B30;\">\n\t\t\t\t\t\t退出登录\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t</style>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\tdocument.getElementById(\"about\").addEventListener('tap',function () {\n\t\t\t//获得主页面的webview\n\t\t\tvar main = plus.webview.currentWebview().parent();\n\t\t\t//触发主页面的gohome事件\n\t\t\tmui.fire(main,'gohome');\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-with-segmented-control-vertical.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t\t<style>\n\t\t\t.mui-row.mui-fullscreen>[class*=\"mui-col-\"] {\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t\t.mui-col-xs-3,\n\t\t\t.mui-control-content {\n\t\t\t\toverflow-y: auto;\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t\t.mui-segmented-control .mui-control-item {\n\t\t\t\tline-height: 50px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active {\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">侧面选项卡-div模式</h1>\n\t\t</header>\n\t\t<div class=\"mui-content mui-row mui-fullscreen\">\n\t\t\t<div class=\"mui-col-xs-3\">\n\t\t\t\t<div id=\"segmentedControls\" class=\"mui-segmented-control mui-segmented-control-inverted mui-segmented-control-vertical\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"segmentedControlContents\" class=\"mui-col-xs-9\" style=\"border-left: 1px solid #c8c7cc;\">\n\t\t\t\t<div id=\"item1\" class=\"mui-control-content mui-active\">\n\t\t\t\t</div>\n\t\t\t\t<div id=\"item2\" class=\"mui-control-content\">\n\t\t\t\t</div>\n\t\t\t\t<div id=\"item3\" class=\"mui-control-content\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\tvar controls = document.getElementById(\"segmentedControls\");\n\t\t\tvar contents = document.getElementById(\"segmentedControlContents\");\n\t\t\tvar html = [];\n\t\t\tvar i = 1,\n\t\t\t\tj = 1,\n\t\t\t\tm = 16, //左侧选项卡数量+1\n\t\t\t\tn = 21; //每个选项卡列表数量+1\n\t\t\tfor (; i < m; i++) {\n\t\t\t\thtml.push('<a class=\"mui-control-item\" href=\"#content' + i + '\">选项' + i + '</a>');\n\t\t\t}\n\t\t\tcontrols.innerHTML = html.join('');\n\t\t\thtml = [];\n\t\t\tfor (i = 1; i < m; i++) {\n\t\t\t\thtml.push('<div id=\"content' + i + '\" class=\"mui-control-content\"><ul class=\"mui-table-view\">');\n\t\t\t\tfor (j = 1; j < n; j++) {\n\t\t\t\t\thtml.push('<li class=\"mui-table-view-cell\">第' + i + '个选项卡子项-' + j + '</li>');\n\t\t\t\t}\n\t\t\t\thtml.push('</ul></div>');\n\t\t\t}\n\t\t\tcontents.innerHTML = html.join('');\n\t\t\t //默认选中第一个\n\t\t\tcontrols.querySelector('.mui-control-item').classList.add('mui-active');\n\t\t\tcontents.querySelector('.mui-control-content').classList.add('mui-active');\n\t\t</script>\n\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-with-segmented-control.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />-->\n\t\t<style>\n\t\t\t.mui-card .mui-control-content {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-control-content {\n\t\t\t\theight: 150px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">顶部选项卡-div模式</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div style=\"padding: 10px 10px;\">\n\t\t\t\t<div id=\"segmentedControl\" class=\"mui-segmented-control\">\n\t\t\t\t\t<a class=\"mui-control-item mui-active\" href=\"#item1\">待办公文（8）</a>\n\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item2\">已办公文</a>\n\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item3\">全部公文</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<div id=\"item1\" class=\"mui-control-content mui-active\">\n\t\t\t\t\t<div id=\"scroll\" class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-1\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-2\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-3\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-4\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-5\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-6\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-7\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-8\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-9\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-10\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-11\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-12\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-13\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-14\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-15\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-16\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-17\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-18\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-19\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t第一个选项卡子项-20\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"item2\" class=\"mui-control-content\">\n\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t第二个选项卡子项-1\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t第二个选项卡子项-2\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t第二个选项卡子项-3\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"item3\" class=\"mui-control-content\">\n\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t第三个选项卡子项-1\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t第三个选项卡子项-2\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t第三个选项卡子项-3\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">Style</h5>\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label>按钮</label>\n\t\t\t\t\t\t<input name=\"style\" type=\"radio\" checked value=\"\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label>文字</label>\n\t\t\t\t\t\t<input name=\"style\" type=\"radio\" value=\"inverted\">\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t\t<h5 class=\"mui-content-padded\">Color</h5>\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label><span class=\"mui-bg-primary\" style=\"display:block;width:25px;height:25px;\"></span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input name=\"color\" type=\"radio\" checked value=\"primary\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label><span class=\"mui-bg-positive\" style=\"display:block;width:25px;height:25px;\"></span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input name=\"color\" type=\"radio\" value=\"positive\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label><span class=\"mui-bg-negative\" style=\"display:block;width:25px;height:25px;\"></span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input name=\"color\" type=\"radio\" value=\"negative\">\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: true //启用右滑关闭功能\n\t\t\t});\n\t\t\t(function($) {\n\t\t\t\t$('#scroll').scroll({\n\t\t\t\t\tindicators: true //是否显示滚动条\n\t\t\t\t});\n\t\t\t\tvar segmentedControl = document.getElementById('segmentedControl');\n\t\t\t\t$('.mui-input-group').on('change', 'input', function() {\n\t\t\t\t\tif (this.checked) {\n\t\t\t\t\t\tvar styleEl = document.querySelector('input[name=\"style\"]:checked');\n\t\t\t\t\t\tvar colorEl = document.querySelector('input[name=\"color\"]:checked');\n\t\t\t\t\t\tif (styleEl && colorEl) {\n\t\t\t\t\t\t\tvar style = styleEl.value;\n\t\t\t\t\t\t\tvar color = colorEl.value;\n\t\t\t\t\t\t\tsegmentedControl.className = 'mui-segmented-control' + (style ? (' mui-segmented-control-' + style) : '') + ' mui-segmented-control-' + color;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})(mui);\n\t\t</script>\n\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tab-with-viewpagerindicator.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />-->\n\t</head>\n\n\t<body>\n\n\t\t<style>\n\t\t\t.mui-control-content {\n\t\t\t\tbackground-color: white;\n\t\t\t\tmin-height: 215px;\n\t\t\t}\n\t\t\t.mui-control-content .mui-loading {\n\t\t\t\tmargin-top: 50px;\n\t\t\t}\n\t\t</style>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">顶部选项卡-可左右拖动(div)</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div id=\"slider\" class=\"mui-slider\">\n\t\t\t\t<div id=\"sliderSegmentedControl\" class=\"mui-slider-indicator mui-segmented-control mui-segmented-control-inverted\">\n\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item1mobile\">\n\t\t\t\t待办公文\n\t\t\t</a>\n\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item2mobile\">\n\t\t\t\t已办公文\n\t\t\t</a>\n\t\t\t\t\t<a class=\"mui-control-item\" href=\"#item3mobile\">\n\t\t\t\t全部公文\n\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<div id=\"sliderProgressBar\" class=\"mui-slider-progress-bar mui-col-xs-4\"></div>\n\t\t\t\t<div class=\"mui-slider-group\">\n\t\t\t\t\t<div id=\"item1mobile\" class=\"mui-slider-item mui-control-content mui-active\">\n\t\t\t\t\t\t<div id=\"scroll1\" class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-1\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-2\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-3\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-4\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-5\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-6\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-7\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-8\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-9\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-10\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-11\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-12\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-13\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-14\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-15\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-16\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-17\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-18\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-19\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t\t\t第一个选项卡子项-20\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"item2mobile\" class=\"mui-slider-item mui-control-content\">\n\t\t\t\t\t\t<div id=\"scroll2\" class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<div class=\"mui-loading\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-spinner\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"item3mobile\" class=\"mui-slider-item mui-control-content\">\n\t\t\t\t\t\t<div id=\"scroll3\" class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t\t<div class=\"mui-loading\">\n\t\t\t\t\t\t\t\t\t<div class=\"mui-spinner\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<h5 class=\"mui-content-padded\">Color</h5>\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label><span class=\"mui-bg-primary\" style=\"display:block;width:25px;height:25px;\"></span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\" checked value=\"primary\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label><span class=\"mui-bg-positive\" style=\"display:block;width:25px;height:25px;\"></span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\" value=\"positive\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-input-row mui-radio\">\n\t\t\t\t\t\t<label><span class=\"mui-bg-negative\" style=\"display:block;width:25px;height:25px;\"></span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input name=\"radio1\" type=\"radio\" value=\"negative\">\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false\n\t\t\t});\n\t\t\t(function($) {\n\t\t\t\t$('.mui-scroll-wrapper').scroll({\n\t\t\t\t\tindicators: true //是否显示滚动条\n\t\t\t\t});\n\t\t\t\tvar html2 = '<ul class=\"mui-table-view\"><li class=\"mui-table-view-cell\">第二个选项卡子项-1</li><li class=\"mui-table-view-cell\">第二个选项卡子项-2</li><li class=\"mui-table-view-cell\">第二个选项卡子项-3</li><li class=\"mui-table-view-cell\">第二个选项卡子项-4</li><li class=\"mui-table-view-cell\">第二个选项卡子项-5</li></ul>';\n\t\t\t\tvar html3 = '<ul class=\"mui-table-view\"><li class=\"mui-table-view-cell\">第三个选项卡子项-1</li><li class=\"mui-table-view-cell\">第三个选项卡子项-2</li><li class=\"mui-table-view-cell\">第三个选项卡子项-3</li><li class=\"mui-table-view-cell\">第三个选项卡子项-4</li><li class=\"mui-table-view-cell\">第三个选项卡子项-5</li></ul>';\n\t\t\t\tvar item2 = document.getElementById('item2mobile');\n\t\t\t\tvar item3 = document.getElementById('item3mobile');\n\t\t\t\tdocument.getElementById('slider').addEventListener('slide', function(e) {\n\t\t\t\t\tif (e.detail.slideNumber === 1) {\n\t\t\t\t\t\tif (item2.querySelector('.mui-loading')) {\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\titem2.querySelector('.mui-scroll').innerHTML = html2;\n\t\t\t\t\t\t\t}, 500);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.detail.slideNumber === 2) {\n\t\t\t\t\t\tif (item3.querySelector('.mui-loading')) {\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\titem3.querySelector('.mui-scroll').innerHTML = html3;\n\t\t\t\t\t\t\t}, 500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tvar sliderSegmentedControl = document.getElementById('sliderSegmentedControl');\n\t\t\t\t$('.mui-input-group').on('change', 'input', function() {\n\t\t\t\t\tif (this.checked) {\n\t\t\t\t\t\tsliderSegmentedControl.className = 'mui-slider-indicator mui-segmented-control mui-segmented-control-inverted mui-segmented-control-' + this.value;\n\t\t\t\t\t\t//force repaint\n\t\t\t\t\t\tsliderProgressBar.setAttribute('style', sliderProgressBar.getAttribute('style'));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})(mui);\n\t\t</script>\n\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tabbar-labels-only.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t</head>\n\n\t<body>\n\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">文字选项卡</h1>\n\t\t</header>\n\t\t<nav class=\"mui-bar mui-bar-tab\">\n\t\t    <a class=\"mui-tab-item mui-active\" href=\"#\">\n\t\t        电话沟通\n\t\t    </a>\n\t\t    <a class=\"mui-tab-item\" href=\"#\">\n\t\t        在线交流\n\t\t    </a>\n\t\t    <a class=\"mui-tab-item\" href=\"#\">\n\t\t        短信咨询\n\t\t    </a>\n\t\t    <a class=\"mui-tab-item\" href=\"#\">\n\t\t        查看地图\n\t\t    </a>\n\t\t</nav>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tabbar-with-submenus.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t\t<style>\n\t\t\t.mui-bar-popover {\n\t\t\t\twidth: 30%;\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">底部选项卡-二级菜单(div)</h1>\n\t\t</header>\n\t\t<nav class=\"mui-bar mui-bar-tab \">\n\t\t\t<a class=\"mui-tab-item\" href=\"#Popover_0\">产品</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#Popover_1\">方案</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#Popover_2\">新闻</a>\n\t\t</nav>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p style=\"text-indent: 22px;\">这是包含二级菜单的底部选项卡示例，点击底部菜单，会展开显示对应的二级菜单。</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"Popover_0\" class=\"mui-popover mui-bar-popover\">\n\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">iOS</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">Android</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">HTML5</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div id=\"Popover_1\" class=\"mui-popover mui-bar-popover\">\n\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">PC方案</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">手机方案</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">TV方案</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div id=\"Popover_2\" class=\"mui-popover mui-bar-popover\">\n\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">公司新闻</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">行业新闻</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tabbar.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t\t<style>\n\t\t\t\n\t\t\t.title{\n\t\t\t\tmargin: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t}\n\t\t\t\n\t\t\t.oa-contact-cell.mui-table .mui-table-cell {\n\t\t\t\tpadding: 11px 0;\n\t\t\t\tvertical-align: middle;\n\t\t\t}\n\t\t\t\n\t\t\t.oa-contact-cell {\n\t\t\t\tposition: relative;\n\t\t\t\tmargin: -11px 0;\n\t\t\t}\n\t\n\t\t\t.oa-contact-avatar {\n\t\t\t\twidth: 75px;\n\t\t\t}\n\t\t\t.oa-contact-avatar img {\n\t\t\t\tborder-radius: 50%;\n\t\t\t}\n\t\t\t.oa-contact-content {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.oa-contact-name {\n\t\t\t\tmargin-right: 20px;\n\t\t\t}\n\t\t\t.oa-contact-name, oa-contact-position {\n\t\t\t\tfloat: left;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">底部选项卡-div模式</h1>\n\t\t</header>\n\t\t<nav class=\"mui-bar mui-bar-tab\">\n\t\t\t<a class=\"mui-tab-item mui-active\" href=\"#tabbar\">\n\t\t\t\t<span class=\"mui-icon mui-icon-home\"></span>\n\t\t\t\t<span class=\"mui-tab-label\">首页</span>\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#tabbar-with-chat\">\n\t\t\t\t<span class=\"mui-icon mui-icon-email\"><span class=\"mui-badge\">9</span></span>\n\t\t\t\t<span class=\"mui-tab-label\">消息</span>\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#tabbar-with-contact\">\n\t\t\t\t<span class=\"mui-icon mui-icon-contact\"></span>\n\t\t\t\t<span class=\"mui-tab-label\">通讯录</span>\n\t\t\t</a>\n\t\t\t<a class=\"mui-tab-item\" href=\"#tabbar-with-map\">\n\t\t\t\t<span class=\"mui-icon mui-icon-gear\"></span>\n\t\t\t\t<span class=\"mui-tab-label\">设置</span>\n\t\t\t</a>\n\t\t</nav>\n\t\t<div class=\"mui-content\">\n\t\t\t<div id=\"tabbar\" class=\"mui-control-content mui-active\">\n\t\t\t\t<div class=\"title\">这是div模式选项卡中的第1个子页面.</div>\n\t\t\t\t<div class=\"title\">何谓div模式的选项卡？\n\t\t\t\t\t其实就是通过DIV模拟一个独立页面，通过DIV的显示、隐藏模拟不同页面的切换，典型的SPA模式；</div>\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t这种模式适合简单业务系统，因为每个选项卡内容要写在一个DIV中，\n\t\t\t\t\t若逻辑复杂，会导致当前页面DOM结构繁杂，造成webview响应缓慢，甚至崩溃；\n\t\t\t\t\t因此若系统较复杂，需要下拉刷新等操作，推荐使用webview模式的选项卡；</div>\n\t\t\t</div>\n\t\t\t<div id=\"tabbar-with-chat\" class=\"mui-control-content\">\n\t\t\t\t<div class=\"title\">这是div模式选项卡中的第2个子页面，该页面展示一个消息列表</div>\n\t\t\t\t\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 1</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 2</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 3</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 4</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 5</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 6</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 7</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 8</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 9</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 10</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 11</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 12</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 13</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 14</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 15</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 16</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 17</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 18</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 19</a></li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"\" class=\"mui-navigate-right\">Item 20</a></li>\n\t\t\t\t</ul>\n\t\t\t\t\n\t\t\t</div>\n\t\t\t<div id=\"tabbar-with-contact\" class=\"mui-control-content\">\n\t\t\t\t<div class=\"title\">这是div模式选项卡中的第3个子页面，该页面展示一个通讯录示例.</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-striped mui-table-view-condensed\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">叶文洁</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">董事长</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tyewenjie@sina.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">艾AA</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">总经理</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\taaa@163.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">罗辑</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tluoji@126.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">云天明</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tytm@163.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">史强</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tshiqiang@gmail.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div id=\"tabbar-with-map\" class=\"mui-control-content\">\n\t\t\t\t<div class=\"title\">这是div模式选项卡中的第4个子页面，该页面展示一个常见的设置示例.</div>\n\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t新消息通知\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t隐私\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t通用\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"mui-table-view\" style=\"margin-top: 25px;\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t关于mui\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"mui-table-view\" style=\"margin-top: 25px;\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a style=\"text-align: center;color: #FF3B30;\">\n\t\t\t\t\t\t退出登录\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tableviews-with-badges.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t    <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t    <h1 class=\"mui-title\">右侧带数字角标</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t    <div class=\"mui-card\">\n\t\t        <ul class=\"mui-table-view\">\n\t\t            <li class=\"mui-table-view-cell\">card（圆角列表）\n\t\t                <div id=\"M_Toggle\" class=\"mui-switch mui-active\">\n\t\t                    <div class=\"mui-switch-handle\"></div>\n\t\t                </div>\n\t\t            </li>\n\t\t            <li class=\"mui-table-view-divider\">右侧无导航箭头</li>\n\t\t            <li class=\"mui-table-view-cell\">Item 1 <span class=\"mui-badge mui-badge-primary\">14</span></li>\n\t\t            <li class=\"mui-table-view-cell\">Item 2 <span class=\"mui-badge mui-badge-success\">1</span></li>\n\t\t            <li class=\"mui-table-view-cell\">Item 3 <span class=\"mui-badge\">5</span></li>\n\t\t            <li class=\"mui-table-view-divider\">右侧有导航箭头</li>\n\t\t            <li class=\"mui-table-view-cell\">\n\t\t                <a class=\"mui-navigate-right\">\n\t\t                    <span class=\"mui-badge mui-badge-danger\">15</span>\n\t\t                    Item 1\n\t\t                </a>\n\t\t            </li>\n\t\t            <li class=\"mui-table-view-cell\">\n\t\t                <a class=\"mui-navigate-right\">\n\t\t                    <span class=\"mui-badge mui-badge-purple\">5</span>\n\t\t                    Item 2\n\t\t                </a>\n\t\t            </li>\n\t\t            <li class=\"mui-table-view-cell\">\n\t\t                <a class=\"mui-navigate-right\">\n\t\t                    <span class=\"mui-badge mui-badge-warning\">5</span>\n\t\t                    Item 3\n\t\t                </a>\n\t\t            </li>\n\t\t        </ul>\n\t\t    </div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\twindow.addEventListener('toggle', function(event) {\n\t\t\tif (event.target.id === 'M_Toggle') {\n\t\t\t\tvar isActive = event.detail.isActive;\n\t\t\t\tvar table = document.querySelector('.mui-table-view');\n\t\t\t\tvar card = document.querySelector('.mui-card');\n\t\t\t\tif (isActive) {\n\t\t\t\t\tcard.appendChild(table);\n\t\t\t\t\tcard.style.display = '';\n\t\t\t\t} else {\n\t\t\t\t\tvar content = document.querySelector('.mui-content');\n\t\t\t\t\tcontent.insertBefore(table, card);\n\t\t\t\t\tcard.style.display = 'none';\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tableviews-with-collapses.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t</head>\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">二级列表</h1>\n\t\t</header>\n\t\t\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-card\">\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">card（圆角列表）\n\t\t\t\t\t\t<div id=\"M_Toggle\" class=\"mui-switch mui-active\">\n\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\"><a class=\"mui-navigate-right\" href=\"#\">产品</a>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a class=\"mui-navigate-right\" href=\"#\">iOS</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a class=\"mui-navigate-right\" href=\"#\">Android</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a class=\"mui-navigate-right\" href=\"#\">HTML5</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\"><a class=\"mui-navigate-right\" href=\"#\">方案</a>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a class=\"mui-navigate-right\" href=\"#\">PC方案</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a class=\"mui-navigate-right\" href=\"#\">手机方案</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a class=\"mui-navigate-right\" href=\"#\">TV方案</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\"><a class=\"mui-navigate-right\" href=\"#\">新闻</a>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a class=\"mui-navigate-right\" href=\"#\">公司新闻</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a class=\"mui-navigate-right\" href=\"#\">行业新闻</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t\twindow.addEventListener('toggle', function(event) {\n\t\t\tif (event.target.id === 'M_Toggle') {\n\t\t\t\tvar isActive = event.detail.isActive;\n\t\t\t\tvar table = document.querySelector('.mui-table-view');\n\t\t\t\tvar card = document.querySelector('.mui-card');\n\t\t\t\tif (isActive) {\n\t\t\t\t\tcard.appendChild(table);\n\t\t\t\t\tcard.style.display = '';\n\t\t\t\t} else {\n\t\t\t\t\tvar content = document.querySelector('.mui-content');\n\t\t\t\t\tcontent.insertBefore(table, card);\n\t\t\t\t\tcard.style.display = 'none';\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tableviews-with-swipe.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\" />\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">滑动触发列表项菜单</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<h5 class=\"mui-content-padded\" style=\"margin: 35px 10px 15px 10px;\">拖拽(滑动)显示功能按钮，点击按钮触发事件</h5>\n\t\t\t<ul id=\"OA_task_1\" class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-right mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red\">删除</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle\">\n\t\t\t\t\t\t左滑显示删除按钮\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-left mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red\">删除</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle\">\n\t\t\t\t\t\t右滑显示删除按钮\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-left mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red\">删除</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-right mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red\">删除</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle\">\n\t\t\t\t\t\t左右滑动均可显示删除按钮\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<h5 class=\"mui-content-padded\" style=\"margin: 15px 10px;\">拖拽(滑动)显示操作图标，释放后还原，自动触发事件</h5>\n\t\t\t<ul id=\"OA_task_2\" class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-right mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red\">删除</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle mui-table\">\n\t\t\t\t\t\t<div class=\"mui-table-cell\">\n\t\t\t\t\t\t\t左滑自动触发删除\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-left mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red\">删除</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle\">\n\t\t\t\t\t\t右滑自动触发删除\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-left mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red\">删除</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-right mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red\">删除</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle\">\n\t\t\t\t\t\t左右滑动均可自动触发删除\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<h5 class=\"mui-content-padded\" style=\"margin: 15px 10px;\">拖拽(滑动)显示多功能菜单</h5>\n\t\t\t<ul id=\"OA_task_2\" class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-right mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-grey mui-icon mui-icon-person\"></a>\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-yellow mui-icon mui-icon-phone\"></a>\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red mui-icon mui-icon-email\"></a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle\">\n\t\t\t\t\t\t<div class=\"mui-table-cell\">\n\t\t\t\t\t\t\t左滑显示多功能菜单\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-left mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red mui-icon mui-icon-email\"></a>\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-yellow mui-icon mui-icon-phone\"></a>\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-grey mui-icon mui-icon-person\"></a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle\">\n\t\t\t\t\t\t右滑显示多功能菜单\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-left mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red mui-icon mui-icon-email\"></a>\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-yellow mui-icon mui-icon-phone\"></a>\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-grey mui-icon mui-icon-person\"></a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-right mui-disabled\">\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-grey mui-icon mui-icon-person\"></a>\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-yellow mui-icon mui-icon-phone\"></a>\n\t\t\t\t\t\t<a class=\"mui-btn mui-btn-red mui-icon mui-icon-email\"></a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"mui-slider-handle\">\n\t\t\t\t\t\t左右滑动均可显示多功能菜单\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init();\n\t\t\t(function($) {\n\t\t\t\t//$.swipeoutOpen(el,direction)//打开指定列的滑动菜单，el:指定列的dom对象，direction：取值left|right，指定打开的是左侧或右侧滑动菜单\n\t\t\t\t//$.swipeoutClose(el);//关闭指定列的滑动菜单，el:指定列的dom对象\n\t\t\t\t//\t\t\t\tsetTimeout(function() {\n\t\t\t\t//\t\t\t\t\t$.swipeoutOpen(document.getElementById(\"OA_task_1\").querySelector('li:last-child'), 'left');\n\t\t\t\t//\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t//\t\t\t\t\t\t$.swipeoutClose(document.getElementById(\"OA_task_1\").querySelector('li:last-child'));\n\t\t\t\t//\t\t\t\t\t}, 1000);\n\t\t\t\t//\t\t\t\t}, 1000);\n\t\t\t\t//第一个demo，拖拽后显示操作图标，点击操作图标删除元素；\n\t\t\t\t$('#OA_task_1').on('tap', '.mui-btn', function(event) {\n\t\t\t\t\tvar elem = this;\n\t\t\t\t\tvar li = elem.parentNode.parentNode;\n\t\t\t\t\tmui.confirm('确认删除该条记录？', 'Hello MUI', btnArray, function(e) {\n\t\t\t\t\t\tif (e.index == 0) {\n\t\t\t\t\t\t\tli.parentNode.removeChild(li);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t$.swipeoutClose(li);\n\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tvar btnArray = ['确认', '取消'];\n\t\t\t\t//第二个demo，向左拖拽后显示操作图标，释放后自动触发的业务逻辑\n\t\t\t\t$('#OA_task_2').on('slideleft', '.mui-table-view-cell', function(event) {\n\t\t\t\t\tvar elem = this;\n\t\t\t\t\tmui.confirm('确认删除该条记录？', 'Hello MUI', btnArray, function(e) {\n\t\t\t\t\t\tif (e.index == 0) {\n\t\t\t\t\t\t\telem.parentNode.removeChild(elem);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t$.swipeoutClose(elem);\n\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t//第二个demo，向右拖拽后显示操作图标，释放后自动触发的业务逻辑\n\t\t\t\t$('#OA_task_2').on('slideright', '.mui-table-view-cell', function(event) {\n\t\t\t\t\tvar elem = this;\n\t\t\t\t\tmui.confirm('确认删除该条记录？', 'Hello MUI', btnArray, function(e) {\n\t\t\t\t\t\tif (e.index == 0) {\n\t\t\t\t\t\t\telem.parentNode.removeChild(elem);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t$.swipeoutClose(elem);\n\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t})(mui);\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/tableviews.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>\n\t\t<style>\n\t\t\t.title{\n\t\t\t\tmargin: 20px 15px 7px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t}\n\t\t\t\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">普通列表</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"title\">\n\t\t\t\t右侧无导航箭头\n\t\t\t</div>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t <li class=\"mui-table-view-cell\">Item 1</li>\n\t\t         <li class=\"mui-table-view-cell\">Item 2</li>\n\t\t         <li class=\"mui-table-view-cell\">Item 3</li>\n\t\t\t</ul>\n\t\t\t<div class=\"title\">\n\t\t\t\t右侧有导航箭头\n\t\t\t</div>\n\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\tItem 1\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\tItem 2\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\tItem 3\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t    <div class=\"title\">\n\t\t\t\tcard（圆角列表）\n\t\t\t</div>\n\t\t\t<div class=\"mui-card\" style=\"margin-bottom: 35px;\">\n\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 1\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 2\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a class=\"mui-navigate-right\">\n\t\t\t\t\t\t\tItem 3\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/examples/typography.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<!--标准mui.css-->\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<!--App自定义的css-->\n\t\t<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/app.css\"/>-->\n\t</head>\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">Typography</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<h1>h1. Heading</h1>\n\t\t\t\t<h2>h2. Heading</h2>\n\t\t\t\t<h3>h3. Heading</h3>\n\t\t\t\t<h4>h4. Heading</h4>\n\t\t\t\t<h5>h5. Heading</h5>\n\t\t\t\t<h6>h6. Heading</h6>\n\t\t\t\t<p>\n\t\t\t\t\tp. 目前最接近原生App效果的框架。\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/hello-mui/index-menu.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<link rel=\"stylesheet\" href=\"css/mui.min.css\">\n\t\t<style type=\"text/css\">\n\t\t\tbody,\n\t\t\t.mui-content {\n\t\t\t\tbackground-color: #333;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\t\t\t\n\t\t\t.title {\n\t\t\t\tmargin: 35px 15px 10px;\n\t\t\t}\n\t\t\t\n\t\t\t.title+.content {\n\t\t\t\tmargin: 10px 15px 35px;\n\t\t\t\tcolor: #bbb;\n\t\t\t\ttext-indent: 1em;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tline-height: 24px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-table-view {\n\t\t\t\tmargin-bottom: 35px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"title\">侧滑导航</div>\n\t\t\t<div class=\"content\">\n\t\t\t\t这是首页侧滑导航示例，你可以在这里放置任何内容；<span style=\"display: none;\">关闭侧滑菜单有多种方式： 1.点击本侧滑菜单页之外的任意位置; 2.点击如下红色按钮\n\t\t\t\t<span id=\"android-only\">；3.Android手机按back键；4.Android手机按menu键。\n\t\t\t\t</span></span>\n\t\t\t\t<p style=\"margin: 10px 15px;\">\n\t\t\t\t\t<button id=\"close-btn\" type=\"button\" class=\"mui-btn mui-btn-danger mui-btn-block\" style=\"padding: 5px 20px;\">关闭侧滑菜单</button>\n\t\t\t\t</p>\n\n\t\t\t</div>\n\t\t\t<div class=\"title\" style=\"margin-bottom: 25px;\">mui典型控件</div>\n\t\t\t<ul class=\"mui-table-view mui-table-view-chevron mui-table-view-inverted\" style=\"color: #ddd;\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/pullrefresh_main.html\">\n\t\t\t\t\t\t下拉刷新\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/offcanvas-drag-left.html\">\n\t\t\t\t\t\t侧滑导航\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/switches.html\">\n\t\t\t\t\t\t开关控件\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/tableviews-with-swipe.html\">\n\t\t\t\t\t\t列表左滑菜单\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/tab-with-viewpagerindicator.html\">\n\t\t\t\t\t\t可拖动式选项卡\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<script src=\"js/mui.min.js\"></script>\n\t\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t\tvar aniShow = \"slide-in-right\";\n\t\t\t//关于backbutton和menubutton两个按键的说明，在iOS平台不存在，故需隐藏\n\t\t\tif(!mui.os.android) {\n\t\t\t\tvar span = document.getElementById(\"android-only\")\n\t\t\t\tif(span) {\n\t\t\t\t\tspan.style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar subWebview = null,\n\t\t\t\ttemplate = null,\n\t\t\t\tindex = null;\n\t\t\tmui.plusReady(function() {\n\t\t\t\t//获得主页面webview引用；\n\t\t\t\tindex = plus.webview.currentWebview().opener();\n\t\t\t\tvar _self = plus.webview.currentWebview();\n\t\t\t\t_self.drag({\n\t\t\t\t\tdirection: \"left\",\n\t\t\t\t\tmoveMode: \"followFinger\"\n\t\t\t\t}, {\n\t\t\t\t\tview: index,\n\t\t\t\t\tmoveMode: \"follow\"\n\t\t\t\t}, function(e) {});\n\n\t\t\t})\n\t\t\tmui('.mui-table-view').on('tap', 'a', function() {\n\t\t\t\tvar id = this.getAttribute(\"href\");\n\t\t\t\tvar type = this.getAttribute(\"open-type\");\n\t\t\t\tvar href = this.href;\n\t\t\t\t\n\t\t\t\tvar webview_style = {\n\t\t\t\t\tpopGesture: \"close\",\n\t\t\t\t\tstatusbar : {\n\t\t\t\t\t\tbackground: \"#f7f7f7\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar extras = {};\n\n\t\t\t\tvar titleType = this.getAttribute(\"data-title-type\");\n\n\t\t\t\tif(titleType == \"native\") {\n\n\t\t\t\t\tif(!~id.indexOf('pullrefresh.html')) {\n\t\t\t\t\t\twebview_style.bounce = \"vertical\";\n\t\t\t\t\t}\n\n\t\t\t\t\tvar webview = plus.webview.create(href, id, webview_style);\n\t\t\t\t\tvar view = new plus.nativeObj.View(\"title\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\theight: \"44px\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tdock: \"top\",\n\t\t\t\t\t\tposition: \"dock\"\n\t\t\t\t\t});\n\n\t\t\t\t\tview.drawRect(\"#f7f7f7\"); //绘制背景色\n\t\t\t\t\tview.drawRect(\"#cccccc\", {\n\t\t\t\t\t\ttop: \"43px\",\n\t\t\t\t\t\tleft: \"0px\"\n\t\t\t\t\t}); //绘制底部边线\n\n\t\t\t\t\tvar bitmap = new plus.nativeObj.Bitmap(\"back\");\n\t\t\t\t\tbitmap.loadBase64Data(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAb1BMVEUAAAAAev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8AAACubimgAAAAI3RSTlMAGfUTGfQTGPMSGPIYGhgaGBsXGxcbFxwXHBccFhwWHRYdHWufDPQAAAABYktHRACIBR1IAAAAB3RJTUUH4QETEBwooeTlkQAAAJVJREFUSMft1EkSgkAQRNFGUXFWHBDBibr/HTUwD5B/48Ig1y+io7u6MqUhf5hsNEY+j5hMgZ/FJ8Xc9ovos3T96utjbfqN/Nb0O/m96Uv5g+mP8ifTn+Ur01/ka9Nf5RvTt/I309/lH6Z/yr9Mn+Q71/MT8B34K/E58Enzv8R/K98HvnF8p3lr8F7izce7lbf3kJ/lDQp9HdBhgg3PAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTAxLTE5VDE2OjI4OjQwKzA4OjAwpTDFwQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wMS0xOVQxNjoyODo0MCswODowMNRtfX0AAAAASUVORK5CYII=\");\n\t\t\t\t\tview.drawBitmap(bitmap, {}, {\n\t\t\t\t\t\ttop: \"10px\",\n\t\t\t\t\t\tleft: \"10px\",\n\t\t\t\t\t\twidth: \"24px\",\n\t\t\t\t\t\theight: \"24px\"\n\t\t\t\t\t});\n\t\t\t\t\tview.drawText(this.innerText.trim(), {}, {\n\t\t\t\t\t\tsize: \"17px\",\n\t\t\t\t\t\tweight: \"normal\"\n\t\t\t\t\t});\n\n\t\t\t\t\tview.setTouchEventRect({\n\t\t\t\t\t\ttop: \"0px\",\n\t\t\t\t\t\tleft: \"0px\",\n\t\t\t\t\t\twidth: \"44px\",\n\t\t\t\t\t\theight: \"100%\"\n\t\t\t\t\t});\n\t\t\t\t\tview.interceptTouchEvent(true);\n\t\t\t\t\tview.addEventListener(\"click\", function(e) {\n\t\t\t\t\t\twebview.evalJS(\"mui.back();\");\n\t\t\t\t\t}, false);\n\t\t\t\t\twebview.append(view);\n\n\t\t\t\t\twebview.addEventListener(\"loaded\", function() {\n\t\t\t\t\t\twebview.show(aniShow, 300, null, extras);\n\t\t\t\t\t})\n\n\t\t\t\t} else {\n\t\t\t\t\t//侧滑菜单需动态控制一下zindex值；\n\t\t\t\t\tif(~id.indexOf('offcanvas-')) {\n\t\t\t\t\t\twebview_style.zindex = 9998;\n\t\t\t\t\t\twebview_style.popGesture = ~id.indexOf('offcanvas-with-right') ? \"close\" : \"none\";\n\t\t\t\t\t}\n\n\t\t\t\t\tvar webview = plus.webview.create(this.href, id, webview_style, extras);\n\t\t\t\t\twebview.addEventListener(\"loaded\", function() {\n\t\t\t\t\t\twebview.show(aniShow, 300);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\n\t\t\t * 关闭侧滑菜单\n\t\t\t */\n\t\t\tfunction close() {\n\t\t\t\tmui.fire(mui.currentWebview.opener(), \"menu:close\");\n\t\t\t}\n\n\t\t\t//点击“关闭侧滑菜单”按钮处理逻辑\n\t\t\tdocument.getElementById(\"close-btn\").addEventListener(\"tap\", close);\n\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tkeyEventBind: {\n\t\t\t\t\tbackbutton: false //关闭back按键监听\n\t\t\t\t}\n\t\t\t});\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/hello-mui/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n\t<head>\r\n\t\t<meta charset=\"utf-8\">\r\n\t\t<title>Hello MUI</title>\r\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no\">\r\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\r\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\r\n\t\t<link rel=\"stylesheet\" href=\"css/mui.min.css\">\r\n\t\t<style type=\"text/css\">\r\n\t\t\t#list {\r\n\t\t\t\t/*避免导航边框和列表背景边框重叠，看起来像两条边框似得；*/\r\n\t\t\t\tmargin-top: -1px;\r\n\t\t\t}\r\n\t\t</style>\r\n\t</head>\r\n\r\n\t<body>\r\n\t\t<div class=\"mui-content\">\r\n\t\t\t<ul id=\"list\" class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/accordion.html\">\r\n\t\t\t\t\t\taccordion（折叠面板）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\tactionsheet（操作表）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/actionsheet.html\">\r\n\t\t\t\t\t\t\t\tH5模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/actionsheet-plus.html\">\r\n\t\t\t\t\t\t\t\tnative模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/ajax.html\">\r\n\t\t\t\t\t\tajax（网络请求）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/badges.html\">\r\n\t\t\t\t\t\tbadge（数字角标）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\tbutton（按钮）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/buttons.html\">\r\n\t\t\t\t\t\t\t\t普通按钮\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/buttons-with-icons.html\">\r\n\t\t\t\t\t\t\t\t带图标的按钮\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/buttons-with-badges.html\">\r\n\t\t\t\t\t\t\t\t带数字的按钮\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/buttons-with-block.html\">\r\n\t\t\t\t\t\t\t\t块级按钮\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/buttons-with-loading.html\">\r\n\t\t\t\t\t\t\t\t加载中按钮\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/card.html\">\r\n\t\t\t\t\t\tcardview（卡片视图）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/checkbox.html\">\r\n\t\t\t\t\t\tcheckbox（复选框）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\tdate time（日期时间）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/dtpicker.html\">\r\n\t\t\t\t\t\t\t\tH5模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/date.html\">\r\n\t\t\t\t\t\t\t\tnative模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/dialog.html\">\r\n\t\t\t\t\t\tdialog（消息框）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\tgallery slider（图片轮播）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/slider-default.html\">\r\n\t\t\t\t\t\t\t\t默认样式（H5模式）\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/slider-native.html\">\r\n\t\t\t\t\t\t\t\t默认样式（native模式）\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/slider-with-title.html\">\r\n\t\t\t\t\t\t\t\t下方悬浮标题\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\tgallery table（图文表格）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/slider-table-default.html\">\r\n\t\t\t\t\t\t\t\t默认样式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/slider-table-pagination.html\">\r\n\t\t\t\t\t\t\t\t左右滑动分页样式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\tgrid（9宫格）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/grid-default.html\">\r\n\t\t\t\t\t\t\t\t默认样式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/grid-pagination.html\">\r\n\t\t\t\t\t\t\t\t可左右滑动的9宫导航\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a href=\"#\" class=\"mui-navigate-right\">icon（图标）</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/icons.html\">\r\n\t\t\t\t\t\t\t\t内置图标\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/icons-extra.html\">\r\n\t\t\t\t\t\t\t\t扩展图标\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/input.html\">\r\n\t\t\t\t\t\tinput（输入框）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\tlist（列表）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/tableviews.html\">\r\n\t\t\t\t\t\t\t\t普通列表\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/tableviews-with-badges.html\">\r\n\t\t\t\t\t\t\t\t右侧带数字角标\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/list-with-input.html\">\r\n\t\t\t\t\t\t\t\t列表带input类控件\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/list-triplex-row.html\">\r\n\t\t\t\t\t\t\t\t三行列表\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/tableviews-with-collapses.html\">\r\n\t\t\t\t\t\t\t\t二级列表\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/tableviews-with-swipe.html\">\r\n\t\t\t\t\t\t\t\t滑动触发列表项菜单\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/media-list.html\">\r\n\t\t\t\t\t\tmedia list（图文列表）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a href=\"#\" class=\"mui-navigate-right\">nav bar（导航栏）</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/nav.html\">\r\n\t\t\t\t\t\t\t\t默认标题（div模式）\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/nav-nativeObj.html\">\r\n\t\t\t\t\t\t\t\t默认标题（native模式）\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/nav_transparent.html\">\r\n\t\t\t\t\t\t\t\t透明渐变(div模式)\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"transparent_native\" href=\"examples/nav_transparent_native.html\">\r\n\t\t\t\t\t\t\t\t透明渐变(native模式)\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/numbox.html\">\r\n\t\t\t\t\t\tnumber box（数字输入框）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\toff canvas（侧滑导航）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" open-type=\"common\" href=\"examples/offcanvas-drag-right-plus-main.html\">\r\n\t\t\t\t\t\t\t\twebview模式右滑菜单\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" open-type=\"common\" href=\"examples/offcanvas-drag-left-plus-main.html\">\r\n\t\t\t\t\t\t\t\twebview模式左滑菜单\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" open-type=\"common\" href=\"examples/offcanvas-drag-right.html\">\r\n\t\t\t\t\t\t\t\tdiv模式右滑菜单\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" open-type=\"common\" href=\"examples/offcanvas-drag-left.html\">\r\n\t\t\t\t\t\t\t\tdiv模式左滑菜单\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" open-type=\"common\" href=\"examples/offcanvas-drag-down.html\">\r\n\t\t\t\t\t\t\t\tdiv模式下拉菜单\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/pagination.html\">\r\n\t\t\t\t\t\tpagination（分页）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/picker.html\">\r\n\t\t\t\t\t\tpicker（选择器）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/popovers.html\">\r\n\t\t\t\t\t\tpopover（弹出菜单）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/progressbar.html\">\r\n\t\t\t\t\t\tprogress bar（进度条）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a href=\"#\" class=\"mui-navigate-right\">pull to refresh（下拉刷新和上拉加载更多）</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/pullrefresh_main.html\">\r\n\t\t\t\t\t\t\t\t双webview模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/pullrefresh.html\">\r\n\t\t\t\t\t\t\t\t单webview模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/pullrefresh_with_tab.html\">\r\n\t\t\t\t\t\t\t\t选项卡切换+下拉刷新（div模式）\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/radio.html\">\r\n\t\t\t\t\t\tradio（单选框）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/range.html\">\r\n\t\t\t\t\t\trange（滑块）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/switches.html\">\r\n\t\t\t\t\t\tswitch（开关）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\ttab bar（选项卡）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/tabbar.html\">\r\n\t\t\t\t\t\t\t\t底部选项卡-div模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/tab-webview-main.html\">\r\n\t\t\t\t\t\t\t\t底部选项卡-webview模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/tabbar-with-submenus.html\">\r\n\t\t\t\t\t\t\t\t底部选项卡-二级菜单(div)\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/tab-with-segmented-control.html\">\r\n\t\t\t\t\t\t\t\t顶部选项卡-div模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/tab-with-viewpagerindicator.html\">\r\n\t\t\t\t\t\t\t\t顶部选项卡-可左右拖动(div)\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-wid=\"viewgroup\" href=\"examples/tab-top-webview-main.html\">\r\n\t\t\t\t\t\t\t\t顶部选项卡-可左右拖动(webview)\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/tab-with-segmented-control-vertical.html\">\r\n\t\t\t\t\t\t\t\t左侧选项卡-div模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/tab-vertical-scroll.html\">\r\n\t\t\t\t\t\t\t\t左侧选项卡-div模式-联动高亮\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/typography.html\">\r\n\t\t\t\t\t\ttypography（文字）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-divider\">模板</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/ad.html\">\r\n\t\t\t\t\t\tadvertisement（广告演示）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/echarts.html\">\r\n\t\t\t\t\t\tchart（EChart图表）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/im-chat.html\">\r\n\t\t\t\t\t\tchat（聊天窗口）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/feedback.html\">\r\n\t\t\t\t\t\tfeedback（问题反馈）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a href=\"javascript:;\" class=\"mui-navigate-right\">image viewer（图片预览）</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/imageviewer.html\">H5模式</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell mui-plus-visible\" id=\"preview_image_native\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/imageviewer-native.html\">native模式</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell mui-collapse\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"#\">\r\n\t\t\t\t\t\tindexed list（索引列表）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/indexed-list.html\">\r\n\t\t\t\t\t\t\t\t展示模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/indexed-list-select.html\">\r\n\t\t\t\t\t\t\t\t选择模式\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/lazyload-image.html\">\r\n\t\t\t\t\t\tlazyload（懒加载）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" href=\"examples/locker-dom.html\">\r\n\t\t\t\t\t\tlocker（手势图案锁屏）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/login.html\">\r\n\t\t\t\t\t\tlogin（登录）\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" open-type=\"common\" href=\"examples/setting.html\">\r\n\t\t\t\t\t\tsetting（设置）- div窗体切换示例\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li class=\"mui-table-view-cell\">\r\n\t\t\t\t\t<a class=\"mui-navigate-right\" data-title-type=\"native\" href=\"examples/best-practices/list-to-detail/listview.html\">\r\n\t\t\t\t\t\t列表到详情最佳实践\r\n\t\t\t\t\t</a>\r\n\t\t\t\t</li>\r\n\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t\t<script src=\"js/mui.min.js\"></script>\r\n\t\t<script src=\"js/update.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\r\n\t\t<script>\r\n\t\t\tmui.init({\r\n\t\t\t\tstatusBarBackground: '#f7f7f7'\r\n\t\t\t});\r\n\t\t\tvar aniShow = \"pop-in\";\r\n\t\t\tvar menu = null,\r\n\t\t\t\tshowMenu = false;\r\n\t\t\tvar isInTransition = false;\r\n\t\t\tvar _self;\r\n\t\t\t//只有ios支持的功能需要在Android平台隐藏；\r\n\t\t\tif(mui.os.android) {\r\n\t\t\t\tvar list = document.querySelectorAll('.ios-only');\r\n\t\t\t\tif(list) {\r\n\t\t\t\t\tfor(var i = 0; i < list.length; i++) {\r\n\t\t\t\t\t\tlist[i].style.display = 'none';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//Android平台暂时使用slide-in-right动画\r\n\t\t\t\tif(parseFloat(mui.os.version) < 4.4) {\r\n\t\t\t\t\taniShow = \"slide-in-right\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//初始化，并预加载webview模式的选项卡\t\t\t\r\n\t\t\tfunction preload() {\r\n\r\n\t\t\t\tvar menu_style = {\r\n\t\t\t\t\tleft: \"-70%\",\r\n\t\t\t\t\twidth: '70%',\r\n\t\t\t\t\tpopGesture: \"none\",\r\n\t\t\t\t\trender:\"always\"\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(mui.os.ios) {\r\n\t\t\t\t\tmenu_style.zindex = -1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//处理侧滑导航，为了避免和子页面初始化等竞争资源，延迟加载侧滑页面；\r\n\t\t\t\tmenu = mui.openWindow({\r\n\t\t\t\t\tid: 'index-menu',\r\n\t\t\t\t\turl: 'index-menu.html',\r\n\t\t\t\t\tstyles: menu_style,\r\n\t\t\t\t\tshow: {\r\n\t\t\t\t\t\taniShow: 'none'\r\n\t\t\t\t\t},\r\n\t\t\t\t\twaiting: {\r\n\t\t\t\t\t\tautoShow: false\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tmui.plusReady(function() {\r\n\t\t\t\t//读取本地存储，检查是否为首次启动\r\n\t\t\t\tvar showGuide = plus.storage.getItem(\"lauchFlag\");\r\n\t\t\t\t//仅支持竖屏显示\r\n\t\t\t\tplus.screen.lockOrientation(\"portrait-primary\");\r\n\t\t\t\tif(showGuide) {\r\n\t\t\t\t\t//有值，说明已经显示过了，无需显示；\r\n\t\t\t\t\t//关闭splash页面；\r\n\t\t\t\t\tplus.navigator.closeSplashscreen();\r\n\t\t\t\t\tplus.navigator.setFullscreen(false);\r\n\t\t\t\t\t//预加载\r\n\t\t\t\t\tpreload();\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//显示启动导航\r\n\t\t\t\t\tmui.openWindow({\r\n\t\t\t\t\t\tid: 'guide',\r\n\t\t\t\t\t\turl: 'examples/guide.html',\r\n\t\t\t\t\t\tstyles: {\r\n\t\t\t\t\t\t\tpopGesture: \"none\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshow: {\r\n\t\t\t\t\t\t\taniShow: 'none'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\twaiting: {\r\n\t\t\t\t\t\t\tautoShow: false\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t//延迟的原因：优先打开启动导航页面，避免资源争夺\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t//预加载\r\n\t\t\t\t\t\tpreload();\r\n\t\t\t\t\t}, 200);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//绘制顶部图标\r\n\t\t\t\t_self = plus.webview.currentWebview();\r\n\t\t\t\tvar titleView = _self.getNavigationbar();\r\n\r\n\t\t\t\tif(!titleView) {\r\n\t\t\t\t\ttitleView = plus.webview.getLaunchWebview().getNavigationbar();\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttitleView.drawRect(\"#cccccc\", {\r\n\t\t\t\t\ttop: \"43px\",\r\n\t\t\t\t\theight:\"1px\",\r\n\t\t\t\t\tleft: \"0px\"\r\n\t\t\t\t}); //绘制底部边线\r\n\r\n\t\t\t\t//开启回弹\r\n\t\t\t\t_self.setStyle({\r\n\t\t\t\t\tbounce: \"vertical\",\r\n\t\t\t\t\tbounceBackground:\"#efeff4\",\r\n\t\t\t\t\tpopGesture:'none'//首页有侧滑菜单，因此屏蔽首页的侧滑关闭功能\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//绘制左上角menu图标\r\n\t\t\t\tvar bitmap_menu = new plus.nativeObj.Bitmap(\"menu\");\r\n\t\t\t\tbitmap_menu.loadBase64Data(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAKlBMVEUAAAAAev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8Aev8AAABINtoqAAAADHRSTlMA/fPQ0M/e3tzs7OjgY5g4AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+EBFwEbOGGUPSIAAAA2SURBVDjLY2AY9oDxDBZwCJ8EswsW4DrQ/hicgPTQZSvHAioG2h+DE5AeupyrsIDVA+0PqgEAu36BkQX5nBQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTctMDEtMjNUMDE6Mjc6NTYrMDg6MDC8FK1uAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE3LTAxLTIzVDAxOjI3OjU2KzA4OjAwzUkV0gAAAABJRU5ErkJggg==\");\r\n\t\t\t\ttitleView.drawBitmap(bitmap_menu, {}, {\r\n\t\t\t\t\ttop: \"10px\",\r\n\t\t\t\t\tleft: \"10px\",\r\n\t\t\t\t\twidth: \"24px\",\r\n\t\t\t\t\theight: \"24px\"\r\n\t\t\t\t});\r\n\r\n\t\t\t\tvar about_left = window.innerWidth - 34;\r\n\t\t\t\tvar bitmap = new plus.nativeObj.Bitmap(\"about\");\r\n\t\t\t\tbitmap.loadBase64Data(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAHdElNRQfhARcBEina5qaZAAAB10lEQVRYw+2XP0vDQBiHf7Wlq63gLAgV/QpOBnEpZHJycBL6Lq2LuFq6Kn6AK2RxKQhu2aS0XQT7DbTgLqVGR4OlDtL8uUu8S3Lape/Wy93z5L1r7t4DlrHoyCXrznZRhEsPWgUsj0PUsC886KKNO5pmErAKWjj6tUsHTRqlErBVXONEaR4snNFHQgHbQ08JPg+D+lHNKzH4ekI80GP1qOZ8JP4ClwnxAFA1Z/ZAQcDqqfAAYJgTexhuEtYg8dwLkvBacAJWxlsmPACskeP/4Bf5KjOeY4QyYBU8SwZv4x2P2JD02vI/vXAGLcnAFj3RK06lOQQ4gQwU5v8FO3Bxg2OpwluHQqDxQDpsE5/SPnPWrThFNcXBKuGxvClieXxpFACFn43cz6CsNMygHAylnmV+ita1vr/HS5qBeggZFDULirzA1SxweYGTEhQXDi8YaxaM/zsDmqKrEd+d10vBraKtUeCxgoJ7jQKPFRCQg44mfMc/NJOeaGoRd6LRCJYGvBWsVflD/1yDIMTgBOQobsbxYVDoixJqU+qjkQHf4EvgiNLRHpqzlHk0SairIotfe2BOUE3x9hFl26LuBwD1UVL+01ooReMXe0fzJH95yxRkie/Jy5DGN/4FegI2+YzMAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTAxLTIzVDAxOjE4OjQxKzA4OjAw3fCu8gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wMS0yM1QwMToxODo0MSswODowMKytFk4AAAAASUVORK5CYII=\");\r\n\t\t\t\ttitleView.drawBitmap(bitmap, {}, {\r\n\t\t\t\t\ttop: \"10px\",\r\n\t\t\t\t\tleft: about_left + \"px\",\r\n\t\t\t\t\twidth: \"24px\",\r\n\t\t\t\t\theight: \"24px\"\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttitleView.interceptTouchEvent(true);\r\n\t\t\t\ttitleView.addEventListener(\"click\", function(e) {\r\n\t\t\t\t\tvar x = e.clientX;\r\n\t\t\t\t\tif(x < 44) { //触发menu菜单\r\n\t\t\t\t\t\tvar _left = parseInt(_self.getStyle().left);\r\n\t\t\t\t\t\tif(_left > 0) { //处于显示状态\r\n\t\t\t\t\t\t\tcloseMenu();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\topenMenu();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if(x > about_left) { //触发关于页面\r\n\t\t\t\t\t\tvar aniShow = mui.os.plus ? \"slide-in-right\" : \"zoom-fade-out\";\r\n\t\t\t\t\t\tmui.openWindow({\r\n\t\t\t\t\t\t\turl: \"examples/info.html\",\r\n\t\t\t\t\t\t\tid: \"info\",\r\n\t\t\t\t\t\t\tstyles: {\r\n\t\t\t\t\t\t\t\tpopGesture: \"close\",\r\n\t\t\t\t\t\t\t\tstatusbar: {\r\n\t\t\t\t\t\t\t\t\tbackground: \"#f7f7f7\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tshow: {\r\n\t\t\t\t\t\t\t\taniShow: aniShow,\r\n\t\t\t\t\t\t\t\tduration: 300\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}, false);\r\n\r\n\t\t\t\t//启用侧滑拖拽操作，延时的原因是menu页是延时创建的，所以这里需要相应延时\r\n\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t_self.drag({\r\n\t\t\t\t\t\tdirection: \"right\",\r\n\t\t\t\t\t\tmoveMode: \"followFinger\"\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\tview: menu,\r\n\t\t\t\t\t\tmoveMode: \"follow\"\r\n\t\t\t\t\t}, function(e) {\r\n\t\t\t\t\t\t//console.log(JSON.stringify(e));\r\n\t\t\t\t\t});\r\n\t\t\t\t}, 350);\r\n\r\n\r\n\t\t\t\t// 原生图片预览仅新版本runtime支持，若引擎不支持，则隐藏；\r\n\t\t\t\tif(!plus.nativeUI.previewImage) {\r\n\t\t\t\t\tvar previewImageNativeElem = document.getElementById('preview_image_native');\r\n\t\t\t\t\tpreviewImageNativeElem.className = previewImageNativeElem.className.replace('mui-plus-visible', 'mui-hidden');\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t});\r\n\t\t\t//主列表点击事件\r\n\t\t\tmui('#list').on('tap', 'a', function() {\r\n\t\t\t\tvar href = this.getAttribute('href');\r\n\t\t\t\t\r\n\t\t\t\t//非plus环境，直接走href跳转\r\n\t\t\t\tif(!mui.os.plus) {\r\n\t\t\t\t\tlocation.href = href;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar id = this.getAttribute(\"data-wid\");\r\n\t\t\t\tif(!id) {\r\n\t\t\t\t\tid = href;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(href && ~href.indexOf('.html')) {\r\n\t\t\t\t\t//打开窗口的相关参数\r\n\t\t\t\t\tvar options = {\r\n\t\t\t\t\t\tstyles:{\r\n\t\t\t\t\t\t\tpopGesture: \"close\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\textras:{}\r\n\t\t\t\t\t};\r\n\t\t\t\t\t//如下场景不适用下拉回弹：\r\n\t\t\t\t\t//1、单webview下拉刷新；2、底部有fixed定位的div的页面\r\n\t\t\t\t\tif(!~id.indexOf('pullrefresh.html') && !~href.indexOf(\"examples/tabbar.html\") && !~href.indexOf(\"list-to-detail/listview.html\")) {\r\n\t\t\t\t\t\toptions.styles.bounce = \"vertical\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//图标页面需要启动硬件加速\r\n\t\t\t\t\tif(~id.indexOf('icons.html') || ~id.indexOf(\"echarts.html\")) {\r\n\t\t\t\t\t\toptions.styles.hardwareAccelerated = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(~id.indexOf('im-chat.html')) {\r\n\t\t\t\t\t\toptions.extras.acceleration = \"none\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar titleType = this.getAttribute(\"data-title-type\");\r\n\t\t\t\t\tif(titleType && titleType.indexOf(\"native\") > -1) {//原生导航\r\n\t\t\t\t\t\toptions.styles.titleNView = {\r\n\t\t\t\t\t\t\tautoBackButton:true,\r\n\t\t\t\t\t\t\tbackgroundColor:'#f7f7f7',\r\n\t\t\t\t\t\t\ttitleText:this.innerHTML.trim(),\r\n\t\t\t\t\t\t\tsplitLine: {\r\n\t\t\t\t\t\t\t\tcolor: '#cccccc'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\toptions.show = {\r\n\t\t\t\t\t\t\tevent:'loaded'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//有原生标题的情况下，就不需要waiting框了\r\n\t\t\t\t\t\toptions.waiting = {\r\n\t\t\t\t\t\t\tautoShow:false\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//透明渐变导航,增加类型设置\r\n\t\t\t\t\t\tif(titleType == \"transparent_native\") {\r\n\t\t\t\t\t\t\toptions.styles.titleNView.type = \"transparent\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//处理原生图片轮播\r\n\t\t\t\t\t\tif(~id.indexOf(\"slider-native.html\")) {\r\n\t\t\t\t\t\t\toptions.styles.subNViews = [{ //配置图片轮播\r\n\t\t\t\t\t\t\t\tid: 'slider-native',\r\n\t\t\t\t\t\t\t\ttype: 'ImageSlider',\r\n\t\t\t\t\t\t\t\tstyles: {\r\n\t\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\theight: '200px',\r\n\t\t\t\t\t\t\t\t\tposition: 'static',\r\n\t\t\t\t\t\t\t\t\tloop: true,\r\n\t\t\t\t\t\t\t\t\timages: [{\r\n\t\t\t\t\t\t\t\t\t\tsrc: '_www/images/yuantiao.jpg',\r\n\t\t\t\t\t\t\t\t\t\twidth: '100%'\r\n\t\t\t\t\t\t\t\t\t}, {\r\n\t\t\t\t\t\t\t\t\t\tsrc: '_www/images/shuijiao.jpg',\r\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\t\t\t}, {\r\n\t\t\t\t\t\t\t\t\t\tsrc: '_www/images/muwu.jpg',\r\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\t\t\t}, {\r\n\t\t\t\t\t\t\t\t\t\tsrc: '_www/images/cbd.jpg',\r\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\t//非原生导航，需要设置顶部状态栏占位\r\n\t\t\t\t\t\toptions.styles.statusbar = {\r\n\t\t\t\t\t\t\tbackground: \"#f7f7f7\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t//侧滑菜单需动态控制一下zindex值；\r\n\t\t\t\t\tif(~id.indexOf('offcanvas-')) {\r\n\t\t\t\t\t\toptions.styles.zindex = 9998;\r\n\t\t\t\t\t\toptions.styles.popGesture = ~id.indexOf('offcanvas-with-right') ? \"close\" : \"none\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(id && id == \"viewgroup\") { //强制启用截屏\r\n\t\t\t\t\t\toptions.extras.acceleration = \"capture\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//打开新窗口\r\n\t\t\t\t\tmui.openWindow(href,id,options);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t/**\r\n\t\t\t * 显示侧滑菜单\r\n\t\t\t */\r\n\t\t\tfunction openMenu() {\r\n\t\t\t\tplus.webview.startAnimation({\r\n\t\t\t\t\t\t'view': _self,\r\n\t\t\t\t\t\t'styles': {\r\n\t\t\t\t\t\t\t'fromLeft': '0',\r\n\t\t\t\t\t\t\t'toLeft': \"70%\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'action': 'show'\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\t'view': menu,\r\n\t\t\t\t\t\t'styles': {\r\n\t\t\t\t\t\t\t'fromLeft': \"-70%\",\r\n\t\t\t\t\t\t\t'toLeft': '0'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'action': 'show'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfunction(e) {\r\n\t\t\t\t\t\t//console.log(JSON.stringify(e));\r\n\t\t\t\t\t\tif(e.id == menu.id) { //侧滑菜单打开\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}.bind(this)\r\n\t\t\t\t)\r\n\t\t\t};\r\n\t\t\t/**\r\n\t\t\t * 关闭菜单\r\n\t\t\t */\r\n\t\t\tfunction closeMenu() {\r\n\t\t\t\tplus.webview.startAnimation({\r\n\t\t\t\t\t\t'view': _self,\r\n\t\t\t\t\t\t'styles': {\r\n\t\t\t\t\t\t\t'fromLeft': '70%',\r\n\t\t\t\t\t\t\t'toLeft': \"0\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'action': 'show'\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\t'view': menu,\r\n\t\t\t\t\t\t'styles': {\r\n\t\t\t\t\t\t\t'fromLeft': \"0\",\r\n\t\t\t\t\t\t\t'toLeft': '-70%'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'action': 'show'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfunction(e) {\r\n\t\t\t\t\t\tconsole.log(JSON.stringify(e));\r\n\t\t\t\t\t\tif(e.id == _self.id) {}\r\n\t\t\t\t\t}.bind(this)\r\n\t\t\t\t)\r\n\t\t\t};\r\n\t\t\twindow.addEventListener(\"menu:close\", closeMenu);\r\n\r\n\t\t\tvar _toast = false;\r\n\r\n\t\t\tmui.back = function() {\r\n\t\t\t\tif(parseInt(_self.getStyle().left) > 0) {\r\n\t\t\t\t\tcloseMenu();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!_toast || !_toast.isVisible()) {\r\n\t\t\t\t\t_toast = mui.toast('再按一次返回键退出<br>点此可&nbsp;<span style=\"border-bottom:1px solid #fff\" onclick=\"openFeedback();\">反馈意见</span>', {\r\n\t\t\t\t\t\tduration: 'long',\r\n\t\t\t\t\t\ttype: 'div'\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tplus.runtime.quit();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//重写mui.menu方法，Android版本menu按键按下可自动打开、关闭侧滑菜单；\r\n\t\t\tmui.menu = function() {\r\n\t\t\t\tif(parseInt(_self.getStyle().left) > 0) {\r\n\t\t\t\t\tcloseMenu();\r\n\t\t\t\t} else {\r\n\t\t\t\t\topenMenu();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/**\r\n\t\t\t * 退出时提醒用户参加问题反馈\r\n\t\t\t */\r\n\t\t\tfunction openFeedback() {\r\n\t\t\t\tplus.nativeUI.showWaiting();\r\n\t\t\t\tvar _p = plus.os.name === 'Android' ? 'a' : plus.os.name === 'iOS' ? 'i' : '';\r\n\t\t\t\t//TODO：这里使用的是FeedBack云地址，开发者也可以替换为本地页面地址\r\n\t\t\t\tvar url = 'http://stream.dcloud.net.cn/wap2app/feedback?p=' + _p;\r\n\t\t\t\turl += \"&plus_version=\" + plus.runtime.innerVersion;\r\n\t\t\t\turl += \"&vendor=\" + plus.device.vendor;\r\n\t\t\t\turl += \"&md=\" + plus.device.model;\r\n\t\t\t\t/*****开发者需修改的部分   开始*****/\r\n\t\t\t\turl += \"&app_name=HelloMUI&app_vendor=DCloud\";\r\n\t\t\t\t//如有本地关于页面，则填写关于页面的路径\r\n\t\t\t\t//注意：需要_www/前缀\r\n\t\t\t\turl += \"&about=_www/examples/info.html\";\r\n\t\t\t\t/*****开发者需修改的部分   结束*****/\r\n\r\n\t\t\t\tvar feedbackWebview = plus.webview.create(url, \"__W2A_FEEDBACK\");\r\n\t\t\t\tfeedbackWebview.addEventListener('titleUpdate', function() {\r\n\t\t\t\t\tplus.nativeUI.closeWaiting();\r\n\t\t\t\t\tfeedbackWebview.show('slide-in-right', 300);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t</script>\r\n\t</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "examples/hello-mui/js/95516.js",
    "content": "(function() {\n\tvar headerElem = document.querySelector(\".header\");\n\tif (headerElem) {\n\t\tvar backElem = document.getElementById(\"back-95516\");\n\t\tif (backElem) {\n\t\t\treturn;\n\t\t}\n\t\tvar 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);}\";\n\t\tvar headElem = document.head || document.getElementsByTagName('head')[0];\n\t\tvar styleElem = document.createElement('style');\n\t\tstyleElem.type = 'text/css';\n\t\tif (styleElem.styleSheet) {\n\t\t\tstyleElem.styleSheet.cssText = css;\n\t\t} else {\n\t\t\tstyleElem.appendChild(document.createTextNode(css));\n\t\t}\n\t\theadElem.appendChild(styleElem);\n\n\t\tbackElem = document.createElement('a');\n\t\tbackElem.id = 'back-95516';\n\t\theaderElem.appendChild(backElem);\n\t\tbackElem.addEventListener('click', function(e) {\n\t\t\tplus.webview.currentWebview().close('auto');\n\t\t}, true);\n\t\tdocument.addEventListener('plusready', function() {\n\t\t\tplus.key.addEventListener('backbutton', function() {\n\t\t\t\tplus.webview.currentWebview().close('auto');\n\t\t\t})\n\t\t});\n\t}\n\n})();"
  },
  {
    "path": "examples/hello-mui/js/arttmpl.js",
    "content": "/*!art-template - Template Engine | http://aui.github.com/artTemplate/*/\n!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(/<!--[\\w\\W]*?-->/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={\"<\":\"&#60;\",\">\":\"&#62;\",'\"':\"&#34;\",\"'\":\"&#39;\",\"&\":\"&#38;\"},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}();"
  },
  {
    "path": "examples/hello-mui/js/beecloud.js",
    "content": "var beecloud = {};\nvar channels = null;\nvar w = null;\n\nbeecloud.payReq = function(data, cbsuccess, cberror) {\n\tdoPay(data, cbsuccess, cberror);\n};\n\nbeecloud.genBillNo = function() {\n\tvar d = new Date();\n\tvar vYear = d.getFullYear();\n\tvar vMon = d.getMonth() + 1;\n\tvar vDay = d.getDate();\n\tvar h = d.getHours();\n\tvar m = d.getMinutes();\n\tvar se = d.getSeconds();\n\tvar ms = d.getMilliseconds();\n\tbillno = \"\" + 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;\n\treturn billno;\n};\n\nmui.plusReady(function() {\n\t//配置业务支持的支付通道，支付需要服务端支持，在BeeCloud上支持支付宝支付和微信支付；\n\tvar support_channel = ['alipay'];\n\tif(!mui.os.stream){//流应用下暂不支持微信SDK支付\n\t\tsupport_channel.push('wxpay');\n\t}\n\tplus.payment.getChannels(function(s) {\n\t\tvar oauthArea = document.querySelector('.oauth-area');\n\t\tfor (var i = 0; i < s.length; i++) {\n\t\t\tif(s[i].serviceReady){\n\t\t\t\tif(~support_channel.indexOf(s[i].id)){\n\t\t\t\t\tvar btn = document.createElement('div');\n\t\t\t\t\tbtn.setAttribute('id', s[i].id);\n\t\t\t\t\tbtn.className = 'mui-btn mui-btn-blue mui-btn-block pay';\n\t\t\t\t\tbtn.innerText = s[i].description+'支付'\n\t\t\t\t\toauthArea.appendChild(btn);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tchannels = s;\n\t}, function(e) {\n\t\tconsole.log(\"获取支付渠道信权限失败:\" + e.message);\n\t});\n});\n\nfunction getRandomHost() {\n\tvar hosts = ['https://apibj.beecloud.cn',\n\t\t'https://apihz.beecloud.cn',\n\t\t'https://apisz.beecloud.cn',\n\t\t'https://apiqd.beecloud.cn'\n\t];\n\treturn \"\" + hosts[parseInt(3 * Math.random())] + \"/2/rest/app/bill\";\n}\n\n/**\n * 获取支付通道\n * \n */\nfunction getPayChannel(bc_channel) {\n\tvar dc_channel_id = '';\n\tswitch (bc_channel) {\n\t\tcase 'ALI_APP':\n\t\t\tdc_channel_id = 'alipay';\n\t\t\tbreak;\n\t\tcase 'WX_APP':\n\t\t\tdc_channel_id = 'wxpay';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t} \n\n\tfor (var i in channels) {\n\t\tif (channels[i].id == dc_channel_id) {\n\t\t\treturn channels[i];\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction doPay(payData, cbsuccess, cberror) {\n\tif (w) return; \n \t\n\tw = plus.nativeUI.showWaiting();\n\tmui.ajax(getRandomHost(), {\n\t\tdata: JSON.stringify(payData),\n\t\ttype: 'post',\n\t\tdataType: 'json',\n\t\tcontentType: \"application/json\",\n\t\tsuccess: function(data) {\n\t\t\tw.close();\n\t\t\tw = null;\n\t\t\tvar paySrc = '';\n\n\t\t\tif (data.result_code == 0) {\n\t\t\t\tvar payChannel = getPayChannel(payData.channel);\n\t\t\t\tif (payChannel) {\n\t\t\t\t\tif (payChannel.id === 'alipay') {\n\t\t\t\t\t\tpaySrc = data.order_string;\n\t\t\t\t\t} else if (payChannel.id === 'wxpay') {\n\t\t\t\t\t\tvar statement = {};\n\t\t\t\t\t\tstatement.appid = data.app_id;\n\t\t\t\t\t\tstatement.noncestr = data.nonce_str;\n\t\t\t\t\t\tstatement.package = data.package;\n\t\t\t\t\t\tstatement.partnerid = data.partner_id;\n\t\t\t\t\t\tstatement.prepayid = data.prepay_id;\n\t\t\t\t\t\tstatement.timestamp = parseInt(data.timestamp);\n\t\t\t\t\t\tstatement.sign = data.pay_sign;\n\t\t\t\t\t\tpaySrc = JSON.stringify(statement);\n\t\t\t\t\t}\n\t\t\t\t\tplus.payment.request(payChannel, paySrc, cbsuccess, cberror);\n\t\t\t\t} else if (payData.channel == 'UN_WEB') {\n\t\t\t\t\t//银联在线支付\n\t\t\t\t\tvar web = plus.webview.create('', \"beecloudPay\",{\n\t\t\t\t\t\tstatusbar:{\n\t\t\t\t\t\t\tbackground: \"#f7f7f7\"\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t//注入JS，解决银联界面返回的问题\n\t\t\t\t\tweb.setJsFile('_www/js/95516.js');\n\t\t\t\t\tweb.addEventListener('loaded', function() {\n\t\t\t\t\t\tif (!web.isVisible()) {\n\t\t\t\t\t\t\tweb.show();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tweb.loadData(data.html);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar bcError = {};\n\t\t\t\tbcError.code = data.result_code;\n\t\t\t\tbcError.message = data.result_msg + \":\" + data.err_detail;\n\t\t\t\tcberror(bcError);\n\t\t\t}\n\t\t},\n\t\terror: function(xhr, errorType, error) {\n\t\t\tw.close();\n\t\t\tw = null;\n\t\t\tcberror(error);\n\t\t}\n\t});\n}"
  },
  {
    "path": "examples/hello-mui/js/city.data-3.js",
    "content": "var cityData3 = [{\n\tvalue: '110000',\n\ttext: '北京市',\n\tchildren: [{\n\t\tvalue: \"110100\",\n\t\ttext: \"北京市\",\n\t\tchildren: [{\n\t\t\tvalue: \"110101\",\n\t\t\ttext: \"东城区\"\n\t\t}, {\n\t\t\tvalue: \"110102\",\n\t\t\ttext: \"西城区\"\n\t\t}, {\n\t\t\tvalue: \"110103\",\n\t\t\ttext: \"崇文区\"\n\t\t}, {\n\t\t\tvalue: \"110104\",\n\t\t\ttext: \"宣武区\"\n\t\t}, {\n\t\t\tvalue: \"110105\",\n\t\t\ttext: \"朝阳区\"\n\t\t}, {\n\t\t\tvalue: \"110106\",\n\t\t\ttext: \"丰台区\"\n\t\t}, {\n\t\t\tvalue: \"110107\",\n\t\t\ttext: \"石景山区\"\n\t\t}, {\n\t\t\tvalue: \"110108\",\n\t\t\ttext: \"海淀区\"\n\t\t}, {\n\t\t\tvalue: \"110109\",\n\t\t\ttext: \"门头沟区\"\n\t\t}, {\n\t\t\tvalue: \"110111\",\n\t\t\ttext: \"房山区\"\n\t\t}, {\n\t\t\tvalue: \"110112\",\n\t\t\ttext: \"通州区\"\n\t\t}, {\n\t\t\tvalue: \"110113\",\n\t\t\ttext: \"顺义区\"\n\t\t}, {\n\t\t\tvalue: \"110114\",\n\t\t\ttext: \"昌平区\"\n\t\t}, {\n\t\t\tvalue: \"110115\",\n\t\t\ttext: \"大兴区\"\n\t\t}, {\n\t\t\tvalue: \"110116\",\n\t\t\ttext: \"怀柔区\"\n\t\t}, {\n\t\t\tvalue: \"110117\",\n\t\t\ttext: \"平谷区\"\n\t\t}, {\n\t\t\tvalue: \"110228\",\n\t\t\ttext: \"密云县\"\n\t\t}, {\n\t\t\tvalue: \"110229\",\n\t\t\ttext: \"延庆县\"\n\t\t}, {\n\t\t\tvalue: \"110230\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '120000',\n\ttext: '天津市',\n\tchildren: [{\n\t\tvalue: \"120100\",\n\t\ttext: \"天津市\",\n\t\tchildren: [{\n\t\t\tvalue: \"120101\",\n\t\t\ttext: \"和平区\"\n\t\t}, {\n\t\t\tvalue: \"120102\",\n\t\t\ttext: \"河东区\"\n\t\t}, {\n\t\t\tvalue: \"120103\",\n\t\t\ttext: \"河西区\"\n\t\t}, {\n\t\t\tvalue: \"120104\",\n\t\t\ttext: \"南开区\"\n\t\t}, {\n\t\t\tvalue: \"120105\",\n\t\t\ttext: \"河北区\"\n\t\t}, {\n\t\t\tvalue: \"120106\",\n\t\t\ttext: \"红桥区\"\n\t\t}, {\n\t\t\tvalue: \"120107\",\n\t\t\ttext: \"塘沽区\"\n\t\t}, {\n\t\t\tvalue: \"120108\",\n\t\t\ttext: \"汉沽区\"\n\t\t}, {\n\t\t\tvalue: \"120109\",\n\t\t\ttext: \"大港区\"\n\t\t}, {\n\t\t\tvalue: \"120110\",\n\t\t\ttext: \"东丽区\"\n\t\t}, {\n\t\t\tvalue: \"120111\",\n\t\t\ttext: \"西青区\"\n\t\t}, {\n\t\t\tvalue: \"120112\",\n\t\t\ttext: \"津南区\"\n\t\t}, {\n\t\t\tvalue: \"120113\",\n\t\t\ttext: \"北辰区\"\n\t\t}, {\n\t\t\tvalue: \"120114\",\n\t\t\ttext: \"武清区\"\n\t\t}, {\n\t\t\tvalue: \"120115\",\n\t\t\ttext: \"宝坻区\"\n\t\t}, {\n\t\t\tvalue: \"120116\",\n\t\t\ttext: \"滨海新区\"\n\t\t}, {\n\t\t\tvalue: \"120221\",\n\t\t\ttext: \"宁河县\"\n\t\t}, {\n\t\t\tvalue: \"120223\",\n\t\t\ttext: \"静海县\"\n\t\t}, {\n\t\t\tvalue: \"120225\",\n\t\t\ttext: \"蓟县\"\n\t\t}, {\n\t\t\tvalue: \"120226\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '130000',\n\ttext: '河北省',\n\tchildren: [{\n\t\tvalue: \"130100\",\n\t\ttext: \"石家庄市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130102\",\n\t\t\ttext: \"长安区\"\n\t\t}, {\n\t\t\tvalue: \"130103\",\n\t\t\ttext: \"桥东区\"\n\t\t}, {\n\t\t\tvalue: \"130104\",\n\t\t\ttext: \"桥西区\"\n\t\t}, {\n\t\t\tvalue: \"130105\",\n\t\t\ttext: \"新华区\"\n\t\t}, {\n\t\t\tvalue: \"130107\",\n\t\t\ttext: \"井陉矿区\"\n\t\t}, {\n\t\t\tvalue: \"130108\",\n\t\t\ttext: \"裕华区\"\n\t\t}, {\n\t\t\tvalue: \"130121\",\n\t\t\ttext: \"井陉县\"\n\t\t}, {\n\t\t\tvalue: \"130123\",\n\t\t\ttext: \"正定县\"\n\t\t}, {\n\t\t\tvalue: \"130124\",\n\t\t\ttext: \"栾城县\"\n\t\t}, {\n\t\t\tvalue: \"130125\",\n\t\t\ttext: \"行唐县\"\n\t\t}, {\n\t\t\tvalue: \"130126\",\n\t\t\ttext: \"灵寿县\"\n\t\t}, {\n\t\t\tvalue: \"130127\",\n\t\t\ttext: \"高邑县\"\n\t\t}, {\n\t\t\tvalue: \"130128\",\n\t\t\ttext: \"深泽县\"\n\t\t}, {\n\t\t\tvalue: \"130129\",\n\t\t\ttext: \"赞皇县\"\n\t\t}, {\n\t\t\tvalue: \"130130\",\n\t\t\ttext: \"无极县\"\n\t\t}, {\n\t\t\tvalue: \"130131\",\n\t\t\ttext: \"平山县\"\n\t\t}, {\n\t\t\tvalue: \"130132\",\n\t\t\ttext: \"元氏县\"\n\t\t}, {\n\t\t\tvalue: \"130133\",\n\t\t\ttext: \"赵县\"\n\t\t}, {\n\t\t\tvalue: \"130181\",\n\t\t\ttext: \"辛集市\"\n\t\t}, {\n\t\t\tvalue: \"130182\",\n\t\t\ttext: \"藁城市\"\n\t\t}, {\n\t\t\tvalue: \"130183\",\n\t\t\ttext: \"晋州市\"\n\t\t}, {\n\t\t\tvalue: \"130184\",\n\t\t\ttext: \"新乐市\"\n\t\t}, {\n\t\t\tvalue: \"130185\",\n\t\t\ttext: \"鹿泉市\"\n\t\t}, {\n\t\t\tvalue: \"130186\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"130200\",\n\t\ttext: \"唐山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130202\",\n\t\t\ttext: \"路南区\"\n\t\t}, {\n\t\t\tvalue: \"130203\",\n\t\t\ttext: \"路北区\"\n\t\t}, {\n\t\t\tvalue: \"130204\",\n\t\t\ttext: \"古冶区\"\n\t\t}, {\n\t\t\tvalue: \"130205\",\n\t\t\ttext: \"开平区\"\n\t\t}, {\n\t\t\tvalue: \"130207\",\n\t\t\ttext: \"丰南区\"\n\t\t}, {\n\t\t\tvalue: \"130208\",\n\t\t\ttext: \"丰润区\"\n\t\t}, {\n\t\t\tvalue: \"130223\",\n\t\t\ttext: \"滦县\"\n\t\t}, {\n\t\t\tvalue: \"130224\",\n\t\t\ttext: \"滦南县\"\n\t\t}, {\n\t\t\tvalue: \"130225\",\n\t\t\ttext: \"乐亭县\"\n\t\t}, {\n\t\t\tvalue: \"130227\",\n\t\t\ttext: \"迁西县\"\n\t\t}, {\n\t\t\tvalue: \"130229\",\n\t\t\ttext: \"玉田县\"\n\t\t}, {\n\t\t\tvalue: \"130230\",\n\t\t\ttext: \"唐海县\"\n\t\t}, {\n\t\t\tvalue: \"130281\",\n\t\t\ttext: \"遵化市\"\n\t\t}, {\n\t\t\tvalue: \"130283\",\n\t\t\ttext: \"迁安市\"\n\t\t}, {\n\t\t\tvalue: \"130284\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"130300\",\n\t\ttext: \"秦皇岛市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130302\",\n\t\t\ttext: \"海港区\"\n\t\t}, {\n\t\t\tvalue: \"130303\",\n\t\t\ttext: \"山海关区\"\n\t\t}, {\n\t\t\tvalue: \"130304\",\n\t\t\ttext: \"北戴河区\"\n\t\t}, {\n\t\t\tvalue: \"130321\",\n\t\t\ttext: \"青龙满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"130322\",\n\t\t\ttext: \"昌黎县\"\n\t\t}, {\n\t\t\tvalue: \"130323\",\n\t\t\ttext: \"抚宁县\"\n\t\t}, {\n\t\t\tvalue: \"130324\",\n\t\t\ttext: \"卢龙县\"\n\t\t}, {\n\t\t\tvalue: \"130398\",\n\t\t\ttext: \"其它区\"\n\t\t}, {\n\t\t\tvalue: \"130399\",\n\t\t\ttext: \"经济技术开发区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"130400\",\n\t\ttext: \"邯郸市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130402\",\n\t\t\ttext: \"邯山区\"\n\t\t}, {\n\t\t\tvalue: \"130403\",\n\t\t\ttext: \"丛台区\"\n\t\t}, {\n\t\t\tvalue: \"130404\",\n\t\t\ttext: \"复兴区\"\n\t\t}, {\n\t\t\tvalue: \"130406\",\n\t\t\ttext: \"峰峰矿区\"\n\t\t}, {\n\t\t\tvalue: \"130421\",\n\t\t\ttext: \"邯郸县\"\n\t\t}, {\n\t\t\tvalue: \"130423\",\n\t\t\ttext: \"临漳县\"\n\t\t}, {\n\t\t\tvalue: \"130424\",\n\t\t\ttext: \"成安县\"\n\t\t}, {\n\t\t\tvalue: \"130425\",\n\t\t\ttext: \"大名县\"\n\t\t}, {\n\t\t\tvalue: \"130426\",\n\t\t\ttext: \"涉县\"\n\t\t}, {\n\t\t\tvalue: \"130427\",\n\t\t\ttext: \"磁县\"\n\t\t}, {\n\t\t\tvalue: \"130428\",\n\t\t\ttext: \"肥乡县\"\n\t\t}, {\n\t\t\tvalue: \"130429\",\n\t\t\ttext: \"永年县\"\n\t\t}, {\n\t\t\tvalue: \"130430\",\n\t\t\ttext: \"邱县\"\n\t\t}, {\n\t\t\tvalue: \"130431\",\n\t\t\ttext: \"鸡泽县\"\n\t\t}, {\n\t\t\tvalue: \"130432\",\n\t\t\ttext: \"广平县\"\n\t\t}, {\n\t\t\tvalue: \"130433\",\n\t\t\ttext: \"馆陶县\"\n\t\t}, {\n\t\t\tvalue: \"130434\",\n\t\t\ttext: \"魏县\"\n\t\t}, {\n\t\t\tvalue: \"130435\",\n\t\t\ttext: \"曲周县\"\n\t\t}, {\n\t\t\tvalue: \"130481\",\n\t\t\ttext: \"武安市\"\n\t\t}, {\n\t\t\tvalue: \"130482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"130500\",\n\t\ttext: \"邢台市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130502\",\n\t\t\ttext: \"桥东区\"\n\t\t}, {\n\t\t\tvalue: \"130503\",\n\t\t\ttext: \"桥西区\"\n\t\t}, {\n\t\t\tvalue: \"130521\",\n\t\t\ttext: \"邢台县\"\n\t\t}, {\n\t\t\tvalue: \"130522\",\n\t\t\ttext: \"临城县\"\n\t\t}, {\n\t\t\tvalue: \"130523\",\n\t\t\ttext: \"内丘县\"\n\t\t}, {\n\t\t\tvalue: \"130524\",\n\t\t\ttext: \"柏乡县\"\n\t\t}, {\n\t\t\tvalue: \"130525\",\n\t\t\ttext: \"隆尧县\"\n\t\t}, {\n\t\t\tvalue: \"130526\",\n\t\t\ttext: \"任县\"\n\t\t}, {\n\t\t\tvalue: \"130527\",\n\t\t\ttext: \"南和县\"\n\t\t}, {\n\t\t\tvalue: \"130528\",\n\t\t\ttext: \"宁晋县\"\n\t\t}, {\n\t\t\tvalue: \"130529\",\n\t\t\ttext: \"巨鹿县\"\n\t\t}, {\n\t\t\tvalue: \"130530\",\n\t\t\ttext: \"新河县\"\n\t\t}, {\n\t\t\tvalue: \"130531\",\n\t\t\ttext: \"广宗县\"\n\t\t}, {\n\t\t\tvalue: \"130532\",\n\t\t\ttext: \"平乡县\"\n\t\t}, {\n\t\t\tvalue: \"130533\",\n\t\t\ttext: \"威县\"\n\t\t}, {\n\t\t\tvalue: \"130534\",\n\t\t\ttext: \"清河县\"\n\t\t}, {\n\t\t\tvalue: \"130535\",\n\t\t\ttext: \"临西县\"\n\t\t}, {\n\t\t\tvalue: \"130581\",\n\t\t\ttext: \"南宫市\"\n\t\t}, {\n\t\t\tvalue: \"130582\",\n\t\t\ttext: \"沙河市\"\n\t\t}, {\n\t\t\tvalue: \"130583\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"130600\",\n\t\ttext: \"保定市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130602\",\n\t\t\ttext: \"新市区\"\n\t\t}, {\n\t\t\tvalue: \"130603\",\n\t\t\ttext: \"北市区\"\n\t\t}, {\n\t\t\tvalue: \"130604\",\n\t\t\ttext: \"南市区\"\n\t\t}, {\n\t\t\tvalue: \"130621\",\n\t\t\ttext: \"满城县\"\n\t\t}, {\n\t\t\tvalue: \"130622\",\n\t\t\ttext: \"清苑县\"\n\t\t}, {\n\t\t\tvalue: \"130623\",\n\t\t\ttext: \"涞水县\"\n\t\t}, {\n\t\t\tvalue: \"130624\",\n\t\t\ttext: \"阜平县\"\n\t\t}, {\n\t\t\tvalue: \"130625\",\n\t\t\ttext: \"徐水县\"\n\t\t}, {\n\t\t\tvalue: \"130626\",\n\t\t\ttext: \"定兴县\"\n\t\t}, {\n\t\t\tvalue: \"130627\",\n\t\t\ttext: \"唐县\"\n\t\t}, {\n\t\t\tvalue: \"130628\",\n\t\t\ttext: \"高阳县\"\n\t\t}, {\n\t\t\tvalue: \"130629\",\n\t\t\ttext: \"容城县\"\n\t\t}, {\n\t\t\tvalue: \"130630\",\n\t\t\ttext: \"涞源县\"\n\t\t}, {\n\t\t\tvalue: \"130631\",\n\t\t\ttext: \"望都县\"\n\t\t}, {\n\t\t\tvalue: \"130632\",\n\t\t\ttext: \"安新县\"\n\t\t}, {\n\t\t\tvalue: \"130633\",\n\t\t\ttext: \"易县\"\n\t\t}, {\n\t\t\tvalue: \"130634\",\n\t\t\ttext: \"曲阳县\"\n\t\t}, {\n\t\t\tvalue: \"130635\",\n\t\t\ttext: \"蠡县\"\n\t\t}, {\n\t\t\tvalue: \"130636\",\n\t\t\ttext: \"顺平县\"\n\t\t}, {\n\t\t\tvalue: \"130637\",\n\t\t\ttext: \"博野县\"\n\t\t}, {\n\t\t\tvalue: \"130638\",\n\t\t\ttext: \"雄县\"\n\t\t}, {\n\t\t\tvalue: \"130681\",\n\t\t\ttext: \"涿州市\"\n\t\t}, {\n\t\t\tvalue: \"130682\",\n\t\t\ttext: \"定州市\"\n\t\t}, {\n\t\t\tvalue: \"130683\",\n\t\t\ttext: \"安国市\"\n\t\t}, {\n\t\t\tvalue: \"130684\",\n\t\t\ttext: \"高碑店市\"\n\t\t}, {\n\t\t\tvalue: \"130698\",\n\t\t\ttext: \"高开区\"\n\t\t}, {\n\t\t\tvalue: \"130699\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"130700\",\n\t\ttext: \"张家口市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130702\",\n\t\t\ttext: \"桥东区\"\n\t\t}, {\n\t\t\tvalue: \"130703\",\n\t\t\ttext: \"桥西区\"\n\t\t}, {\n\t\t\tvalue: \"130705\",\n\t\t\ttext: \"宣化区\"\n\t\t}, {\n\t\t\tvalue: \"130706\",\n\t\t\ttext: \"下花园区\"\n\t\t}, {\n\t\t\tvalue: \"130721\",\n\t\t\ttext: \"宣化县\"\n\t\t}, {\n\t\t\tvalue: \"130722\",\n\t\t\ttext: \"张北县\"\n\t\t}, {\n\t\t\tvalue: \"130723\",\n\t\t\ttext: \"康保县\"\n\t\t}, {\n\t\t\tvalue: \"130724\",\n\t\t\ttext: \"沽源县\"\n\t\t}, {\n\t\t\tvalue: \"130725\",\n\t\t\ttext: \"尚义县\"\n\t\t}, {\n\t\t\tvalue: \"130726\",\n\t\t\ttext: \"蔚县\"\n\t\t}, {\n\t\t\tvalue: \"130727\",\n\t\t\ttext: \"阳原县\"\n\t\t}, {\n\t\t\tvalue: \"130728\",\n\t\t\ttext: \"怀安县\"\n\t\t}, {\n\t\t\tvalue: \"130729\",\n\t\t\ttext: \"万全县\"\n\t\t}, {\n\t\t\tvalue: \"130730\",\n\t\t\ttext: \"怀来县\"\n\t\t}, {\n\t\t\tvalue: \"130731\",\n\t\t\ttext: \"涿鹿县\"\n\t\t}, {\n\t\t\tvalue: \"130732\",\n\t\t\ttext: \"赤城县\"\n\t\t}, {\n\t\t\tvalue: \"130733\",\n\t\t\ttext: \"崇礼县\"\n\t\t}, {\n\t\t\tvalue: \"130734\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"130800\",\n\t\ttext: \"承德市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130802\",\n\t\t\ttext: \"双桥区\"\n\t\t}, {\n\t\t\tvalue: \"130803\",\n\t\t\ttext: \"双滦区\"\n\t\t}, {\n\t\t\tvalue: \"130804\",\n\t\t\ttext: \"鹰手营子矿区\"\n\t\t}, {\n\t\t\tvalue: \"130821\",\n\t\t\ttext: \"承德县\"\n\t\t}, {\n\t\t\tvalue: \"130822\",\n\t\t\ttext: \"兴隆县\"\n\t\t}, {\n\t\t\tvalue: \"130823\",\n\t\t\ttext: \"平泉县\"\n\t\t}, {\n\t\t\tvalue: \"130824\",\n\t\t\ttext: \"滦平县\"\n\t\t}, {\n\t\t\tvalue: \"130825\",\n\t\t\ttext: \"隆化县\"\n\t\t}, {\n\t\t\tvalue: \"130826\",\n\t\t\ttext: \"丰宁满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"130827\",\n\t\t\ttext: \"宽城满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"130828\",\n\t\t\ttext: \"围场满族蒙古族自治县\"\n\t\t}, {\n\t\t\tvalue: \"130829\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"130900\",\n\t\ttext: \"沧州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"130902\",\n\t\t\ttext: \"新华区\"\n\t\t}, {\n\t\t\tvalue: \"130903\",\n\t\t\ttext: \"运河区\"\n\t\t}, {\n\t\t\tvalue: \"130921\",\n\t\t\ttext: \"沧县\"\n\t\t}, {\n\t\t\tvalue: \"130922\",\n\t\t\ttext: \"青县\"\n\t\t}, {\n\t\t\tvalue: \"130923\",\n\t\t\ttext: \"东光县\"\n\t\t}, {\n\t\t\tvalue: \"130924\",\n\t\t\ttext: \"海兴县\"\n\t\t}, {\n\t\t\tvalue: \"130925\",\n\t\t\ttext: \"盐山县\"\n\t\t}, {\n\t\t\tvalue: \"130926\",\n\t\t\ttext: \"肃宁县\"\n\t\t}, {\n\t\t\tvalue: \"130927\",\n\t\t\ttext: \"南皮县\"\n\t\t}, {\n\t\t\tvalue: \"130928\",\n\t\t\ttext: \"吴桥县\"\n\t\t}, {\n\t\t\tvalue: \"130929\",\n\t\t\ttext: \"献县\"\n\t\t}, {\n\t\t\tvalue: \"130930\",\n\t\t\ttext: \"孟村回族自治县\"\n\t\t}, {\n\t\t\tvalue: \"130981\",\n\t\t\ttext: \"泊头市\"\n\t\t}, {\n\t\t\tvalue: \"130982\",\n\t\t\ttext: \"任丘市\"\n\t\t}, {\n\t\t\tvalue: \"130983\",\n\t\t\ttext: \"黄骅市\"\n\t\t}, {\n\t\t\tvalue: \"130984\",\n\t\t\ttext: \"河间市\"\n\t\t}, {\n\t\t\tvalue: \"130985\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"131000\",\n\t\ttext: \"廊坊市\",\n\t\tchildren: [{\n\t\t\tvalue: \"131002\",\n\t\t\ttext: \"安次区\"\n\t\t}, {\n\t\t\tvalue: \"131003\",\n\t\t\ttext: \"广阳区\"\n\t\t}, {\n\t\t\tvalue: \"131022\",\n\t\t\ttext: \"固安县\"\n\t\t}, {\n\t\t\tvalue: \"131023\",\n\t\t\ttext: \"永清县\"\n\t\t}, {\n\t\t\tvalue: \"131024\",\n\t\t\ttext: \"香河县\"\n\t\t}, {\n\t\t\tvalue: \"131025\",\n\t\t\ttext: \"大城县\"\n\t\t}, {\n\t\t\tvalue: \"131026\",\n\t\t\ttext: \"文安县\"\n\t\t}, {\n\t\t\tvalue: \"131028\",\n\t\t\ttext: \"大厂回族自治县\"\n\t\t}, {\n\t\t\tvalue: \"131051\",\n\t\t\ttext: \"开发区\"\n\t\t}, {\n\t\t\tvalue: \"131052\",\n\t\t\ttext: \"燕郊经济技术开发区\"\n\t\t}, {\n\t\t\tvalue: \"131081\",\n\t\t\ttext: \"霸州市\"\n\t\t}, {\n\t\t\tvalue: \"131082\",\n\t\t\ttext: \"三河市\"\n\t\t}, {\n\t\t\tvalue: \"131083\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"131100\",\n\t\ttext: \"衡水市\",\n\t\tchildren: [{\n\t\t\tvalue: \"131102\",\n\t\t\ttext: \"桃城区\"\n\t\t}, {\n\t\t\tvalue: \"131121\",\n\t\t\ttext: \"枣强县\"\n\t\t}, {\n\t\t\tvalue: \"131122\",\n\t\t\ttext: \"武邑县\"\n\t\t}, {\n\t\t\tvalue: \"131123\",\n\t\t\ttext: \"武强县\"\n\t\t}, {\n\t\t\tvalue: \"131124\",\n\t\t\ttext: \"饶阳县\"\n\t\t}, {\n\t\t\tvalue: \"131125\",\n\t\t\ttext: \"安平县\"\n\t\t}, {\n\t\t\tvalue: \"131126\",\n\t\t\ttext: \"故城县\"\n\t\t}, {\n\t\t\tvalue: \"131127\",\n\t\t\ttext: \"景县\"\n\t\t}, {\n\t\t\tvalue: \"131128\",\n\t\t\ttext: \"阜城县\"\n\t\t}, {\n\t\t\tvalue: \"131181\",\n\t\t\ttext: \"冀州市\"\n\t\t}, {\n\t\t\tvalue: \"131182\",\n\t\t\ttext: \"深州市\"\n\t\t}, {\n\t\t\tvalue: \"131183\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '140000',\n\ttext: '山西省',\n\tchildren: [{\n\t\tvalue: \"140100\",\n\t\ttext: \"太原市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140105\",\n\t\t\ttext: \"小店区\"\n\t\t}, {\n\t\t\tvalue: \"140106\",\n\t\t\ttext: \"迎泽区\"\n\t\t}, {\n\t\t\tvalue: \"140107\",\n\t\t\ttext: \"杏花岭区\"\n\t\t}, {\n\t\t\tvalue: \"140108\",\n\t\t\ttext: \"尖草坪区\"\n\t\t}, {\n\t\t\tvalue: \"140109\",\n\t\t\ttext: \"万柏林区\"\n\t\t}, {\n\t\t\tvalue: \"140110\",\n\t\t\ttext: \"晋源区\"\n\t\t}, {\n\t\t\tvalue: \"140121\",\n\t\t\ttext: \"清徐县\"\n\t\t}, {\n\t\t\tvalue: \"140122\",\n\t\t\ttext: \"阳曲县\"\n\t\t}, {\n\t\t\tvalue: \"140123\",\n\t\t\ttext: \"娄烦县\"\n\t\t}, {\n\t\t\tvalue: \"140181\",\n\t\t\ttext: \"古交市\"\n\t\t}, {\n\t\t\tvalue: \"140182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"140200\",\n\t\ttext: \"大同市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140202\",\n\t\t\ttext: \"城区\"\n\t\t}, {\n\t\t\tvalue: \"140203\",\n\t\t\ttext: \"矿区\"\n\t\t}, {\n\t\t\tvalue: \"140211\",\n\t\t\ttext: \"南郊区\"\n\t\t}, {\n\t\t\tvalue: \"140212\",\n\t\t\ttext: \"新荣区\"\n\t\t}, {\n\t\t\tvalue: \"140221\",\n\t\t\ttext: \"阳高县\"\n\t\t}, {\n\t\t\tvalue: \"140222\",\n\t\t\ttext: \"天镇县\"\n\t\t}, {\n\t\t\tvalue: \"140223\",\n\t\t\ttext: \"广灵县\"\n\t\t}, {\n\t\t\tvalue: \"140224\",\n\t\t\ttext: \"灵丘县\"\n\t\t}, {\n\t\t\tvalue: \"140225\",\n\t\t\ttext: \"浑源县\"\n\t\t}, {\n\t\t\tvalue: \"140226\",\n\t\t\ttext: \"左云县\"\n\t\t}, {\n\t\t\tvalue: \"140227\",\n\t\t\ttext: \"大同县\"\n\t\t}, {\n\t\t\tvalue: \"140228\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"140300\",\n\t\ttext: \"阳泉市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140302\",\n\t\t\ttext: \"城区\"\n\t\t}, {\n\t\t\tvalue: \"140303\",\n\t\t\ttext: \"矿区\"\n\t\t}, {\n\t\t\tvalue: \"140311\",\n\t\t\ttext: \"郊区\"\n\t\t}, {\n\t\t\tvalue: \"140321\",\n\t\t\ttext: \"平定县\"\n\t\t}, {\n\t\t\tvalue: \"140322\",\n\t\t\ttext: \"盂县\"\n\t\t}, {\n\t\t\tvalue: \"140323\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"140400\",\n\t\ttext: \"长治市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140421\",\n\t\t\ttext: \"长治县\"\n\t\t}, {\n\t\t\tvalue: \"140423\",\n\t\t\ttext: \"襄垣县\"\n\t\t}, {\n\t\t\tvalue: \"140424\",\n\t\t\ttext: \"屯留县\"\n\t\t}, {\n\t\t\tvalue: \"140425\",\n\t\t\ttext: \"平顺县\"\n\t\t}, {\n\t\t\tvalue: \"140426\",\n\t\t\ttext: \"黎城县\"\n\t\t}, {\n\t\t\tvalue: \"140427\",\n\t\t\ttext: \"壶关县\"\n\t\t}, {\n\t\t\tvalue: \"140428\",\n\t\t\ttext: \"长子县\"\n\t\t}, {\n\t\t\tvalue: \"140429\",\n\t\t\ttext: \"武乡县\"\n\t\t}, {\n\t\t\tvalue: \"140430\",\n\t\t\ttext: \"沁县\"\n\t\t}, {\n\t\t\tvalue: \"140431\",\n\t\t\ttext: \"沁源县\"\n\t\t}, {\n\t\t\tvalue: \"140481\",\n\t\t\ttext: \"潞城市\"\n\t\t}, {\n\t\t\tvalue: \"140482\",\n\t\t\ttext: \"城区\"\n\t\t}, {\n\t\t\tvalue: \"140483\",\n\t\t\ttext: \"郊区\"\n\t\t}, {\n\t\t\tvalue: \"140484\",\n\t\t\ttext: \"高新区\"\n\t\t}, {\n\t\t\tvalue: \"140485\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"140500\",\n\t\ttext: \"晋城市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140502\",\n\t\t\ttext: \"城区\"\n\t\t}, {\n\t\t\tvalue: \"140521\",\n\t\t\ttext: \"沁水县\"\n\t\t}, {\n\t\t\tvalue: \"140522\",\n\t\t\ttext: \"阳城县\"\n\t\t}, {\n\t\t\tvalue: \"140524\",\n\t\t\ttext: \"陵川县\"\n\t\t}, {\n\t\t\tvalue: \"140525\",\n\t\t\ttext: \"泽州县\"\n\t\t}, {\n\t\t\tvalue: \"140581\",\n\t\t\ttext: \"高平市\"\n\t\t}, {\n\t\t\tvalue: \"140582\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"140600\",\n\t\ttext: \"朔州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140602\",\n\t\t\ttext: \"朔城区\"\n\t\t}, {\n\t\t\tvalue: \"140603\",\n\t\t\ttext: \"平鲁区\"\n\t\t}, {\n\t\t\tvalue: \"140621\",\n\t\t\ttext: \"山阴县\"\n\t\t}, {\n\t\t\tvalue: \"140622\",\n\t\t\ttext: \"应县\"\n\t\t}, {\n\t\t\tvalue: \"140623\",\n\t\t\ttext: \"右玉县\"\n\t\t}, {\n\t\t\tvalue: \"140624\",\n\t\t\ttext: \"怀仁县\"\n\t\t}, {\n\t\t\tvalue: \"140625\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"140700\",\n\t\ttext: \"晋中市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140702\",\n\t\t\ttext: \"榆次区\"\n\t\t}, {\n\t\t\tvalue: \"140721\",\n\t\t\ttext: \"榆社县\"\n\t\t}, {\n\t\t\tvalue: \"140722\",\n\t\t\ttext: \"左权县\"\n\t\t}, {\n\t\t\tvalue: \"140723\",\n\t\t\ttext: \"和顺县\"\n\t\t}, {\n\t\t\tvalue: \"140724\",\n\t\t\ttext: \"昔阳县\"\n\t\t}, {\n\t\t\tvalue: \"140725\",\n\t\t\ttext: \"寿阳县\"\n\t\t}, {\n\t\t\tvalue: \"140726\",\n\t\t\ttext: \"太谷县\"\n\t\t}, {\n\t\t\tvalue: \"140727\",\n\t\t\ttext: \"祁县\"\n\t\t}, {\n\t\t\tvalue: \"140728\",\n\t\t\ttext: \"平遥县\"\n\t\t}, {\n\t\t\tvalue: \"140729\",\n\t\t\ttext: \"灵石县\"\n\t\t}, {\n\t\t\tvalue: \"140781\",\n\t\t\ttext: \"介休市\"\n\t\t}, {\n\t\t\tvalue: \"140782\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"140800\",\n\t\ttext: \"运城市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140802\",\n\t\t\ttext: \"盐湖区\"\n\t\t}, {\n\t\t\tvalue: \"140821\",\n\t\t\ttext: \"临猗县\"\n\t\t}, {\n\t\t\tvalue: \"140822\",\n\t\t\ttext: \"万荣县\"\n\t\t}, {\n\t\t\tvalue: \"140823\",\n\t\t\ttext: \"闻喜县\"\n\t\t}, {\n\t\t\tvalue: \"140824\",\n\t\t\ttext: \"稷山县\"\n\t\t}, {\n\t\t\tvalue: \"140825\",\n\t\t\ttext: \"新绛县\"\n\t\t}, {\n\t\t\tvalue: \"140826\",\n\t\t\ttext: \"绛县\"\n\t\t}, {\n\t\t\tvalue: \"140827\",\n\t\t\ttext: \"垣曲县\"\n\t\t}, {\n\t\t\tvalue: \"140828\",\n\t\t\ttext: \"夏县\"\n\t\t}, {\n\t\t\tvalue: \"140829\",\n\t\t\ttext: \"平陆县\"\n\t\t}, {\n\t\t\tvalue: \"140830\",\n\t\t\ttext: \"芮城县\"\n\t\t}, {\n\t\t\tvalue: \"140881\",\n\t\t\ttext: \"永济市\"\n\t\t}, {\n\t\t\tvalue: \"140882\",\n\t\t\ttext: \"河津市\"\n\t\t}, {\n\t\t\tvalue: \"140883\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"140900\",\n\t\ttext: \"忻州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"140902\",\n\t\t\ttext: \"忻府区\"\n\t\t}, {\n\t\t\tvalue: \"140921\",\n\t\t\ttext: \"定襄县\"\n\t\t}, {\n\t\t\tvalue: \"140922\",\n\t\t\ttext: \"五台县\"\n\t\t}, {\n\t\t\tvalue: \"140923\",\n\t\t\ttext: \"代县\"\n\t\t}, {\n\t\t\tvalue: \"140924\",\n\t\t\ttext: \"繁峙县\"\n\t\t}, {\n\t\t\tvalue: \"140925\",\n\t\t\ttext: \"宁武县\"\n\t\t}, {\n\t\t\tvalue: \"140926\",\n\t\t\ttext: \"静乐县\"\n\t\t}, {\n\t\t\tvalue: \"140927\",\n\t\t\ttext: \"神池县\"\n\t\t}, {\n\t\t\tvalue: \"140928\",\n\t\t\ttext: \"五寨县\"\n\t\t}, {\n\t\t\tvalue: \"140929\",\n\t\t\ttext: \"岢岚县\"\n\t\t}, {\n\t\t\tvalue: \"140930\",\n\t\t\ttext: \"河曲县\"\n\t\t}, {\n\t\t\tvalue: \"140931\",\n\t\t\ttext: \"保德县\"\n\t\t}, {\n\t\t\tvalue: \"140932\",\n\t\t\ttext: \"偏关县\"\n\t\t}, {\n\t\t\tvalue: \"140981\",\n\t\t\ttext: \"原平市\"\n\t\t}, {\n\t\t\tvalue: \"140982\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"141000\",\n\t\ttext: \"临汾市\",\n\t\tchildren: [{\n\t\t\tvalue: \"141002\",\n\t\t\ttext: \"尧都区\"\n\t\t}, {\n\t\t\tvalue: \"141021\",\n\t\t\ttext: \"曲沃县\"\n\t\t}, {\n\t\t\tvalue: \"141022\",\n\t\t\ttext: \"翼城县\"\n\t\t}, {\n\t\t\tvalue: \"141023\",\n\t\t\ttext: \"襄汾县\"\n\t\t}, {\n\t\t\tvalue: \"141024\",\n\t\t\ttext: \"洪洞县\"\n\t\t}, {\n\t\t\tvalue: \"141025\",\n\t\t\ttext: \"古县\"\n\t\t}, {\n\t\t\tvalue: \"141026\",\n\t\t\ttext: \"安泽县\"\n\t\t}, {\n\t\t\tvalue: \"141027\",\n\t\t\ttext: \"浮山县\"\n\t\t}, {\n\t\t\tvalue: \"141028\",\n\t\t\ttext: \"吉县\"\n\t\t}, {\n\t\t\tvalue: \"141029\",\n\t\t\ttext: \"乡宁县\"\n\t\t}, {\n\t\t\tvalue: \"141030\",\n\t\t\ttext: \"大宁县\"\n\t\t}, {\n\t\t\tvalue: \"141031\",\n\t\t\ttext: \"隰县\"\n\t\t}, {\n\t\t\tvalue: \"141032\",\n\t\t\ttext: \"永和县\"\n\t\t}, {\n\t\t\tvalue: \"141033\",\n\t\t\ttext: \"蒲县\"\n\t\t}, {\n\t\t\tvalue: \"141034\",\n\t\t\ttext: \"汾西县\"\n\t\t}, {\n\t\t\tvalue: \"141081\",\n\t\t\ttext: \"侯马市\"\n\t\t}, {\n\t\t\tvalue: \"141082\",\n\t\t\ttext: \"霍州市\"\n\t\t}, {\n\t\t\tvalue: \"141083\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"141100\",\n\t\ttext: \"吕梁市\",\n\t\tchildren: [{\n\t\t\tvalue: \"141102\",\n\t\t\ttext: \"离石区\"\n\t\t}, {\n\t\t\tvalue: \"141121\",\n\t\t\ttext: \"文水县\"\n\t\t}, {\n\t\t\tvalue: \"141122\",\n\t\t\ttext: \"交城县\"\n\t\t}, {\n\t\t\tvalue: \"141123\",\n\t\t\ttext: \"兴县\"\n\t\t}, {\n\t\t\tvalue: \"141124\",\n\t\t\ttext: \"临县\"\n\t\t}, {\n\t\t\tvalue: \"141125\",\n\t\t\ttext: \"柳林县\"\n\t\t}, {\n\t\t\tvalue: \"141126\",\n\t\t\ttext: \"石楼县\"\n\t\t}, {\n\t\t\tvalue: \"141127\",\n\t\t\ttext: \"岚县\"\n\t\t}, {\n\t\t\tvalue: \"141128\",\n\t\t\ttext: \"方山县\"\n\t\t}, {\n\t\t\tvalue: \"141129\",\n\t\t\ttext: \"中阳县\"\n\t\t}, {\n\t\t\tvalue: \"141130\",\n\t\t\ttext: \"交口县\"\n\t\t}, {\n\t\t\tvalue: \"141181\",\n\t\t\ttext: \"孝义市\"\n\t\t}, {\n\t\t\tvalue: \"141182\",\n\t\t\ttext: \"汾阳市\"\n\t\t}, {\n\t\t\tvalue: \"141183\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '150000',\n\ttext: '内蒙古',\n\tchildren: [{\n\t\tvalue: \"150100\",\n\t\ttext: \"呼和浩特市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150102\",\n\t\t\ttext: \"新城区\"\n\t\t}, {\n\t\t\tvalue: \"150103\",\n\t\t\ttext: \"回民区\"\n\t\t}, {\n\t\t\tvalue: \"150104\",\n\t\t\ttext: \"玉泉区\"\n\t\t}, {\n\t\t\tvalue: \"150105\",\n\t\t\ttext: \"赛罕区\"\n\t\t}, {\n\t\t\tvalue: \"150121\",\n\t\t\ttext: \"土默特左旗\"\n\t\t}, {\n\t\t\tvalue: \"150122\",\n\t\t\ttext: \"托克托县\"\n\t\t}, {\n\t\t\tvalue: \"150123\",\n\t\t\ttext: \"和林格尔县\"\n\t\t}, {\n\t\t\tvalue: \"150124\",\n\t\t\ttext: \"清水河县\"\n\t\t}, {\n\t\t\tvalue: \"150125\",\n\t\t\ttext: \"武川县\"\n\t\t}, {\n\t\t\tvalue: \"150126\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"150200\",\n\t\ttext: \"包头市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150202\",\n\t\t\ttext: \"东河区\"\n\t\t}, {\n\t\t\tvalue: \"150203\",\n\t\t\ttext: \"昆都仑区\"\n\t\t}, {\n\t\t\tvalue: \"150204\",\n\t\t\ttext: \"青山区\"\n\t\t}, {\n\t\t\tvalue: \"150205\",\n\t\t\ttext: \"石拐区\"\n\t\t}, {\n\t\t\tvalue: \"150206\",\n\t\t\ttext: \"白云矿区\"\n\t\t}, {\n\t\t\tvalue: \"150207\",\n\t\t\ttext: \"九原区\"\n\t\t}, {\n\t\t\tvalue: \"150221\",\n\t\t\ttext: \"土默特右旗\"\n\t\t}, {\n\t\t\tvalue: \"150222\",\n\t\t\ttext: \"固阳县\"\n\t\t}, {\n\t\t\tvalue: \"150223\",\n\t\t\ttext: \"达尔罕茂明安联合旗\"\n\t\t}, {\n\t\t\tvalue: \"150224\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"150300\",\n\t\ttext: \"乌海市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150302\",\n\t\t\ttext: \"海勃湾区\"\n\t\t}, {\n\t\t\tvalue: \"150303\",\n\t\t\ttext: \"海南区\"\n\t\t}, {\n\t\t\tvalue: \"150304\",\n\t\t\ttext: \"乌达区\"\n\t\t}, {\n\t\t\tvalue: \"150305\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"150400\",\n\t\ttext: \"赤峰市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150402\",\n\t\t\ttext: \"红山区\"\n\t\t}, {\n\t\t\tvalue: \"150403\",\n\t\t\ttext: \"元宝山区\"\n\t\t}, {\n\t\t\tvalue: \"150404\",\n\t\t\ttext: \"松山区\"\n\t\t}, {\n\t\t\tvalue: \"150421\",\n\t\t\ttext: \"阿鲁科尔沁旗\"\n\t\t}, {\n\t\t\tvalue: \"150422\",\n\t\t\ttext: \"巴林左旗\"\n\t\t}, {\n\t\t\tvalue: \"150423\",\n\t\t\ttext: \"巴林右旗\"\n\t\t}, {\n\t\t\tvalue: \"150424\",\n\t\t\ttext: \"林西县\"\n\t\t}, {\n\t\t\tvalue: \"150425\",\n\t\t\ttext: \"克什克腾旗\"\n\t\t}, {\n\t\t\tvalue: \"150426\",\n\t\t\ttext: \"翁牛特旗\"\n\t\t}, {\n\t\t\tvalue: \"150428\",\n\t\t\ttext: \"喀喇沁旗\"\n\t\t}, {\n\t\t\tvalue: \"150429\",\n\t\t\ttext: \"宁城县\"\n\t\t}, {\n\t\t\tvalue: \"150430\",\n\t\t\ttext: \"敖汉旗\"\n\t\t}, {\n\t\t\tvalue: \"150431\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"150500\",\n\t\ttext: \"通辽市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150502\",\n\t\t\ttext: \"科尔沁区\"\n\t\t}, {\n\t\t\tvalue: \"150521\",\n\t\t\ttext: \"科尔沁左翼中旗\"\n\t\t}, {\n\t\t\tvalue: \"150522\",\n\t\t\ttext: \"科尔沁左翼后旗\"\n\t\t}, {\n\t\t\tvalue: \"150523\",\n\t\t\ttext: \"开鲁县\"\n\t\t}, {\n\t\t\tvalue: \"150524\",\n\t\t\ttext: \"库伦旗\"\n\t\t}, {\n\t\t\tvalue: \"150525\",\n\t\t\ttext: \"奈曼旗\"\n\t\t}, {\n\t\t\tvalue: \"150526\",\n\t\t\ttext: \"扎鲁特旗\"\n\t\t}, {\n\t\t\tvalue: \"150581\",\n\t\t\ttext: \"霍林郭勒市\"\n\t\t}, {\n\t\t\tvalue: \"150582\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"150600\",\n\t\ttext: \"鄂尔多斯市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150602\",\n\t\t\ttext: \"东胜区\"\n\t\t}, {\n\t\t\tvalue: \"150621\",\n\t\t\ttext: \"达拉特旗\"\n\t\t}, {\n\t\t\tvalue: \"150622\",\n\t\t\ttext: \"准格尔旗\"\n\t\t}, {\n\t\t\tvalue: \"150623\",\n\t\t\ttext: \"鄂托克前旗\"\n\t\t}, {\n\t\t\tvalue: \"150624\",\n\t\t\ttext: \"鄂托克旗\"\n\t\t}, {\n\t\t\tvalue: \"150625\",\n\t\t\ttext: \"杭锦旗\"\n\t\t}, {\n\t\t\tvalue: \"150626\",\n\t\t\ttext: \"乌审旗\"\n\t\t}, {\n\t\t\tvalue: \"150627\",\n\t\t\ttext: \"伊金霍洛旗\"\n\t\t}, {\n\t\t\tvalue: \"150628\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"150700\",\n\t\ttext: \"呼伦贝尔市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150702\",\n\t\t\ttext: \"海拉尔区\"\n\t\t}, {\n\t\t\tvalue: \"150721\",\n\t\t\ttext: \"阿荣旗\"\n\t\t}, {\n\t\t\tvalue: \"150722\",\n\t\t\ttext: \"莫力达瓦达斡尔族自治旗\"\n\t\t}, {\n\t\t\tvalue: \"150723\",\n\t\t\ttext: \"鄂伦春自治旗\"\n\t\t}, {\n\t\t\tvalue: \"150724\",\n\t\t\ttext: \"鄂温克族自治旗\"\n\t\t}, {\n\t\t\tvalue: \"150725\",\n\t\t\ttext: \"陈巴尔虎旗\"\n\t\t}, {\n\t\t\tvalue: \"150726\",\n\t\t\ttext: \"新巴尔虎左旗\"\n\t\t}, {\n\t\t\tvalue: \"150727\",\n\t\t\ttext: \"新巴尔虎右旗\"\n\t\t}, {\n\t\t\tvalue: \"150781\",\n\t\t\ttext: \"满洲里市\"\n\t\t}, {\n\t\t\tvalue: \"150782\",\n\t\t\ttext: \"牙克石市\"\n\t\t}, {\n\t\t\tvalue: \"150783\",\n\t\t\ttext: \"扎兰屯市\"\n\t\t}, {\n\t\t\tvalue: \"150784\",\n\t\t\ttext: \"额尔古纳市\"\n\t\t}, {\n\t\t\tvalue: \"150785\",\n\t\t\ttext: \"根河市\"\n\t\t}, {\n\t\t\tvalue: \"150786\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"150800\",\n\t\ttext: \"巴彦淖尔市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150802\",\n\t\t\ttext: \"临河区\"\n\t\t}, {\n\t\t\tvalue: \"150821\",\n\t\t\ttext: \"五原县\"\n\t\t}, {\n\t\t\tvalue: \"150822\",\n\t\t\ttext: \"磴口县\"\n\t\t}, {\n\t\t\tvalue: \"150823\",\n\t\t\ttext: \"乌拉特前旗\"\n\t\t}, {\n\t\t\tvalue: \"150824\",\n\t\t\ttext: \"乌拉特中旗\"\n\t\t}, {\n\t\t\tvalue: \"150825\",\n\t\t\ttext: \"乌拉特后旗\"\n\t\t}, {\n\t\t\tvalue: \"150826\",\n\t\t\ttext: \"杭锦后旗\"\n\t\t}, {\n\t\t\tvalue: \"150827\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"150900\",\n\t\ttext: \"乌兰察布市\",\n\t\tchildren: [{\n\t\t\tvalue: \"150902\",\n\t\t\ttext: \"集宁区\"\n\t\t}, {\n\t\t\tvalue: \"150921\",\n\t\t\ttext: \"卓资县\"\n\t\t}, {\n\t\t\tvalue: \"150922\",\n\t\t\ttext: \"化德县\"\n\t\t}, {\n\t\t\tvalue: \"150923\",\n\t\t\ttext: \"商都县\"\n\t\t}, {\n\t\t\tvalue: \"150924\",\n\t\t\ttext: \"兴和县\"\n\t\t}, {\n\t\t\tvalue: \"150925\",\n\t\t\ttext: \"凉城县\"\n\t\t}, {\n\t\t\tvalue: \"150926\",\n\t\t\ttext: \"察哈尔右翼前旗\"\n\t\t}, {\n\t\t\tvalue: \"150927\",\n\t\t\ttext: \"察哈尔右翼中旗\"\n\t\t}, {\n\t\t\tvalue: \"150928\",\n\t\t\ttext: \"察哈尔右翼后旗\"\n\t\t}, {\n\t\t\tvalue: \"150929\",\n\t\t\ttext: \"四子王旗\"\n\t\t}, {\n\t\t\tvalue: \"150981\",\n\t\t\ttext: \"丰镇市\"\n\t\t}, {\n\t\t\tvalue: \"150982\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"152200\",\n\t\ttext: \"兴安盟\",\n\t\tchildren: [{\n\t\t\tvalue: \"152201\",\n\t\t\ttext: \"乌兰浩特市\"\n\t\t}, {\n\t\t\tvalue: \"152202\",\n\t\t\ttext: \"阿尔山市\"\n\t\t}, {\n\t\t\tvalue: \"152221\",\n\t\t\ttext: \"科尔沁右翼前旗\"\n\t\t}, {\n\t\t\tvalue: \"152222\",\n\t\t\ttext: \"科尔沁右翼中旗\"\n\t\t}, {\n\t\t\tvalue: \"152223\",\n\t\t\ttext: \"扎赉特旗\"\n\t\t}, {\n\t\t\tvalue: \"152224\",\n\t\t\ttext: \"突泉县\"\n\t\t}, {\n\t\t\tvalue: \"152225\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"152500\",\n\t\ttext: \"锡林郭勒盟\",\n\t\tchildren: [{\n\t\t\tvalue: \"152501\",\n\t\t\ttext: \"二连浩特市\"\n\t\t}, {\n\t\t\tvalue: \"152502\",\n\t\t\ttext: \"锡林浩特市\"\n\t\t}, {\n\t\t\tvalue: \"152522\",\n\t\t\ttext: \"阿巴嘎旗\"\n\t\t}, {\n\t\t\tvalue: \"152523\",\n\t\t\ttext: \"苏尼特左旗\"\n\t\t}, {\n\t\t\tvalue: \"152524\",\n\t\t\ttext: \"苏尼特右旗\"\n\t\t}, {\n\t\t\tvalue: \"152525\",\n\t\t\ttext: \"东乌珠穆沁旗\"\n\t\t}, {\n\t\t\tvalue: \"152526\",\n\t\t\ttext: \"西乌珠穆沁旗\"\n\t\t}, {\n\t\t\tvalue: \"152527\",\n\t\t\ttext: \"太仆寺旗\"\n\t\t}, {\n\t\t\tvalue: \"152528\",\n\t\t\ttext: \"镶黄旗\"\n\t\t}, {\n\t\t\tvalue: \"152529\",\n\t\t\ttext: \"正镶白旗\"\n\t\t}, {\n\t\t\tvalue: \"152530\",\n\t\t\ttext: \"正蓝旗\"\n\t\t}, {\n\t\t\tvalue: \"152531\",\n\t\t\ttext: \"多伦县\"\n\t\t}, {\n\t\t\tvalue: \"152532\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"152900\",\n\t\ttext: \"阿拉善盟\",\n\t\tchildren: [{\n\t\t\tvalue: \"152921\",\n\t\t\ttext: \"阿拉善左旗\"\n\t\t}, {\n\t\t\tvalue: \"152922\",\n\t\t\ttext: \"阿拉善右旗\"\n\t\t}, {\n\t\t\tvalue: \"152923\",\n\t\t\ttext: \"额济纳旗\"\n\t\t}, {\n\t\t\tvalue: \"152924\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '210000',\n\ttext: '辽宁省',\n\tchildren: [{\n\t\tvalue: \"210100\",\n\t\ttext: \"沈阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210102\",\n\t\t\ttext: \"和平区\"\n\t\t}, {\n\t\t\tvalue: \"210103\",\n\t\t\ttext: \"沈河区\"\n\t\t}, {\n\t\t\tvalue: \"210104\",\n\t\t\ttext: \"大东区\"\n\t\t}, {\n\t\t\tvalue: \"210105\",\n\t\t\ttext: \"皇姑区\"\n\t\t}, {\n\t\t\tvalue: \"210106\",\n\t\t\ttext: \"铁西区\"\n\t\t}, {\n\t\t\tvalue: \"210111\",\n\t\t\ttext: \"苏家屯区\"\n\t\t}, {\n\t\t\tvalue: \"210112\",\n\t\t\ttext: \"东陵区\"\n\t\t}, {\n\t\t\tvalue: \"210113\",\n\t\t\ttext: \"新城子区\"\n\t\t}, {\n\t\t\tvalue: \"210114\",\n\t\t\ttext: \"于洪区\"\n\t\t}, {\n\t\t\tvalue: \"210122\",\n\t\t\ttext: \"辽中县\"\n\t\t}, {\n\t\t\tvalue: \"210123\",\n\t\t\ttext: \"康平县\"\n\t\t}, {\n\t\t\tvalue: \"210124\",\n\t\t\ttext: \"法库县\"\n\t\t}, {\n\t\t\tvalue: \"210181\",\n\t\t\ttext: \"新民市\"\n\t\t}, {\n\t\t\tvalue: \"210182\",\n\t\t\ttext: \"浑南新区\"\n\t\t}, {\n\t\t\tvalue: \"210183\",\n\t\t\ttext: \"张士开发区\"\n\t\t}, {\n\t\t\tvalue: \"210184\",\n\t\t\ttext: \"沈北新区\"\n\t\t}, {\n\t\t\tvalue: \"210185\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"210200\",\n\t\ttext: \"大连市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210202\",\n\t\t\ttext: \"中山区\"\n\t\t}, {\n\t\t\tvalue: \"210203\",\n\t\t\ttext: \"西岗区\"\n\t\t}, {\n\t\t\tvalue: \"210204\",\n\t\t\ttext: \"沙河口区\"\n\t\t}, {\n\t\t\tvalue: \"210211\",\n\t\t\ttext: \"甘井子区\"\n\t\t}, {\n\t\t\tvalue: \"210212\",\n\t\t\ttext: \"旅顺口区\"\n\t\t}, {\n\t\t\tvalue: \"210213\",\n\t\t\ttext: \"金州区\"\n\t\t}, {\n\t\t\tvalue: \"210224\",\n\t\t\ttext: \"长海县\"\n\t\t}, {\n\t\t\tvalue: \"210251\",\n\t\t\ttext: \"开发区\"\n\t\t}, {\n\t\t\tvalue: \"210281\",\n\t\t\ttext: \"瓦房店市\"\n\t\t}, {\n\t\t\tvalue: \"210282\",\n\t\t\ttext: \"普兰店市\"\n\t\t}, {\n\t\t\tvalue: \"210283\",\n\t\t\ttext: \"庄河市\"\n\t\t}, {\n\t\t\tvalue: \"210297\",\n\t\t\ttext: \"岭前区\"\n\t\t}, {\n\t\t\tvalue: \"210298\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"210300\",\n\t\ttext: \"鞍山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210302\",\n\t\t\ttext: \"铁东区\"\n\t\t}, {\n\t\t\tvalue: \"210303\",\n\t\t\ttext: \"铁西区\"\n\t\t}, {\n\t\t\tvalue: \"210304\",\n\t\t\ttext: \"立山区\"\n\t\t}, {\n\t\t\tvalue: \"210311\",\n\t\t\ttext: \"千山区\"\n\t\t}, {\n\t\t\tvalue: \"210321\",\n\t\t\ttext: \"台安县\"\n\t\t}, {\n\t\t\tvalue: \"210323\",\n\t\t\ttext: \"岫岩满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"210351\",\n\t\t\ttext: \"高新区\"\n\t\t}, {\n\t\t\tvalue: \"210381\",\n\t\t\ttext: \"海城市\"\n\t\t}, {\n\t\t\tvalue: \"210382\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"210400\",\n\t\ttext: \"抚顺市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210402\",\n\t\t\ttext: \"新抚区\"\n\t\t}, {\n\t\t\tvalue: \"210403\",\n\t\t\ttext: \"东洲区\"\n\t\t}, {\n\t\t\tvalue: \"210404\",\n\t\t\ttext: \"望花区\"\n\t\t}, {\n\t\t\tvalue: \"210411\",\n\t\t\ttext: \"顺城区\"\n\t\t}, {\n\t\t\tvalue: \"210421\",\n\t\t\ttext: \"抚顺县\"\n\t\t}, {\n\t\t\tvalue: \"210422\",\n\t\t\ttext: \"新宾满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"210423\",\n\t\t\ttext: \"清原满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"210424\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"210500\",\n\t\ttext: \"本溪市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210502\",\n\t\t\ttext: \"平山区\"\n\t\t}, {\n\t\t\tvalue: \"210503\",\n\t\t\ttext: \"溪湖区\"\n\t\t}, {\n\t\t\tvalue: \"210504\",\n\t\t\ttext: \"明山区\"\n\t\t}, {\n\t\t\tvalue: \"210505\",\n\t\t\ttext: \"南芬区\"\n\t\t}, {\n\t\t\tvalue: \"210521\",\n\t\t\ttext: \"本溪满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"210522\",\n\t\t\ttext: \"桓仁满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"210523\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"210600\",\n\t\ttext: \"丹东市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210602\",\n\t\t\ttext: \"元宝区\"\n\t\t}, {\n\t\t\tvalue: \"210603\",\n\t\t\ttext: \"振兴区\"\n\t\t}, {\n\t\t\tvalue: \"210604\",\n\t\t\ttext: \"振安区\"\n\t\t}, {\n\t\t\tvalue: \"210624\",\n\t\t\ttext: \"宽甸满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"210681\",\n\t\t\ttext: \"东港市\"\n\t\t}, {\n\t\t\tvalue: \"210682\",\n\t\t\ttext: \"凤城市\"\n\t\t}, {\n\t\t\tvalue: \"210683\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"210700\",\n\t\ttext: \"锦州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210702\",\n\t\t\ttext: \"古塔区\"\n\t\t}, {\n\t\t\tvalue: \"210703\",\n\t\t\ttext: \"凌河区\"\n\t\t}, {\n\t\t\tvalue: \"210711\",\n\t\t\ttext: \"太和区\"\n\t\t}, {\n\t\t\tvalue: \"210726\",\n\t\t\ttext: \"黑山县\"\n\t\t}, {\n\t\t\tvalue: \"210727\",\n\t\t\ttext: \"义县\"\n\t\t}, {\n\t\t\tvalue: \"210781\",\n\t\t\ttext: \"凌海市\"\n\t\t}, {\n\t\t\tvalue: \"210782\",\n\t\t\ttext: \"北镇市\"\n\t\t}, {\n\t\t\tvalue: \"210783\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"210800\",\n\t\ttext: \"营口市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210802\",\n\t\t\ttext: \"站前区\"\n\t\t}, {\n\t\t\tvalue: \"210803\",\n\t\t\ttext: \"西市区\"\n\t\t}, {\n\t\t\tvalue: \"210804\",\n\t\t\ttext: \"鲅鱼圈区\"\n\t\t}, {\n\t\t\tvalue: \"210811\",\n\t\t\ttext: \"老边区\"\n\t\t}, {\n\t\t\tvalue: \"210881\",\n\t\t\ttext: \"盖州市\"\n\t\t}, {\n\t\t\tvalue: \"210882\",\n\t\t\ttext: \"大石桥市\"\n\t\t}, {\n\t\t\tvalue: \"210883\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"210900\",\n\t\ttext: \"阜新市\",\n\t\tchildren: [{\n\t\t\tvalue: \"210902\",\n\t\t\ttext: \"海州区\"\n\t\t}, {\n\t\t\tvalue: \"210903\",\n\t\t\ttext: \"新邱区\"\n\t\t}, {\n\t\t\tvalue: \"210904\",\n\t\t\ttext: \"太平区\"\n\t\t}, {\n\t\t\tvalue: \"210905\",\n\t\t\ttext: \"清河门区\"\n\t\t}, {\n\t\t\tvalue: \"210911\",\n\t\t\ttext: \"细河区\"\n\t\t}, {\n\t\t\tvalue: \"210921\",\n\t\t\ttext: \"阜新蒙古族自治县\"\n\t\t}, {\n\t\t\tvalue: \"210922\",\n\t\t\ttext: \"彰武县\"\n\t\t}, {\n\t\t\tvalue: \"210923\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"211000\",\n\t\ttext: \"辽阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"211002\",\n\t\t\ttext: \"白塔区\"\n\t\t}, {\n\t\t\tvalue: \"211003\",\n\t\t\ttext: \"文圣区\"\n\t\t}, {\n\t\t\tvalue: \"211004\",\n\t\t\ttext: \"宏伟区\"\n\t\t}, {\n\t\t\tvalue: \"211005\",\n\t\t\ttext: \"弓长岭区\"\n\t\t}, {\n\t\t\tvalue: \"211011\",\n\t\t\ttext: \"太子河区\"\n\t\t}, {\n\t\t\tvalue: \"211021\",\n\t\t\ttext: \"辽阳县\"\n\t\t}, {\n\t\t\tvalue: \"211081\",\n\t\t\ttext: \"灯塔市\"\n\t\t}, {\n\t\t\tvalue: \"211082\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"211100\",\n\t\ttext: \"盘锦市\",\n\t\tchildren: [{\n\t\t\tvalue: \"211102\",\n\t\t\ttext: \"双台子区\"\n\t\t}, {\n\t\t\tvalue: \"211103\",\n\t\t\ttext: \"兴隆台区\"\n\t\t}, {\n\t\t\tvalue: \"211121\",\n\t\t\ttext: \"大洼县\"\n\t\t}, {\n\t\t\tvalue: \"211122\",\n\t\t\ttext: \"盘山县\"\n\t\t}, {\n\t\t\tvalue: \"211123\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"211200\",\n\t\ttext: \"铁岭市\",\n\t\tchildren: [{\n\t\t\tvalue: \"211202\",\n\t\t\ttext: \"银州区\"\n\t\t}, {\n\t\t\tvalue: \"211204\",\n\t\t\ttext: \"清河区\"\n\t\t}, {\n\t\t\tvalue: \"211221\",\n\t\t\ttext: \"铁岭县\"\n\t\t}, {\n\t\t\tvalue: \"211223\",\n\t\t\ttext: \"西丰县\"\n\t\t}, {\n\t\t\tvalue: \"211224\",\n\t\t\ttext: \"昌图县\"\n\t\t}, {\n\t\t\tvalue: \"211281\",\n\t\t\ttext: \"调兵山市\"\n\t\t}, {\n\t\t\tvalue: \"211282\",\n\t\t\ttext: \"开原市\"\n\t\t}, {\n\t\t\tvalue: \"211283\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"211300\",\n\t\ttext: \"朝阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"211302\",\n\t\t\ttext: \"双塔区\"\n\t\t}, {\n\t\t\tvalue: \"211303\",\n\t\t\ttext: \"龙城区\"\n\t\t}, {\n\t\t\tvalue: \"211321\",\n\t\t\ttext: \"朝阳县\"\n\t\t}, {\n\t\t\tvalue: \"211322\",\n\t\t\ttext: \"建平县\"\n\t\t}, {\n\t\t\tvalue: \"211324\",\n\t\t\ttext: \"喀喇沁左翼蒙古族自治县\"\n\t\t}, {\n\t\t\tvalue: \"211381\",\n\t\t\ttext: \"北票市\"\n\t\t}, {\n\t\t\tvalue: \"211382\",\n\t\t\ttext: \"凌源市\"\n\t\t}, {\n\t\t\tvalue: \"211383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"211400\",\n\t\ttext: \"葫芦岛市\",\n\t\tchildren: [{\n\t\t\tvalue: \"211402\",\n\t\t\ttext: \"连山区\"\n\t\t}, {\n\t\t\tvalue: \"211403\",\n\t\t\ttext: \"龙港区\"\n\t\t}, {\n\t\t\tvalue: \"211404\",\n\t\t\ttext: \"南票区\"\n\t\t}, {\n\t\t\tvalue: \"211421\",\n\t\t\ttext: \"绥中县\"\n\t\t}, {\n\t\t\tvalue: \"211422\",\n\t\t\ttext: \"建昌县\"\n\t\t}, {\n\t\t\tvalue: \"211481\",\n\t\t\ttext: \"兴城市\"\n\t\t}, {\n\t\t\tvalue: \"211482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '220000',\n\ttext: '吉林省',\n\tchildren: [{\n\t\tvalue: \"220100\",\n\t\ttext: \"长春市\",\n\t\tchildren: [{\n\t\t\tvalue: \"220102\",\n\t\t\ttext: \"南关区\"\n\t\t}, {\n\t\t\tvalue: \"220103\",\n\t\t\ttext: \"宽城区\"\n\t\t}, {\n\t\t\tvalue: \"220104\",\n\t\t\ttext: \"朝阳区\"\n\t\t}, {\n\t\t\tvalue: \"220105\",\n\t\t\ttext: \"二道区\"\n\t\t}, {\n\t\t\tvalue: \"220106\",\n\t\t\ttext: \"绿园区\"\n\t\t}, {\n\t\t\tvalue: \"220112\",\n\t\t\ttext: \"双阳区\"\n\t\t}, {\n\t\t\tvalue: \"220122\",\n\t\t\ttext: \"农安县\"\n\t\t}, {\n\t\t\tvalue: \"220181\",\n\t\t\ttext: \"九台市\"\n\t\t}, {\n\t\t\tvalue: \"220182\",\n\t\t\ttext: \"榆树市\"\n\t\t}, {\n\t\t\tvalue: \"220183\",\n\t\t\ttext: \"德惠市\"\n\t\t}, {\n\t\t\tvalue: \"220184\",\n\t\t\ttext: \"高新技术产业开发区\"\n\t\t}, {\n\t\t\tvalue: \"220185\",\n\t\t\ttext: \"汽车产业开发区\"\n\t\t}, {\n\t\t\tvalue: \"220186\",\n\t\t\ttext: \"经济技术开发区\"\n\t\t}, {\n\t\t\tvalue: \"220187\",\n\t\t\ttext: \"净月旅游开发区\"\n\t\t}, {\n\t\t\tvalue: \"220188\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"220200\",\n\t\ttext: \"吉林市\",\n\t\tchildren: [{\n\t\t\tvalue: \"220202\",\n\t\t\ttext: \"昌邑区\"\n\t\t}, {\n\t\t\tvalue: \"220203\",\n\t\t\ttext: \"龙潭区\"\n\t\t}, {\n\t\t\tvalue: \"220204\",\n\t\t\ttext: \"船营区\"\n\t\t}, {\n\t\t\tvalue: \"220211\",\n\t\t\ttext: \"丰满区\"\n\t\t}, {\n\t\t\tvalue: \"220221\",\n\t\t\ttext: \"永吉县\"\n\t\t}, {\n\t\t\tvalue: \"220281\",\n\t\t\ttext: \"蛟河市\"\n\t\t}, {\n\t\t\tvalue: \"220282\",\n\t\t\ttext: \"桦甸市\"\n\t\t}, {\n\t\t\tvalue: \"220283\",\n\t\t\ttext: \"舒兰市\"\n\t\t}, {\n\t\t\tvalue: \"220284\",\n\t\t\ttext: \"磐石市\"\n\t\t}, {\n\t\t\tvalue: \"220285\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"220300\",\n\t\ttext: \"四平市\",\n\t\tchildren: [{\n\t\t\tvalue: \"220302\",\n\t\t\ttext: \"铁西区\"\n\t\t}, {\n\t\t\tvalue: \"220303\",\n\t\t\ttext: \"铁东区\"\n\t\t}, {\n\t\t\tvalue: \"220322\",\n\t\t\ttext: \"梨树县\"\n\t\t}, {\n\t\t\tvalue: \"220323\",\n\t\t\ttext: \"伊通满族自治县\"\n\t\t}, {\n\t\t\tvalue: \"220381\",\n\t\t\ttext: \"公主岭市\"\n\t\t}, {\n\t\t\tvalue: \"220382\",\n\t\t\ttext: \"双辽市\"\n\t\t}, {\n\t\t\tvalue: \"220383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"220400\",\n\t\ttext: \"辽源市\",\n\t\tchildren: [{\n\t\t\tvalue: \"220402\",\n\t\t\ttext: \"龙山区\"\n\t\t}, {\n\t\t\tvalue: \"220403\",\n\t\t\ttext: \"西安区\"\n\t\t}, {\n\t\t\tvalue: \"220421\",\n\t\t\ttext: \"东丰县\"\n\t\t}, {\n\t\t\tvalue: \"220422\",\n\t\t\ttext: \"东辽县\"\n\t\t}, {\n\t\t\tvalue: \"220423\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"220500\",\n\t\ttext: \"通化市\",\n\t\tchildren: [{\n\t\t\tvalue: \"220502\",\n\t\t\ttext: \"东昌区\"\n\t\t}, {\n\t\t\tvalue: \"220503\",\n\t\t\ttext: \"二道江区\"\n\t\t}, {\n\t\t\tvalue: \"220521\",\n\t\t\ttext: \"通化县\"\n\t\t}, {\n\t\t\tvalue: \"220523\",\n\t\t\ttext: \"辉南县\"\n\t\t}, {\n\t\t\tvalue: \"220524\",\n\t\t\ttext: \"柳河县\"\n\t\t}, {\n\t\t\tvalue: \"220581\",\n\t\t\ttext: \"梅河口市\"\n\t\t}, {\n\t\t\tvalue: \"220582\",\n\t\t\ttext: \"集安市\"\n\t\t}, {\n\t\t\tvalue: \"220583\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"220600\",\n\t\ttext: \"白山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"220602\",\n\t\t\ttext: \"八道江区\"\n\t\t}, {\n\t\t\tvalue: \"220621\",\n\t\t\ttext: \"抚松县\"\n\t\t}, {\n\t\t\tvalue: \"220622\",\n\t\t\ttext: \"靖宇县\"\n\t\t}, {\n\t\t\tvalue: \"220623\",\n\t\t\ttext: \"长白朝鲜族自治县\"\n\t\t}, {\n\t\t\tvalue: \"220625\",\n\t\t\ttext: \"江源市\"\n\t\t}, {\n\t\t\tvalue: \"220681\",\n\t\t\ttext: \"临江市\"\n\t\t}, {\n\t\t\tvalue: \"220682\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"220700\",\n\t\ttext: \"松原市\",\n\t\tchildren: [{\n\t\t\tvalue: \"220702\",\n\t\t\ttext: \"宁江区\"\n\t\t}, {\n\t\t\tvalue: \"220721\",\n\t\t\ttext: \"前郭尔罗斯蒙古族自治县\"\n\t\t}, {\n\t\t\tvalue: \"220722\",\n\t\t\ttext: \"长岭县\"\n\t\t}, {\n\t\t\tvalue: \"220723\",\n\t\t\ttext: \"乾安县\"\n\t\t}, {\n\t\t\tvalue: \"220724\",\n\t\t\ttext: \"扶余县\"\n\t\t}, {\n\t\t\tvalue: \"220725\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"220800\",\n\t\ttext: \"白城市\",\n\t\tchildren: [{\n\t\t\tvalue: \"220802\",\n\t\t\ttext: \"洮北区\"\n\t\t}, {\n\t\t\tvalue: \"220821\",\n\t\t\ttext: \"镇赉县\"\n\t\t}, {\n\t\t\tvalue: \"220822\",\n\t\t\ttext: \"通榆县\"\n\t\t}, {\n\t\t\tvalue: \"220881\",\n\t\t\ttext: \"洮南市\"\n\t\t}, {\n\t\t\tvalue: \"220882\",\n\t\t\ttext: \"大安市\"\n\t\t}, {\n\t\t\tvalue: \"220883\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"222400\",\n\t\ttext: \"延边朝鲜族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"222401\",\n\t\t\ttext: \"延吉市\"\n\t\t}, {\n\t\t\tvalue: \"222402\",\n\t\t\ttext: \"图们市\"\n\t\t}, {\n\t\t\tvalue: \"222403\",\n\t\t\ttext: \"敦化市\"\n\t\t}, {\n\t\t\tvalue: \"222404\",\n\t\t\ttext: \"珲春市\"\n\t\t}, {\n\t\t\tvalue: \"222405\",\n\t\t\ttext: \"龙井市\"\n\t\t}, {\n\t\t\tvalue: \"222406\",\n\t\t\ttext: \"和龙市\"\n\t\t}, {\n\t\t\tvalue: \"222424\",\n\t\t\ttext: \"汪清县\"\n\t\t}, {\n\t\t\tvalue: \"222426\",\n\t\t\ttext: \"安图县\"\n\t\t}, {\n\t\t\tvalue: \"222427\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '230000',\n\ttext: '黑龙江省',\n\tchildren: [{\n\t\tvalue: \"230100\",\n\t\ttext: \"哈尔滨市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230102\",\n\t\t\ttext: \"道里区\"\n\t\t}, {\n\t\t\tvalue: \"230103\",\n\t\t\ttext: \"南岗区\"\n\t\t}, {\n\t\t\tvalue: \"230104\",\n\t\t\ttext: \"道外区\"\n\t\t}, {\n\t\t\tvalue: \"230106\",\n\t\t\ttext: \"香坊区\"\n\t\t}, {\n\t\t\tvalue: \"230107\",\n\t\t\ttext: \"动力区\"\n\t\t}, {\n\t\t\tvalue: \"230108\",\n\t\t\ttext: \"平房区\"\n\t\t}, {\n\t\t\tvalue: \"230109\",\n\t\t\ttext: \"松北区\"\n\t\t}, {\n\t\t\tvalue: \"230111\",\n\t\t\ttext: \"呼兰区\"\n\t\t}, {\n\t\t\tvalue: \"230123\",\n\t\t\ttext: \"依兰县\"\n\t\t}, {\n\t\t\tvalue: \"230124\",\n\t\t\ttext: \"方正县\"\n\t\t}, {\n\t\t\tvalue: \"230125\",\n\t\t\ttext: \"宾县\"\n\t\t}, {\n\t\t\tvalue: \"230126\",\n\t\t\ttext: \"巴彦县\"\n\t\t}, {\n\t\t\tvalue: \"230127\",\n\t\t\ttext: \"木兰县\"\n\t\t}, {\n\t\t\tvalue: \"230128\",\n\t\t\ttext: \"通河县\"\n\t\t}, {\n\t\t\tvalue: \"230129\",\n\t\t\ttext: \"延寿县\"\n\t\t}, {\n\t\t\tvalue: \"230181\",\n\t\t\ttext: \"阿城市\"\n\t\t}, {\n\t\t\tvalue: \"230182\",\n\t\t\ttext: \"双城市\"\n\t\t}, {\n\t\t\tvalue: \"230183\",\n\t\t\ttext: \"尚志市\"\n\t\t}, {\n\t\t\tvalue: \"230184\",\n\t\t\ttext: \"五常市\"\n\t\t}, {\n\t\t\tvalue: \"230185\",\n\t\t\ttext: \"阿城市\"\n\t\t}, {\n\t\t\tvalue: \"230186\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"230200\",\n\t\ttext: \"齐齐哈尔市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230202\",\n\t\t\ttext: \"龙沙区\"\n\t\t}, {\n\t\t\tvalue: \"230203\",\n\t\t\ttext: \"建华区\"\n\t\t}, {\n\t\t\tvalue: \"230204\",\n\t\t\ttext: \"铁锋区\"\n\t\t}, {\n\t\t\tvalue: \"230205\",\n\t\t\ttext: \"昂昂溪区\"\n\t\t}, {\n\t\t\tvalue: \"230206\",\n\t\t\ttext: \"富拉尔基区\"\n\t\t}, {\n\t\t\tvalue: \"230207\",\n\t\t\ttext: \"碾子山区\"\n\t\t}, {\n\t\t\tvalue: \"230208\",\n\t\t\ttext: \"梅里斯达斡尔族区\"\n\t\t}, {\n\t\t\tvalue: \"230221\",\n\t\t\ttext: \"龙江县\"\n\t\t}, {\n\t\t\tvalue: \"230223\",\n\t\t\ttext: \"依安县\"\n\t\t}, {\n\t\t\tvalue: \"230224\",\n\t\t\ttext: \"泰来县\"\n\t\t}, {\n\t\t\tvalue: \"230225\",\n\t\t\ttext: \"甘南县\"\n\t\t}, {\n\t\t\tvalue: \"230227\",\n\t\t\ttext: \"富裕县\"\n\t\t}, {\n\t\t\tvalue: \"230229\",\n\t\t\ttext: \"克山县\"\n\t\t}, {\n\t\t\tvalue: \"230230\",\n\t\t\ttext: \"克东县\"\n\t\t}, {\n\t\t\tvalue: \"230231\",\n\t\t\ttext: \"拜泉县\"\n\t\t}, {\n\t\t\tvalue: \"230281\",\n\t\t\ttext: \"讷河市\"\n\t\t}, {\n\t\t\tvalue: \"230282\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"230300\",\n\t\ttext: \"鸡西市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230302\",\n\t\t\ttext: \"鸡冠区\"\n\t\t}, {\n\t\t\tvalue: \"230303\",\n\t\t\ttext: \"恒山区\"\n\t\t}, {\n\t\t\tvalue: \"230304\",\n\t\t\ttext: \"滴道区\"\n\t\t}, {\n\t\t\tvalue: \"230305\",\n\t\t\ttext: \"梨树区\"\n\t\t}, {\n\t\t\tvalue: \"230306\",\n\t\t\ttext: \"城子河区\"\n\t\t}, {\n\t\t\tvalue: \"230307\",\n\t\t\ttext: \"麻山区\"\n\t\t}, {\n\t\t\tvalue: \"230321\",\n\t\t\ttext: \"鸡东县\"\n\t\t}, {\n\t\t\tvalue: \"230381\",\n\t\t\ttext: \"虎林市\"\n\t\t}, {\n\t\t\tvalue: \"230382\",\n\t\t\ttext: \"密山市\"\n\t\t}, {\n\t\t\tvalue: \"230383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"230400\",\n\t\ttext: \"鹤岗市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230402\",\n\t\t\ttext: \"向阳区\"\n\t\t}, {\n\t\t\tvalue: \"230403\",\n\t\t\ttext: \"工农区\"\n\t\t}, {\n\t\t\tvalue: \"230404\",\n\t\t\ttext: \"南山区\"\n\t\t}, {\n\t\t\tvalue: \"230405\",\n\t\t\ttext: \"兴安区\"\n\t\t}, {\n\t\t\tvalue: \"230406\",\n\t\t\ttext: \"东山区\"\n\t\t}, {\n\t\t\tvalue: \"230407\",\n\t\t\ttext: \"兴山区\"\n\t\t}, {\n\t\t\tvalue: \"230421\",\n\t\t\ttext: \"萝北县\"\n\t\t}, {\n\t\t\tvalue: \"230422\",\n\t\t\ttext: \"绥滨县\"\n\t\t}, {\n\t\t\tvalue: \"230423\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"230500\",\n\t\ttext: \"双鸭山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230502\",\n\t\t\ttext: \"尖山区\"\n\t\t}, {\n\t\t\tvalue: \"230503\",\n\t\t\ttext: \"岭东区\"\n\t\t}, {\n\t\t\tvalue: \"230505\",\n\t\t\ttext: \"四方台区\"\n\t\t}, {\n\t\t\tvalue: \"230506\",\n\t\t\ttext: \"宝山区\"\n\t\t}, {\n\t\t\tvalue: \"230521\",\n\t\t\ttext: \"集贤县\"\n\t\t}, {\n\t\t\tvalue: \"230522\",\n\t\t\ttext: \"友谊县\"\n\t\t}, {\n\t\t\tvalue: \"230523\",\n\t\t\ttext: \"宝清县\"\n\t\t}, {\n\t\t\tvalue: \"230524\",\n\t\t\ttext: \"饶河县\"\n\t\t}, {\n\t\t\tvalue: \"230525\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"230600\",\n\t\ttext: \"大庆市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230602\",\n\t\t\ttext: \"萨尔图区\"\n\t\t}, {\n\t\t\tvalue: \"230603\",\n\t\t\ttext: \"龙凤区\"\n\t\t}, {\n\t\t\tvalue: \"230604\",\n\t\t\ttext: \"让胡路区\"\n\t\t}, {\n\t\t\tvalue: \"230605\",\n\t\t\ttext: \"红岗区\"\n\t\t}, {\n\t\t\tvalue: \"230606\",\n\t\t\ttext: \"大同区\"\n\t\t}, {\n\t\t\tvalue: \"230621\",\n\t\t\ttext: \"肇州县\"\n\t\t}, {\n\t\t\tvalue: \"230622\",\n\t\t\ttext: \"肇源县\"\n\t\t}, {\n\t\t\tvalue: \"230623\",\n\t\t\ttext: \"林甸县\"\n\t\t}, {\n\t\t\tvalue: \"230624\",\n\t\t\ttext: \"杜尔伯特蒙古族自治县\"\n\t\t}, {\n\t\t\tvalue: \"230625\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"230700\",\n\t\ttext: \"伊春市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230702\",\n\t\t\ttext: \"伊春区\"\n\t\t}, {\n\t\t\tvalue: \"230703\",\n\t\t\ttext: \"南岔区\"\n\t\t}, {\n\t\t\tvalue: \"230704\",\n\t\t\ttext: \"友好区\"\n\t\t}, {\n\t\t\tvalue: \"230705\",\n\t\t\ttext: \"西林区\"\n\t\t}, {\n\t\t\tvalue: \"230706\",\n\t\t\ttext: \"翠峦区\"\n\t\t}, {\n\t\t\tvalue: \"230707\",\n\t\t\ttext: \"新青区\"\n\t\t}, {\n\t\t\tvalue: \"230708\",\n\t\t\ttext: \"美溪区\"\n\t\t}, {\n\t\t\tvalue: \"230709\",\n\t\t\ttext: \"金山屯区\"\n\t\t}, {\n\t\t\tvalue: \"230710\",\n\t\t\ttext: \"五营区\"\n\t\t}, {\n\t\t\tvalue: \"230711\",\n\t\t\ttext: \"乌马河区\"\n\t\t}, {\n\t\t\tvalue: \"230712\",\n\t\t\ttext: \"汤旺河区\"\n\t\t}, {\n\t\t\tvalue: \"230713\",\n\t\t\ttext: \"带岭区\"\n\t\t}, {\n\t\t\tvalue: \"230714\",\n\t\t\ttext: \"乌伊岭区\"\n\t\t}, {\n\t\t\tvalue: \"230715\",\n\t\t\ttext: \"红星区\"\n\t\t}, {\n\t\t\tvalue: \"230716\",\n\t\t\ttext: \"上甘岭区\"\n\t\t}, {\n\t\t\tvalue: \"230722\",\n\t\t\ttext: \"嘉荫县\"\n\t\t}, {\n\t\t\tvalue: \"230781\",\n\t\t\ttext: \"铁力市\"\n\t\t}, {\n\t\t\tvalue: \"230782\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"230800\",\n\t\ttext: \"佳木斯市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230802\",\n\t\t\ttext: \"永红区\"\n\t\t}, {\n\t\t\tvalue: \"230803\",\n\t\t\ttext: \"向阳区\"\n\t\t}, {\n\t\t\tvalue: \"230804\",\n\t\t\ttext: \"前进区\"\n\t\t}, {\n\t\t\tvalue: \"230805\",\n\t\t\ttext: \"东风区\"\n\t\t}, {\n\t\t\tvalue: \"230811\",\n\t\t\ttext: \"郊区\"\n\t\t}, {\n\t\t\tvalue: \"230822\",\n\t\t\ttext: \"桦南县\"\n\t\t}, {\n\t\t\tvalue: \"230826\",\n\t\t\ttext: \"桦川县\"\n\t\t}, {\n\t\t\tvalue: \"230828\",\n\t\t\ttext: \"汤原县\"\n\t\t}, {\n\t\t\tvalue: \"230833\",\n\t\t\ttext: \"抚远县\"\n\t\t}, {\n\t\t\tvalue: \"230881\",\n\t\t\ttext: \"同江市\"\n\t\t}, {\n\t\t\tvalue: \"230882\",\n\t\t\ttext: \"富锦市\"\n\t\t}, {\n\t\t\tvalue: \"230883\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"230900\",\n\t\ttext: \"七台河市\",\n\t\tchildren: [{\n\t\t\tvalue: \"230902\",\n\t\t\ttext: \"新兴区\"\n\t\t}, {\n\t\t\tvalue: \"230903\",\n\t\t\ttext: \"桃山区\"\n\t\t}, {\n\t\t\tvalue: \"230904\",\n\t\t\ttext: \"茄子河区\"\n\t\t}, {\n\t\t\tvalue: \"230921\",\n\t\t\ttext: \"勃利县\"\n\t\t}, {\n\t\t\tvalue: \"230922\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"231000\",\n\t\ttext: \"牡丹江市\",\n\t\tchildren: [{\n\t\t\tvalue: \"231002\",\n\t\t\ttext: \"东安区\"\n\t\t}, {\n\t\t\tvalue: \"231003\",\n\t\t\ttext: \"阳明区\"\n\t\t}, {\n\t\t\tvalue: \"231004\",\n\t\t\ttext: \"爱民区\"\n\t\t}, {\n\t\t\tvalue: \"231005\",\n\t\t\ttext: \"西安区\"\n\t\t}, {\n\t\t\tvalue: \"231024\",\n\t\t\ttext: \"东宁县\"\n\t\t}, {\n\t\t\tvalue: \"231025\",\n\t\t\ttext: \"林口县\"\n\t\t}, {\n\t\t\tvalue: \"231081\",\n\t\t\ttext: \"绥芬河市\"\n\t\t}, {\n\t\t\tvalue: \"231083\",\n\t\t\ttext: \"海林市\"\n\t\t}, {\n\t\t\tvalue: \"231084\",\n\t\t\ttext: \"宁安市\"\n\t\t}, {\n\t\t\tvalue: \"231085\",\n\t\t\ttext: \"穆棱市\"\n\t\t}, {\n\t\t\tvalue: \"231086\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"231100\",\n\t\ttext: \"黑河市\",\n\t\tchildren: [{\n\t\t\tvalue: \"231102\",\n\t\t\ttext: \"爱辉区\"\n\t\t}, {\n\t\t\tvalue: \"231121\",\n\t\t\ttext: \"嫩江县\"\n\t\t}, {\n\t\t\tvalue: \"231123\",\n\t\t\ttext: \"逊克县\"\n\t\t}, {\n\t\t\tvalue: \"231124\",\n\t\t\ttext: \"孙吴县\"\n\t\t}, {\n\t\t\tvalue: \"231181\",\n\t\t\ttext: \"北安市\"\n\t\t}, {\n\t\t\tvalue: \"231182\",\n\t\t\ttext: \"五大连池市\"\n\t\t}, {\n\t\t\tvalue: \"231183\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"231200\",\n\t\ttext: \"绥化市\",\n\t\tchildren: [{\n\t\t\tvalue: \"231202\",\n\t\t\ttext: \"北林区\"\n\t\t}, {\n\t\t\tvalue: \"231221\",\n\t\t\ttext: \"望奎县\"\n\t\t}, {\n\t\t\tvalue: \"231222\",\n\t\t\ttext: \"兰西县\"\n\t\t}, {\n\t\t\tvalue: \"231223\",\n\t\t\ttext: \"青冈县\"\n\t\t}, {\n\t\t\tvalue: \"231224\",\n\t\t\ttext: \"庆安县\"\n\t\t}, {\n\t\t\tvalue: \"231225\",\n\t\t\ttext: \"明水县\"\n\t\t}, {\n\t\t\tvalue: \"231226\",\n\t\t\ttext: \"绥棱县\"\n\t\t}, {\n\t\t\tvalue: \"231281\",\n\t\t\ttext: \"安达市\"\n\t\t}, {\n\t\t\tvalue: \"231282\",\n\t\t\ttext: \"肇东市\"\n\t\t}, {\n\t\t\tvalue: \"231283\",\n\t\t\ttext: \"海伦市\"\n\t\t}, {\n\t\t\tvalue: \"231284\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"232700\",\n\t\ttext: \"大兴安岭地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"232721\",\n\t\t\ttext: \"呼玛县\"\n\t\t}, {\n\t\t\tvalue: \"232722\",\n\t\t\ttext: \"塔河县\"\n\t\t}, {\n\t\t\tvalue: \"232723\",\n\t\t\ttext: \"漠河县\"\n\t\t}, {\n\t\t\tvalue: \"232724\",\n\t\t\ttext: \"加格达奇区\"\n\t\t}, {\n\t\t\tvalue: \"232725\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '310000',\n\ttext: '上海市',\n\tchildren: [{\n\t\tvalue: '310100',\n\t\ttext: '上海市',\n\t\tchildren: [{\n\t\t\tvalue: \"310101\",\n\t\t\ttext: \"黄浦区\"\n\t\t}, {\n\t\t\tvalue: \"310103\",\n\t\t\ttext: \"卢湾区\"\n\t\t}, {\n\t\t\tvalue: \"310104\",\n\t\t\ttext: \"徐汇区\"\n\t\t}, {\n\t\t\tvalue: \"310105\",\n\t\t\ttext: \"长宁区\"\n\t\t}, {\n\t\t\tvalue: \"310106\",\n\t\t\ttext: \"静安区\"\n\t\t}, {\n\t\t\tvalue: \"310107\",\n\t\t\ttext: \"普陀区\"\n\t\t}, {\n\t\t\tvalue: \"310108\",\n\t\t\ttext: \"闸北区\"\n\t\t}, {\n\t\t\tvalue: \"310109\",\n\t\t\ttext: \"虹口区\"\n\t\t}, {\n\t\t\tvalue: \"310110\",\n\t\t\ttext: \"杨浦区\"\n\t\t}, {\n\t\t\tvalue: \"310112\",\n\t\t\ttext: \"闵行区\"\n\t\t}, {\n\t\t\tvalue: \"310113\",\n\t\t\ttext: \"宝山区\"\n\t\t}, {\n\t\t\tvalue: \"310114\",\n\t\t\ttext: \"嘉定区\"\n\t\t}, {\n\t\t\tvalue: \"310115\",\n\t\t\ttext: \"浦东新区\"\n\t\t}, {\n\t\t\tvalue: \"310116\",\n\t\t\ttext: \"金山区\"\n\t\t}, {\n\t\t\tvalue: \"310117\",\n\t\t\ttext: \"松江区\"\n\t\t}, {\n\t\t\tvalue: \"310118\",\n\t\t\ttext: \"青浦区\"\n\t\t}, {\n\t\t\tvalue: \"310119\",\n\t\t\ttext: \"南汇区\"\n\t\t}, {\n\t\t\tvalue: \"310120\",\n\t\t\ttext: \"奉贤区\"\n\t\t}, {\n\t\t\tvalue: \"310152\",\n\t\t\ttext: \"川沙区\"\n\t\t}, {\n\t\t\tvalue: \"310230\",\n\t\t\ttext: \"崇明县\"\n\t\t}, {\n\t\t\tvalue: \"310231\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '320000',\n\ttext: '江苏省',\n\tchildren: [{\n\t\tvalue: \"320100\",\n\t\ttext: \"南京市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320102\",\n\t\t\ttext: \"玄武区\"\n\t\t}, {\n\t\t\tvalue: \"320103\",\n\t\t\ttext: \"白下区\"\n\t\t}, {\n\t\t\tvalue: \"320104\",\n\t\t\ttext: \"秦淮区\"\n\t\t}, {\n\t\t\tvalue: \"320105\",\n\t\t\ttext: \"建邺区\"\n\t\t}, {\n\t\t\tvalue: \"320106\",\n\t\t\ttext: \"鼓楼区\"\n\t\t}, {\n\t\t\tvalue: \"320107\",\n\t\t\ttext: \"下关区\"\n\t\t}, {\n\t\t\tvalue: \"320111\",\n\t\t\ttext: \"浦口区\"\n\t\t}, {\n\t\t\tvalue: \"320113\",\n\t\t\ttext: \"栖霞区\"\n\t\t}, {\n\t\t\tvalue: \"320114\",\n\t\t\ttext: \"雨花台区\"\n\t\t}, {\n\t\t\tvalue: \"320115\",\n\t\t\ttext: \"江宁区\"\n\t\t}, {\n\t\t\tvalue: \"320116\",\n\t\t\ttext: \"六合区\"\n\t\t}, {\n\t\t\tvalue: \"320124\",\n\t\t\ttext: \"溧水县\"\n\t\t}, {\n\t\t\tvalue: \"320125\",\n\t\t\ttext: \"高淳县\"\n\t\t}, {\n\t\t\tvalue: \"320126\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"320200\",\n\t\ttext: \"无锡市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320202\",\n\t\t\ttext: \"崇安区\"\n\t\t}, {\n\t\t\tvalue: \"320203\",\n\t\t\ttext: \"南长区\"\n\t\t}, {\n\t\t\tvalue: \"320204\",\n\t\t\ttext: \"北塘区\"\n\t\t}, {\n\t\t\tvalue: \"320205\",\n\t\t\ttext: \"锡山区\"\n\t\t}, {\n\t\t\tvalue: \"320206\",\n\t\t\ttext: \"惠山区\"\n\t\t}, {\n\t\t\tvalue: \"320211\",\n\t\t\ttext: \"滨湖区\"\n\t\t}, {\n\t\t\tvalue: \"320281\",\n\t\t\ttext: \"江阴市\"\n\t\t}, {\n\t\t\tvalue: \"320282\",\n\t\t\ttext: \"宜兴市\"\n\t\t}, {\n\t\t\tvalue: \"320296\",\n\t\t\ttext: \"新区\"\n\t\t}, {\n\t\t\tvalue: \"320297\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"320300\",\n\t\ttext: \"徐州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320302\",\n\t\t\ttext: \"鼓楼区\"\n\t\t}, {\n\t\t\tvalue: \"320303\",\n\t\t\ttext: \"云龙区\"\n\t\t}, {\n\t\t\tvalue: \"320304\",\n\t\t\ttext: \"九里区\"\n\t\t}, {\n\t\t\tvalue: \"320305\",\n\t\t\ttext: \"贾汪区\"\n\t\t}, {\n\t\t\tvalue: \"320311\",\n\t\t\ttext: \"泉山区\"\n\t\t}, {\n\t\t\tvalue: \"320321\",\n\t\t\ttext: \"丰县\"\n\t\t}, {\n\t\t\tvalue: \"320322\",\n\t\t\ttext: \"沛县\"\n\t\t}, {\n\t\t\tvalue: \"320323\",\n\t\t\ttext: \"铜山县\"\n\t\t}, {\n\t\t\tvalue: \"320324\",\n\t\t\ttext: \"睢宁县\"\n\t\t}, {\n\t\t\tvalue: \"320381\",\n\t\t\ttext: \"新沂市\"\n\t\t}, {\n\t\t\tvalue: \"320382\",\n\t\t\ttext: \"邳州市\"\n\t\t}, {\n\t\t\tvalue: \"320383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"320400\",\n\t\ttext: \"常州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320402\",\n\t\t\ttext: \"天宁区\"\n\t\t}, {\n\t\t\tvalue: \"320404\",\n\t\t\ttext: \"钟楼区\"\n\t\t}, {\n\t\t\tvalue: \"320405\",\n\t\t\ttext: \"戚墅堰区\"\n\t\t}, {\n\t\t\tvalue: \"320411\",\n\t\t\ttext: \"新北区\"\n\t\t}, {\n\t\t\tvalue: \"320412\",\n\t\t\ttext: \"武进区\"\n\t\t}, {\n\t\t\tvalue: \"320481\",\n\t\t\ttext: \"溧阳市\"\n\t\t}, {\n\t\t\tvalue: \"320482\",\n\t\t\ttext: \"金坛市\"\n\t\t}, {\n\t\t\tvalue: \"320483\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"320500\",\n\t\ttext: \"苏州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320502\",\n\t\t\ttext: \"沧浪区\"\n\t\t}, {\n\t\t\tvalue: \"320503\",\n\t\t\ttext: \"平江区\"\n\t\t}, {\n\t\t\tvalue: \"320504\",\n\t\t\ttext: \"金阊区\"\n\t\t}, {\n\t\t\tvalue: \"320505\",\n\t\t\ttext: \"虎丘区\"\n\t\t}, {\n\t\t\tvalue: \"320506\",\n\t\t\ttext: \"吴中区\"\n\t\t}, {\n\t\t\tvalue: \"320507\",\n\t\t\ttext: \"相城区\"\n\t\t}, {\n\t\t\tvalue: \"320581\",\n\t\t\ttext: \"常熟市\"\n\t\t}, {\n\t\t\tvalue: \"320582\",\n\t\t\ttext: \"张家港市\"\n\t\t}, {\n\t\t\tvalue: \"320583\",\n\t\t\ttext: \"昆山市\"\n\t\t}, {\n\t\t\tvalue: \"320584\",\n\t\t\ttext: \"吴江市\"\n\t\t}, {\n\t\t\tvalue: \"320585\",\n\t\t\ttext: \"太仓市\"\n\t\t}, {\n\t\t\tvalue: \"320594\",\n\t\t\ttext: \"新区\"\n\t\t}, {\n\t\t\tvalue: \"320595\",\n\t\t\ttext: \"园区\"\n\t\t}, {\n\t\t\tvalue: \"320596\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"320600\",\n\t\ttext: \"南通市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320602\",\n\t\t\ttext: \"崇川区\"\n\t\t}, {\n\t\t\tvalue: \"320611\",\n\t\t\ttext: \"港闸区\"\n\t\t}, {\n\t\t\tvalue: \"320612\",\n\t\t\ttext: \"通州区\"\n\t\t}, {\n\t\t\tvalue: \"320621\",\n\t\t\ttext: \"海安县\"\n\t\t}, {\n\t\t\tvalue: \"320623\",\n\t\t\ttext: \"如东县\"\n\t\t}, {\n\t\t\tvalue: \"320681\",\n\t\t\ttext: \"启东市\"\n\t\t}, {\n\t\t\tvalue: \"320682\",\n\t\t\ttext: \"如皋市\"\n\t\t}, {\n\t\t\tvalue: \"320683\",\n\t\t\ttext: \"通州市\"\n\t\t}, {\n\t\t\tvalue: \"320684\",\n\t\t\ttext: \"海门市\"\n\t\t}, {\n\t\t\tvalue: \"320693\",\n\t\t\ttext: \"开发区\"\n\t\t}, {\n\t\t\tvalue: \"320694\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"320700\",\n\t\ttext: \"连云港市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320703\",\n\t\t\ttext: \"连云区\"\n\t\t}, {\n\t\t\tvalue: \"320705\",\n\t\t\ttext: \"新浦区\"\n\t\t}, {\n\t\t\tvalue: \"320706\",\n\t\t\ttext: \"海州区\"\n\t\t}, {\n\t\t\tvalue: \"320721\",\n\t\t\ttext: \"赣榆县\"\n\t\t}, {\n\t\t\tvalue: \"320722\",\n\t\t\ttext: \"东海县\"\n\t\t}, {\n\t\t\tvalue: \"320723\",\n\t\t\ttext: \"灌云县\"\n\t\t}, {\n\t\t\tvalue: \"320724\",\n\t\t\ttext: \"灌南县\"\n\t\t}, {\n\t\t\tvalue: \"320725\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"320800\",\n\t\ttext: \"淮安市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320802\",\n\t\t\ttext: \"清河区\"\n\t\t}, {\n\t\t\tvalue: \"320803\",\n\t\t\ttext: \"楚州区\"\n\t\t}, {\n\t\t\tvalue: \"320804\",\n\t\t\ttext: \"淮阴区\"\n\t\t}, {\n\t\t\tvalue: \"320811\",\n\t\t\ttext: \"清浦区\"\n\t\t}, {\n\t\t\tvalue: \"320826\",\n\t\t\ttext: \"涟水县\"\n\t\t}, {\n\t\t\tvalue: \"320829\",\n\t\t\ttext: \"洪泽县\"\n\t\t}, {\n\t\t\tvalue: \"320830\",\n\t\t\ttext: \"盱眙县\"\n\t\t}, {\n\t\t\tvalue: \"320831\",\n\t\t\ttext: \"金湖县\"\n\t\t}, {\n\t\t\tvalue: \"320832\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"320900\",\n\t\ttext: \"盐城市\",\n\t\tchildren: [{\n\t\t\tvalue: \"320902\",\n\t\t\ttext: \"亭湖区\"\n\t\t}, {\n\t\t\tvalue: \"320903\",\n\t\t\ttext: \"盐都区\"\n\t\t}, {\n\t\t\tvalue: \"320921\",\n\t\t\ttext: \"响水县\"\n\t\t}, {\n\t\t\tvalue: \"320922\",\n\t\t\ttext: \"滨海县\"\n\t\t}, {\n\t\t\tvalue: \"320923\",\n\t\t\ttext: \"阜宁县\"\n\t\t}, {\n\t\t\tvalue: \"320924\",\n\t\t\ttext: \"射阳县\"\n\t\t}, {\n\t\t\tvalue: \"320925\",\n\t\t\ttext: \"建湖县\"\n\t\t}, {\n\t\t\tvalue: \"320981\",\n\t\t\ttext: \"东台市\"\n\t\t}, {\n\t\t\tvalue: \"320982\",\n\t\t\ttext: \"大丰市\"\n\t\t}, {\n\t\t\tvalue: \"320983\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"321000\",\n\t\ttext: \"扬州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"321002\",\n\t\t\ttext: \"广陵区\"\n\t\t}, {\n\t\t\tvalue: \"321003\",\n\t\t\ttext: \"邗江区\"\n\t\t}, {\n\t\t\tvalue: \"321011\",\n\t\t\ttext: \"维扬区\"\n\t\t}, {\n\t\t\tvalue: \"321023\",\n\t\t\ttext: \"宝应县\"\n\t\t}, {\n\t\t\tvalue: \"321081\",\n\t\t\ttext: \"仪征市\"\n\t\t}, {\n\t\t\tvalue: \"321084\",\n\t\t\ttext: \"高邮市\"\n\t\t}, {\n\t\t\tvalue: \"321088\",\n\t\t\ttext: \"江都市\"\n\t\t}, {\n\t\t\tvalue: \"321092\",\n\t\t\ttext: \"经济开发区\"\n\t\t}, {\n\t\t\tvalue: \"321093\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"321100\",\n\t\ttext: \"镇江市\",\n\t\tchildren: [{\n\t\t\tvalue: \"321102\",\n\t\t\ttext: \"京口区\"\n\t\t}, {\n\t\t\tvalue: \"321111\",\n\t\t\ttext: \"润州区\"\n\t\t}, {\n\t\t\tvalue: \"321112\",\n\t\t\ttext: \"丹徒区\"\n\t\t}, {\n\t\t\tvalue: \"321181\",\n\t\t\ttext: \"丹阳市\"\n\t\t}, {\n\t\t\tvalue: \"321182\",\n\t\t\ttext: \"扬中市\"\n\t\t}, {\n\t\t\tvalue: \"321183\",\n\t\t\ttext: \"句容市\"\n\t\t}, {\n\t\t\tvalue: \"321184\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"321200\",\n\t\ttext: \"泰州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"321202\",\n\t\t\ttext: \"海陵区\"\n\t\t}, {\n\t\t\tvalue: \"321203\",\n\t\t\ttext: \"高港区\"\n\t\t}, {\n\t\t\tvalue: \"321281\",\n\t\t\ttext: \"兴化市\"\n\t\t}, {\n\t\t\tvalue: \"321282\",\n\t\t\ttext: \"靖江市\"\n\t\t}, {\n\t\t\tvalue: \"321283\",\n\t\t\ttext: \"泰兴市\"\n\t\t}, {\n\t\t\tvalue: \"321284\",\n\t\t\ttext: \"姜堰市\"\n\t\t}, {\n\t\t\tvalue: \"321285\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"321300\",\n\t\ttext: \"宿迁市\",\n\t\tchildren: [{\n\t\t\tvalue: \"321302\",\n\t\t\ttext: \"宿城区\"\n\t\t}, {\n\t\t\tvalue: \"321311\",\n\t\t\ttext: \"宿豫区\"\n\t\t}, {\n\t\t\tvalue: \"321322\",\n\t\t\ttext: \"沭阳县\"\n\t\t}, {\n\t\t\tvalue: \"321323\",\n\t\t\ttext: \"泗阳县\"\n\t\t}, {\n\t\t\tvalue: \"321324\",\n\t\t\ttext: \"泗洪县\"\n\t\t}, {\n\t\t\tvalue: \"321325\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '330000',\n\ttext: '浙江省',\n\tchildren: [{\n\t\tvalue: \"330100\",\n\t\ttext: \"杭州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330102\",\n\t\t\ttext: \"上城区\"\n\t\t}, {\n\t\t\tvalue: \"330103\",\n\t\t\ttext: \"下城区\"\n\t\t}, {\n\t\t\tvalue: \"330104\",\n\t\t\ttext: \"江干区\"\n\t\t}, {\n\t\t\tvalue: \"330105\",\n\t\t\ttext: \"拱墅区\"\n\t\t}, {\n\t\t\tvalue: \"330106\",\n\t\t\ttext: \"西湖区\"\n\t\t}, {\n\t\t\tvalue: \"330108\",\n\t\t\ttext: \"滨江区\"\n\t\t}, {\n\t\t\tvalue: \"330109\",\n\t\t\ttext: \"萧山区\"\n\t\t}, {\n\t\t\tvalue: \"330110\",\n\t\t\ttext: \"余杭区\"\n\t\t}, {\n\t\t\tvalue: \"330122\",\n\t\t\ttext: \"桐庐县\"\n\t\t}, {\n\t\t\tvalue: \"330127\",\n\t\t\ttext: \"淳安县\"\n\t\t}, {\n\t\t\tvalue: \"330182\",\n\t\t\ttext: \"建德市\"\n\t\t}, {\n\t\t\tvalue: \"330183\",\n\t\t\ttext: \"富阳市\"\n\t\t}, {\n\t\t\tvalue: \"330185\",\n\t\t\ttext: \"临安市\"\n\t\t}, {\n\t\t\tvalue: \"330186\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"330200\",\n\t\ttext: \"宁波市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330203\",\n\t\t\ttext: \"海曙区\"\n\t\t}, {\n\t\t\tvalue: \"330204\",\n\t\t\ttext: \"江东区\"\n\t\t}, {\n\t\t\tvalue: \"330205\",\n\t\t\ttext: \"江北区\"\n\t\t}, {\n\t\t\tvalue: \"330206\",\n\t\t\ttext: \"北仑区\"\n\t\t}, {\n\t\t\tvalue: \"330211\",\n\t\t\ttext: \"镇海区\"\n\t\t}, {\n\t\t\tvalue: \"330212\",\n\t\t\ttext: \"鄞州区\"\n\t\t}, {\n\t\t\tvalue: \"330225\",\n\t\t\ttext: \"象山县\"\n\t\t}, {\n\t\t\tvalue: \"330226\",\n\t\t\ttext: \"宁海县\"\n\t\t}, {\n\t\t\tvalue: \"330281\",\n\t\t\ttext: \"余姚市\"\n\t\t}, {\n\t\t\tvalue: \"330282\",\n\t\t\ttext: \"慈溪市\"\n\t\t}, {\n\t\t\tvalue: \"330283\",\n\t\t\ttext: \"奉化市\"\n\t\t}, {\n\t\t\tvalue: \"330284\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"330300\",\n\t\ttext: \"温州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330302\",\n\t\t\ttext: \"鹿城区\"\n\t\t}, {\n\t\t\tvalue: \"330303\",\n\t\t\ttext: \"龙湾区\"\n\t\t}, {\n\t\t\tvalue: \"330304\",\n\t\t\ttext: \"瓯海区\"\n\t\t}, {\n\t\t\tvalue: \"330322\",\n\t\t\ttext: \"洞头县\"\n\t\t}, {\n\t\t\tvalue: \"330324\",\n\t\t\ttext: \"永嘉县\"\n\t\t}, {\n\t\t\tvalue: \"330326\",\n\t\t\ttext: \"平阳县\"\n\t\t}, {\n\t\t\tvalue: \"330327\",\n\t\t\ttext: \"苍南县\"\n\t\t}, {\n\t\t\tvalue: \"330328\",\n\t\t\ttext: \"文成县\"\n\t\t}, {\n\t\t\tvalue: \"330329\",\n\t\t\ttext: \"泰顺县\"\n\t\t}, {\n\t\t\tvalue: \"330381\",\n\t\t\ttext: \"瑞安市\"\n\t\t}, {\n\t\t\tvalue: \"330382\",\n\t\t\ttext: \"乐清市\"\n\t\t}, {\n\t\t\tvalue: \"330383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"330400\",\n\t\ttext: \"嘉兴市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330402\",\n\t\t\ttext: \"南湖区\"\n\t\t}, {\n\t\t\tvalue: \"330411\",\n\t\t\ttext: \"秀洲区\"\n\t\t}, {\n\t\t\tvalue: \"330421\",\n\t\t\ttext: \"嘉善县\"\n\t\t}, {\n\t\t\tvalue: \"330424\",\n\t\t\ttext: \"海盐县\"\n\t\t}, {\n\t\t\tvalue: \"330481\",\n\t\t\ttext: \"海宁市\"\n\t\t}, {\n\t\t\tvalue: \"330482\",\n\t\t\ttext: \"平湖市\"\n\t\t}, {\n\t\t\tvalue: \"330483\",\n\t\t\ttext: \"桐乡市\"\n\t\t}, {\n\t\t\tvalue: \"330484\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"330500\",\n\t\ttext: \"湖州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330502\",\n\t\t\ttext: \"吴兴区\"\n\t\t}, {\n\t\t\tvalue: \"330503\",\n\t\t\ttext: \"南浔区\"\n\t\t}, {\n\t\t\tvalue: \"330521\",\n\t\t\ttext: \"德清县\"\n\t\t}, {\n\t\t\tvalue: \"330522\",\n\t\t\ttext: \"长兴县\"\n\t\t}, {\n\t\t\tvalue: \"330523\",\n\t\t\ttext: \"安吉县\"\n\t\t}, {\n\t\t\tvalue: \"330524\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"330600\",\n\t\ttext: \"绍兴市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330602\",\n\t\t\ttext: \"越城区\"\n\t\t}, {\n\t\t\tvalue: \"330621\",\n\t\t\ttext: \"柯桥区\"\n\t\t}, {\n\t\t\tvalue: \"330624\",\n\t\t\ttext: \"新昌县\"\n\t\t}, {\n\t\t\tvalue: \"330681\",\n\t\t\ttext: \"诸暨市\"\n\t\t}, {\n\t\t\tvalue: \"330682\",\n\t\t\ttext: \"上虞区\"\n\t\t}, {\n\t\t\tvalue: \"330683\",\n\t\t\ttext: \"嵊州市\"\n\t\t}, {\n\t\t\tvalue: \"330684\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"330700\",\n\t\ttext: \"金华市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330702\",\n\t\t\ttext: \"婺城区\"\n\t\t}, {\n\t\t\tvalue: \"330703\",\n\t\t\ttext: \"金东区\"\n\t\t}, {\n\t\t\tvalue: \"330723\",\n\t\t\ttext: \"武义县\"\n\t\t}, {\n\t\t\tvalue: \"330726\",\n\t\t\ttext: \"浦江县\"\n\t\t}, {\n\t\t\tvalue: \"330727\",\n\t\t\ttext: \"磐安县\"\n\t\t}, {\n\t\t\tvalue: \"330781\",\n\t\t\ttext: \"兰溪市\"\n\t\t}, {\n\t\t\tvalue: \"330782\",\n\t\t\ttext: \"义乌市\"\n\t\t}, {\n\t\t\tvalue: \"330783\",\n\t\t\ttext: \"东阳市\"\n\t\t}, {\n\t\t\tvalue: \"330784\",\n\t\t\ttext: \"永康市\"\n\t\t}, {\n\t\t\tvalue: \"330785\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"330800\",\n\t\ttext: \"衢州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330802\",\n\t\t\ttext: \"柯城区\"\n\t\t}, {\n\t\t\tvalue: \"330803\",\n\t\t\ttext: \"衢江区\"\n\t\t}, {\n\t\t\tvalue: \"330822\",\n\t\t\ttext: \"常山县\"\n\t\t}, {\n\t\t\tvalue: \"330824\",\n\t\t\ttext: \"开化县\"\n\t\t}, {\n\t\t\tvalue: \"330825\",\n\t\t\ttext: \"龙游县\"\n\t\t}, {\n\t\t\tvalue: \"330881\",\n\t\t\ttext: \"江山市\"\n\t\t}, {\n\t\t\tvalue: \"330882\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"330900\",\n\t\ttext: \"舟山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"330902\",\n\t\t\ttext: \"定海区\"\n\t\t}, {\n\t\t\tvalue: \"330903\",\n\t\t\ttext: \"普陀区\"\n\t\t}, {\n\t\t\tvalue: \"330921\",\n\t\t\ttext: \"岱山县\"\n\t\t}, {\n\t\t\tvalue: \"330922\",\n\t\t\ttext: \"嵊泗县\"\n\t\t}, {\n\t\t\tvalue: \"330923\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"331000\",\n\t\ttext: \"台州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"331002\",\n\t\t\ttext: \"椒江区\"\n\t\t}, {\n\t\t\tvalue: \"331003\",\n\t\t\ttext: \"黄岩区\"\n\t\t}, {\n\t\t\tvalue: \"331004\",\n\t\t\ttext: \"路桥区\"\n\t\t}, {\n\t\t\tvalue: \"331021\",\n\t\t\ttext: \"玉环县\"\n\t\t}, {\n\t\t\tvalue: \"331022\",\n\t\t\ttext: \"三门县\"\n\t\t}, {\n\t\t\tvalue: \"331023\",\n\t\t\ttext: \"天台县\"\n\t\t}, {\n\t\t\tvalue: \"331024\",\n\t\t\ttext: \"仙居县\"\n\t\t}, {\n\t\t\tvalue: \"331081\",\n\t\t\ttext: \"温岭市\"\n\t\t}, {\n\t\t\tvalue: \"331082\",\n\t\t\ttext: \"临海市\"\n\t\t}, {\n\t\t\tvalue: \"331083\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"331100\",\n\t\ttext: \"丽水市\",\n\t\tchildren: [{\n\t\t\tvalue: \"331102\",\n\t\t\ttext: \"莲都区\"\n\t\t}, {\n\t\t\tvalue: \"331121\",\n\t\t\ttext: \"青田县\"\n\t\t}, {\n\t\t\tvalue: \"331122\",\n\t\t\ttext: \"缙云县\"\n\t\t}, {\n\t\t\tvalue: \"331123\",\n\t\t\ttext: \"遂昌县\"\n\t\t}, {\n\t\t\tvalue: \"331124\",\n\t\t\ttext: \"松阳县\"\n\t\t}, {\n\t\t\tvalue: \"331125\",\n\t\t\ttext: \"云和县\"\n\t\t}, {\n\t\t\tvalue: \"331126\",\n\t\t\ttext: \"庆元县\"\n\t\t}, {\n\t\t\tvalue: \"331127\",\n\t\t\ttext: \"景宁畲族自治县\"\n\t\t}, {\n\t\t\tvalue: \"331181\",\n\t\t\ttext: \"龙泉市\"\n\t\t}, {\n\t\t\tvalue: \"331182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '340000',\n\ttext: '安徽省',\n\tchildren: [{\n\t\tvalue: \"340100\",\n\t\ttext: \"合肥市\",\n\t\tchildren: [{\n\t\t\tvalue: \"340102\",\n\t\t\ttext: \"瑶海区\"\n\t\t}, {\n\t\t\tvalue: \"340103\",\n\t\t\ttext: \"庐阳区\"\n\t\t}, {\n\t\t\tvalue: \"340104\",\n\t\t\ttext: \"蜀山区\"\n\t\t}, {\n\t\t\tvalue: \"340111\",\n\t\t\ttext: \"包河区\"\n\t\t}, {\n\t\t\tvalue: \"340121\",\n\t\t\ttext: \"长丰县\"\n\t\t}, {\n\t\t\tvalue: \"340122\",\n\t\t\ttext: \"肥东县\"\n\t\t}, {\n\t\t\tvalue: \"340123\",\n\t\t\ttext: \"肥西县\"\n\t\t}, {\n\t\t\tvalue: \"340151\",\n\t\t\ttext: \"高新区\"\n\t\t}, {\n\t\t\tvalue: \"340191\",\n\t\t\ttext: \"中区\"\n\t\t}, {\n\t\t\tvalue: \"340192\",\n\t\t\ttext: \"其它区\"\n\t\t}, {\n\t\t\tvalue: \"341400\",\n\t\t\ttext: \"巢湖市\"\n\t\t}, {\n\t\t\tvalue: \"341402\",\n\t\t\ttext: \"居巢区\"\n\t\t}, {\n\t\t\tvalue: \"341421\",\n\t\t\ttext: \"庐江县\"\n\t\t}]\n\t}, {\n\t\tvalue: \"340200\",\n\t\ttext: \"芜湖市\",\n\t\tchildren: [{\n\t\t\tvalue: \"340202\",\n\t\t\ttext: \"镜湖区\"\n\t\t}, {\n\t\t\tvalue: \"340203\",\n\t\t\ttext: \"弋江区\"\n\t\t}, {\n\t\t\tvalue: \"340207\",\n\t\t\ttext: \"鸠江区\"\n\t\t}, {\n\t\t\tvalue: \"340208\",\n\t\t\ttext: \"三山区\"\n\t\t}, {\n\t\t\tvalue: \"340221\",\n\t\t\ttext: \"芜湖县\"\n\t\t}, {\n\t\t\tvalue: \"340222\",\n\t\t\ttext: \"繁昌县\"\n\t\t}, {\n\t\t\tvalue: \"340223\",\n\t\t\ttext: \"南陵县\"\n\t\t}, {\n\t\t\tvalue: \"340224\",\n\t\t\ttext: \"其它区\"\n\t\t}, {\n\t\t\tvalue: \"341422\",\n\t\t\ttext: \"无为县\"\n\t\t}]\n\t}, {\n\t\tvalue: \"340300\",\n\t\ttext: \"蚌埠市\",\n\t\tchildren: [{\n\t\t\tvalue: \"340302\",\n\t\t\ttext: \"龙子湖区\"\n\t\t}, {\n\t\t\tvalue: \"340303\",\n\t\t\ttext: \"蚌山区\"\n\t\t}, {\n\t\t\tvalue: \"340304\",\n\t\t\ttext: \"禹会区\"\n\t\t}, {\n\t\t\tvalue: \"340311\",\n\t\t\ttext: \"淮上区\"\n\t\t}, {\n\t\t\tvalue: \"340321\",\n\t\t\ttext: \"怀远县\"\n\t\t}, {\n\t\t\tvalue: \"340322\",\n\t\t\ttext: \"五河县\"\n\t\t}, {\n\t\t\tvalue: \"340323\",\n\t\t\ttext: \"固镇县\"\n\t\t}, {\n\t\t\tvalue: \"340324\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"340400\",\n\t\ttext: \"淮南市\",\n\t\tchildren: [{\n\t\t\tvalue: \"340402\",\n\t\t\ttext: \"大通区\"\n\t\t}, {\n\t\t\tvalue: \"340403\",\n\t\t\ttext: \"田家庵区\"\n\t\t}, {\n\t\t\tvalue: \"340404\",\n\t\t\ttext: \"谢家集区\"\n\t\t}, {\n\t\t\tvalue: \"340405\",\n\t\t\ttext: \"八公山区\"\n\t\t}, {\n\t\t\tvalue: \"340406\",\n\t\t\ttext: \"潘集区\"\n\t\t}, {\n\t\t\tvalue: \"340421\",\n\t\t\ttext: \"凤台县\"\n\t\t}, {\n\t\t\tvalue: \"340422\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"340500\",\n\t\ttext: \"马鞍山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"340502\",\n\t\t\ttext: \"金家庄区\"\n\t\t}, {\n\t\t\tvalue: \"340503\",\n\t\t\ttext: \"花山区\"\n\t\t}, {\n\t\t\tvalue: \"340504\",\n\t\t\ttext: \"雨山区\"\n\t\t}, {\n\t\t\tvalue: \"340521\",\n\t\t\ttext: \"当涂县\"\n\t\t}, {\n\t\t\tvalue: \"340522\",\n\t\t\ttext: \"其它区\"\n\t\t}, {\n\t\t\tvalue: \"341423\",\n\t\t\ttext: \"含山县\"\n\t\t}, {\n\t\t\tvalue: \"341424\",\n\t\t\ttext: \"和县\"\n\t\t}]\n\t}, {\n\t\tvalue: \"340600\",\n\t\ttext: \"淮北市\",\n\t\tchildren: [{\n\t\t\tvalue: \"340602\",\n\t\t\ttext: \"杜集区\"\n\t\t}, {\n\t\t\tvalue: \"340603\",\n\t\t\ttext: \"相山区\"\n\t\t}, {\n\t\t\tvalue: \"340604\",\n\t\t\ttext: \"烈山区\"\n\t\t}, {\n\t\t\tvalue: \"340621\",\n\t\t\ttext: \"濉溪县\"\n\t\t}, {\n\t\t\tvalue: \"340622\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"340700\",\n\t\ttext: \"铜陵市\",\n\t\tchildren: [{\n\t\t\tvalue: \"340702\",\n\t\t\ttext: \"铜官山区\"\n\t\t}, {\n\t\t\tvalue: \"340703\",\n\t\t\ttext: \"狮子山区\"\n\t\t}, {\n\t\t\tvalue: \"340711\",\n\t\t\ttext: \"郊区\"\n\t\t}, {\n\t\t\tvalue: \"340721\",\n\t\t\ttext: \"铜陵县\"\n\t\t}, {\n\t\t\tvalue: \"340722\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"340800\",\n\t\ttext: \"安庆市\",\n\t\tchildren: [{\n\t\t\tvalue: \"340802\",\n\t\t\ttext: \"迎江区\"\n\t\t}, {\n\t\t\tvalue: \"340803\",\n\t\t\ttext: \"大观区\"\n\t\t}, {\n\t\t\tvalue: \"340811\",\n\t\t\ttext: \"宜秀区\"\n\t\t}, {\n\t\t\tvalue: \"340822\",\n\t\t\ttext: \"怀宁县\"\n\t\t}, {\n\t\t\tvalue: \"340823\",\n\t\t\ttext: \"枞阳县\"\n\t\t}, {\n\t\t\tvalue: \"340824\",\n\t\t\ttext: \"潜山县\"\n\t\t}, {\n\t\t\tvalue: \"340825\",\n\t\t\ttext: \"太湖县\"\n\t\t}, {\n\t\t\tvalue: \"340826\",\n\t\t\ttext: \"宿松县\"\n\t\t}, {\n\t\t\tvalue: \"340827\",\n\t\t\ttext: \"望江县\"\n\t\t}, {\n\t\t\tvalue: \"340828\",\n\t\t\ttext: \"岳西县\"\n\t\t}, {\n\t\t\tvalue: \"340881\",\n\t\t\ttext: \"桐城市\"\n\t\t}, {\n\t\t\tvalue: \"340882\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"341000\",\n\t\ttext: \"黄山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"341002\",\n\t\t\ttext: \"屯溪区\"\n\t\t}, {\n\t\t\tvalue: \"341003\",\n\t\t\ttext: \"黄山区\"\n\t\t}, {\n\t\t\tvalue: \"341004\",\n\t\t\ttext: \"徽州区\"\n\t\t}, {\n\t\t\tvalue: \"341021\",\n\t\t\ttext: \"歙县\"\n\t\t}, {\n\t\t\tvalue: \"341022\",\n\t\t\ttext: \"休宁县\"\n\t\t}, {\n\t\t\tvalue: \"341023\",\n\t\t\ttext: \"黟县\"\n\t\t}, {\n\t\t\tvalue: \"341024\",\n\t\t\ttext: \"祁门县\"\n\t\t}, {\n\t\t\tvalue: \"341025\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"341100\",\n\t\ttext: \"滁州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"341102\",\n\t\t\ttext: \"琅琊区\"\n\t\t}, {\n\t\t\tvalue: \"341103\",\n\t\t\ttext: \"南谯区\"\n\t\t}, {\n\t\t\tvalue: \"341122\",\n\t\t\ttext: \"来安县\"\n\t\t}, {\n\t\t\tvalue: \"341124\",\n\t\t\ttext: \"全椒县\"\n\t\t}, {\n\t\t\tvalue: \"341125\",\n\t\t\ttext: \"定远县\"\n\t\t}, {\n\t\t\tvalue: \"341126\",\n\t\t\ttext: \"凤阳县\"\n\t\t}, {\n\t\t\tvalue: \"341181\",\n\t\t\ttext: \"天长市\"\n\t\t}, {\n\t\t\tvalue: \"341182\",\n\t\t\ttext: \"明光市\"\n\t\t}, {\n\t\t\tvalue: \"341183\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"341200\",\n\t\ttext: \"阜阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"341202\",\n\t\t\ttext: \"颍州区\"\n\t\t}, {\n\t\t\tvalue: \"341203\",\n\t\t\ttext: \"颍东区\"\n\t\t}, {\n\t\t\tvalue: \"341204\",\n\t\t\ttext: \"颍泉区\"\n\t\t}, {\n\t\t\tvalue: \"341221\",\n\t\t\ttext: \"临泉县\"\n\t\t}, {\n\t\t\tvalue: \"341222\",\n\t\t\ttext: \"太和县\"\n\t\t}, {\n\t\t\tvalue: \"341225\",\n\t\t\ttext: \"阜南县\"\n\t\t}, {\n\t\t\tvalue: \"341226\",\n\t\t\ttext: \"颍上县\"\n\t\t}, {\n\t\t\tvalue: \"341282\",\n\t\t\ttext: \"界首市\"\n\t\t}, {\n\t\t\tvalue: \"341283\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"341300\",\n\t\ttext: \"宿州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"341302\",\n\t\t\ttext: \"埇桥区\"\n\t\t}, {\n\t\t\tvalue: \"341321\",\n\t\t\ttext: \"砀山县\"\n\t\t}, {\n\t\t\tvalue: \"341322\",\n\t\t\ttext: \"萧县\"\n\t\t}, {\n\t\t\tvalue: \"341323\",\n\t\t\ttext: \"灵璧县\"\n\t\t}, {\n\t\t\tvalue: \"341324\",\n\t\t\ttext: \"泗县\"\n\t\t}, {\n\t\t\tvalue: \"341325\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"341500\",\n\t\ttext: \"六安市\",\n\t\tchildren: [{\n\t\t\tvalue: \"341502\",\n\t\t\ttext: \"金安区\"\n\t\t}, {\n\t\t\tvalue: \"341503\",\n\t\t\ttext: \"裕安区\"\n\t\t}, {\n\t\t\tvalue: \"341521\",\n\t\t\ttext: \"寿县\"\n\t\t}, {\n\t\t\tvalue: \"341522\",\n\t\t\ttext: \"霍邱县\"\n\t\t}, {\n\t\t\tvalue: \"341523\",\n\t\t\ttext: \"舒城县\"\n\t\t}, {\n\t\t\tvalue: \"341524\",\n\t\t\ttext: \"金寨县\"\n\t\t}, {\n\t\t\tvalue: \"341525\",\n\t\t\ttext: \"霍山县\"\n\t\t}, {\n\t\t\tvalue: \"341526\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"341600\",\n\t\ttext: \"亳州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"341602\",\n\t\t\ttext: \"谯城区\"\n\t\t}, {\n\t\t\tvalue: \"341621\",\n\t\t\ttext: \"涡阳县\"\n\t\t}, {\n\t\t\tvalue: \"341622\",\n\t\t\ttext: \"蒙城县\"\n\t\t}, {\n\t\t\tvalue: \"341623\",\n\t\t\ttext: \"利辛县\"\n\t\t}, {\n\t\t\tvalue: \"341624\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"341700\",\n\t\ttext: \"池州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"341702\",\n\t\t\ttext: \"贵池区\"\n\t\t}, {\n\t\t\tvalue: \"341721\",\n\t\t\ttext: \"东至县\"\n\t\t}, {\n\t\t\tvalue: \"341722\",\n\t\t\ttext: \"石台县\"\n\t\t}, {\n\t\t\tvalue: \"341723\",\n\t\t\ttext: \"青阳县\"\n\t\t}, {\n\t\t\tvalue: \"341724\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"341800\",\n\t\ttext: \"宣城市\",\n\t\tchildren: [{\n\t\t\tvalue: \"341802\",\n\t\t\ttext: \"宣州区\"\n\t\t}, {\n\t\t\tvalue: \"341821\",\n\t\t\ttext: \"郎溪县\"\n\t\t}, {\n\t\t\tvalue: \"341822\",\n\t\t\ttext: \"广德县\"\n\t\t}, {\n\t\t\tvalue: \"341823\",\n\t\t\ttext: \"泾县\"\n\t\t}, {\n\t\t\tvalue: \"341824\",\n\t\t\ttext: \"绩溪县\"\n\t\t}, {\n\t\t\tvalue: \"341825\",\n\t\t\ttext: \"旌德县\"\n\t\t}, {\n\t\t\tvalue: \"341881\",\n\t\t\ttext: \"宁国市\"\n\t\t}, {\n\t\t\tvalue: \"341882\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '350000',\n\ttext: '福建省',\n\tchildren: [{\n\t\tvalue: \"350100\",\n\t\ttext: \"福州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350102\",\n\t\t\ttext: \"鼓楼区\"\n\t\t}, {\n\t\t\tvalue: \"350103\",\n\t\t\ttext: \"台江区\"\n\t\t}, {\n\t\t\tvalue: \"350104\",\n\t\t\ttext: \"仓山区\"\n\t\t}, {\n\t\t\tvalue: \"350105\",\n\t\t\ttext: \"马尾区\"\n\t\t}, {\n\t\t\tvalue: \"350111\",\n\t\t\ttext: \"晋安区\"\n\t\t}, {\n\t\t\tvalue: \"350121\",\n\t\t\ttext: \"闽侯县\"\n\t\t}, {\n\t\t\tvalue: \"350122\",\n\t\t\ttext: \"连江县\"\n\t\t}, {\n\t\t\tvalue: \"350123\",\n\t\t\ttext: \"罗源县\"\n\t\t}, {\n\t\t\tvalue: \"350124\",\n\t\t\ttext: \"闽清县\"\n\t\t}, {\n\t\t\tvalue: \"350125\",\n\t\t\ttext: \"永泰县\"\n\t\t}, {\n\t\t\tvalue: \"350128\",\n\t\t\ttext: \"平潭县\"\n\t\t}, {\n\t\t\tvalue: \"350181\",\n\t\t\ttext: \"福清市\"\n\t\t}, {\n\t\t\tvalue: \"350182\",\n\t\t\ttext: \"长乐市\"\n\t\t}, {\n\t\t\tvalue: \"350183\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"350200\",\n\t\ttext: \"厦门市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350203\",\n\t\t\ttext: \"思明区\"\n\t\t}, {\n\t\t\tvalue: \"350205\",\n\t\t\ttext: \"海沧区\"\n\t\t}, {\n\t\t\tvalue: \"350206\",\n\t\t\ttext: \"湖里区\"\n\t\t}, {\n\t\t\tvalue: \"350211\",\n\t\t\ttext: \"集美区\"\n\t\t}, {\n\t\t\tvalue: \"350212\",\n\t\t\ttext: \"同安区\"\n\t\t}, {\n\t\t\tvalue: \"350213\",\n\t\t\ttext: \"翔安区\"\n\t\t}, {\n\t\t\tvalue: \"350214\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"350300\",\n\t\ttext: \"莆田市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350302\",\n\t\t\ttext: \"城厢区\"\n\t\t}, {\n\t\t\tvalue: \"350303\",\n\t\t\ttext: \"涵江区\"\n\t\t}, {\n\t\t\tvalue: \"350304\",\n\t\t\ttext: \"荔城区\"\n\t\t}, {\n\t\t\tvalue: \"350305\",\n\t\t\ttext: \"秀屿区\"\n\t\t}, {\n\t\t\tvalue: \"350322\",\n\t\t\ttext: \"仙游县\"\n\t\t}, {\n\t\t\tvalue: \"350323\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"350400\",\n\t\ttext: \"三明市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350402\",\n\t\t\ttext: \"梅列区\"\n\t\t}, {\n\t\t\tvalue: \"350403\",\n\t\t\ttext: \"三元区\"\n\t\t}, {\n\t\t\tvalue: \"350421\",\n\t\t\ttext: \"明溪县\"\n\t\t}, {\n\t\t\tvalue: \"350423\",\n\t\t\ttext: \"清流县\"\n\t\t}, {\n\t\t\tvalue: \"350424\",\n\t\t\ttext: \"宁化县\"\n\t\t}, {\n\t\t\tvalue: \"350425\",\n\t\t\ttext: \"大田县\"\n\t\t}, {\n\t\t\tvalue: \"350426\",\n\t\t\ttext: \"尤溪县\"\n\t\t}, {\n\t\t\tvalue: \"350427\",\n\t\t\ttext: \"沙县\"\n\t\t}, {\n\t\t\tvalue: \"350428\",\n\t\t\ttext: \"将乐县\"\n\t\t}, {\n\t\t\tvalue: \"350429\",\n\t\t\ttext: \"泰宁县\"\n\t\t}, {\n\t\t\tvalue: \"350430\",\n\t\t\ttext: \"建宁县\"\n\t\t}, {\n\t\t\tvalue: \"350481\",\n\t\t\ttext: \"永安市\"\n\t\t}, {\n\t\t\tvalue: \"350482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"350500\",\n\t\ttext: \"泉州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350502\",\n\t\t\ttext: \"鲤城区\"\n\t\t}, {\n\t\t\tvalue: \"350503\",\n\t\t\ttext: \"丰泽区\"\n\t\t}, {\n\t\t\tvalue: \"350504\",\n\t\t\ttext: \"洛江区\"\n\t\t}, {\n\t\t\tvalue: \"350505\",\n\t\t\ttext: \"泉港区\"\n\t\t}, {\n\t\t\tvalue: \"350521\",\n\t\t\ttext: \"惠安县\"\n\t\t}, {\n\t\t\tvalue: \"350524\",\n\t\t\ttext: \"安溪县\"\n\t\t}, {\n\t\t\tvalue: \"350525\",\n\t\t\ttext: \"永春县\"\n\t\t}, {\n\t\t\tvalue: \"350526\",\n\t\t\ttext: \"德化县\"\n\t\t}, {\n\t\t\tvalue: \"350527\",\n\t\t\ttext: \"金门县\"\n\t\t}, {\n\t\t\tvalue: \"350581\",\n\t\t\ttext: \"石狮市\"\n\t\t}, {\n\t\t\tvalue: \"350582\",\n\t\t\ttext: \"晋江市\"\n\t\t}, {\n\t\t\tvalue: \"350583\",\n\t\t\ttext: \"南安市\"\n\t\t}, {\n\t\t\tvalue: \"350584\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"350600\",\n\t\ttext: \"漳州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350602\",\n\t\t\ttext: \"芗城区\"\n\t\t}, {\n\t\t\tvalue: \"350603\",\n\t\t\ttext: \"龙文区\"\n\t\t}, {\n\t\t\tvalue: \"350622\",\n\t\t\ttext: \"云霄县\"\n\t\t}, {\n\t\t\tvalue: \"350623\",\n\t\t\ttext: \"漳浦县\"\n\t\t}, {\n\t\t\tvalue: \"350624\",\n\t\t\ttext: \"诏安县\"\n\t\t}, {\n\t\t\tvalue: \"350625\",\n\t\t\ttext: \"长泰县\"\n\t\t}, {\n\t\t\tvalue: \"350626\",\n\t\t\ttext: \"东山县\"\n\t\t}, {\n\t\t\tvalue: \"350627\",\n\t\t\ttext: \"南靖县\"\n\t\t}, {\n\t\t\tvalue: \"350628\",\n\t\t\ttext: \"平和县\"\n\t\t}, {\n\t\t\tvalue: \"350629\",\n\t\t\ttext: \"华安县\"\n\t\t}, {\n\t\t\tvalue: \"350681\",\n\t\t\ttext: \"龙海市\"\n\t\t}, {\n\t\t\tvalue: \"350682\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"350700\",\n\t\ttext: \"南平市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350702\",\n\t\t\ttext: \"延平区\"\n\t\t}, {\n\t\t\tvalue: \"350721\",\n\t\t\ttext: \"顺昌县\"\n\t\t}, {\n\t\t\tvalue: \"350722\",\n\t\t\ttext: \"浦城县\"\n\t\t}, {\n\t\t\tvalue: \"350723\",\n\t\t\ttext: \"光泽县\"\n\t\t}, {\n\t\t\tvalue: \"350724\",\n\t\t\ttext: \"松溪县\"\n\t\t}, {\n\t\t\tvalue: \"350725\",\n\t\t\ttext: \"政和县\"\n\t\t}, {\n\t\t\tvalue: \"350781\",\n\t\t\ttext: \"邵武市\"\n\t\t}, {\n\t\t\tvalue: \"350782\",\n\t\t\ttext: \"武夷山市\"\n\t\t}, {\n\t\t\tvalue: \"350783\",\n\t\t\ttext: \"建瓯市\"\n\t\t}, {\n\t\t\tvalue: \"350784\",\n\t\t\ttext: \"建阳市\"\n\t\t}, {\n\t\t\tvalue: \"350785\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"350800\",\n\t\ttext: \"龙岩市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350802\",\n\t\t\ttext: \"新罗区\"\n\t\t}, {\n\t\t\tvalue: \"350821\",\n\t\t\ttext: \"长汀县\"\n\t\t}, {\n\t\t\tvalue: \"350822\",\n\t\t\ttext: \"永定县\"\n\t\t}, {\n\t\t\tvalue: \"350823\",\n\t\t\ttext: \"上杭县\"\n\t\t}, {\n\t\t\tvalue: \"350824\",\n\t\t\ttext: \"武平县\"\n\t\t}, {\n\t\t\tvalue: \"350825\",\n\t\t\ttext: \"连城县\"\n\t\t}, {\n\t\t\tvalue: \"350881\",\n\t\t\ttext: \"漳平市\"\n\t\t}, {\n\t\t\tvalue: \"350882\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"350900\",\n\t\ttext: \"宁德市\",\n\t\tchildren: [{\n\t\t\tvalue: \"350902\",\n\t\t\ttext: \"蕉城区\"\n\t\t}, {\n\t\t\tvalue: \"350921\",\n\t\t\ttext: \"霞浦县\"\n\t\t}, {\n\t\t\tvalue: \"350922\",\n\t\t\ttext: \"古田县\"\n\t\t}, {\n\t\t\tvalue: \"350923\",\n\t\t\ttext: \"屏南县\"\n\t\t}, {\n\t\t\tvalue: \"350924\",\n\t\t\ttext: \"寿宁县\"\n\t\t}, {\n\t\t\tvalue: \"350925\",\n\t\t\ttext: \"周宁县\"\n\t\t}, {\n\t\t\tvalue: \"350926\",\n\t\t\ttext: \"柘荣县\"\n\t\t}, {\n\t\t\tvalue: \"350981\",\n\t\t\ttext: \"福安市\"\n\t\t}, {\n\t\t\tvalue: \"350982\",\n\t\t\ttext: \"福鼎市\"\n\t\t}, {\n\t\t\tvalue: \"350983\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '360000',\n\ttext: '江西省',\n\tchildren: [{\n\t\tvalue: \"360100\",\n\t\ttext: \"南昌市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360102\",\n\t\t\ttext: \"东湖区\"\n\t\t}, {\n\t\t\tvalue: \"360103\",\n\t\t\ttext: \"西湖区\"\n\t\t}, {\n\t\t\tvalue: \"360104\",\n\t\t\ttext: \"青云谱区\"\n\t\t}, {\n\t\t\tvalue: \"360105\",\n\t\t\ttext: \"湾里区\"\n\t\t}, {\n\t\t\tvalue: \"360111\",\n\t\t\ttext: \"青山湖区\"\n\t\t}, {\n\t\t\tvalue: \"360121\",\n\t\t\ttext: \"南昌县\"\n\t\t}, {\n\t\t\tvalue: \"360122\",\n\t\t\ttext: \"新建县\"\n\t\t}, {\n\t\t\tvalue: \"360123\",\n\t\t\ttext: \"安义县\"\n\t\t}, {\n\t\t\tvalue: \"360124\",\n\t\t\ttext: \"进贤县\"\n\t\t}, {\n\t\t\tvalue: \"360125\",\n\t\t\ttext: \"红谷滩新区\"\n\t\t}, {\n\t\t\tvalue: \"360126\",\n\t\t\ttext: \"经济技术开发区\"\n\t\t}, {\n\t\t\tvalue: \"360127\",\n\t\t\ttext: \"昌北区\"\n\t\t}, {\n\t\t\tvalue: \"360128\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"360200\",\n\t\ttext: \"景德镇市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360202\",\n\t\t\ttext: \"昌江区\"\n\t\t}, {\n\t\t\tvalue: \"360203\",\n\t\t\ttext: \"珠山区\"\n\t\t}, {\n\t\t\tvalue: \"360222\",\n\t\t\ttext: \"浮梁县\"\n\t\t}, {\n\t\t\tvalue: \"360281\",\n\t\t\ttext: \"乐平市\"\n\t\t}, {\n\t\t\tvalue: \"360282\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"360300\",\n\t\ttext: \"萍乡市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360302\",\n\t\t\ttext: \"安源区\"\n\t\t}, {\n\t\t\tvalue: \"360313\",\n\t\t\ttext: \"湘东区\"\n\t\t}, {\n\t\t\tvalue: \"360321\",\n\t\t\ttext: \"莲花县\"\n\t\t}, {\n\t\t\tvalue: \"360322\",\n\t\t\ttext: \"上栗县\"\n\t\t}, {\n\t\t\tvalue: \"360323\",\n\t\t\ttext: \"芦溪县\"\n\t\t}, {\n\t\t\tvalue: \"360324\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"360400\",\n\t\ttext: \"九江市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360402\",\n\t\t\ttext: \"庐山区\"\n\t\t}, {\n\t\t\tvalue: \"360403\",\n\t\t\ttext: \"浔阳区\"\n\t\t}, {\n\t\t\tvalue: \"360421\",\n\t\t\ttext: \"九江县\"\n\t\t}, {\n\t\t\tvalue: \"360423\",\n\t\t\ttext: \"武宁县\"\n\t\t}, {\n\t\t\tvalue: \"360424\",\n\t\t\ttext: \"修水县\"\n\t\t}, {\n\t\t\tvalue: \"360425\",\n\t\t\ttext: \"永修县\"\n\t\t}, {\n\t\t\tvalue: \"360426\",\n\t\t\ttext: \"德安县\"\n\t\t}, {\n\t\t\tvalue: \"360427\",\n\t\t\ttext: \"星子县\"\n\t\t}, {\n\t\t\tvalue: \"360428\",\n\t\t\ttext: \"都昌县\"\n\t\t}, {\n\t\t\tvalue: \"360429\",\n\t\t\ttext: \"湖口县\"\n\t\t}, {\n\t\t\tvalue: \"360430\",\n\t\t\ttext: \"彭泽县\"\n\t\t}, {\n\t\t\tvalue: \"360481\",\n\t\t\ttext: \"瑞昌市\"\n\t\t}, {\n\t\t\tvalue: \"360482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"360500\",\n\t\ttext: \"新余市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360502\",\n\t\t\ttext: \"渝水区\"\n\t\t}, {\n\t\t\tvalue: \"360521\",\n\t\t\ttext: \"分宜县\"\n\t\t}, {\n\t\t\tvalue: \"360522\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"360600\",\n\t\ttext: \"鹰潭市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360602\",\n\t\t\ttext: \"月湖区\"\n\t\t}, {\n\t\t\tvalue: \"360622\",\n\t\t\ttext: \"余江县\"\n\t\t}, {\n\t\t\tvalue: \"360681\",\n\t\t\ttext: \"贵溪市\"\n\t\t}, {\n\t\t\tvalue: \"360682\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"360700\",\n\t\ttext: \"赣州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360702\",\n\t\t\ttext: \"章贡区\"\n\t\t}, {\n\t\t\tvalue: \"360721\",\n\t\t\ttext: \"赣县\"\n\t\t}, {\n\t\t\tvalue: \"360722\",\n\t\t\ttext: \"信丰县\"\n\t\t}, {\n\t\t\tvalue: \"360723\",\n\t\t\ttext: \"大余县\"\n\t\t}, {\n\t\t\tvalue: \"360724\",\n\t\t\ttext: \"上犹县\"\n\t\t}, {\n\t\t\tvalue: \"360725\",\n\t\t\ttext: \"崇义县\"\n\t\t}, {\n\t\t\tvalue: \"360726\",\n\t\t\ttext: \"安远县\"\n\t\t}, {\n\t\t\tvalue: \"360727\",\n\t\t\ttext: \"龙南县\"\n\t\t}, {\n\t\t\tvalue: \"360728\",\n\t\t\ttext: \"定南县\"\n\t\t}, {\n\t\t\tvalue: \"360729\",\n\t\t\ttext: \"全南县\"\n\t\t}, {\n\t\t\tvalue: \"360730\",\n\t\t\ttext: \"宁都县\"\n\t\t}, {\n\t\t\tvalue: \"360731\",\n\t\t\ttext: \"于都县\"\n\t\t}, {\n\t\t\tvalue: \"360732\",\n\t\t\ttext: \"兴国县\"\n\t\t}, {\n\t\t\tvalue: \"360733\",\n\t\t\ttext: \"会昌县\"\n\t\t}, {\n\t\t\tvalue: \"360734\",\n\t\t\ttext: \"寻乌县\"\n\t\t}, {\n\t\t\tvalue: \"360735\",\n\t\t\ttext: \"石城县\"\n\t\t}, {\n\t\t\tvalue: \"360751\",\n\t\t\ttext: \"黄金区\"\n\t\t}, {\n\t\t\tvalue: \"360781\",\n\t\t\ttext: \"瑞金市\"\n\t\t}, {\n\t\t\tvalue: \"360782\",\n\t\t\ttext: \"南康市\"\n\t\t}, {\n\t\t\tvalue: \"360783\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"360800\",\n\t\ttext: \"吉安市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360802\",\n\t\t\ttext: \"吉州区\"\n\t\t}, {\n\t\t\tvalue: \"360803\",\n\t\t\ttext: \"青原区\"\n\t\t}, {\n\t\t\tvalue: \"360821\",\n\t\t\ttext: \"吉安县\"\n\t\t}, {\n\t\t\tvalue: \"360822\",\n\t\t\ttext: \"吉水县\"\n\t\t}, {\n\t\t\tvalue: \"360823\",\n\t\t\ttext: \"峡江县\"\n\t\t}, {\n\t\t\tvalue: \"360824\",\n\t\t\ttext: \"新干县\"\n\t\t}, {\n\t\t\tvalue: \"360825\",\n\t\t\ttext: \"永丰县\"\n\t\t}, {\n\t\t\tvalue: \"360826\",\n\t\t\ttext: \"泰和县\"\n\t\t}, {\n\t\t\tvalue: \"360827\",\n\t\t\ttext: \"遂川县\"\n\t\t}, {\n\t\t\tvalue: \"360828\",\n\t\t\ttext: \"万安县\"\n\t\t}, {\n\t\t\tvalue: \"360829\",\n\t\t\ttext: \"安福县\"\n\t\t}, {\n\t\t\tvalue: \"360830\",\n\t\t\ttext: \"永新县\"\n\t\t}, {\n\t\t\tvalue: \"360881\",\n\t\t\ttext: \"井冈山市\"\n\t\t}, {\n\t\t\tvalue: \"360882\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"360900\",\n\t\ttext: \"宜春市\",\n\t\tchildren: [{\n\t\t\tvalue: \"360902\",\n\t\t\ttext: \"袁州区\"\n\t\t}, {\n\t\t\tvalue: \"360921\",\n\t\t\ttext: \"奉新县\"\n\t\t}, {\n\t\t\tvalue: \"360922\",\n\t\t\ttext: \"万载县\"\n\t\t}, {\n\t\t\tvalue: \"360923\",\n\t\t\ttext: \"上高县\"\n\t\t}, {\n\t\t\tvalue: \"360924\",\n\t\t\ttext: \"宜丰县\"\n\t\t}, {\n\t\t\tvalue: \"360925\",\n\t\t\ttext: \"靖安县\"\n\t\t}, {\n\t\t\tvalue: \"360926\",\n\t\t\ttext: \"铜鼓县\"\n\t\t}, {\n\t\t\tvalue: \"360981\",\n\t\t\ttext: \"丰城市\"\n\t\t}, {\n\t\t\tvalue: \"360982\",\n\t\t\ttext: \"樟树市\"\n\t\t}, {\n\t\t\tvalue: \"360983\",\n\t\t\ttext: \"高安市\"\n\t\t}, {\n\t\t\tvalue: \"360984\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"361000\",\n\t\ttext: \"抚州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"361002\",\n\t\t\ttext: \"临川区\"\n\t\t}, {\n\t\t\tvalue: \"361021\",\n\t\t\ttext: \"南城县\"\n\t\t}, {\n\t\t\tvalue: \"361022\",\n\t\t\ttext: \"黎川县\"\n\t\t}, {\n\t\t\tvalue: \"361023\",\n\t\t\ttext: \"南丰县\"\n\t\t}, {\n\t\t\tvalue: \"361024\",\n\t\t\ttext: \"崇仁县\"\n\t\t}, {\n\t\t\tvalue: \"361025\",\n\t\t\ttext: \"乐安县\"\n\t\t}, {\n\t\t\tvalue: \"361026\",\n\t\t\ttext: \"宜黄县\"\n\t\t}, {\n\t\t\tvalue: \"361027\",\n\t\t\ttext: \"金溪县\"\n\t\t}, {\n\t\t\tvalue: \"361028\",\n\t\t\ttext: \"资溪县\"\n\t\t}, {\n\t\t\tvalue: \"361029\",\n\t\t\ttext: \"东乡县\"\n\t\t}, {\n\t\t\tvalue: \"361030\",\n\t\t\ttext: \"广昌县\"\n\t\t}, {\n\t\t\tvalue: \"361031\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"361100\",\n\t\ttext: \"上饶市\",\n\t\tchildren: [{\n\t\t\tvalue: \"361102\",\n\t\t\ttext: \"信州区\"\n\t\t}, {\n\t\t\tvalue: \"361121\",\n\t\t\ttext: \"上饶县\"\n\t\t}, {\n\t\t\tvalue: \"361122\",\n\t\t\ttext: \"广丰县\"\n\t\t}, {\n\t\t\tvalue: \"361123\",\n\t\t\ttext: \"玉山县\"\n\t\t}, {\n\t\t\tvalue: \"361124\",\n\t\t\ttext: \"铅山县\"\n\t\t}, {\n\t\t\tvalue: \"361125\",\n\t\t\ttext: \"横峰县\"\n\t\t}, {\n\t\t\tvalue: \"361126\",\n\t\t\ttext: \"弋阳县\"\n\t\t}, {\n\t\t\tvalue: \"361127\",\n\t\t\ttext: \"余干县\"\n\t\t}, {\n\t\t\tvalue: \"361128\",\n\t\t\ttext: \"鄱阳县\"\n\t\t}, {\n\t\t\tvalue: \"361129\",\n\t\t\ttext: \"万年县\"\n\t\t}, {\n\t\t\tvalue: \"361130\",\n\t\t\ttext: \"婺源县\"\n\t\t}, {\n\t\t\tvalue: \"361181\",\n\t\t\ttext: \"德兴市\"\n\t\t}, {\n\t\t\tvalue: \"361182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '370000',\n\ttext: '山东省',\n\tchildren: [{\n\t\tvalue: \"370100\",\n\t\ttext: \"济南市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370102\",\n\t\t\ttext: \"历下区\"\n\t\t}, {\n\t\t\tvalue: \"370103\",\n\t\t\ttext: \"市中区\"\n\t\t}, {\n\t\t\tvalue: \"370104\",\n\t\t\ttext: \"槐荫区\"\n\t\t}, {\n\t\t\tvalue: \"370105\",\n\t\t\ttext: \"天桥区\"\n\t\t}, {\n\t\t\tvalue: \"370112\",\n\t\t\ttext: \"历城区\"\n\t\t}, {\n\t\t\tvalue: \"370113\",\n\t\t\ttext: \"长清区\"\n\t\t}, {\n\t\t\tvalue: \"370124\",\n\t\t\ttext: \"平阴县\"\n\t\t}, {\n\t\t\tvalue: \"370125\",\n\t\t\ttext: \"济阳县\"\n\t\t}, {\n\t\t\tvalue: \"370126\",\n\t\t\ttext: \"商河县\"\n\t\t}, {\n\t\t\tvalue: \"370181\",\n\t\t\ttext: \"章丘市\"\n\t\t}, {\n\t\t\tvalue: \"370182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"370200\",\n\t\ttext: \"青岛市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370202\",\n\t\t\ttext: \"市南区\"\n\t\t}, {\n\t\t\tvalue: \"370203\",\n\t\t\ttext: \"市北区\"\n\t\t}, {\n\t\t\tvalue: \"370205\",\n\t\t\ttext: \"四方区\"\n\t\t}, {\n\t\t\tvalue: \"370211\",\n\t\t\ttext: \"黄岛区\"\n\t\t}, {\n\t\t\tvalue: \"370212\",\n\t\t\ttext: \"崂山区\"\n\t\t}, {\n\t\t\tvalue: \"370213\",\n\t\t\ttext: \"李沧区\"\n\t\t}, {\n\t\t\tvalue: \"370214\",\n\t\t\ttext: \"城阳区\"\n\t\t}, {\n\t\t\tvalue: \"370251\",\n\t\t\ttext: \"开发区\"\n\t\t}, {\n\t\t\tvalue: \"370281\",\n\t\t\ttext: \"胶州市\"\n\t\t}, {\n\t\t\tvalue: \"370282\",\n\t\t\ttext: \"即墨市\"\n\t\t}, {\n\t\t\tvalue: \"370283\",\n\t\t\ttext: \"平度市\"\n\t\t}, {\n\t\t\tvalue: \"370284\",\n\t\t\ttext: \"胶南市\"\n\t\t}, {\n\t\t\tvalue: \"370285\",\n\t\t\ttext: \"莱西市\"\n\t\t}, {\n\t\t\tvalue: \"370286\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"370300\",\n\t\ttext: \"淄博市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370302\",\n\t\t\ttext: \"淄川区\"\n\t\t}, {\n\t\t\tvalue: \"370303\",\n\t\t\ttext: \"张店区\"\n\t\t}, {\n\t\t\tvalue: \"370304\",\n\t\t\ttext: \"博山区\"\n\t\t}, {\n\t\t\tvalue: \"370305\",\n\t\t\ttext: \"临淄区\"\n\t\t}, {\n\t\t\tvalue: \"370306\",\n\t\t\ttext: \"周村区\"\n\t\t}, {\n\t\t\tvalue: \"370321\",\n\t\t\ttext: \"桓台县\"\n\t\t}, {\n\t\t\tvalue: \"370322\",\n\t\t\ttext: \"高青县\"\n\t\t}, {\n\t\t\tvalue: \"370323\",\n\t\t\ttext: \"沂源县\"\n\t\t}, {\n\t\t\tvalue: \"370324\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"370400\",\n\t\ttext: \"枣庄市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370402\",\n\t\t\ttext: \"市中区\"\n\t\t}, {\n\t\t\tvalue: \"370403\",\n\t\t\ttext: \"薛城区\"\n\t\t}, {\n\t\t\tvalue: \"370404\",\n\t\t\ttext: \"峄城区\"\n\t\t}, {\n\t\t\tvalue: \"370405\",\n\t\t\ttext: \"台儿庄区\"\n\t\t}, {\n\t\t\tvalue: \"370406\",\n\t\t\ttext: \"山亭区\"\n\t\t}, {\n\t\t\tvalue: \"370481\",\n\t\t\ttext: \"滕州市\"\n\t\t}, {\n\t\t\tvalue: \"370482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"370500\",\n\t\ttext: \"东营市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370502\",\n\t\t\ttext: \"东营区\"\n\t\t}, {\n\t\t\tvalue: \"370503\",\n\t\t\ttext: \"河口区\"\n\t\t}, {\n\t\t\tvalue: \"370521\",\n\t\t\ttext: \"垦利县\"\n\t\t}, {\n\t\t\tvalue: \"370522\",\n\t\t\ttext: \"利津县\"\n\t\t}, {\n\t\t\tvalue: \"370523\",\n\t\t\ttext: \"广饶县\"\n\t\t}, {\n\t\t\tvalue: \"370589\",\n\t\t\ttext: \"西城区\"\n\t\t}, {\n\t\t\tvalue: \"370590\",\n\t\t\ttext: \"东城区\"\n\t\t}, {\n\t\t\tvalue: \"370591\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"370600\",\n\t\ttext: \"烟台市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370602\",\n\t\t\ttext: \"芝罘区\"\n\t\t}, {\n\t\t\tvalue: \"370611\",\n\t\t\ttext: \"福山区\"\n\t\t}, {\n\t\t\tvalue: \"370612\",\n\t\t\ttext: \"牟平区\"\n\t\t}, {\n\t\t\tvalue: \"370613\",\n\t\t\ttext: \"莱山区\"\n\t\t}, {\n\t\t\tvalue: \"370634\",\n\t\t\ttext: \"长岛县\"\n\t\t}, {\n\t\t\tvalue: \"370681\",\n\t\t\ttext: \"龙口市\"\n\t\t}, {\n\t\t\tvalue: \"370682\",\n\t\t\ttext: \"莱阳市\"\n\t\t}, {\n\t\t\tvalue: \"370683\",\n\t\t\ttext: \"莱州市\"\n\t\t}, {\n\t\t\tvalue: \"370684\",\n\t\t\ttext: \"蓬莱市\"\n\t\t}, {\n\t\t\tvalue: \"370685\",\n\t\t\ttext: \"招远市\"\n\t\t}, {\n\t\t\tvalue: \"370686\",\n\t\t\ttext: \"栖霞市\"\n\t\t}, {\n\t\t\tvalue: \"370687\",\n\t\t\ttext: \"海阳市\"\n\t\t}, {\n\t\t\tvalue: \"370688\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"370700\",\n\t\ttext: \"潍坊市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370702\",\n\t\t\ttext: \"潍城区\"\n\t\t}, {\n\t\t\tvalue: \"370703\",\n\t\t\ttext: \"寒亭区\"\n\t\t}, {\n\t\t\tvalue: \"370704\",\n\t\t\ttext: \"坊子区\"\n\t\t}, {\n\t\t\tvalue: \"370705\",\n\t\t\ttext: \"奎文区\"\n\t\t}, {\n\t\t\tvalue: \"370724\",\n\t\t\ttext: \"临朐县\"\n\t\t}, {\n\t\t\tvalue: \"370725\",\n\t\t\ttext: \"昌乐县\"\n\t\t}, {\n\t\t\tvalue: \"370751\",\n\t\t\ttext: \"开发区\"\n\t\t}, {\n\t\t\tvalue: \"370781\",\n\t\t\ttext: \"青州市\"\n\t\t}, {\n\t\t\tvalue: \"370782\",\n\t\t\ttext: \"诸城市\"\n\t\t}, {\n\t\t\tvalue: \"370783\",\n\t\t\ttext: \"寿光市\"\n\t\t}, {\n\t\t\tvalue: \"370784\",\n\t\t\ttext: \"安丘市\"\n\t\t}, {\n\t\t\tvalue: \"370785\",\n\t\t\ttext: \"高密市\"\n\t\t}, {\n\t\t\tvalue: \"370786\",\n\t\t\ttext: \"昌邑市\"\n\t\t}, {\n\t\t\tvalue: \"370787\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"370800\",\n\t\ttext: \"济宁市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370802\",\n\t\t\ttext: \"市中区\"\n\t\t}, {\n\t\t\tvalue: \"370811\",\n\t\t\ttext: \"任城区\"\n\t\t}, {\n\t\t\tvalue: \"370826\",\n\t\t\ttext: \"微山县\"\n\t\t}, {\n\t\t\tvalue: \"370827\",\n\t\t\ttext: \"鱼台县\"\n\t\t}, {\n\t\t\tvalue: \"370828\",\n\t\t\ttext: \"金乡县\"\n\t\t}, {\n\t\t\tvalue: \"370829\",\n\t\t\ttext: \"嘉祥县\"\n\t\t}, {\n\t\t\tvalue: \"370830\",\n\t\t\ttext: \"汶上县\"\n\t\t}, {\n\t\t\tvalue: \"370831\",\n\t\t\ttext: \"泗水县\"\n\t\t}, {\n\t\t\tvalue: \"370832\",\n\t\t\ttext: \"梁山县\"\n\t\t}, {\n\t\t\tvalue: \"370881\",\n\t\t\ttext: \"曲阜市\"\n\t\t}, {\n\t\t\tvalue: \"370882\",\n\t\t\ttext: \"兖州市\"\n\t\t}, {\n\t\t\tvalue: \"370883\",\n\t\t\ttext: \"邹城市\"\n\t\t}, {\n\t\t\tvalue: \"370884\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"370900\",\n\t\ttext: \"泰安市\",\n\t\tchildren: [{\n\t\t\tvalue: \"370902\",\n\t\t\ttext: \"泰山区\"\n\t\t}, {\n\t\t\tvalue: \"370903\",\n\t\t\ttext: \"岱岳区\"\n\t\t}, {\n\t\t\tvalue: \"370921\",\n\t\t\ttext: \"宁阳县\"\n\t\t}, {\n\t\t\tvalue: \"370923\",\n\t\t\ttext: \"东平县\"\n\t\t}, {\n\t\t\tvalue: \"370982\",\n\t\t\ttext: \"新泰市\"\n\t\t}, {\n\t\t\tvalue: \"370983\",\n\t\t\ttext: \"肥城市\"\n\t\t}, {\n\t\t\tvalue: \"370984\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"371000\",\n\t\ttext: \"威海市\",\n\t\tchildren: [{\n\t\t\tvalue: \"371002\",\n\t\t\ttext: \"环翠区\"\n\t\t}, {\n\t\t\tvalue: \"371081\",\n\t\t\ttext: \"文登市\"\n\t\t}, {\n\t\t\tvalue: \"371082\",\n\t\t\ttext: \"荣成市\"\n\t\t}, {\n\t\t\tvalue: \"371083\",\n\t\t\ttext: \"乳山市\"\n\t\t}, {\n\t\t\tvalue: \"371084\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"371100\",\n\t\ttext: \"日照市\",\n\t\tchildren: [{\n\t\t\tvalue: \"371102\",\n\t\t\ttext: \"东港区\"\n\t\t}, {\n\t\t\tvalue: \"371103\",\n\t\t\ttext: \"岚山区\"\n\t\t}, {\n\t\t\tvalue: \"371121\",\n\t\t\ttext: \"五莲县\"\n\t\t}, {\n\t\t\tvalue: \"371122\",\n\t\t\ttext: \"莒县\"\n\t\t}, {\n\t\t\tvalue: \"371123\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"371200\",\n\t\ttext: \"莱芜市\",\n\t\tchildren: [{\n\t\t\tvalue: \"371202\",\n\t\t\ttext: \"莱城区\"\n\t\t}, {\n\t\t\tvalue: \"371203\",\n\t\t\ttext: \"钢城区\"\n\t\t}, {\n\t\t\tvalue: \"371204\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"371300\",\n\t\ttext: \"临沂市\",\n\t\tchildren: [{\n\t\t\tvalue: \"371302\",\n\t\t\ttext: \"兰山区\"\n\t\t}, {\n\t\t\tvalue: \"371311\",\n\t\t\ttext: \"罗庄区\"\n\t\t}, {\n\t\t\tvalue: \"371312\",\n\t\t\ttext: \"河东区\"\n\t\t}, {\n\t\t\tvalue: \"371321\",\n\t\t\ttext: \"沂南县\"\n\t\t}, {\n\t\t\tvalue: \"371322\",\n\t\t\ttext: \"郯城县\"\n\t\t}, {\n\t\t\tvalue: \"371323\",\n\t\t\ttext: \"沂水县\"\n\t\t}, {\n\t\t\tvalue: \"371324\",\n\t\t\ttext: \"苍山县\"\n\t\t}, {\n\t\t\tvalue: \"371325\",\n\t\t\ttext: \"费县\"\n\t\t}, {\n\t\t\tvalue: \"371326\",\n\t\t\ttext: \"平邑县\"\n\t\t}, {\n\t\t\tvalue: \"371327\",\n\t\t\ttext: \"莒南县\"\n\t\t}, {\n\t\t\tvalue: \"371328\",\n\t\t\ttext: \"蒙阴县\"\n\t\t}, {\n\t\t\tvalue: \"371329\",\n\t\t\ttext: \"临沭县\"\n\t\t}, {\n\t\t\tvalue: \"371330\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"371400\",\n\t\ttext: \"德州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"371402\",\n\t\t\ttext: \"德城区\"\n\t\t}, {\n\t\t\tvalue: \"371421\",\n\t\t\ttext: \"陵县\"\n\t\t}, {\n\t\t\tvalue: \"371422\",\n\t\t\ttext: \"宁津县\"\n\t\t}, {\n\t\t\tvalue: \"371423\",\n\t\t\ttext: \"庆云县\"\n\t\t}, {\n\t\t\tvalue: \"371424\",\n\t\t\ttext: \"临邑县\"\n\t\t}, {\n\t\t\tvalue: \"371425\",\n\t\t\ttext: \"齐河县\"\n\t\t}, {\n\t\t\tvalue: \"371426\",\n\t\t\ttext: \"平原县\"\n\t\t}, {\n\t\t\tvalue: \"371427\",\n\t\t\ttext: \"夏津县\"\n\t\t}, {\n\t\t\tvalue: \"371428\",\n\t\t\ttext: \"武城县\"\n\t\t}, {\n\t\t\tvalue: \"371451\",\n\t\t\ttext: \"开发区\"\n\t\t}, {\n\t\t\tvalue: \"371481\",\n\t\t\ttext: \"乐陵市\"\n\t\t}, {\n\t\t\tvalue: \"371482\",\n\t\t\ttext: \"禹城市\"\n\t\t}, {\n\t\t\tvalue: \"371483\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"371500\",\n\t\ttext: \"聊城市\",\n\t\tchildren: [{\n\t\t\tvalue: \"371502\",\n\t\t\ttext: \"东昌府区\"\n\t\t}, {\n\t\t\tvalue: \"371521\",\n\t\t\ttext: \"阳谷县\"\n\t\t}, {\n\t\t\tvalue: \"371522\",\n\t\t\ttext: \"莘县\"\n\t\t}, {\n\t\t\tvalue: \"371523\",\n\t\t\ttext: \"茌平县\"\n\t\t}, {\n\t\t\tvalue: \"371524\",\n\t\t\ttext: \"东阿县\"\n\t\t}, {\n\t\t\tvalue: \"371525\",\n\t\t\ttext: \"冠县\"\n\t\t}, {\n\t\t\tvalue: \"371526\",\n\t\t\ttext: \"高唐县\"\n\t\t}, {\n\t\t\tvalue: \"371581\",\n\t\t\ttext: \"临清市\"\n\t\t}, {\n\t\t\tvalue: \"371582\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"371600\",\n\t\ttext: \"滨州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"371602\",\n\t\t\ttext: \"滨城区\"\n\t\t}, {\n\t\t\tvalue: \"371621\",\n\t\t\ttext: \"惠民县\"\n\t\t}, {\n\t\t\tvalue: \"371622\",\n\t\t\ttext: \"阳信县\"\n\t\t}, {\n\t\t\tvalue: \"371623\",\n\t\t\ttext: \"无棣县\"\n\t\t}, {\n\t\t\tvalue: \"371624\",\n\t\t\ttext: \"沾化县\"\n\t\t}, {\n\t\t\tvalue: \"371625\",\n\t\t\ttext: \"博兴县\"\n\t\t}, {\n\t\t\tvalue: \"371626\",\n\t\t\ttext: \"邹平县\"\n\t\t}, {\n\t\t\tvalue: \"371627\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"371700\",\n\t\ttext: \"菏泽市\",\n\t\tchildren: [{\n\t\t\tvalue: \"371702\",\n\t\t\ttext: \"牡丹区\"\n\t\t}, {\n\t\t\tvalue: \"371721\",\n\t\t\ttext: \"曹县\"\n\t\t}, {\n\t\t\tvalue: \"371722\",\n\t\t\ttext: \"单县\"\n\t\t}, {\n\t\t\tvalue: \"371723\",\n\t\t\ttext: \"成武县\"\n\t\t}, {\n\t\t\tvalue: \"371724\",\n\t\t\ttext: \"巨野县\"\n\t\t}, {\n\t\t\tvalue: \"371725\",\n\t\t\ttext: \"郓城县\"\n\t\t}, {\n\t\t\tvalue: \"371726\",\n\t\t\ttext: \"鄄城县\"\n\t\t}, {\n\t\t\tvalue: \"371727\",\n\t\t\ttext: \"定陶县\"\n\t\t}, {\n\t\t\tvalue: \"371728\",\n\t\t\ttext: \"东明县\"\n\t\t}, {\n\t\t\tvalue: \"371729\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '410000',\n\ttext: '河南省',\n\tchildren: [{\n\t\tvalue: \"410100\",\n\t\ttext: \"郑州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410102\",\n\t\t\ttext: \"中原区\"\n\t\t}, {\n\t\t\tvalue: \"410103\",\n\t\t\ttext: \"二七区\"\n\t\t}, {\n\t\t\tvalue: \"410104\",\n\t\t\ttext: \"管城回族区\"\n\t\t}, {\n\t\t\tvalue: \"410105\",\n\t\t\ttext: \"金水区\"\n\t\t}, {\n\t\t\tvalue: \"410106\",\n\t\t\ttext: \"上街区\"\n\t\t}, {\n\t\t\tvalue: \"410108\",\n\t\t\ttext: \"惠济区\"\n\t\t}, {\n\t\t\tvalue: \"410122\",\n\t\t\ttext: \"中牟县\"\n\t\t}, {\n\t\t\tvalue: \"410181\",\n\t\t\ttext: \"巩义市\"\n\t\t}, {\n\t\t\tvalue: \"410182\",\n\t\t\ttext: \"荥阳市\"\n\t\t}, {\n\t\t\tvalue: \"410183\",\n\t\t\ttext: \"新密市\"\n\t\t}, {\n\t\t\tvalue: \"410184\",\n\t\t\ttext: \"新郑市\"\n\t\t}, {\n\t\t\tvalue: \"410185\",\n\t\t\ttext: \"登封市\"\n\t\t}, {\n\t\t\tvalue: \"410186\",\n\t\t\ttext: \"郑东新区\"\n\t\t}, {\n\t\t\tvalue: \"410187\",\n\t\t\ttext: \"高新区\"\n\t\t}, {\n\t\t\tvalue: \"410188\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"410200\",\n\t\ttext: \"开封市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410202\",\n\t\t\ttext: \"龙亭区\"\n\t\t}, {\n\t\t\tvalue: \"410203\",\n\t\t\ttext: \"顺河回族区\"\n\t\t}, {\n\t\t\tvalue: \"410204\",\n\t\t\ttext: \"鼓楼区\"\n\t\t}, {\n\t\t\tvalue: \"410205\",\n\t\t\ttext: \"禹王台区\"\n\t\t}, {\n\t\t\tvalue: \"410211\",\n\t\t\ttext: \"金明区\"\n\t\t}, {\n\t\t\tvalue: \"410221\",\n\t\t\ttext: \"杞县\"\n\t\t}, {\n\t\t\tvalue: \"410222\",\n\t\t\ttext: \"通许县\"\n\t\t}, {\n\t\t\tvalue: \"410223\",\n\t\t\ttext: \"尉氏县\"\n\t\t}, {\n\t\t\tvalue: \"410224\",\n\t\t\ttext: \"开封县\"\n\t\t}, {\n\t\t\tvalue: \"410225\",\n\t\t\ttext: \"兰考县\"\n\t\t}, {\n\t\t\tvalue: \"410226\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"410300\",\n\t\ttext: \"洛阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410302\",\n\t\t\ttext: \"老城区\"\n\t\t}, {\n\t\t\tvalue: \"410303\",\n\t\t\ttext: \"西工区\"\n\t\t}, {\n\t\t\tvalue: \"410304\",\n\t\t\ttext: \"廛河回族区\"\n\t\t}, {\n\t\t\tvalue: \"410305\",\n\t\t\ttext: \"涧西区\"\n\t\t}, {\n\t\t\tvalue: \"410306\",\n\t\t\ttext: \"吉利区\"\n\t\t}, {\n\t\t\tvalue: \"410307\",\n\t\t\ttext: \"洛龙区\"\n\t\t}, {\n\t\t\tvalue: \"410322\",\n\t\t\ttext: \"孟津县\"\n\t\t}, {\n\t\t\tvalue: \"410323\",\n\t\t\ttext: \"新安县\"\n\t\t}, {\n\t\t\tvalue: \"410324\",\n\t\t\ttext: \"栾川县\"\n\t\t}, {\n\t\t\tvalue: \"410325\",\n\t\t\ttext: \"嵩县\"\n\t\t}, {\n\t\t\tvalue: \"410326\",\n\t\t\ttext: \"汝阳县\"\n\t\t}, {\n\t\t\tvalue: \"410327\",\n\t\t\ttext: \"宜阳县\"\n\t\t}, {\n\t\t\tvalue: \"410328\",\n\t\t\ttext: \"洛宁县\"\n\t\t}, {\n\t\t\tvalue: \"410329\",\n\t\t\ttext: \"伊川县\"\n\t\t}, {\n\t\t\tvalue: \"410381\",\n\t\t\ttext: \"偃师市\"\n\t\t}, {\n\t\t\tvalue: \"471004\",\n\t\t\ttext: \"高新区\"\n\t\t}, {\n\t\t\tvalue: \"471005\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"410400\",\n\t\ttext: \"平顶山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410402\",\n\t\t\ttext: \"新华区\"\n\t\t}, {\n\t\t\tvalue: \"410403\",\n\t\t\ttext: \"卫东区\"\n\t\t}, {\n\t\t\tvalue: \"410404\",\n\t\t\ttext: \"石龙区\"\n\t\t}, {\n\t\t\tvalue: \"410411\",\n\t\t\ttext: \"湛河区\"\n\t\t}, {\n\t\t\tvalue: \"410421\",\n\t\t\ttext: \"宝丰县\"\n\t\t}, {\n\t\t\tvalue: \"410422\",\n\t\t\ttext: \"叶县\"\n\t\t}, {\n\t\t\tvalue: \"410423\",\n\t\t\ttext: \"鲁山县\"\n\t\t}, {\n\t\t\tvalue: \"410425\",\n\t\t\ttext: \"郏县\"\n\t\t}, {\n\t\t\tvalue: \"410481\",\n\t\t\ttext: \"舞钢市\"\n\t\t}, {\n\t\t\tvalue: \"410482\",\n\t\t\ttext: \"汝州市\"\n\t\t}, {\n\t\t\tvalue: \"410483\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"410500\",\n\t\ttext: \"安阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410502\",\n\t\t\ttext: \"文峰区\"\n\t\t}, {\n\t\t\tvalue: \"410503\",\n\t\t\ttext: \"北关区\"\n\t\t}, {\n\t\t\tvalue: \"410505\",\n\t\t\ttext: \"殷都区\"\n\t\t}, {\n\t\t\tvalue: \"410506\",\n\t\t\ttext: \"龙安区\"\n\t\t}, {\n\t\t\tvalue: \"410522\",\n\t\t\ttext: \"安阳县\"\n\t\t}, {\n\t\t\tvalue: \"410523\",\n\t\t\ttext: \"汤阴县\"\n\t\t}, {\n\t\t\tvalue: \"410526\",\n\t\t\ttext: \"滑县\"\n\t\t}, {\n\t\t\tvalue: \"410527\",\n\t\t\ttext: \"内黄县\"\n\t\t}, {\n\t\t\tvalue: \"410581\",\n\t\t\ttext: \"林州市\"\n\t\t}, {\n\t\t\tvalue: \"410582\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"410600\",\n\t\ttext: \"鹤壁市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410602\",\n\t\t\ttext: \"鹤山区\"\n\t\t}, {\n\t\t\tvalue: \"410603\",\n\t\t\ttext: \"山城区\"\n\t\t}, {\n\t\t\tvalue: \"410611\",\n\t\t\ttext: \"淇滨区\"\n\t\t}, {\n\t\t\tvalue: \"410621\",\n\t\t\ttext: \"浚县\"\n\t\t}, {\n\t\t\tvalue: \"410622\",\n\t\t\ttext: \"淇县\"\n\t\t}, {\n\t\t\tvalue: \"410623\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"410700\",\n\t\ttext: \"新乡市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410702\",\n\t\t\ttext: \"红旗区\"\n\t\t}, {\n\t\t\tvalue: \"410703\",\n\t\t\ttext: \"卫滨区\"\n\t\t}, {\n\t\t\tvalue: \"410704\",\n\t\t\ttext: \"凤泉区\"\n\t\t}, {\n\t\t\tvalue: \"410711\",\n\t\t\ttext: \"牧野区\"\n\t\t}, {\n\t\t\tvalue: \"410721\",\n\t\t\ttext: \"新乡县\"\n\t\t}, {\n\t\t\tvalue: \"410724\",\n\t\t\ttext: \"获嘉县\"\n\t\t}, {\n\t\t\tvalue: \"410725\",\n\t\t\ttext: \"原阳县\"\n\t\t}, {\n\t\t\tvalue: \"410726\",\n\t\t\ttext: \"延津县\"\n\t\t}, {\n\t\t\tvalue: \"410727\",\n\t\t\ttext: \"封丘县\"\n\t\t}, {\n\t\t\tvalue: \"410728\",\n\t\t\ttext: \"长垣县\"\n\t\t}, {\n\t\t\tvalue: \"410781\",\n\t\t\ttext: \"卫辉市\"\n\t\t}, {\n\t\t\tvalue: \"410782\",\n\t\t\ttext: \"辉县市\"\n\t\t}, {\n\t\t\tvalue: \"410783\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"410800\",\n\t\ttext: \"焦作市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410802\",\n\t\t\ttext: \"解放区\"\n\t\t}, {\n\t\t\tvalue: \"410803\",\n\t\t\ttext: \"中站区\"\n\t\t}, {\n\t\t\tvalue: \"410804\",\n\t\t\ttext: \"马村区\"\n\t\t}, {\n\t\t\tvalue: \"410811\",\n\t\t\ttext: \"山阳区\"\n\t\t}, {\n\t\t\tvalue: \"410821\",\n\t\t\ttext: \"修武县\"\n\t\t}, {\n\t\t\tvalue: \"410822\",\n\t\t\ttext: \"博爱县\"\n\t\t}, {\n\t\t\tvalue: \"410823\",\n\t\t\ttext: \"武陟县\"\n\t\t}, {\n\t\t\tvalue: \"410825\",\n\t\t\ttext: \"温县\"\n\t\t}, {\n\t\t\tvalue: \"410882\",\n\t\t\ttext: \"沁阳市\"\n\t\t}, {\n\t\t\tvalue: \"410883\",\n\t\t\ttext: \"孟州市\"\n\t\t}, {\n\t\t\tvalue: \"410884\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"410900\",\n\t\ttext: \"濮阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"410902\",\n\t\t\ttext: \"华龙区\"\n\t\t}, {\n\t\t\tvalue: \"410922\",\n\t\t\ttext: \"清丰县\"\n\t\t}, {\n\t\t\tvalue: \"410923\",\n\t\t\ttext: \"南乐县\"\n\t\t}, {\n\t\t\tvalue: \"410926\",\n\t\t\ttext: \"范县\"\n\t\t}, {\n\t\t\tvalue: \"410927\",\n\t\t\ttext: \"台前县\"\n\t\t}, {\n\t\t\tvalue: \"410928\",\n\t\t\ttext: \"濮阳县\"\n\t\t}, {\n\t\t\tvalue: \"410929\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"411000\",\n\t\ttext: \"许昌市\",\n\t\tchildren: [{\n\t\t\tvalue: \"411002\",\n\t\t\ttext: \"魏都区\"\n\t\t}, {\n\t\t\tvalue: \"411023\",\n\t\t\ttext: \"许昌县\"\n\t\t}, {\n\t\t\tvalue: \"411024\",\n\t\t\ttext: \"鄢陵县\"\n\t\t}, {\n\t\t\tvalue: \"411025\",\n\t\t\ttext: \"襄城县\"\n\t\t}, {\n\t\t\tvalue: \"411081\",\n\t\t\ttext: \"禹州市\"\n\t\t}, {\n\t\t\tvalue: \"411082\",\n\t\t\ttext: \"长葛市\"\n\t\t}, {\n\t\t\tvalue: \"411083\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"411100\",\n\t\ttext: \"漯河市\",\n\t\tchildren: [{\n\t\t\tvalue: \"411102\",\n\t\t\ttext: \"源汇区\"\n\t\t}, {\n\t\t\tvalue: \"411103\",\n\t\t\ttext: \"郾城区\"\n\t\t}, {\n\t\t\tvalue: \"411104\",\n\t\t\ttext: \"召陵区\"\n\t\t}, {\n\t\t\tvalue: \"411121\",\n\t\t\ttext: \"舞阳县\"\n\t\t}, {\n\t\t\tvalue: \"411122\",\n\t\t\ttext: \"临颍县\"\n\t\t}, {\n\t\t\tvalue: \"411123\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"411200\",\n\t\ttext: \"三门峡市\",\n\t\tchildren: [{\n\t\t\tvalue: \"411202\",\n\t\t\ttext: \"湖滨区\"\n\t\t}, {\n\t\t\tvalue: \"411221\",\n\t\t\ttext: \"渑池县\"\n\t\t}, {\n\t\t\tvalue: \"411222\",\n\t\t\ttext: \"陕县\"\n\t\t}, {\n\t\t\tvalue: \"411224\",\n\t\t\ttext: \"卢氏县\"\n\t\t}, {\n\t\t\tvalue: \"411281\",\n\t\t\ttext: \"义马市\"\n\t\t}, {\n\t\t\tvalue: \"411282\",\n\t\t\ttext: \"灵宝市\"\n\t\t}, {\n\t\t\tvalue: \"411283\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"411300\",\n\t\ttext: \"南阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"411302\",\n\t\t\ttext: \"宛城区\"\n\t\t}, {\n\t\t\tvalue: \"411303\",\n\t\t\ttext: \"卧龙区\"\n\t\t}, {\n\t\t\tvalue: \"411321\",\n\t\t\ttext: \"南召县\"\n\t\t}, {\n\t\t\tvalue: \"411322\",\n\t\t\ttext: \"方城县\"\n\t\t}, {\n\t\t\tvalue: \"411323\",\n\t\t\ttext: \"西峡县\"\n\t\t}, {\n\t\t\tvalue: \"411324\",\n\t\t\ttext: \"镇平县\"\n\t\t}, {\n\t\t\tvalue: \"411325\",\n\t\t\ttext: \"内乡县\"\n\t\t}, {\n\t\t\tvalue: \"411326\",\n\t\t\ttext: \"淅川县\"\n\t\t}, {\n\t\t\tvalue: \"411327\",\n\t\t\ttext: \"社旗县\"\n\t\t}, {\n\t\t\tvalue: \"411328\",\n\t\t\ttext: \"唐河县\"\n\t\t}, {\n\t\t\tvalue: \"411329\",\n\t\t\ttext: \"新野县\"\n\t\t}, {\n\t\t\tvalue: \"411330\",\n\t\t\ttext: \"桐柏县\"\n\t\t}, {\n\t\t\tvalue: \"411381\",\n\t\t\ttext: \"邓州市\"\n\t\t}, {\n\t\t\tvalue: \"411382\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"411400\",\n\t\ttext: \"商丘市\",\n\t\tchildren: [{\n\t\t\tvalue: \"411402\",\n\t\t\ttext: \"梁园区\"\n\t\t}, {\n\t\t\tvalue: \"411403\",\n\t\t\ttext: \"睢阳区\"\n\t\t}, {\n\t\t\tvalue: \"411421\",\n\t\t\ttext: \"民权县\"\n\t\t}, {\n\t\t\tvalue: \"411422\",\n\t\t\ttext: \"睢县\"\n\t\t}, {\n\t\t\tvalue: \"411423\",\n\t\t\ttext: \"宁陵县\"\n\t\t}, {\n\t\t\tvalue: \"411424\",\n\t\t\ttext: \"柘城县\"\n\t\t}, {\n\t\t\tvalue: \"411425\",\n\t\t\ttext: \"虞城县\"\n\t\t}, {\n\t\t\tvalue: \"411426\",\n\t\t\ttext: \"夏邑县\"\n\t\t}, {\n\t\t\tvalue: \"411481\",\n\t\t\ttext: \"永城市\"\n\t\t}, {\n\t\t\tvalue: \"411482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"411500\",\n\t\ttext: \"信阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"411502\",\n\t\t\ttext: \"浉河区\"\n\t\t}, {\n\t\t\tvalue: \"411503\",\n\t\t\ttext: \"平桥区\"\n\t\t}, {\n\t\t\tvalue: \"411521\",\n\t\t\ttext: \"罗山县\"\n\t\t}, {\n\t\t\tvalue: \"411522\",\n\t\t\ttext: \"光山县\"\n\t\t}, {\n\t\t\tvalue: \"411523\",\n\t\t\ttext: \"新县\"\n\t\t}, {\n\t\t\tvalue: \"411524\",\n\t\t\ttext: \"商城县\"\n\t\t}, {\n\t\t\tvalue: \"411525\",\n\t\t\ttext: \"固始县\"\n\t\t}, {\n\t\t\tvalue: \"411526\",\n\t\t\ttext: \"潢川县\"\n\t\t}, {\n\t\t\tvalue: \"411527\",\n\t\t\ttext: \"淮滨县\"\n\t\t}, {\n\t\t\tvalue: \"411528\",\n\t\t\ttext: \"息县\"\n\t\t}, {\n\t\t\tvalue: \"411529\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"411600\",\n\t\ttext: \"周口市\",\n\t\tchildren: [{\n\t\t\tvalue: \"411602\",\n\t\t\ttext: \"川汇区\"\n\t\t}, {\n\t\t\tvalue: \"411621\",\n\t\t\ttext: \"扶沟县\"\n\t\t}, {\n\t\t\tvalue: \"411622\",\n\t\t\ttext: \"西华县\"\n\t\t}, {\n\t\t\tvalue: \"411623\",\n\t\t\ttext: \"商水县\"\n\t\t}, {\n\t\t\tvalue: \"411624\",\n\t\t\ttext: \"沈丘县\"\n\t\t}, {\n\t\t\tvalue: \"411625\",\n\t\t\ttext: \"郸城县\"\n\t\t}, {\n\t\t\tvalue: \"411626\",\n\t\t\ttext: \"淮阳县\"\n\t\t}, {\n\t\t\tvalue: \"411627\",\n\t\t\ttext: \"太康县\"\n\t\t}, {\n\t\t\tvalue: \"411628\",\n\t\t\ttext: \"鹿邑县\"\n\t\t}, {\n\t\t\tvalue: \"411681\",\n\t\t\ttext: \"项城市\"\n\t\t}, {\n\t\t\tvalue: \"411682\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t},{\n\t\tvalue: \"411700\",\n\t\ttext: \"驻马店市\",\n\t\tchildren: [{\n\t\t\tvalue: \"411702\",\n\t\t\ttext: \"驿城区\"\n\t\t}, {\n\t\t\tvalue: \"411721\",\n\t\t\ttext: \"西平县\"\n\t\t}, {\n\t\t\tvalue: \"411722\",\n\t\t\ttext: \"上蔡县\"\n\t\t}, {\n\t\t\tvalue: \"411723\",\n\t\t\ttext: \"平舆县\"\n\t\t}, {\n\t\t\tvalue: \"411724\",\n\t\t\ttext: \"正阳县\"\n\t\t}, {\n\t\t\tvalue: \"411725\",\n\t\t\ttext: \"确山县\"\n\t\t}, {\n\t\t\tvalue: \"411726\",\n\t\t\ttext: \"泌阳县\"\n\t\t}, {\n\t\t\tvalue: \"411727\",\n\t\t\ttext: \"汝南县\"\n\t\t}, {\n\t\t\tvalue: \"411628\",\n\t\t\ttext: \"遂平县\"\n\t\t}, {\n\t\t\tvalue: \"411729\",\n\t\t\ttext: \"新蔡县\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '420000',\n\ttext: '湖北省',\n\tchildren: [{\n\t\tvalue: \"420100\",\n\t\ttext: \"武汉市\",\n\t\tchildren: [{\n\t\t\tvalue: \"420102\",\n\t\t\ttext: \"江岸区\"\n\t\t}, {\n\t\t\tvalue: \"420103\",\n\t\t\ttext: \"江汉区\"\n\t\t}, {\n\t\t\tvalue: \"420104\",\n\t\t\ttext: \"硚口区\"\n\t\t}, {\n\t\t\tvalue: \"420105\",\n\t\t\ttext: \"汉阳区\"\n\t\t}, {\n\t\t\tvalue: \"420106\",\n\t\t\ttext: \"武昌区\"\n\t\t}, {\n\t\t\tvalue: \"420107\",\n\t\t\ttext: \"青山区\"\n\t\t}, {\n\t\t\tvalue: \"420111\",\n\t\t\ttext: \"洪山区\"\n\t\t}, {\n\t\t\tvalue: \"420112\",\n\t\t\ttext: \"东西湖区\"\n\t\t}, {\n\t\t\tvalue: \"420113\",\n\t\t\ttext: \"汉南区\"\n\t\t}, {\n\t\t\tvalue: \"420114\",\n\t\t\ttext: \"蔡甸区\"\n\t\t}, {\n\t\t\tvalue: \"420115\",\n\t\t\ttext: \"江夏区\"\n\t\t}, {\n\t\t\tvalue: \"420116\",\n\t\t\ttext: \"黄陂区\"\n\t\t}, {\n\t\t\tvalue: \"420117\",\n\t\t\ttext: \"新洲区\"\n\t\t}, {\n\t\t\tvalue: \"420118\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"420200\",\n\t\ttext: \"黄石市\",\n\t\tchildren: [{\n\t\t\tvalue: \"420202\",\n\t\t\ttext: \"黄石港区\"\n\t\t}, {\n\t\t\tvalue: \"420203\",\n\t\t\ttext: \"西塞山区\"\n\t\t}, {\n\t\t\tvalue: \"420204\",\n\t\t\ttext: \"下陆区\"\n\t\t}, {\n\t\t\tvalue: \"420205\",\n\t\t\ttext: \"铁山区\"\n\t\t}, {\n\t\t\tvalue: \"420222\",\n\t\t\ttext: \"阳新县\"\n\t\t}, {\n\t\t\tvalue: \"420281\",\n\t\t\ttext: \"大冶市\"\n\t\t}, {\n\t\t\tvalue: \"420282\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"420300\",\n\t\ttext: \"十堰市\",\n\t\tchildren: [{\n\t\t\tvalue: \"420302\",\n\t\t\ttext: \"茅箭区\"\n\t\t}, {\n\t\t\tvalue: \"420303\",\n\t\t\ttext: \"张湾区\"\n\t\t}, {\n\t\t\tvalue: \"420321\",\n\t\t\ttext: \"郧县\"\n\t\t}, {\n\t\t\tvalue: \"420322\",\n\t\t\ttext: \"郧西县\"\n\t\t}, {\n\t\t\tvalue: \"420323\",\n\t\t\ttext: \"竹山县\"\n\t\t}, {\n\t\t\tvalue: \"420324\",\n\t\t\ttext: \"竹溪县\"\n\t\t}, {\n\t\t\tvalue: \"420325\",\n\t\t\ttext: \"房县\"\n\t\t}, {\n\t\t\tvalue: \"420381\",\n\t\t\ttext: \"丹江口市\"\n\t\t}, {\n\t\t\tvalue: \"420382\",\n\t\t\ttext: \"城区\"\n\t\t}, {\n\t\t\tvalue: \"420383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"420500\",\n\t\ttext: \"宜昌市\",\n\t\tchildren: [{\n\t\t\tvalue: \"420502\",\n\t\t\ttext: \"西陵区\"\n\t\t}, {\n\t\t\tvalue: \"420503\",\n\t\t\ttext: \"伍家岗区\"\n\t\t}, {\n\t\t\tvalue: \"420504\",\n\t\t\ttext: \"点军区\"\n\t\t}, {\n\t\t\tvalue: \"420505\",\n\t\t\ttext: \"猇亭区\"\n\t\t}, {\n\t\t\tvalue: \"420506\",\n\t\t\ttext: \"夷陵区\"\n\t\t}, {\n\t\t\tvalue: \"420525\",\n\t\t\ttext: \"远安县\"\n\t\t}, {\n\t\t\tvalue: \"420526\",\n\t\t\ttext: \"兴山县\"\n\t\t}, {\n\t\t\tvalue: \"420527\",\n\t\t\ttext: \"秭归县\"\n\t\t}, {\n\t\t\tvalue: \"420528\",\n\t\t\ttext: \"长阳土家族自治县\"\n\t\t}, {\n\t\t\tvalue: \"420529\",\n\t\t\ttext: \"五峰土家族自治县\"\n\t\t}, {\n\t\t\tvalue: \"420551\",\n\t\t\ttext: \"葛洲坝区\"\n\t\t}, {\n\t\t\tvalue: \"420552\",\n\t\t\ttext: \"开发区\"\n\t\t}, {\n\t\t\tvalue: \"420581\",\n\t\t\ttext: \"宜都市\"\n\t\t}, {\n\t\t\tvalue: \"420582\",\n\t\t\ttext: \"当阳市\"\n\t\t}, {\n\t\t\tvalue: \"420583\",\n\t\t\ttext: \"枝江市\"\n\t\t}, {\n\t\t\tvalue: \"420584\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"420600\",\n\t\ttext: \"襄阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"420602\",\n\t\t\ttext: \"襄城区\"\n\t\t}, {\n\t\t\tvalue: \"420606\",\n\t\t\ttext: \"樊城区\"\n\t\t}, {\n\t\t\tvalue: \"420607\",\n\t\t\ttext: \"襄州区\"\n\t\t}, {\n\t\t\tvalue: \"420624\",\n\t\t\ttext: \"南漳县\"\n\t\t}, {\n\t\t\tvalue: \"420625\",\n\t\t\ttext: \"谷城县\"\n\t\t}, {\n\t\t\tvalue: \"420626\",\n\t\t\ttext: \"保康县\"\n\t\t}, {\n\t\t\tvalue: \"420682\",\n\t\t\ttext: \"老河口市\"\n\t\t}, {\n\t\t\tvalue: \"420683\",\n\t\t\ttext: \"枣阳市\"\n\t\t}, {\n\t\t\tvalue: \"420684\",\n\t\t\ttext: \"宜城市\"\n\t\t}, {\n\t\t\tvalue: \"420685\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"420700\",\n\t\ttext: \"鄂州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"420702\",\n\t\t\ttext: \"梁子湖区\"\n\t\t}, {\n\t\t\tvalue: \"420703\",\n\t\t\ttext: \"华容区\"\n\t\t}, {\n\t\t\tvalue: \"420704\",\n\t\t\ttext: \"鄂城区\"\n\t\t}, {\n\t\t\tvalue: \"420705\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"420800\",\n\t\ttext: \"荆门市\",\n\t\tchildren: [{\n\t\t\tvalue: \"420802\",\n\t\t\ttext: \"东宝区\"\n\t\t}, {\n\t\t\tvalue: \"420804\",\n\t\t\ttext: \"掇刀区\"\n\t\t}, {\n\t\t\tvalue: \"420821\",\n\t\t\ttext: \"京山县\"\n\t\t}, {\n\t\t\tvalue: \"420822\",\n\t\t\ttext: \"沙洋县\"\n\t\t}, {\n\t\t\tvalue: \"420881\",\n\t\t\ttext: \"钟祥市\"\n\t\t}, {\n\t\t\tvalue: \"420882\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"420900\",\n\t\ttext: \"孝感市\",\n\t\tchildren: [{\n\t\t\tvalue: \"420902\",\n\t\t\ttext: \"孝南区\"\n\t\t}, {\n\t\t\tvalue: \"420921\",\n\t\t\ttext: \"孝昌县\"\n\t\t}, {\n\t\t\tvalue: \"420922\",\n\t\t\ttext: \"大悟县\"\n\t\t}, {\n\t\t\tvalue: \"420923\",\n\t\t\ttext: \"云梦县\"\n\t\t}, {\n\t\t\tvalue: \"420981\",\n\t\t\ttext: \"应城市\"\n\t\t}, {\n\t\t\tvalue: \"420982\",\n\t\t\ttext: \"安陆市\"\n\t\t}, {\n\t\t\tvalue: \"420984\",\n\t\t\ttext: \"汉川市\"\n\t\t}, {\n\t\t\tvalue: \"420985\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"421000\",\n\t\ttext: \"荆州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"421002\",\n\t\t\ttext: \"沙市区\"\n\t\t}, {\n\t\t\tvalue: \"421003\",\n\t\t\ttext: \"荆州区\"\n\t\t}, {\n\t\t\tvalue: \"421022\",\n\t\t\ttext: \"公安县\"\n\t\t}, {\n\t\t\tvalue: \"421023\",\n\t\t\ttext: \"监利县\"\n\t\t}, {\n\t\t\tvalue: \"421024\",\n\t\t\ttext: \"江陵县\"\n\t\t}, {\n\t\t\tvalue: \"421081\",\n\t\t\ttext: \"石首市\"\n\t\t}, {\n\t\t\tvalue: \"421083\",\n\t\t\ttext: \"洪湖市\"\n\t\t}, {\n\t\t\tvalue: \"421087\",\n\t\t\ttext: \"松滋市\"\n\t\t}, {\n\t\t\tvalue: \"421088\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"421100\",\n\t\ttext: \"黄冈市\",\n\t\tchildren: [{\n\t\t\tvalue: \"421102\",\n\t\t\ttext: \"黄州区\"\n\t\t}, {\n\t\t\tvalue: \"421121\",\n\t\t\ttext: \"团风县\"\n\t\t}, {\n\t\t\tvalue: \"421122\",\n\t\t\ttext: \"红安县\"\n\t\t}, {\n\t\t\tvalue: \"421123\",\n\t\t\ttext: \"罗田县\"\n\t\t}, {\n\t\t\tvalue: \"421124\",\n\t\t\ttext: \"英山县\"\n\t\t}, {\n\t\t\tvalue: \"421125\",\n\t\t\ttext: \"浠水县\"\n\t\t}, {\n\t\t\tvalue: \"421126\",\n\t\t\ttext: \"蕲春县\"\n\t\t}, {\n\t\t\tvalue: \"421127\",\n\t\t\ttext: \"黄梅县\"\n\t\t}, {\n\t\t\tvalue: \"421181\",\n\t\t\ttext: \"麻城市\"\n\t\t}, {\n\t\t\tvalue: \"421182\",\n\t\t\ttext: \"武穴市\"\n\t\t}, {\n\t\t\tvalue: \"421183\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"421200\",\n\t\ttext: \"咸宁市\",\n\t\tchildren: [{\n\t\t\tvalue: \"421202\",\n\t\t\ttext: \"咸安区\"\n\t\t}, {\n\t\t\tvalue: \"421221\",\n\t\t\ttext: \"嘉鱼县\"\n\t\t}, {\n\t\t\tvalue: \"421222\",\n\t\t\ttext: \"通城县\"\n\t\t}, {\n\t\t\tvalue: \"421223\",\n\t\t\ttext: \"崇阳县\"\n\t\t}, {\n\t\t\tvalue: \"421224\",\n\t\t\ttext: \"通山县\"\n\t\t}, {\n\t\t\tvalue: \"421281\",\n\t\t\ttext: \"赤壁市\"\n\t\t}, {\n\t\t\tvalue: \"421282\",\n\t\t\ttext: \"温泉城区\"\n\t\t}, {\n\t\t\tvalue: \"421283\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"421300\",\n\t\ttext: \"随州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"421302\",\n\t\t\ttext: \"曾都区\"\n\t\t}, {\n\t\t\tvalue: \"421321\",\n\t\t\ttext: \"随县\"\n\t\t}, {\n\t\t\tvalue: \"421381\",\n\t\t\ttext: \"广水市\"\n\t\t}, {\n\t\t\tvalue: \"421382\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"422800\",\n\t\ttext: \"恩施土家族苗族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"422801\",\n\t\t\ttext: \"恩施市\"\n\t\t}, {\n\t\t\tvalue: \"422802\",\n\t\t\ttext: \"利川市\"\n\t\t}, {\n\t\t\tvalue: \"422822\",\n\t\t\ttext: \"建始县\"\n\t\t}, {\n\t\t\tvalue: \"422823\",\n\t\t\ttext: \"巴东县\"\n\t\t}, {\n\t\t\tvalue: \"422825\",\n\t\t\ttext: \"宣恩县\"\n\t\t}, {\n\t\t\tvalue: \"422826\",\n\t\t\ttext: \"咸丰县\"\n\t\t}, {\n\t\t\tvalue: \"422827\",\n\t\t\ttext: \"来凤县\"\n\t\t}, {\n\t\t\tvalue: \"422828\",\n\t\t\ttext: \"鹤峰县\"\n\t\t}, {\n\t\t\tvalue: \"422829\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"429004\",\n\t\ttext: \"仙桃市\"\n\t}, {\n\t\tvalue: \"429005\",\n\t\ttext: \"潜江市\"\n\t}, {\n\t\tvalue: \"429006\",\n\t\ttext: \"天门市\"\n\t}, {\n\t\tvalue: \"429021\",\n\t\ttext: \"神农架林区\"\n\t}]\n}, {\n\tvalue: '430000',\n\ttext: '湖南省',\n\tchildren: [{\n\t\tvalue: \"430100\",\n\t\ttext: \"长沙市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430102\",\n\t\t\ttext: \"芙蓉区\"\n\t\t}, {\n\t\t\tvalue: \"430103\",\n\t\t\ttext: \"天心区\"\n\t\t}, {\n\t\t\tvalue: \"430104\",\n\t\t\ttext: \"岳麓区\"\n\t\t}, {\n\t\t\tvalue: \"430105\",\n\t\t\ttext: \"开福区\"\n\t\t}, {\n\t\t\tvalue: \"430111\",\n\t\t\ttext: \"雨花区\"\n\t\t}, {\n\t\t\tvalue: \"430121\",\n\t\t\ttext: \"长沙县\"\n\t\t}, {\n\t\t\tvalue: \"430122\",\n\t\t\ttext: \"望城县\"\n\t\t}, {\n\t\t\tvalue: \"430124\",\n\t\t\ttext: \"宁乡县\"\n\t\t}, {\n\t\t\tvalue: \"430181\",\n\t\t\ttext: \"浏阳市\"\n\t\t}, {\n\t\t\tvalue: \"430182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"430200\",\n\t\ttext: \"株洲市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430202\",\n\t\t\ttext: \"荷塘区\"\n\t\t}, {\n\t\t\tvalue: \"430203\",\n\t\t\ttext: \"芦淞区\"\n\t\t}, {\n\t\t\tvalue: \"430204\",\n\t\t\ttext: \"石峰区\"\n\t\t}, {\n\t\t\tvalue: \"430211\",\n\t\t\ttext: \"天元区\"\n\t\t}, {\n\t\t\tvalue: \"430221\",\n\t\t\ttext: \"株洲县\"\n\t\t}, {\n\t\t\tvalue: \"430223\",\n\t\t\ttext: \"攸县\"\n\t\t}, {\n\t\t\tvalue: \"430224\",\n\t\t\ttext: \"茶陵县\"\n\t\t}, {\n\t\t\tvalue: \"430225\",\n\t\t\ttext: \"炎陵县\"\n\t\t}, {\n\t\t\tvalue: \"430281\",\n\t\t\ttext: \"醴陵市\"\n\t\t}, {\n\t\t\tvalue: \"430282\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"430300\",\n\t\ttext: \"湘潭市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430302\",\n\t\t\ttext: \"雨湖区\"\n\t\t}, {\n\t\t\tvalue: \"430304\",\n\t\t\ttext: \"岳塘区\"\n\t\t}, {\n\t\t\tvalue: \"430321\",\n\t\t\ttext: \"湘潭县\"\n\t\t}, {\n\t\t\tvalue: \"430381\",\n\t\t\ttext: \"湘乡市\"\n\t\t}, {\n\t\t\tvalue: \"430382\",\n\t\t\ttext: \"韶山市\"\n\t\t}, {\n\t\t\tvalue: \"430383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"430400\",\n\t\ttext: \"衡阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430405\",\n\t\t\ttext: \"珠晖区\"\n\t\t}, {\n\t\t\tvalue: \"430406\",\n\t\t\ttext: \"雁峰区\"\n\t\t}, {\n\t\t\tvalue: \"430407\",\n\t\t\ttext: \"石鼓区\"\n\t\t}, {\n\t\t\tvalue: \"430408\",\n\t\t\ttext: \"蒸湘区\"\n\t\t}, {\n\t\t\tvalue: \"430412\",\n\t\t\ttext: \"南岳区\"\n\t\t}, {\n\t\t\tvalue: \"430421\",\n\t\t\ttext: \"衡阳县\"\n\t\t}, {\n\t\t\tvalue: \"430422\",\n\t\t\ttext: \"衡南县\"\n\t\t}, {\n\t\t\tvalue: \"430423\",\n\t\t\ttext: \"衡山县\"\n\t\t}, {\n\t\t\tvalue: \"430424\",\n\t\t\ttext: \"衡东县\"\n\t\t}, {\n\t\t\tvalue: \"430426\",\n\t\t\ttext: \"祁东县\"\n\t\t}, {\n\t\t\tvalue: \"430481\",\n\t\t\ttext: \"耒阳市\"\n\t\t}, {\n\t\t\tvalue: \"430482\",\n\t\t\ttext: \"常宁市\"\n\t\t}, {\n\t\t\tvalue: \"430483\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"430500\",\n\t\ttext: \"邵阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430502\",\n\t\t\ttext: \"双清区\"\n\t\t}, {\n\t\t\tvalue: \"430503\",\n\t\t\ttext: \"大祥区\"\n\t\t}, {\n\t\t\tvalue: \"430511\",\n\t\t\ttext: \"北塔区\"\n\t\t}, {\n\t\t\tvalue: \"430521\",\n\t\t\ttext: \"邵东县\"\n\t\t}, {\n\t\t\tvalue: \"430522\",\n\t\t\ttext: \"新邵县\"\n\t\t}, {\n\t\t\tvalue: \"430523\",\n\t\t\ttext: \"邵阳县\"\n\t\t}, {\n\t\t\tvalue: \"430524\",\n\t\t\ttext: \"隆回县\"\n\t\t}, {\n\t\t\tvalue: \"430525\",\n\t\t\ttext: \"洞口县\"\n\t\t}, {\n\t\t\tvalue: \"430527\",\n\t\t\ttext: \"绥宁县\"\n\t\t}, {\n\t\t\tvalue: \"430528\",\n\t\t\ttext: \"新宁县\"\n\t\t}, {\n\t\t\tvalue: \"430529\",\n\t\t\ttext: \"城步苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"430581\",\n\t\t\ttext: \"武冈市\"\n\t\t}, {\n\t\t\tvalue: \"430582\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"430600\",\n\t\ttext: \"岳阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430602\",\n\t\t\ttext: \"岳阳楼区\"\n\t\t}, {\n\t\t\tvalue: \"430603\",\n\t\t\ttext: \"云溪区\"\n\t\t}, {\n\t\t\tvalue: \"430611\",\n\t\t\ttext: \"君山区\"\n\t\t}, {\n\t\t\tvalue: \"430621\",\n\t\t\ttext: \"岳阳县\"\n\t\t}, {\n\t\t\tvalue: \"430623\",\n\t\t\ttext: \"华容县\"\n\t\t}, {\n\t\t\tvalue: \"430624\",\n\t\t\ttext: \"湘阴县\"\n\t\t}, {\n\t\t\tvalue: \"430626\",\n\t\t\ttext: \"平江县\"\n\t\t}, {\n\t\t\tvalue: \"430681\",\n\t\t\ttext: \"汨罗市\"\n\t\t}, {\n\t\t\tvalue: \"430682\",\n\t\t\ttext: \"临湘市\"\n\t\t}, {\n\t\t\tvalue: \"430683\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"430700\",\n\t\ttext: \"常德市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430702\",\n\t\t\ttext: \"武陵区\"\n\t\t}, {\n\t\t\tvalue: \"430703\",\n\t\t\ttext: \"鼎城区\"\n\t\t}, {\n\t\t\tvalue: \"430721\",\n\t\t\ttext: \"安乡县\"\n\t\t}, {\n\t\t\tvalue: \"430722\",\n\t\t\ttext: \"汉寿县\"\n\t\t}, {\n\t\t\tvalue: \"430723\",\n\t\t\ttext: \"澧县\"\n\t\t}, {\n\t\t\tvalue: \"430724\",\n\t\t\ttext: \"临澧县\"\n\t\t}, {\n\t\t\tvalue: \"430725\",\n\t\t\ttext: \"桃源县\"\n\t\t}, {\n\t\t\tvalue: \"430726\",\n\t\t\ttext: \"石门县\"\n\t\t}, {\n\t\t\tvalue: \"430781\",\n\t\t\ttext: \"津市市\"\n\t\t}, {\n\t\t\tvalue: \"430782\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"430800\",\n\t\ttext: \"张家界市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430802\",\n\t\t\ttext: \"永定区\"\n\t\t}, {\n\t\t\tvalue: \"430811\",\n\t\t\ttext: \"武陵源区\"\n\t\t}, {\n\t\t\tvalue: \"430821\",\n\t\t\ttext: \"慈利县\"\n\t\t}, {\n\t\t\tvalue: \"430822\",\n\t\t\ttext: \"桑植县\"\n\t\t}, {\n\t\t\tvalue: \"430823\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"430900\",\n\t\ttext: \"益阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"430902\",\n\t\t\ttext: \"资阳区\"\n\t\t}, {\n\t\t\tvalue: \"430903\",\n\t\t\ttext: \"赫山区\"\n\t\t}, {\n\t\t\tvalue: \"430921\",\n\t\t\ttext: \"南县\"\n\t\t}, {\n\t\t\tvalue: \"430922\",\n\t\t\ttext: \"桃江县\"\n\t\t}, {\n\t\t\tvalue: \"430923\",\n\t\t\ttext: \"安化县\"\n\t\t}, {\n\t\t\tvalue: \"430981\",\n\t\t\ttext: \"沅江市\"\n\t\t}, {\n\t\t\tvalue: \"430982\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"431000\",\n\t\ttext: \"郴州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"431002\",\n\t\t\ttext: \"北湖区\"\n\t\t}, {\n\t\t\tvalue: \"431003\",\n\t\t\ttext: \"苏仙区\"\n\t\t}, {\n\t\t\tvalue: \"431021\",\n\t\t\ttext: \"桂阳县\"\n\t\t}, {\n\t\t\tvalue: \"431022\",\n\t\t\ttext: \"宜章县\"\n\t\t}, {\n\t\t\tvalue: \"431023\",\n\t\t\ttext: \"永兴县\"\n\t\t}, {\n\t\t\tvalue: \"431024\",\n\t\t\ttext: \"嘉禾县\"\n\t\t}, {\n\t\t\tvalue: \"431025\",\n\t\t\ttext: \"临武县\"\n\t\t}, {\n\t\t\tvalue: \"431026\",\n\t\t\ttext: \"汝城县\"\n\t\t}, {\n\t\t\tvalue: \"431027\",\n\t\t\ttext: \"桂东县\"\n\t\t}, {\n\t\t\tvalue: \"431028\",\n\t\t\ttext: \"安仁县\"\n\t\t}, {\n\t\t\tvalue: \"431081\",\n\t\t\ttext: \"资兴市\"\n\t\t}, {\n\t\t\tvalue: \"431082\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"431100\",\n\t\ttext: \"永州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"431102\",\n\t\t\ttext: \"零陵区\"\n\t\t}, {\n\t\t\tvalue: \"431103\",\n\t\t\ttext: \"冷水滩区\"\n\t\t}, {\n\t\t\tvalue: \"431121\",\n\t\t\ttext: \"祁阳县\"\n\t\t}, {\n\t\t\tvalue: \"431122\",\n\t\t\ttext: \"东安县\"\n\t\t}, {\n\t\t\tvalue: \"431123\",\n\t\t\ttext: \"双牌县\"\n\t\t}, {\n\t\t\tvalue: \"431124\",\n\t\t\ttext: \"道县\"\n\t\t}, {\n\t\t\tvalue: \"431125\",\n\t\t\ttext: \"江永县\"\n\t\t}, {\n\t\t\tvalue: \"431126\",\n\t\t\ttext: \"宁远县\"\n\t\t}, {\n\t\t\tvalue: \"431127\",\n\t\t\ttext: \"蓝山县\"\n\t\t}, {\n\t\t\tvalue: \"431128\",\n\t\t\ttext: \"新田县\"\n\t\t}, {\n\t\t\tvalue: \"431129\",\n\t\t\ttext: \"江华瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"431130\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"431200\",\n\t\ttext: \"怀化市\",\n\t\tchildren: [{\n\t\t\tvalue: \"431202\",\n\t\t\ttext: \"鹤城区\"\n\t\t}, {\n\t\t\tvalue: \"431221\",\n\t\t\ttext: \"中方县\"\n\t\t}, {\n\t\t\tvalue: \"431222\",\n\t\t\ttext: \"沅陵县\"\n\t\t}, {\n\t\t\tvalue: \"431223\",\n\t\t\ttext: \"辰溪县\"\n\t\t}, {\n\t\t\tvalue: \"431224\",\n\t\t\ttext: \"溆浦县\"\n\t\t}, {\n\t\t\tvalue: \"431225\",\n\t\t\ttext: \"会同县\"\n\t\t}, {\n\t\t\tvalue: \"431226\",\n\t\t\ttext: \"麻阳苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"431227\",\n\t\t\ttext: \"新晃侗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"431228\",\n\t\t\ttext: \"芷江侗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"431229\",\n\t\t\ttext: \"靖州苗族侗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"431230\",\n\t\t\ttext: \"通道侗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"431281\",\n\t\t\ttext: \"洪江市\"\n\t\t}, {\n\t\t\tvalue: \"431282\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"431300\",\n\t\ttext: \"娄底市\",\n\t\tchildren: [{\n\t\t\tvalue: \"431302\",\n\t\t\ttext: \"娄星区\"\n\t\t}, {\n\t\t\tvalue: \"431321\",\n\t\t\ttext: \"双峰县\"\n\t\t}, {\n\t\t\tvalue: \"431322\",\n\t\t\ttext: \"新化县\"\n\t\t}, {\n\t\t\tvalue: \"431381\",\n\t\t\ttext: \"冷水江市\"\n\t\t}, {\n\t\t\tvalue: \"431382\",\n\t\t\ttext: \"涟源市\"\n\t\t}, {\n\t\t\tvalue: \"431383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"433100\",\n\t\ttext: \"湘西土家族苗族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"433101\",\n\t\t\ttext: \"吉首市\"\n\t\t}, {\n\t\t\tvalue: \"433122\",\n\t\t\ttext: \"泸溪县\"\n\t\t}, {\n\t\t\tvalue: \"433123\",\n\t\t\ttext: \"凤凰县\"\n\t\t}, {\n\t\t\tvalue: \"433124\",\n\t\t\ttext: \"花垣县\"\n\t\t}, {\n\t\t\tvalue: \"433125\",\n\t\t\ttext: \"保靖县\"\n\t\t}, {\n\t\t\tvalue: \"433126\",\n\t\t\ttext: \"古丈县\"\n\t\t}, {\n\t\t\tvalue: \"433127\",\n\t\t\ttext: \"永顺县\"\n\t\t}, {\n\t\t\tvalue: \"433130\",\n\t\t\ttext: \"龙山县\"\n\t\t}, {\n\t\t\tvalue: \"433131\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '440000',\n\ttext: '广东省',\n\tchildren: [{\n\t\tvalue: \"440100\",\n\t\ttext: \"广州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440103\",\n\t\t\ttext: \"荔湾区\"\n\t\t}, {\n\t\t\tvalue: \"440104\",\n\t\t\ttext: \"越秀区\"\n\t\t}, {\n\t\t\tvalue: \"440105\",\n\t\t\ttext: \"海珠区\"\n\t\t}, {\n\t\t\tvalue: \"440106\",\n\t\t\ttext: \"天河区\"\n\t\t}, {\n\t\t\tvalue: \"440111\",\n\t\t\ttext: \"白云区\"\n\t\t}, {\n\t\t\tvalue: \"440112\",\n\t\t\ttext: \"黄埔区\"\n\t\t}, {\n\t\t\tvalue: \"440113\",\n\t\t\ttext: \"番禺区\"\n\t\t}, {\n\t\t\tvalue: \"440114\",\n\t\t\ttext: \"花都区\"\n\t\t}, {\n\t\t\tvalue: \"440115\",\n\t\t\ttext: \"南沙区\"\n\t\t}, {\n\t\t\tvalue: \"440116\",\n\t\t\ttext: \"萝岗区\"\n\t\t}, {\n\t\t\tvalue: \"440183\",\n\t\t\ttext: \"增城市\"\n\t\t}, {\n\t\t\tvalue: \"440184\",\n\t\t\ttext: \"从化市\"\n\t\t}, {\n\t\t\tvalue: \"440188\",\n\t\t\ttext: \"东山区\"\n\t\t}, {\n\t\t\tvalue: \"440189\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"440200\",\n\t\ttext: \"韶关市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440203\",\n\t\t\ttext: \"武江区\"\n\t\t}, {\n\t\t\tvalue: \"440204\",\n\t\t\ttext: \"浈江区\"\n\t\t}, {\n\t\t\tvalue: \"440205\",\n\t\t\ttext: \"曲江区\"\n\t\t}, {\n\t\t\tvalue: \"440222\",\n\t\t\ttext: \"始兴县\"\n\t\t}, {\n\t\t\tvalue: \"440224\",\n\t\t\ttext: \"仁化县\"\n\t\t}, {\n\t\t\tvalue: \"440229\",\n\t\t\ttext: \"翁源县\"\n\t\t}, {\n\t\t\tvalue: \"440232\",\n\t\t\ttext: \"乳源瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"440233\",\n\t\t\ttext: \"新丰县\"\n\t\t}, {\n\t\t\tvalue: \"440281\",\n\t\t\ttext: \"乐昌市\"\n\t\t}, {\n\t\t\tvalue: \"440282\",\n\t\t\ttext: \"南雄市\"\n\t\t}, {\n\t\t\tvalue: \"440283\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"440300\",\n\t\ttext: \"深圳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440303\",\n\t\t\ttext: \"罗湖区\"\n\t\t}, {\n\t\t\tvalue: \"440304\",\n\t\t\ttext: \"福田区\"\n\t\t}, {\n\t\t\tvalue: \"440305\",\n\t\t\ttext: \"南山区\"\n\t\t}, {\n\t\t\tvalue: \"440306\",\n\t\t\ttext: \"宝安区\"\n\t\t}, {\n\t\t\tvalue: \"440307\",\n\t\t\ttext: \"龙岗区\"\n\t\t}, {\n\t\t\tvalue: \"440308\",\n\t\t\ttext: \"盐田区\"\n\t\t}, {\n\t\t\tvalue: \"440309\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"440400\",\n\t\ttext: \"珠海市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440402\",\n\t\t\ttext: \"香洲区\"\n\t\t}, {\n\t\t\tvalue: \"440403\",\n\t\t\ttext: \"斗门区\"\n\t\t}, {\n\t\t\tvalue: \"440404\",\n\t\t\ttext: \"金湾区\"\n\t\t}, {\n\t\t\tvalue: \"440486\",\n\t\t\ttext: \"金唐区\"\n\t\t}, {\n\t\t\tvalue: \"440487\",\n\t\t\ttext: \"南湾区\"\n\t\t}, {\n\t\t\tvalue: \"440488\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"440500\",\n\t\ttext: \"汕头市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440507\",\n\t\t\ttext: \"龙湖区\"\n\t\t}, {\n\t\t\tvalue: \"440511\",\n\t\t\ttext: \"金平区\"\n\t\t}, {\n\t\t\tvalue: \"440512\",\n\t\t\ttext: \"濠江区\"\n\t\t}, {\n\t\t\tvalue: \"440513\",\n\t\t\ttext: \"潮阳区\"\n\t\t}, {\n\t\t\tvalue: \"440514\",\n\t\t\ttext: \"潮南区\"\n\t\t}, {\n\t\t\tvalue: \"440515\",\n\t\t\ttext: \"澄海区\"\n\t\t}, {\n\t\t\tvalue: \"440523\",\n\t\t\ttext: \"南澳县\"\n\t\t}, {\n\t\t\tvalue: \"440524\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"440600\",\n\t\ttext: \"佛山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440604\",\n\t\t\ttext: \"禅城区\"\n\t\t}, {\n\t\t\tvalue: \"440605\",\n\t\t\ttext: \"南海区\"\n\t\t}, {\n\t\t\tvalue: \"440606\",\n\t\t\ttext: \"顺德区\"\n\t\t}, {\n\t\t\tvalue: \"440607\",\n\t\t\ttext: \"三水区\"\n\t\t}, {\n\t\t\tvalue: \"440608\",\n\t\t\ttext: \"高明区\"\n\t\t}, {\n\t\t\tvalue: \"440609\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"440700\",\n\t\ttext: \"江门市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440703\",\n\t\t\ttext: \"蓬江区\"\n\t\t}, {\n\t\t\tvalue: \"440704\",\n\t\t\ttext: \"江海区\"\n\t\t}, {\n\t\t\tvalue: \"440705\",\n\t\t\ttext: \"新会区\"\n\t\t}, {\n\t\t\tvalue: \"440781\",\n\t\t\ttext: \"台山市\"\n\t\t}, {\n\t\t\tvalue: \"440783\",\n\t\t\ttext: \"开平市\"\n\t\t}, {\n\t\t\tvalue: \"440784\",\n\t\t\ttext: \"鹤山市\"\n\t\t}, {\n\t\t\tvalue: \"440785\",\n\t\t\ttext: \"恩平市\"\n\t\t}, {\n\t\t\tvalue: \"440786\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"440800\",\n\t\ttext: \"湛江市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440802\",\n\t\t\ttext: \"赤坎区\"\n\t\t}, {\n\t\t\tvalue: \"440803\",\n\t\t\ttext: \"霞山区\"\n\t\t}, {\n\t\t\tvalue: \"440804\",\n\t\t\ttext: \"坡头区\"\n\t\t}, {\n\t\t\tvalue: \"440811\",\n\t\t\ttext: \"麻章区\"\n\t\t}, {\n\t\t\tvalue: \"440823\",\n\t\t\ttext: \"遂溪县\"\n\t\t}, {\n\t\t\tvalue: \"440825\",\n\t\t\ttext: \"徐闻县\"\n\t\t}, {\n\t\t\tvalue: \"440881\",\n\t\t\ttext: \"廉江市\"\n\t\t}, {\n\t\t\tvalue: \"440882\",\n\t\t\ttext: \"雷州市\"\n\t\t}, {\n\t\t\tvalue: \"440883\",\n\t\t\ttext: \"吴川市\"\n\t\t}, {\n\t\t\tvalue: \"440884\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"440900\",\n\t\ttext: \"茂名市\",\n\t\tchildren: [{\n\t\t\tvalue: \"440902\",\n\t\t\ttext: \"茂南区\"\n\t\t}, {\n\t\t\tvalue: \"440903\",\n\t\t\ttext: \"茂港区\"\n\t\t}, {\n\t\t\tvalue: \"440923\",\n\t\t\ttext: \"电白县\"\n\t\t}, {\n\t\t\tvalue: \"440981\",\n\t\t\ttext: \"高州市\"\n\t\t}, {\n\t\t\tvalue: \"440982\",\n\t\t\ttext: \"化州市\"\n\t\t}, {\n\t\t\tvalue: \"440983\",\n\t\t\ttext: \"信宜市\"\n\t\t}, {\n\t\t\tvalue: \"440984\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"441200\",\n\t\ttext: \"肇庆市\",\n\t\tchildren: [{\n\t\t\tvalue: \"441202\",\n\t\t\ttext: \"端州区\"\n\t\t}, {\n\t\t\tvalue: \"441203\",\n\t\t\ttext: \"鼎湖区\"\n\t\t}, {\n\t\t\tvalue: \"441223\",\n\t\t\ttext: \"广宁县\"\n\t\t}, {\n\t\t\tvalue: \"441224\",\n\t\t\ttext: \"怀集县\"\n\t\t}, {\n\t\t\tvalue: \"441225\",\n\t\t\ttext: \"封开县\"\n\t\t}, {\n\t\t\tvalue: \"441226\",\n\t\t\ttext: \"德庆县\"\n\t\t}, {\n\t\t\tvalue: \"441283\",\n\t\t\ttext: \"高要市\"\n\t\t}, {\n\t\t\tvalue: \"441284\",\n\t\t\ttext: \"四会市\"\n\t\t}, {\n\t\t\tvalue: \"441285\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"441300\",\n\t\ttext: \"惠州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"441302\",\n\t\t\ttext: \"惠城区\"\n\t\t}, {\n\t\t\tvalue: \"441303\",\n\t\t\ttext: \"惠阳区\"\n\t\t}, {\n\t\t\tvalue: \"441322\",\n\t\t\ttext: \"博罗县\"\n\t\t}, {\n\t\t\tvalue: \"441323\",\n\t\t\ttext: \"惠东县\"\n\t\t}, {\n\t\t\tvalue: \"441324\",\n\t\t\ttext: \"龙门县\"\n\t\t}, {\n\t\t\tvalue: \"441325\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"441400\",\n\t\ttext: \"梅州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"441402\",\n\t\t\ttext: \"梅江区\"\n\t\t}, {\n\t\t\tvalue: \"441421\",\n\t\t\ttext: \"梅县\"\n\t\t}, {\n\t\t\tvalue: \"441422\",\n\t\t\ttext: \"大埔县\"\n\t\t}, {\n\t\t\tvalue: \"441423\",\n\t\t\ttext: \"丰顺县\"\n\t\t}, {\n\t\t\tvalue: \"441424\",\n\t\t\ttext: \"五华县\"\n\t\t}, {\n\t\t\tvalue: \"441426\",\n\t\t\ttext: \"平远县\"\n\t\t}, {\n\t\t\tvalue: \"441427\",\n\t\t\ttext: \"蕉岭县\"\n\t\t}, {\n\t\t\tvalue: \"441481\",\n\t\t\ttext: \"兴宁市\"\n\t\t}, {\n\t\t\tvalue: \"441482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"441500\",\n\t\ttext: \"汕尾市\",\n\t\tchildren: [{\n\t\t\tvalue: \"441502\",\n\t\t\ttext: \"城区\"\n\t\t}, {\n\t\t\tvalue: \"441521\",\n\t\t\ttext: \"海丰县\"\n\t\t}, {\n\t\t\tvalue: \"441523\",\n\t\t\ttext: \"陆河县\"\n\t\t}, {\n\t\t\tvalue: \"441581\",\n\t\t\ttext: \"陆丰市\"\n\t\t}, {\n\t\t\tvalue: \"441582\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"441600\",\n\t\ttext: \"河源市\",\n\t\tchildren: [{\n\t\t\tvalue: \"441602\",\n\t\t\ttext: \"源城区\"\n\t\t}, {\n\t\t\tvalue: \"441621\",\n\t\t\ttext: \"紫金县\"\n\t\t}, {\n\t\t\tvalue: \"441622\",\n\t\t\ttext: \"龙川县\"\n\t\t}, {\n\t\t\tvalue: \"441623\",\n\t\t\ttext: \"连平县\"\n\t\t}, {\n\t\t\tvalue: \"441624\",\n\t\t\ttext: \"和平县\"\n\t\t}, {\n\t\t\tvalue: \"441625\",\n\t\t\ttext: \"东源县\"\n\t\t}, {\n\t\t\tvalue: \"441626\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"441700\",\n\t\ttext: \"阳江市\",\n\t\tchildren: [{\n\t\t\tvalue: \"441702\",\n\t\t\ttext: \"江城区\"\n\t\t}, {\n\t\t\tvalue: \"441721\",\n\t\t\ttext: \"阳西县\"\n\t\t}, {\n\t\t\tvalue: \"441723\",\n\t\t\ttext: \"阳东县\"\n\t\t}, {\n\t\t\tvalue: \"441781\",\n\t\t\ttext: \"阳春市\"\n\t\t}, {\n\t\t\tvalue: \"441782\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"441800\",\n\t\ttext: \"清远市\",\n\t\tchildren: [{\n\t\t\tvalue: \"441802\",\n\t\t\ttext: \"清城区\"\n\t\t}, {\n\t\t\tvalue: \"441821\",\n\t\t\ttext: \"佛冈县\"\n\t\t}, {\n\t\t\tvalue: \"441823\",\n\t\t\ttext: \"阳山县\"\n\t\t}, {\n\t\t\tvalue: \"441825\",\n\t\t\ttext: \"连山壮族瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"441826\",\n\t\t\ttext: \"连南瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"441827\",\n\t\t\ttext: \"清新县\"\n\t\t}, {\n\t\t\tvalue: \"441881\",\n\t\t\ttext: \"英德市\"\n\t\t}, {\n\t\t\tvalue: \"441882\",\n\t\t\ttext: \"连州市\"\n\t\t}, {\n\t\t\tvalue: \"441883\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"441900\",\n\t\ttext: \"东莞市\"\n\t}, {\n\t\tvalue: \"442000\",\n\t\ttext: \"中山市\"\n\t}, {\n\t\tvalue: \"445100\",\n\t\ttext: \"潮州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"445102\",\n\t\t\ttext: \"湘桥区\"\n\t\t}, {\n\t\t\tvalue: \"445121\",\n\t\t\ttext: \"潮安县\"\n\t\t}, {\n\t\t\tvalue: \"445122\",\n\t\t\ttext: \"饶平县\"\n\t\t}, {\n\t\t\tvalue: \"445185\",\n\t\t\ttext: \"枫溪区\"\n\t\t}, {\n\t\t\tvalue: \"445186\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"445200\",\n\t\ttext: \"揭阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"445202\",\n\t\t\ttext: \"榕城区\"\n\t\t}, {\n\t\t\tvalue: \"445221\",\n\t\t\ttext: \"揭东县\"\n\t\t}, {\n\t\t\tvalue: \"445222\",\n\t\t\ttext: \"揭西县\"\n\t\t}, {\n\t\t\tvalue: \"445224\",\n\t\t\ttext: \"惠来县\"\n\t\t}, {\n\t\t\tvalue: \"445281\",\n\t\t\ttext: \"普宁市\"\n\t\t}, {\n\t\t\tvalue: \"445284\",\n\t\t\ttext: \"东山区\"\n\t\t}, {\n\t\t\tvalue: \"445285\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"445300\",\n\t\ttext: \"云浮市\",\n\t\tchildren: [{\n\t\t\tvalue: \"445302\",\n\t\t\ttext: \"云城区\"\n\t\t}, {\n\t\t\tvalue: \"445321\",\n\t\t\ttext: \"新兴县\"\n\t\t}, {\n\t\t\tvalue: \"445322\",\n\t\t\ttext: \"郁南县\"\n\t\t}, {\n\t\t\tvalue: \"445323\",\n\t\t\ttext: \"云安县\"\n\t\t}, {\n\t\t\tvalue: \"445381\",\n\t\t\ttext: \"罗定市\"\n\t\t}, {\n\t\t\tvalue: \"445382\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '450000',\n\ttext: '广西壮族',\n\tchildren: [{\n\t\tvalue: \"450100\",\n\t\ttext: \"南宁市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450102\",\n\t\t\ttext: \"兴宁区\"\n\t\t}, {\n\t\t\tvalue: \"450103\",\n\t\t\ttext: \"青秀区\"\n\t\t}, {\n\t\t\tvalue: \"450105\",\n\t\t\ttext: \"江南区\"\n\t\t}, {\n\t\t\tvalue: \"450107\",\n\t\t\ttext: \"西乡塘区\"\n\t\t}, {\n\t\t\tvalue: \"450108\",\n\t\t\ttext: \"良庆区\"\n\t\t}, {\n\t\t\tvalue: \"450109\",\n\t\t\ttext: \"邕宁区\"\n\t\t}, {\n\t\t\tvalue: \"450122\",\n\t\t\ttext: \"武鸣县\"\n\t\t}, {\n\t\t\tvalue: \"450123\",\n\t\t\ttext: \"隆安县\"\n\t\t}, {\n\t\t\tvalue: \"450124\",\n\t\t\ttext: \"马山县\"\n\t\t}, {\n\t\t\tvalue: \"450125\",\n\t\t\ttext: \"上林县\"\n\t\t}, {\n\t\t\tvalue: \"450126\",\n\t\t\ttext: \"宾阳县\"\n\t\t}, {\n\t\t\tvalue: \"450127\",\n\t\t\ttext: \"横县\"\n\t\t}, {\n\t\t\tvalue: \"450128\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"450200\",\n\t\ttext: \"柳州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450202\",\n\t\t\ttext: \"城中区\"\n\t\t}, {\n\t\t\tvalue: \"450203\",\n\t\t\ttext: \"鱼峰区\"\n\t\t}, {\n\t\t\tvalue: \"450204\",\n\t\t\ttext: \"柳南区\"\n\t\t}, {\n\t\t\tvalue: \"450205\",\n\t\t\ttext: \"柳北区\"\n\t\t}, {\n\t\t\tvalue: \"450221\",\n\t\t\ttext: \"柳江县\"\n\t\t}, {\n\t\t\tvalue: \"450222\",\n\t\t\ttext: \"柳城县\"\n\t\t}, {\n\t\t\tvalue: \"450223\",\n\t\t\ttext: \"鹿寨县\"\n\t\t}, {\n\t\t\tvalue: \"450224\",\n\t\t\ttext: \"融安县\"\n\t\t}, {\n\t\t\tvalue: \"450225\",\n\t\t\ttext: \"融水苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"450226\",\n\t\t\ttext: \"三江侗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"450227\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"450300\",\n\t\ttext: \"桂林市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450302\",\n\t\t\ttext: \"秀峰区\"\n\t\t}, {\n\t\t\tvalue: \"450303\",\n\t\t\ttext: \"叠彩区\"\n\t\t}, {\n\t\t\tvalue: \"450304\",\n\t\t\ttext: \"象山区\"\n\t\t}, {\n\t\t\tvalue: \"450305\",\n\t\t\ttext: \"七星区\"\n\t\t}, {\n\t\t\tvalue: \"450311\",\n\t\t\ttext: \"雁山区\"\n\t\t}, {\n\t\t\tvalue: \"450321\",\n\t\t\ttext: \"阳朔县\"\n\t\t}, {\n\t\t\tvalue: \"450322\",\n\t\t\ttext: \"临桂县\"\n\t\t}, {\n\t\t\tvalue: \"450323\",\n\t\t\ttext: \"灵川县\"\n\t\t}, {\n\t\t\tvalue: \"450324\",\n\t\t\ttext: \"全州县\"\n\t\t}, {\n\t\t\tvalue: \"450325\",\n\t\t\ttext: \"兴安县\"\n\t\t}, {\n\t\t\tvalue: \"450326\",\n\t\t\ttext: \"永福县\"\n\t\t}, {\n\t\t\tvalue: \"450327\",\n\t\t\ttext: \"灌阳县\"\n\t\t}, {\n\t\t\tvalue: \"450328\",\n\t\t\ttext: \"龙胜各族自治县\"\n\t\t}, {\n\t\t\tvalue: \"450329\",\n\t\t\ttext: \"资源县\"\n\t\t}, {\n\t\t\tvalue: \"450330\",\n\t\t\ttext: \"平乐县\"\n\t\t}, {\n\t\t\tvalue: \"450331\",\n\t\t\ttext: \"荔浦县\"\n\t\t}, {\n\t\t\tvalue: \"450332\",\n\t\t\ttext: \"恭城瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"450333\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"450400\",\n\t\ttext: \"梧州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450403\",\n\t\t\ttext: \"万秀区\"\n\t\t}, {\n\t\t\tvalue: \"450404\",\n\t\t\ttext: \"蝶山区\"\n\t\t}, {\n\t\t\tvalue: \"450405\",\n\t\t\ttext: \"长洲区\"\n\t\t}, {\n\t\t\tvalue: \"450421\",\n\t\t\ttext: \"苍梧县\"\n\t\t}, {\n\t\t\tvalue: \"450422\",\n\t\t\ttext: \"藤县\"\n\t\t}, {\n\t\t\tvalue: \"450423\",\n\t\t\ttext: \"蒙山县\"\n\t\t}, {\n\t\t\tvalue: \"450481\",\n\t\t\ttext: \"岑溪市\"\n\t\t}, {\n\t\t\tvalue: \"450482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"450500\",\n\t\ttext: \"北海市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450502\",\n\t\t\ttext: \"海城区\"\n\t\t}, {\n\t\t\tvalue: \"450503\",\n\t\t\ttext: \"银海区\"\n\t\t}, {\n\t\t\tvalue: \"450512\",\n\t\t\ttext: \"铁山港区\"\n\t\t}, {\n\t\t\tvalue: \"450521\",\n\t\t\ttext: \"合浦县\"\n\t\t}, {\n\t\t\tvalue: \"450522\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"450600\",\n\t\ttext: \"防城港市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450602\",\n\t\t\ttext: \"港口区\"\n\t\t}, {\n\t\t\tvalue: \"450603\",\n\t\t\ttext: \"防城区\"\n\t\t}, {\n\t\t\tvalue: \"450621\",\n\t\t\ttext: \"上思县\"\n\t\t}, {\n\t\t\tvalue: \"450681\",\n\t\t\ttext: \"东兴市\"\n\t\t}, {\n\t\t\tvalue: \"450682\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"450700\",\n\t\ttext: \"钦州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450702\",\n\t\t\ttext: \"钦南区\"\n\t\t}, {\n\t\t\tvalue: \"450703\",\n\t\t\ttext: \"钦北区\"\n\t\t}, {\n\t\t\tvalue: \"450721\",\n\t\t\ttext: \"灵山县\"\n\t\t}, {\n\t\t\tvalue: \"450722\",\n\t\t\ttext: \"浦北县\"\n\t\t}, {\n\t\t\tvalue: \"450723\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"450800\",\n\t\ttext: \"贵港市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450802\",\n\t\t\ttext: \"港北区\"\n\t\t}, {\n\t\t\tvalue: \"450803\",\n\t\t\ttext: \"港南区\"\n\t\t}, {\n\t\t\tvalue: \"450804\",\n\t\t\ttext: \"覃塘区\"\n\t\t}, {\n\t\t\tvalue: \"450821\",\n\t\t\ttext: \"平南县\"\n\t\t}, {\n\t\t\tvalue: \"450881\",\n\t\t\ttext: \"桂平市\"\n\t\t}, {\n\t\t\tvalue: \"450882\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"450900\",\n\t\ttext: \"玉林市\",\n\t\tchildren: [{\n\t\t\tvalue: \"450902\",\n\t\t\ttext: \"玉州区\"\n\t\t}, {\n\t\t\tvalue: \"450921\",\n\t\t\ttext: \"容县\"\n\t\t}, {\n\t\t\tvalue: \"450922\",\n\t\t\ttext: \"陆川县\"\n\t\t}, {\n\t\t\tvalue: \"450923\",\n\t\t\ttext: \"博白县\"\n\t\t}, {\n\t\t\tvalue: \"450924\",\n\t\t\ttext: \"兴业县\"\n\t\t}, {\n\t\t\tvalue: \"450981\",\n\t\t\ttext: \"北流市\"\n\t\t}, {\n\t\t\tvalue: \"450982\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"451000\",\n\t\ttext: \"百色市\",\n\t\tchildren: [{\n\t\t\tvalue: \"451002\",\n\t\t\ttext: \"右江区\"\n\t\t}, {\n\t\t\tvalue: \"451021\",\n\t\t\ttext: \"田阳县\"\n\t\t}, {\n\t\t\tvalue: \"451022\",\n\t\t\ttext: \"田东县\"\n\t\t}, {\n\t\t\tvalue: \"451023\",\n\t\t\ttext: \"平果县\"\n\t\t}, {\n\t\t\tvalue: \"451024\",\n\t\t\ttext: \"德保县\"\n\t\t}, {\n\t\t\tvalue: \"451025\",\n\t\t\ttext: \"靖西县\"\n\t\t}, {\n\t\t\tvalue: \"451026\",\n\t\t\ttext: \"那坡县\"\n\t\t}, {\n\t\t\tvalue: \"451027\",\n\t\t\ttext: \"凌云县\"\n\t\t}, {\n\t\t\tvalue: \"451028\",\n\t\t\ttext: \"乐业县\"\n\t\t}, {\n\t\t\tvalue: \"451029\",\n\t\t\ttext: \"田林县\"\n\t\t}, {\n\t\t\tvalue: \"451030\",\n\t\t\ttext: \"西林县\"\n\t\t}, {\n\t\t\tvalue: \"451031\",\n\t\t\ttext: \"隆林各族自治县\"\n\t\t}, {\n\t\t\tvalue: \"451032\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"451100\",\n\t\ttext: \"贺州市\",\n\t\tchildren: [{\n\t\t\t\tvalue: \"451102\",\n\t\t\t\ttext: \"八步区\"\n\t\t\t}, {\n\t\t\t\tvalue: \"451121\",\n\t\t\t\ttext: \"昭平县\"\n\t\t\t}, {\n\t\t\t\tvalue: \"451122\",\n\t\t\t\ttext: \"钟山县\"\n\t\t\t}, {\n\t\t\t\tvalue: \"451123\",\n\t\t\t\ttext: \"富川瑶族自治县\"\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tvalue: \"451124\",\n\t\t\t\ttext: \"其它区\"\n\t\t\t}\n\t\t]\n\t}, {\n\t\tvalue: \"451200\",\n\t\ttext: \"河池市\",\n\t\tchildren: [{\n\t\t\tvalue: \"451202\",\n\t\t\ttext: \"金城江区\"\n\t\t}, {\n\t\t\tvalue: \"451221\",\n\t\t\ttext: \"南丹县\"\n\t\t}, {\n\t\t\tvalue: \"451222\",\n\t\t\ttext: \"天峨县\"\n\t\t}, {\n\t\t\tvalue: \"451223\",\n\t\t\ttext: \"凤山县\"\n\t\t}, {\n\t\t\tvalue: \"451224\",\n\t\t\ttext: \"东兰县\"\n\t\t}, {\n\t\t\tvalue: \"451225\",\n\t\t\ttext: \"罗城仫佬族自治县\"\n\t\t}, {\n\t\t\tvalue: \"451226\",\n\t\t\ttext: \"环江毛南族自治县\"\n\t\t}, {\n\t\t\tvalue: \"451227\",\n\t\t\ttext: \"巴马瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"451228\",\n\t\t\ttext: \"都安瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"451229\",\n\t\t\ttext: \"大化瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"451281\",\n\t\t\ttext: \"宜州市\"\n\t\t}, {\n\t\t\tvalue: \"451282\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"451300\",\n\t\ttext: \"来宾市\",\n\t\tchildren: [{\n\t\t\tvalue: \"451302\",\n\t\t\ttext: \"兴宾区\"\n\t\t}, {\n\t\t\tvalue: \"451321\",\n\t\t\ttext: \"忻城县\"\n\t\t}, {\n\t\t\tvalue: \"451322\",\n\t\t\ttext: \"象州县\"\n\t\t}, {\n\t\t\tvalue: \"451323\",\n\t\t\ttext: \"武宣县\"\n\t\t}, {\n\t\t\tvalue: \"451324\",\n\t\t\ttext: \"金秀瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"451381\",\n\t\t\ttext: \"合山市\"\n\t\t}, {\n\t\t\tvalue: \"451382\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"451400\",\n\t\ttext: \"崇左市\",\n\t\tchildren: [{\n\t\t\tvalue: \"451402\",\n\t\t\ttext: \"江洲区\"\n\t\t}, {\n\t\t\tvalue: \"451421\",\n\t\t\ttext: \"扶绥县\"\n\t\t}, {\n\t\t\tvalue: \"451422\",\n\t\t\ttext: \"宁明县\"\n\t\t}, {\n\t\t\tvalue: \"451423\",\n\t\t\ttext: \"龙州县\"\n\t\t}, {\n\t\t\tvalue: \"451424\",\n\t\t\ttext: \"大新县\"\n\t\t}, {\n\t\t\tvalue: \"451425\",\n\t\t\ttext: \"天等县\"\n\t\t}, {\n\t\t\tvalue: \"451481\",\n\t\t\ttext: \"凭祥市\"\n\t\t}, {\n\t\t\tvalue: \"451482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '460000',\n\ttext: '海南省',\n\tchildren: [{\n\t\tvalue: \"460100\",\n\t\ttext: \"海口市\",\n\t\tchildren: [{\n\t\t\tvalue: \"460105\",\n\t\t\ttext: \"秀英区\"\n\t\t}, {\n\t\t\tvalue: \"460106\",\n\t\t\ttext: \"龙华区\"\n\t\t}, {\n\t\t\tvalue: \"460107\",\n\t\t\ttext: \"琼山区\"\n\t\t}, {\n\t\t\tvalue: \"460108\",\n\t\t\ttext: \"美兰区\"\n\t\t}, {\n\t\t\tvalue: \"460109\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"460200\",\n\t\ttext: \"三亚市\"\n\t}, {\n\t\tvalue: \"469001\",\n\t\ttext: \"五指山市\"\n\t}, {\n\t\tvalue: \"469002\",\n\t\ttext: \"琼海市\"\n\t}, {\n\t\tvalue: \"469003\",\n\t\ttext: \"儋州市\"\n\t}, {\n\t\tvalue: \"469005\",\n\t\ttext: \"文昌市\"\n\t}, {\n\t\tvalue: \"469006\",\n\t\ttext: \"万宁市\"\n\t}, {\n\t\tvalue: \"469007\",\n\t\ttext: \"东方市\"\n\t}, {\n\t\tvalue: \"469025\",\n\t\ttext: \"定安县\"\n\t}, {\n\t\tvalue: \"469026\",\n\t\ttext: \"屯昌县\"\n\t}, {\n\t\tvalue: \"469027\",\n\t\ttext: \"澄迈县\"\n\t}, {\n\t\tvalue: \"469028\",\n\t\ttext: \"临高县\"\n\t}, {\n\t\tvalue: \"469030\",\n\t\ttext: \"白沙黎族自治县\"\n\t}, {\n\t\tvalue: \"469031\",\n\t\ttext: \"昌江黎族自治县\"\n\t}, {\n\t\tvalue: \"469033\",\n\t\ttext: \"乐东黎族自治县\"\n\t}, {\n\t\tvalue: \"469034\",\n\t\ttext: \"陵水黎族自治县\"\n\t}, {\n\t\tvalue: \"469035\",\n\t\ttext: \"保亭黎族苗族自治县\"\n\t}, {\n\t\tvalue: \"469036\",\n\t\ttext: \"琼中黎族苗族自治县\"\n\t}, {\n\t\tvalue: \"469037\",\n\t\ttext: \"西沙群岛\"\n\t}, {\n\t\tvalue: \"469038\",\n\t\ttext: \"南沙群岛\"\n\t}, {\n\t\tvalue: \"469039\",\n\t\ttext: \"中沙群岛的岛礁及其海域\"\n\t}]\n}, {\n\tvalue: '500000',\n\ttext: '重庆',\n\tchildren: [{\n\t\tvalue: '500000',\n\t\ttext: '重庆',\n\t\tchildren: [{\n\t\t\tvalue: \"500101\",\n\t\t\ttext: \"万州区\"\n\t\t}, {\n\t\t\tvalue: \"500102\",\n\t\t\ttext: \"涪陵区\"\n\t\t}, {\n\t\t\tvalue: \"500103\",\n\t\t\ttext: \"渝中区\"\n\t\t}, {\n\t\t\tvalue: \"500104\",\n\t\t\ttext: \"大渡口区\"\n\t\t}, {\n\t\t\tvalue: \"500105\",\n\t\t\ttext: \"江北区\"\n\t\t}, {\n\t\t\tvalue: \"500106\",\n\t\t\ttext: \"沙坪坝区\"\n\t\t}, {\n\t\t\tvalue: \"500107\",\n\t\t\ttext: \"九龙坡区\"\n\t\t}, {\n\t\t\tvalue: \"500108\",\n\t\t\ttext: \"南岸区\"\n\t\t}, {\n\t\t\tvalue: \"500109\",\n\t\t\ttext: \"北碚区\"\n\t\t}, {\n\t\t\tvalue: \"500110\",\n\t\t\ttext: \"万盛区\"\n\t\t}, {\n\t\t\tvalue: \"500111\",\n\t\t\ttext: \"双桥区\"\n\t\t}, {\n\t\t\tvalue: \"500112\",\n\t\t\ttext: \"渝北区\"\n\t\t}, {\n\t\t\tvalue: \"500113\",\n\t\t\ttext: \"巴南区\"\n\t\t}, {\n\t\t\tvalue: \"500114\",\n\t\t\ttext: \"黔江区\"\n\t\t}, {\n\t\t\tvalue: \"500115\",\n\t\t\ttext: \"长寿区\"\n\t\t}, {\n\t\t\tvalue: \"500222\",\n\t\t\ttext: \"綦江县\"\n\t\t}, {\n\t\t\tvalue: \"500223\",\n\t\t\ttext: \"潼南县\"\n\t\t}, {\n\t\t\tvalue: \"500224\",\n\t\t\ttext: \"铜梁县\"\n\t\t}, {\n\t\t\tvalue: \"500225\",\n\t\t\ttext: \"大足县\"\n\t\t}, {\n\t\t\tvalue: \"500226\",\n\t\t\ttext: \"荣昌县\"\n\t\t}, {\n\t\t\tvalue: \"500227\",\n\t\t\ttext: \"璧山县\"\n\t\t}, {\n\t\t\tvalue: \"500228\",\n\t\t\ttext: \"梁平县\"\n\t\t}, {\n\t\t\tvalue: \"500229\",\n\t\t\ttext: \"城口县\"\n\t\t}, {\n\t\t\tvalue: \"500230\",\n\t\t\ttext: \"丰都县\"\n\t\t}, {\n\t\t\tvalue: \"500231\",\n\t\t\ttext: \"垫江县\"\n\t\t}, {\n\t\t\tvalue: \"500232\",\n\t\t\ttext: \"武隆县\"\n\t\t}, {\n\t\t\tvalue: \"500233\",\n\t\t\ttext: \"忠县\"\n\t\t}, {\n\t\t\tvalue: \"500234\",\n\t\t\ttext: \"开县\"\n\t\t}, {\n\t\t\tvalue: \"500235\",\n\t\t\ttext: \"云阳县\"\n\t\t}, {\n\t\t\tvalue: \"500236\",\n\t\t\ttext: \"奉节县\"\n\t\t}, {\n\t\t\tvalue: \"500237\",\n\t\t\ttext: \"巫山县\"\n\t\t}, {\n\t\t\tvalue: \"500238\",\n\t\t\ttext: \"巫溪县\"\n\t\t}, {\n\t\t\tvalue: \"500240\",\n\t\t\ttext: \"石柱土家族自治县\"\n\t\t}, {\n\t\t\tvalue: \"500241\",\n\t\t\ttext: \"秀山土家族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"500242\",\n\t\t\ttext: \"酉阳土家族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"500243\",\n\t\t\ttext: \"彭水苗族土家族自治县\"\n\t\t}, {\n\t\t\tvalue: \"500381\",\n\t\t\ttext: \"江津区\"\n\t\t}, {\n\t\t\tvalue: \"500382\",\n\t\t\ttext: \"合川区\"\n\t\t}, {\n\t\t\tvalue: \"500383\",\n\t\t\ttext: \"永川区\"\n\t\t}, {\n\t\t\tvalue: \"500384\",\n\t\t\ttext: \"南川区\"\n\t\t}, {\n\t\t\tvalue: \"500385\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '510000',\n\ttext: '四川省',\n\tchildren: [{\n\t\tvalue: \"510100\",\n\t\ttext: \"成都市\",\n\t\tchildren: [{\n\t\t\tvalue: \"510104\",\n\t\t\ttext: \"锦江区\"\n\t\t}, {\n\t\t\tvalue: \"510105\",\n\t\t\ttext: \"青羊区\"\n\t\t}, {\n\t\t\tvalue: \"510106\",\n\t\t\ttext: \"金牛区\"\n\t\t}, {\n\t\t\tvalue: \"510107\",\n\t\t\ttext: \"武侯区\"\n\t\t}, {\n\t\t\tvalue: \"510108\",\n\t\t\ttext: \"成华区\"\n\t\t}, {\n\t\t\tvalue: \"510112\",\n\t\t\ttext: \"龙泉驿区\"\n\t\t}, {\n\t\t\tvalue: \"510113\",\n\t\t\ttext: \"青白江区\"\n\t\t}, {\n\t\t\tvalue: \"510114\",\n\t\t\ttext: \"新都区\"\n\t\t}, {\n\t\t\tvalue: \"510115\",\n\t\t\ttext: \"温江区\"\n\t\t}, {\n\t\t\tvalue: \"510121\",\n\t\t\ttext: \"金堂县\"\n\t\t}, {\n\t\t\tvalue: \"510122\",\n\t\t\ttext: \"双流县\"\n\t\t}, {\n\t\t\tvalue: \"510124\",\n\t\t\ttext: \"郫县\"\n\t\t}, {\n\t\t\tvalue: \"510129\",\n\t\t\ttext: \"大邑县\"\n\t\t}, {\n\t\t\tvalue: \"510131\",\n\t\t\ttext: \"蒲江县\"\n\t\t}, {\n\t\t\tvalue: \"510132\",\n\t\t\ttext: \"新津县\"\n\t\t}, {\n\t\t\tvalue: \"510181\",\n\t\t\ttext: \"都江堰市\"\n\t\t}, {\n\t\t\tvalue: \"510182\",\n\t\t\ttext: \"彭州市\"\n\t\t}, {\n\t\t\tvalue: \"510183\",\n\t\t\ttext: \"邛崃市\"\n\t\t}, {\n\t\t\tvalue: \"510184\",\n\t\t\ttext: \"崇州市\"\n\t\t}, {\n\t\t\tvalue: \"510185\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"510300\",\n\t\ttext: \"自贡市\",\n\t\tchildren: [{\n\t\t\tvalue: \"510302\",\n\t\t\ttext: \"自流井区\"\n\t\t}, {\n\t\t\tvalue: \"510303\",\n\t\t\ttext: \"贡井区\"\n\t\t}, {\n\t\t\tvalue: \"510304\",\n\t\t\ttext: \"大安区\"\n\t\t}, {\n\t\t\tvalue: \"510311\",\n\t\t\ttext: \"沿滩区\"\n\t\t}, {\n\t\t\tvalue: \"510321\",\n\t\t\ttext: \"荣县\"\n\t\t}, {\n\t\t\tvalue: \"510322\",\n\t\t\ttext: \"富顺县\"\n\t\t}, {\n\t\t\tvalue: \"510323\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"510400\",\n\t\ttext: \"攀枝花市\",\n\t\tchildren: [{\n\t\t\tvalue: \"510402\",\n\t\t\ttext: \"东区\"\n\t\t}, {\n\t\t\tvalue: \"510403\",\n\t\t\ttext: \"西区\"\n\t\t}, {\n\t\t\tvalue: \"510411\",\n\t\t\ttext: \"仁和区\"\n\t\t}, {\n\t\t\tvalue: \"510421\",\n\t\t\ttext: \"米易县\"\n\t\t}, {\n\t\t\tvalue: \"510422\",\n\t\t\ttext: \"盐边县\"\n\t\t}, {\n\t\t\tvalue: \"510423\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"510500\",\n\t\ttext: \"泸州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"510502\",\n\t\t\ttext: \"江阳区\"\n\t\t}, {\n\t\t\tvalue: \"510503\",\n\t\t\ttext: \"纳溪区\"\n\t\t}, {\n\t\t\tvalue: \"510504\",\n\t\t\ttext: \"龙马潭区\"\n\t\t}, {\n\t\t\tvalue: \"510521\",\n\t\t\ttext: \"泸县\"\n\t\t}, {\n\t\t\tvalue: \"510522\",\n\t\t\ttext: \"合江县\"\n\t\t}, {\n\t\t\tvalue: \"510524\",\n\t\t\ttext: \"叙永县\"\n\t\t}, {\n\t\t\tvalue: \"510525\",\n\t\t\ttext: \"古蔺县\"\n\t\t}, {\n\t\t\tvalue: \"510526\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"510600\",\n\t\ttext: \"德阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"510603\",\n\t\t\ttext: \"旌阳区\"\n\t\t}, {\n\t\t\tvalue: \"510623\",\n\t\t\ttext: \"中江县\"\n\t\t}, {\n\t\t\tvalue: \"510626\",\n\t\t\ttext: \"罗江县\"\n\t\t}, {\n\t\t\tvalue: \"510681\",\n\t\t\ttext: \"广汉市\"\n\t\t}, {\n\t\t\tvalue: \"510682\",\n\t\t\ttext: \"什邡市\"\n\t\t}, {\n\t\t\tvalue: \"510683\",\n\t\t\ttext: \"绵竹市\"\n\t\t}, {\n\t\t\tvalue: \"510684\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"510700\",\n\t\ttext: \"绵阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"510703\",\n\t\t\ttext: \"涪城区\"\n\t\t}, {\n\t\t\tvalue: \"510704\",\n\t\t\ttext: \"游仙区\"\n\t\t}, {\n\t\t\tvalue: \"510722\",\n\t\t\ttext: \"三台县\"\n\t\t}, {\n\t\t\tvalue: \"510723\",\n\t\t\ttext: \"盐亭县\"\n\t\t}, {\n\t\t\tvalue: \"510724\",\n\t\t\ttext: \"安县\"\n\t\t}, {\n\t\t\tvalue: \"510725\",\n\t\t\ttext: \"梓潼县\"\n\t\t}, {\n\t\t\tvalue: \"510726\",\n\t\t\ttext: \"北川羌族自治县\"\n\t\t}, {\n\t\t\tvalue: \"510727\",\n\t\t\ttext: \"平武县\"\n\t\t}, {\n\t\t\tvalue: \"510751\",\n\t\t\ttext: \"高新区\"\n\t\t}, {\n\t\t\tvalue: \"510781\",\n\t\t\ttext: \"江油市\"\n\t\t}, {\n\t\t\tvalue: \"510782\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"510800\",\n\t\ttext: \"广元市\",\n\t\tchildren: [{\n\t\t\tvalue: \"510802\",\n\t\t\ttext: \"利州区\"\n\t\t}, {\n\t\t\tvalue: \"510811\",\n\t\t\ttext: \"元坝区\"\n\t\t}, {\n\t\t\tvalue: \"510812\",\n\t\t\ttext: \"朝天区\"\n\t\t}, {\n\t\t\tvalue: \"510821\",\n\t\t\ttext: \"旺苍县\"\n\t\t}, {\n\t\t\tvalue: \"510822\",\n\t\t\ttext: \"青川县\"\n\t\t}, {\n\t\t\tvalue: \"510823\",\n\t\t\ttext: \"剑阁县\"\n\t\t}, {\n\t\t\tvalue: \"510824\",\n\t\t\ttext: \"苍溪县\"\n\t\t}, {\n\t\t\tvalue: \"510825\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"510900\",\n\t\ttext: \"遂宁市\",\n\t\tchildren: [{\n\t\t\tvalue: \"510903\",\n\t\t\ttext: \"船山区\"\n\t\t}, {\n\t\t\tvalue: \"510904\",\n\t\t\ttext: \"安居区\"\n\t\t}, {\n\t\t\tvalue: \"510921\",\n\t\t\ttext: \"蓬溪县\"\n\t\t}, {\n\t\t\tvalue: \"510922\",\n\t\t\ttext: \"射洪县\"\n\t\t}, {\n\t\t\tvalue: \"510923\",\n\t\t\ttext: \"大英县\"\n\t\t}, {\n\t\t\tvalue: \"510924\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511000\",\n\t\ttext: \"内江市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511002\",\n\t\t\ttext: \"市中区\"\n\t\t}, {\n\t\t\tvalue: \"511011\",\n\t\t\ttext: \"东兴区\"\n\t\t}, {\n\t\t\tvalue: \"511024\",\n\t\t\ttext: \"威远县\"\n\t\t}, {\n\t\t\tvalue: \"511025\",\n\t\t\ttext: \"资中县\"\n\t\t}, {\n\t\t\tvalue: \"511028\",\n\t\t\ttext: \"隆昌县\"\n\t\t}, {\n\t\t\tvalue: \"511029\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511100\",\n\t\ttext: \"乐山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511102\",\n\t\t\ttext: \"市中区\"\n\t\t}, {\n\t\t\tvalue: \"511111\",\n\t\t\ttext: \"沙湾区\"\n\t\t}, {\n\t\t\tvalue: \"511112\",\n\t\t\ttext: \"五通桥区\"\n\t\t}, {\n\t\t\tvalue: \"511113\",\n\t\t\ttext: \"金口河区\"\n\t\t}, {\n\t\t\tvalue: \"511123\",\n\t\t\ttext: \"犍为县\"\n\t\t}, {\n\t\t\tvalue: \"511124\",\n\t\t\ttext: \"井研县\"\n\t\t}, {\n\t\t\tvalue: \"511126\",\n\t\t\ttext: \"夹江县\"\n\t\t}, {\n\t\t\tvalue: \"511129\",\n\t\t\ttext: \"沐川县\"\n\t\t}, {\n\t\t\tvalue: \"511132\",\n\t\t\ttext: \"峨边彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"511133\",\n\t\t\ttext: \"马边彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"511181\",\n\t\t\ttext: \"峨眉山市\"\n\t\t}, {\n\t\t\tvalue: \"511182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511300\",\n\t\ttext: \"南充市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511302\",\n\t\t\ttext: \"顺庆区\"\n\t\t}, {\n\t\t\tvalue: \"511303\",\n\t\t\ttext: \"高坪区\"\n\t\t}, {\n\t\t\tvalue: \"511304\",\n\t\t\ttext: \"嘉陵区\"\n\t\t}, {\n\t\t\tvalue: \"511321\",\n\t\t\ttext: \"南部县\"\n\t\t}, {\n\t\t\tvalue: \"511322\",\n\t\t\ttext: \"营山县\"\n\t\t}, {\n\t\t\tvalue: \"511323\",\n\t\t\ttext: \"蓬安县\"\n\t\t}, {\n\t\t\tvalue: \"511324\",\n\t\t\ttext: \"仪陇县\"\n\t\t}, {\n\t\t\tvalue: \"511325\",\n\t\t\ttext: \"西充县\"\n\t\t}, {\n\t\t\tvalue: \"511381\",\n\t\t\ttext: \"阆中市\"\n\t\t}, {\n\t\t\tvalue: \"511382\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511400\",\n\t\ttext: \"眉山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511402\",\n\t\t\ttext: \"东坡区\"\n\t\t}, {\n\t\t\tvalue: \"511421\",\n\t\t\ttext: \"仁寿县\"\n\t\t}, {\n\t\t\tvalue: \"511422\",\n\t\t\ttext: \"彭山县\"\n\t\t}, {\n\t\t\tvalue: \"511423\",\n\t\t\ttext: \"洪雅县\"\n\t\t}, {\n\t\t\tvalue: \"511424\",\n\t\t\ttext: \"丹棱县\"\n\t\t}, {\n\t\t\tvalue: \"511425\",\n\t\t\ttext: \"青神县\"\n\t\t}, {\n\t\t\tvalue: \"511426\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511500\",\n\t\ttext: \"宜宾市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511502\",\n\t\t\ttext: \"翠屏区\"\n\t\t}, {\n\t\t\tvalue: \"511521\",\n\t\t\ttext: \"宜宾县\"\n\t\t}, {\n\t\t\tvalue: \"511522\",\n\t\t\ttext: \"南溪县\"\n\t\t}, {\n\t\t\tvalue: \"511523\",\n\t\t\ttext: \"江安县\"\n\t\t}, {\n\t\t\tvalue: \"511524\",\n\t\t\ttext: \"长宁县\"\n\t\t}, {\n\t\t\tvalue: \"511525\",\n\t\t\ttext: \"高县\"\n\t\t}, {\n\t\t\tvalue: \"511526\",\n\t\t\ttext: \"珙县\"\n\t\t}, {\n\t\t\tvalue: \"511527\",\n\t\t\ttext: \"筠连县\"\n\t\t}, {\n\t\t\tvalue: \"511528\",\n\t\t\ttext: \"兴文县\"\n\t\t}, {\n\t\t\tvalue: \"511529\",\n\t\t\ttext: \"屏山县\"\n\t\t}, {\n\t\t\tvalue: \"511530\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511600\",\n\t\ttext: \"广安市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511602\",\n\t\t\ttext: \"广安区\"\n\t\t}, {\n\t\t\tvalue: \"511621\",\n\t\t\ttext: \"岳池县\"\n\t\t}, {\n\t\t\tvalue: \"511622\",\n\t\t\ttext: \"武胜县\"\n\t\t}, {\n\t\t\tvalue: \"511623\",\n\t\t\ttext: \"邻水县\"\n\t\t}, {\n\t\t\tvalue: \"511681\",\n\t\t\ttext: \"华蓥市\"\n\t\t}, {\n\t\t\tvalue: \"511682\",\n\t\t\ttext: \"市辖区\"\n\t\t}, {\n\t\t\tvalue: \"511683\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511700\",\n\t\ttext: \"达州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511702\",\n\t\t\ttext: \"通川区\"\n\t\t}, {\n\t\t\tvalue: \"511721\",\n\t\t\ttext: \"达县\"\n\t\t}, {\n\t\t\tvalue: \"511722\",\n\t\t\ttext: \"宣汉县\"\n\t\t}, {\n\t\t\tvalue: \"511723\",\n\t\t\ttext: \"开江县\"\n\t\t}, {\n\t\t\tvalue: \"511724\",\n\t\t\ttext: \"大竹县\"\n\t\t}, {\n\t\t\tvalue: \"511725\",\n\t\t\ttext: \"渠县\"\n\t\t}, {\n\t\t\tvalue: \"511781\",\n\t\t\ttext: \"万源市\"\n\t\t}, {\n\t\t\tvalue: \"511782\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511800\",\n\t\ttext: \"雅安市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511802\",\n\t\t\ttext: \"雨城区\"\n\t\t}, {\n\t\t\tvalue: \"511821\",\n\t\t\ttext: \"名山县\"\n\t\t}, {\n\t\t\tvalue: \"511822\",\n\t\t\ttext: \"荥经县\"\n\t\t}, {\n\t\t\tvalue: \"511823\",\n\t\t\ttext: \"汉源县\"\n\t\t}, {\n\t\t\tvalue: \"511824\",\n\t\t\ttext: \"石棉县\"\n\t\t}, {\n\t\t\tvalue: \"511825\",\n\t\t\ttext: \"天全县\"\n\t\t}, {\n\t\t\tvalue: \"511826\",\n\t\t\ttext: \"芦山县\"\n\t\t}, {\n\t\t\tvalue: \"511827\",\n\t\t\ttext: \"宝兴县\"\n\t\t}, {\n\t\t\tvalue: \"511828\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"511900\",\n\t\ttext: \"巴中市\",\n\t\tchildren: [{\n\t\t\tvalue: \"511902\",\n\t\t\ttext: \"巴州区\"\n\t\t}, {\n\t\t\tvalue: \"511921\",\n\t\t\ttext: \"通江县\"\n\t\t}, {\n\t\t\tvalue: \"511922\",\n\t\t\ttext: \"南江县\"\n\t\t}, {\n\t\t\tvalue: \"511923\",\n\t\t\ttext: \"平昌县\"\n\t\t}, {\n\t\t\tvalue: \"511924\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"512000\",\n\t\ttext: \"资阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"512002\",\n\t\t\ttext: \"雁江区\"\n\t\t}, {\n\t\t\tvalue: \"512021\",\n\t\t\ttext: \"安岳县\"\n\t\t}, {\n\t\t\tvalue: \"512022\",\n\t\t\ttext: \"乐至县\"\n\t\t}, {\n\t\t\tvalue: \"512081\",\n\t\t\ttext: \"简阳市\"\n\t\t}, {\n\t\t\tvalue: \"512082\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"513200\",\n\t\ttext: \"阿坝藏族羌族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"513221\",\n\t\t\ttext: \"汶川县\"\n\t\t}, {\n\t\t\tvalue: \"513222\",\n\t\t\ttext: \"理县\"\n\t\t}, {\n\t\t\tvalue: \"513223\",\n\t\t\ttext: \"茂县\"\n\t\t}, {\n\t\t\tvalue: \"513224\",\n\t\t\ttext: \"松潘县\"\n\t\t}, {\n\t\t\tvalue: \"513225\",\n\t\t\ttext: \"九寨沟县\"\n\t\t}, {\n\t\t\tvalue: \"513226\",\n\t\t\ttext: \"金川县\"\n\t\t}, {\n\t\t\tvalue: \"513227\",\n\t\t\ttext: \"小金县\"\n\t\t}, {\n\t\t\tvalue: \"513228\",\n\t\t\ttext: \"黑水县\"\n\t\t}, {\n\t\t\tvalue: \"513229\",\n\t\t\ttext: \"马尔康县\"\n\t\t}, {\n\t\t\tvalue: \"513230\",\n\t\t\ttext: \"壤塘县\"\n\t\t}, {\n\t\t\tvalue: \"513231\",\n\t\t\ttext: \"阿坝县\"\n\t\t}, {\n\t\t\tvalue: \"513232\",\n\t\t\ttext: \"若尔盖县\"\n\t\t}, {\n\t\t\tvalue: \"513233\",\n\t\t\ttext: \"红原县\"\n\t\t}, {\n\t\t\tvalue: \"513234\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"513300\",\n\t\ttext: \"甘孜藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"513321\",\n\t\t\ttext: \"康定县\"\n\t\t}, {\n\t\t\tvalue: \"513322\",\n\t\t\ttext: \"泸定县\"\n\t\t}, {\n\t\t\tvalue: \"513323\",\n\t\t\ttext: \"丹巴县\"\n\t\t}, {\n\t\t\tvalue: \"513324\",\n\t\t\ttext: \"九龙县\"\n\t\t}, {\n\t\t\tvalue: \"513325\",\n\t\t\ttext: \"雅江县\"\n\t\t}, {\n\t\t\tvalue: \"513326\",\n\t\t\ttext: \"道孚县\"\n\t\t}, {\n\t\t\tvalue: \"513327\",\n\t\t\ttext: \"炉霍县\"\n\t\t}, {\n\t\t\tvalue: \"513328\",\n\t\t\ttext: \"甘孜县\"\n\t\t}, {\n\t\t\tvalue: \"513329\",\n\t\t\ttext: \"新龙县\"\n\t\t}, {\n\t\t\tvalue: \"513330\",\n\t\t\ttext: \"德格县\"\n\t\t}, {\n\t\t\tvalue: \"513331\",\n\t\t\ttext: \"白玉县\"\n\t\t}, {\n\t\t\tvalue: \"513332\",\n\t\t\ttext: \"石渠县\"\n\t\t}, {\n\t\t\tvalue: \"513333\",\n\t\t\ttext: \"色达县\"\n\t\t}, {\n\t\t\tvalue: \"513334\",\n\t\t\ttext: \"理塘县\"\n\t\t}, {\n\t\t\tvalue: \"513335\",\n\t\t\ttext: \"巴塘县\"\n\t\t}, {\n\t\t\tvalue: \"513336\",\n\t\t\ttext: \"乡城县\"\n\t\t}, {\n\t\t\tvalue: \"513337\",\n\t\t\ttext: \"稻城县\"\n\t\t}, {\n\t\t\tvalue: \"513338\",\n\t\t\ttext: \"得荣县\"\n\t\t}, {\n\t\t\tvalue: \"513339\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"513400\",\n\t\ttext: \"凉山彝族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"513401\",\n\t\t\ttext: \"西昌市\"\n\t\t}, {\n\t\t\tvalue: \"513422\",\n\t\t\ttext: \"木里藏族自治县\"\n\t\t}, {\n\t\t\tvalue: \"513423\",\n\t\t\ttext: \"盐源县\"\n\t\t}, {\n\t\t\tvalue: \"513424\",\n\t\t\ttext: \"德昌县\"\n\t\t}, {\n\t\t\tvalue: \"513425\",\n\t\t\ttext: \"会理县\"\n\t\t}, {\n\t\t\tvalue: \"513426\",\n\t\t\ttext: \"会东县\"\n\t\t}, {\n\t\t\tvalue: \"513427\",\n\t\t\ttext: \"宁南县\"\n\t\t}, {\n\t\t\tvalue: \"513428\",\n\t\t\ttext: \"普格县\"\n\t\t}, {\n\t\t\tvalue: \"513429\",\n\t\t\ttext: \"布拖县\"\n\t\t}, {\n\t\t\tvalue: \"513430\",\n\t\t\ttext: \"金阳县\"\n\t\t}, {\n\t\t\tvalue: \"513431\",\n\t\t\ttext: \"昭觉县\"\n\t\t}, {\n\t\t\tvalue: \"513432\",\n\t\t\ttext: \"喜德县\"\n\t\t}, {\n\t\t\tvalue: \"513433\",\n\t\t\ttext: \"冕宁县\"\n\t\t}, {\n\t\t\tvalue: \"513434\",\n\t\t\ttext: \"越西县\"\n\t\t}, {\n\t\t\tvalue: \"513435\",\n\t\t\ttext: \"甘洛县\"\n\t\t}, {\n\t\t\tvalue: \"513436\",\n\t\t\ttext: \"美姑县\"\n\t\t}, {\n\t\t\tvalue: \"513437\",\n\t\t\ttext: \"雷波县\"\n\t\t}, {\n\t\t\tvalue: \"513438\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '520000',\n\ttext: '贵州省',\n\tchildren: [{\n\t\tvalue: \"520100\",\n\t\ttext: \"贵阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"520102\",\n\t\t\ttext: \"南明区\"\n\t\t}, {\n\t\t\tvalue: \"520103\",\n\t\t\ttext: \"云岩区\"\n\t\t}, {\n\t\t\tvalue: \"520111\",\n\t\t\ttext: \"花溪区\"\n\t\t}, {\n\t\t\tvalue: \"520112\",\n\t\t\ttext: \"乌当区\"\n\t\t}, {\n\t\t\tvalue: \"520113\",\n\t\t\ttext: \"白云区\"\n\t\t}, {\n\t\t\tvalue: \"520114\",\n\t\t\ttext: \"小河区\"\n\t\t}, {\n\t\t\tvalue: \"520121\",\n\t\t\ttext: \"开阳县\"\n\t\t}, {\n\t\t\tvalue: \"520122\",\n\t\t\ttext: \"息烽县\"\n\t\t}, {\n\t\t\tvalue: \"520123\",\n\t\t\ttext: \"修文县\"\n\t\t}, {\n\t\t\tvalue: \"520151\",\n\t\t\ttext: \"金阳开发区\"\n\t\t}, {\n\t\t\tvalue: \"520181\",\n\t\t\ttext: \"清镇市\"\n\t\t}, {\n\t\t\tvalue: \"520182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"520200\",\n\t\ttext: \"六盘水市\",\n\t\tchildren: [{\n\t\t\tvalue: \"520201\",\n\t\t\ttext: \"钟山区\"\n\t\t}, {\n\t\t\tvalue: \"520203\",\n\t\t\ttext: \"六枝特区\"\n\t\t}, {\n\t\t\tvalue: \"520221\",\n\t\t\ttext: \"水城县\"\n\t\t}, {\n\t\t\tvalue: \"520222\",\n\t\t\ttext: \"盘县\"\n\t\t}, {\n\t\t\tvalue: \"520223\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"520300\",\n\t\ttext: \"遵义市\",\n\t\tchildren: [{\n\t\t\tvalue: \"520302\",\n\t\t\ttext: \"红花岗区\"\n\t\t}, {\n\t\t\tvalue: \"520303\",\n\t\t\ttext: \"汇川区\"\n\t\t}, {\n\t\t\tvalue: \"520321\",\n\t\t\ttext: \"遵义县\"\n\t\t}, {\n\t\t\tvalue: \"520322\",\n\t\t\ttext: \"桐梓县\"\n\t\t}, {\n\t\t\tvalue: \"520323\",\n\t\t\ttext: \"绥阳县\"\n\t\t}, {\n\t\t\tvalue: \"520324\",\n\t\t\ttext: \"正安县\"\n\t\t}, {\n\t\t\tvalue: \"520325\",\n\t\t\ttext: \"道真仡佬族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"520326\",\n\t\t\ttext: \"务川仡佬族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"520327\",\n\t\t\ttext: \"凤冈县\"\n\t\t}, {\n\t\t\tvalue: \"520328\",\n\t\t\ttext: \"湄潭县\"\n\t\t}, {\n\t\t\tvalue: \"520329\",\n\t\t\ttext: \"余庆县\"\n\t\t}, {\n\t\t\tvalue: \"520330\",\n\t\t\ttext: \"习水县\"\n\t\t}, {\n\t\t\tvalue: \"520381\",\n\t\t\ttext: \"赤水市\"\n\t\t}, {\n\t\t\tvalue: \"520382\",\n\t\t\ttext: \"仁怀市\"\n\t\t}, {\n\t\t\tvalue: \"520383\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"520400\",\n\t\ttext: \"安顺市\",\n\t\tchildren: [{\n\t\t\tvalue: \"520402\",\n\t\t\ttext: \"西秀区\"\n\t\t}, {\n\t\t\tvalue: \"520421\",\n\t\t\ttext: \"平坝县\"\n\t\t}, {\n\t\t\tvalue: \"520422\",\n\t\t\ttext: \"普定县\"\n\t\t}, {\n\t\t\tvalue: \"520423\",\n\t\t\ttext: \"镇宁布依族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"520424\",\n\t\t\ttext: \"关岭布依族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"520425\",\n\t\t\ttext: \"紫云苗族布依族自治县\"\n\t\t}, {\n\t\t\tvalue: \"520426\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"522200\",\n\t\ttext: \"铜仁地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"522201\",\n\t\t\ttext: \"铜仁市\"\n\t\t}, {\n\t\t\tvalue: \"522222\",\n\t\t\ttext: \"江口县\"\n\t\t}, {\n\t\t\tvalue: \"522223\",\n\t\t\ttext: \"玉屏侗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"522224\",\n\t\t\ttext: \"石阡县\"\n\t\t}, {\n\t\t\tvalue: \"522225\",\n\t\t\ttext: \"思南县\"\n\t\t}, {\n\t\t\tvalue: \"522226\",\n\t\t\ttext: \"印江土家族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"522227\",\n\t\t\ttext: \"德江县\"\n\t\t}, {\n\t\t\tvalue: \"522228\",\n\t\t\ttext: \"沿河土家族自治县\"\n\t\t}, {\n\t\t\tvalue: \"522229\",\n\t\t\ttext: \"松桃苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"522230\",\n\t\t\ttext: \"万山特区\"\n\t\t}, {\n\t\t\tvalue: \"522231\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"522300\",\n\t\ttext: \"黔西南布依族苗族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"522301\",\n\t\t\ttext: \"兴义市\"\n\t\t}, {\n\t\t\tvalue: \"522322\",\n\t\t\ttext: \"兴仁县\"\n\t\t}, {\n\t\t\tvalue: \"522323\",\n\t\t\ttext: \"普安县\"\n\t\t}, {\n\t\t\tvalue: \"522324\",\n\t\t\ttext: \"晴隆县\"\n\t\t}, {\n\t\t\tvalue: \"522325\",\n\t\t\ttext: \"贞丰县\"\n\t\t}, {\n\t\t\tvalue: \"522326\",\n\t\t\ttext: \"望谟县\"\n\t\t}, {\n\t\t\tvalue: \"522327\",\n\t\t\ttext: \"册亨县\"\n\t\t}, {\n\t\t\tvalue: \"522328\",\n\t\t\ttext: \"安龙县\"\n\t\t}, {\n\t\t\tvalue: \"522329\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"522400\",\n\t\ttext: \"毕节地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"522401\",\n\t\t\ttext: \"毕节市\"\n\t\t}, {\n\t\t\tvalue: \"522422\",\n\t\t\ttext: \"大方县\"\n\t\t}, {\n\t\t\tvalue: \"522423\",\n\t\t\ttext: \"黔西县\"\n\t\t}, {\n\t\t\tvalue: \"522424\",\n\t\t\ttext: \"金沙县\"\n\t\t}, {\n\t\t\tvalue: \"522425\",\n\t\t\ttext: \"织金县\"\n\t\t}, {\n\t\t\tvalue: \"522426\",\n\t\t\ttext: \"纳雍县\"\n\t\t}, {\n\t\t\tvalue: \"522427\",\n\t\t\ttext: \"威宁彝族回族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"522428\",\n\t\t\ttext: \"赫章县\"\n\t\t}, {\n\t\t\tvalue: \"522429\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"522600\",\n\t\ttext: \"黔东南苗族侗族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"522601\",\n\t\t\ttext: \"凯里市\"\n\t\t}, {\n\t\t\tvalue: \"522622\",\n\t\t\ttext: \"黄平县\"\n\t\t}, {\n\t\t\tvalue: \"522623\",\n\t\t\ttext: \"施秉县\"\n\t\t}, {\n\t\t\tvalue: \"522624\",\n\t\t\ttext: \"三穗县\"\n\t\t}, {\n\t\t\tvalue: \"522625\",\n\t\t\ttext: \"镇远县\"\n\t\t}, {\n\t\t\tvalue: \"522626\",\n\t\t\ttext: \"岑巩县\"\n\t\t}, {\n\t\t\tvalue: \"522627\",\n\t\t\ttext: \"天柱县\"\n\t\t}, {\n\t\t\tvalue: \"522628\",\n\t\t\ttext: \"锦屏县\"\n\t\t}, {\n\t\t\tvalue: \"522629\",\n\t\t\ttext: \"剑河县\"\n\t\t}, {\n\t\t\tvalue: \"522630\",\n\t\t\ttext: \"台江县\"\n\t\t}, {\n\t\t\tvalue: \"522631\",\n\t\t\ttext: \"黎平县\"\n\t\t}, {\n\t\t\tvalue: \"522632\",\n\t\t\ttext: \"榕江县\"\n\t\t}, {\n\t\t\tvalue: \"522633\",\n\t\t\ttext: \"从江县\"\n\t\t}, {\n\t\t\tvalue: \"522634\",\n\t\t\ttext: \"雷山县\"\n\t\t}, {\n\t\t\tvalue: \"522635\",\n\t\t\ttext: \"麻江县\"\n\t\t}, {\n\t\t\tvalue: \"522636\",\n\t\t\ttext: \"丹寨县\"\n\t\t}, {\n\t\t\tvalue: \"522637\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"522700\",\n\t\ttext: \"黔南布依族苗族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"522701\",\n\t\t\ttext: \"都匀市\"\n\t\t}, {\n\t\t\tvalue: \"522702\",\n\t\t\ttext: \"福泉市\"\n\t\t}, {\n\t\t\tvalue: \"522722\",\n\t\t\ttext: \"荔波县\"\n\t\t}, {\n\t\t\tvalue: \"522723\",\n\t\t\ttext: \"贵定县\"\n\t\t}, {\n\t\t\tvalue: \"522725\",\n\t\t\ttext: \"瓮安县\"\n\t\t}, {\n\t\t\tvalue: \"522726\",\n\t\t\ttext: \"独山县\"\n\t\t}, {\n\t\t\tvalue: \"522727\",\n\t\t\ttext: \"平塘县\"\n\t\t}, {\n\t\t\tvalue: \"522728\",\n\t\t\ttext: \"罗甸县\"\n\t\t}, {\n\t\t\tvalue: \"522729\",\n\t\t\ttext: \"长顺县\"\n\t\t}, {\n\t\t\tvalue: \"522730\",\n\t\t\ttext: \"龙里县\"\n\t\t}, {\n\t\t\tvalue: \"522731\",\n\t\t\ttext: \"惠水县\"\n\t\t}, {\n\t\t\tvalue: \"522732\",\n\t\t\ttext: \"三都水族自治县\"\n\t\t}, {\n\t\t\tvalue: \"522733\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '530000',\n\ttext: '云南省',\n\tchildren: [{\n\t\tvalue: \"530100\",\n\t\ttext: \"昆明市\",\n\t\tchildren: [{\n\t\t\tvalue: \"530102\",\n\t\t\ttext: \"五华区\"\n\t\t}, {\n\t\t\tvalue: \"530103\",\n\t\t\ttext: \"盘龙区\"\n\t\t}, {\n\t\t\tvalue: \"530111\",\n\t\t\ttext: \"官渡区\"\n\t\t}, {\n\t\t\tvalue: \"530112\",\n\t\t\ttext: \"西山区\"\n\t\t}, {\n\t\t\tvalue: \"530113\",\n\t\t\ttext: \"东川区\"\n\t\t}, {\n\t\t\tvalue: \"530121\",\n\t\t\ttext: \"呈贡县\"\n\t\t}, {\n\t\t\tvalue: \"530122\",\n\t\t\ttext: \"晋宁县\"\n\t\t}, {\n\t\t\tvalue: \"530124\",\n\t\t\ttext: \"富民县\"\n\t\t}, {\n\t\t\tvalue: \"530125\",\n\t\t\ttext: \"宜良县\"\n\t\t}, {\n\t\t\tvalue: \"530126\",\n\t\t\ttext: \"石林彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530127\",\n\t\t\ttext: \"嵩明县\"\n\t\t}, {\n\t\t\tvalue: \"530128\",\n\t\t\ttext: \"禄劝彝族苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530129\",\n\t\t\ttext: \"寻甸回族彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530181\",\n\t\t\ttext: \"安宁市\"\n\t\t}, {\n\t\t\tvalue: \"530182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"530300\",\n\t\ttext: \"曲靖市\",\n\t\tchildren: [{\n\t\t\tvalue: \"530302\",\n\t\t\ttext: \"麒麟区\"\n\t\t}, {\n\t\t\tvalue: \"530321\",\n\t\t\ttext: \"马龙县\"\n\t\t}, {\n\t\t\tvalue: \"530322\",\n\t\t\ttext: \"陆良县\"\n\t\t}, {\n\t\t\tvalue: \"530323\",\n\t\t\ttext: \"师宗县\"\n\t\t}, {\n\t\t\tvalue: \"530324\",\n\t\t\ttext: \"罗平县\"\n\t\t}, {\n\t\t\tvalue: \"530325\",\n\t\t\ttext: \"富源县\"\n\t\t}, {\n\t\t\tvalue: \"530326\",\n\t\t\ttext: \"会泽县\"\n\t\t}, {\n\t\t\tvalue: \"530328\",\n\t\t\ttext: \"沾益县\"\n\t\t}, {\n\t\t\tvalue: \"530381\",\n\t\t\ttext: \"宣威市\"\n\t\t}, {\n\t\t\tvalue: \"530382\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"530400\",\n\t\ttext: \"玉溪市\",\n\t\tchildren: [{\n\t\t\tvalue: \"530402\",\n\t\t\ttext: \"红塔区\"\n\t\t}, {\n\t\t\tvalue: \"530421\",\n\t\t\ttext: \"江川县\"\n\t\t}, {\n\t\t\tvalue: \"530422\",\n\t\t\ttext: \"澄江县\"\n\t\t}, {\n\t\t\tvalue: \"530423\",\n\t\t\ttext: \"通海县\"\n\t\t}, {\n\t\t\tvalue: \"530424\",\n\t\t\ttext: \"华宁县\"\n\t\t}, {\n\t\t\tvalue: \"530425\",\n\t\t\ttext: \"易门县\"\n\t\t}, {\n\t\t\tvalue: \"530426\",\n\t\t\ttext: \"峨山彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530427\",\n\t\t\ttext: \"新平彝族傣族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530428\",\n\t\t\ttext: \"元江哈尼族彝族傣族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530429\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"530500\",\n\t\ttext: \"保山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"530502\",\n\t\t\ttext: \"隆阳区\"\n\t\t}, {\n\t\t\tvalue: \"530521\",\n\t\t\ttext: \"施甸县\"\n\t\t}, {\n\t\t\tvalue: \"530522\",\n\t\t\ttext: \"腾冲县\"\n\t\t}, {\n\t\t\tvalue: \"530523\",\n\t\t\ttext: \"龙陵县\"\n\t\t}, {\n\t\t\tvalue: \"530524\",\n\t\t\ttext: \"昌宁县\"\n\t\t}, {\n\t\t\tvalue: \"530525\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"530600\",\n\t\ttext: \"昭通市\",\n\t\tchildren: [{\n\t\t\tvalue: \"530602\",\n\t\t\ttext: \"昭阳区\"\n\t\t}, {\n\t\t\tvalue: \"530621\",\n\t\t\ttext: \"鲁甸县\"\n\t\t}, {\n\t\t\tvalue: \"530622\",\n\t\t\ttext: \"巧家县\"\n\t\t}, {\n\t\t\tvalue: \"530623\",\n\t\t\ttext: \"盐津县\"\n\t\t}, {\n\t\t\tvalue: \"530624\",\n\t\t\ttext: \"大关县\"\n\t\t}, {\n\t\t\tvalue: \"530625\",\n\t\t\ttext: \"永善县\"\n\t\t}, {\n\t\t\tvalue: \"530626\",\n\t\t\ttext: \"绥江县\"\n\t\t}, {\n\t\t\tvalue: \"530627\",\n\t\t\ttext: \"镇雄县\"\n\t\t}, {\n\t\t\tvalue: \"530628\",\n\t\t\ttext: \"彝良县\"\n\t\t}, {\n\t\t\tvalue: \"530629\",\n\t\t\ttext: \"威信县\"\n\t\t}, {\n\t\t\tvalue: \"530630\",\n\t\t\ttext: \"水富县\"\n\t\t}, {\n\t\t\tvalue: \"530631\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"530700\",\n\t\ttext: \"丽江市\",\n\t\tchildren: [{\n\t\t\tvalue: \"530702\",\n\t\t\ttext: \"古城区\"\n\t\t}, {\n\t\t\tvalue: \"530721\",\n\t\t\ttext: \"玉龙纳西族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530722\",\n\t\t\ttext: \"永胜县\"\n\t\t}, {\n\t\t\tvalue: \"530723\",\n\t\t\ttext: \"华坪县\"\n\t\t}, {\n\t\t\tvalue: \"530724\",\n\t\t\ttext: \"宁蒗彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530725\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"530800\",\n\t\ttext: \"普洱市\",\n\t\tchildren: [{\n\t\t\tvalue: \"530802\",\n\t\t\ttext: \"思茅区\"\n\t\t}, {\n\t\t\tvalue: \"530821\",\n\t\t\ttext: \"宁洱哈尼族彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530822\",\n\t\t\ttext: \"墨江哈尼族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530823\",\n\t\t\ttext: \"景东彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530824\",\n\t\t\ttext: \"景谷傣族彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530825\",\n\t\t\ttext: \"镇沅彝族哈尼族拉祜族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530826\",\n\t\t\ttext: \"江城哈尼族彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530827\",\n\t\t\ttext: \"孟连傣族拉祜族佤族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530828\",\n\t\t\ttext: \"澜沧拉祜族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530829\",\n\t\t\ttext: \"西盟佤族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530830\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"530900\",\n\t\ttext: \"临沧市\",\n\t\tchildren: [{\n\t\t\tvalue: \"530902\",\n\t\t\ttext: \"临翔区\"\n\t\t}, {\n\t\t\tvalue: \"530921\",\n\t\t\ttext: \"凤庆县\"\n\t\t}, {\n\t\t\tvalue: \"530922\",\n\t\t\ttext: \"云县\"\n\t\t}, {\n\t\t\tvalue: \"530923\",\n\t\t\ttext: \"永德县\"\n\t\t}, {\n\t\t\tvalue: \"530924\",\n\t\t\ttext: \"镇康县\"\n\t\t}, {\n\t\t\tvalue: \"530925\",\n\t\t\ttext: \"双江拉祜族佤族布朗族傣族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530926\",\n\t\t\ttext: \"耿马傣族佤族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530927\",\n\t\t\ttext: \"沧源佤族自治县\"\n\t\t}, {\n\t\t\tvalue: \"530928\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"532300\",\n\t\ttext: \"楚雄彝族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"532301\",\n\t\t\ttext: \"楚雄市\"\n\t\t}, {\n\t\t\tvalue: \"532322\",\n\t\t\ttext: \"双柏县\"\n\t\t}, {\n\t\t\tvalue: \"532323\",\n\t\t\ttext: \"牟定县\"\n\t\t}, {\n\t\t\tvalue: \"532324\",\n\t\t\ttext: \"南华县\"\n\t\t}, {\n\t\t\tvalue: \"532325\",\n\t\t\ttext: \"姚安县\"\n\t\t}, {\n\t\t\tvalue: \"532326\",\n\t\t\ttext: \"大姚县\"\n\t\t}, {\n\t\t\tvalue: \"532327\",\n\t\t\ttext: \"永仁县\"\n\t\t}, {\n\t\t\tvalue: \"532328\",\n\t\t\ttext: \"元谋县\"\n\t\t}, {\n\t\t\tvalue: \"532329\",\n\t\t\ttext: \"武定县\"\n\t\t}, {\n\t\t\tvalue: \"532331\",\n\t\t\ttext: \"禄丰县\"\n\t\t}, {\n\t\t\tvalue: \"532332\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"532500\",\n\t\ttext: \"红河哈尼族彝族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"532501\",\n\t\t\ttext: \"个旧市\"\n\t\t}, {\n\t\t\tvalue: \"532502\",\n\t\t\ttext: \"开远市\"\n\t\t}, {\n\t\t\tvalue: \"532522\",\n\t\t\ttext: \"蒙自县\"\n\t\t}, {\n\t\t\tvalue: \"532523\",\n\t\t\ttext: \"屏边苗族自治县\"\n\t\t}, {\n\t\t\tvalue: \"532524\",\n\t\t\ttext: \"建水县\"\n\t\t}, {\n\t\t\tvalue: \"532525\",\n\t\t\ttext: \"石屏县\"\n\t\t}, {\n\t\t\tvalue: \"532526\",\n\t\t\ttext: \"弥勒县\"\n\t\t}, {\n\t\t\tvalue: \"532527\",\n\t\t\ttext: \"泸西县\"\n\t\t}, {\n\t\t\tvalue: \"532528\",\n\t\t\ttext: \"元阳县\"\n\t\t}, {\n\t\t\tvalue: \"532529\",\n\t\t\ttext: \"红河县\"\n\t\t}, {\n\t\t\tvalue: \"532530\",\n\t\t\ttext: \"金平苗族瑶族傣族自治县\"\n\t\t}, {\n\t\t\tvalue: \"532531\",\n\t\t\ttext: \"绿春县\"\n\t\t}, {\n\t\t\tvalue: \"532532\",\n\t\t\ttext: \"河口瑶族自治县\"\n\t\t}, {\n\t\t\tvalue: \"532533\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"532600\",\n\t\ttext: \"文山壮族苗族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"532621\",\n\t\t\ttext: \"文山县\"\n\t\t}, {\n\t\t\tvalue: \"532622\",\n\t\t\ttext: \"砚山县\"\n\t\t}, {\n\t\t\tvalue: \"532623\",\n\t\t\ttext: \"西畴县\"\n\t\t}, {\n\t\t\tvalue: \"532624\",\n\t\t\ttext: \"麻栗坡县\"\n\t\t}, {\n\t\t\tvalue: \"532625\",\n\t\t\ttext: \"马关县\"\n\t\t}, {\n\t\t\tvalue: \"532626\",\n\t\t\ttext: \"丘北县\"\n\t\t}, {\n\t\t\tvalue: \"532627\",\n\t\t\ttext: \"广南县\"\n\t\t}, {\n\t\t\tvalue: \"532628\",\n\t\t\ttext: \"富宁县\"\n\t\t}, {\n\t\t\tvalue: \"532629\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"532800\",\n\t\ttext: \"西双版纳傣族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"532801\",\n\t\t\ttext: \"景洪市\"\n\t\t}, {\n\t\t\tvalue: \"532822\",\n\t\t\ttext: \"勐海县\"\n\t\t}, {\n\t\t\tvalue: \"532823\",\n\t\t\ttext: \"勐腊县\"\n\t\t}, {\n\t\t\tvalue: \"532824\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"532900\",\n\t\ttext: \"大理白族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"532901\",\n\t\t\ttext: \"大理市\"\n\t\t}, {\n\t\t\tvalue: \"532922\",\n\t\t\ttext: \"漾濞彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"532923\",\n\t\t\ttext: \"祥云县\"\n\t\t}, {\n\t\t\tvalue: \"532924\",\n\t\t\ttext: \"宾川县\"\n\t\t}, {\n\t\t\tvalue: \"532925\",\n\t\t\ttext: \"弥渡县\"\n\t\t}, {\n\t\t\tvalue: \"532926\",\n\t\t\ttext: \"南涧彝族自治县\"\n\t\t}, {\n\t\t\tvalue: \"532927\",\n\t\t\ttext: \"巍山彝族回族自治县\"\n\t\t}, {\n\t\t\tvalue: \"532928\",\n\t\t\ttext: \"永平县\"\n\t\t}, {\n\t\t\tvalue: \"532929\",\n\t\t\ttext: \"云龙县\"\n\t\t}, {\n\t\t\tvalue: \"532930\",\n\t\t\ttext: \"洱源县\"\n\t\t}, {\n\t\t\tvalue: \"532931\",\n\t\t\ttext: \"剑川县\"\n\t\t}, {\n\t\t\tvalue: \"532932\",\n\t\t\ttext: \"鹤庆县\"\n\t\t}, {\n\t\t\tvalue: \"532933\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"533100\",\n\t\ttext: \"德宏傣族景颇族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"533102\",\n\t\t\ttext: \"瑞丽市\"\n\t\t}, {\n\t\t\tvalue: \"533103\",\n\t\t\ttext: \"潞西市\"\n\t\t}, {\n\t\t\tvalue: \"533122\",\n\t\t\ttext: \"梁河县\"\n\t\t}, {\n\t\t\tvalue: \"533123\",\n\t\t\ttext: \"盈江县\"\n\t\t}, {\n\t\t\tvalue: \"533124\",\n\t\t\ttext: \"陇川县\"\n\t\t}, {\n\t\t\tvalue: \"533125\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"533300\",\n\t\ttext: \"怒江傈僳族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"533321\",\n\t\t\ttext: \"泸水县\"\n\t\t}, {\n\t\t\tvalue: \"533323\",\n\t\t\ttext: \"福贡县\"\n\t\t}, {\n\t\t\tvalue: \"533324\",\n\t\t\ttext: \"贡山独龙族怒族自治县\"\n\t\t}, {\n\t\t\tvalue: \"533325\",\n\t\t\ttext: \"兰坪白族普米族自治县\"\n\t\t}, {\n\t\t\tvalue: \"533326\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"533400\",\n\t\ttext: \"迪庆藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"533421\",\n\t\t\ttext: \"香格里拉县\"\n\t\t}, {\n\t\t\tvalue: \"533422\",\n\t\t\ttext: \"德钦县\"\n\t\t}, {\n\t\t\tvalue: \"533423\",\n\t\t\ttext: \"维西傈僳族自治县\"\n\t\t}, {\n\t\t\tvalue: \"533424\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '540000',\n\ttext: '西藏',\n\tchildren: [{\n\t\tvalue: \"540100\",\n\t\ttext: \"拉萨市\",\n\t\tchildren: [{\n\t\t\tvalue: \"540102\",\n\t\t\ttext: \"城关区\"\n\t\t}, {\n\t\t\tvalue: \"540121\",\n\t\t\ttext: \"林周县\"\n\t\t}, {\n\t\t\tvalue: \"540122\",\n\t\t\ttext: \"当雄县\"\n\t\t}, {\n\t\t\tvalue: \"540123\",\n\t\t\ttext: \"尼木县\"\n\t\t}, {\n\t\t\tvalue: \"540124\",\n\t\t\ttext: \"曲水县\"\n\t\t}, {\n\t\t\tvalue: \"540125\",\n\t\t\ttext: \"堆龙德庆县\"\n\t\t}, {\n\t\t\tvalue: \"540126\",\n\t\t\ttext: \"达孜县\"\n\t\t}, {\n\t\t\tvalue: \"540127\",\n\t\t\ttext: \"墨竹工卡县\"\n\t\t}, {\n\t\t\tvalue: \"540128\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"542100\",\n\t\ttext: \"昌都地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"542121\",\n\t\t\ttext: \"昌都县\"\n\t\t}, {\n\t\t\tvalue: \"542122\",\n\t\t\ttext: \"江达县\"\n\t\t}, {\n\t\t\tvalue: \"542123\",\n\t\t\ttext: \"贡觉县\"\n\t\t}, {\n\t\t\tvalue: \"542124\",\n\t\t\ttext: \"类乌齐县\"\n\t\t}, {\n\t\t\tvalue: \"542125\",\n\t\t\ttext: \"丁青县\"\n\t\t}, {\n\t\t\tvalue: \"542126\",\n\t\t\ttext: \"察雅县\"\n\t\t}, {\n\t\t\tvalue: \"542127\",\n\t\t\ttext: \"八宿县\"\n\t\t}, {\n\t\t\tvalue: \"542128\",\n\t\t\ttext: \"左贡县\"\n\t\t}, {\n\t\t\tvalue: \"542129\",\n\t\t\ttext: \"芒康县\"\n\t\t}, {\n\t\t\tvalue: \"542132\",\n\t\t\ttext: \"洛隆县\"\n\t\t}, {\n\t\t\tvalue: \"542133\",\n\t\t\ttext: \"边坝县\"\n\t\t}, {\n\t\t\tvalue: \"542134\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"542200\",\n\t\ttext: \"山南地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"542221\",\n\t\t\ttext: \"乃东县\"\n\t\t}, {\n\t\t\tvalue: \"542222\",\n\t\t\ttext: \"扎囊县\"\n\t\t}, {\n\t\t\tvalue: \"542223\",\n\t\t\ttext: \"贡嘎县\"\n\t\t}, {\n\t\t\tvalue: \"542224\",\n\t\t\ttext: \"桑日县\"\n\t\t}, {\n\t\t\tvalue: \"542225\",\n\t\t\ttext: \"琼结县\"\n\t\t}, {\n\t\t\tvalue: \"542226\",\n\t\t\ttext: \"曲松县\"\n\t\t}, {\n\t\t\tvalue: \"542227\",\n\t\t\ttext: \"措美县\"\n\t\t}, {\n\t\t\tvalue: \"542228\",\n\t\t\ttext: \"洛扎县\"\n\t\t}, {\n\t\t\tvalue: \"542229\",\n\t\t\ttext: \"加查县\"\n\t\t}, {\n\t\t\tvalue: \"542231\",\n\t\t\ttext: \"隆子县\"\n\t\t}, {\n\t\t\tvalue: \"542232\",\n\t\t\ttext: \"错那县\"\n\t\t}, {\n\t\t\tvalue: \"542233\",\n\t\t\ttext: \"浪卡子县\"\n\t\t}, {\n\t\t\tvalue: \"542234\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"542300\",\n\t\ttext: \"日喀则地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"542301\",\n\t\t\ttext: \"日喀则市\"\n\t\t}, {\n\t\t\tvalue: \"542322\",\n\t\t\ttext: \"南木林县\"\n\t\t}, {\n\t\t\tvalue: \"542323\",\n\t\t\ttext: \"江孜县\"\n\t\t}, {\n\t\t\tvalue: \"542324\",\n\t\t\ttext: \"定日县\"\n\t\t}, {\n\t\t\tvalue: \"542325\",\n\t\t\ttext: \"萨迦县\"\n\t\t}, {\n\t\t\tvalue: \"542326\",\n\t\t\ttext: \"拉孜县\"\n\t\t}, {\n\t\t\tvalue: \"542327\",\n\t\t\ttext: \"昂仁县\"\n\t\t}, {\n\t\t\tvalue: \"542328\",\n\t\t\ttext: \"谢通门县\"\n\t\t}, {\n\t\t\tvalue: \"542329\",\n\t\t\ttext: \"白朗县\"\n\t\t}, {\n\t\t\tvalue: \"542330\",\n\t\t\ttext: \"仁布县\"\n\t\t}, {\n\t\t\tvalue: \"542331\",\n\t\t\ttext: \"康马县\"\n\t\t}, {\n\t\t\tvalue: \"542332\",\n\t\t\ttext: \"定结县\"\n\t\t}, {\n\t\t\tvalue: \"542333\",\n\t\t\ttext: \"仲巴县\"\n\t\t}, {\n\t\t\tvalue: \"542334\",\n\t\t\ttext: \"亚东县\"\n\t\t}, {\n\t\t\tvalue: \"542335\",\n\t\t\ttext: \"吉隆县\"\n\t\t}, {\n\t\t\tvalue: \"542336\",\n\t\t\ttext: \"聂拉木县\"\n\t\t}, {\n\t\t\tvalue: \"542337\",\n\t\t\ttext: \"萨嘎县\"\n\t\t}, {\n\t\t\tvalue: \"542338\",\n\t\t\ttext: \"岗巴县\"\n\t\t}, {\n\t\t\tvalue: \"542339\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"542400\",\n\t\ttext: \"那曲地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"542421\",\n\t\t\ttext: \"那曲县\"\n\t\t}, {\n\t\t\tvalue: \"542422\",\n\t\t\ttext: \"嘉黎县\"\n\t\t}, {\n\t\t\tvalue: \"542423\",\n\t\t\ttext: \"比如县\"\n\t\t}, {\n\t\t\tvalue: \"542424\",\n\t\t\ttext: \"聂荣县\"\n\t\t}, {\n\t\t\tvalue: \"542425\",\n\t\t\ttext: \"安多县\"\n\t\t}, {\n\t\t\tvalue: \"542426\",\n\t\t\ttext: \"申扎县\"\n\t\t}, {\n\t\t\tvalue: \"542427\",\n\t\t\ttext: \"索县\"\n\t\t}, {\n\t\t\tvalue: \"542428\",\n\t\t\ttext: \"班戈县\"\n\t\t}, {\n\t\t\tvalue: \"542429\",\n\t\t\ttext: \"巴青县\"\n\t\t}, {\n\t\t\tvalue: \"542430\",\n\t\t\ttext: \"尼玛县\"\n\t\t}, {\n\t\t\tvalue: \"542431\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"542500\",\n\t\ttext: \"阿里地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"542521\",\n\t\t\ttext: \"普兰县\"\n\t\t}, {\n\t\t\tvalue: \"542522\",\n\t\t\ttext: \"札达县\"\n\t\t}, {\n\t\t\tvalue: \"542523\",\n\t\t\ttext: \"噶尔县\"\n\t\t}, {\n\t\t\tvalue: \"542524\",\n\t\t\ttext: \"日土县\"\n\t\t}, {\n\t\t\tvalue: \"542525\",\n\t\t\ttext: \"革吉县\"\n\t\t}, {\n\t\t\tvalue: \"542526\",\n\t\t\ttext: \"改则县\"\n\t\t}, {\n\t\t\tvalue: \"542527\",\n\t\t\ttext: \"措勤县\"\n\t\t}, {\n\t\t\tvalue: \"542528\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"542600\",\n\t\ttext: \"林芝地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"542621\",\n\t\t\ttext: \"林芝县\"\n\t\t}, {\n\t\t\tvalue: \"542622\",\n\t\t\ttext: \"工布江达县\"\n\t\t}, {\n\t\t\tvalue: \"542623\",\n\t\t\ttext: \"米林县\"\n\t\t}, {\n\t\t\tvalue: \"542624\",\n\t\t\ttext: \"墨脱县\"\n\t\t}, {\n\t\t\tvalue: \"542625\",\n\t\t\ttext: \"波密县\"\n\t\t}, {\n\t\t\tvalue: \"542626\",\n\t\t\ttext: \"察隅县\"\n\t\t}, {\n\t\t\tvalue: \"542627\",\n\t\t\ttext: \"朗县\"\n\t\t}, {\n\t\t\tvalue: \"542628\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '610000',\n\ttext: '陕西省',\n\tchildren: [{\n\t\tvalue: \"610100\",\n\t\ttext: \"西安市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610102\",\n\t\t\ttext: \"新城区\"\n\t\t}, {\n\t\t\tvalue: \"610103\",\n\t\t\ttext: \"碑林区\"\n\t\t}, {\n\t\t\tvalue: \"610104\",\n\t\t\ttext: \"莲湖区\"\n\t\t}, {\n\t\t\tvalue: \"610111\",\n\t\t\ttext: \"灞桥区\"\n\t\t}, {\n\t\t\tvalue: \"610112\",\n\t\t\ttext: \"未央区\"\n\t\t}, {\n\t\t\tvalue: \"610113\",\n\t\t\ttext: \"雁塔区\"\n\t\t}, {\n\t\t\tvalue: \"610114\",\n\t\t\ttext: \"阎良区\"\n\t\t}, {\n\t\t\tvalue: \"610115\",\n\t\t\ttext: \"临潼区\"\n\t\t}, {\n\t\t\tvalue: \"610116\",\n\t\t\ttext: \"长安区\"\n\t\t}, {\n\t\t\tvalue: \"610122\",\n\t\t\ttext: \"蓝田县\"\n\t\t}, {\n\t\t\tvalue: \"610124\",\n\t\t\ttext: \"周至县\"\n\t\t}, {\n\t\t\tvalue: \"610125\",\n\t\t\ttext: \"户县\"\n\t\t}, {\n\t\t\tvalue: \"610126\",\n\t\t\ttext: \"高陵县\"\n\t\t}, {\n\t\t\tvalue: \"610127\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"610200\",\n\t\ttext: \"铜川市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610202\",\n\t\t\ttext: \"王益区\"\n\t\t}, {\n\t\t\tvalue: \"610203\",\n\t\t\ttext: \"印台区\"\n\t\t}, {\n\t\t\tvalue: \"610204\",\n\t\t\ttext: \"耀州区\"\n\t\t}, {\n\t\t\tvalue: \"610222\",\n\t\t\ttext: \"宜君县\"\n\t\t}, {\n\t\t\tvalue: \"610223\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"610300\",\n\t\ttext: \"宝鸡市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610302\",\n\t\t\ttext: \"渭滨区\"\n\t\t}, {\n\t\t\tvalue: \"610303\",\n\t\t\ttext: \"金台区\"\n\t\t}, {\n\t\t\tvalue: \"610304\",\n\t\t\ttext: \"陈仓区\"\n\t\t}, {\n\t\t\tvalue: \"610322\",\n\t\t\ttext: \"凤翔县\"\n\t\t}, {\n\t\t\tvalue: \"610323\",\n\t\t\ttext: \"岐山县\"\n\t\t}, {\n\t\t\tvalue: \"610324\",\n\t\t\ttext: \"扶风县\"\n\t\t}, {\n\t\t\tvalue: \"610326\",\n\t\t\ttext: \"眉县\"\n\t\t}, {\n\t\t\tvalue: \"610327\",\n\t\t\ttext: \"陇县\"\n\t\t}, {\n\t\t\tvalue: \"610328\",\n\t\t\ttext: \"千阳县\"\n\t\t}, {\n\t\t\tvalue: \"610329\",\n\t\t\ttext: \"麟游县\"\n\t\t}, {\n\t\t\tvalue: \"610330\",\n\t\t\ttext: \"凤县\"\n\t\t}, {\n\t\t\tvalue: \"610331\",\n\t\t\ttext: \"太白县\"\n\t\t}, {\n\t\t\tvalue: \"610332\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"610400\",\n\t\ttext: \"咸阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610402\",\n\t\t\ttext: \"秦都区\"\n\t\t}, {\n\t\t\tvalue: \"610403\",\n\t\t\ttext: \"杨陵区\"\n\t\t}, {\n\t\t\tvalue: \"610404\",\n\t\t\ttext: \"渭城区\"\n\t\t}, {\n\t\t\tvalue: \"610422\",\n\t\t\ttext: \"三原县\"\n\t\t}, {\n\t\t\tvalue: \"610423\",\n\t\t\ttext: \"泾阳县\"\n\t\t}, {\n\t\t\tvalue: \"610424\",\n\t\t\ttext: \"乾县\"\n\t\t}, {\n\t\t\tvalue: \"610425\",\n\t\t\ttext: \"礼泉县\"\n\t\t}, {\n\t\t\tvalue: \"610426\",\n\t\t\ttext: \"永寿县\"\n\t\t}, {\n\t\t\tvalue: \"610427\",\n\t\t\ttext: \"彬县\"\n\t\t}, {\n\t\t\tvalue: \"610428\",\n\t\t\ttext: \"长武县\"\n\t\t}, {\n\t\t\tvalue: \"610429\",\n\t\t\ttext: \"旬邑县\"\n\t\t}, {\n\t\t\tvalue: \"610430\",\n\t\t\ttext: \"淳化县\"\n\t\t}, {\n\t\t\tvalue: \"610431\",\n\t\t\ttext: \"武功县\"\n\t\t}, {\n\t\t\tvalue: \"610481\",\n\t\t\ttext: \"兴平市\"\n\t\t}, {\n\t\t\tvalue: \"610482\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"610500\",\n\t\ttext: \"渭南市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610502\",\n\t\t\ttext: \"临渭区\"\n\t\t}, {\n\t\t\tvalue: \"610521\",\n\t\t\ttext: \"华县\"\n\t\t}, {\n\t\t\tvalue: \"610522\",\n\t\t\ttext: \"潼关县\"\n\t\t}, {\n\t\t\tvalue: \"610523\",\n\t\t\ttext: \"大荔县\"\n\t\t}, {\n\t\t\tvalue: \"610524\",\n\t\t\ttext: \"合阳县\"\n\t\t}, {\n\t\t\tvalue: \"610525\",\n\t\t\ttext: \"澄城县\"\n\t\t}, {\n\t\t\tvalue: \"610526\",\n\t\t\ttext: \"蒲城县\"\n\t\t}, {\n\t\t\tvalue: \"610527\",\n\t\t\ttext: \"白水县\"\n\t\t}, {\n\t\t\tvalue: \"610528\",\n\t\t\ttext: \"富平县\"\n\t\t}, {\n\t\t\tvalue: \"610581\",\n\t\t\ttext: \"韩城市\"\n\t\t}, {\n\t\t\tvalue: \"610582\",\n\t\t\ttext: \"华阴市\"\n\t\t}, {\n\t\t\tvalue: \"610583\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"610600\",\n\t\ttext: \"延安市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610602\",\n\t\t\ttext: \"宝塔区\"\n\t\t}, {\n\t\t\tvalue: \"610621\",\n\t\t\ttext: \"延长县\"\n\t\t}, {\n\t\t\tvalue: \"610622\",\n\t\t\ttext: \"延川县\"\n\t\t}, {\n\t\t\tvalue: \"610623\",\n\t\t\ttext: \"子长县\"\n\t\t}, {\n\t\t\tvalue: \"610624\",\n\t\t\ttext: \"安塞县\"\n\t\t}, {\n\t\t\tvalue: \"610625\",\n\t\t\ttext: \"志丹县\"\n\t\t}, {\n\t\t\tvalue: \"610626\",\n\t\t\ttext: \"吴起县\"\n\t\t}, {\n\t\t\tvalue: \"610627\",\n\t\t\ttext: \"甘泉县\"\n\t\t}, {\n\t\t\tvalue: \"610628\",\n\t\t\ttext: \"富县\"\n\t\t}, {\n\t\t\tvalue: \"610629\",\n\t\t\ttext: \"洛川县\"\n\t\t}, {\n\t\t\tvalue: \"610630\",\n\t\t\ttext: \"宜川县\"\n\t\t}, {\n\t\t\tvalue: \"610631\",\n\t\t\ttext: \"黄龙县\"\n\t\t}, {\n\t\t\tvalue: \"610632\",\n\t\t\ttext: \"黄陵县\"\n\t\t}, {\n\t\t\tvalue: \"610633\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"610700\",\n\t\ttext: \"汉中市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610702\",\n\t\t\ttext: \"汉台区\"\n\t\t}, {\n\t\t\tvalue: \"610721\",\n\t\t\ttext: \"南郑县\"\n\t\t}, {\n\t\t\tvalue: \"610722\",\n\t\t\ttext: \"城固县\"\n\t\t}, {\n\t\t\tvalue: \"610723\",\n\t\t\ttext: \"洋县\"\n\t\t}, {\n\t\t\tvalue: \"610724\",\n\t\t\ttext: \"西乡县\"\n\t\t}, {\n\t\t\tvalue: \"610725\",\n\t\t\ttext: \"勉县\"\n\t\t}, {\n\t\t\tvalue: \"610726\",\n\t\t\ttext: \"宁强县\"\n\t\t}, {\n\t\t\tvalue: \"610727\",\n\t\t\ttext: \"略阳县\"\n\t\t}, {\n\t\t\tvalue: \"610728\",\n\t\t\ttext: \"镇巴县\"\n\t\t}, {\n\t\t\tvalue: \"610729\",\n\t\t\ttext: \"留坝县\"\n\t\t}, {\n\t\t\tvalue: \"610730\",\n\t\t\ttext: \"佛坪县\"\n\t\t}, {\n\t\t\tvalue: \"610731\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"610800\",\n\t\ttext: \"榆林市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610802\",\n\t\t\ttext: \"榆阳区\"\n\t\t}, {\n\t\t\tvalue: \"610821\",\n\t\t\ttext: \"神木县\"\n\t\t}, {\n\t\t\tvalue: \"610822\",\n\t\t\ttext: \"府谷县\"\n\t\t}, {\n\t\t\tvalue: \"610823\",\n\t\t\ttext: \"横山县\"\n\t\t}, {\n\t\t\tvalue: \"610824\",\n\t\t\ttext: \"靖边县\"\n\t\t}, {\n\t\t\tvalue: \"610825\",\n\t\t\ttext: \"定边县\"\n\t\t}, {\n\t\t\tvalue: \"610826\",\n\t\t\ttext: \"绥德县\"\n\t\t}, {\n\t\t\tvalue: \"610827\",\n\t\t\ttext: \"米脂县\"\n\t\t}, {\n\t\t\tvalue: \"610828\",\n\t\t\ttext: \"佳县\"\n\t\t}, {\n\t\t\tvalue: \"610829\",\n\t\t\ttext: \"吴堡县\"\n\t\t}, {\n\t\t\tvalue: \"610830\",\n\t\t\ttext: \"清涧县\"\n\t\t}, {\n\t\t\tvalue: \"610831\",\n\t\t\ttext: \"子洲县\"\n\t\t}, {\n\t\t\tvalue: \"610832\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"610900\",\n\t\ttext: \"安康市\",\n\t\tchildren: [{\n\t\t\tvalue: \"610902\",\n\t\t\ttext: \"汉滨区\"\n\t\t}, {\n\t\t\tvalue: \"610921\",\n\t\t\ttext: \"汉阴县\"\n\t\t}, {\n\t\t\tvalue: \"610922\",\n\t\t\ttext: \"石泉县\"\n\t\t}, {\n\t\t\tvalue: \"610923\",\n\t\t\ttext: \"宁陕县\"\n\t\t}, {\n\t\t\tvalue: \"610924\",\n\t\t\ttext: \"紫阳县\"\n\t\t}, {\n\t\t\tvalue: \"610925\",\n\t\t\ttext: \"岚皋县\"\n\t\t}, {\n\t\t\tvalue: \"610926\",\n\t\t\ttext: \"平利县\"\n\t\t}, {\n\t\t\tvalue: \"610927\",\n\t\t\ttext: \"镇坪县\"\n\t\t}, {\n\t\t\tvalue: \"610928\",\n\t\t\ttext: \"旬阳县\"\n\t\t}, {\n\t\t\tvalue: \"610929\",\n\t\t\ttext: \"白河县\"\n\t\t}, {\n\t\t\tvalue: \"610930\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"611000\",\n\t\ttext: \"商洛市\",\n\t\tchildren: [{\n\t\t\tvalue: \"611002\",\n\t\t\ttext: \"商州区\"\n\t\t}, {\n\t\t\tvalue: \"611021\",\n\t\t\ttext: \"洛南县\"\n\t\t}, {\n\t\t\tvalue: \"611022\",\n\t\t\ttext: \"丹凤县\"\n\t\t}, {\n\t\t\tvalue: \"611023\",\n\t\t\ttext: \"商南县\"\n\t\t}, {\n\t\t\tvalue: \"611024\",\n\t\t\ttext: \"山阳县\"\n\t\t}, {\n\t\t\tvalue: \"611025\",\n\t\t\ttext: \"镇安县\"\n\t\t}, {\n\t\t\tvalue: \"611026\",\n\t\t\ttext: \"柞水县\"\n\t\t}, {\n\t\t\tvalue: \"611027\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '620000',\n\ttext: '甘肃省',\n\tchildren: [{\n\t\tvalue: \"620100\",\n\t\ttext: \"兰州市\",\n\t\tchildren: [{\n\t\t\tvalue: \"620102\",\n\t\t\ttext: \"城关区\"\n\t\t}, {\n\t\t\tvalue: \"620103\",\n\t\t\ttext: \"七里河区\"\n\t\t}, {\n\t\t\tvalue: \"620104\",\n\t\t\ttext: \"西固区\"\n\t\t}, {\n\t\t\tvalue: \"620105\",\n\t\t\ttext: \"安宁区\"\n\t\t}, {\n\t\t\tvalue: \"620111\",\n\t\t\ttext: \"红古区\"\n\t\t}, {\n\t\t\tvalue: \"620121\",\n\t\t\ttext: \"永登县\"\n\t\t}, {\n\t\t\tvalue: \"620122\",\n\t\t\ttext: \"皋兰县\"\n\t\t}, {\n\t\t\tvalue: \"620123\",\n\t\t\ttext: \"榆中县\"\n\t\t}, {\n\t\t\tvalue: \"620124\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"620200\",\n\t\ttext: \"嘉峪关市\",\n\t\tchildren: []\n\t}, {\n\t\tvalue: \"620300\",\n\t\ttext: \"金昌市\",\n\t\tchildren: [{\n\t\t\tvalue: \"620302\",\n\t\t\ttext: \"金川区\"\n\t\t}, {\n\t\t\tvalue: \"620321\",\n\t\t\ttext: \"永昌县\"\n\t\t}, {\n\t\t\tvalue: \"620322\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"620400\",\n\t\ttext: \"白银市\",\n\t\tchildren: [{\n\t\t\tvalue: \"620402\",\n\t\t\ttext: \"白银区\"\n\t\t}, {\n\t\t\tvalue: \"620403\",\n\t\t\ttext: \"平川区\"\n\t\t}, {\n\t\t\tvalue: \"620421\",\n\t\t\ttext: \"靖远县\"\n\t\t}, {\n\t\t\tvalue: \"620422\",\n\t\t\ttext: \"会宁县\"\n\t\t}, {\n\t\t\tvalue: \"620423\",\n\t\t\ttext: \"景泰县\"\n\t\t}, {\n\t\t\tvalue: \"620424\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"620500\",\n\t\ttext: \"天水市\",\n\t\tchildren: [{\n\t\t\tvalue: \"620502\",\n\t\t\ttext: \"秦州区\"\n\t\t}, {\n\t\t\tvalue: \"620503\",\n\t\t\ttext: \"麦积区\"\n\t\t}, {\n\t\t\tvalue: \"620521\",\n\t\t\ttext: \"清水县\"\n\t\t}, {\n\t\t\tvalue: \"620522\",\n\t\t\ttext: \"秦安县\"\n\t\t}, {\n\t\t\tvalue: \"620523\",\n\t\t\ttext: \"甘谷县\"\n\t\t}, {\n\t\t\tvalue: \"620524\",\n\t\t\ttext: \"武山县\"\n\t\t}, {\n\t\t\tvalue: \"620525\",\n\t\t\ttext: \"张家川回族自治县\"\n\t\t}, {\n\t\t\tvalue: \"620526\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"620600\",\n\t\ttext: \"武威市\",\n\t\tchildren: [{\n\t\t\tvalue: \"620602\",\n\t\t\ttext: \"凉州区\"\n\t\t}, {\n\t\t\tvalue: \"620621\",\n\t\t\ttext: \"民勤县\"\n\t\t}, {\n\t\t\tvalue: \"620622\",\n\t\t\ttext: \"古浪县\"\n\t\t}, {\n\t\t\tvalue: \"620623\",\n\t\t\ttext: \"天祝藏族自治县\"\n\t\t}, {\n\t\t\tvalue: \"620624\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"620700\",\n\t\ttext: \"张掖市\",\n\t\tchildren: [{\n\t\t\tvalue: \"620702\",\n\t\t\ttext: \"甘州区\"\n\t\t}, {\n\t\t\tvalue: \"620721\",\n\t\t\ttext: \"肃南裕固族自治县\"\n\t\t}, {\n\t\t\tvalue: \"620722\",\n\t\t\ttext: \"民乐县\"\n\t\t}, {\n\t\t\tvalue: \"620723\",\n\t\t\ttext: \"临泽县\"\n\t\t}, {\n\t\t\tvalue: \"620724\",\n\t\t\ttext: \"高台县\"\n\t\t}, {\n\t\t\tvalue: \"620725\",\n\t\t\ttext: \"山丹县\"\n\t\t}, {\n\t\t\tvalue: \"620726\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"620800\",\n\t\ttext: \"平凉市\",\n\t\tchildren: [{\n\t\t\tvalue: \"620802\",\n\t\t\ttext: \"崆峒区\"\n\t\t}, {\n\t\t\tvalue: \"620821\",\n\t\t\ttext: \"泾川县\"\n\t\t}, {\n\t\t\tvalue: \"620822\",\n\t\t\ttext: \"灵台县\"\n\t\t}, {\n\t\t\tvalue: \"620823\",\n\t\t\ttext: \"崇信县\"\n\t\t}, {\n\t\t\tvalue: \"620824\",\n\t\t\ttext: \"华亭县\"\n\t\t}, {\n\t\t\tvalue: \"620825\",\n\t\t\ttext: \"庄浪县\"\n\t\t}, {\n\t\t\tvalue: \"620826\",\n\t\t\ttext: \"静宁县\"\n\t\t}, {\n\t\t\tvalue: \"620827\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"620900\",\n\t\ttext: \"酒泉市\",\n\t\tchildren: [{\n\t\t\tvalue: \"620902\",\n\t\t\ttext: \"肃州区\"\n\t\t}, {\n\t\t\tvalue: \"620921\",\n\t\t\ttext: \"金塔县\"\n\t\t}, {\n\t\t\tvalue: \"620922\",\n\t\t\ttext: \"安西县\"\n\t\t}, {\n\t\t\tvalue: \"620923\",\n\t\t\ttext: \"肃北蒙古族自治县\"\n\t\t}, {\n\t\t\tvalue: \"620924\",\n\t\t\ttext: \"阿克塞哈萨克族自治县\"\n\t\t}, {\n\t\t\tvalue: \"620981\",\n\t\t\ttext: \"玉门市\"\n\t\t}, {\n\t\t\tvalue: \"620982\",\n\t\t\ttext: \"敦煌市\"\n\t\t}, {\n\t\t\tvalue: \"620983\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"621000\",\n\t\ttext: \"庆阳市\",\n\t\tchildren: [{\n\t\t\tvalue: \"621002\",\n\t\t\ttext: \"西峰区\"\n\t\t}, {\n\t\t\tvalue: \"621021\",\n\t\t\ttext: \"庆城县\"\n\t\t}, {\n\t\t\tvalue: \"621022\",\n\t\t\ttext: \"环县\"\n\t\t}, {\n\t\t\tvalue: \"621023\",\n\t\t\ttext: \"华池县\"\n\t\t}, {\n\t\t\tvalue: \"621024\",\n\t\t\ttext: \"合水县\"\n\t\t}, {\n\t\t\tvalue: \"621025\",\n\t\t\ttext: \"正宁县\"\n\t\t}, {\n\t\t\tvalue: \"621026\",\n\t\t\ttext: \"宁县\"\n\t\t}, {\n\t\t\tvalue: \"621027\",\n\t\t\ttext: \"镇原县\"\n\t\t}, {\n\t\t\tvalue: \"621028\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"621100\",\n\t\ttext: \"定西市\",\n\t\tchildren: [{\n\t\t\tvalue: \"621102\",\n\t\t\ttext: \"安定区\"\n\t\t}, {\n\t\t\tvalue: \"621121\",\n\t\t\ttext: \"通渭县\"\n\t\t}, {\n\t\t\tvalue: \"621122\",\n\t\t\ttext: \"陇西县\"\n\t\t}, {\n\t\t\tvalue: \"621123\",\n\t\t\ttext: \"渭源县\"\n\t\t}, {\n\t\t\tvalue: \"621124\",\n\t\t\ttext: \"临洮县\"\n\t\t}, {\n\t\t\tvalue: \"621125\",\n\t\t\ttext: \"漳县\"\n\t\t}, {\n\t\t\tvalue: \"621126\",\n\t\t\ttext: \"岷县\"\n\t\t}, {\n\t\t\tvalue: \"621127\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"621200\",\n\t\ttext: \"陇南市\",\n\t\tchildren: [{\n\t\t\tvalue: \"621202\",\n\t\t\ttext: \"武都区\"\n\t\t}, {\n\t\t\tvalue: \"621221\",\n\t\t\ttext: \"成县\"\n\t\t}, {\n\t\t\tvalue: \"621222\",\n\t\t\ttext: \"文县\"\n\t\t}, {\n\t\t\tvalue: \"621223\",\n\t\t\ttext: \"宕昌县\"\n\t\t}, {\n\t\t\tvalue: \"621224\",\n\t\t\ttext: \"康县\"\n\t\t}, {\n\t\t\tvalue: \"621225\",\n\t\t\ttext: \"西和县\"\n\t\t}, {\n\t\t\tvalue: \"621226\",\n\t\t\ttext: \"礼县\"\n\t\t}, {\n\t\t\tvalue: \"621227\",\n\t\t\ttext: \"徽县\"\n\t\t}, {\n\t\t\tvalue: \"621228\",\n\t\t\ttext: \"两当县\"\n\t\t}, {\n\t\t\tvalue: \"621229\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"622900\",\n\t\ttext: \"临夏回族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"622901\",\n\t\t\ttext: \"临夏市\"\n\t\t}, {\n\t\t\tvalue: \"622921\",\n\t\t\ttext: \"临夏县\"\n\t\t}, {\n\t\t\tvalue: \"622922\",\n\t\t\ttext: \"康乐县\"\n\t\t}, {\n\t\t\tvalue: \"622923\",\n\t\t\ttext: \"永靖县\"\n\t\t}, {\n\t\t\tvalue: \"622924\",\n\t\t\ttext: \"广河县\"\n\t\t}, {\n\t\t\tvalue: \"622925\",\n\t\t\ttext: \"和政县\"\n\t\t}, {\n\t\t\tvalue: \"622926\",\n\t\t\ttext: \"东乡族自治县\"\n\t\t}, {\n\t\t\tvalue: \"622927\",\n\t\t\ttext: \"积石山保安族东乡族撒拉族自治县\"\n\t\t}, {\n\t\t\tvalue: \"622928\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"623000\",\n\t\ttext: \"甘南藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"623001\",\n\t\t\ttext: \"合作市\"\n\t\t}, {\n\t\t\tvalue: \"623021\",\n\t\t\ttext: \"临潭县\"\n\t\t}, {\n\t\t\tvalue: \"623022\",\n\t\t\ttext: \"卓尼县\"\n\t\t}, {\n\t\t\tvalue: \"623023\",\n\t\t\ttext: \"舟曲县\"\n\t\t}, {\n\t\t\tvalue: \"623024\",\n\t\t\ttext: \"迭部县\"\n\t\t}, {\n\t\t\tvalue: \"623025\",\n\t\t\ttext: \"玛曲县\"\n\t\t}, {\n\t\t\tvalue: \"623026\",\n\t\t\ttext: \"碌曲县\"\n\t\t}, {\n\t\t\tvalue: \"623027\",\n\t\t\ttext: \"夏河县\"\n\t\t}, {\n\t\t\tvalue: \"623028\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '630000',\n\ttext: '青海省',\n\tchildren: [{\n\t\tvalue: \"630100\",\n\t\ttext: \"西宁市\",\n\t\tchildren: [{\n\t\t\tvalue: \"630102\",\n\t\t\ttext: \"城东区\"\n\t\t}, {\n\t\t\tvalue: \"630103\",\n\t\t\ttext: \"城中区\"\n\t\t}, {\n\t\t\tvalue: \"630104\",\n\t\t\ttext: \"城西区\"\n\t\t}, {\n\t\t\tvalue: \"630105\",\n\t\t\ttext: \"城北区\"\n\t\t}, {\n\t\t\tvalue: \"630121\",\n\t\t\ttext: \"大通回族土族自治县\"\n\t\t}, {\n\t\t\tvalue: \"630122\",\n\t\t\ttext: \"湟中县\"\n\t\t}, {\n\t\t\tvalue: \"630123\",\n\t\t\ttext: \"湟源县\"\n\t\t}, {\n\t\t\tvalue: \"630124\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"632100\",\n\t\ttext: \"海东地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"632121\",\n\t\t\ttext: \"平安县\"\n\t\t}, {\n\t\t\tvalue: \"632122\",\n\t\t\ttext: \"民和回族土族自治县\"\n\t\t}, {\n\t\t\tvalue: \"632123\",\n\t\t\ttext: \"乐都县\"\n\t\t}, {\n\t\t\tvalue: \"632126\",\n\t\t\ttext: \"互助土族自治县\"\n\t\t}, {\n\t\t\tvalue: \"632127\",\n\t\t\ttext: \"化隆回族自治县\"\n\t\t}, {\n\t\t\tvalue: \"632128\",\n\t\t\ttext: \"循化撒拉族自治县\"\n\t\t}, {\n\t\t\tvalue: \"632129\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"632200\",\n\t\ttext: \"海北藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"632221\",\n\t\t\ttext: \"门源回族自治县\"\n\t\t}, {\n\t\t\tvalue: \"632222\",\n\t\t\ttext: \"祁连县\"\n\t\t}, {\n\t\t\tvalue: \"632223\",\n\t\t\ttext: \"海晏县\"\n\t\t}, {\n\t\t\tvalue: \"632224\",\n\t\t\ttext: \"刚察县\"\n\t\t}, {\n\t\t\tvalue: \"632225\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"632300\",\n\t\ttext: \"黄南藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"632321\",\n\t\t\ttext: \"同仁县\"\n\t\t}, {\n\t\t\tvalue: \"632322\",\n\t\t\ttext: \"尖扎县\"\n\t\t}, {\n\t\t\tvalue: \"632323\",\n\t\t\ttext: \"泽库县\"\n\t\t}, {\n\t\t\tvalue: \"632324\",\n\t\t\ttext: \"河南蒙古族自治县\"\n\t\t}, {\n\t\t\tvalue: \"632325\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"632500\",\n\t\ttext: \"海南藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"632521\",\n\t\t\ttext: \"共和县\"\n\t\t}, {\n\t\t\tvalue: \"632522\",\n\t\t\ttext: \"同德县\"\n\t\t}, {\n\t\t\tvalue: \"632523\",\n\t\t\ttext: \"贵德县\"\n\t\t}, {\n\t\t\tvalue: \"632524\",\n\t\t\ttext: \"兴海县\"\n\t\t}, {\n\t\t\tvalue: \"632525\",\n\t\t\ttext: \"贵南县\"\n\t\t}, {\n\t\t\tvalue: \"632526\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"632600\",\n\t\ttext: \"果洛藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"632621\",\n\t\t\ttext: \"玛沁县\"\n\t\t}, {\n\t\t\tvalue: \"632622\",\n\t\t\ttext: \"班玛县\"\n\t\t}, {\n\t\t\tvalue: \"632623\",\n\t\t\ttext: \"甘德县\"\n\t\t}, {\n\t\t\tvalue: \"632624\",\n\t\t\ttext: \"达日县\"\n\t\t}, {\n\t\t\tvalue: \"632625\",\n\t\t\ttext: \"久治县\"\n\t\t}, {\n\t\t\tvalue: \"632626\",\n\t\t\ttext: \"玛多县\"\n\t\t}, {\n\t\t\tvalue: \"632627\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"632700\",\n\t\ttext: \"玉树藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"632721\",\n\t\t\ttext: \"玉树县\"\n\t\t}, {\n\t\t\tvalue: \"632722\",\n\t\t\ttext: \"杂多县\"\n\t\t}, {\n\t\t\tvalue: \"632723\",\n\t\t\ttext: \"称多县\"\n\t\t}, {\n\t\t\tvalue: \"632724\",\n\t\t\ttext: \"治多县\"\n\t\t}, {\n\t\t\tvalue: \"632725\",\n\t\t\ttext: \"囊谦县\"\n\t\t}, {\n\t\t\tvalue: \"632726\",\n\t\t\ttext: \"曲麻莱县\"\n\t\t}, {\n\t\t\tvalue: \"632727\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"632800\",\n\t\ttext: \"海西蒙古族藏族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"632801\",\n\t\t\ttext: \"格尔木市\"\n\t\t}, {\n\t\t\tvalue: \"632802\",\n\t\t\ttext: \"德令哈市\"\n\t\t}, {\n\t\t\tvalue: \"632821\",\n\t\t\ttext: \"乌兰县\"\n\t\t}, {\n\t\t\tvalue: \"632822\",\n\t\t\ttext: \"都兰县\"\n\t\t}, {\n\t\t\tvalue: \"632823\",\n\t\t\ttext: \"天峻县\"\n\t\t}, {\n\t\t\tvalue: \"632824\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '640000',\n\ttext: '宁夏',\n\tchildren: [{\n\t\tvalue: \"640100\",\n\t\ttext: \"银川市\",\n\t\tchildren: [{\n\t\t\tvalue: \"640104\",\n\t\t\ttext: \"兴庆区\"\n\t\t}, {\n\t\t\tvalue: \"640105\",\n\t\t\ttext: \"西夏区\"\n\t\t}, {\n\t\t\tvalue: \"640106\",\n\t\t\ttext: \"金凤区\"\n\t\t}, {\n\t\t\tvalue: \"640121\",\n\t\t\ttext: \"永宁县\"\n\t\t}, {\n\t\t\tvalue: \"640122\",\n\t\t\ttext: \"贺兰县\"\n\t\t}, {\n\t\t\tvalue: \"640181\",\n\t\t\ttext: \"灵武市\"\n\t\t}, {\n\t\t\tvalue: \"640182\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"640200\",\n\t\ttext: \"石嘴山市\",\n\t\tchildren: [{\n\t\t\tvalue: \"640202\",\n\t\t\ttext: \"大武口区\"\n\t\t}, {\n\t\t\tvalue: \"640205\",\n\t\t\ttext: \"惠农区\"\n\t\t}, {\n\t\t\tvalue: \"640221\",\n\t\t\ttext: \"平罗县\"\n\t\t}, {\n\t\t\tvalue: \"640222\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"640300\",\n\t\ttext: \"吴忠市\",\n\t\tchildren: [{\n\t\t\tvalue: \"640302\",\n\t\t\ttext: \"利通区\"\n\t\t}, {\n\t\t\tvalue: \"640303\",\n\t\t\ttext: \"红寺堡区\"\n\t\t}, {\n\t\t\tvalue: \"640323\",\n\t\t\ttext: \"盐池县\"\n\t\t}, {\n\t\t\tvalue: \"640324\",\n\t\t\ttext: \"同心县\"\n\t\t}, {\n\t\t\tvalue: \"640381\",\n\t\t\ttext: \"青铜峡市\"\n\t\t}, {\n\t\t\tvalue: \"640382\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"640400\",\n\t\ttext: \"固原市\",\n\t\tchildren: [{\n\t\t\tvalue: \"640402\",\n\t\t\ttext: \"原州区\"\n\t\t}, {\n\t\t\tvalue: \"640422\",\n\t\t\ttext: \"西吉县\"\n\t\t}, {\n\t\t\tvalue: \"640423\",\n\t\t\ttext: \"隆德县\"\n\t\t}, {\n\t\t\tvalue: \"640424\",\n\t\t\ttext: \"泾源县\"\n\t\t}, {\n\t\t\tvalue: \"640425\",\n\t\t\ttext: \"彭阳县\"\n\t\t}, {\n\t\t\tvalue: \"640426\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"640500\",\n\t\ttext: \"中卫市\",\n\t\tchildren: [{\n\t\t\tvalue: \"640502\",\n\t\t\ttext: \"沙坡头区\"\n\t\t}, {\n\t\t\tvalue: \"640521\",\n\t\t\ttext: \"中宁县\"\n\t\t}, {\n\t\t\tvalue: \"640522\",\n\t\t\ttext: \"海原县\"\n\t\t}, {\n\t\t\tvalue: \"640523\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '650000',\n\ttext: '新疆',\n\tchildren: [{\n\t\tvalue: \"650100\",\n\t\ttext: \"乌鲁木齐市\",\n\t\tchildren: [{\n\t\t\tvalue: \"650102\",\n\t\t\ttext: \"天山区\"\n\t\t}, {\n\t\t\tvalue: \"650103\",\n\t\t\ttext: \"沙依巴克区\"\n\t\t}, {\n\t\t\tvalue: \"650104\",\n\t\t\ttext: \"新市区\"\n\t\t}, {\n\t\t\tvalue: \"650105\",\n\t\t\ttext: \"水磨沟区\"\n\t\t}, {\n\t\t\tvalue: \"650106\",\n\t\t\ttext: \"头屯河区\"\n\t\t}, {\n\t\t\tvalue: \"650107\",\n\t\t\ttext: \"达坂城区\"\n\t\t}, {\n\t\t\tvalue: \"650108\",\n\t\t\ttext: \"东山区\"\n\t\t}, {\n\t\t\tvalue: \"650109\",\n\t\t\ttext: \"米东区\"\n\t\t}, {\n\t\t\tvalue: \"650121\",\n\t\t\ttext: \"乌鲁木齐县\"\n\t\t}, {\n\t\t\tvalue: \"650122\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"650200\",\n\t\ttext: \"克拉玛依市\",\n\t\tchildren: [{\n\t\t\tvalue: \"650202\",\n\t\t\ttext: \"独山子区\"\n\t\t}, {\n\t\t\tvalue: \"650203\",\n\t\t\ttext: \"克拉玛依区\"\n\t\t}, {\n\t\t\tvalue: \"650204\",\n\t\t\ttext: \"白碱滩区\"\n\t\t}, {\n\t\t\tvalue: \"650205\",\n\t\t\ttext: \"乌尔禾区\"\n\t\t}, {\n\t\t\tvalue: \"650206\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"652100\",\n\t\ttext: \"吐鲁番地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"652101\",\n\t\t\ttext: \"吐鲁番市\"\n\t\t}, {\n\t\t\tvalue: \"652122\",\n\t\t\ttext: \"鄯善县\"\n\t\t}, {\n\t\t\tvalue: \"652123\",\n\t\t\ttext: \"托克逊县\"\n\t\t}, {\n\t\t\tvalue: \"652124\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"652200\",\n\t\ttext: \"哈密地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"652201\",\n\t\t\ttext: \"哈密市\"\n\t\t}, {\n\t\t\tvalue: \"652222\",\n\t\t\ttext: \"巴里坤哈萨克自治县\"\n\t\t}, {\n\t\t\tvalue: \"652223\",\n\t\t\ttext: \"伊吾县\"\n\t\t}, {\n\t\t\tvalue: \"652224\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"652300\",\n\t\ttext: \"昌吉回族自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"652301\",\n\t\t\ttext: \"昌吉市\"\n\t\t}, {\n\t\t\tvalue: \"652302\",\n\t\t\ttext: \"阜康市\"\n\t\t}, {\n\t\t\tvalue: \"652303\",\n\t\t\ttext: \"米泉市\"\n\t\t}, {\n\t\t\tvalue: \"652323\",\n\t\t\ttext: \"呼图壁县\"\n\t\t}, {\n\t\t\tvalue: \"652324\",\n\t\t\ttext: \"玛纳斯县\"\n\t\t}, {\n\t\t\tvalue: \"652325\",\n\t\t\ttext: \"奇台县\"\n\t\t}, {\n\t\t\tvalue: \"652327\",\n\t\t\ttext: \"吉木萨尔县\"\n\t\t}, {\n\t\t\tvalue: \"652328\",\n\t\t\ttext: \"木垒哈萨克自治县\"\n\t\t}, {\n\t\t\tvalue: \"652329\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"652700\",\n\t\ttext: \"博尔塔拉蒙古自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"652701\",\n\t\t\ttext: \"博乐市\"\n\t\t}, {\n\t\t\tvalue: \"652722\",\n\t\t\ttext: \"精河县\"\n\t\t}, {\n\t\t\tvalue: \"652723\",\n\t\t\ttext: \"温泉县\"\n\t\t}, {\n\t\t\tvalue: \"652724\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"652800\",\n\t\ttext: \"巴音郭楞蒙古自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"652801\",\n\t\t\ttext: \"库尔勒市\"\n\t\t}, {\n\t\t\tvalue: \"652822\",\n\t\t\ttext: \"轮台县\"\n\t\t}, {\n\t\t\tvalue: \"652823\",\n\t\t\ttext: \"尉犁县\"\n\t\t}, {\n\t\t\tvalue: \"652824\",\n\t\t\ttext: \"若羌县\"\n\t\t}, {\n\t\t\tvalue: \"652825\",\n\t\t\ttext: \"且末县\"\n\t\t}, {\n\t\t\tvalue: \"652826\",\n\t\t\ttext: \"焉耆回族自治县\"\n\t\t}, {\n\t\t\tvalue: \"652827\",\n\t\t\ttext: \"和静县\"\n\t\t}, {\n\t\t\tvalue: \"652828\",\n\t\t\ttext: \"和硕县\"\n\t\t}, {\n\t\t\tvalue: \"652829\",\n\t\t\ttext: \"博湖县\"\n\t\t}, {\n\t\t\tvalue: \"652830\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"652900\",\n\t\ttext: \"阿克苏地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"652901\",\n\t\t\ttext: \"阿克苏市\"\n\t\t}, {\n\t\t\tvalue: \"652922\",\n\t\t\ttext: \"温宿县\"\n\t\t}, {\n\t\t\tvalue: \"652923\",\n\t\t\ttext: \"库车县\"\n\t\t}, {\n\t\t\tvalue: \"652924\",\n\t\t\ttext: \"沙雅县\"\n\t\t}, {\n\t\t\tvalue: \"652925\",\n\t\t\ttext: \"新和县\"\n\t\t}, {\n\t\t\tvalue: \"652926\",\n\t\t\ttext: \"拜城县\"\n\t\t}, {\n\t\t\tvalue: \"652927\",\n\t\t\ttext: \"乌什县\"\n\t\t}, {\n\t\t\tvalue: \"652928\",\n\t\t\ttext: \"阿瓦提县\"\n\t\t}, {\n\t\t\tvalue: \"652929\",\n\t\t\ttext: \"柯坪县\"\n\t\t}, {\n\t\t\tvalue: \"652930\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"653000\",\n\t\ttext: \"克孜勒苏柯尔克孜自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"653001\",\n\t\t\ttext: \"阿图什市\"\n\t\t}, {\n\t\t\tvalue: \"653022\",\n\t\t\ttext: \"阿克陶县\"\n\t\t}, {\n\t\t\tvalue: \"653023\",\n\t\t\ttext: \"阿合奇县\"\n\t\t}, {\n\t\t\tvalue: \"653024\",\n\t\t\ttext: \"乌恰县\"\n\t\t}, {\n\t\t\tvalue: \"653025\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"653100\",\n\t\ttext: \"喀什地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"653101\",\n\t\t\ttext: \"喀什市\"\n\t\t}, {\n\t\t\tvalue: \"653121\",\n\t\t\ttext: \"疏附县\"\n\t\t}, {\n\t\t\tvalue: \"653122\",\n\t\t\ttext: \"疏勒县\"\n\t\t}, {\n\t\t\tvalue: \"653123\",\n\t\t\ttext: \"英吉沙县\"\n\t\t}, {\n\t\t\tvalue: \"653124\",\n\t\t\ttext: \"泽普县\"\n\t\t}, {\n\t\t\tvalue: \"653125\",\n\t\t\ttext: \"莎车县\"\n\t\t}, {\n\t\t\tvalue: \"653126\",\n\t\t\ttext: \"叶城县\"\n\t\t}, {\n\t\t\tvalue: \"653127\",\n\t\t\ttext: \"麦盖提县\"\n\t\t}, {\n\t\t\tvalue: \"653128\",\n\t\t\ttext: \"岳普湖县\"\n\t\t}, {\n\t\t\tvalue: \"653129\",\n\t\t\ttext: \"伽师县\"\n\t\t}, {\n\t\t\tvalue: \"653130\",\n\t\t\ttext: \"巴楚县\"\n\t\t}, {\n\t\t\tvalue: \"653131\",\n\t\t\ttext: \"塔什库尔干塔吉克自治县\"\n\t\t}, {\n\t\t\tvalue: \"653132\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"653200\",\n\t\ttext: \"和田地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"653201\",\n\t\t\ttext: \"和田市\"\n\t\t}, {\n\t\t\tvalue: \"653221\",\n\t\t\ttext: \"和田县\"\n\t\t}, {\n\t\t\tvalue: \"653222\",\n\t\t\ttext: \"墨玉县\"\n\t\t}, {\n\t\t\tvalue: \"653223\",\n\t\t\ttext: \"皮山县\"\n\t\t}, {\n\t\t\tvalue: \"653224\",\n\t\t\ttext: \"洛浦县\"\n\t\t}, {\n\t\t\tvalue: \"653225\",\n\t\t\ttext: \"策勒县\"\n\t\t}, {\n\t\t\tvalue: \"653226\",\n\t\t\ttext: \"于田县\"\n\t\t}, {\n\t\t\tvalue: \"653227\",\n\t\t\ttext: \"民丰县\"\n\t\t}, {\n\t\t\tvalue: \"653228\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"654000\",\n\t\ttext: \"伊犁哈萨克自治州\",\n\t\tchildren: [{\n\t\t\tvalue: \"654002\",\n\t\t\ttext: \"伊宁市\"\n\t\t}, {\n\t\t\tvalue: \"654003\",\n\t\t\ttext: \"奎屯市\"\n\t\t}, {\n\t\t\tvalue: \"654021\",\n\t\t\ttext: \"伊宁县\"\n\t\t}, {\n\t\t\tvalue: \"654022\",\n\t\t\ttext: \"察布查尔锡伯自治县\"\n\t\t}, {\n\t\t\tvalue: \"654023\",\n\t\t\ttext: \"霍城县\"\n\t\t}, {\n\t\t\tvalue: \"654024\",\n\t\t\ttext: \"巩留县\"\n\t\t}, {\n\t\t\tvalue: \"654025\",\n\t\t\ttext: \"新源县\"\n\t\t}, {\n\t\t\tvalue: \"654026\",\n\t\t\ttext: \"昭苏县\"\n\t\t}, {\n\t\t\tvalue: \"654027\",\n\t\t\ttext: \"特克斯县\"\n\t\t}, {\n\t\t\tvalue: \"654028\",\n\t\t\ttext: \"尼勒克县\"\n\t\t}, {\n\t\t\tvalue: \"654029\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"654200\",\n\t\ttext: \"塔城地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"654201\",\n\t\t\ttext: \"塔城市\"\n\t\t}, {\n\t\t\tvalue: \"654202\",\n\t\t\ttext: \"乌苏市\"\n\t\t}, {\n\t\t\tvalue: \"654221\",\n\t\t\ttext: \"额敏县\"\n\t\t}, {\n\t\t\tvalue: \"654223\",\n\t\t\ttext: \"沙湾县\"\n\t\t}, {\n\t\t\tvalue: \"654224\",\n\t\t\ttext: \"托里县\"\n\t\t}, {\n\t\t\tvalue: \"654225\",\n\t\t\ttext: \"裕民县\"\n\t\t}, {\n\t\t\tvalue: \"654226\",\n\t\t\ttext: \"和布克赛尔蒙古自治县\"\n\t\t}, {\n\t\t\tvalue: \"654227\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"654300\",\n\t\ttext: \"阿勒泰地区\",\n\t\tchildren: [{\n\t\t\tvalue: \"654301\",\n\t\t\ttext: \"阿勒泰市\"\n\t\t}, {\n\t\t\tvalue: \"654321\",\n\t\t\ttext: \"布尔津县\"\n\t\t}, {\n\t\t\tvalue: \"654322\",\n\t\t\ttext: \"富蕴县\"\n\t\t}, {\n\t\t\tvalue: \"654323\",\n\t\t\ttext: \"福海县\"\n\t\t}, {\n\t\t\tvalue: \"654324\",\n\t\t\ttext: \"哈巴河县\"\n\t\t}, {\n\t\t\tvalue: \"654325\",\n\t\t\ttext: \"青河县\"\n\t\t}, {\n\t\t\tvalue: \"654326\",\n\t\t\ttext: \"吉木乃县\"\n\t\t}, {\n\t\t\tvalue: \"654327\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"659001\",\n\t\ttext: \"石河子市\"\n\t}, {\n\t\tvalue: \"659002\",\n\t\ttext: \"阿拉尔市\"\n\t}, {\n\t\tvalue: \"659003\",\n\t\ttext: \"图木舒克市\"\n\t}, {\n\t\tvalue: \"659004\",\n\t\ttext: \"五家渠市\"\n\t}]\n}, {\n\tvalue: '710000',\n\ttext: '台湾省',\n\tchildren: [{\n\t\tvalue: \"710100\",\n\t\ttext: \"台北市\",\n\t\tchildren: [{\n\t\t\tvalue: \"710101\",\n\t\t\ttext: \"中正区\"\n\t\t}, {\n\t\t\tvalue: \"710102\",\n\t\t\ttext: \"大同区\"\n\t\t}, {\n\t\t\tvalue: \"710103\",\n\t\t\ttext: \"中山区\"\n\t\t}, {\n\t\t\tvalue: \"710104\",\n\t\t\ttext: \"松山区\"\n\t\t}, {\n\t\t\tvalue: \"710105\",\n\t\t\ttext: \"大安区\"\n\t\t}, {\n\t\t\tvalue: \"710106\",\n\t\t\ttext: \"万华区\"\n\t\t}, {\n\t\t\tvalue: \"710107\",\n\t\t\ttext: \"信义区\"\n\t\t}, {\n\t\t\tvalue: \"710108\",\n\t\t\ttext: \"士林区\"\n\t\t}, {\n\t\t\tvalue: \"710109\",\n\t\t\ttext: \"北投区\"\n\t\t}, {\n\t\t\tvalue: \"710110\",\n\t\t\ttext: \"内湖区\"\n\t\t}, {\n\t\t\tvalue: \"710111\",\n\t\t\ttext: \"南港区\"\n\t\t}, {\n\t\t\tvalue: \"710112\",\n\t\t\ttext: \"文山区\"\n\t\t}, {\n\t\t\tvalue: \"710113\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"710200\",\n\t\ttext: \"高雄市\",\n\t\tchildren: [{\n\t\t\tvalue: \"710201\",\n\t\t\ttext: \"新兴区\"\n\t\t}, {\n\t\t\tvalue: \"710202\",\n\t\t\ttext: \"前金区\"\n\t\t}, {\n\t\t\tvalue: \"710203\",\n\t\t\ttext: \"芩雅区\"\n\t\t}, {\n\t\t\tvalue: \"710204\",\n\t\t\ttext: \"盐埕区\"\n\t\t}, {\n\t\t\tvalue: \"710205\",\n\t\t\ttext: \"鼓山区\"\n\t\t}, {\n\t\t\tvalue: \"710206\",\n\t\t\ttext: \"旗津区\"\n\t\t}, {\n\t\t\tvalue: \"710207\",\n\t\t\ttext: \"前镇区\"\n\t\t}, {\n\t\t\tvalue: \"710208\",\n\t\t\ttext: \"三民区\"\n\t\t}, {\n\t\t\tvalue: \"710209\",\n\t\t\ttext: \"左营区\"\n\t\t}, {\n\t\t\tvalue: \"710210\",\n\t\t\ttext: \"楠梓区\"\n\t\t}, {\n\t\t\tvalue: \"710211\",\n\t\t\ttext: \"小港区\"\n\t\t}, {\n\t\t\tvalue: \"710212\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"710300\",\n\t\ttext: \"台南市\",\n\t\tchildren: [{\n\t\t\tvalue: \"710301\",\n\t\t\ttext: \"中西区\"\n\t\t}, {\n\t\t\tvalue: \"710302\",\n\t\t\ttext: \"东区\"\n\t\t}, {\n\t\t\tvalue: \"710303\",\n\t\t\ttext: \"南区\"\n\t\t}, {\n\t\t\tvalue: \"710304\",\n\t\t\ttext: \"北区\"\n\t\t}, {\n\t\t\tvalue: \"710305\",\n\t\t\ttext: \"安平区\"\n\t\t}, {\n\t\t\tvalue: \"710306\",\n\t\t\ttext: \"安南区\"\n\t\t}, {\n\t\t\tvalue: \"710307\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"710400\",\n\t\ttext: \"台中市\",\n\t\tchildren: [{\n\t\t\tvalue: \"710401\",\n\t\t\ttext: \"中区\"\n\t\t}, {\n\t\t\tvalue: \"710402\",\n\t\t\ttext: \"东区\"\n\t\t}, {\n\t\t\tvalue: \"710403\",\n\t\t\ttext: \"南区\"\n\t\t}, {\n\t\t\tvalue: \"710404\",\n\t\t\ttext: \"西区\"\n\t\t}, {\n\t\t\tvalue: \"710405\",\n\t\t\ttext: \"北区\"\n\t\t}, {\n\t\t\tvalue: \"710406\",\n\t\t\ttext: \"北屯区\"\n\t\t}, {\n\t\t\tvalue: \"710407\",\n\t\t\ttext: \"西屯区\"\n\t\t}, {\n\t\t\tvalue: \"710408\",\n\t\t\ttext: \"南屯区\"\n\t\t}, {\n\t\t\tvalue: \"710409\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"710500\",\n\t\ttext: \"金门县\"\n\t}, {\n\t\tvalue: \"710600\",\n\t\ttext: \"南投县\"\n\t}, {\n\t\tvalue: \"710700\",\n\t\ttext: \"基隆市\",\n\t\tchildren: [{\n\t\t\tvalue: \"710701\",\n\t\t\ttext: \"仁爱区\"\n\t\t}, {\n\t\t\tvalue: \"710702\",\n\t\t\ttext: \"信义区\"\n\t\t}, {\n\t\t\tvalue: \"710703\",\n\t\t\ttext: \"中正区\"\n\t\t}, {\n\t\t\tvalue: \"710704\",\n\t\t\ttext: \"中山区\"\n\t\t}, {\n\t\t\tvalue: \"710705\",\n\t\t\ttext: \"安乐区\"\n\t\t}, {\n\t\t\tvalue: \"710706\",\n\t\t\ttext: \"暖暖区\"\n\t\t}, {\n\t\t\tvalue: \"710707\",\n\t\t\ttext: \"七堵区\"\n\t\t}, {\n\t\t\tvalue: \"710708\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"710800\",\n\t\ttext: \"新竹市\",\n\t\tchildren: [{\n\t\t\tvalue: \"710801\",\n\t\t\ttext: \"东区\"\n\t\t}, {\n\t\t\tvalue: \"710802\",\n\t\t\ttext: \"北区\"\n\t\t}, {\n\t\t\tvalue: \"710803\",\n\t\t\ttext: \"香山区\"\n\t\t}, {\n\t\t\tvalue: \"710804\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"710900\",\n\t\ttext: \"嘉义市\",\n\t\tchildren: [{\n\t\t\tvalue: \"710901\",\n\t\t\ttext: \"东区\"\n\t\t}, {\n\t\t\tvalue: \"710902\",\n\t\t\ttext: \"西区\"\n\t\t}, {\n\t\t\tvalue: \"710903\",\n\t\t\ttext: \"其它区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"711100\",\n\t\ttext: \"新北市\"\n\t}, {\n\t\tvalue: \"711200\",\n\t\ttext: \"宜兰县\"\n\t}, {\n\t\tvalue: \"711300\",\n\t\ttext: \"新竹县\"\n\t}, {\n\t\tvalue: \"711400\",\n\t\ttext: \"桃园县\"\n\t}, {\n\t\tvalue: \"711500\",\n\t\ttext: \"苗栗县\"\n\t}, {\n\t\tvalue: \"711700\",\n\t\ttext: \"彰化县\"\n\t}, {\n\t\tvalue: \"711900\",\n\t\ttext: \"嘉义县\"\n\t}, {\n\t\tvalue: \"712100\",\n\t\ttext: \"云林县\"\n\t}, {\n\t\tvalue: \"712400\",\n\t\ttext: \"屏东县\"\n\t}, {\n\t\tvalue: \"712500\",\n\t\ttext: \"台东县\"\n\t}, {\n\t\tvalue: \"712600\",\n\t\ttext: \"花莲县\"\n\t}, {\n\t\tvalue: \"712700\",\n\t\ttext: \"澎湖县\"\n\t}]\n}, {\n\tvalue: '810000',\n\ttext: '香港',\n\tchildren: [{\n\t\tvalue: \"810100\",\n\t\ttext: \"香港岛\",\n\t\tchildren: [{\n\t\t\tvalue: \"810101\",\n\t\t\ttext: \"中西区\"\n\t\t}, {\n\t\t\tvalue: \"810102\",\n\t\t\ttext: \"湾仔\"\n\t\t}, {\n\t\t\tvalue: \"810103\",\n\t\t\ttext: \"东区\"\n\t\t}, {\n\t\t\tvalue: \"810104\",\n\t\t\ttext: \"南区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"810200\",\n\t\ttext: \"九龙\",\n\t\tchildren: [{\n\t\t\tvalue: \"810201\",\n\t\t\ttext: \"九龙城区\"\n\t\t}, {\n\t\t\tvalue: \"810202\",\n\t\t\ttext: \"油尖旺区\"\n\t\t}, {\n\t\t\tvalue: \"810203\",\n\t\t\ttext: \"深水埗区\"\n\t\t}, {\n\t\t\tvalue: \"810204\",\n\t\t\ttext: \"黄大仙区\"\n\t\t}, {\n\t\t\tvalue: \"810205\",\n\t\t\ttext: \"观塘区\"\n\t\t}]\n\t}, {\n\t\tvalue: \"810300\",\n\t\ttext: \"新界\",\n\t\tchildren: [{\n\t\t\tvalue: \"810301\",\n\t\t\ttext: \"北区\"\n\t\t}, {\n\t\t\tvalue: \"810302\",\n\t\t\ttext: \"大埔区\"\n\t\t}, {\n\t\t\tvalue: \"810303\",\n\t\t\ttext: \"沙田区\"\n\t\t}, {\n\t\t\tvalue: \"810304\",\n\t\t\ttext: \"西贡区\"\n\t\t}, {\n\t\t\tvalue: \"810305\",\n\t\t\ttext: \"元朗区\"\n\t\t}, {\n\t\t\tvalue: \"810306\",\n\t\t\ttext: \"屯门区\"\n\t\t}, {\n\t\t\tvalue: \"810307\",\n\t\t\ttext: \"荃湾区\"\n\t\t}, {\n\t\t\tvalue: \"810308\",\n\t\t\ttext: \"葵青区\"\n\t\t}, {\n\t\t\tvalue: \"810309\",\n\t\t\ttext: \"离岛区\"\n\t\t}]\n\t}]\n}, {\n\tvalue: '820000',\n\ttext: '澳门',\n\tchildren: [{\n\t\tvalue: \"820100\",\n\t\ttext: \"澳门半岛\"\n\t}, {\n\t\tvalue: \"820200\",\n\t\ttext: \"离岛\"\n\t}]\n}, {\n\tvalue: '990000',\n\ttext: '海外',\n\tchildren: [{\n\t\tvalue: \"990100\",\n\t\ttext: \"海外\"\n\t}]\n}]"
  },
  {
    "path": "examples/hello-mui/js/city.data.js",
    "content": "var cityData = [{\n\tvalue: '110000',\n\ttext: '北京市',\n\tchildren: [{\n\t\tvalue: \"110101\",\n\t\ttext: \"东城区\"\n\t}, {\n\t\tvalue: \"110102\",\n\t\ttext: \"西城区\"\n\t}, {\n\t\tvalue: \"110103\",\n\t\ttext: \"崇文区\"\n\t}, {\n\t\tvalue: \"110104\",\n\t\ttext: \"宣武区\"\n\t}, {\n\t\tvalue: \"110105\",\n\t\ttext: \"朝阳区\"\n\t}, {\n\t\tvalue: \"110106\",\n\t\ttext: \"丰台区\"\n\t}, {\n\t\tvalue: \"110107\",\n\t\ttext: \"石景山区\"\n\t}, {\n\t\tvalue: \"110108\",\n\t\ttext: \"海淀区\"\n\t}, {\n\t\tvalue: \"110109\",\n\t\ttext: \"门头沟区\"\n\t}, {\n\t\tvalue: \"110111\",\n\t\ttext: \"房山区\"\n\t}, {\n\t\tvalue: \"110112\",\n\t\ttext: \"通州区\"\n\t}, {\n\t\tvalue: \"110113\",\n\t\ttext: \"顺义区\"\n\t}, {\n\t\tvalue: \"110114\",\n\t\ttext: \"昌平区\"\n\t}, {\n\t\tvalue: \"110115\",\n\t\ttext: \"大兴区\"\n\t}, {\n\t\tvalue: \"110116\",\n\t\ttext: \"怀柔区\"\n\t}, {\n\t\tvalue: \"110117\",\n\t\ttext: \"平谷区\"\n\t}, {\n\t\tvalue: \"110228\",\n\t\ttext: \"密云县\"\n\t}, {\n\t\tvalue: \"110229\",\n\t\ttext: \"延庆县\"\n\t}, {\n\t\tvalue: \"110230\",\n\t\ttext: \"其它区\"\n\t}]\n}, {\n\tvalue: '120000',\n\ttext: '天津市',\n\tchildren: [{\n\t\tvalue: \"120101\",\n\t\ttext: \"和平区\"\n\t}, {\n\t\tvalue: \"120102\",\n\t\ttext: \"河东区\"\n\t}, {\n\t\tvalue: \"120103\",\n\t\ttext: \"河西区\"\n\t}, {\n\t\tvalue: \"120104\",\n\t\ttext: \"南开区\"\n\t}, {\n\t\tvalue: \"120105\",\n\t\ttext: \"河北区\"\n\t}, {\n\t\tvalue: \"120106\",\n\t\ttext: \"红桥区\"\n\t}, {\n\t\tvalue: \"120107\",\n\t\ttext: \"塘沽区\"\n\t}, {\n\t\tvalue: \"120108\",\n\t\ttext: \"汉沽区\"\n\t}, {\n\t\tvalue: \"120109\",\n\t\ttext: \"大港区\"\n\t}, {\n\t\tvalue: \"120110\",\n\t\ttext: \"东丽区\"\n\t}, {\n\t\tvalue: \"120111\",\n\t\ttext: \"西青区\"\n\t}, {\n\t\tvalue: \"120112\",\n\t\ttext: \"津南区\"\n\t}, {\n\t\tvalue: \"120113\",\n\t\ttext: \"北辰区\"\n\t}, {\n\t\tvalue: \"120114\",\n\t\ttext: \"武清区\"\n\t}, {\n\t\tvalue: \"120115\",\n\t\ttext: \"宝坻区\"\n\t}, {\n\t\tvalue: \"120116\",\n\t\ttext: \"滨海新区\"\n\t}, {\n\t\tvalue: \"120221\",\n\t\ttext: \"宁河县\"\n\t}, {\n\t\tvalue: \"120223\",\n\t\ttext: \"静海县\"\n\t}, {\n\t\tvalue: \"120225\",\n\t\ttext: \"蓟县\"\n\t}, {\n\t\tvalue: \"120226\",\n\t\ttext: \"其它区\"\n\t}]\n}, {\n\tvalue: '130000',\n\ttext: '河北省',\n\tchildren: [{\n\t\tvalue: \"130100\",\n\t\ttext: \"石家庄市\"\n\t}, {\n\t\tvalue: \"130200\",\n\t\ttext: \"唐山市\"\n\t}, {\n\t\tvalue: \"130300\",\n\t\ttext: \"秦皇岛市\"\n\t}, {\n\t\tvalue: \"130400\",\n\t\ttext: \"邯郸市\"\n\t}, {\n\t\tvalue: \"130500\",\n\t\ttext: \"邢台市\"\n\t}, {\n\t\tvalue: \"130600\",\n\t\ttext: \"保定市\"\n\t}, {\n\t\tvalue: \"130700\",\n\t\ttext: \"张家口市\"\n\t}, {\n\t\tvalue: \"130800\",\n\t\ttext: \"承德市\"\n\t}, {\n\t\tvalue: \"130900\",\n\t\ttext: \"沧州市\"\n\t}, {\n\t\tvalue: \"131000\",\n\t\ttext: \"廊坊市\"\n\t}, {\n\t\tvalue: \"131100\",\n\t\ttext: \"衡水市\"\n\t}]\n}, {\n\tvalue: '140000',\n\ttext: '山西省',\n\tchildren: [{\n\t\tvalue: \"140100\",\n\t\ttext: \"太原市\"\n\t}, {\n\t\tvalue: \"140200\",\n\t\ttext: \"大同市\"\n\t}, {\n\t\tvalue: \"140300\",\n\t\ttext: \"阳泉市\"\n\t}, {\n\t\tvalue: \"140400\",\n\t\ttext: \"长治市\"\n\t}, {\n\t\tvalue: \"140500\",\n\t\ttext: \"晋城市\"\n\t}, {\n\t\tvalue: \"140600\",\n\t\ttext: \"朔州市\"\n\t}, {\n\t\tvalue: \"140700\",\n\t\ttext: \"晋中市\"\n\t}, {\n\t\tvalue: \"140800\",\n\t\ttext: \"运城市\"\n\t}, {\n\t\tvalue: \"140900\",\n\t\ttext: \"忻州市\"\n\t}, {\n\t\tvalue: \"141000\",\n\t\ttext: \"临汾市\"\n\t}, {\n\t\tvalue: \"141100\",\n\t\ttext: \"吕梁市\"\n\t}]\n}, {\n\tvalue: '150000',\n\ttext: '内蒙古',\n\tchildren: [{\n\t\tvalue: \"150100\",\n\t\ttext: \"呼和浩特市\"\n\t}, {\n\t\tvalue: \"150200\",\n\t\ttext: \"包头市\"\n\t}, {\n\t\tvalue: \"150300\",\n\t\ttext: \"乌海市\"\n\t}, {\n\t\tvalue: \"150400\",\n\t\ttext: \"赤峰市\"\n\t}, {\n\t\tvalue: \"150500\",\n\t\ttext: \"通辽市\"\n\t}, {\n\t\tvalue: \"150600\",\n\t\ttext: \"鄂尔多斯市\"\n\t}, {\n\t\tvalue: \"150700\",\n\t\ttext: \"呼伦贝尔市\"\n\t}, {\n\t\tvalue: \"150800\",\n\t\ttext: \"巴彦淖尔市\"\n\t}, {\n\t\tvalue: \"150900\",\n\t\ttext: \"乌兰察布市\"\n\t}, {\n\t\tvalue: \"152200\",\n\t\ttext: \"兴安盟\"\n\t}, {\n\t\tvalue: \"152500\",\n\t\ttext: \"锡林郭勒盟\"\n\t}, {\n\t\tvalue: \"152900\",\n\t\ttext: \"阿拉善盟\"\n\t}]\n}, {\n\tvalue: '210000',\n\ttext: '辽宁省',\n\tchildren: [{\n\t\tvalue: \"210100\",\n\t\ttext: \"沈阳市\"\n\t}, {\n\t\tvalue: \"210200\",\n\t\ttext: \"大连市\"\n\t}, {\n\t\tvalue: \"210300\",\n\t\ttext: \"鞍山市\"\n\t}, {\n\t\tvalue: \"210400\",\n\t\ttext: \"抚顺市\"\n\t}, {\n\t\tvalue: \"210500\",\n\t\ttext: \"本溪市\"\n\t}, {\n\t\tvalue: \"210600\",\n\t\ttext: \"丹东市\"\n\t}, {\n\t\tvalue: \"210700\",\n\t\ttext: \"锦州市\"\n\t}, {\n\t\tvalue: \"210800\",\n\t\ttext: \"营口市\"\n\t}, {\n\t\tvalue: \"210900\",\n\t\ttext: \"阜新市\"\n\t}, {\n\t\tvalue: \"211000\",\n\t\ttext: \"辽阳市\"\n\t}, {\n\t\tvalue: \"211100\",\n\t\ttext: \"盘锦市\"\n\t}, {\n\t\tvalue: \"211200\",\n\t\ttext: \"铁岭市\"\n\t}, {\n\t\tvalue: \"211300\",\n\t\ttext: \"朝阳市\"\n\t}, {\n\t\tvalue: \"211400\",\n\t\ttext: \"葫芦岛市\"\n\t}]\n}, {\n\tvalue: '220000',\n\ttext: '吉林省',\n\tchildren: [{\n\t\tvalue: \"220100\",\n\t\ttext: \"长春市\"\n\t}, {\n\t\tvalue: \"220200\",\n\t\ttext: \"吉林市\"\n\t}, {\n\t\tvalue: \"220300\",\n\t\ttext: \"四平市\"\n\t}, {\n\t\tvalue: \"220400\",\n\t\ttext: \"辽源市\"\n\t}, {\n\t\tvalue: \"220500\",\n\t\ttext: \"通化市\"\n\t}, {\n\t\tvalue: \"220600\",\n\t\ttext: \"白山市\"\n\t}, {\n\t\tvalue: \"220700\",\n\t\ttext: \"松原市\"\n\t}, {\n\t\tvalue: \"220800\",\n\t\ttext: \"白城市\"\n\t}, {\n\t\tvalue: \"222400\",\n\t\ttext: \"延边朝鲜族自治州\"\n\t}]\n}, {\n\tvalue: '230000',\n\ttext: '黑龙江省',\n\tchildren: [{\n\t\tvalue: \"230100\",\n\t\ttext: \"哈尔滨市\"\n\t}, {\n\t\tvalue: \"230200\",\n\t\ttext: \"齐齐哈尔市\"\n\t}, {\n\t\tvalue: \"230300\",\n\t\ttext: \"鸡西市\"\n\t}, {\n\t\tvalue: \"230400\",\n\t\ttext: \"鹤岗市\"\n\t}, {\n\t\tvalue: \"230500\",\n\t\ttext: \"双鸭山市\"\n\t}, {\n\t\tvalue: \"230600\",\n\t\ttext: \"大庆市\"\n\t}, {\n\t\tvalue: \"230700\",\n\t\ttext: \"伊春市\"\n\t}, {\n\t\tvalue: \"230800\",\n\t\ttext: \"佳木斯市\"\n\t}, {\n\t\tvalue: \"230900\",\n\t\ttext: \"七台河市\"\n\t}, {\n\t\tvalue: \"231000\",\n\t\ttext: \"牡丹江市\"\n\t}, {\n\t\tvalue: \"231100\",\n\t\ttext: \"黑河市\"\n\t}, {\n\t\tvalue: \"231200\",\n\t\ttext: \"绥化市\"\n\t}, {\n\t\tvalue: \"232700\",\n\t\ttext: \"大兴安岭地区\"\n\t}]\n}, {\n\tvalue: '310000',\n\ttext: '上海市',\n\tchildren: [{\n\t\tvalue: \"310101\",\n\t\ttext: \"黄浦区\"\n\t}, {\n\t\tvalue: \"310103\",\n\t\ttext: \"卢湾区\"\n\t}, {\n\t\tvalue: \"310104\",\n\t\ttext: \"徐汇区\"\n\t}, {\n\t\tvalue: \"310105\",\n\t\ttext: \"长宁区\"\n\t}, {\n\t\tvalue: \"310106\",\n\t\ttext: \"静安区\"\n\t}, {\n\t\tvalue: \"310107\",\n\t\ttext: \"普陀区\"\n\t}, {\n\t\tvalue: \"310108\",\n\t\ttext: \"闸北区\"\n\t}, {\n\t\tvalue: \"310109\",\n\t\ttext: \"虹口区\"\n\t}, {\n\t\tvalue: \"310110\",\n\t\ttext: \"杨浦区\"\n\t}, {\n\t\tvalue: \"310112\",\n\t\ttext: \"闵行区\"\n\t}, {\n\t\tvalue: \"310113\",\n\t\ttext: \"宝山区\"\n\t}, {\n\t\tvalue: \"310114\",\n\t\ttext: \"嘉定区\"\n\t}, {\n\t\tvalue: \"310115\",\n\t\ttext: \"浦东新区\"\n\t}, {\n\t\tvalue: \"310116\",\n\t\ttext: \"金山区\"\n\t}, {\n\t\tvalue: \"310117\",\n\t\ttext: \"松江区\"\n\t}, {\n\t\tvalue: \"310118\",\n\t\ttext: \"青浦区\"\n\t}, {\n\t\tvalue: \"310119\",\n\t\ttext: \"南汇区\"\n\t}, {\n\t\tvalue: \"310120\",\n\t\ttext: \"奉贤区\"\n\t}, {\n\t\tvalue: \"310152\",\n\t\ttext: \"川沙区\"\n\t}, {\n\t\tvalue: \"310230\",\n\t\ttext: \"崇明县\"\n\t}, {\n\t\tvalue: \"310231\",\n\t\ttext: \"其它区\"\n\t}]\n}, {\n\tvalue: '320000',\n\ttext: '江苏省',\n\tchildren: [{\n\t\tvalue: \"320100\",\n\t\ttext: \"南京市\"\n\t}, {\n\t\tvalue: \"320200\",\n\t\ttext: \"无锡市\"\n\t}, {\n\t\tvalue: \"320300\",\n\t\ttext: \"徐州市\"\n\t}, {\n\t\tvalue: \"320400\",\n\t\ttext: \"常州市\"\n\t}, {\n\t\tvalue: \"320500\",\n\t\ttext: \"苏州市\"\n\t}, {\n\t\tvalue: \"320600\",\n\t\ttext: \"南通市\"\n\t}, {\n\t\tvalue: \"320700\",\n\t\ttext: \"连云港市\"\n\t}, {\n\t\tvalue: \"320800\",\n\t\ttext: \"淮安市\"\n\t}, {\n\t\tvalue: \"320900\",\n\t\ttext: \"盐城市\"\n\t}, {\n\t\tvalue: \"321000\",\n\t\ttext: \"扬州市\"\n\t}, {\n\t\tvalue: \"321100\",\n\t\ttext: \"镇江市\"\n\t}, {\n\t\tvalue: \"321200\",\n\t\ttext: \"泰州市\"\n\t}, {\n\t\tvalue: \"321300\",\n\t\ttext: \"宿迁市\"\n\t}]\n}, {\n\tvalue: '330000',\n\ttext: '浙江省',\n\tchildren: [{\n\t\tvalue: \"330100\",\n\t\ttext: \"杭州市\"\n\t}, {\n\t\tvalue: \"330200\",\n\t\ttext: \"宁波市\"\n\t}, {\n\t\tvalue: \"330300\",\n\t\ttext: \"温州市\"\n\t}, {\n\t\tvalue: \"330400\",\n\t\ttext: \"嘉兴市\"\n\t}, {\n\t\tvalue: \"330500\",\n\t\ttext: \"湖州市\"\n\t}, {\n\t\tvalue: \"330600\",\n\t\ttext: \"绍兴市\"\n\t}, {\n\t\tvalue: \"330700\",\n\t\ttext: \"金华市\"\n\t}, {\n\t\tvalue: \"330800\",\n\t\ttext: \"衢州市\"\n\t}, {\n\t\tvalue: \"330900\",\n\t\ttext: \"舟山市\"\n\t}, {\n\t\tvalue: \"331000\",\n\t\ttext: \"台州市\"\n\t}, {\n\t\tvalue: \"331100\",\n\t\ttext: \"丽水市\"\n\t}]\n}, {\n\tvalue: '340000',\n\ttext: '安徽省',\n\tchildren: [{\n\t\tvalue: \"340100\",\n\t\ttext: \"合肥市\"\n\t}, {\n\t\tvalue: \"340200\",\n\t\ttext: \"芜湖市\"\n\t}, {\n\t\tvalue: \"340300\",\n\t\ttext: \"蚌埠市\"\n\t}, {\n\t\tvalue: \"340400\",\n\t\ttext: \"淮南市\"\n\t}, {\n\t\tvalue: \"340500\",\n\t\ttext: \"马鞍山市\"\n\t}, {\n\t\tvalue: \"340600\",\n\t\ttext: \"淮北市\"\n\t}, {\n\t\tvalue: \"340700\",\n\t\ttext: \"铜陵市\"\n\t}, {\n\t\tvalue: \"340800\",\n\t\ttext: \"安庆市\"\n\t}, {\n\t\tvalue: \"341000\",\n\t\ttext: \"黄山市\"\n\t}, {\n\t\tvalue: \"341100\",\n\t\ttext: \"滁州市\"\n\t}, {\n\t\tvalue: \"341200\",\n\t\ttext: \"阜阳市\"\n\t}, {\n\t\tvalue: \"341300\",\n\t\ttext: \"宿州市\"\n\t}, {\n\t\tvalue: \"341500\",\n\t\ttext: \"六安市\"\n\t}, {\n\t\tvalue: \"341600\",\n\t\ttext: \"亳州市\"\n\t}, {\n\t\tvalue: \"341700\",\n\t\ttext: \"池州市\"\n\t}, {\n\t\tvalue: \"341800\",\n\t\ttext: \"宣城市\"\n\t}]\n}, {\n\tvalue: '350000',\n\ttext: '福建省',\n\tchildren: [{\n\t\tvalue: \"350100\",\n\t\ttext: \"福州市\"\n\t}, {\n\t\tvalue: \"350200\",\n\t\ttext: \"厦门市\"\n\t}, {\n\t\tvalue: \"350300\",\n\t\ttext: \"莆田市\"\n\t}, {\n\t\tvalue: \"350400\",\n\t\ttext: \"三明市\"\n\t}, {\n\t\tvalue: \"350500\",\n\t\ttext: \"泉州市\"\n\t}, {\n\t\tvalue: \"350600\",\n\t\ttext: \"漳州市\"\n\t}, {\n\t\tvalue: \"350700\",\n\t\ttext: \"南平市\"\n\t}, {\n\t\tvalue: \"350800\",\n\t\ttext: \"龙岩市\"\n\t}, {\n\t\tvalue: \"350900\",\n\t\ttext: \"宁德市\"\n\t}]\n}, {\n\tvalue: '360000',\n\ttext: '江西省',\n\tchildren: [{\n\t\tvalue: \"360100\",\n\t\ttext: \"南昌市\"\n\t}, {\n\t\tvalue: \"360200\",\n\t\ttext: \"景德镇市\"\n\t}, {\n\t\tvalue: \"360300\",\n\t\ttext: \"萍乡市\"\n\t}, {\n\t\tvalue: \"360400\",\n\t\ttext: \"九江市\"\n\t}, {\n\t\tvalue: \"360500\",\n\t\ttext: \"新余市\"\n\t}, {\n\t\tvalue: \"360600\",\n\t\ttext: \"鹰潭市\"\n\t}, {\n\t\tvalue: \"360700\",\n\t\ttext: \"赣州市\"\n\t}, {\n\t\tvalue: \"360800\",\n\t\ttext: \"吉安市\"\n\t}, {\n\t\tvalue: \"360900\",\n\t\ttext: \"宜春市\"\n\t}, {\n\t\tvalue: \"361000\",\n\t\ttext: \"抚州市\"\n\t}, {\n\t\tvalue: \"361100\",\n\t\ttext: \"上饶市\"\n\t}]\n}, {\n\tvalue: '370000',\n\ttext: '山东省',\n\tchildren: [{\n\t\tvalue: \"370100\",\n\t\ttext: \"济南市\"\n\t}, {\n\t\tvalue: \"370200\",\n\t\ttext: \"青岛市\"\n\t}, {\n\t\tvalue: \"370300\",\n\t\ttext: \"淄博市\"\n\t}, {\n\t\tvalue: \"370400\",\n\t\ttext: \"枣庄市\"\n\t}, {\n\t\tvalue: \"370500\",\n\t\ttext: \"东营市\"\n\t}, {\n\t\tvalue: \"370600\",\n\t\ttext: \"烟台市\"\n\t}, {\n\t\tvalue: \"370700\",\n\t\ttext: \"潍坊市\"\n\t}, {\n\t\tvalue: \"370800\",\n\t\ttext: \"济宁市\"\n\t}, {\n\t\tvalue: \"370900\",\n\t\ttext: \"泰安市\"\n\t}, {\n\t\tvalue: \"371000\",\n\t\ttext: \"威海市\"\n\t}, {\n\t\tvalue: \"371100\",\n\t\ttext: \"日照市\"\n\t}, {\n\t\tvalue: \"371200\",\n\t\ttext: \"莱芜市\"\n\t}, {\n\t\tvalue: \"371300\",\n\t\ttext: \"临沂市\"\n\t}, {\n\t\tvalue: \"371400\",\n\t\ttext: \"德州市\"\n\t}, {\n\t\tvalue: \"371500\",\n\t\ttext: \"聊城市\"\n\t}, {\n\t\tvalue: \"371600\",\n\t\ttext: \"滨州市\"\n\t}, {\n\t\tvalue: \"371700\",\n\t\ttext: \"菏泽市\"\n\t}]\n}, {\n\tvalue: '410000',\n\ttext: '河南省',\n\tchildren: [{\n\t\tvalue: \"410100\",\n\t\ttext: \"郑州市\"\n\t}, {\n\t\tvalue: \"410200\",\n\t\ttext: \"开封市\"\n\t}, {\n\t\tvalue: \"410300\",\n\t\ttext: \"洛阳市\"\n\t}, {\n\t\tvalue: \"410400\",\n\t\ttext: \"平顶山市\"\n\t}, {\n\t\tvalue: \"410500\",\n\t\ttext: \"安阳市\"\n\t}, {\n\t\tvalue: \"410600\",\n\t\ttext: \"鹤壁市\"\n\t}, {\n\t\tvalue: \"410700\",\n\t\ttext: \"新乡市\"\n\t}, {\n\t\tvalue: \"410800\",\n\t\ttext: \"焦作市\"\n\t}, {\n\t\tvalue: \"410881\",\n\t\ttext: \"济源市\"\n\t}, {\n\t\tvalue: \"410900\",\n\t\ttext: \"濮阳市\"\n\t}, {\n\t\tvalue: \"411000\",\n\t\ttext: \"许昌市\"\n\t}, {\n\t\tvalue: \"411100\",\n\t\ttext: \"漯河市\"\n\t}, {\n\t\tvalue: \"411200\",\n\t\ttext: \"三门峡市\"\n\t}, {\n\t\tvalue: \"411300\",\n\t\ttext: \"南阳市\"\n\t}, {\n\t\tvalue: \"411400\",\n\t\ttext: \"商丘市\"\n\t}, {\n\t\tvalue: \"411500\",\n\t\ttext: \"信阳市\"\n\t}, {\n\t\tvalue: \"411600\",\n\t\ttext: \"周口市\"\n\t}, {\n\t\tvalue: \"411700\",\n\t\ttext: \"驻马店市\"\n\t}]\n}, {\n\tvalue: '420000',\n\ttext: '湖北省',\n\tchildren: [{\n\t\tvalue: \"420100\",\n\t\ttext: \"武汉市\"\n\t}, {\n\t\tvalue: \"420200\",\n\t\ttext: \"黄石市\"\n\t}, {\n\t\tvalue: \"420300\",\n\t\ttext: \"十堰市\"\n\t}, {\n\t\tvalue: \"420500\",\n\t\ttext: \"宜昌市\"\n\t}, {\n\t\tvalue: \"420600\",\n\t\ttext: \"襄阳市\"\n\t}, {\n\t\tvalue: \"420700\",\n\t\ttext: \"鄂州市\"\n\t}, {\n\t\tvalue: \"420800\",\n\t\ttext: \"荆门市\"\n\t}, {\n\t\tvalue: \"420900\",\n\t\ttext: \"孝感市\"\n\t}, {\n\t\tvalue: \"421000\",\n\t\ttext: \"荆州市\"\n\t}, {\n\t\tvalue: \"421100\",\n\t\ttext: \"黄冈市\"\n\t}, {\n\t\tvalue: \"421200\",\n\t\ttext: \"咸宁市\"\n\t}, {\n\t\tvalue: \"421300\",\n\t\ttext: \"随州市\"\n\t}, {\n\t\tvalue: \"422800\",\n\t\ttext: \"恩施土家族苗族自治州\"\n\t}, {\n\t\tvalue: \"429004\",\n\t\ttext: \"仙桃市\"\n\t}, {\n\t\tvalue: \"429005\",\n\t\ttext: \"潜江市\"\n\t}, {\n\t\tvalue: \"429006\",\n\t\ttext: \"天门市\"\n\t}, {\n\t\tvalue: \"429021\",\n\t\ttext: \"神农架林区\"\n\t}]\n}, {\n\tvalue: '430000',\n\ttext: '湖南省',\n\tchildren: [{\n\t\tvalue: \"430100\",\n\t\ttext: \"长沙市\"\n\t}, {\n\t\tvalue: \"430200\",\n\t\ttext: \"株洲市\"\n\t}, {\n\t\tvalue: \"430300\",\n\t\ttext: \"湘潭市\"\n\t}, {\n\t\tvalue: \"430400\",\n\t\ttext: \"衡阳市\"\n\t}, {\n\t\tvalue: \"430500\",\n\t\ttext: \"邵阳市\"\n\t}, {\n\t\tvalue: \"430600\",\n\t\ttext: \"岳阳市\"\n\t}, {\n\t\tvalue: \"430700\",\n\t\ttext: \"常德市\"\n\t}, {\n\t\tvalue: \"430800\",\n\t\ttext: \"张家界市\"\n\t}, {\n\t\tvalue: \"430900\",\n\t\ttext: \"益阳市\"\n\t}, {\n\t\tvalue: \"431000\",\n\t\ttext: \"郴州市\"\n\t}, {\n\t\tvalue: \"431100\",\n\t\ttext: \"永州市\"\n\t}, {\n\t\tvalue: \"431200\",\n\t\ttext: \"怀化市\"\n\t}, {\n\t\tvalue: \"431300\",\n\t\ttext: \"娄底市\"\n\t}, {\n\t\tvalue: \"433100\",\n\t\ttext: \"湘西土家族苗族自治州\"\n\t}]\n}, {\n\tvalue: '440000',\n\ttext: '广东省',\n\tchildren: [{\n\t\tvalue: \"440100\",\n\t\ttext: \"广州市\"\n\t}, {\n\t\tvalue: \"440200\",\n\t\ttext: \"韶关市\"\n\t}, {\n\t\tvalue: \"440300\",\n\t\ttext: \"深圳市\"\n\t}, {\n\t\tvalue: \"440400\",\n\t\ttext: \"珠海市\"\n\t}, {\n\t\tvalue: \"440500\",\n\t\ttext: \"汕头市\"\n\t}, {\n\t\tvalue: \"440600\",\n\t\ttext: \"佛山市\"\n\t}, {\n\t\tvalue: \"440700\",\n\t\ttext: \"江门市\"\n\t}, {\n\t\tvalue: \"440800\",\n\t\ttext: \"湛江市\"\n\t}, {\n\t\tvalue: \"440900\",\n\t\ttext: \"茂名市\"\n\t}, {\n\t\tvalue: \"441200\",\n\t\ttext: \"肇庆市\"\n\t}, {\n\t\tvalue: \"441300\",\n\t\ttext: \"惠州市\"\n\t}, {\n\t\tvalue: \"441400\",\n\t\ttext: \"梅州市\"\n\t}, {\n\t\tvalue: \"441500\",\n\t\ttext: \"汕尾市\"\n\t}, {\n\t\tvalue: \"441600\",\n\t\ttext: \"河源市\"\n\t}, {\n\t\tvalue: \"441700\",\n\t\ttext: \"阳江市\"\n\t}, {\n\t\tvalue: \"441800\",\n\t\ttext: \"清远市\"\n\t}, {\n\t\tvalue: \"441900\",\n\t\ttext: \"东莞市\"\n\t}, {\n\t\tvalue: \"442000\",\n\t\ttext: \"中山市\"\n\t}, {\n\t\tvalue: \"445100\",\n\t\ttext: \"潮州市\"\n\t}, {\n\t\tvalue: \"445200\",\n\t\ttext: \"揭阳市\"\n\t}, {\n\t\tvalue: \"445300\",\n\t\ttext: \"云浮市\"\n\t}]\n}, {\n\tvalue: '450000',\n\ttext: '广西壮族',\n\tchildren: [{\n\t\tvalue: \"450100\",\n\t\ttext: \"南宁市\"\n\t}, {\n\t\tvalue: \"450200\",\n\t\ttext: \"柳州市\"\n\t}, {\n\t\tvalue: \"450300\",\n\t\ttext: \"桂林市\"\n\t}, {\n\t\tvalue: \"450400\",\n\t\ttext: \"梧州市\"\n\t}, {\n\t\tvalue: \"450500\",\n\t\ttext: \"北海市\"\n\t}, {\n\t\tvalue: \"450600\",\n\t\ttext: \"防城港市\"\n\t}, {\n\t\tvalue: \"450700\",\n\t\ttext: \"钦州市\"\n\t}, {\n\t\tvalue: \"450800\",\n\t\ttext: \"贵港市\"\n\t}, {\n\t\tvalue: \"450900\",\n\t\ttext: \"玉林市\"\n\t}, {\n\t\tvalue: \"451000\",\n\t\ttext: \"百色市\"\n\t}, {\n\t\tvalue: \"451100\",\n\t\ttext: \"贺州市\"\n\t}, {\n\t\tvalue: \"451200\",\n\t\ttext: \"河池市\"\n\t}, {\n\t\tvalue: \"451300\",\n\t\ttext: \"来宾市\"\n\t}, {\n\t\tvalue: \"451400\",\n\t\ttext: \"崇左市\"\n\t}]\n}, {\n\tvalue: '460000',\n\ttext: '海南省',\n\tchildren: [{\n\t\tvalue: \"460100\",\n\t\ttext: \"海口市\"\n\t}, {\n\t\tvalue: \"460200\",\n\t\ttext: \"三亚市\"\n\t}, {\n\t\tvalue: \"469001\",\n\t\ttext: \"五指山市\"\n\t}, {\n\t\tvalue: \"469002\",\n\t\ttext: \"琼海市\"\n\t}, {\n\t\tvalue: \"469003\",\n\t\ttext: \"儋州市\"\n\t}, {\n\t\tvalue: \"469005\",\n\t\ttext: \"文昌市\"\n\t}, {\n\t\tvalue: \"469006\",\n\t\ttext: \"万宁市\"\n\t}, {\n\t\tvalue: \"469007\",\n\t\ttext: \"东方市\"\n\t}, {\n\t\tvalue: \"469025\",\n\t\ttext: \"定安县\"\n\t}, {\n\t\tvalue: \"469026\",\n\t\ttext: \"屯昌县\"\n\t}, {\n\t\tvalue: \"469027\",\n\t\ttext: \"澄迈县\"\n\t}, {\n\t\tvalue: \"469028\",\n\t\ttext: \"临高县\"\n\t}, {\n\t\tvalue: \"469030\",\n\t\ttext: \"白沙黎族自治县\"\n\t}, {\n\t\tvalue: \"469031\",\n\t\ttext: \"昌江黎族自治县\"\n\t}, {\n\t\tvalue: \"469033\",\n\t\ttext: \"乐东黎族自治县\"\n\t}, {\n\t\tvalue: \"469034\",\n\t\ttext: \"陵水黎族自治县\"\n\t}, {\n\t\tvalue: \"469035\",\n\t\ttext: \"保亭黎族苗族自治县\"\n\t}, {\n\t\tvalue: \"469036\",\n\t\ttext: \"琼中黎族苗族自治县\"\n\t}, {\n\t\tvalue: \"469037\",\n\t\ttext: \"西沙群岛\"\n\t}, {\n\t\tvalue: \"469038\",\n\t\ttext: \"南沙群岛\"\n\t}, {\n\t\tvalue: \"469039\",\n\t\ttext: \"中沙群岛的岛礁及其海域\"\n\t}]\n}, {\n\tvalue: '500000',\n\ttext: '重庆',\n\tchildren: [{\n\t\tvalue: \"500101\",\n\t\ttext: \"万州区\"\n\t}, {\n\t\tvalue: \"500102\",\n\t\ttext: \"涪陵区\"\n\t}, {\n\t\tvalue: \"500103\",\n\t\ttext: \"渝中区\"\n\t}, {\n\t\tvalue: \"500104\",\n\t\ttext: \"大渡口区\"\n\t}, {\n\t\tvalue: \"500105\",\n\t\ttext: \"江北区\"\n\t}, {\n\t\tvalue: \"500106\",\n\t\ttext: \"沙坪坝区\"\n\t}, {\n\t\tvalue: \"500107\",\n\t\ttext: \"九龙坡区\"\n\t}, {\n\t\tvalue: \"500108\",\n\t\ttext: \"南岸区\"\n\t}, {\n\t\tvalue: \"500109\",\n\t\ttext: \"北碚区\"\n\t}, {\n\t\tvalue: \"500110\",\n\t\ttext: \"万盛区\"\n\t}, {\n\t\tvalue: \"500111\",\n\t\ttext: \"双桥区\"\n\t}, {\n\t\tvalue: \"500112\",\n\t\ttext: \"渝北区\"\n\t}, {\n\t\tvalue: \"500113\",\n\t\ttext: \"巴南区\"\n\t}, {\n\t\tvalue: \"500114\",\n\t\ttext: \"黔江区\"\n\t}, {\n\t\tvalue: \"500115\",\n\t\ttext: \"长寿区\"\n\t}, {\n\t\tvalue: \"500222\",\n\t\ttext: \"綦江县\"\n\t}, {\n\t\tvalue: \"500223\",\n\t\ttext: \"潼南县\"\n\t}, {\n\t\tvalue: \"500224\",\n\t\ttext: \"铜梁县\"\n\t}, {\n\t\tvalue: \"500225\",\n\t\ttext: \"大足县\"\n\t}, {\n\t\tvalue: \"500226\",\n\t\ttext: \"荣昌县\"\n\t}, {\n\t\tvalue: \"500227\",\n\t\ttext: \"璧山县\"\n\t}, {\n\t\tvalue: \"500228\",\n\t\ttext: \"梁平县\"\n\t}, {\n\t\tvalue: \"500229\",\n\t\ttext: \"城口县\"\n\t}, {\n\t\tvalue: \"500230\",\n\t\ttext: \"丰都县\"\n\t}, {\n\t\tvalue: \"500231\",\n\t\ttext: \"垫江县\"\n\t}, {\n\t\tvalue: \"500232\",\n\t\ttext: \"武隆县\"\n\t}, {\n\t\tvalue: \"500233\",\n\t\ttext: \"忠县\"\n\t}, {\n\t\tvalue: \"500234\",\n\t\ttext: \"开县\"\n\t}, {\n\t\tvalue: \"500235\",\n\t\ttext: \"云阳县\"\n\t}, {\n\t\tvalue: \"500236\",\n\t\ttext: \"奉节县\"\n\t}, {\n\t\tvalue: \"500237\",\n\t\ttext: \"巫山县\"\n\t}, {\n\t\tvalue: \"500238\",\n\t\ttext: \"巫溪县\"\n\t}, {\n\t\tvalue: \"500240\",\n\t\ttext: \"石柱土家族自治县\"\n\t}, {\n\t\tvalue: \"500241\",\n\t\ttext: \"秀山土家族苗族自治县\"\n\t}, {\n\t\tvalue: \"500242\",\n\t\ttext: \"酉阳土家族苗族自治县\"\n\t}, {\n\t\tvalue: \"500243\",\n\t\ttext: \"彭水苗族土家族自治县\"\n\t}, {\n\t\tvalue: \"500381\",\n\t\ttext: \"江津区\"\n\t}, {\n\t\tvalue: \"500382\",\n\t\ttext: \"合川区\"\n\t}, {\n\t\tvalue: \"500383\",\n\t\ttext: \"永川区\"\n\t}, {\n\t\tvalue: \"500384\",\n\t\ttext: \"南川区\"\n\t}, {\n\t\tvalue: \"500385\",\n\t\ttext: \"其它区\"\n\t}]\n}, {\n\tvalue: '510000',\n\ttext: '四川省',\n\tchildren: [{\n\t\tvalue: \"510100\",\n\t\ttext: \"成都市\"\n\t}, {\n\t\tvalue: \"510300\",\n\t\ttext: \"自贡市\"\n\t}, {\n\t\tvalue: \"510400\",\n\t\ttext: \"攀枝花市\"\n\t}, {\n\t\tvalue: \"510500\",\n\t\ttext: \"泸州市\"\n\t}, {\n\t\tvalue: \"510600\",\n\t\ttext: \"德阳市\"\n\t}, {\n\t\tvalue: \"510700\",\n\t\ttext: \"绵阳市\"\n\t}, {\n\t\tvalue: \"510800\",\n\t\ttext: \"广元市\"\n\t}, {\n\t\tvalue: \"510900\",\n\t\ttext: \"遂宁市\"\n\t}, {\n\t\tvalue: \"511000\",\n\t\ttext: \"内江市\"\n\t}, {\n\t\tvalue: \"511100\",\n\t\ttext: \"乐山市\"\n\t}, {\n\t\tvalue: \"511300\",\n\t\ttext: \"南充市\"\n\t}, {\n\t\tvalue: \"511400\",\n\t\ttext: \"眉山市\"\n\t}, {\n\t\tvalue: \"511500\",\n\t\ttext: \"宜宾市\"\n\t}, {\n\t\tvalue: \"511600\",\n\t\ttext: \"广安市\"\n\t}, {\n\t\tvalue: \"511700\",\n\t\ttext: \"达州市\"\n\t}, {\n\t\tvalue: \"511800\",\n\t\ttext: \"雅安市\"\n\t}, {\n\t\tvalue: \"511900\",\n\t\ttext: \"巴中市\"\n\t}, {\n\t\tvalue: \"512000\",\n\t\ttext: \"资阳市\"\n\t}, {\n\t\tvalue: \"513200\",\n\t\ttext: \"阿坝藏族羌族自治州\"\n\t}, {\n\t\tvalue: \"513300\",\n\t\ttext: \"甘孜藏族自治州\"\n\t}, {\n\t\tvalue: \"513400\",\n\t\ttext: \"凉山彝族自治州\"\n\t}]\n}, {\n\tvalue: '520000',\n\ttext: '贵州省',\n\tchildren: [{\n\t\tvalue: \"520100\",\n\t\ttext: \"贵阳市\"\n\t}, {\n\t\tvalue: \"520200\",\n\t\ttext: \"六盘水市\"\n\t}, {\n\t\tvalue: \"520300\",\n\t\ttext: \"遵义市\"\n\t}, {\n\t\tvalue: \"520400\",\n\t\ttext: \"安顺市\"\n\t}, {\n\t\tvalue: \"522200\",\n\t\ttext: \"铜仁地区\"\n\t}, {\n\t\tvalue: \"522300\",\n\t\ttext: \"黔西南布依族苗族自治州\"\n\t}, {\n\t\tvalue: \"522400\",\n\t\ttext: \"毕节地区\"\n\t}, {\n\t\tvalue: \"522600\",\n\t\ttext: \"黔东南苗族侗族自治州\"\n\t}, {\n\t\tvalue: \"522700\",\n\t\ttext: \"黔南布依族苗族自治州\"\n\t}]\n}, {\n\tvalue: '530000',\n\ttext: '云南省',\n\tchildren: [{\n\t\tvalue: \"530100\",\n\t\ttext: \"昆明市\"\n\t}, {\n\t\tvalue: \"530300\",\n\t\ttext: \"曲靖市\"\n\t}, {\n\t\tvalue: \"530400\",\n\t\ttext: \"玉溪市\"\n\t}, {\n\t\tvalue: \"530500\",\n\t\ttext: \"保山市\"\n\t}, {\n\t\tvalue: \"530600\",\n\t\ttext: \"昭通市\"\n\t}, {\n\t\tvalue: \"530700\",\n\t\ttext: \"丽江市\"\n\t}, {\n\t\tvalue: \"530800\",\n\t\ttext: \"普洱市\"\n\t}, {\n\t\tvalue: \"530900\",\n\t\ttext: \"临沧市\"\n\t}, {\n\t\tvalue: \"532300\",\n\t\ttext: \"楚雄彝族自治州\"\n\t}, {\n\t\tvalue: \"532500\",\n\t\ttext: \"红河哈尼族彝族自治州\"\n\t}, {\n\t\tvalue: \"532600\",\n\t\ttext: \"文山壮族苗族自治州\"\n\t}, {\n\t\tvalue: \"532800\",\n\t\ttext: \"西双版纳傣族自治州\"\n\t}, {\n\t\tvalue: \"532900\",\n\t\ttext: \"大理白族自治州\"\n\t}, {\n\t\tvalue: \"533100\",\n\t\ttext: \"德宏傣族景颇族自治州\"\n\t}, {\n\t\tvalue: \"533300\",\n\t\ttext: \"怒江傈僳族自治州\"\n\t}, {\n\t\tvalue: \"533400\",\n\t\ttext: \"迪庆藏族自治州\"\n\t}]\n}, {\n\tvalue: '540000',\n\ttext: '西藏',\n\tchildren: [{\n\t\tvalue: \"540100\",\n\t\ttext: \"拉萨市\"\n\t}, {\n\t\tvalue: \"542100\",\n\t\ttext: \"昌都地区\"\n\t}, {\n\t\tvalue: \"542200\",\n\t\ttext: \"山南地区\"\n\t}, {\n\t\tvalue: \"542300\",\n\t\ttext: \"日喀则地区\"\n\t}, {\n\t\tvalue: \"542400\",\n\t\ttext: \"那曲地区\"\n\t}, {\n\t\tvalue: \"542500\",\n\t\ttext: \"阿里地区\"\n\t}, {\n\t\tvalue: \"542600\",\n\t\ttext: \"林芝地区\"\n\t}]\n}, {\n\tvalue: '610000',\n\ttext: '陕西省',\n\tchildren: [{\n\t\tvalue: \"610100\",\n\t\ttext: \"西安市\"\n\t}, {\n\t\tvalue: \"610200\",\n\t\ttext: \"铜川市\"\n\t}, {\n\t\tvalue: \"610300\",\n\t\ttext: \"宝鸡市\"\n\t}, {\n\t\tvalue: \"610400\",\n\t\ttext: \"咸阳市\"\n\t}, {\n\t\tvalue: \"610500\",\n\t\ttext: \"渭南市\"\n\t}, {\n\t\tvalue: \"610600\",\n\t\ttext: \"延安市\"\n\t}, {\n\t\tvalue: \"610700\",\n\t\ttext: \"汉中市\"\n\t}, {\n\t\tvalue: \"610800\",\n\t\ttext: \"榆林市\"\n\t}, {\n\t\tvalue: \"610900\",\n\t\ttext: \"安康市\"\n\t}, {\n\t\tvalue: \"611000\",\n\t\ttext: \"商洛市\"\n\t}]\n}, {\n\tvalue: '620000',\n\ttext: '甘肃省',\n\tchildren: [{\n\t\tvalue: \"620100\",\n\t\ttext: \"兰州市\"\n\t}, {\n\t\tvalue: \"620200\",\n\t\ttext: \"嘉峪关市\"\n\t}, {\n\t\tvalue: \"620300\",\n\t\ttext: \"金昌市\"\n\t}, {\n\t\tvalue: \"620400\",\n\t\ttext: \"白银市\"\n\t}, {\n\t\tvalue: \"620500\",\n\t\ttext: \"天水市\"\n\t}, {\n\t\tvalue: \"620600\",\n\t\ttext: \"武威市\"\n\t}, {\n\t\tvalue: \"620700\",\n\t\ttext: \"张掖市\"\n\t}, {\n\t\tvalue: \"620800\",\n\t\ttext: \"平凉市\"\n\t}, {\n\t\tvalue: \"620900\",\n\t\ttext: \"酒泉市\"\n\t}, {\n\t\tvalue: \"621000\",\n\t\ttext: \"庆阳市\"\n\t}, {\n\t\tvalue: \"621100\",\n\t\ttext: \"定西市\"\n\t}, {\n\t\tvalue: \"621200\",\n\t\ttext: \"陇南市\"\n\t}, {\n\t\tvalue: \"622900\",\n\t\ttext: \"临夏回族自治州\"\n\t}, {\n\t\tvalue: \"623000\",\n\t\ttext: \"甘南藏族自治州\"\n\t}]\n}, {\n\tvalue: '630000',\n\ttext: '青海省',\n\tchildren: [{\n\t\tvalue: \"630100\",\n\t\ttext: \"西宁市\"\n\t}, {\n\t\tvalue: \"632100\",\n\t\ttext: \"海东地区\"\n\t}, {\n\t\tvalue: \"632200\",\n\t\ttext: \"海北藏族自治州\"\n\t}, {\n\t\tvalue: \"632300\",\n\t\ttext: \"黄南藏族自治州\"\n\t}, {\n\t\tvalue: \"632500\",\n\t\ttext: \"海南藏族自治州\"\n\t}, {\n\t\tvalue: \"632600\",\n\t\ttext: \"果洛藏族自治州\"\n\t}, {\n\t\tvalue: \"632700\",\n\t\ttext: \"玉树藏族自治州\"\n\t}, {\n\t\tvalue: \"632800\",\n\t\ttext: \"海西蒙古族藏族自治州\"\n\t}]\n}, {\n\tvalue: '640000',\n\ttext: '宁夏',\n\tchildren: [{\n\t\tvalue: \"640100\",\n\t\ttext: \"银川市\"\n\t}, {\n\t\tvalue: \"640200\",\n\t\ttext: \"石嘴山市\"\n\t}, {\n\t\tvalue: \"640300\",\n\t\ttext: \"吴忠市\"\n\t}, {\n\t\tvalue: \"640400\",\n\t\ttext: \"固原市\"\n\t}, {\n\t\tvalue: \"640500\",\n\t\ttext: \"中卫市\"\n\t}]\n}, {\n\tvalue: '650000',\n\ttext: '新疆',\n\tchildren: [{\n\t\tvalue: \"650100\",\n\t\ttext: \"乌鲁木齐市\"\n\t}, {\n\t\tvalue: \"650200\",\n\t\ttext: \"克拉玛依市\"\n\t}, {\n\t\tvalue: \"652100\",\n\t\ttext: \"吐鲁番地区\"\n\t}, {\n\t\tvalue: \"652200\",\n\t\ttext: \"哈密地区\"\n\t}, {\n\t\tvalue: \"652300\",\n\t\ttext: \"昌吉回族自治州\"\n\t}, {\n\t\tvalue: \"652700\",\n\t\ttext: \"博尔塔拉蒙古自治州\"\n\t}, {\n\t\tvalue: \"652800\",\n\t\ttext: \"巴音郭楞蒙古自治州\"\n\t}, {\n\t\tvalue: \"652900\",\n\t\ttext: \"阿克苏地区\"\n\t}, {\n\t\tvalue: \"653000\",\n\t\ttext: \"克孜勒苏柯尔克孜自治州\"\n\t}, {\n\t\tvalue: \"653100\",\n\t\ttext: \"喀什地区\"\n\t}, {\n\t\tvalue: \"653200\",\n\t\ttext: \"和田地区\"\n\t}, {\n\t\tvalue: \"654000\",\n\t\ttext: \"伊犁哈萨克自治州\"\n\t}, {\n\t\tvalue: \"654200\",\n\t\ttext: \"塔城地区\"\n\t}, {\n\t\tvalue: \"654300\",\n\t\ttext: \"阿勒泰地区\"\n\t}, {\n\t\tvalue: \"659001\",\n\t\ttext: \"石河子市\"\n\t}, {\n\t\tvalue: \"659002\",\n\t\ttext: \"阿拉尔市\"\n\t}, {\n\t\tvalue: \"659003\",\n\t\ttext: \"图木舒克市\"\n\t}, {\n\t\tvalue: \"659004\",\n\t\ttext: \"五家渠市\"\n\t}]\n}, {\n\tvalue: '710000',\n\ttext: '台湾省',\n\tchildren: [{\n\t\tvalue: \"710100\",\n\t\ttext: \"台北市\"\n\t}, {\n\t\tvalue: \"710200\",\n\t\ttext: \"高雄市\"\n\t}, {\n\t\tvalue: \"710300\",\n\t\ttext: \"台南市\"\n\t}, {\n\t\tvalue: \"710400\",\n\t\ttext: \"台中市\"\n\t}, {\n\t\tvalue: \"710500\",\n\t\ttext: \"金门县\"\n\t}, {\n\t\tvalue: \"710600\",\n\t\ttext: \"南投县\"\n\t}, {\n\t\tvalue: \"710700\",\n\t\ttext: \"基隆市\"\n\t}, {\n\t\tvalue: \"710800\",\n\t\ttext: \"新竹市\"\n\t}, {\n\t\tvalue: \"710900\",\n\t\ttext: \"嘉义市\"\n\t}, {\n\t\tvalue: \"711100\",\n\t\ttext: \"新北市\"\n\t}, {\n\t\tvalue: \"711200\",\n\t\ttext: \"宜兰县\"\n\t}, {\n\t\tvalue: \"711300\",\n\t\ttext: \"新竹县\"\n\t}, {\n\t\tvalue: \"711400\",\n\t\ttext: \"桃园县\"\n\t}, {\n\t\tvalue: \"711500\",\n\t\ttext: \"苗栗县\"\n\t}, {\n\t\tvalue: \"711700\",\n\t\ttext: \"彰化县\"\n\t}, {\n\t\tvalue: \"711900\",\n\t\ttext: \"嘉义县\"\n\t}, {\n\t\tvalue: \"712100\",\n\t\ttext: \"云林县\"\n\t}, {\n\t\tvalue: \"712400\",\n\t\ttext: \"屏东县\"\n\t}, {\n\t\tvalue: \"712500\",\n\t\ttext: \"台东县\"\n\t}, {\n\t\tvalue: \"712600\",\n\t\ttext: \"花莲县\"\n\t}, {\n\t\tvalue: \"712700\",\n\t\ttext: \"澎湖县\"\n\t}]\n}, {\n\tvalue: '810000',\n\ttext: '香港',\n\tchildren: [{\n\t\tvalue: \"810100\",\n\t\ttext: \"香港岛\"\n\t}, {\n\t\tvalue: \"810200\",\n\t\ttext: \"九龙\"\n\t}, {\n\t\tvalue: \"810300\",\n\t\ttext: \"新界\"\n\t}]\n}, {\n\tvalue: '820000',\n\ttext: '澳门',\n\tchildren: [{\n\t\tvalue: \"820100\",\n\t\ttext: \"澳门半岛\"\n\t}, {\n\t\tvalue: \"820200\",\n\t\ttext: \"离岛\"\n\t}]\n}, {\n\tvalue: '990000',\n\ttext: '海外',\n\tchildren: [{\n\t\tvalue: \"990100\",\n\t\ttext: \"海外\"\n\t}]\n}]"
  },
  {
    "path": "examples/hello-mui/js/feedback.js",
    "content": "/*!\n * ======================================================\n * FeedBack Template For MUI (http://dev.dcloud.net.cn/mui)\n * =======================================================\n * @version:1.0.0\n * @author:cuihongbao@dcloud.io\n */\n(function() {\n\tvar index = 1;\n\tvar size = null;\n\tvar imageIndexIdNum = 0;\n\tvar starIndex = 0;\n\tvar feedback = {\n\t\tquestion: document.getElementById('question'), \n\t\tcontact: document.getElementById('contact'), \n\t\timageList: document.getElementById('image-list'),\n\t\tsubmitBtn: document.getElementById('submit')\n\t};\n\tvar url = 'https://service.dcloud.net.cn/feedback';\n\tfeedback.files = [];\n\tfeedback.uploader = null;  \n\tfeedback.deviceInfo = null; \n\tmui.plusReady(function() {\n\t\t//设备信息，无需修改\n\t\tfeedback.deviceInfo = {\n\t\t\tappid: plus.runtime.appid, \n\t\t\timei: plus.device.imei, //设备标识\n\t\t\timages: feedback.files, //图片文件\n\t\t\tp: mui.os.android ? 'a' : 'i', //平台类型，i表示iOS平台，a表示Android平台。\n\t\t\tmd: plus.device.model, //设备型号\n\t\t\tapp_version: plus.runtime.version,\n\t\t\tplus_version: plus.runtime.innerVersion, //基座版本号\n\t\t\tos:  mui.os.version,\n\t\t\tnet: ''+plus.networkinfo.getCurrentType()\n\t\t}\n\t});\n\t/**\n\t *提交成功之后，恢复表单项 \n\t */\n\tfeedback.clearForm = function() {\n\t\tfeedback.question.value = '';\n\t\tfeedback.contact.value = '';\n\t\tfeedback.imageList.innerHTML = '';\n\t\tfeedback.newPlaceholder();\n\t\tfeedback.files = [];\n\t\tindex = 0;\n\t\tsize = 0;\n\t\timageIndexIdNum = 0;\n\t\tstarIndex = 0;\n\t\t//清除所有星标\n\t\tmui('.icons i').each(function (index,element) {\n\t\t\tif (element.classList.contains('mui-icon-star-filled')) {\n\t\t\t\telement.classList.add('mui-icon-star')\n\t  \t\t\telement.classList.remove('mui-icon-star-filled')\n\t\t\t}\n\t\t})\n\t};\n\tfeedback.getFileInputArray = function() {\n\t\treturn [].slice.call(feedback.imageList.querySelectorAll('.file'));\n\t};\n\tfeedback.addFile = function(path) {\n\t\tfeedback.files.push({name:\"images\"+index,path:path,id:\"img-\"+index});\n\t\tindex++;\n\t};\n\t/**\n\t * 初始化图片域占位\n\t */\n\tfeedback.newPlaceholder = function() {\n\t\tvar fileInputArray = feedback.getFileInputArray();\n\t\tif (fileInputArray &&\n\t\t\tfileInputArray.length > 0 &&\n\t\t\tfileInputArray[fileInputArray.length - 1].parentNode.classList.contains('space')) {\n\t\t\treturn;\n\t\t};\n\t\timageIndexIdNum++;\n\t\tvar placeholder = document.createElement('div');\n\t\tplaceholder.setAttribute('class', 'image-item space');\n\t\tvar up = document.createElement(\"div\");\n\t\tup.setAttribute('class','image-up')\n\t\t//删除图片\n\t\tvar closeButton = document.createElement('div');\n\t\tcloseButton.setAttribute('class', 'image-close');\n\t\tcloseButton.innerHTML = 'X';\n\t\tcloseButton.id = \"img-\"+index;\n\t\t//小X的点击事件\n\t\tcloseButton.addEventListener('tap', function(event) {\n\t\t\tsetTimeout(function() {\n\t\t\t\tfor(var temp=0;temp<feedback.files.length;temp++){\n\t\t\t\t\tif(feedback.files[temp].id==closeButton.id){\n\t\t\t\t\t\tfeedback.files.splice(temp,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfeedback.imageList.removeChild(placeholder);\n\t\t\t}, 0);\n\t\t\treturn false;\n\t\t}, false);\n\t\t\n\t\t//\n\t\tvar fileInput = document.createElement('div');\n\t\tfileInput.setAttribute('class', 'file');\n\t\tfileInput.setAttribute('id', 'image-' + imageIndexIdNum);\n\t\tfileInput.addEventListener('tap', function(event) {\n\t\t\tvar self = this;\n\t\t\tvar index = (this.id).substr(-1);\n\t\t\t\n\t\t\tplus.gallery.pick(function(e) {\n//\t\t\t\tconsole.log(\"event:\"+e);\n\t\t\t\tvar name = e.substr(e.lastIndexOf('/') + 1);\n\t\t\t\tconsole.log(\"name:\"+name);\n\t\t\t\t\t\n\t\t\t\tplus.zip.compressImage({\n\t\t\t\t\tsrc: e,\n\t\t\t\t\tdst: '_doc/' + name,\n\t\t\t\t\toverwrite: true,\n\t\t\t\t\tquality: 50\n\t\t\t\t}, function(zip) {\n\t\t\t\t\tsize += zip.size  \n\t\t\t\t\tconsole.log(\"filesize:\"+zip.size+\",totalsize:\"+size);\n\t\t\t\t\tif (size > (10*1024*1024)) {\n\t\t\t\t\t\treturn mui.toast('文件超大,请重新选择~');\n\t\t\t\t\t}\n\t\t\t\t\tif (!self.parentNode.classList.contains('space')) { //已有图片\n\t\t\t\t\t\tfeedback.files.splice(index-1,1,{name:\"images\"+index,path:e});\n\t\t\t\t\t} else { //加号\n\t\t\t\t\t\tplaceholder.classList.remove('space');\n\t\t\t\t\t\tfeedback.addFile(zip.target);\n\t\t\t\t\t\tfeedback.newPlaceholder();\n\t\t\t\t\t}\n\t\t\t\t\tup.classList.remove('image-up');\n\t\t\t\t\tplaceholder.style.backgroundImage = 'url(' + zip.target + ')';\n\t\t\t\t}, function(zipe) {\n\t\t\t\t\tmui.toast('压缩失败！')\n\t\t\t\t});\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t}, function(e) {\n\t\t\t\tmui.toast(e.message);\n\t\t\t},{});\n\t\t}, false);\n\t\tplaceholder.appendChild(closeButton);\n\t\tplaceholder.appendChild(up);\n\t\tplaceholder.appendChild(fileInput);\n\t\tfeedback.imageList.appendChild(placeholder);\n\t};\n\tfeedback.newPlaceholder();\n\tfeedback.submitBtn.addEventListener('tap', function(event) {\n\t\tif (feedback.question.value == '' ||\n\t\t\t(feedback.contact.value != '' &&\n\t\t\t\tfeedback.contact.value.search(/^(\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+)|([1-9]\\d{4,9})$/) != 0)) {\n\t\t\treturn mui.toast('信息填写不符合规范');\n\t\t}\n\t\tif (feedback.question.value.length > 200 || feedback.contact.value.length > 200) {\n\t\t\treturn mui.toast('信息超长,请重新填写~')\n\t\t}\n\t\t//判断网络连接\n\t\tif(plus.networkinfo.getCurrentType()==plus.networkinfo.CONNECTION_NONE){\n\t\t\treturn mui.toast(\"连接网络失败，请稍后再试\");\n\t\t}\n\t\tfeedback.send(mui.extend({}, feedback.deviceInfo, {\n\t\t\tcontent: feedback.question.value,\n\t\t\tcontact: feedback.contact.value,\n\t\t\timages: feedback.files,\n\t\t\tscore:''+starIndex\n\t\t})) \n\t}, false)\n\tfeedback.send = function(content) {\n\t\tfeedback.uploader = plus.uploader.createUpload(url, {\n\t\t\tmethod: 'POST'\n\t\t}, function(upload, status) {\n//\t\t\tplus.nativeUI.closeWaiting()\n\t\t\tconsole.log(\"upload cb:\"+upload.responseText);\n\t\t\tif(status==200){\n\t\t\t\tvar data = JSON.parse(upload.responseText);\n\t\t\t\t//上传成功，重置表单\n\t\t\t\tif (data.ret === 0 && data.desc === 'Success') {\n//\t\t\t\t\tmui.toast('反馈成功~')\n\t\t\t\t\tconsole.log(\"upload success\");\n//\t\t\t\t\tfeedback.clearForm();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.log(\"upload fail\");\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t//添加上传数据\n\t\tmui.each(content, function(index, element) {\n\t\t\tif (index !== 'images') {\n\t\t\t\tconsole.log(\"addData:\"+index+\",\"+element);\n//\t\t\t\tconsole.log(index);\n\t\t\t\tfeedback.uploader.addData(index, element)\n\t\t\t} \n\t\t});\n\t\t//添加上传文件\n\t\tmui.each(feedback.files, function(index, element) {\n\t\t\tvar f = feedback.files[index];\n\t\t\tconsole.log(\"addFile:\"+JSON.stringify(f));\n\t\t\tfeedback.uploader.addFile(f.path, {\n\t\t\t\tkey: f.name\n\t\t\t});\n\t\t});\n\t\t//开始上传任务\n\t\tfeedback.uploader.start();\n\t\tmui.alert(\"感谢反馈，点击确定关闭\",\"问题反馈\",\"确定\",function () {\n\t\t\tfeedback.clearForm();\n\t\t\tmui.back();\n\t\t});\n//\t\tplus.nativeUI.showWaiting();\n\t};\n\t\n\t //应用评分\n\t mui('.icons').on('tap','i',function(){\n\t  \tvar index = parseInt(this.getAttribute(\"data-index\"));\n\t  \tvar parent = this.parentNode;\n\t  \tvar children = parent.children;\n\t  \tif(this.classList.contains(\"mui-icon-star\")){\n\t  \t\tfor(var i=0;i<index;i++){\n  \t\t\t\tchildren[i].classList.remove('mui-icon-star');\n  \t\t\t\tchildren[i].classList.add('mui-icon-star-filled');\n\t  \t\t}\n\t  \t}else{\n\t  \t\tfor (var i = index; i < 5; i++) {\n\t  \t\t\tchildren[i].classList.add('mui-icon-star')\n\t  \t\t\tchildren[i].classList.remove('mui-icon-star-filled')\n\t  \t\t}\n\t  \t}\n\t  \tstarIndex = index;\n  });\n  \t//选择快捷输入\n\tmui('.mui-popover').on('tap','li',function(e){\n\t  document.getElementById(\"question\").value = document.getElementById(\"question\").value + this.children[0].innerHTML;\n\t  mui('.mui-popover').popover('toggle')\n\t}) \n})();\n"
  },
  {
    "path": "examples/hello-mui/js/mui.dtpicker.js",
    "content": "/**\n * 日期时间插件\n * varstion 1.0.5\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar domBuffer = '<div class=\"mui-dtpicker\" data-type=\"datetime\">\\\n\t\t<div class=\"mui-dtpicker-header\">\\\n\t\t\t<button data-id=\"btn-cancel\" class=\"mui-btn\">取消</button>\\\n\t\t\t<button data-id=\"btn-ok\" class=\"mui-btn mui-btn-blue\">确定</button>\\\n\t\t</div>\\\n\t\t<div class=\"mui-dtpicker-title\"><h5 data-id=\"title-y\">年</h5><h5 data-id=\"title-m\">月</h5><h5 data-id=\"title-d\">日</h5><h5 data-id=\"title-h\">时</h5><h5 data-id=\"title-i\">分</h5></div>\\\n\t\t<div class=\"mui-dtpicker-body\">\\\n\t\t\t<div data-id=\"picker-y\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-m\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-d\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-h\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-i\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t</div>\\\n\t</div>';\n\n\t//plugin\n\tvar DtPicker = $.DtPicker = $.Class.extend({\n\t\tinit: function(options) {\n\t\t\tvar self = this;\n\t\t\tvar _picker = $.dom(domBuffer)[0];\n\t\t\tdocument.body.appendChild(_picker);\n\t\t\t$('[data-id*=\"picker\"]', _picker).picker();\n\t\t\tvar ui = self.ui = {\n\t\t\t\tpicker: _picker,\n\t\t\t\tmask: $.createMask(),\n\t\t\t\tok: $('[data-id=\"btn-ok\"]', _picker)[0],\n\t\t\t\tcancel: $('[data-id=\"btn-cancel\"]', _picker)[0],\n\t\t\t\ty: $('[data-id=\"picker-y\"]', _picker)[0],\n\t\t\t\tm: $('[data-id=\"picker-m\"]', _picker)[0],\n\t\t\t\td: $('[data-id=\"picker-d\"]', _picker)[0],\n\t\t\t\th: $('[data-id=\"picker-h\"]', _picker)[0],\n\t\t\t\ti: $('[data-id=\"picker-i\"]', _picker)[0],\n\t\t\t\tlabels: $('[data-id*=\"title-\"]', _picker),\n\t\t\t};\n\t\t\tui.cancel.addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tui.ok.addEventListener('tap', function() {\n\t\t\t\tvar rs = self.callback(self.getSelected());\n\t\t\t\tif (rs !== false) {\n\t\t\t\t\tself.hide();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.y.addEventListener('change', function(e) { //目前的change事件容易导致级联触发\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) {\n\t\t\t\t\tself._createMonth();\n\t\t\t\t} else {\n\t\t\t\t\tself._createDay();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.m.addEventListener('change', function(e) {\n\t\t\t\tself._createDay();\n\t\t\t}, false);\n\t\t\tui.d.addEventListener('change', function(e) {\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) { //仅提供了beginDate时，触发day,hours,minutes的change\n\t\t\t\t\tself._createHours();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.h.addEventListener('change', function(e) {\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) {\n\t\t\t\t\tself._createMinutes();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.mask[0].addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself._create(options);\n\t\t\t//防止滚动穿透\n\t\t\tself.ui.picker.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t\tself.ui.picker.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t},\n\t\tgetSelected: function() {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tvar type = self.options.type;\n\t\t\tvar selected = {\n\t\t\t\ttype: type,\n\t\t\t\ty: ui.y.picker.getSelectedItem(),\n\t\t\t\tm: ui.m.picker.getSelectedItem(),\n\t\t\t\td: ui.d.picker.getSelectedItem(),\n\t\t\t\th: ui.h.picker.getSelectedItem(),\n\t\t\t\ti: ui.i.picker.getSelectedItem(),\n\t\t\t\ttoString: function() {\n\t\t\t\t\treturn this.value;\n\t\t\t\t}\n\t\t\t};\n\t\t\tswitch (type) {\n\t\t\t\tcase 'datetime':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'time':\n\t\t\t\t\tselected.value = selected.h.value + ':' + selected.i.value;\n\t\t\t\t\tselected.text = selected.h.text + ':' + selected.i.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'month':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'hour':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\tsetSelectedValue: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tvar parsedValue = self._parseValue(value);\n\t\t\t//TODO 嵌套过多，因为picker的change时间是异步(考虑到性能)的，所以为了保证change之后再setSelected，目前使用回调处理\n\t\t\tui.y.picker.setSelectedValue(parsedValue.y, 0, function() {\n\t\t\t\tui.m.picker.setSelectedValue(parsedValue.m, 0, function() {\n\t\t\t\t\tui.d.picker.setSelectedValue(parsedValue.d, 0, function() {\n\t\t\t\t\t\tui.h.picker.setSelectedValue(parsedValue.h, 0, function() {\n\t\t\t\t\t\t\tui.i.picker.setSelectedValue(parsedValue.i, 0);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tisLeapYear: function(year) {\n\t\t\treturn (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);\n\t\t},\n\t\t_inArray: function(array, item) {\n\t\t\tfor (var index in array) {\n\t\t\t\tvar _item = array[index];\n\t\t\t\tif (_item === item) return true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tgetDayNum: function(year, month) {\n\t\t\tvar self = this;\n\t\t\tif (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) {\n\t\t\t\treturn 31;\n\t\t\t} else if (self._inArray([4, 6, 9, 11], month)) {\n\t\t\t\treturn 30;\n\t\t\t} else if (self.isLeapYear(year)) {\n\t\t\t\treturn 29;\n\t\t\t} else {\n\t\t\t\treturn 28;\n\t\t\t}\n\t\t},\n\t\t_fill: function(num) {\n\t\t\tnum = num.toString();\n\t\t\tif (num.length < 2) {\n\t\t\t\tnum = 0 + num;\n\t\t\t}\n\t\t\treturn num;\n\t\t},\n\t\t_isBeginYear: function() {\n\t\t\treturn this.options.beginYear === parseInt(this.ui.y.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginMonth: function() {\n\t\t\treturn this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginDay: function() {\n\t\t\treturn this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginHours: function() {\n\t\t\treturn this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.picker.getSelectedValue());\n\t\t},\n\t\t_isEndYear: function() {\n\t\t\treturn this.options.endYear === parseInt(this.ui.y.picker.getSelectedValue());\n\t\t},\n\t\t_isEndMonth: function() {\n\t\t\treturn this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.picker.getSelectedValue());\n\t\t},\n\t\t_isEndDay: function() {\n\t\t\treturn this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.picker.getSelectedValue());\n\t\t},\n\t\t_isEndHours: function() {\n\t\t\treturn this._isEndDay() && this.options.endHours === parseInt(this.ui.h.picker.getSelectedValue());\n\t\t},\n\t\t_createYear: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\t//生成年列表\n\t\t\tvar yArray = [];\n\t\t\tif (options.customData.y) {\n\t\t\t\tyArray = options.customData.y;\n\t\t\t} else {\n\t\t\t\tvar yBegin = options.beginYear;\n\t\t\t\tvar yEnd = options.endYear;\n\t\t\t\tfor (var y = yBegin; y <= yEnd; y++) {\n\t\t\t\t\tyArray.push({\n\t\t\t\t\t\ttext: y + '',\n\t\t\t\t\t\tvalue: y\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.y.picker.setItems(yArray);\n\t\t\t//ui.y.picker.setSelectedValue(current);\n\t\t},\n\t\t_createMonth: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成月列表\n\t\t\tvar mArray = [];\n\t\t\tif (options.customData.m) {\n\t\t\t\tmArray = options.customData.m;\n\t\t\t} else {\n\t\t\t\tvar m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1;\n\t\t\t\tvar maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12;\n\t\t\t\tfor (; m <= maxMonth; m++) {\n\t\t\t\t\tvar val = self._fill(m);\n\t\t\t\t\tmArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.m.picker.setItems(mArray);\n\t\t\t//ui.m.picker.setSelectedValue(current);\n\t\t},\n\t\t_createDay: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成日列表\n\t\t\tvar dArray = [];\n\t\t\tif (options.customData.d) {\n\t\t\t\tdArray = options.customData.d;\n\t\t\t} else {\n\t\t\t\tvar d = self._isBeginMonth() ? options.beginDay : 1;\n\t\t\t\tvar maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.picker.getSelectedValue()), parseInt(this.ui.m.picker.getSelectedValue()));\n\t\t\t\tfor (; d <= maxDay; d++) {\n\t\t\t\t\tvar val = self._fill(d);\n\t\t\t\t\tdArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.d.picker.setItems(dArray);\n\t\t\tcurrent = current || ui.d.picker.getSelectedValue();\n\t\t\t//ui.d.picker.setSelectedValue(current);\n\t\t},\n\t\t_createHours: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\t//生成时列表\n\t\t\tvar hArray = [];\n\t\t\tif (options.customData.h) {\n\t\t\t\thArray = options.customData.h;\n\t\t\t} else {\n\t\t\t\tvar h = self._isBeginDay() ? options.beginHours : 0;\n\t\t\t\tvar maxHours = self._isEndDay() ? options.endHours : 23;\n\t\t\t\tfor (; h <= maxHours; h++) {\n\t\t\t\t\tvar val = self._fill(h);\n\t\t\t\t\thArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.h.picker.setItems(hArray);\n\t\t\t//ui.h.picker.setSelectedValue(current);\n\t\t},\n\t\t_createMinutes: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成分列表\n\t\t\tvar iArray = [];\n\t\t\tif (options.customData.i) {\n\t\t\t\tiArray = options.customData.i;\n\t\t\t} else {\n\t\t\t\tvar i = self._isBeginHours() ? options.beginMinutes : 0;\n\t\t\t\tvar maxMinutes = self._isEndHours() ? options.endMinutes : 59;\n\t\t\t\tfor (; i <= maxMinutes; i++) {\n\t\t\t\t\tvar val = self._fill(i);\n\t\t\t\t\tiArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.i.picker.setItems(iArray);\n\t\t\t//ui.i.picker.setSelectedValue(current);\n\t\t},\n\t\t_setLabels: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\tui.labels.each(function(i, label) {\n\t\t\t\tlabel.innerText = options.labels[i];\n\t\t\t});\n\t\t},\n\t\t_setButtons: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\tui.cancel.innerText = options.buttons[0];\n\t\t\tui.ok.innerText = options.buttons[1];\n\t\t},\n\t\t_parseValue: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar rs = {};\n\t\t\tif (value) {\n\t\t\t\tvar parts = value.replace(\":\", \"-\").replace(\" \", \"-\").split(\"-\");\n\t\t\t\trs.y = parts[0];\n\t\t\t\trs.m = parts[1];\n\t\t\t\trs.d = parts[2];\n\t\t\t\trs.h = parts[3];\n\t\t\t\trs.i = parts[4];\n\t\t\t} else {\n\t\t\t\tvar now = new Date();\n\t\t\t\trs.y = now.getFullYear();\n\t\t\t\trs.m = now.getMonth() + 1;\n\t\t\t\trs.d = now.getDate();\n\t\t\t\trs.h = now.getHours();\n\t\t\t\trs.i = now.getMinutes();\n\t\t\t}\n\t\t\treturn rs;\n\t\t},\n\t\t_create: function(options) {\n\t\t\tvar self = this;\n\t\t\toptions = options || {};\n\t\t\toptions.labels = options.labels || ['年', '月', '日', '时', '分'];\n\t\t\toptions.buttons = options.buttons || ['取消', '确定'];\n\t\t\toptions.type = options.type || 'datetime';\n\t\t\toptions.customData = options.customData || {};\n\t\t\tself.options = options;\n\t\t\tvar now = new Date();\n\t\t\tvar beginDate = options.beginDate;\n\t\t\tif (beginDate instanceof Date && !isNaN(beginDate.valueOf())) { //设定了开始日期\n\t\t\t\toptions.beginYear = beginDate.getFullYear();\n\t\t\t\toptions.beginMonth = beginDate.getMonth() + 1;\n\t\t\t\toptions.beginDay = beginDate.getDate();\n\t\t\t\toptions.beginHours = beginDate.getHours();\n\t\t\t\toptions.beginMinutes = beginDate.getMinutes();\n\t\t\t}\n\t\t\tvar endDate = options.endDate;\n\t\t\tif (endDate instanceof Date && !isNaN(endDate.valueOf())) { //设定了结束日期\n\t\t\t\toptions.endYear = endDate.getFullYear();\n\t\t\t\toptions.endMonth = endDate.getMonth() + 1;\n\t\t\t\toptions.endDay = endDate.getDate();\n\t\t\t\toptions.endHours = endDate.getHours();\n\t\t\t\toptions.endMinutes = endDate.getMinutes();\n\t\t\t}\n\t\t\toptions.beginYear = options.beginYear || (now.getFullYear() - 5);\n\t\t\toptions.endYear = options.endYear || (now.getFullYear() + 5);\n\t\t\tvar ui = self.ui;\n\t\t\t//设定label\n\t\t\tself._setLabels();\n\t\t\tself._setButtons();\n\t\t\t//设定类型\n\t\t\tui.picker.setAttribute('data-type', options.type);\n\t\t\t//生成\n\t\t\tself._createYear();\n\t\t\tself._createMonth();\n\t\t\tself._createDay();\n\t\t\tself._createHours();\n\t\t\tself._createMinutes();\n\t\t\t//设定默认值\n\t\t\tself.setSelectedValue(options.value);\n\t\t},\n\t\t//显示\n\t\tshow: function(callback) {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tself.callback = callback || $.noop;\n\t\t\tui.mask.show();\n\t\t\tdocument.body.classList.add($.className('dtpicker-active-for-page'));\n\t\t\tui.picker.classList.add($.className('active'));\n\t\t\t//处理物理返回键\n\t\t\tself.__back = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tself.hide();\n\t\t\t};\n\t\t},\n\t\thide: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.disposed) return;\n\t\t\tvar ui = self.ui;\n\t\t\tui.picker.classList.remove($.className('active'));\n\t\t\tui.mask.close();\n\t\t\tdocument.body.classList.remove($.className('dtpicker-active-for-page'));\n\t\t\t//处理物理返回键\n\t\t\t$.back = self.__back;\n\t\t},\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.hide();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.ui.picker.parentNode.removeChild(self.ui.picker);\n\t\t\t\tfor (var name in self) {\n\t\t\t\t\tself[name] = null;\n\t\t\t\t\tdelete self[name];\n\t\t\t\t};\n\t\t\t\tself.disposed = true;\n\t\t\t}, 300);\n\t\t}\n\t});\n\n})(mui, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.imageViewer.js",
    "content": "/**\n * 图片预览组件\n * varstion 0.4.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t$.init({\n\t\tgestureConfig: {\n\t\t\ttap: true, //默认为true\n\t\t\tdoubletap: true, //默认为false\n\t\t\tlongtap: true, //默认为false\n\t\t\tswipe: true, //默认为true\n\t\t\tdrag: true, //默认为true\n\t\t\thold: true, //默认为false，不监听\n\t\t\trelease: true //默认为false，不监听\n\t\t}\n\t});\n\n\tvar touchSupport = ('ontouchstart' in document);\n\tvar tapEventName = touchSupport ? 'tap' : 'click';\n\tvar enterEventName = touchSupport ? 'tap' : 'click';\n\tvar imageClassName = $.className('image');\n\n\n\t//创建DOM (此函数是否可放在 mui.js 中)\n\t$.dom = function(str) {\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn $.__create_dom_div__.childNodes;\n\t};\n\n\t//图片预览组件类\n\tvar ImageViewer = $.ImageViewer = $.Class.extend({\n\t\t//构造函数\n\t\tinit: function(selector, options) {\n\t\t\tvar self = this;\n\t\t\tself.options = options || {};\n\t\t\tself.selector = selector || 'img';\n\t\t\tif (self.options.dbl) {\n\t\t\t\tenterEventName = touchSupport ? 'doubletap' : 'dblclick';\n\t\t\t}\n\t\t\tself.findAllImage();\n\t\t\tself.createViewer();\n\t\t\tself.bindEvent();\n\t\t},\n\t\t//创建图片预览组件的整体 UI\n\t\tcreateViewer: function() {\n\t\t\tvar self = this;\n\t\t\tself.viewer = $.dom(\"<div class='mui-imageviewer'><div class='mui-imageviewer-mask'></div><div class='mui-imageviewer-header'><i class='mui-icon mui-icon-closeempty mui-imageviewer-close'></i><span class='mui-imageviewer-state'></span></div><i class='mui-icon mui-icon-arrowleft  mui-imageviewer-left'></i><i class='mui-icon mui-icon-arrowright mui-imageviewer-right'></i></div>\");\n\t\t\tself.viewer = self.viewer[0] || self.viewer;\n\t\t\t//self.viewer.style.height = screen.height;\n\t\t\tself.closeButton = self.viewer.querySelector('.mui-imageviewer-close');\n\t\t\tself.state = self.viewer.querySelector('.mui-imageviewer-state');\n\t\t\tself.leftButton = self.viewer.querySelector('.mui-imageviewer-left');\n\t\t\tself.rightButton = self.viewer.querySelector('.mui-imageviewer-right');\n\t\t\tself.mask = self.viewer.querySelector('.mui-imageviewer-mask');\n\t\t\tdocument.body.appendChild(self.viewer);\n\t\t},\n\t\t//查找所有符合的图片\n\t\tfindAllImage: function() {\n\t\t\tvar self = this;\n\t\t\tself.images = [].slice.call($(self.selector));\n\t\t},\n\t\t//检查图片是否为启动预览的图片\n\t\tcheckImage: function(target) {\n\t\t\tvar self = this;\n\t\t\tif (target.tagName !== 'IMG') return false;\n\t\t\treturn self.images.some(function(image) {\n\t\t\t\treturn image == target;\n\t\t\t});\n\t\t},\n\t\t//绑定事件\n\t\tbindEvent: function() {\n\t\t\tvar self = this;\n\t\t\t//绑定图片 tap 事件\n\t\t\tdocument.addEventListener(enterEventName, function(event) {\n\t\t\t\tif (!self.viewer) return;\n\t\t\t\tvar target = event.target;\n\t\t\t\tif (!self.checkImage(target)) return;\n\t\t\t\tself.viewer.style.display = 'block';\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tself.viewer.style.opacity = 1;\n\t\t\t\t}, 0);\n\t\t\t\tself.index = self.images.indexOf(target);\n\t\t\t\tself.currentItem = self.createImage(self.index);\n\t\t\t}, false);\n\t\t\t//关系按钮事件\n\t\t\tself.closeButton.addEventListener(tapEventName, function(event) {\n\t\t\t\tself.viewer.style.opacity = 0;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tself.viewer.style.display = 'none';\n\t\t\t\t\tself.disposeImage(true);\n\t\t\t\t}, 600);\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.cancelBubble = true;\n\t\t\t}, false);\n\t\t\t//处理左右按钮\n\t\t\tself.leftButton.addEventListener(tapEventName, function() {\n\t\t\t\tself.prev();\n\t\t\t}, false);\n\t\t\tself.rightButton.addEventListener(tapEventName, function() {\n\t\t\t\tself.next();\n\t\t\t}, false);\n\t\t\t//处理划动\n\t\t\tself.mask.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.cancelBubble = true;\n\t\t\t}, false);\n\t\t\tself.viewer.addEventListener('swipeleft', function(event) {\n\t\t\t\tif (self.scaleValue == 1) self.next();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.cancelBubble = true;\n\t\t\t}, false);\n\t\t\tself.viewer.addEventListener('swiperight', function(event) {\n\t\t\t\tif (self.scaleValue == 1) self.prev();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.cancelBubble = true;\n\t\t\t}, false);\n\t\t\t//处理缩放开始\n\t\t\tself.viewer.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tvar touches = event.touches;\n\t\t\t\tif (touches.length == 2) {\n\t\t\t\t\tvar p1 = touches[0];\n\t\t\t\t\tvar p2 = touches[1];\n\t\t\t\t\tvar x = p1.pageX - p2.pageX; //x1-x2\n\t\t\t\t\tvar y = p1.pageY - p2.pageY; //y1-y2\n\t\t\t\t\tself.scaleStart = Math.sqrt(x * x + y * y);\n\t\t\t\t\tself.isMultiTouch = true;\n\t\t\t\t} else if (touches.length = 1) {\n\t\t\t\t\tself.dragStart = touches[0];\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tself.viewer.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tvar img = self.currentItem.querySelector('img');\n\t\t\t\tvar touches = event.changedTouches;\n\t\t\t\tif (touches.length == 2) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.cancelBubble = true;\n\t\t\t\t\tvar p1 = touches[0];\n\t\t\t\t\tvar p2 = touches[1];\n\t\t\t\t\tvar x = p1.pageX - p2.pageX;\n\t\t\t\t\tvar y = p1.pageY - p2.pageY;\n\t\t\t\t\tself.scaleEnd = Math.sqrt(x * x + y * y);\n\t\t\t\t\tself._scaleValue = (self.scaleValue * (self.scaleEnd / self.scaleStart));\n\t\t\t\t\t//self.state.innerText = self._scaleValue;\n\t\t\t\t\timg.style.webkitTransform = \"scale(\" + self._scaleValue + \",\" + self._scaleValue + \") \"; // + \" translate(\" + self.dragX || 0 + \"px,\" + self.dragY || 0 + \"px)\";\n\t\t\t\t} else if (!self.isMultiTouch && touches.length == 1 && self.scaleValue != 1) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.cancelBubble = true;\n\t\t\t\t\tself.dragEnd = touches[0];\n\t\t\t\t\tself._dragX = self.dragX + (self.dragEnd.pageX - self.dragStart.pageX);\n\t\t\t\t\tself._dragY = self.dragY + (self.dragEnd.pageY - self.dragStart.pageY);\n\t\t\t\t\timg.style.marginLeft = self._dragX + 'px';\n\t\t\t\t\timg.style.marginTop = self._dragY + 'px';\n\t\t\t\t\t//img.style.transform = \"translate(\" + self._dragX + \"px,\" + self._dragY + \"px) \" + \" scale(\" + self.scaleValue || 1 + \",\" + self.scaleValue || 1 + \")\";\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tself.viewer.addEventListener($.EVENT_END, function() {\n\t\t\t\tself.scaleValue = self._scaleValue || self.scaleValue;\n\t\t\t\tself._scaleValue = null;\n\t\t\t\tself.dragX = self._dragX;\n\t\t\t\tself.dragY = self._dragY;\n\t\t\t\tself._dragX = null;\n\t\t\t\tself._dragY = null;\n\t\t\t\tvar touches = event.touches;\n\t\t\t\tself.isMultiTouch = (touches.length != 0);\n\t\t\t});\n\t\t\t// doubletap 好像不能用\n\t\t\tself.viewer.addEventListener('doubletap', function() {\n\t\t\t\tvar img = self.currentItem.querySelector('img');\n\t\t\t\tif (self.scaleValue === 1) {\n\t\t\t\t\tself.scaleValue = 2;\n\t\t\t\t} else {\n\t\t\t\t\tself.scaleValue = 1;\n\t\t\t\t}\n\t\t\t\tself.dragX = 0;\n\t\t\t\tself.dragY = 0;\n\t\t\t\timg.style.marginLeft = self.dragX + 'px';\n\t\t\t\timg.style.marginTop = self.dragY + 'px';\n\t\t\t\timg.style.webkitTransform = \"scale(\" + self.scaleValue + \",\" + self.scaleValue + \") \"; //+ \" translate(\" + self.dragX || 0 + \"px,\" + self.dragY || 0 + \"px)\";\n\t\t\t\tself.viewer.__tap_num = 0;\n\t\t\t}, false);\n\t\t\t//处理缩放结束\n\t\t},\n\t\t//下一张图片\n\t\tnext: function() {\n\t\t\tvar self = this;\n\t\t\tself.mask.style.display = 'block';\n\t\t\tself.index++;\n\t\t\tvar newItem = self.createImage(self.index, 'right');\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.currentItem.classList.remove('mui-imageviewer-item-center');\n\t\t\t\tself.currentItem.classList.add('mui-imageviewer-item-left');\n\t\t\t\tnewItem.classList.remove('mui-imageviewer-item-right');\n\t\t\t\tnewItem.classList.add('mui-imageviewer-item-center');\n\t\t\t\tself.oldItem = self.currentItem;\n\t\t\t\tself.currentItem = newItem;\n\t\t\t\t// TODO: 临时,稍候将调整\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tself.disposeImage();\n\t\t\t\t\tself.mask.style.display = 'none';\n\t\t\t\t}, 600);\n\t\t\t}, 25);\n\t\t},\n\t\t//上一张图片\n\t\tprev: function() {\n\t\t\tvar self = this;\n\t\t\tself.mask.style.display = 'block';\n\t\t\tself.index--;\n\t\t\tvar newItem = self.createImage(self.index, 'left');\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.currentItem.classList.remove('mui-imageviewer-item-center');\n\t\t\t\tself.currentItem.classList.add('mui-imageviewer-item-right');\n\t\t\t\tnewItem.classList.remove('mui-imageviewer-item-left');\n\t\t\t\tnewItem.classList.add('mui-imageviewer-item-center');\n\t\t\t\tself.oldItem = self.currentItem;\n\t\t\t\tself.currentItem = newItem;\n\t\t\t\t// TODO: 临时,稍候将调整\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tself.disposeImage();\n\t\t\t\t\tself.mask.style.display = 'none';\n\t\t\t\t}, 600);\n\t\t\t}, 25);\n\t\t},\n\t\t//释放不显示的图片\n\t\tdisposeImage: function(all) {\n\t\t\tvar sel = '.mui-imageviewer-item-left,.mui-imageviewer-item-right';\n\t\t\tif (all) sel += \",.mui-imageviewer-item\";\n\t\t\tvar willdisposes = $(sel);\n\t\t\twilldisposes.each(function(i, item) {\n\t\t\t\tif (item.parentNode && item.parentNode.removeChild)\n\t\t\t\t\titem.parentNode.removeChild(item, true);\n\t\t\t});\n\t\t},\n\t\t//创建一个图片\n\t\tcreateImage: function(index, type) {\n\t\t\tvar self = this;\n\t\t\ttype = type || 'center';\n\t\t\tif (index < 0) index = self.images.length - 1;\n\t\t\tif (index > self.images.length - 1) index = 0;\n\t\t\tself.index = index;\n\t\t\tvar item = $.dom(\"<div class='mui-imageviewer-item'></div>\")[0];\n\t\t\titem.appendChild($.dom('<span><img src=\"' + self.images[self.index].src + '\"/></span>')[0]);\n\t\t\titem.classList.add('mui-imageviewer-item-' + type);\n\t\t\tself.viewer.appendChild(item);\n\t\t\tself.state.innerText = (self.index + 1) + \"/\" + self.images.length;\n\t\t\t//重置初始缩放比例\n\t\t\tself.scaleValue = 1;\n\t\t\tself.dragX = 0;\n\t\t\tself.dragY = 0;\n\t\t\treturn item;\n\t\t}\n\t});\n\n\t$.imageViewer = function(selector, options) {\n\t\treturn new ImageViewer(selector, options);\n\t};\n\n\t$.ready(function() {\n\t\t$.imageViewer('.' + imageClassName);\n\t});\n\n}(mui, document));"
  },
  {
    "path": "examples/hello-mui/js/mui.indexedlist.js",
    "content": "/**\n * IndexedList\n * 类似联系人应用中的联系人列表，可以按首字母分组\n * 右侧的字母定位工具条，可以快速定位列表位置\n * varstion 1.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n **/\n\n(function($, window, document) {\n\n\tvar classSelector = function(name) {\n\t\treturn '.' + $.className(name);\n\t}\n\n\tvar IndexedList = $.IndexedList = $.Class.extend({\n\t\t/**\n\t\t * 通过 element 和 options 构造 IndexedList 实例\n\t\t **/\n\t\tinit: function(holder, options) {\n\t\t\tvar self = this;\n\t\t\tself.options = options || {};\n\t\t\tself.box = holder;\n\t\t\tif (!self.box) {\n\t\t\t\tthrow \"实例 IndexedList 时需要指定 element\";\n\t\t\t}\n\t\t\tself.createDom();\n\t\t\tself.findElements();\n\t\t\tself.caleLayout();\n\t\t\tself.bindEvent();\n\t\t},\n\t\tcreateDom: function() {\n\t\t\tvar self = this;\n\t\t\tself.el = self.el || {};\n\t\t\t//styleForSearch 用于搜索，此方式能在数据较多时获取很好的性能\n\t\t\tself.el.styleForSearch = document.createElement('style');\n\t\t\t(document.head || document.body).appendChild(self.el.styleForSearch);\n\t\t},\n\t\tfindElements: function() {\n\t\t\tvar self = this;\n\t\t\tself.el = self.el || {};\n\t\t\tself.el.search = self.box.querySelector(classSelector('indexed-list-search'));\n\t\t\tself.el.searchInput = self.box.querySelector(classSelector('indexed-list-search-input'));\n\t\t\tself.el.searchClear = self.box.querySelector(classSelector('indexed-list-search') + ' ' + classSelector('icon-clear'));\n\t\t\tself.el.bar = self.box.querySelector(classSelector('indexed-list-bar'));\n\t\t\tself.el.barItems = [].slice.call(self.box.querySelectorAll(classSelector('indexed-list-bar') + ' a'));\n\t\t\tself.el.inner = self.box.querySelector(classSelector('indexed-list-inner'));\n\t\t\tself.el.items = [].slice.call(self.box.querySelectorAll(classSelector('indexed-list-item')));\n\t\t\tself.el.liArray = [].slice.call(self.box.querySelectorAll(classSelector('indexed-list-inner') + ' li'));\n\t\t\tself.el.alert = self.box.querySelector(classSelector('indexed-list-alert'));\n\t\t},\n\t\tcaleLayout: function() {\n\t\t\tvar self = this;\n\t\t\tvar withoutSearchHeight = (self.box.offsetHeight - self.el.search.offsetHeight) + 'px';\n\t\t\tself.el.bar.style.height = withoutSearchHeight;\n\t\t\tself.el.inner.style.height = withoutSearchHeight;\n\t\t\tvar barItemHeight = ((self.el.bar.offsetHeight - 40) / self.el.barItems.length) + 'px';\n\t\t\tself.el.barItems.forEach(function(item) {\n\t\t\t\titem.style.height = barItemHeight;\n\t\t\t\titem.style.lineHeight = barItemHeight;\n\t\t\t});\n\t\t},\n\t\tscrollTo: function(group) {\n\t\t\tvar self = this;\n\t\t\tvar groupElement = self.el.inner.querySelector('[data-group=\"' + group + '\"]');\n\t\t\tif (!groupElement || (self.hiddenGroups && self.hiddenGroups.indexOf(groupElement) > -1)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.el.inner.scrollTop = groupElement.offsetTop;\n\t\t},\n\t\tbindBarEvent: function() {\n\t\t\tvar self = this;\n\t\t\tvar pointElement = null;\n\t\t\tvar findStart = function(event) {\n\t\t\t\tif (pointElement) {\n\t\t\t\t\tpointElement.classList.remove('active');\n\t\t\t\t\tpointElement = null;\n\t\t\t\t}\n\t\t\t\tself.el.bar.classList.add('active');\n\t\t\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t\t\tpointElement = document.elementFromPoint(point.pageX, point.pageY);\n\t\t\t\tif (pointElement) {\n\t\t\t\t\tvar group = pointElement.innerText;\n\t\t\t\t\tif (group && group.length == 1) {\n\t\t\t\t\t\tpointElement.classList.add('active');\n\t\t\t\t\t\tself.el.alert.innerText = group;\n\t\t\t\t\t\tself.el.alert.classList.add('active');\n\t\t\t\t\t\tself.scrollTo(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t};\n\t\t\tvar findEnd = function(event) {\n\t\t\t\tself.el.alert.classList.remove('active');\n\t\t\t\tself.el.bar.classList.remove('active');\n\t\t\t\tif (pointElement) {\n\t\t\t\t\tpointElement.classList.remove('active');\n\t\t\t\t\tpointElement = null;\n\t\t\t\t}\n\t\t\t};\n\t\t\tself.el.bar.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tfindStart(event);\n\t\t\t}, false);\n\t\t\tself.el.bar.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tfindStart(event);\n\t\t\t}, false);\n\t\t\tdocument.body.addEventListener($.EVENT_END, function(event) {\n\t\t\t\tfindEnd(event);\n\t\t\t}, false);\n\t\t\tdocument.body.addEventListener($.EVENT_CANCEL, function(event) {\n\t\t\t\tfindEnd(event);\n\t\t\t}, false);\n\t\t},\n\t\tsearch: function(keyword) {\n\t\t\tvar self = this;\n\t\t\tkeyword = (keyword || '').toLowerCase();\n\t\t\tvar selectorBuffer = [];\n\t\t\tvar groupIndex = -1;\n\t\t\tvar itemCount = 0;\n\t\t\tvar liArray = self.el.liArray;\n\t\t\tvar itemTotal = liArray.length;\n\t\t\tself.hiddenGroups = [];\n\t\t\tvar checkGroup = function(currentIndex, last) {\n\t\t\t\tif (itemCount >= currentIndex - groupIndex - (last ? 0 : 1)) {\n\t\t\t\t\tselectorBuffer.push(classSelector('indexed-list-inner li') + ':nth-child(' + (groupIndex + 1) + ')');\n\t\t\t\t\tself.hiddenGroups.push(liArray[groupIndex]);\n\t\t\t\t};\n\t\t\t\tgroupIndex = currentIndex;\n\t\t\t\titemCount = 0;\n\t\t\t}\n\t\t\tliArray.forEach(function(item) {\n\t\t\t\tvar currentIndex = liArray.indexOf(item);\n\t\t\t\tif (item.classList.contains($.className('indexed-list-group'))) {\n\t\t\t\t\tcheckGroup(currentIndex, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar text = (item.innerText || '').toLowerCase();\n\t\t\t\t\tvar value = (item.getAttribute('data-value') || '').toLowerCase();\n\t\t\t\t\tvar tags = (item.getAttribute('data-tags') || '').toLowerCase();\n\t\t\t\t\tif (keyword && text.indexOf(keyword) < 0 &&\n\t\t\t\t\t\tvalue.indexOf(keyword) < 0 &&\n\t\t\t\t\t\ttags.indexOf(keyword) < 0) {\n\t\t\t\t\t\tselectorBuffer.push(classSelector('indexed-list-inner li') + ':nth-child(' + (currentIndex + 1) + ')');\n\t\t\t\t\t\titemCount++;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentIndex >= itemTotal - 1) {\n\t\t\t\t\t\tcheckGroup(currentIndex, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selectorBuffer.length >= itemTotal) {\n\t\t\t\tself.el.inner.classList.add('empty');\n\t\t\t} else if (selectorBuffer.length > 0) {\n\t\t\t\tself.el.inner.classList.remove('empty');\n\t\t\t\tself.el.styleForSearch.innerText = selectorBuffer.join(', ') + \"{display:none;}\";\n\t\t\t} else {\n\t\t\t\tself.el.inner.classList.remove('empty');\n\t\t\t\tself.el.styleForSearch.innerText = \"\";\n\t\t\t}\n\t\t},\n\t\tbindSearchEvent: function() {\n\t\t\tvar self = this;\n\t\t\tself.el.searchInput.addEventListener('input', function() {\n\t\t\t\tvar keyword = this.value;\n\t\t\t\tself.search(keyword);\n\t\t\t}, false);\n\t\t\t$(self.el.search).on('tap', classSelector('icon-clear'), function() {\n\t\t\t\tself.search('');\n\t\t\t}, false);\n\t\t},\n\t\tbindEvent: function() {\n\t\t\tvar self = this;\n\t\t\tself.bindBarEvent();\n\t\t\tself.bindSearchEvent();\n\t\t}\n\t});\n\n\t//mui(selector).indexedList 方式\n\t$.fn.indexedList = function(options) {\n\t\t//遍历选择的元素\n\t\tthis.each(function(i, element) {\n\t\t\tif (element.indexedList) return;\n\t\t\telement.indexedList = new IndexedList(element, options);\n\t\t});\n\t\treturn this[0] ? this[0].indexedList : null;\n\t};\n\n})(mui, window, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.js",
    "content": "/*!\n * =====================================================\n * Mui v3.7.3 (http://dev.dcloud.net.cn/mui)\n * =====================================================\n */\n/**\n * MUI核心JS\n * @type _L4.$|Function\n */\nvar mui = (function(document, undefined) {\n\tvar readyRE = /complete|loaded|interactive/;\n\tvar idSelectorRE = /^#([\\w-]+)$/;\n\tvar classSelectorRE = /^\\.([\\w-]+)$/;\n\tvar tagSelectorRE = /^[\\w-]+$/;\n\tvar translateRE = /translate(?:3d)?\\((.+?)\\)/;\n\tvar translateMatrixRE = /matrix(3d)?\\((.+?)\\)/;\n\n\tvar $ = function(selector, context) {\n\t\tcontext = context || document;\n\t\tif (!selector)\n\t\t\treturn wrap();\n\t\tif (typeof selector === 'object')\n\t\t\tif ($.isArrayLike(selector)) {\n\t\t\t\treturn wrap($.slice.call(selector), null);\n\t\t\t} else {\n\t\t\t\treturn wrap([selector], null);\n\t\t\t}\n\t\tif (typeof selector === 'function')\n\t\t\treturn $.ready(selector);\n\t\tif (typeof selector === 'string') {\n\t\t\ttry {\n\t\t\t\tselector = selector.trim();\n\t\t\t\tif (idSelectorRE.test(selector)) {\n\t\t\t\t\tvar found = document.getElementById(RegExp.$1);\n\t\t\t\t\treturn wrap(found ? [found] : []);\n\t\t\t\t}\n\t\t\t\treturn wrap($.qsa(selector, context), selector);\n\t\t\t} catch (e) {}\n\t\t}\n\t\treturn wrap();\n\t};\n\n\tvar wrap = function(dom, selector) {\n\t\tdom = dom || [];\n\t\tObject.setPrototypeOf(dom, $.fn);\n\t\tdom.selector = selector || '';\n\t\treturn dom;\n\t};\n\n\t$.uuid = 0;\n\n\t$.data = {};\n\t/**\n\t * extend(simple)\n\t * @param {type} target\n\t * @param {type} source\n\t * @param {type} deep\n\t * @returns {unresolved}\n\t */\n\t$.extend = function() { //from jquery2\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\tif (typeof target !== \"object\" && !$.isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\t\t\tif ((options = arguments[i]) != null) {\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\tif (target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && $.isArray(src) ? src : [];\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && $.isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttarget[name] = $.extend(deep, clone, copy);\n\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t};\n\t/**\n\t * mui noop(function)\n\t */\n\t$.noop = function() {};\n\t/**\n\t * mui slice(array)\n\t */\n\t$.slice = [].slice;\n\t/**\n\t * mui filter(array)\n\t */\n\t$.filter = [].filter;\n\n\t$.type = function(obj) {\n\t\treturn obj == null ? String(obj) : class2type[{}.toString.call(obj)] || \"object\";\n\t};\n\t/**\n\t * mui isArray\n\t */\n\t$.isArray = Array.isArray ||\n\t\tfunction(object) {\n\t\t\treturn object instanceof Array;\n\t\t};\n\t/**\n\t * mui isArrayLike \n\t * @param {Object} obj\n\t */\n\t$.isArrayLike = function(obj) {\n\t\tvar length = !!obj && \"length\" in obj && obj.length;\n\t\tvar type = $.type(obj);\n\t\tif (type === \"function\" || $.isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t};\n\t/**\n\t * mui isWindow(需考虑obj为undefined的情况)\n\t */\n\t$.isWindow = function(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\t/**\n\t * mui isObject\n\t */\n\t$.isObject = function(obj) {\n\t\treturn $.type(obj) === \"object\";\n\t};\n\t/**\n\t * mui isPlainObject\n\t */\n\t$.isPlainObject = function(obj) {\n\t\treturn $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype;\n\t};\n\t/**\n\t * mui isEmptyObject\n\t * @param {Object} o\n\t */\n\t$.isEmptyObject = function(o) {\n\t\tfor (var p in o) {\n\t\t\tif (p !== undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t/**\n\t * mui isFunction\n\t */\n\t$.isFunction = function(value) {\n\t\treturn $.type(value) === \"function\";\n\t};\n\t/**\n\t * mui querySelectorAll\n\t * @param {type} selector\n\t * @param {type} context\n\t * @returns {Array}\n\t */\n\t$.qsa = function(selector, context) {\n\t\tcontext = context || document;\n\t\treturn $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector));\n\t};\n\t/**\n\t * ready(DOMContentLoaded)\n\t * @param {type} callback\n\t * @returns {_L6.$}\n\t */\n\t$.ready = function(callback) {\n\t\tif (readyRE.test(document.readyState)) {\n\t\t\tcallback($);\n\t\t} else {\n\t\t\tdocument.addEventListener('DOMContentLoaded', function() {\n\t\t\t\tcallback($);\n\t\t\t}, false);\n\t\t}\n\t\treturn this;\n\t};\n\t/**\n\t * 将 fn 缓存一段时间后, 再被调用执行\n\t * 此方法为了避免在 ms 段时间内, 执行 fn 多次. 常用于 resize , scroll , mousemove 等连续性事件中;\n\t * 当 ms 设置为 -1, 表示立即执行 fn, 即和直接调用 fn 一样;\n\t * 调用返回函数的 stop 停止最后一次的 buffer 效果\n\t * @param {Object} fn\n\t * @param {Object} ms\n\t * @param {Object} context\n\t */\n\t$.buffer = function(fn, ms, context) {\n\t\tvar timer;\n\t\tvar lastStart = 0;\n\t\tvar lastEnd = 0;\n\t\tvar ms = ms || 150;\n\n\t\tfunction run() {\n\t\t\tif (timer) {\n\t\t\t\ttimer.cancel();\n\t\t\t\ttimer = 0;\n\t\t\t}\n\t\t\tlastStart = $.now();\n\t\t\tfn.apply(context || this, arguments);\n\t\t\tlastEnd = $.now();\n\t\t}\n\n\t\treturn $.extend(function() {\n\t\t\tif (\n\t\t\t\t(!lastStart) || // 从未运行过\n\t\t\t\t(lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒\n\t\t\t\t(lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成，后8*ms毫秒\n\t\t\t) {\n\t\t\t\trun.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tif (timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t}\n\t\t\t\ttimer = $.later(run, ms, null, $.slice.call(arguments));\n\t\t\t}\n\t\t}, {\n\t\t\tstop: function() {\n\t\t\t\tif (timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t\ttimer = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t * each\n\t * @param {type} elements\n\t * @param {type} callback\n\t * @returns {_L8.$}\n\t */\n\t$.each = function(elements, callback, hasOwnProperty) {\n\t\tif (!elements) {\n\t\t\treturn this;\n\t\t}\n\t\tif (typeof elements.length === 'number') {\n\t\t\t[].every.call(elements, function(el, idx) {\n\t\t\t\treturn callback.call(el, idx, el) !== false;\n\t\t\t});\n\t\t} else {\n\t\t\tfor (var key in elements) {\n\t\t\t\tif (hasOwnProperty) {\n\t\t\t\t\tif (elements.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t$.focus = function(element) {\n\t\tif ($.os.ios) {\n\t\t\tsetTimeout(function() {\n\t\t\t\telement.focus();\n\t\t\t}, 10);\n\t\t} else {\n\t\t\telement.focus();\n\t\t}\n\t};\n\t/**\n\t * trigger event\n\t * @param {type} element\n\t * @param {type} eventType\n\t * @param {type} eventData\n\t * @returns {_L8.$}\n\t */\n\t$.trigger = function(element, eventType, eventData) {\n\t\telement.dispatchEvent(new CustomEvent(eventType, {\n\t\t\tdetail: eventData,\n\t\t\tbubbles: true,\n\t\t\tcancelable: true\n\t\t}));\n\t\treturn this;\n\t};\n\t/**\n\t * getStyles\n\t * @param {type} element\n\t * @param {type} property\n\t * @returns {styles}\n\t */\n\t$.getStyles = function(element, property) {\n\t\tvar styles = element.ownerDocument.defaultView.getComputedStyle(element, null);\n\t\tif (property) {\n\t\t\treturn styles.getPropertyValue(property) || styles[property];\n\t\t}\n\t\treturn styles;\n\t};\n\t/**\n\t * parseTranslate\n\t * @param {type} translateString\n\t * @param {type} position\n\t * @returns {Object}\n\t */\n\t$.parseTranslate = function(translateString, position) {\n\t\tvar result = translateString.match(translateRE || '');\n\t\tif (!result || !result[1]) {\n\t\t\tresult = ['', '0,0,0'];\n\t\t}\n\t\tresult = result[1].split(\",\");\n\t\tresult = {\n\t\t\tx: parseFloat(result[0]),\n\t\t\ty: parseFloat(result[1]),\n\t\t\tz: parseFloat(result[2])\n\t\t};\n\t\tif (position && result.hasOwnProperty(position)) {\n\t\t\treturn result[position];\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * parseTranslateMatrix\n\t * @param {type} translateString\n\t * @param {type} position\n\t * @returns {Object}\n\t */\n\t$.parseTranslateMatrix = function(translateString, position) {\n\t\tvar matrix = translateString.match(translateMatrixRE);\n\t\tvar is3D = matrix && matrix[1];\n\t\tif (matrix) {\n\t\t\tmatrix = matrix[2].split(\",\");\n\t\t\tif (is3D === \"3d\")\n\t\t\t\tmatrix = matrix.slice(12, 15);\n\t\t\telse {\n\t\t\t\tmatrix.push(0);\n\t\t\t\tmatrix = matrix.slice(4, 7);\n\t\t\t}\n\t\t} else {\n\t\t\tmatrix = [0, 0, 0];\n\t\t}\n\t\tvar result = {\n\t\t\tx: parseFloat(matrix[0]),\n\t\t\ty: parseFloat(matrix[1]),\n\t\t\tz: parseFloat(matrix[2])\n\t\t};\n\t\tif (position && result.hasOwnProperty(position)) {\n\t\t\treturn result[position];\n\t\t}\n\t\treturn result;\n\t};\n\t$.hooks = {};\n\t$.addAction = function(type, hook) {\n\t\tvar hooks = $.hooks[type];\n\t\tif (!hooks) {\n\t\t\thooks = [];\n\t\t}\n\t\thook.index = hook.index || 1000;\n\t\thooks.push(hook);\n\t\thooks.sort(function(a, b) {\n\t\t\treturn a.index - b.index;\n\t\t});\n\t\t$.hooks[type] = hooks;\n\t\treturn $.hooks[type];\n\t};\n\t$.doAction = function(type, callback) {\n\t\tif ($.isFunction(callback)) { //指定了callback\n\t\t\t$.each($.hooks[type], callback);\n\t\t} else { //未指定callback，直接执行\n\t\t\t$.each($.hooks[type], function(index, hook) {\n\t\t\t\treturn !hook.handle();\n\t\t\t});\n\t\t}\n\t};\n\t/**\n\t * setTimeout封装\n\t * @param {Object} fn\n\t * @param {Object} when\n\t * @param {Object} context\n\t * @param {Object} data\n\t */\n\t$.later = function(fn, when, context, data) {\n\t\twhen = when || 0;\n\t\tvar m = fn;\n\t\tvar d = data;\n\t\tvar f;\n\t\tvar r;\n\n\t\tif (typeof fn === 'string') {\n\t\t\tm = context[fn];\n\t\t}\n\n\t\tf = function() {\n\t\t\tm.apply(context, $.isArray(d) ? d : [d]);\n\t\t};\n\n\t\tr = setTimeout(f, when);\n\n\t\treturn {\n\t\t\tid: r,\n\t\t\tcancel: function() {\n\t\t\t\tclearTimeout(r);\n\t\t\t}\n\t\t};\n\t};\n\t$.now = Date.now || function() {\n\t\treturn +new Date();\n\t};\n\tvar class2type = {};\n\t$.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) {\n\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t});\n\tif (window.JSON) {\n\t\t$.parseJSON = JSON.parse;\n\t}\n\t/**\n\t * $.fn\n\t */\n\t$.fn = {\n\t\teach: function(callback) {\n\t\t\t[].every.call(this, function(el, idx) {\n\t\t\t\treturn callback.call(el, idx, el) !== false;\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t};\n\n\t/**\n\t * 兼容 AMD 模块\n\t **/\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine('mui', [], function() {\n\t\t\treturn $;\n\t\t});\n\t}\n\n\treturn $;\n})(document);\n//window.mui = mui;\n//'$' in window || (window.$ = mui);\n/**\n * $.os\n * @param {type} $\n * @returns {undefined}\n */\n(function($, window) {\n\tfunction detect(ua) {\n\t\tthis.os = {};\n\t\tvar funcs = [\n\n\t\t\tfunction() { //wechat\n\t\t\t\tvar wechat = ua.match(/(MicroMessenger)\\/([\\d\\.]+)/i);\n\t\t\t\tif (wechat) { //wechat\n\t\t\t\t\tthis.os.wechat = {\n\t\t\t\t\t\tversion: wechat[2].replace(/_/g, '.')\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tfunction() { //android\n\t\t\t\tvar android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n\t\t\t\tif (android) {\n\t\t\t\t\tthis.os.android = true;\n\t\t\t\t\tthis.os.version = android[2];\n\n\t\t\t\t\tthis.os.isBadAndroid = !(/Chrome\\/\\d/.test(window.navigator.appVersion));\n\t\t\t\t}\n\t\t\t\treturn this.os.android === true;\n\t\t\t},\n\t\t\tfunction() { //ios\n\t\t\t\tvar iphone = ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n\t\t\t\tif (iphone) { //iphone\n\t\t\t\t\tthis.os.ios = this.os.iphone = true;\n\t\t\t\t\tthis.os.version = iphone[2].replace(/_/g, '.');\n\t\t\t\t} else {\n\t\t\t\t\tvar ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n\t\t\t\t\tif (ipad) { //ipad\n\t\t\t\t\t\tthis.os.ios = this.os.ipad = true;\n\t\t\t\t\t\tthis.os.version = ipad[2].replace(/_/g, '.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.os.ios === true;\n\t\t\t}\n\t\t];\n\t\t[].every.call(funcs, function(func) {\n\t\t\treturn !func.call($);\n\t\t});\n\t}\n\tdetect.call($, navigator.userAgent);\n})(mui, window);\n/**\n * $.os.plus\n * @param {type} $\n * @returns {undefined}\n */\n(function($, document) {\n\tfunction detect(ua) {\n\t\tthis.os = this.os || {};\n\t\tvar plus = ua.match(/Html5Plus/i); //TODO 5\\+Browser?\n\t\tif (plus) {\n\t\t\tthis.os.plus = true;\n\t\t\t$(function() {\n\t\t\t\tdocument.body.classList.add('mui-plus');\n\t\t\t});\n\t\t\tif (ua.match(/StreamApp/i)) { //TODO 最好有流应用自己的标识\n\t\t\t\tthis.os.stream = true;\n\t\t\t\t$(function() {\n\t\t\t\t\tdocument.body.classList.add('mui-plus-stream');\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tdetect.call($, navigator.userAgent);\n})(mui, document);\n/**\n * 仅提供简单的on，off(仅支持事件委托，不支持当前元素绑定，当前元素绑定请直接使用addEventListener,removeEventListener)\n * @param {Object} $\n */\n(function($) {\n\tif ('ontouchstart' in window) {\n\t\t$.isTouchable = true;\n\t\t$.EVENT_START = 'touchstart';\n\t\t$.EVENT_MOVE = 'touchmove';\n\t\t$.EVENT_END = 'touchend';\n\t} else {\n\t\t$.isTouchable = false;\n\t\t$.EVENT_START = 'mousedown';\n\t\t$.EVENT_MOVE = 'mousemove';\n\t\t$.EVENT_END = 'mouseup';\n\t}\n\t$.EVENT_CANCEL = 'touchcancel';\n\t$.EVENT_CLICK = 'click';\n\n\tvar _mid = 1;\n\tvar delegates = {};\n\t//需要wrap的函数\n\tvar eventMethods = {\n\t\tpreventDefault: 'isDefaultPrevented',\n\t\tstopImmediatePropagation: 'isImmediatePropagationStopped',\n\t\tstopPropagation: 'isPropagationStopped'\n\t};\n\t//默认true返回函数\n\tvar returnTrue = function() {\n\t\treturn true\n\t};\n\t//默认false返回函数\n\tvar returnFalse = function() {\n\t\treturn false\n\t};\n\t//wrap浏览器事件\n\tvar compatible = function(event, target) {\n\t\tif (!event.detail) {\n\t\t\tevent.detail = {\n\t\t\t\tcurrentTarget: target\n\t\t\t};\n\t\t} else {\n\t\t\tevent.detail.currentTarget = target;\n\t\t}\n\t\t$.each(eventMethods, function(name, predicate) {\n\t\t\tvar sourceMethod = event[name];\n\t\t\tevent[name] = function() {\n\t\t\t\tthis[predicate] = returnTrue;\n\t\t\t\treturn sourceMethod && sourceMethod.apply(event, arguments)\n\t\t\t}\n\t\t\tevent[predicate] = returnFalse;\n\t\t}, true);\n\t\treturn event;\n\t};\n\t//简单的wrap对象_mid\n\tvar mid = function(obj) {\n\t\treturn obj && (obj._mid || (obj._mid = _mid++));\n\t};\n\t//事件委托对象绑定的事件回调列表\n\tvar delegateFns = {};\n\t//返回事件委托的wrap事件回调\n\tvar delegateFn = function(element, event, selector, callback) {\n\t\treturn function(e) {\n\t\t\t//same event\n\t\t\tvar callbackObjs = delegates[element._mid][event];\n\t\t\tvar handlerQueue = [];\n\t\t\tvar target = e.target;\n\t\t\tvar selectorAlls = {};\n\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\tif (target === element) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar matches = {};\n\t\t\t\t$.each(callbackObjs, function(selector, callbacks) { //same selector\n\t\t\t\t\tselectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element));\n\t\t\t\t\tif (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) {\n\t\t\t\t\t\tif (!matches[selector]) {\n\t\t\t\t\t\t\tmatches[selector] = callbacks;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t\tif (!$.isEmptyObject(matches)) {\n\t\t\t\t\thandlerQueue.push({\n\t\t\t\t\t\telement: target,\n\t\t\t\t\t\thandlers: matches\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tselectorAlls = null;\n\t\t\te = compatible(e); //compatible event\n\t\t\t$.each(handlerQueue, function(index, handler) {\n\t\t\t\ttarget = handler.element;\n\t\t\t\tvar tagName = target.tagName;\n\t\t\t\tif (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.detail && e.detail.gesture && e.detail.gesture.preventDefault();\n\t\t\t\t}\n\t\t\t\t$.each(handler.handlers, function(index, handler) {\n\t\t\t\t\t$.each(handler, function(index, callback) {\n\t\t\t\t\t\tif (callback.call(target, e) === false) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, true);\n\t\t\t\t}, true)\n\t\t\t\tif (e.isPropagationStopped()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t};\n\t};\n\tvar findDelegateFn = function(element, event) {\n\t\tvar delegateCallbacks = delegateFns[mid(element)];\n\t\tvar result = [];\n\t\tif (delegateCallbacks) {\n\t\t\tresult = [];\n\t\t\tif (event) {\n\t\t\t\tvar filterFn = function(fn) {\n\t\t\t\t\treturn fn.type === event;\n\t\t\t\t}\n\t\t\t\treturn delegateCallbacks.filter(filterFn);\n\t\t\t} else {\n\t\t\t\tresult = delegateCallbacks;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\tvar preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;\n\t/**\n\t * mui delegate events\n\t * @param {type} event\n\t * @param {type} selector\n\t * @param {type} callback\n\t * @returns {undefined}\n\t */\n\t$.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用，类似mouse,focus之类暂不封装支持\n\t\treturn this.each(function() {\n\t\t\tvar element = this;\n\t\t\tmid(element);\n\t\t\tmid(callback);\n\t\t\tvar isAddEventListener = false;\n\t\t\tvar delegateEvents = delegates[element._mid] || (delegates[element._mid] = {});\n\t\t\tvar delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {}));\n\t\t\tif ($.isEmptyObject(delegateCallbackObjs)) {\n\t\t\t\tisAddEventListener = true;\n\t\t\t}\n\t\t\tvar delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []);\n\t\t\tdelegateCallbacks.push(callback);\n\t\t\tif (isAddEventListener) {\n\t\t\t\tvar delegateFnArray = delegateFns[mid(element)];\n\t\t\t\tif (!delegateFnArray) {\n\t\t\t\t\tdelegateFnArray = [];\n\t\t\t\t}\n\t\t\t\tvar delegateCallback = delegateFn(element, event, selector, callback);\n\t\t\t\tdelegateFnArray.push(delegateCallback);\n\t\t\t\tdelegateCallback.i = delegateFnArray.length - 1;\n\t\t\t\tdelegateCallback.type = event;\n\t\t\t\tdelegateFns[mid(element)] = delegateFnArray;\n\t\t\t\telement.addEventListener(event, delegateCallback);\n\t\t\t\tif (event === 'tap') { //TODO 需要找个更好的解决方案\n\t\t\t\t\telement.addEventListener('click', function(e) {\n\t\t\t\t\t\tif (e.target) {\n\t\t\t\t\t\t\tvar tagName = e.target.tagName;\n\t\t\t\t\t\t\tif (!preventDefaultException.test(tagName)) {\n\t\t\t\t\t\t\t\tif (tagName === 'A') {\n\t\t\t\t\t\t\t\t\tvar href = e.target.href;\n\t\t\t\t\t\t\t\t\tif (!(href && ~href.indexOf('tel:'))) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t$.fn.off = function(event, selector, callback) {\n\t\treturn this.each(function() {\n\t\t\tvar _mid = mid(this);\n\t\t\tif (!event) { //mui(selector).off();\n\t\t\t\tdelegates[_mid] && delete delegates[_mid];\n\t\t\t} else if (!selector) { //mui(selector).off(event);\n\t\t\t\tdelegates[_mid] && delete delegates[_mid][event];\n\t\t\t} else if (!callback) { //mui(selector).off(event,selector);\n\t\t\t\tdelegates[_mid] && delegates[_mid][event] && delete delegates[_mid][event][selector];\n\t\t\t} else { //mui(selector).off(event,selector,callback);\n\t\t\t\tvar delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector];\n\t\t\t\t$.each(delegateCallbacks, function(index, delegateCallback) {\n\t\t\t\t\tif (mid(delegateCallback) === mid(callback)) {\n\t\t\t\t\t\tdelegateCallbacks.splice(index, 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\tif (delegates[_mid]) {\n\t\t\t\t//如果off掉了所有当前element的指定的event事件，则remove掉当前element的delegate回调\n\t\t\t\tif ((!delegates[_mid][event] || $.isEmptyObject(delegates[_mid][event]))) {\n\t\t\t\t\tfindDelegateFn(this, event).forEach(function(fn) {\n\t\t\t\t\t\tthis.removeEventListener(fn.type, fn);\n\t\t\t\t\t\tdelete delegateFns[_mid][fn.i];\n\t\t\t\t\t}.bind(this));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//如果delegates[_mid]已不存在，删除所有\n\t\t\t\tfindDelegateFn(this).forEach(function(fn) {\n\t\t\t\t\tthis.removeEventListener(fn.type, fn);\n\t\t\t\t\tdelete delegateFns[_mid][fn.i];\n\t\t\t\t}.bind(this));\n\t\t\t}\n\t\t});\n\n\t};\n})(mui);\n/**\n * mui target(action>popover>modal>tab>toggle)\n */\n(function($, window, document) {\n\t/**\n\t * targets\n\t */\n\t$.targets = {};\n\t/**\n\t * target handles\n\t */\n\t$.targetHandles = [];\n\t/**\n\t * register target\n\t * @param {type} target\n\t * @returns {$.targets}\n\t */\n\t$.registerTarget = function(target) {\n\n\t\ttarget.index = target.index || 1000;\n\n\t\t$.targetHandles.push(target);\n\n\t\t$.targetHandles.sort(function(a, b) {\n\t\t\treturn a.index - b.index;\n\t\t});\n\n\t\treturn $.targetHandles;\n\t};\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tvar target = event.target;\n\t\tvar founds = {};\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tvar isFound = false;\n\t\t\t$.each($.targetHandles, function(index, targetHandle) {\n\t\t\t\tvar name = targetHandle.name;\n\t\t\t\tif (!isFound && !founds[name] && targetHandle.hasOwnProperty('handle')) {\n\t\t\t\t\t$.targets[name] = targetHandle.handle(event, target);\n\t\t\t\t\tif ($.targets[name]) {\n\t\t\t\t\t\tfounds[name] = true;\n\t\t\t\t\t\tif (targetHandle.isContinue !== true) {\n\t\t\t\t\t\t\tisFound = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!founds[name]) {\n\t\t\t\t\t\tif (targetHandle.isReset !== false)\n\t\t\t\t\t\t\t$.targets[name] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (isFound) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\twindow.addEventListener('click', function(event) { //解决touch与click的target不一致的问题(比如链接边缘点击时，touch的target为html，而click的target为A)\n\t\tvar target = event.target;\n\t\tvar isFound = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.tagName === 'A') {\n\t\t\t\t$.each($.targetHandles, function(index, targetHandle) {\n\t\t\t\t\tvar name = targetHandle.name;\n\t\t\t\t\tif (targetHandle.hasOwnProperty('handle')) {\n\t\t\t\t\t\tif (targetHandle.handle(event, target)) {\n\t\t\t\t\t\t\tisFound = true;\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (isFound) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(mui, window, document);\n/**\n * fixed trim\n * @param {type} undefined\n * @returns {undefined}\n */\n(function(undefined) {\n\tif (String.prototype.trim === undefined) { // fix for iOS 3.2\n\t\tString.prototype.trim = function() {\n\t\t\treturn this.replace(/^\\s+|\\s+$/g, '');\n\t\t};\n\t}\n\tObject.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {\n\t\tobj['__proto__'] = proto;\n\t\treturn obj;\n\t};\n\n})();\n/**\n * fixed CustomEvent\n */\n(function() {\n\tif (typeof window.CustomEvent === 'undefined') {\n\t\tfunction CustomEvent(event, params) {\n\t\t\tparams = params || {\n\t\t\t\tbubbles: false,\n\t\t\t\tcancelable: false,\n\t\t\t\tdetail: undefined\n\t\t\t};\n\t\t\tvar evt = document.createEvent('Events');\n\t\t\tvar bubbles = true;\n\t\t\tfor (var name in params) {\n\t\t\t\t(name === 'bubbles') ? (bubbles = !!params[name]) : (evt[name] = params[name]);\n\t\t\t}\n\t\t\tevt.initEvent(event, bubbles, true);\n\t\t\treturn evt;\n\t\t};\n\t\tCustomEvent.prototype = window.Event.prototype;\n\t\twindow.CustomEvent = CustomEvent;\n\t}\n})();\n/*\n\tA shim for non ES5 supporting browsers.\n\tAdds function bind to Function prototype, so that you can do partial application.\n\tWorks 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.\n*/\n\nFunction.prototype.bind = Function.prototype.bind || function(to) {\n\t// Make an array of our arguments, starting from second argument\n\tvar partial = Array.prototype.splice.call(arguments, 1),\n\t\t// We'll need the original function.\n\t\tfn = this;\n\tvar bound = function() {\n\t\t\t// Join the already applied arguments to the now called ones (after converting to an array again).\n\t\t\tvar args = partial.concat(Array.prototype.splice.call(arguments, 0));\n\t\t\t// If not being called as a constructor\n\t\t\tif (!(this instanceof bound)) {\n\t\t\t\t// return the result of the function called bound to target and partially applied.\n\t\t\t\treturn fn.apply(to, args);\n\t\t\t}\n\t\t\t// If being called as a constructor, apply the function bound to self.\n\t\t\tfn.apply(this, args);\n\t\t}\n\t\t// Attach the prototype of the function to our newly created function.\n\tbound.prototype = fn.prototype;\n\treturn bound;\n};\n/**\n * mui fixed classList\n * @param {type} document\n * @returns {undefined}\n */\n(function(document) {\n    if (!(\"classList\" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {\n\n        Object.defineProperty(HTMLElement.prototype, 'classList', {\n            get: function() {\n                var self = this;\n                function update(fn) {\n                    return function(value) {\n                        var classes = self.className.split(/\\s+/),\n                                index = classes.indexOf(value);\n\n                        fn(classes, index, value);\n                        self.className = classes.join(\" \");\n                    };\n                }\n\n                var ret = {\n                    add: update(function(classes, index, value) {\n                        ~index || classes.push(value);\n                    }),\n                    remove: update(function(classes, index) {\n                        ~index && classes.splice(index, 1);\n                    }),\n                    toggle: update(function(classes, index, value) {\n                        ~index ? classes.splice(index, 1) : classes.push(value);\n                    }),\n                    contains: function(value) {\n                        return !!~self.className.split(/\\s+/).indexOf(value);\n                    },\n                    item: function(i) {\n                        return self.className.split(/\\s+/)[i] || null;\n                    }\n                };\n\n                Object.defineProperty(ret, 'length', {\n                    get: function() {\n                        return self.className.split(/\\s+/).length;\n                    }\n                });\n\n                return ret;\n            }\n        });\n    }\n})(document);\n\n/**\n * mui fixed requestAnimationFrame\n * @param {type} window\n * @returns {undefined}\n */\n(function(window) {\n\tif (!window.requestAnimationFrame) {\n\t\tvar lastTime = 0;\n\t\twindow.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) {\n\t\t\tvar currTime = new Date().getTime();\n\t\t\tvar timeToCall = Math.max(0, 16.7 - (currTime - lastTime));\n\t\t\tvar id = window.setTimeout(function() {\n\t\t\t\tcallback(currTime + timeToCall);\n\t\t\t}, timeToCall);\n\t\t\tlastTime = currTime + timeToCall;\n\t\t\treturn id;\n\t\t};\n\t\twindow.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) {\n\t\t\tclearTimeout(id);\n\t\t};\n\t};\n}(window));\n/**\n * fastclick(only for radio,checkbox)\n */\n(function($, window, name) {\n\tif (!$.os.android && !$.os.ios) { //目前仅识别android和ios\n\t\treturn;\n\t}\n\tif (window.FastClick) {\n\t\treturn;\n\t}\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'LABEL') {\n\t\t\tif (target.parentNode) {\n\t\t\t\ttarget = target.parentNode.querySelector('input');\n\t\t\t}\n\t\t}\n\t\tif (target && (target.type === 'radio' || target.type === 'checkbox')) {\n\t\t\tif (!target.disabled) { //disabled\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 40,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\tvar dispatchEvent = function(event) {\n\t\tvar targetElement = $.targets.click;\n\t\tif (targetElement) {\n\t\t\tvar clickEvent, touch;\n\t\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect\n\t\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\t\ttouch = event.detail.gesture.changedTouches[0];\n\t\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\t\tclickEvent = document.createEvent('MouseEvents');\n\t\t\tclickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\t\tclickEvent.forwardedTouchEvent = true;\n\t\t\ttargetElement.dispatchEvent(clickEvent);\n\t\t\tevent.detail && event.detail.gesture.preventDefault();\n\t\t}\n\t};\n\twindow.addEventListener('tap', dispatchEvent);\n\twindow.addEventListener('doubletap', dispatchEvent);\n\t//捕获\n\twindow.addEventListener('click', function(event) {\n\t\tif ($.targets.click) {\n\t\t\tif (!event.forwardedTouchEvent) { //stop click\n\t\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t} else {\n\t\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation\n\t\t\t\t\tevent.propagationStopped = true;\n\t\t\t\t}\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, true);\n\n})(mui, window, 'click');\n(function($, document) {\n\t$(function() {\n\t\tif (!$.os.ios) {\n\t\t\treturn;\n\t\t}\n\t\tvar CLASS_FOCUSIN = 'mui-focusin';\n\t\tvar CLASS_BAR_TAB = 'mui-bar-tab';\n\t\tvar CLASS_BAR_FOOTER = 'mui-bar-footer';\n\t\tvar CLASS_BAR_FOOTER_SECONDARY = 'mui-bar-footer-secondary';\n\t\tvar CLASS_BAR_FOOTER_SECONDARY_TAB = 'mui-bar-footer-secondary-tab';\n\t\t// var content = document.querySelector('.' + CLASS_CONTENT);\n\t\t// if (content) {\n\t\t// \tdocument.body.insertBefore(content, document.body.firstElementChild);\n\t\t// }\n\t\tdocument.addEventListener('focusin', function(e) {\n\t\t\tif ($.os.plus) { //在父webview里边不fix\n\t\t\t\tif (window.plus) {\n\t\t\t\t\tif (plus.webview.currentWebview().children().length > 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar target = e.target;\n\t\t\t//TODO 需考虑所有键盘弹起的情况\n\t\t\tif (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) {\n\t\t\t\tif (target.disabled || target.readOnly) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdocument.body.classList.add(CLASS_FOCUSIN);\n\t\t\t\tvar isFooter = false;\n\t\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\t\tvar classList = target.classList;\n\t\t\t\t\tif (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) {\n\t\t\t\t\t\tisFooter = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isFooter) {\n\t\t\t\t\tvar scrollTop = document.body.scrollHeight;\n\t\t\t\t\tvar scrollLeft = document.body.scrollLeft;\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\twindow.scrollTo(scrollLeft, scrollTop);\n\t\t\t\t\t}, 20);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tdocument.addEventListener('focusout', function(e) {\n\t\t\tvar classList = document.body.classList;\n\t\t\tif (classList.contains(CLASS_FOCUSIN)) {\n\t\t\t\tclassList.remove(CLASS_FOCUSIN);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twindow.scrollTo(document.body.scrollLeft, document.body.scrollTop);\n\t\t\t\t}, 20);\n\t\t\t}\n\t\t});\n\t});\n})(mui, document);\n/**\n * mui namespace(optimization)\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.namespace = 'mui';\n\t$.classNamePrefix = $.namespace + '-';\n\t$.classSelectorPrefix = '.' + $.classNamePrefix;\n\t/**\n\t * 返回正确的className\n\t * @param {type} className\n\t * @returns {String}\n\t */\n\t$.className = function(className) {\n\t\treturn $.classNamePrefix + className;\n\t};\n\t/**\n\t * 返回正确的classSelector\n\t * @param {type} classSelector\n\t * @returns {String}\n\t */\n\t$.classSelector = function(classSelector) {\n\t\treturn classSelector.replace(/\\./g, $.classSelectorPrefix);\n\t};\n\t/**\n         * 返回正确的eventName\n         * @param {type} event\n         * @param {type} module\n         * @returns {String}\n         */\n\t$.eventName = function(event, module) {\n\t\treturn event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : '');\n\t};\n})(mui);\n\n/**\n * mui gestures\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\t$.gestures = {\n\t\tsession: {}\n\t};\n\t/**\n\t * Gesture preventDefault\n\t * @param {type} e\n\t * @returns {undefined}\n\t */\n\t$.preventDefault = function(e) {\n\t\te.preventDefault();\n\t};\n\t/**\n\t * Gesture stopPropagation\n\t * @param {type} e\n\t * @returns {undefined}\n\t */\n\t$.stopPropagation = function(e) {\n\t\te.stopPropagation();\n\t};\n\n\t/**\n\t * register gesture\n\t * @param {type} gesture\n\t * @returns {$.gestures}\n\t */\n\t$.addGesture = function(gesture) {\n\t\treturn $.addAction('gestures', gesture);\n\n\t};\n\n\tvar round = Math.round;\n\tvar abs = Math.abs;\n\tvar sqrt = Math.sqrt;\n\tvar atan = Math.atan;\n\tvar atan2 = Math.atan2;\n\t/**\n\t * distance\n\t * @param {type} p1\n\t * @param {type} p2\n\t * @returns {Number}\n\t */\n\tvar getDistance = function(p1, p2, props) {\n\t\tif(!props) {\n\t\t\tprops = ['x', 'y'];\n\t\t}\n\t\tvar x = p2[props[0]] - p1[props[0]];\n\t\tvar y = p2[props[1]] - p1[props[1]];\n\t\treturn sqrt((x * x) + (y * y));\n\t};\n\t/**\n\t * scale\n\t * @param {Object} starts\n\t * @param {Object} moves\n\t */\n\tvar getScale = function(starts, moves) {\n\t\tif(starts.length >= 2 && moves.length >= 2) {\n\t\t\tvar props = ['pageX', 'pageY'];\n\t\t\treturn getDistance(moves[1], moves[0], props) / getDistance(starts[1], starts[0], props);\n\t\t}\n\t\treturn 1;\n\t};\n\t/**\n\t * angle\n\t * @param {type} p1\n\t * @param {type} p2\n\t * @returns {Number}\n\t */\n\tvar getAngle = function(p1, p2, props) {\n\t\tif(!props) {\n\t\t\tprops = ['x', 'y'];\n\t\t}\n\t\tvar x = p2[props[0]] - p1[props[0]];\n\t\tvar y = p2[props[1]] - p1[props[1]];\n\t\treturn atan2(y, x) * 180 / Math.PI;\n\t};\n\t/**\n\t * direction\n\t * @param {Object} x\n\t * @param {Object} y\n\t */\n\tvar getDirection = function(x, y) {\n\t\tif(x === y) {\n\t\t\treturn '';\n\t\t}\n\t\tif(abs(x) >= abs(y)) {\n\t\t\treturn x > 0 ? 'left' : 'right';\n\t\t}\n\t\treturn y > 0 ? 'up' : 'down';\n\t};\n\t/**\n\t * rotation\n\t * @param {Object} start\n\t * @param {Object} end\n\t */\n\tvar getRotation = function(start, end) {\n\t\tvar props = ['pageX', 'pageY'];\n\t\treturn getAngle(end[1], end[0], props) - getAngle(start[1], start[0], props);\n\t};\n\t/**\n\t * px per ms\n\t * @param {Object} deltaTime\n\t * @param {Object} x\n\t * @param {Object} y\n\t */\n\tvar getVelocity = function(deltaTime, x, y) {\n\t\treturn {\n\t\t\tx: x / deltaTime || 0,\n\t\t\ty: y / deltaTime || 0\n\t\t};\n\t};\n\t/**\n\t * detect gestures\n\t * @param {type} event\n\t * @param {type} touch\n\t * @returns {undefined}\n\t */\n\tvar detect = function(event, touch) {\n\t\tif($.gestures.stoped) {\n\t\t\treturn;\n\t\t}\n\t\t$.doAction('gestures', function(index, gesture) {\n\t\t\tif(!$.gestures.stoped) {\n\t\t\t\tif($.options.gestureConfig[gesture.name] !== false) {\n\t\t\t\t\tgesture.handle(event, touch);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t * 暂时无用\n\t * @param {Object} node\n\t * @param {Object} parent\n\t */\n\tvar hasParent = function(node, parent) {\n\t\twhile(node) {\n\t\t\tif(node == parent) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar uniqueArray = function(src, key, sort) {\n\t\tvar results = [];\n\t\tvar values = [];\n\t\tvar i = 0;\n\n\t\twhile(i < src.length) {\n\t\t\tvar val = key ? src[i][key] : src[i];\n\t\t\tif(values.indexOf(val) < 0) {\n\t\t\t\tresults.push(src[i]);\n\t\t\t}\n\t\t\tvalues[i] = val;\n\t\t\ti++;\n\t\t}\n\n\t\tif(sort) {\n\t\t\tif(!key) {\n\t\t\t\tresults = results.sort();\n\t\t\t} else {\n\t\t\t\tresults = results.sort(function sortUniqueArray(a, b) {\n\t\t\t\t\treturn a[key] > b[key];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t};\n\tvar getMultiCenter = function(touches) {\n\t\tvar touchesLength = touches.length;\n\t\tif(touchesLength === 1) {\n\t\t\treturn {\n\t\t\t\tx: round(touches[0].pageX),\n\t\t\t\ty: round(touches[0].pageY)\n\t\t\t};\n\t\t}\n\n\t\tvar x = 0;\n\t\tvar y = 0;\n\t\tvar i = 0;\n\t\twhile(i < touchesLength) {\n\t\t\tx += touches[i].pageX;\n\t\t\ty += touches[i].pageY;\n\t\t\ti++;\n\t\t}\n\n\t\treturn {\n\t\t\tx: round(x / touchesLength),\n\t\t\ty: round(y / touchesLength)\n\t\t};\n\t};\n\tvar multiTouch = function() {\n\t\treturn $.options.gestureConfig.pinch;\n\t};\n\tvar copySimpleTouchData = function(touch) {\n\t\tvar touches = [];\n\t\tvar i = 0;\n\t\twhile(i < touch.touches.length) {\n\t\t\ttouches[i] = {\n\t\t\t\tpageX: round(touch.touches[i].pageX),\n\t\t\t\tpageY: round(touch.touches[i].pageY)\n\t\t\t};\n\t\t\ti++;\n\t\t}\n\t\treturn {\n\t\t\ttimestamp: $.now(),\n\t\t\tgesture: touch.gesture,\n\t\t\ttouches: touches,\n\t\t\tcenter: getMultiCenter(touch.touches),\n\t\t\tdeltaX: touch.deltaX,\n\t\t\tdeltaY: touch.deltaY\n\t\t};\n\t};\n\n\tvar calDelta = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar center = touch.center;\n\t\tvar offset = session.offsetDelta || {};\n\t\tvar prevDelta = session.prevDelta || {};\n\t\tvar prevTouch = session.prevTouch || {};\n\n\t\tif(touch.gesture.type === $.EVENT_START || touch.gesture.type === $.EVENT_END) {\n\t\t\tprevDelta = session.prevDelta = {\n\t\t\t\tx: prevTouch.deltaX || 0,\n\t\t\t\ty: prevTouch.deltaY || 0\n\t\t\t};\n\n\t\t\toffset = session.offsetDelta = {\n\t\t\t\tx: center.x,\n\t\t\t\ty: center.y\n\t\t\t};\n\t\t}\n\t\ttouch.deltaX = prevDelta.x + (center.x - offset.x);\n\t\ttouch.deltaY = prevDelta.y + (center.y - offset.y);\n\t};\n\tvar calTouchData = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar touches = touch.touches;\n\t\tvar touchesLength = touches.length;\n\n\t\tif(!session.firstTouch) {\n\t\t\tsession.firstTouch = copySimpleTouchData(touch);\n\t\t}\n\n\t\tif(multiTouch() && touchesLength > 1 && !session.firstMultiTouch) {\n\t\t\tsession.firstMultiTouch = copySimpleTouchData(touch);\n\t\t} else if(touchesLength === 1) {\n\t\t\tsession.firstMultiTouch = false;\n\t\t}\n\n\t\tvar firstTouch = session.firstTouch;\n\t\tvar firstMultiTouch = session.firstMultiTouch;\n\t\tvar offsetCenter = firstMultiTouch ? firstMultiTouch.center : firstTouch.center;\n\n\t\tvar center = touch.center = getMultiCenter(touches);\n\t\ttouch.timestamp = $.now();\n\t\ttouch.deltaTime = touch.timestamp - firstTouch.timestamp;\n\n\t\ttouch.angle = getAngle(offsetCenter, center);\n\t\ttouch.distance = getDistance(offsetCenter, center);\n\n\t\tcalDelta(touch);\n\n\t\ttouch.offsetDirection = getDirection(touch.deltaX, touch.deltaY);\n\n\t\ttouch.scale = firstMultiTouch ? getScale(firstMultiTouch.touches, touches) : 1;\n\t\ttouch.rotation = firstMultiTouch ? getRotation(firstMultiTouch.touches, touches) : 0;\n\n\t\tcalIntervalTouchData(touch);\n\n\t};\n\tvar CAL_INTERVAL = 25;\n\tvar calIntervalTouchData = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar last = session.lastInterval || touch;\n\t\tvar deltaTime = touch.timestamp - last.timestamp;\n\t\tvar velocity;\n\t\tvar velocityX;\n\t\tvar velocityY;\n\t\tvar direction;\n\n\t\tif(touch.gesture.type != $.EVENT_CANCEL && (deltaTime > CAL_INTERVAL || last.velocity === undefined)) {\n\t\t\tvar deltaX = last.deltaX - touch.deltaX;\n\t\t\tvar deltaY = last.deltaY - touch.deltaY;\n\n\t\t\tvar v = getVelocity(deltaTime, deltaX, deltaY);\n\t\t\tvelocityX = v.x;\n\t\t\tvelocityY = v.y;\n\t\t\tvelocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n\t\t\tdirection = getDirection(deltaX, deltaY) || last.direction;\n\n\t\t\tsession.lastInterval = touch;\n\t\t} else {\n\t\t\tvelocity = last.velocity;\n\t\t\tvelocityX = last.velocityX;\n\t\t\tvelocityY = last.velocityY;\n\t\t\tdirection = last.direction;\n\t\t}\n\n\t\ttouch.velocity = velocity;\n\t\ttouch.velocityX = velocityX;\n\t\ttouch.velocityY = velocityY;\n\t\ttouch.direction = direction;\n\t};\n\tvar targetIds = {};\n\tvar convertTouches = function(touches) {\n\t\tfor(var i = 0; i < touches.length; i++) {\n\t\t\t!touches['identifier'] && (touches['identifier'] = 0);\n\t\t}\n\t\treturn touches;\n\t};\n\tvar getTouches = function(event, touch) {\n\t\tvar allTouches = convertTouches($.slice.call(event.touches || [event]));\n\n\t\tvar type = event.type;\n\n\t\tvar targetTouches = [];\n\t\tvar changedTargetTouches = [];\n\n\t\t//当touchstart或touchmove且touches长度为1，直接获得all和changed\n\t\tif((type === $.EVENT_START || type === $.EVENT_MOVE) && allTouches.length === 1) {\n\t\t\ttargetIds[allTouches[0].identifier] = true;\n\t\t\ttargetTouches = allTouches;\n\t\t\tchangedTargetTouches = allTouches;\n\t\t\ttouch.target = event.target;\n\t\t} else {\n\t\t\tvar i = 0;\n\t\t\tvar targetTouches = [];\n\t\t\tvar changedTargetTouches = [];\n\t\t\tvar changedTouches = convertTouches($.slice.call(event.changedTouches || [event]));\n\n\t\t\ttouch.target = event.target;\n\t\t\tvar sessionTarget = $.gestures.session.target || event.target;\n\t\t\ttargetTouches = allTouches.filter(function(touch) {\n\t\t\t\treturn hasParent(touch.target, sessionTarget);\n\t\t\t});\n\n\t\t\tif(type === $.EVENT_START) {\n\t\t\t\ti = 0;\n\t\t\t\twhile(i < targetTouches.length) {\n\t\t\t\t\ttargetIds[targetTouches[i].identifier] = true;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = 0;\n\t\t\twhile(i < changedTouches.length) {\n\t\t\t\tif(targetIds[changedTouches[i].identifier]) {\n\t\t\t\t\tchangedTargetTouches.push(changedTouches[i]);\n\t\t\t\t}\n\t\t\t\tif(type === $.EVENT_END || type === $.EVENT_CANCEL) {\n\t\t\t\t\tdelete targetIds[changedTouches[i].identifier];\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif(!changedTargetTouches.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\ttargetTouches = uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true);\n\t\tvar touchesLength = targetTouches.length;\n\t\tvar changedTouchesLength = changedTargetTouches.length;\n\t\tif(type === $.EVENT_START && touchesLength - changedTouchesLength === 0) { //first\n\t\t\ttouch.isFirst = true;\n\t\t\t$.gestures.touch = $.gestures.session = {\n\t\t\t\ttarget: event.target\n\t\t\t};\n\t\t}\n\t\ttouch.isFinal = ((type === $.EVENT_END || type === $.EVENT_CANCEL) && (touchesLength - changedTouchesLength === 0));\n\n\t\ttouch.touches = targetTouches;\n\t\ttouch.changedTouches = changedTargetTouches;\n\t\treturn true;\n\n\t};\n\tvar handleTouchEvent = function(event) {\n\t\tvar touch = {\n\t\t\tgesture: event\n\t\t};\n\t\tvar touches = getTouches(event, touch);\n\t\tif(!touches) {\n\t\t\treturn;\n\t\t}\n\t\tcalTouchData(touch);\n\t\tdetect(event, touch);\n\t\t$.gestures.session.prevTouch = touch;\n\t\tif(event.type === $.EVENT_END && !$.isTouchable) {\n\t\t\t$.gestures.touch = $.gestures.session = {};\n\t\t}\n\t};\n\tvar supportsPassive = (function checkPassiveListener() {\n\t\tvar supportsPassive = false;\n\t\ttry {\n\t\t\tvar opts = Object.defineProperty({}, 'passive', {\n\t\t\t\tget: function get() {\n\t\t\t\t\tsupportsPassive = true;\n\t\t\t\t},\n\t\t\t});\n\t\t\twindow.addEventListener('testPassiveListener', null, opts);\n\t\t} catch(e) {\n\t\t\t// No support\n\t\t}\n\t\treturn supportsPassive;\n\t}())\n\twindow.addEventListener($.EVENT_START, handleTouchEvent);\n\twindow.addEventListener($.EVENT_MOVE, handleTouchEvent, supportsPassive ? {\n\t\tpassive: false,\n\t\tcapture: false\n\t} : false);\n\twindow.addEventListener($.EVENT_END, handleTouchEvent);\n\twindow.addEventListener($.EVENT_CANCEL, handleTouchEvent);\n\t//fixed hashchange(android)\n\twindow.addEventListener($.EVENT_CLICK, function(e) {\n\t\t//TODO 应该判断当前target是不是在targets.popover内部，而不是非要相等\n\t\tif(($.os.android || $.os.ios) && (($.targets.popover && e.target === $.targets.popover) || ($.targets.tab) || $.targets.offcanvas || $.targets.modal)) {\n\t\t\te.preventDefault();\n\t\t}\n\t}, true);\n\n\t//增加原生滚动识别\n\t$.isScrolling = false;\n\tvar scrollingTimeout = null;\n\twindow.addEventListener('scroll', function() {\n\t\t$.isScrolling = true;\n\t\tscrollingTimeout && clearTimeout(scrollingTimeout);\n\t\tscrollingTimeout = setTimeout(function() {\n\t\t\t$.isScrolling = false;\n\t\t}, 250);\n\t});\n})(mui, window);\n/**\n * mui gesture flick[left|right|up|down]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar flickStartTime = 0;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tvar now = $.now();\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (now - flickStartTime > 300) {\n\t\t\t\t\tflickStartTime = now;\n\t\t\t\t\tsession.flickStart = touch.center;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\ttouch.flick = false;\n\t\t\t\tif (session.flickStart && options.flickMaxTime > (now - flickStartTime) && touch.distance > options.flickMinDistince) {\n\t\t\t\t\ttouch.flick = true;\n\t\t\t\t\ttouch.flickTime = now - flickStartTime;\n\t\t\t\t\ttouch.flickDistanceX = touch.center.x - session.flickStart.x;\n\t\t\t\t\ttouch.flickDistanceY = touch.center.y - session.flickStart.y;\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t};\n\t/**\n\t * mui gesture flick\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 5,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tflickMaxTime: 200,\n\t\t\tflickMinDistince: 10\n\t\t}\n\t});\n})(mui, 'flick');\n/**\n * mui gesture swipe[left|right|up|down]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tif (event.type === $.EVENT_END || event.type === $.EVENT_CANCEL) {\n\t\t\tvar options = this.options;\n\t\t\ttouch.swipe = false;\n\t\t\t//TODO 后续根据velocity计算\n\t\t\tif (touch.direction && options.swipeMaxTime > touch.deltaTime && touch.distance > options.swipeMinDistince) {\n\t\t\t\ttouch.swipe = true;\n\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * mui gesture swipe\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tswipeMaxTime: 300,\n\t\t\tswipeMinDistince: 18\n\t\t}\n\t});\n})(mui, 'swipe');\n/**\n * mui gesture drag[start|left|right|up|down|end]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (!touch.direction || !session.target) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//修正direction,可在session期间自行锁定拖拽方向，方便开发scroll类不同方向拖拽插件嵌套\n\t\t\t\tif (session.lockDirection && session.startDirection) {\n\t\t\t\t\tif (session.startDirection && session.startDirection !== touch.direction) {\n\t\t\t\t\t\tif (session.startDirection === 'up' || session.startDirection === 'down') {\n\t\t\t\t\t\t\ttouch.direction = touch.deltaY < 0 ? 'up' : 'down';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttouch.direction = touch.deltaX < 0 ? 'left' : 'right';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!session.drag) {\n\t\t\t\t\tsession.drag = true;\n\t\t\t\t\t$.trigger(session.target, name + 'start', touch);\n\t\t\t\t}\n\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif (session.drag && touch.isFinal) {\n\t\t\t\t\t$.trigger(session.target, name + 'end', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture drag\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 20,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1\n\t\t}\n\t});\n})(mui, 'drag');\n/**\n * mui gesture tap and doubleTap\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar lastTarget;\n\tvar lastTapTime;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_END:\n\t\t\t\tif (!touch.isFinal) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar target = session.target;\n\t\t\t\tif (!target || (target.disabled || (target.classList && target.classList.contains('mui-disabled')))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (touch.distance < options.tapMaxDistance && touch.deltaTime < options.tapMaxTime) {\n\t\t\t\t\tif ($.options.gestureConfig.doubletap && lastTarget && (lastTarget === target)) { //same target\n\t\t\t\t\t\tif (lastTapTime && (touch.timestamp - lastTapTime) < options.tapMaxInterval) {\n\t\t\t\t\t\t\t$.trigger(target, 'doubletap', touch);\n\t\t\t\t\t\t\tlastTapTime = $.now();\n\t\t\t\t\t\t\tlastTarget = target;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$.trigger(target, name, touch);\n\t\t\t\t\tlastTapTime = $.now();\n\t\t\t\t\tlastTarget = target;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture tap\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 30,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\ttapMaxInterval: 300,\n\t\t\ttapMaxDistance: 5,\n\t\t\ttapMaxTime: 250\n\t\t}\n\t});\n})(mui, 'tap');\n/**\n * mui gesture longtap\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar timer;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t}, options.holdTimeout);\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (touch.distance > options.holdThreshold) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture longtap\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\tholdTimeout: 500,\n\t\t\tholdThreshold: 2\n\t\t}\n\t});\n})(mui, 'longtap');\n/**\n * mui gesture hold\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar timer;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tif ($.options.gestureConfig.hold) {\n\t\t\t\t\ttimer && clearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t\ttouch.hold = true;\n\t\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\t}, options.holdTimeout);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer) && (timer = null);\n\t\t\t\t\t$.trigger(session.target, 'release', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture hold\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\tholdTimeout: 0\n\t\t}\n\t});\n})(mui, 'hold');\n/**\n * mui gesture pinch\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar options = this.options;\n\t\tvar session = $.gestures.session;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif ($.options.gestureConfig.pinch) {\n\t\t\t\t\tif (touch.touches.length < 2) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!session.pinch) { //start\n\t\t\t\t\t\tsession.pinch = true;\n\t\t\t\t\t\t$.trigger(session.target, name + 'start', touch);\n\t\t\t\t\t}\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\tvar scale = touch.scale;\n\t\t\t\t\tvar rotation = touch.rotation;\n\t\t\t\t\tvar lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale;\n\t\t\t\t\tvar scaleDiff = 0.000000000001; //防止scale与lastScale相等，不触发事件的情况。\n\t\t\t\t\tif (scale > lastScale) { //out\n\t\t\t\t\t\tlastScale = scale - scaleDiff;\n\t\t\t\t\t\t$.trigger(session.target, name + 'out', touch);\n\t\t\t\t\t} //in\n\t\t\t\t\telse if (scale < lastScale) {\n\t\t\t\t\t\tlastScale = scale + scaleDiff;\n\t\t\t\t\t\t$.trigger(session.target, name + 'in', touch);\n\t\t\t\t\t}\n\t\t\t\t\tif (Math.abs(rotation) > options.minRotationAngle) {\n\t\t\t\t\t\t$.trigger(session.target, 'rotate', touch);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) {\n\t\t\t\t\tsession.pinch = false;\n\t\t\t\t\t$.trigger(session.target, name + 'end', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture pinch\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tminRotationAngle: 0\n\t\t}\n\t});\n})(mui, 'pinch');\n/**\n * mui.init\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.global = $.options = {\n\t\tgestureConfig: {\n\t\t\ttap: true,\n\t\t\tdoubletap: false,\n\t\t\tlongtap: false,\n\t\t\thold: false,\n\t\t\tflick: true,\n\t\t\tswipe: true,\n\t\t\tdrag: true,\n\t\t\tpinch: false\n\t\t}\n\t};\n\t/**\n\t *\n\t * @param {type} options\n\t * @returns {undefined}\n\t */\n\t$.initGlobal = function(options) {\n\t\t$.options = $.extend(true, $.global, options);\n\t\treturn this;\n\t};\n\tvar inits = {};\n\n\t/**\n\t * 单页配置 初始化\n\t * @param {object} options\n\t */\n\t$.init = function(options) {\n\t\t$.options = $.extend(true, $.global, options || {});\n\t\t$.ready(function() {\n\t\t\t$.doAction('inits', function(index, init) {\n\t\t\t\tvar isInit = !!(!inits[init.name] || init.repeat);\n\t\t\t\tif (isInit) {\n\t\t\t\t\tinit.handle.call($);\n\t\t\t\t\tinits[init.name] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn this;\n\t};\n\n\t/**\n\t * 增加初始化执行流程\n\t * @param {function} init\n\t */\n\t$.addInit = function(init) {\n\t\treturn $.addAction('inits', init);\n\t};\n\t/**\n\t * 处理html5版本subpages \n\t */\n\t$.addInit({\n\t\tname: 'iframe',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar subpages = options.subpages || [];\n\t\t\tif (!$.os.plus && subpages.length) {\n\t\t\t\t//暂时只处理单个subpage。后续可以考虑支持多个subpage\n\t\t\t\tcreateIframe(subpages[0]);\n\t\t\t}\n\t\t}\n\t});\n\tvar createIframe = function(options) {\n\t\tvar wrapper = document.createElement('div');\n\t\twrapper.className = 'mui-iframe-wrapper';\n\t\tvar styles = options.styles || {};\n\t\tif (typeof styles.top !== 'string') {\n\t\t\tstyles.top = '0px';\n\t\t}\n\t\tif (typeof styles.bottom !== 'string') {\n\t\t\tstyles.bottom = '0px';\n\t\t}\n\t\twrapper.style.top = styles.top;\n\t\twrapper.style.bottom = styles.bottom;\n\t\tvar iframe = document.createElement('iframe');\n\t\tiframe.src = options.url;\n\t\tiframe.id = options.id || options.url;\n\t\tiframe.name = iframe.id;\n\t\twrapper.appendChild(iframe);\n\t\tdocument.body.appendChild(wrapper);\n\t\t//目前仅处理微信\n\t\t$.os.wechat && handleScroll(wrapper, iframe);\n\t};\n\n\tfunction handleScroll(wrapper, iframe) {\n\t\tvar key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src;\n\t\tvar scrollTop = (parseFloat(localStorage.getItem(key)) || 0);\n\t\tif (scrollTop) {\n\t\t\t(function(y) {\n\t\t\t\tiframe.onload = function() {\n\t\t\t\t\twindow.scrollTo(0, y);\n\t\t\t\t};\n\t\t\t})(scrollTop);\n\t\t}\n\t\tsetInterval(function() {\n\t\t\tvar _scrollTop = window.scrollY;\n\t\t\tif (scrollTop !== _scrollTop) {\n\t\t\t\tlocalStorage.setItem(key, _scrollTop + '');\n\t\t\t\tscrollTop = _scrollTop;\n\t\t\t}\n\t\t}, 100);\n\t};\n\t$(function() {\n\t\tvar classList = document.body.classList;\n\t\tvar os = [];\n\t\tif ($.os.ios) {\n\t\t\tos.push({\n\t\t\t\tos: 'ios',\n\t\t\t\tversion: $.os.version\n\t\t\t});\n\t\t\tclassList.add('mui-ios');\n\t\t} else if ($.os.android) {\n\t\t\tos.push({\n\t\t\t\tos: 'android',\n\t\t\t\tversion: $.os.version\n\t\t\t});\n\t\t\tclassList.add('mui-android');\n\t\t}\n\t\tif ($.os.wechat) {\n\t\t\tos.push({\n\t\t\t\tos: 'wechat',\n\t\t\t\tversion: $.os.wechat.version\n\t\t\t});\n\t\t\tclassList.add('mui-wechat');\n\t\t}\n\t\tif (os.length) {\n\t\t\t$.each(os, function(index, osObj) {\n\t\t\t\tvar version = '';\n\t\t\t\tvar classArray = [];\n\t\t\t\tif (osObj.version) {\n\t\t\t\t\t$.each(osObj.version.split('.'), function(i, v) {\n\t\t\t\t\t\tversion = version + (version ? '-' : '') + v;\n\t\t\t\t\t\tclassList.add($.className(osObj.os + '-' + version));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(mui);\n/**\n * mui.init 5+\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\tvar defaultOptions = {\n\t\tswipeBack: false,\n\t\tpreloadPages: [], //5+ lazyLoad webview\n\t\tpreloadLimit: 10, //预加载窗口的数量限制(一旦超出，先进先出)\n\t\tkeyEventBind: {\n\t\t\tbackbutton: true,\n\t\t\tmenubutton: true\n\t\t},\n\t\ttitleConfig: {\n\t\t\theight: \"44px\",\n\t\t\tbackgroundColor: \"#f7f7f7\", //导航栏背景色\n\t\t\tbottomBorderColor: \"#cccccc\", //底部边线颜色\n\t\t\ttitle: { //标题配置\n\t\t\t\ttext: \"\", //标题文字\n\t\t\t\tposition: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\"\n\t\t\t\t},\n\t\t\t\tstyles: {\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talign: \"center\",\n\t\t\t\t\tfamily: \"'Helvetica Neue',Helvetica,sans-serif\",\n\t\t\t\t\tsize: \"17px\",\n\t\t\t\t\tstyle: \"normal\",\n\t\t\t\t\tweight: \"normal\",\n\t\t\t\t\tfontSrc: \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tback: {\n\t\t\t\timage: {\n\t\t\t\t\tbase64Data: '',\n\t\t\t\t\timgSrc: '',\n\t\t\t\t\tsprite: {\n\t\t\t\t\t\ttop: '0px',\n\t\t\t\t\t\tleft: '0px',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\theight: '100%'\n\t\t\t\t\t},\n\t\t\t\t\tposition: {\n\t\t\t\t\t\ttop: \"10px\",\n\t\t\t\t\t\tleft: \"10px\",\n\t\t\t\t\t\twidth: \"24px\",\n\t\t\t\t\t\theight: \"24px\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//默认页面动画\n\tvar defaultShow = {\n\t\tevent:\"titleUpdate\",\n\t\tautoShow: true,\n\t\tduration: 300,\n\t\taniShow: 'slide-in-right',\n\t\textras:{}\n\t};\n\t//若执行了显示动画初始化操作，则要覆盖默认配置\n\tif($.options.show) {\n\t\tdefaultShow = $.extend(true, defaultShow, $.options.show);\n\t}\n\n\t$.currentWebview = null;\n\n\t$.extend(true, $.global, defaultOptions);\n\t$.extend(true, $.options, defaultOptions);\n\t/**\n\t * 等待动画配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.waitingOptions = function(options) {\n\t\treturn $.extend(true, {}, {\n\t\t\tautoShow: true,\n\t\t\ttitle: '',\n\t\t\tmodal: false\n\t\t}, options);\n\t};\n\t/**\n\t * 窗口显示配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.showOptions = function(options) {\n\t\treturn $.extend(true, {}, defaultShow, options);\n\t};\n\t/**\n\t * 窗口默认配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.windowOptions = function(options) {\n\t\treturn $.extend({\n\t\t\tscalable: false,\n\t\t\tbounce: \"\" //vertical\n\t\t}, options);\n\t};\n\t/**\n\t * plusReady\n\t * @param {type} callback\n\t * @returns {_L6.$}\n\t */\n\t$.plusReady = function(callback) {\n\t\tif(window.plus) {\n\t\t\tsetTimeout(function() { //解决callback与plusready事件的执行时机问题(典型案例:showWaiting,closeWaiting)\n\t\t\t\tcallback();\n\t\t\t}, 0);\n\t\t} else {\n\t\t\tdocument.addEventListener(\"plusready\", function() {\n\t\t\t\tcallback();\n\t\t\t}, false);\n\t\t}\n\t\treturn this;\n\t};\n\t/**\n\t * 5+ event(5+没提供之前我自己实现)\n\t * @param {type} webview\n\t * @param {type} eventType\n\t * @param {type} data\n\t * @returns {undefined}\n\t */\n\t$.fire = function(webview, eventType, data) {\n\t\tif(webview) {\n\t\t\tif(typeof data === 'undefined') {\n\t\t\t\tdata = '';\n\t\t\t} else if(typeof data === 'boolean' || typeof data === 'number') {\n\t\t\t\twebview.evalJS(\"typeof mui!=='undefined'&&mui.receive('\" + eventType + \"',\" + data + \")\");\n\t\t\t\treturn;\n\t\t\t} else if($.isPlainObject(data) || $.isArray(data)) {\n\t\t\t\tdata = JSON.stringify(data || {}).replace(/\\'/g, \"\\\\u0027\").replace(/\\\\/g, \"\\\\u005c\");\n\t\t\t}\n\t\t\twebview.evalJS(\"typeof mui!=='undefined'&&mui.receive('\" + eventType + \"','\" + data + \"')\");\n\t\t}\n\t};\n\t/**\n\t * 5+ event(5+没提供之前我自己实现)\n\t * @param {type} eventType\n\t * @param {type} data\n\t * @returns {undefined}\n\t */\n\t$.receive = function(eventType, data) {\n\t\tif(eventType) {\n\t\t\ttry {\n\t\t\t\tif(data && typeof data === 'string') {\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\t}\n\t\t\t} catch(e) {}\n\t\t\t$.trigger(document, eventType, data);\n\t\t}\n\t};\n\tvar triggerPreload = function(webview) {\n\t\tif(!webview.preloaded) { //保证仅触发一次\n\t\t\t$.fire(webview, 'preload');\n\t\t\tvar list = webview.children();\n\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t$.fire(list[i], 'preload');\n\t\t\t}\n\t\t\twebview.preloaded = true;\n\t\t}\n\t};\n\tvar trigger = function(webview, eventType, timeChecked) {\n\t\tif(timeChecked) {\n\t\t\tif(!webview[eventType + 'ed']) {\n\t\t\t\t$.fire(webview, eventType);\n\t\t\t\tvar list = webview.children();\n\t\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t\t$.fire(list[i], eventType);\n\t\t\t\t}\n\t\t\t\twebview[eventType + 'ed'] = true;\n\t\t\t}\n\t\t} else {\n\t\t\t$.fire(webview, eventType);\n\t\t\tvar list = webview.children();\n\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t$.fire(list[i], eventType);\n\t\t\t}\n\t\t}\n\n\t};\n\t/**\n\t * 打开新窗口\n\t * @param {string} url 要打开的页面地址\n\t * @param {string} id 指定页面ID\n\t * @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}}\n\t */\n\t$.openWindow = function(url, id, options) {\n\t\tif(typeof url === 'object') {\n\t\t\toptions = url;\n\t\t\turl = options.url;\n\t\t\tid = options.id || url;\n\t\t} else {\n\t\t\tif(typeof id === 'object') {\n\t\t\t\toptions = id;\n\t\t\t\tid = options.id || url;\n\t\t\t} else {\n\t\t\t\tid = id || url;\n\t\t\t}\n\t\t}\n\t\tif(!$.os.plus) {\n\t\t\t//TODO 先临时这么处理：手机上顶层跳，PC上parent跳\n\t\t\tif($.os.ios || $.os.android) {\n\t\t\t\twindow.top.location.href = url;\n\t\t\t} else {\n\t\t\t\twindow.parent.location.href = url;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions = options || {};\n\t\tvar params = options.params || {};\n\t\tvar webview = null,\n\t\t\twebviewCache = null,\n\t\t\tnShow, nWaiting;\n\n\t\tif($.webviews[id]) {\n\t\t\twebviewCache = $.webviews[id];\n\t\t\t//webview真实存在，才能获取\n\t\t\tif(plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = webviewCache.webview;\n\t\t\t}\n\t\t} else if(options.createNew !== true) {\n\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t}\n\n\t\tif(webview) { //已缓存\n\t\t\t//每次show都需要传递动画参数；\n\t\t\t//预加载的动画参数优先级：openWindow配置>preloadPages配置>mui默认配置；\n\t\t\tnShow = webviewCache ? webviewCache.show : defaultShow;\n\t\t\tnShow = options.show ? $.extend(nShow, options.show) : nShow;\n\t\t\tnShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {\n\t\t\t\ttriggerPreload(webview);\n\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t});\n\t\t\tif(webviewCache) {\n\t\t\t\twebviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t}\n\t\t\treturn webview;\n\t\t} else { //新窗口\n\t\t\tif(!url) {\n\t\t\t\tthrow new Error('webview[' + id + '] does not exist');\n\t\t\t}\n\n\t\t\t//显示waiting\n\t\t\tvar waitingConfig = $.waitingOptions(options.waiting);\n\t\t\tif(waitingConfig.autoShow) {\n\t\t\t\tnWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);\n\t\t\t}\n\n\t\t\t//创建页面\n\t\t\toptions = $.extend(options, {\n\t\t\t\tid: id,\n\t\t\t\turl: url\n\t\t\t});\n\n\t\t\twebview = $.createWindow(options);\n\n\t\t\t//显示\n\t\t\tnShow = $.showOptions(options.show);\n\t\t\tif(nShow.autoShow) {\n\t\t\t\tvar showWebview = function() {\n\t\t\t\t\t//关闭等待框\n\t\t\t\t\tif(nWaiting) {\n\t\t\t\t\t\tnWaiting.close();\n\t\t\t\t\t}\n\t\t\t\t\t//显示页面\n\t\t\t\t\twebview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);\n\t\t\t\t\toptions.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t\t};\n\t\t\t\t//titleUpdate触发时机早于loaded，更换为titleUpdate后，可以更早的显示webview\n\t\t\t\twebview.addEventListener(nShow.event, showWebview, false);\n\t\t\t\t//loaded事件发生后，触发预加载和pagebeforeshow事件\n\t\t\t\twebview.addEventListener(\"loaded\", function() {\n\t\t\t\t\ttriggerPreload(webview);\n\t\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t$.openWindowWithTitle = function(options, titleConfig) {\n\t\toptions = options || {};\n\t\tvar url = options.url;\n\t\tvar id = options.id || url;\n\n\t\tif(!$.os.plus) {\n\t\t\t//TODO 先临时这么处理：手机上顶层跳，PC上parent跳\n\t\t\tif($.os.ios || $.os.android) {\n\t\t\t\twindow.top.location.href = url;\n\t\t\t} else {\n\t\t\t\twindow.parent.location.href = url;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar params = options.params || {};\n\t\tvar webview = null,\n\t\t\twebviewCache = null,\n\t\t\tnShow, nWaiting;\n\n\t\tif($.webviews[id]) {\n\t\t\twebviewCache = $.webviews[id];\n\t\t\t//webview真实存在，才能获取\n\t\t\tif(plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = webviewCache.webview;\n\t\t\t}\n\t\t} else if(options.createNew !== true) {\n\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t}\n\n\t\tif(webview) { //已缓存\n\t\t\t//每次show都需要传递动画参数；\n\t\t\t//预加载的动画参数优先级：openWindow配置>preloadPages配置>mui默认配置；\n\t\t\tnShow = webviewCache ? webviewCache.show : defaultShow;\n\t\t\tnShow = options.show ? $.extend(nShow, options.show) : nShow;\n\t\t\tnShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {\n\t\t\t\ttriggerPreload(webview);\n\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t});\n\t\t\tif(webviewCache) {\n\t\t\t\twebviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t}\n\t\t\treturn webview;\n\t\t} else { //新窗口\n\t\t\tif(!url) {\n\t\t\t\tthrow new Error('webview[' + id + '] does not exist');\n\t\t\t}\n\n\t\t\t//显示waiting\n\t\t\tvar waitingConfig = $.waitingOptions(options.waiting);\n\t\t\tif(waitingConfig.autoShow) {\n\t\t\t\tnWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);\n\t\t\t}\n\n\t\t\t//创建页面\n\t\t\toptions = $.extend(options, {\n\t\t\t\tid: id,\n\t\t\t\turl: url\n\t\t\t});\n\n\t\t\twebview = $.createWindow(options);\n\n\t\t\tif(titleConfig) { //处理原生头\n\t\t\t\t$.extend(true, $.options.titleConfig, titleConfig);\n\t\t\t\tvar tid = $.options.titleConfig.id ? $.options.titleConfig.id : id + \"_title\";\n\t\t\t\tvar view = new plus.nativeObj.View(tid, {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\theight: $.options.titleConfig.height,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tdock: \"top\",\n\t\t\t\t\tposition: \"dock\"\n\t\t\t\t});\n\t\t\t\tview.drawRect($.options.titleConfig.backgroundColor); //绘制背景色\n\t\t\t\tvar _b = parseInt($.options.titleConfig.height) - 1;\n\t\t\t\tview.drawRect($.options.titleConfig.bottomBorderColor, {\n\t\t\t\t\ttop: _b + \"px\",\n\t\t\t\t\tleft: \"0px\"\n\t\t\t\t}); //绘制底部边线\n\n\t\t\t\t//绘制文字\n\t\t\t\tif($.options.titleConfig.title.text){\n\t\t\t\t\tvar _title = $.options.titleConfig.title;\n\t\t\t\t\tview.drawText(_title.text,_title.position , _title.styles);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//返回图标绘制\n\t\t\t\tvar _back = $.options.titleConfig.back;\n\t\t\t\tvar backClick = null;\n\t\t\t\t//优先字体\n\n\t\t\t\t//其次是图片\n\t\t\t\tvar _backImage = _back.image;\n\t\t\t\tif(_backImage.base64Data || _backImage.imgSrc) {\n\t\t\t\t\t//TODO 此处需要处理百分比的情况\n\t\t\t\t\tbackClick = {\n\t\t\t\t\t\tleft:parseInt(_backImage.position.left),\n\t\t\t\t\t\tright:parseInt(_backImage.position.left) + parseInt(_backImage.position.width)\n\t\t\t\t\t};\n\t\t\t\t\tvar bitmap = new plus.nativeObj.Bitmap(id + \"_back\");\n\t\t\t\t\tif(_backImage.base64Data) { //优先base64编码字符串\n\t\t\t\t\t\tbitmap.loadBase64Data(_backImage.base64Data);\n\t\t\t\t\t} else { //其次加载图片文件\n\t\t\t\t\t\tbitmap.load(_backImage.imgSrc);\n\t\t\t\t\t}\n\t\t\t\t\tview.drawBitmap(bitmap,_backImage.sprite , _backImage.position);\n\t\t\t\t}\n\n\t\t\t\t//处理点击事件\n\t\t\t\tview.setTouchEventRect({\n\t\t\t\t\ttop: \"0px\",\n\t\t\t\t\tleft: \"0px\",\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\"\n\t\t\t\t});\n\t\t\t\tview.interceptTouchEvent(true);\n\t\t\t\tview.addEventListener(\"click\", function(e) {\n\t\t\t\t\tvar x = e.clientX;\n\t\t\t\t\t\n\t\t\t\t\t//返回按钮点击\n\t\t\t\t\tif(backClick&& x > backClick.left && x < backClick.right){\n\t\t\t\t\t\tif( _back.click && $.isFunction(_back.click)){\n\t\t\t\t\t\t\t_back.click();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\twebview.evalJS(\"window.mui&&mui.back();\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t\twebview.append(view);\n\n\t\t\t}\n\n\t\t\t//显示\n\t\t\tnShow = $.showOptions(options.show);\n\t\t\tif(nShow.autoShow) {\n\t\t\t\t//titleUpdate触发时机早于loaded，更换为titleUpdate后，可以更早的显示webview\n\t\t\t\twebview.addEventListener(nShow.event, function () {\n\t\t\t\t\t//关闭等待框\n\t\t\t\t\tif(nWaiting) {\n\t\t\t\t\t\tnWaiting.close();\n\t\t\t\t\t}\n\t\t\t\t\t//显示页面\n\t\t\t\t\twebview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t/**\n\t * 根据配置信息创建一个webview\n\t * @param {type} options\n\t * @param {type} isCreate\n\t * @returns {webview}\n\t */\n\t$.createWindow = function(options, isCreate) {\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\t\tvar id = options.id || options.url;\n\t\tvar webview;\n\t\tif(options.preload) {\n\t\t\tif($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache\n\t\t\t\twebview = $.webviews[id].webview;\n\t\t\t} else { //新增预加载窗口\n\t\t\t\t//判断是否携带createNew参数，默认为false\n\t\t\t\tif(options.createNew !== true) {\n\t\t\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t\t\t}\n\n\t\t\t\t//之前没有，那就新创建\t\n\t\t\t\tif(!webview) {\n\t\t\t\t\twebview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({\n\t\t\t\t\t\tpreload: true\n\t\t\t\t\t}, options.extras));\n\t\t\t\t\tif(options.subpages) {\n\t\t\t\t\t\t$.each(options.subpages, function(index, subpage) {\n\t\t\t\t\t\t\tvar subpageId = subpage.id || subpage.url;\n\t\t\t\t\t\t\tif(subpageId) { //过滤空对象\n\t\t\t\t\t\t\t\tvar subWebview = plus.webview.getWebviewById(subpageId);\n\t\t\t\t\t\t\t\tif(!subWebview) { //如果该webview不存在，则创建\n\t\t\t\t\t\t\t\t\tsubWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), $.extend({\n\t\t\t\t\t\t\t\t\t\tpreload: true\n\t\t\t\t\t\t\t\t\t}, subpage.extras));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twebview.append(subWebview);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//TODO 理论上，子webview也应该计算到预加载队列中，但这样就麻烦了，要退必须退整体，否则可能出现问题；\n\t\t\t$.webviews[id] = {\n\t\t\t\twebview: webview, //目前仅preload的缓存webview\n\t\t\t\tpreload: true,\n\t\t\t\tshow: $.showOptions(options.show),\n\t\t\t\tafterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯\n\t\t\t};\n\t\t\t//索引该预加载窗口\n\t\t\tvar preloads = $.data.preloads;\n\t\t\tvar index = preloads.indexOf(id);\n\t\t\tif(~index) { //删除已存在的(变相调整插入位置)\n\t\t\t\tpreloads.splice(index, 1);\n\t\t\t}\n\t\t\tpreloads.push(id);\n\t\t\tif(preloads.length > $.options.preloadLimit) {\n\t\t\t\t//先进先出\n\t\t\t\tvar first = $.data.preloads.shift();\n\t\t\t\tvar webviewCache = $.webviews[first];\n\t\t\t\tif(webviewCache && webviewCache.webview) {\n\t\t\t\t\t//需要将自己打开的所有页面，全部close；\n\t\t\t\t\t//关闭该预加载webview\t\n\t\t\t\t\t$.closeAll(webviewCache.webview);\n\t\t\t\t}\n\t\t\t\t//删除缓存\n\t\t\t\tdelete $.webviews[first];\n\t\t\t}\n\t\t} else {\n\t\t\tif(isCreate !== false) { //直接创建非预加载窗口\n\t\t\t\twebview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras);\n\t\t\t\tif(options.subpages) {\n\t\t\t\t\t$.each(options.subpages, function(index, subpage) {\n\t\t\t\t\t\tvar subpageId = subpage.id || subpage.url;\n\t\t\t\t\t\tvar subWebview = plus.webview.getWebviewById(subpageId);\n\t\t\t\t\t\tif(!subWebview) {\n\t\t\t\t\t\t\tsubWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), subpage.extras);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twebview.append(subWebview);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t/**\n\t * 预加载\n\t */\n\t$.preload = function(options) {\n\t\t//调用预加载函数，不管是否传递preload参数，强制变为true\n\t\tif(!options.preload) {\n\t\t\toptions.preload = true;\n\t\t}\n\t\treturn $.createWindow(options);\n\t};\n\n\t/**\n\t *关闭当前webview打开的所有webview；\n\t */\n\t$.closeOpened = function(webview) {\n\t\tvar opened = webview.opened();\n\t\tif(opened) {\n\t\t\tfor(var i = 0, len = opened.length; i < len; i++) {\n\t\t\t\tvar openedWebview = opened[i];\n\t\t\t\tvar open_open = openedWebview.opened();\n\t\t\t\tif(open_open && open_open.length > 0) {\n\t\t\t\t\t//关闭打开的webview\n\t\t\t\t\t$.closeOpened(openedWebview);\n\t\t\t\t\t//关闭自己\n\t\t\t\t\topenedWebview.close(\"none\");\n\t\t\t\t} else {\n\t\t\t\t\t//如果直接孩子节点，就不用关闭了，因为父关闭的时候，会自动关闭子；\n\t\t\t\t\tif(openedWebview.parent() !== webview) {\n\t\t\t\t\t\topenedWebview.close('none');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t$.closeAll = function(webview, aniShow) {\n\t\t$.closeOpened(webview);\n\t\tif(aniShow) {\n\t\t\twebview.close(aniShow);\n\t\t} else {\n\t\t\twebview.close();\n\t\t}\n\t};\n\n\t/**\n\t * 批量创建webview\n\t * @param {type} options\n\t * @returns {undefined}\n\t */\n\t$.createWindows = function(options) {\n\t\t$.each(options, function(index, option) {\n\t\t\t//初始化预加载窗口(创建)和非预加载窗口(仅配置，不创建)\n\t\t\t$.createWindow(option, false);\n\t\t});\n\t};\n\t/**\n\t * 创建当前页面的子webview\n\t * @param {type} options\n\t * @returns {webview}\n\t */\n\t$.appendWebview = function(options) {\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\t\tvar id = options.id || options.url;\n\t\tvar webview;\n\t\tif(!$.webviews[id]) { //保证执行一遍\n\t\t\t//TODO 这里也有隐患，比如某个webview不是作为subpage创建的，而是作为target webview的话；\n\t\t\tif(!plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = plus.webview.create(options.url, id, options.styles, options.extras);\n\t\t\t}\n\t\t\t//之前的实现方案：子窗口loaded之后再append到父窗口中；\n\t\t\t//问题：部分子窗口loaded事件发生较晚，此时执行父窗口的children方法会返回空，导致父子通讯失败；\n\t\t\t//     比如父页面执行完preload事件后，需触发子页面的preload事件，此时未append的话，就无法触发；\n\t\t\t//修改方式：不再监控loaded事件，直接append\n\t\t\t//by chb@20150521\n\t\t\t// webview.addEventListener('loaded', function() {\n\t\t\tplus.webview.currentWebview().append(webview);\n\t\t\t// });\n\t\t\t$.webviews[id] = options;\n\n\t\t}\n\t\treturn webview;\n\t};\n\n\t//全局webviews\n\t$.webviews = {};\n\t//预加载窗口索引\n\t$.data.preloads = [];\n\t//$.currentWebview\n\t$.plusReady(function() {\n\t\t$.currentWebview = plus.webview.currentWebview();\n\t});\n\t$.addInit({\n\t\tname: '5+',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar subpages = options.subpages || [];\n\t\t\tif($.os.plus) {\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t//TODO  这里需要判断一下，最好等子窗口加载完毕后，再调用主窗口的show方法；\n\t\t\t\t\t//或者：在openwindow方法中，监听实现；\n\t\t\t\t\t$.each(subpages, function(index, subpage) {\n\t\t\t\t\t\t$.appendWebview(subpage);\n\t\t\t\t\t});\n\t\t\t\t\t//判断是否首页\n\t\t\t\t\tif(plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) {\n\t\t\t\t\t\t//首页需要自己激活预加载；\n\t\t\t\t\t\t//timeout因为子页面loaded之后才append的，防止子页面尚未append、从而导致其preload未触发的问题；\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\ttriggerPreload(plus.webview.currentWebview());\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t}\n\t\t\t\t\t//设置ios顶部状态栏颜色；\n\t\t\t\t\tif($.os.ios && $.options.statusBarBackground) {\n\t\t\t\t\t\tplus.navigator.setStatusBarBackground($.options.statusBarBackground);\n\t\t\t\t\t}\n\t\t\t\t\tif($.os.android && parseFloat($.os.version) < 4.4) {\n\t\t\t\t\t\t//解决Android平台4.4版本以下，resume后，父窗体标题延迟渲染的问题；\n\t\t\t\t\t\tif(plus.webview.currentWebview().parent() == null) {\n\t\t\t\t\t\t\tdocument.addEventListener(\"resume\", function() {\n\t\t\t\t\t\t\t\tvar body = document.body;\n\t\t\t\t\t\t\t\tbody.style.display = 'none';\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tbody.style.display = '';\n\t\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t//已支持iframe嵌入\n\t\t\t\t//\t\t\t\tif (subpages.length > 0) {\n\t\t\t\t//\t\t\t\t\tvar err = document.createElement('div');\n\t\t\t\t//\t\t\t\t\terr.className = 'mui-error';\n\t\t\t\t//\t\t\t\t\t//文字描述\n\t\t\t\t//\t\t\t\t\tvar span = document.createElement('span');\n\t\t\t\t//\t\t\t\t\tspan.innerHTML = '在该浏览器下，不支持创建子页面，具体参考';\n\t\t\t\t//\t\t\t\t\terr.appendChild(span);\n\t\t\t\t//\t\t\t\t\tvar a = document.createElement('a');\n\t\t\t\t//\t\t\t\t\ta.innerHTML = '\"mui框架适用场景\"';\n\t\t\t\t//\t\t\t\t\ta.href = 'http://ask.dcloud.net.cn/article/113';\n\t\t\t\t//\t\t\t\t\terr.appendChild(a);\n\t\t\t\t//\t\t\t\t\tdocument.body.appendChild(err);\n\t\t\t\t//\t\t\t\t\tconsole.log('在该浏览器下，不支持创建子页面');\n\t\t\t\t//\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t});\n\twindow.addEventListener('preload', function() {\n\t\t//处理预加载部分\n\t\tvar webviews = $.options.preloadPages || [];\n\t\t$.plusReady(function() {\n\t\t\t$.each(webviews, function(index, webview) {\n\t\t\t\t$.createWindow($.extend(webview, {\n\t\t\t\t\tpreload: true\n\t\t\t\t}));\n\t\t\t});\n\n\t\t});\n\t});\n\t$.supportStatusbarOffset = function() {\n\t\treturn $.os.plus && $.os.ios && parseFloat($.os.version) >= 7;\n\t};\n\t$.ready(function() {\n\t\t//标识当前环境支持statusbar\n\t\tif($.supportStatusbarOffset()) {\n\t\t\tdocument.body.classList.add('mui-statusbar');\n\t\t}\n\t});\n})(mui);\n\n/**\n * mui back\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\t/**\n\t * register back\n\t * @param {type} back\n\t * @returns {$.gestures}\n\t */\n\t$.addBack = function(back) {\n\t\treturn $.addAction('backs', back);\n\t};\n\t/**\n\t * default\n\t */\n\t$.addBack({\n\t\tname: 'browser',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tif (window.history.length > 1) {\n\t\t\t\twindow.history.back();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t});\n\t/**\n\t * 后退\n\t */\n\t$.back = function() {\n\t\tif (typeof $.options.beforeback === 'function') {\n\t\t\tif ($.options.beforeback() === false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$.doAction('backs');\n\t};\n\twindow.addEventListener('tap', function(e) {\n\t\tvar action = $.targets.action;\n\t\tif (action && action.classList.contains('mui-action-back')) {\n\t\t\t$.back();\n\t\t\t$.targets.action = false;\n\t\t}\n\t});\n\twindow.addEventListener('swiperight', function(e) {\n\t\tvar detail = e.detail;\n\t\tif ($.options.swipeBack === true && Math.abs(detail.angle) < 3) {\n\t\t\t$.back();\n\t\t}\n\t});\n\n})(mui, window);\n/**\n * mui back 5+\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\tif ($.os.plus && $.os.android) {\n\t\t$.addBack({\n\t\t\tname: 'mui',\n\t\t\tindex: 5,\n\t\t\thandle: function() {\n\t\t\t\t//后续重新设计此处，将back放到各个空间内部实现\n\t\t\t\t//popover\n\t\t\t\tif ($.targets._popover && $.targets._popover.classList.contains('mui-active')) {\n\t\t\t\t\t$($.targets._popover).popover('hide');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//offcanvas\n\t\t\t\tvar offCanvas = document.querySelector('.mui-off-canvas-wrap.mui-active');\n\t\t\t\tif (offCanvas) {\n\t\t\t\t\t$(offCanvas).offCanvas('close');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage();\n\t\t\t\tif (previewImage && previewImage.isShown()) {\n\t\t\t\t\tpreviewImage.close();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//popup\n\t\t\t\treturn $.closePopup();\n\t\t\t}\n\t\t});\n\t}\n\t//首次按下back按键的时间\n\t$.__back__first = null;\n\t/**\n\t * 5+ back\n\t */\n\t$.addBack({\n\t\tname: '5+',\n\t\tindex: 10,\n\t\thandle: function() {\n\t\t\tif (!window.plus) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar wobj = plus.webview.currentWebview();\n\t\t\tvar parent = wobj.parent();\n\t\t\tif (parent) {\n\t\t\t\tparent.evalJS('mui&&mui.back();');\n\t\t\t} else {\n\t\t\t\twobj.canBack(function(e) {\n\t\t\t\t\t//by chb 暂时注释，在碰到类似popover之类的锚点的时候，需多次点击才能返回；\n\t\t\t\t\tif (e.canBack) { //webview history back\n\t\t\t\t\t\twindow.history.back();\n\t\t\t\t\t} else { //webview close or hide\n\t\t\t\t\t\t//fixed by fxy 此处不应该用opener判断，因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了，导致不能执行close\n\t\t\t\t\t\tif (wobj.id === plus.runtime.appid) { //首页\n\t\t\t\t\t\t\t//首页不存在opener的情况下，后退实际上应该是退出应用；\n\t\t\t\t\t\t\t//首次按键，提示‘再按一次退出应用’\n\t\t\t\t\t\t\tif (!$.__back__first) {\n\t\t\t\t\t\t\t\t$.__back__first = new Date().getTime();\n\t\t\t\t\t\t\t\tmui.toast('再按一次退出应用');\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t$.__back__first = null;\n\t\t\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (new Date().getTime() - $.__back__first < 2000) {\n\t\t\t\t\t\t\t\t\tplus.runtime.quit();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else { //其他页面，\n\t\t\t\t\t\t\tif (wobj.preload) {\n\t\t\t\t\t\t\t\twobj.hide(\"auto\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//关闭页面时，需要将其打开的所有子页面全部关闭；\n\t\t\t\t\t\t\t\t$.closeAll(wobj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t});\n\n\n\t$.menu = function() {\n\t\tvar menu = document.querySelector('.mui-action-menu');\n\t\tif (menu) {\n\t\t\t$.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话，找不到当前targets的问题\n\t\t\t$.trigger(menu, 'tap');\n\t\t} else { //执行父窗口的menu\n\t\t\tif (window.plus) {\n\t\t\t\tvar wobj = $.currentWebview;\n\t\t\t\tvar parent = wobj.parent();\n\t\t\t\tif (parent) { //又得evalJS\n\t\t\t\t\tparent.evalJS('mui&&mui.menu();');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar __back = function() {\n\t\t$.back();\n\t};\n\tvar __menu = function() {\n\t\t$.menu();\n\t};\n\t//默认监听\n\t$.plusReady(function() {\n\t\tif ($.options.keyEventBind.backbutton) {\n\t\t\tplus.key.addEventListener('backbutton', __back, false);\n\t\t}\n\t\tif ($.options.keyEventBind.menubutton) {\n\t\t\tplus.key.addEventListener('menubutton', __menu, false);\n\t\t}\n\t});\n\t//处理按键监听事件\n\t$.addInit({\n\t\tname: 'keyEventBind',\n\t\tindex: 1000,\n\t\thandle: function() {\n\t\t\t$.plusReady(function() {\n\t\t\t\t//如果不为true，则移除默认监听\n\t\t\t\tif (!$.options.keyEventBind.backbutton) {\n\t\t\t\t\tplus.key.removeEventListener('backbutton', __back);\n\t\t\t\t}\n\t\t\t\tif (!$.options.keyEventBind.menubutton) {\n\t\t\t\t\tplus.key.removeEventListener('menubutton', __menu);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(mui, window);\n/**\n * mui.init pulldownRefresh\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.addInit({\n\t\tname: 'pullrefresh',\n\t\tindex: 1000,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar pullRefreshOptions = options.pullRefresh || {};\n\t\t\tvar hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback');\n\t\t\tvar hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback');\n\t\t\tif(hasPulldown || hasPullup) {\n\t\t\t\tvar container = pullRefreshOptions.container;\n\t\t\t\tif(container) {\n\t\t\t\t\tvar $container = $(container);\n\t\t\t\t\tif($container.length === 1) {\n\t\t\t\t\t\tif($.os.plus) { //5+环境\n\t\t\t\t\t\t\tif(hasPulldown && pullRefreshOptions.down.style == \"circle\") { //原生转圈\n\t\t\t\t\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t\t\t\t\t//这里改写$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t$.fn.pullRefresh = $.fn.pullRefresh_native;\n\t\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t} else if($.os.android) { //非原生转圈，但是Android环境\n\t\t\t\t\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t\t\t\t\t//这里改写$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t$.fn.pullRefresh = $.fn.pullRefresh_native\n\t\t\t\t\t\t\t\t\tvar webview = plus.webview.currentWebview();\n\t\t\t\t\t\t\t\t\tif(window.__NWin_Enable__ === false) { //不支持多webview\n\t\t\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif(hasPullup) {\n\t\t\t\t\t\t\t\t\t\t\t//当前页面初始化pullup\n\t\t\t\t\t\t\t\t\t\t\tvar upOptions = {};\n\t\t\t\t\t\t\t\t\t\t\tupOptions.up = pullRefreshOptions.up;\n\t\t\t\t\t\t\t\t\t\t\tupOptions.webviewId = webview.id || webview.getURL();\n\t\t\t\t\t\t\t\t\t\t\t$container.pullRefresh(upOptions);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif(hasPulldown) {\n\t\t\t\t\t\t\t\t\t\t\tvar parent = webview.parent();\n\t\t\t\t\t\t\t\t\t\t\tvar id = webview.id || webview.getURL();\n\t\t\t\t\t\t\t\t\t\t\tif(parent) {\n\t\t\t\t\t\t\t\t\t\t\t\tif(!hasPullup) { //如果没有上拉加载，需要手动初始化一个默认的pullRefresh，以便当前页面容器可以调用endPulldownToRefresh等方法\n\t\t\t\t\t\t\t\t\t\t\t\t\t$container.pullRefresh({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebviewId: id\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tvar downOptions = {\n\t\t\t\t\t\t\t\t\t\t\t\t\twebviewId: id//子页面id\n\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\tdownOptions.down = $.extend({}, pullRefreshOptions.down);\n\t\t\t\t\t\t\t\t\t\t\t\tdownOptions.down.callback = '_CALLBACK';\n\t\t\t\t\t\t\t\t\t\t\t\t//改写父页面的$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t\t\t\tparent.evalJS(\"mui.fn.pullRefresh=mui.fn.pullRefresh_native\");\n\t\t\t\t\t\t\t\t\t\t\t\t//父页面初始化pulldown\n\t\t\t\t\t\t\t\t\t\t\t\tparent.evalJS(\"mui&&mui(document.querySelector('.mui-content')).pullRefresh('\" + JSON.stringify(downOptions) + \"')\");\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else { //非原生转圈，iOS环境\n\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(mui);\n/**\n * mui ajax\n * @param {type} $\n * @returns {undefined}\n */\n(function($, window, undefined) {\n\n\tvar jsonType = 'application/json';\n\tvar htmlType = 'text/html';\n\tvar rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi;\n\tvar scriptTypeRE = /^(?:text|application)\\/javascript/i;\n\tvar xmlTypeRE = /^(?:text|application)\\/xml/i;\n\tvar blankRE = /^\\s*$/;\n\n\t$.ajaxSettings = {\n\t\ttype: 'GET',\n\t\tbeforeSend: $.noop,\n\t\tsuccess: $.noop,\n\t\terror: $.noop,\n\t\tcomplete: $.noop,\n\t\tcontext: null,\n\t\txhr: function(protocol) {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t},\n\t\taccepts: {\n\t\t\tscript: 'text/javascript, application/javascript, application/x-javascript',\n\t\t\tjson: jsonType,\n\t\t\txml: 'application/xml, text/xml',\n\t\t\thtml: htmlType,\n\t\t\ttext: 'text/plain'\n\t\t},\n\t\ttimeout: 0,\n\t\tprocessData: true,\n\t\tcache: true\n\t};\n\tvar ajaxBeforeSend = function(xhr, settings) {\n\t\tvar context = settings.context\n\t\tif(settings.beforeSend.call(context, xhr, settings) === false) {\n\t\t\treturn false;\n\t\t}\n\t};\n\tvar ajaxSuccess = function(data, xhr, settings) {\n\t\tsettings.success.call(settings.context, data, 'success', xhr);\n\t\tajaxComplete('success', xhr, settings);\n\t};\n\t// type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n\tvar ajaxError = function(error, type, xhr, settings) {\n\t\tsettings.error.call(settings.context, xhr, type, error);\n\t\tajaxComplete(type, xhr, settings);\n\t};\n\t// status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n\tvar ajaxComplete = function(status, xhr, settings) {\n\t\tsettings.complete.call(settings.context, xhr, status);\n\t};\n\n\tvar serialize = function(params, obj, traditional, scope) {\n\t\tvar type, array = $.isArray(obj),\n\t\t\thash = $.isPlainObject(obj);\n\t\t$.each(obj, function(key, value) {\n\t\t\ttype = $.type(value);\n\t\t\tif(scope) {\n\t\t\t\tkey = traditional ? scope :\n\t\t\t\t\tscope + '[' + (hash || type === 'object' || type === 'array' ? key : '') + ']';\n\t\t\t}\n\t\t\t// handle data in serializeArray() format\n\t\t\tif(!scope && array) {\n\t\t\t\tparams.add(value.name, value.value);\n\t\t\t}\n\t\t\t// recurse into nested objects\n\t\t\telse if(type === \"array\" || (!traditional && type === \"object\")) {\n\t\t\t\tserialize(params, value, traditional, key);\n\t\t\t} else {\n\t\t\t\tparams.add(key, value);\n\t\t\t}\n\t\t});\n\t};\n\tvar serializeData = function(options) {\n\t\tif(options.processData && options.data && typeof options.data !== \"string\") {\n\t\t\tvar contentType = options.contentType;\n\t\t\tif(!contentType && options.headers) {\n\t\t\t\tcontentType = options.headers['Content-Type'];\n\t\t\t}\n\t\t\tif(contentType && ~contentType.indexOf(jsonType)) { //application/json\n\t\t\t\toptions.data = JSON.stringify(options.data);\n\t\t\t} else {\n\t\t\t\toptions.data = $.param(options.data, options.traditional);\n\t\t\t}\n\t\t}\n\t\tif(options.data && (!options.type || options.type.toUpperCase() === 'GET')) {\n\t\t\toptions.url = appendQuery(options.url, options.data);\n\t\t\toptions.data = undefined;\n\t\t}\n\t};\n\tvar appendQuery = function(url, query) {\n\t\tif(query === '') {\n\t\t\treturn url;\n\t\t}\n\t\treturn(url + '&' + query).replace(/[&?]{1,2}/, '?');\n\t};\n\tvar mimeToDataType = function(mime) {\n\t\tif(mime) {\n\t\t\tmime = mime.split(';', 2)[0];\n\t\t}\n\t\treturn mime && (mime === htmlType ? 'html' :\n\t\t\tmime === jsonType ? 'json' :\n\t\t\tscriptTypeRE.test(mime) ? 'script' :\n\t\t\txmlTypeRE.test(mime) && 'xml') || 'text';\n\t};\n\tvar parseArguments = function(url, data, success, dataType) {\n\t\tif($.isFunction(data)) {\n\t\t\tdataType = success, success = data, data = undefined;\n\t\t}\n\t\tif(!$.isFunction(success)) {\n\t\t\tdataType = success, success = undefined;\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: success,\n\t\t\tdataType: dataType\n\t\t};\n\t};\n\t$.ajax = function(url, options) {\n\t\tif(typeof url === \"object\") {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\t\tvar settings = options || {};\n\t\tsettings.url = url || settings.url;\n\t\tfor(var key in $.ajaxSettings) {\n\t\t\tif(settings[key] === undefined) {\n\t\t\t\tsettings[key] = $.ajaxSettings[key];\n\t\t\t}\n\t\t}\n\t\tserializeData(settings);\n\t\tvar dataType = settings.dataType;\n\n\t\tif(settings.cache === false || ((!options || options.cache !== true) && ('script' === dataType))) {\n\t\t\tsettings.url = appendQuery(settings.url, '_=' + $.now());\n\t\t}\n\t\tvar mime = settings.accepts[dataType && dataType.toLowerCase()];\n\t\tvar headers = {};\n\t\tvar setHeader = function(name, value) {\n\t\t\theaders[name.toLowerCase()] = [name, value];\n\t\t};\n\t\tvar protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol;        \n\t\tvar xhr = settings.xhr(settings);\n        \n        if(location.protocol === 'file:' && $.os.ios && window.webkit && window.webkit.messageHandlers && !(xhr instanceof plus.net.XMLHttpRequest)){\n            console.error(\"当前运行环境为WKWebview，需在plusReady事件触发后再调用mui.ajax，否则可能会执行失败或报Script error的错误\")\n        }\n\t\tvar nativeSetHeader = xhr.setRequestHeader;\n\t\tvar abortTimeout;\n\n\t\tsetHeader('X-Requested-With', 'XMLHttpRequest');\n\t\tsetHeader('Accept', mime || '*/*');\n\t\tif(!!(mime = settings.mimeType || mime)) {\n\t\t\tif(mime.indexOf(',') > -1) {\n\t\t\t\tmime = mime.split(',', 2)[0];\n\t\t\t}\n\t\t\txhr.overrideMimeType && xhr.overrideMimeType(mime);\n\t\t}\n\t\tif(settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() !== 'GET')) {\n\t\t\tsetHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');\n\t\t}\n\t\tif(settings.headers) {\n\t\t\tfor(var name in settings.headers)\n\t\t\t\tsetHeader(name, settings.headers[name]);\n\t\t}\n\t\txhr.setRequestHeader = setHeader;\n\n\t\txhr.onreadystatechange = function() {\n\t\t\tif(xhr.readyState === 4) {\n\t\t\t\txhr.onreadystatechange = $.noop;\n\t\t\t\tclearTimeout(abortTimeout);\n\t\t\t\tvar result, error = false;\n\t\t\t\tvar isLocal = protocol === 'file:';\n\t\t\t\tif((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || (xhr.status === 0 && isLocal && xhr.responseText)) {\n\t\t\t\t\tdataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));\n\t\t\t\t\tresult = xhr.responseText;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// http://perfectionkills.com/global-eval-what-are-the-options/\n\t\t\t\t\t\tif(dataType === 'script') {\n\t\t\t\t\t\t\t(1, eval)(result);\n\t\t\t\t\t\t} else if(dataType === 'xml') {\n\t\t\t\t\t\t\tresult = xhr.responseXML;\n\t\t\t\t\t\t} else if(dataType === 'json') {\n\t\t\t\t\t\t\tresult = blankRE.test(result) ? null : $.parseJSON(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\terror = e;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(error) {\n\t\t\t\t\t\tajaxError(error, 'parsererror', xhr, settings);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tajaxSuccess(result, xhr, settings);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar status = xhr.status ? 'error' : 'abort';\n\t\t\t\t\tvar statusText = xhr.statusText || null;\n\t\t\t\t\tif(isLocal) {\n\t\t\t\t\t\tstatus = 'error';\n\t\t\t\t\t\tstatusText = '404';\n\t\t\t\t\t}\n\t\t\t\t\tajaxError(statusText, status, xhr, settings);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif(ajaxBeforeSend(xhr, settings) === false) {\n\t\t\txhr.abort();\n\t\t\tajaxError(null, 'abort', xhr, settings);\n\t\t\treturn xhr;\n\t\t}\n\n\t\tif(settings.xhrFields) {\n\t\t\tfor(var name in settings.xhrFields) {\n\t\t\t\txhr[name] = settings.xhrFields[name];\n\t\t\t}\n\t\t}\n\n\t\tvar async = 'async' in settings ? settings.async : true;\n\n\t\txhr.open(settings.type.toUpperCase(), settings.url, async, settings.username, settings.password);\n\n\t\tfor(var name in headers) {\n\t\t\tif(headers.hasOwnProperty(name)) {\n\t\t\t\tnativeSetHeader.apply(xhr, headers[name]);\n\t\t\t}\n\t\t}\n\t\tif(settings.timeout > 0) {\n\t\t\tabortTimeout = setTimeout(function() {\n\t\t\t\txhr.onreadystatechange = $.noop;\n\t\t\t\txhr.abort();\n\t\t\t\tajaxError(null, 'timeout', xhr, settings);\n\t\t\t}, settings.timeout);\n\t\t}\n\t\txhr.send(settings.data ? settings.data : null);\n\t\treturn xhr;\n\t};\n\n\t$.param = function(obj, traditional) {\n\t\tvar params = [];\n\t\tparams.add = function(k, v) {\n\t\t\tthis.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n\t\t};\n\t\tserialize(params, obj, traditional);\n\t\treturn params.join('&').replace(/%20/g, '+');\n\t};\n\t$.get = function( /* url, data, success, dataType */ ) {\n\t\treturn $.ajax(parseArguments.apply(null, arguments));\n\t};\n\n\t$.post = function( /* url, data, success, dataType */ ) {\n\t\tvar options = parseArguments.apply(null, arguments);\n\t\toptions.type = 'POST';\n\t\treturn $.ajax(options);\n\t};\n\n\t$.getJSON = function( /* url, data, success */ ) {\n\t\tvar options = parseArguments.apply(null, arguments);\n\t\toptions.dataType = 'json';\n\t\treturn $.ajax(options);\n\t};\n\n\t$.fn.load = function(url, data, success) {\n\t\tif(!this.length)\n\t\t\treturn this;\n\t\tvar self = this,\n\t\t\tparts = url.split(/\\s/),\n\t\t\tselector,\n\t\t\toptions = parseArguments(url, data, success),\n\t\t\tcallback = options.success;\n\t\tif(parts.length > 1)\n\t\t\toptions.url = parts[0], selector = parts[1];\n\t\toptions.success = function(response) {\n\t\t\tif(selector) {\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tdiv.innerHTML = response.replace(rscript, \"\");\n\t\t\t\tvar selectorDiv = document.createElement('div');\n\t\t\t\tvar childs = div.querySelectorAll(selector);\n\t\t\t\tif(childs && childs.length > 0) {\n\t\t\t\t\tfor(var i = 0, len = childs.length; i < len; i++) {\n\t\t\t\t\t\tselectorDiv.appendChild(childs[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself[0].innerHTML = selectorDiv.innerHTML;\n\t\t\t} else {\n\t\t\t\tself[0].innerHTML = response;\n\t\t\t}\n\t\t\tcallback && callback.apply(self, arguments);\n\t\t};\n\t\t$.ajax(options);\n\t\treturn this;\n\t};\n\n})(mui, window);\n/**\n * 5+ ajax\n */\n(function($) {\n\tvar originAnchor = document.createElement('a');\n\toriginAnchor.href = window.location.href;\n\t$.plusReady(function() {\n\t\t$.ajaxSettings = $.extend($.ajaxSettings, {\n\t\t\txhr: function(settings) {\n\t\t\t\tif (settings.crossDomain) { //强制使用plus跨域\n\t\t\t\t\treturn new plus.net.XMLHttpRequest();\n\t\t\t\t}\n\t\t\t\t//仅在webview的url为远程文件，且ajax请求的资源不同源下使用plus.net.XMLHttpRequest\n\t\t\t\tif (originAnchor.protocol !== 'file:') {\n\t\t\t\t\tvar urlAnchor = document.createElement('a');\n\t\t\t\t\turlAnchor.href = settings.url;\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\tsettings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host);\n\t\t\t\t\tif (settings.crossDomain) {\n\t\t\t\t\t\treturn new plus.net.XMLHttpRequest();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ($.os.ios && window.webkit && window.webkit.messageHandlers) { //wkwebview下同样使用5+ xhr\n                    return new plus.net.XMLHttpRequest();\n                }\n\t\t\t\treturn new window.XMLHttpRequest();\n\t\t\t}\n\t\t});\n\t});\n})(mui);\n/**\n * mui layout(offset[,position,width,height...])\n * @param {type} $\n * @param {type} window\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, undefined) {\n\t$.offset = function(element) {\n\t\tvar box = {\n\t\t\ttop : 0,\n\t\t\tleft : 0\n\t\t};\n\t\tif ( typeof element.getBoundingClientRect !== undefined) {\n\t\t\tbox = element.getBoundingClientRect();\n\t\t}\n\t\treturn {\n\t\t\ttop : box.top + window.pageYOffset - element.clientTop,\n\t\t\tleft : box.left + window.pageXOffset - element.clientLeft\n\t\t};\n\t};\n})(mui, window); \n/**\n * mui animation\n */\n(function($, window) {\n\t/**\n\t * scrollTo\n\t */\n\t$.scrollTo = function(scrollTop, duration, callback) {\n\t\tduration = duration || 1000;\n\t\tvar scroll = function(duration) {\n\t\t\tif (duration <= 0) {\n\t\t\t\twindow.scrollTo(0, scrollTop);\n\t\t\t\tcallback && callback();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar distaince = scrollTop - window.scrollY;\n\t\t\tsetTimeout(function() {\n\t\t\t\twindow.scrollTo(0, window.scrollY + distaince / duration * 10);\n\t\t\t\tscroll(duration - 10);\n\t\t\t}, 16.7);\n\t\t};\n\t\tscroll(duration);\n\t};\n\t$.animationFrame = function(cb) {\n\t\tvar args, isQueued, context;\n\t\treturn function() {\n\t\t\targs = arguments;\n\t\t\tcontext = this;\n\t\t\tif (!isQueued) {\n\t\t\t\tisQueued = true;\n\t\t\t\trequestAnimationFrame(function() {\n\t\t\t\t\tcb.apply(context, args);\n\t\t\t\t\tisQueued = false;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t};\n\n})(mui, window);\n(function($) {\n\tvar initializing = false,\n\t\tfnTest = /xyz/.test(function() {\n\t\t\txyz;\n\t\t}) ? /\\b_super\\b/ : /.*/;\n\n\tvar Class = function() {};\n\tClass.extend = function(prop) {\n\t\tvar _super = this.prototype;\n\t\tinitializing = true;\n\t\tvar prototype = new this();\n\t\tinitializing = false;\n\t\tfor (var name in prop) {\n\t\t\tprototype[name] = typeof prop[name] == \"function\" &&\n\t\t\t\ttypeof _super[name] == \"function\" && fnTest.test(prop[name]) ?\n\t\t\t\t(function(name, fn) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tvar tmp = this._super;\n\n\t\t\t\t\t\tthis._super = _super[name];\n\n\t\t\t\t\t\tvar ret = fn.apply(this, arguments);\n\t\t\t\t\t\tthis._super = tmp;\n\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t};\n\t\t\t\t})(name, prop[name]) :\n\t\t\t\tprop[name];\n\t\t}\n\t\tfunction Class() {\n\t\t\tif (!initializing && this.init)\n\t\t\t\tthis.init.apply(this, arguments);\n\t\t}\n\t\tClass.prototype = prototype;\n\t\tClass.prototype.constructor = Class;\n\t\tClass.extend = arguments.callee;\n\t\treturn Class;\n\t};\n\t$.Class = Class;\n})(mui);\n(function($, document, undefined) {\n    var CLASS_PULL_TOP_POCKET = 'mui-pull-top-pocket';\n    var CLASS_PULL_BOTTOM_POCKET = 'mui-pull-bottom-pocket';\n    var CLASS_PULL = 'mui-pull';\n    var CLASS_PULL_LOADING = 'mui-pull-loading';\n    var CLASS_PULL_CAPTION = 'mui-pull-caption';\n    var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down';\n    var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh';\n    var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore';\n\n    var CLASS_ICON = 'mui-icon';\n    var CLASS_SPINNER = 'mui-spinner';\n    var CLASS_ICON_PULLDOWN = 'mui-icon-pulldown';\n\n    var CLASS_BLOCK = 'mui-block';\n    var CLASS_HIDDEN = 'mui-hidden';\n    var CLASS_VISIBILITY = 'mui-visibility';\n\n    var CLASS_LOADING_UP = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;\n    var CLASS_LOADING_DOWN = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;\n    var CLASS_LOADING = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_SPINNER;\n\n    var pocketHtml = ['<div class=\"' + CLASS_PULL + '\">', '<div class=\"{icon}\"></div>', '<div class=\"' + CLASS_PULL_CAPTION + '\">{contentrefresh}</div>', '</div>'].join('');\n\n    var PullRefresh = {\n        init: function(element, options) {\n            this._super(element, $.extend(true, {\n                scrollY: true,\n                scrollX: false,\n                indicators: true,\n                deceleration: 0.003,\n                down: {\n                    height: 50,\n                    contentinit: '下拉可以刷新',\n                    contentdown: '下拉可以刷新',\n                    contentover: '释放立即刷新',\n                    contentrefresh: '正在刷新...'\n                },\n                up: {\n                    height: 50,\n                    auto: false,\n                    contentinit: '上拉显示更多',\n                    contentdown: '上拉显示更多',\n                    contentrefresh: '正在加载...',\n                    contentnomore: '没有更多数据了',\n                    duration: 300\n                }\n            }, options));\n        },\n        _init: function() {\n            this._super();\n            this._initPocket();\n        },\n        _initPulldownRefresh: function() {\n            this.pulldown = true;\n            if (this.topPocket) {\n                this.pullPocket = this.topPocket;\n                this.pullPocket.classList.add(CLASS_BLOCK);\n                this.pullPocket.classList.add(CLASS_VISIBILITY);\n                this.pullCaption = this.topCaption;\n                this.pullLoading = this.topLoading;\n            }\n        },\n        _initPullupRefresh: function() {\n            this.pulldown = false;\n            if (this.bottomPocket) {\n                this.pullPocket = this.bottomPocket;\n                this.pullPocket.classList.add(CLASS_BLOCK);\n                this.pullPocket.classList.add(CLASS_VISIBILITY);\n                this.pullCaption = this.bottomCaption;\n                this.pullLoading = this.bottomLoading;\n            }\n        },\n        _initPocket: function() {\n            var options = this.options;\n            if (options.down && options.down.hasOwnProperty('callback')) {\n                this.topPocket = this.scroller.querySelector('.' + CLASS_PULL_TOP_POCKET);\n                if (!this.topPocket) {\n                    this.topPocket = this._createPocket(CLASS_PULL_TOP_POCKET, options.down, CLASS_LOADING_DOWN);\n                    this.wrapper.insertBefore(this.topPocket, this.wrapper.firstChild);\n                }\n                this.topLoading = this.topPocket.querySelector('.' + CLASS_PULL_LOADING);\n                this.topCaption = this.topPocket.querySelector('.' + CLASS_PULL_CAPTION);\n            }\n            if (options.up && options.up.hasOwnProperty('callback')) {\n                this.bottomPocket = this.scroller.querySelector('.' + CLASS_PULL_BOTTOM_POCKET);\n                if (!this.bottomPocket) {\n                    this.bottomPocket = this._createPocket(CLASS_PULL_BOTTOM_POCKET, options.up, CLASS_LOADING);\n                    this.scroller.appendChild(this.bottomPocket);\n                }\n                this.bottomLoading = this.bottomPocket.querySelector('.' + CLASS_PULL_LOADING);\n                this.bottomCaption = this.bottomPocket.querySelector('.' + CLASS_PULL_CAPTION);\n                //TODO only for h5\n                this.wrapper.addEventListener('scrollbottom', this);\n            }\n        },\n        _createPocket: function(clazz, options, iconClass) {\n            var pocket = document.createElement('div');\n            pocket.className = clazz;\n            pocket.innerHTML = pocketHtml.replace('{contentrefresh}', options.contentinit).replace('{icon}', iconClass);\n            return pocket;\n        },\n        _resetPullDownLoading: function() {\n            var loading = this.pullLoading;\n            if (loading) {\n                this.pullCaption.innerHTML = this.options.down.contentdown;\n                loading.style.webkitTransition = \"\";\n                loading.style.webkitTransform = \"\";\n                loading.style.webkitAnimation = \"\";\n                loading.className = CLASS_LOADING_DOWN;\n            }\n        },\n        _setCaptionClass: function(isPulldown, caption, title) {\n            if (!isPulldown) {\n                switch (title) {\n                    case this.options.up.contentdown:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                        break;\n                    case this.options.up.contentrefresh:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH\n                        break;\n                    case this.options.up.contentnomore:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;\n                        break;\n                }\n            }\n        },\n        _setCaption: function(title, reset) {\n            if (this.loading) {\n                return;\n            }\n            var options = this.options;\n            var pocket = this.pullPocket;\n            var caption = this.pullCaption;\n            var loading = this.pullLoading;\n            var isPulldown = this.pulldown;\n            var self = this;\n            if (pocket) {\n                if (reset) {\n                    setTimeout(function() {\n                        caption.innerHTML = self.lastTitle = title;\n                        if (isPulldown) {\n                            loading.className = CLASS_LOADING_DOWN;\n                        } else {\n                            self._setCaptionClass(false, caption, title);\n                            loading.className = CLASS_LOADING;\n                        }\n                        loading.style.webkitAnimation = \"\";\n                        loading.style.webkitTransition = \"\";\n                        loading.style.webkitTransform = \"\";\n                    }, 100);\n                } else {\n                    if (title !== this.lastTitle) {\n                        caption.innerHTML = title;\n                        if (isPulldown) {\n                            if (title === options.down.contentrefresh) {\n                                loading.className = CLASS_LOADING;\n                                loading.style.webkitAnimation = \"spinner-spin 1s step-end infinite\";\n                            } else if (title === options.down.contentover) {\n                                loading.className = CLASS_LOADING_UP;\n                                loading.style.webkitTransition = \"-webkit-transform 0.3s ease-in\";\n                                loading.style.webkitTransform = \"rotate(180deg)\";\n                            } else if (title === options.down.contentdown) {\n                                loading.className = CLASS_LOADING_DOWN;\n                                loading.style.webkitTransition = \"-webkit-transform 0.3s ease-in\";\n                                loading.style.webkitTransform = \"rotate(0deg)\";\n                            }\n                        } else {\n                            if (title === options.up.contentrefresh) {\n                                loading.className = CLASS_LOADING + ' ' + CLASS_VISIBILITY;\n                            } else {\n                                loading.className = CLASS_LOADING + ' ' + CLASS_HIDDEN;\n                            }\n                            self._setCaptionClass(false, caption, title);\n                        }\n                        this.lastTitle = title;\n                    }\n                }\n\n            }\n        }\n    };\n    $.PullRefresh = PullRefresh;\n})(mui, document);\n(function($, window, document, undefined) {\n\tvar CLASS_SCROLL = 'mui-scroll';\n\tvar CLASS_SCROLLBAR = 'mui-scrollbar';\n\tvar CLASS_INDICATOR = 'mui-scrollbar-indicator';\n\tvar CLASS_SCROLLBAR_VERTICAL = CLASS_SCROLLBAR + '-vertical';\n\tvar CLASS_SCROLLBAR_HORIZONTAL = CLASS_SCROLLBAR + '-horizontal';\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\tvar ease = {\n\t\tquadratic: {\n\t\t\tstyle: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n\t\t\tfn: function(k) {\n\t\t\t\treturn k * (2 - k);\n\t\t\t}\n\t\t},\n\t\tcircular: {\n\t\t\tstyle: 'cubic-bezier(0.1, 0.57, 0.1, 1)',\n\t\t\tfn: function(k) {\n\t\t\t\treturn Math.sqrt(1 - (--k * k));\n\t\t\t}\n\t\t},\n\t\toutCirc: {\n\t\t\tstyle: 'cubic-bezier(0.075, 0.82, 0.165, 1)'\n\t\t},\n\t\toutCubic: {\n\t\t\tstyle: 'cubic-bezier(0.165, 0.84, 0.44, 1)'\n\t\t}\n\t}\n\tvar Scroll = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.wrapper = this.element = element;\n\t\t\tthis.scroller = this.wrapper.children[0];\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t\tthis.stopped = false;\n\n\t\t\tthis.options = $.extend(true, {\n\t\t\t\tscrollY: true, //是否竖向滚动\n\t\t\t\tscrollX: false, //是否横向滚动\n\t\t\t\tstartX: 0, //初始化时滚动至x\n\t\t\t\tstartY: 0, //初始化时滚动至y\n\n\t\t\t\tindicators: true, //是否显示滚动条\n\t\t\t\tstopPropagation: false,\n\t\t\t\thardwareAccelerated: true,\n\t\t\t\tfixedBadAndorid: false,\n\t\t\t\tpreventDefaultException: {\n\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/\n\t\t\t\t},\n\t\t\t\tmomentum: true,\n\n\t\t\t\tsnapX: 0.5, //横向切换距离(以当前容器宽度为基准)\n\t\t\t\tsnap: false, //图片轮播，拖拽式选项卡\n\n\t\t\t\tbounce: true, //是否启用回弹\n\t\t\t\tbounceTime: 500, //回弹动画时间\n\t\t\t\tbounceEasing: ease.outCirc, //回弹动画曲线\n\n\t\t\t\tscrollTime: 500,\n\t\t\t\tscrollEasing: ease.outCubic, //轮播动画曲线\n\n\t\t\t\tdirectionLockThreshold: 5,\n\n\t\t\t\tparallaxElement: false, //视差元素\n\t\t\t\tparallaxRatio: 0.5\n\t\t\t}, options);\n\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tthis.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : '';\n\n\t\t\tthis._init();\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.refresh();\n\t\t\t\t//\t\t\t\tif (this.options.startX !== 0 || this.options.startY !== 0) { //需要判断吗？后续根据实际情况再看看\n\t\t\t\tthis.scrollTo(this.options.startX, this.options.startY);\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._initParallax();\n\t\t\tthis._initIndicators();\n\t\t\tthis._initEvent();\n\t\t},\n\t\t_initParallax: function() {\n\t\t\tif (this.options.parallaxElement) {\n\t\t\t\tthis.parallaxElement = document.querySelector(this.options.parallaxElement);\n\t\t\t\tthis.parallaxStyle = this.parallaxElement.style;\n\t\t\t\tthis.parallaxHeight = this.parallaxElement.offsetHeight;\n\t\t\t\tthis.parallaxImgStyle = this.parallaxElement.querySelector('img').style;\n\t\t\t}\n\t\t},\n\t\t_initIndicators: function() {\n\t\t\tvar self = this;\n\t\t\tself.indicators = [];\n\t\t\tif (!this.options.indicators) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar indicators = [],\n\t\t\t\tindicator;\n\n\t\t\t// Vertical scrollbar\n\t\t\tif (self.options.scrollY) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: this._createScrollBar(CLASS_SCROLLBAR_VERTICAL),\n\t\t\t\t\tlistenX: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\t// Horizontal scrollbar\n\t\t\tif (this.options.scrollX) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: this._createScrollBar(CLASS_SCROLLBAR_HORIZONTAL),\n\t\t\t\t\tlistenY: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\tfor (var i = indicators.length; i--;) {\n\t\t\t\tthis.indicators.push(new Indicator(this, indicators[i]));\n\t\t\t}\n\n\t\t},\n\t\t_initSnap: function() {\n\t\t\tthis.currentPage = {};\n\t\t\tthis.pages = [];\n\t\t\tvar snaps = this.snaps;\n\t\t\tvar length = snaps.length;\n\t\t\tvar m = 0;\n\t\t\tvar n = -1;\n\t\t\tvar x = 0;\n\t\t\tvar leftX = 0;\n\t\t\tvar rightX = 0;\n\t\t\tvar snapX = 0;\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar snap = snaps[i];\n\t\t\t\tvar offsetLeft = snap.offsetLeft;\n\t\t\t\tvar offsetWidth = snap.offsetWidth;\n\t\t\t\tif (i === 0 || offsetLeft <= snaps[i - 1].offsetLeft) {\n\t\t\t\t\tm = 0;\n\t\t\t\t\tn++;\n\t\t\t\t}\n\t\t\t\tif (!this.pages[m]) {\n\t\t\t\t\tthis.pages[m] = [];\n\t\t\t\t}\n\t\t\t\tx = this._getSnapX(offsetLeft);\n\t\t\t\tsnapX = Math.round((offsetWidth) * this.options.snapX);\n\t\t\t\tleftX = x - snapX;\n\t\t\t\trightX = x - offsetWidth + snapX;\n\t\t\t\tthis.pages[m][n] = {\n\t\t\t\t\tx: x,\n\t\t\t\t\tleftX: leftX,\n\t\t\t\t\trightX: rightX,\n\t\t\t\t\tpageX: m,\n\t\t\t\t\telement: snap\n\t\t\t\t}\n\t\t\t\tif (snap.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\tthis.currentPage = this.pages[m][0];\n\t\t\t\t}\n\t\t\t\tif (x >= this.maxScrollX) {\n\t\t\t\t\tm++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.options.startX = this.currentPage.x || 0;\n\t\t},\n\t\t_getSnapX: function(offsetLeft) {\n\t\t\treturn Math.max(Math.min(0, -offsetLeft + (this.wrapperWidth / 2)), this.maxScrollX);\n\t\t},\n\t\t_gotoPage: function(index) {\n\t\t\tthis.currentPage = this.pages[Math.min(index, this.pages.length - 1)][0];\n\t\t\tfor (var i = 0, len = this.snaps.length; i < len; i++) {\n\t\t\t\tif (i === index) {\n\t\t\t\t\tthis.snaps[i].classList.add(CLASS_ACTIVE);\n\t\t\t\t} else {\n\t\t\t\t\tthis.snaps[i].classList.remove(CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollTo(this.currentPage.x, 0, this.options.scrollTime);\n\t\t},\n\t\t_nearestSnap: function(x) {\n\t\t\tif (!this.pages.length) {\n\t\t\t\treturn {\n\t\t\t\t\tx: 0,\n\t\t\t\t\tpageX: 0\n\t\t\t\t};\n\t\t\t}\n\t\t\tvar i = 0;\n\t\t\tvar length = this.pages.length;\n\t\t\tif (x > 0) {\n\t\t\t\tx = 0;\n\t\t\t} else if (x < this.maxScrollX) {\n\t\t\t\tx = this.maxScrollX;\n\t\t\t}\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tvar nearestX = this.direction === 'left' ? this.pages[i][0].leftX : this.pages[i][0].rightX;\n\t\t\t\tif (x >= nearestX) {\n\t\t\t\t\treturn this.pages[i][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tx: 0,\n\t\t\t\tpageX: 0\n\t\t\t};\n\t\t},\n\t\t_initEvent: function(detach) {\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\twindow[action]('orientationchange', this);\n\t\t\twindow[action]('resize', this);\n\n\t\t\tthis.scroller[action]('webkitTransitionEnd', this);\n\n\t\t\tthis.wrapper[action]($.EVENT_START, this);\n\t\t\tthis.wrapper[action]($.EVENT_CANCEL, this);\n\t\t\tthis.wrapper[action]($.EVENT_END, this);\n\t\t\tthis.wrapper[action]('drag', this);\n\t\t\tthis.wrapper[action]('dragend', this);\n\t\t\tthis.wrapper[action]('flick', this);\n\t\t\tthis.wrapper[action]('scrollend', this);\n\t\t\tif (this.options.scrollX) {\n\t\t\t\tthis.wrapper[action]('swiperight', this);\n\t\t\t}\n\t\t\tvar segmentedControl = this.wrapper.querySelector('.mui-segmented-control');\n\t\t\tif (segmentedControl) { //靠，这个bug排查了一下午，阻止hash跳转，一旦hash跳转会导致可拖拽选项卡的tab不见\n\t\t\t\tmui(segmentedControl)[detach ? 'off' : 'on']('click', 'a', $.preventDefault);\n\t\t\t}\n\n\t\t\tthis.wrapper[action]('scrollstart', this);\n\t\t\tthis.wrapper[action]('refresh', this);\n\t\t},\n\t\t_handleIndicatorScrollend: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade();\n\t\t\t});\n\t\t},\n\t\t_handleIndicatorScrollstart: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade(1);\n\t\t\t});\n\t\t},\n\t\t_handleIndicatorRefresh: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.refresh();\n\t\t\t});\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tif (this.stopped) {\n\t\t\t\tthis.resetPosition();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\tthis._start(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis.options.stopPropagation && e.stopPropagation();\n\t\t\t\t\tthis._drag(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\tcase 'flick':\n\t\t\t\t\tthis.options.stopPropagation && e.stopPropagation();\n\t\t\t\t\tthis._flick(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tcase $.EVENT_END:\n\t\t\t\t\tthis._end(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd':\n\t\t\t\t\tthis.transitionTimer && this.transitionTimer.cancel();\n\t\t\t\t\tthis._transitionEnd(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollstart':\n\t\t\t\t\tthis._handleIndicatorScrollstart(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollend':\n\t\t\t\t\tthis._handleIndicatorScrollend(e);\n\t\t\t\t\tthis._scrollend(e);\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'orientationchange':\n\t\t\t\tcase 'resize':\n\t\t\t\t\tthis._resize();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swiperight':\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'refresh':\n\t\t\t\t\tthis._handleIndicatorRefresh(e);\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t},\n\t\t_start: function(e) {\n\t\t\tthis.moved = this.needReset = false;\n\t\t\tthis._transitionTime();\n\t\t\tif (this.isInTransition) {\n\t\t\t\tthis.needReset = true;\n\t\t\t\tthis.isInTransition = false;\n\t\t\t\tvar pos = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));\n\t\t\t\tthis.setTranslate(Math.round(pos.x), Math.round(pos.y));\n\t\t\t\t//\t\t\t\tthis.resetPosition(); //reset\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t\t//\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tthis.reLayout();\n\t\t\t$.trigger(this.scroller, 'beforescrollstart', this);\n\t\t},\n\t\t_getDirectionByAngle: function(angle) {\n\t\t\tif (angle < -80 && angle > -100) {\n\t\t\t\treturn 'up';\n\t\t\t} else if (angle >= 80 && angle < 100) {\n\t\t\t\treturn 'down';\n\t\t\t} else if (angle >= 170 || angle <= -170) {\n\t\t\t\treturn 'left';\n\t\t\t} else if (angle >= -35 && angle <= 10) {\n\t\t\t\treturn 'right';\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t_drag: function(e) {\n\t\t\t//\t\t\tif (this.needReset) {\n\t\t\t//\t\t\t\te.stopPropagation(); //disable parent drag(nested scroller)\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tif (this.options.scrollY || detail.direction === 'up' || detail.direction === 'down') { //如果是竖向滚动或手势方向是上或下\n\t\t\t\t//ios8 hack\n\t\t\t\tif ($.os.ios && parseFloat($.os.version) >= 8) { //多webview时，离开当前webview会导致后续touch事件不触发\n\t\t\t\t\tvar clientY = detail.gesture.touches[0].clientY;\n\t\t\t\t\t//下拉刷新 or 上拉加载\n\t\t\t\t\tif ((clientY + 10) > window.innerHeight || clientY < 10) {\n\t\t\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar isPreventDefault = isReturn = false;\n\t\t\tvar direction = this._getDirectionByAngle(detail.angle);\n\t\t\tif (detail.direction === 'left' || detail.direction === 'right') {\n\t\t\t\tif (this.options.scrollX) {\n\t\t\t\t\tisPreventDefault = true;\n\t\t\t\t\tif (!this.moved) { //识别角度(该角度导致轮播不灵敏)\n\t\t\t\t\t\t//\t\t\t\t\t\tif (direction !== 'left' && direction !== 'right') {\n\t\t\t\t\t\t//\t\t\t\t\t\t\tisReturn = true;\n\t\t\t\t\t\t//\t\t\t\t\t\t} else {\n\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (this.options.scrollY && !this.moved) {\n\t\t\t\t\tisReturn = true;\n\t\t\t\t}\n\t\t\t} else if (detail.direction === 'up' || detail.direction === 'down') {\n\t\t\t\tif (this.options.scrollY) {\n\t\t\t\t\tisPreventDefault = true;\n\t\t\t\t\t//\t\t\t\t\tif (!this.moved) { //识别角度,竖向滚动似乎没必要进行小角度验证\n\t\t\t\t\t//\t\t\t\t\t\tif (direction !== 'up' && direction !== 'down') {\n\t\t\t\t\t//\t\t\t\t\t\t\tisReturn = true;\n\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t\tif (!this.moved) {\n\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.options.scrollX && !this.moved) {\n\t\t\t\t\tisReturn = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisReturn = true;\n\t\t\t}\n\t\t\tif (this.moved || isPreventDefault) {\n\t\t\t\te.stopPropagation(); //阻止冒泡(scroll类嵌套)\n\t\t\t\tdetail.gesture && detail.gesture.preventDefault();\n\t\t\t}\n\t\t\tif (isReturn) { //禁止非法方向滚动\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.moved) {\n\t\t\t\t$.trigger(this.scroller, 'scrollstart', this);\n\t\t\t} else {\n\t\t\t\te.stopPropagation(); //move期间阻止冒泡(scroll嵌套)\n\t\t\t}\n\t\t\tvar deltaX = 0;\n\t\t\tvar deltaY = 0;\n\t\t\tif (!this.moved) { //start\n\t\t\t\tdeltaX = detail.deltaX;\n\t\t\t\tdeltaY = detail.deltaY;\n\t\t\t} else { //move\n\t\t\t\tdeltaX = detail.deltaX - $.gestures.session.prevTouch.deltaX;\n\t\t\t\tdeltaY = detail.deltaY - $.gestures.session.prevTouch.deltaY;\n\t\t\t}\n\t\t\tvar absDeltaX = Math.abs(detail.deltaX);\n\t\t\tvar absDeltaY = Math.abs(detail.deltaY);\n\t\t\tif (absDeltaX > absDeltaY + this.options.directionLockThreshold) {\n\t\t\t\tdeltaY = 0;\n\t\t\t} else if (absDeltaY >= absDeltaX + this.options.directionLockThreshold) {\n\t\t\t\tdeltaX = 0;\n\t\t\t}\n\n\t\t\tdeltaX = this.hasHorizontalScroll ? deltaX : 0;\n\t\t\tdeltaY = this.hasVerticalScroll ? deltaY : 0;\n\t\t\tvar newX = this.x + deltaX;\n\t\t\tvar newY = this.y + deltaY;\n\t\t\t// Slow down if outside of the boundaries\n\t\t\tif (newX > 0 || newX < this.maxScrollX) {\n\t\t\t\tnewX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n\t\t\t}\n\t\t\tif (newY > 0 || newY < this.maxScrollY) {\n\t\t\t\tnewY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n\t\t\t}\n\n\t\t\tif (!this.requestAnimationFrame) {\n\t\t\t\tthis._updateTranslate();\n\t\t\t}\n\t\t\tthis.direction = detail.deltaX > 0 ? 'right' : 'left';\n\t\t\tthis.moved = true;\n\t\t\tthis.x = newX;\n\t\t\tthis.y = newY;\n\t\t\t$.trigger(this.scroller, 'scroll', this);\n\t\t},\n\t\t_flick: function(e) {\n\t\t\t//\t\t\tif (!this.moved || this.needReset) {\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tif (!this.moved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t\tvar detail = e.detail;\n\t\t\tthis._clearRequestAnimationFrame();\n\t\t\tif (e.type === 'dragend' && detail.flick) { //dragend\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar newX = Math.round(this.x);\n\t\t\tvar newY = Math.round(this.y);\n\n\t\t\tthis.isInTransition = false;\n\t\t\t// reset if we are outside of the boundaries\n\t\t\tif (this.resetPosition(this.options.bounceTime)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.scrollTo(newX, newY); // ensures that the last position is rounded\n\n\t\t\tif (e.type === 'dragend') { //dragend\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar time = 0;\n\t\t\tvar easing = '';\n\t\t\t// start momentum animation if needed\n\t\t\tif (this.options.momentum && detail.flickTime < 300) {\n\t\t\t\tmomentumX = this.hasHorizontalScroll ? this._momentum(this.x, detail.flickDistanceX, detail.flickTime, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : {\n\t\t\t\t\tdestination: newX,\n\t\t\t\t\tduration: 0\n\t\t\t\t};\n\t\t\t\tmomentumY = this.hasVerticalScroll ? this._momentum(this.y, detail.flickDistanceY, detail.flickTime, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : {\n\t\t\t\t\tdestination: newY,\n\t\t\t\t\tduration: 0\n\t\t\t\t};\n\t\t\t\tnewX = momentumX.destination;\n\t\t\t\tnewY = momentumY.destination;\n\t\t\t\ttime = Math.max(momentumX.duration, momentumY.duration);\n\t\t\t\tthis.isInTransition = true;\n\t\t\t}\n\n\t\t\tif (newX != this.x || newY != this.y) {\n\t\t\t\tif (newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY) {\n\t\t\t\t\teasing = ease.quadratic;\n\t\t\t\t}\n\t\t\t\tthis.scrollTo(newX, newY, time, easing);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t//\t\t\te.stopPropagation();\n\t\t},\n\t\t_end: function(e) {\n\t\t\tthis.needReset = false;\n\t\t\tif ((!this.moved && this.needReset) || e.type === $.EVENT_CANCEL) {\n\t\t\t\tthis.resetPosition();\n\t\t\t}\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target != this.scroller || !this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._transitionTime();\n\t\t\tif (!this.resetPosition(this.options.bounceTime)) {\n\t\t\t\tthis.isInTransition = false;\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t_scrollend: function(e) {\n\t\t\tif ((this.y === 0 && this.maxScrollY === 0) || (Math.abs(this.y) > 0 && this.y <= this.maxScrollY)) {\n\t\t\t\t$.trigger(this.scroller, 'scrollbottom', this);\n\t\t\t}\n\t\t},\n\t\t_resize: function() {\n\t\t\tvar that = this;\n\t\t\tclearTimeout(that.resizeTimeout);\n\t\t\tthat.resizeTimeout = setTimeout(function() {\n\t\t\t\tthat.refresh();\n\t\t\t}, that.options.resizePolling);\n\t\t},\n\t\t_transitionTime: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tthis.scrollerStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\t}\n\t\t\tif (this.options.fixedBadAndorid && !time && $.os.isBadAndroid) {\n\t\t\t\tthis.scrollerStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].transitionTime(time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (time) { //自定义timer，保证webkitTransitionEnd始终触发\n\t\t\t\tthis.transitionTimer && this.transitionTimer.cancel();\n\t\t\t\tthis.transitionTimer = $.later(function() {\n\t\t\t\t\t$.trigger(this.scroller, 'webkitTransitionEnd');\n\t\t\t\t}, time + 100, this);\n\t\t\t}\n\t\t},\n\t\t_transitionTimingFunction: function(easing) {\n\t\t\tthis.scrollerStyle['webkitTransitionTimingFunction'] = easing;\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = easing;\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].transitionTimingFunction(easing);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_translate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t},\n\t\t_clearRequestAnimationFrame: function() {\n\t\t\tif (this.requestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(this.requestAnimationFrame);\n\t\t\t\tthis.requestAnimationFrame = null;\n\t\t\t}\n\t\t},\n\t\t_updateTranslate: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.x !== self.lastX || self.y !== self.lastY) {\n\t\t\t\tself.setTranslate(self.x, self.y);\n\t\t\t}\n\t\t\tself.requestAnimationFrame = requestAnimationFrame(function() {\n\t\t\t\tself._updateTranslate();\n\t\t\t});\n\t\t},\n\t\t_createScrollBar: function(clazz) {\n\t\t\tvar scrollbar = document.createElement('div');\n\t\t\tvar indicator = document.createElement('div');\n\t\t\tscrollbar.className = CLASS_SCROLLBAR + ' ' + clazz;\n\t\t\tindicator.className = CLASS_INDICATOR;\n\t\t\tscrollbar.appendChild(indicator);\n\t\t\tif (clazz === CLASS_SCROLLBAR_VERTICAL) {\n\t\t\t\tthis.scrollbarY = scrollbar;\n\t\t\t\tthis.scrollbarIndicatorY = indicator;\n\t\t\t} else if (clazz === CLASS_SCROLLBAR_HORIZONTAL) {\n\t\t\t\tthis.scrollbarX = scrollbar;\n\t\t\t\tthis.scrollbarIndicatorX = indicator;\n\t\t\t}\n\t\t\tthis.wrapper.appendChild(scrollbar);\n\t\t\treturn scrollbar;\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t_reLayout: function() {\n\t\t\tif (!this.hasHorizontalScroll) {\n\t\t\t\tthis.maxScrollX = 0;\n\t\t\t\tthis.scrollerWidth = this.wrapperWidth;\n\t\t\t}\n\n\t\t\tif (!this.hasVerticalScroll) {\n\t\t\t\tthis.maxScrollY = 0;\n\t\t\t\tthis.scrollerHeight = this.wrapperHeight;\n\t\t\t}\n\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.refresh();\n\t\t\t});\n\n\t\t\t//以防slider类嵌套使用\n\t\t\tif (this.options.snap && typeof this.options.snap === 'string') {\n\t\t\t\tvar items = this.scroller.querySelectorAll(this.options.snap);\n\t\t\t\tthis.itemLength = 0;\n\t\t\t\tthis.snaps = [];\n\t\t\t\tfor (var i = 0, len = items.length; i < len; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item.parentNode === this.scroller) {\n\t\t\t\t\t\tthis.itemLength++;\n\t\t\t\t\t\tthis.snaps.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._initSnap(); //需要每次都_initSnap么。其实init的时候执行一次，后续resize的时候执行一次就行了吧.先这么做吧，如果影响性能，再调整\n\t\t\t}\n\t\t},\n\t\t_momentum: function(current, distance, time, lowerMargin, wrapperSize, deceleration) {\n\t\t\tvar speed = parseFloat(Math.abs(distance) / time),\n\t\t\t\tdestination,\n\t\t\t\tduration;\n\n\t\t\tdeceleration = deceleration === undefined ? 0.0006 : deceleration;\n\t\t\tdestination = current + (speed * speed) / (2 * deceleration) * (distance < 0 ? -1 : 1);\n\t\t\tduration = speed / deceleration;\n\t\t\tif (destination < lowerMargin) {\n\t\t\t\tdestination = wrapperSize ? lowerMargin - (wrapperSize / 2.5 * (speed / 8)) : lowerMargin;\n\t\t\t\tdistance = Math.abs(destination - current);\n\t\t\t\tduration = distance / speed;\n\t\t\t} else if (destination > 0) {\n\t\t\t\tdestination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0;\n\t\t\t\tdistance = Math.abs(current) + destination;\n\t\t\t\tduration = distance / speed;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdestination: Math.round(destination),\n\t\t\t\tduration: duration\n\t\t\t};\n\t\t},\n\t\t_getTranslateStr: function(x, y) {\n\t\t\tif (this.options.hardwareAccelerated) {\n\t\t\t\treturn 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ;\n\t\t\t}\n\t\t\treturn 'translate(' + x + 'px,' + y + 'px) ';\n\t\t},\n\t\t//API\n\t\tsetStopped: function(stopped) {\n\t\t\t// this.stopped = !!stopped;\n\n\t\t\t// fixed ios双webview模式下拉刷新\n\t\t\tif(stopped) {\n\t\t\t\tthis.disablePullupToRefresh();\n\t\t\t\tthis.disablePulldownToRefresh();\n\t\t\t} else {\n\t\t\t\tthis.enablePullupToRefresh();\n\t\t\t\tthis.enablePulldownToRefresh();\n\t\t\t}\n\t\t},\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.scrollerStyle['webkitTransform'] = this._getTranslateStr(x, y);\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tvar parallaxY = y * this.options.parallaxRatio;\n\t\t\t\tvar scale = 1 + parallaxY / ((this.parallaxHeight - parallaxY) / 2);\n\t\t\t\tif (scale > 1) {\n\t\t\t\t\tthis.parallaxImgStyle['opacity'] = 1 - parallaxY / 100 * this.options.parallaxRatio;\n\t\t\t\t\tthis.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -parallaxY) + ' scale(' + scale + ',' + scale + ')';\n\t\t\t\t} else {\n\t\t\t\t\tthis.parallaxImgStyle['opacity'] = 1;\n\t\t\t\t\tthis.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -1) + ' scale(1,1)';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].updatePosition();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.lastX = this.x;\n\t\t\tthis.lastY = this.y;\n\t\t\t$.trigger(this.scroller, 'scroll', this);\n\t\t},\n\t\treLayout: function() {\n\t\t\tthis.wrapper.offsetHeight;\n\n\t\t\tvar paddingLeft = parseFloat($.getStyles(this.wrapper, 'padding-left')) || 0;\n\t\t\tvar paddingRight = parseFloat($.getStyles(this.wrapper, 'padding-right')) || 0;\n\t\t\tvar paddingTop = parseFloat($.getStyles(this.wrapper, 'padding-top')) || 0;\n\t\t\tvar paddingBottom = parseFloat($.getStyles(this.wrapper, 'padding-bottom')) || 0;\n\n\t\t\tvar clientWidth = this.wrapper.clientWidth;\n\t\t\tvar clientHeight = this.wrapper.clientHeight;\n\n\t\t\tthis.scrollerWidth = this.scroller.offsetWidth;\n\t\t\tthis.scrollerHeight = this.scroller.offsetHeight;\n\n\t\t\tthis.wrapperWidth = clientWidth - paddingLeft - paddingRight;\n\t\t\tthis.wrapperHeight = clientHeight - paddingTop - paddingBottom;\n\n\t\t\tthis.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);\n\t\t\tthis.maxScrollY = Math.min(this.wrapperHeight - this.scrollerHeight, 0);\n\t\t\tthis.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;\n\t\t\tthis.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;\n\t\t\tthis._reLayout();\n\t\t},\n\t\tresetPosition: function(time) {\n\t\t\tvar x = this.x,\n\t\t\t\ty = this.y;\n\n\t\t\ttime = time || 0;\n\t\t\tif (!this.hasHorizontalScroll || this.x > 0) {\n\t\t\t\tx = 0;\n\t\t\t} else if (this.x < this.maxScrollX) {\n\t\t\t\tx = this.maxScrollX;\n\t\t\t}\n\n\t\t\tif (!this.hasVerticalScroll || this.y > 0) {\n\t\t\t\ty = 0;\n\t\t\t} else if (this.y < this.maxScrollY) {\n\t\t\t\ty = this.maxScrollY;\n\t\t\t}\n\n\t\t\tif (x == this.x && y == this.y) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.scrollTo(x, y, time, this.options.scrollEasing);\n\n\t\t\treturn true;\n\t\t},\n\t\t_reInit: function() {\n\t\t\tvar groups = this.wrapper.querySelectorAll('.' + CLASS_SCROLL);\n\t\t\tfor (var i = 0, len = groups.length; i < len; i++) {\n\t\t\t\tif (groups[i].parentNode === this.wrapper) {\n\t\t\t\t\tthis.scroller = groups[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t},\n\t\trefresh: function() {\n\t\t\tthis._reInit();\n\t\t\tthis.reLayout();\n\t\t\t$.trigger(this.scroller, 'refresh', this);\n\t\t\tthis.resetPosition();\n\t\t},\n\t\tscrollTo: function(x, y, time, easing) {\n\t\t\tvar easing = easing || ease.circular;\n\t\t\t//\t\t\tthis.isInTransition = time > 0 && (this.lastX != x || this.lastY != y);\n\t\t\t//暂不严格判断x,y，否则会导致部分版本上不正常触发轮播\n\t\t\tthis.isInTransition = time > 0;\n\t\t\tif (this.isInTransition) {\n\t\t\t\tthis._clearRequestAnimationFrame();\n\t\t\t\tthis._transitionTimingFunction(easing.style);\n\t\t\t\tthis._transitionTime(time);\n\t\t\t\tthis.setTranslate(x, y);\n\t\t\t} else {\n\t\t\t\tthis.setTranslate(x, y);\n\t\t\t}\n\n\t\t},\n\t\tscrollToBottom: function(time, easing) {\n\t\t\ttime = time || this.options.scrollTime;\n\t\t\tthis.scrollTo(0, this.maxScrollY, time, easing);\n\t\t},\n\t\tgotoPage: function(index) {\n\t\t\tthis._gotoPage(index);\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._initEvent(true); //detach\n\t\t\tdelete $.data[this.wrapper.getAttribute('data-scroll')];\n\t\t\tthis.wrapper.setAttribute('data-scroll', '');\n\t\t}\n\t});\n\t//Indicator\n\tvar Indicator = function(scroller, options) {\n\t\tthis.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n\t\tthis.wrapperStyle = this.wrapper.style;\n\t\tthis.indicator = this.wrapper.children[0];\n\t\tthis.indicatorStyle = this.indicator.style;\n\t\tthis.scroller = scroller;\n\n\t\tthis.options = $.extend({\n\t\t\tlistenX: true,\n\t\t\tlistenY: true,\n\t\t\tfade: false,\n\t\t\tspeedRatioX: 0,\n\t\t\tspeedRatioY: 0\n\t\t}, options);\n\n\t\tthis.sizeRatioX = 1;\n\t\tthis.sizeRatioY = 1;\n\t\tthis.maxPosX = 0;\n\t\tthis.maxPosY = 0;\n\n\t\tif (this.options.fade) {\n\t\t\tthis.wrapperStyle['webkitTransform'] = this.scroller.translateZ;\n\t\t\tthis.wrapperStyle['webkitTransitionDuration'] = this.options.fixedBadAndorid && $.os.isBadAndroid ? '0.001s' : '0ms';\n\t\t\tthis.wrapperStyle.opacity = '0';\n\t\t}\n\t}\n\tIndicator.prototype = {\n\t\thandleEvent: function(e) {\n\n\t\t},\n\t\ttransitionTime: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tthis.indicatorStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\tif (this.scroller.options.fixedBadAndorid && !time && $.os.isBadAndroid) {\n\t\t\t\tthis.indicatorStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t}\n\t\t},\n\t\ttransitionTimingFunction: function(easing) {\n\t\t\tthis.indicatorStyle['webkitTransitionTimingFunction'] = easing;\n\t\t},\n\t\trefresh: function() {\n\t\t\tthis.transitionTime();\n\n\t\t\tif (this.options.listenX && !this.options.listenY) {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n\t\t\t} else if (this.options.listenY && !this.options.listenX) {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t\t} else {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t\t}\n\n\t\t\tthis.wrapper.offsetHeight; // force refresh\n\n\t\t\tif (this.options.listenX) {\n\t\t\t\tthis.wrapperWidth = this.wrapper.clientWidth;\n\t\t\t\tthis.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n\t\t\t\tthis.indicatorStyle.width = this.indicatorWidth + 'px';\n\n\t\t\t\tthis.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n\t\t\t\tthis.minBoundaryX = 0;\n\t\t\t\tthis.maxBoundaryX = this.maxPosX;\n\n\t\t\t\tthis.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));\n\t\t\t}\n\n\t\t\tif (this.options.listenY) {\n\t\t\t\tthis.wrapperHeight = this.wrapper.clientHeight;\n\t\t\t\tthis.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n\t\t\t\tthis.indicatorStyle.height = this.indicatorHeight + 'px';\n\n\t\t\t\tthis.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n\t\t\t\tthis.minBoundaryY = 0;\n\t\t\t\tthis.maxBoundaryY = this.maxPosY;\n\n\t\t\t\tthis.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));\n\t\t\t}\n\n\t\t\tthis.updatePosition();\n\t\t},\n\n\t\tupdatePosition: function() {\n\t\t\tvar x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n\t\t\t\ty = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n\t\t\tif (x < this.minBoundaryX) {\n\t\t\t\tthis.width = Math.max(this.indicatorWidth + x, 8);\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\tx = this.minBoundaryX;\n\t\t\t} else if (x > this.maxBoundaryX) {\n\t\t\t\tthis.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\tx = this.maxPosX + this.indicatorWidth - this.width;\n\t\t\t} else if (this.width != this.indicatorWidth) {\n\t\t\t\tthis.width = this.indicatorWidth;\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t}\n\n\t\t\tif (y < this.minBoundaryY) {\n\t\t\t\tthis.height = Math.max(this.indicatorHeight + y * 3, 8);\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\ty = this.minBoundaryY;\n\t\t\t} else if (y > this.maxBoundaryY) {\n\t\t\t\tthis.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\ty = this.maxPosY + this.indicatorHeight - this.height;\n\t\t\t} else if (this.height != this.indicatorHeight) {\n\t\t\t\tthis.height = this.indicatorHeight;\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t}\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\n\t\t\tthis.indicatorStyle['webkitTransform'] = this.scroller._getTranslateStr(x, y);\n\n\t\t},\n\t\tfade: function(val, hold) {\n\t\t\tif (hold && !this.visible) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(this.fadeTimeout);\n\t\t\tthis.fadeTimeout = null;\n\n\t\t\tvar time = val ? 250 : 500,\n\t\t\t\tdelay = val ? 0 : 300;\n\n\t\t\tval = val ? '1' : '0';\n\n\t\t\tthis.wrapperStyle['webkitTransitionDuration'] = time + 'ms';\n\n\t\t\tthis.fadeTimeout = setTimeout((function(val) {\n\t\t\t\tthis.wrapperStyle.opacity = val;\n\t\t\t\tthis.visible = +val;\n\t\t\t}).bind(this, val), delay);\n\t\t}\n\t};\n\n\t$.Scroll = Scroll;\n\n\t$.fn.scroll = function(options) {\n\t\tvar scrollApis = [];\n\t\tthis.each(function() {\n\t\t\tvar scrollApi = null;\n\t\t\tvar self = this;\n\t\t\tvar id = self.getAttribute('data-scroll');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\tvar _options = $.extend({}, options);\n\t\t\t\tif (self.classList.contains('mui-segmented-control')) {\n\t\t\t\t\t_options = $.extend(_options, {\n\t\t\t\t\t\tscrollY: false,\n\t\t\t\t\t\tscrollX: true,\n\t\t\t\t\t\tindicators: false,\n\t\t\t\t\t\tsnap: '.mui-control-item'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$.data[id] = scrollApi = new Scroll(self, _options);\n\t\t\t\tself.setAttribute('data-scroll', id);\n\t\t\t} else {\n\t\t\t\tscrollApi = $.data[id];\n\t\t\t}\n\t\t\tscrollApis.push(scrollApi);\n\t\t});\n\t\treturn scrollApis.length === 1 ? scrollApis[0] : scrollApis;\n\t};\n})(mui, window, document);\n(function($, window, document, undefined) {\n\n    var CLASS_VISIBILITY = 'mui-visibility';\n    var CLASS_HIDDEN = 'mui-hidden';\n\n    var PullRefresh = $.Scroll.extend($.extend({\n        handleEvent: function(e) {\n            this._super(e);\n            if (e.type === 'scrollbottom') {\n                if (e.target === this.scroller) {\n                    this._scrollbottom();\n                }\n            }\n        },\n        _scrollbottom: function() {\n            if (!this.pulldown && !this.loading) {\n                this.pulldown = false;\n                this._initPullupRefresh();\n                this.pullupLoading();\n            }\n        },\n        _start: function(e) {\n            //仅下拉刷新在start阻止默认事件\n            if (e.touches && e.touches.length && e.touches[0].clientX > 30) {\n                e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n            }\n            if (!this.loading) {\n                this.pulldown = this.pullPocket = this.pullCaption = this.pullLoading = false\n            }\n            this._super(e);\n        },\n        _drag: function(e) {\n            if (this.y >= 0 && this.disablePulldown && e.detail.direction === 'down') { //禁用下拉刷新\n                return;\n            }\n            this._super(e);\n            if (!this.pulldown && !this.loading && this.topPocket && e.detail.direction === 'down' && this.y >= 0) {\n                this._initPulldownRefresh();\n            }\n            if (this.pulldown) {\n                this._setCaption(this.y > this.options.down.height ? this.options.down.contentover : this.options.down.contentdown);\n            }\n        },\n\n        _reLayout: function() {\n            this.hasVerticalScroll = true;\n            this._super();\n        },\n        //API\n        resetPosition: function(time) {\n            if (this.pulldown && !this.disablePulldown) {\n                if (this.y >= this.options.down.height) {\n                    this.pulldownLoading(undefined, time || 0);\n                    return true;\n                } else {\n                    !this.loading && this.topPocket.classList.remove(CLASS_VISIBILITY);\n                }\n            }\n            return this._super(time);\n        },\n        pulldownLoading: function(y, time) {\n            typeof y === 'undefined' && (y = this.options.down.height); //默认高度\n            this.scrollTo(0, y, time, this.options.bounceEasing);\n            if (this.loading) {\n                return;\n            }\n            //\t\t\tif (!this.pulldown) {\n            this._initPulldownRefresh();\n            //\t\t\t}\n            this._setCaption(this.options.down.contentrefresh);\n            this.loading = true;\n            this.indicators.map(function(indicator) {\n                indicator.fade(0);\n            });\n            var callback = this.options.down.callback;\n            callback && callback.call(this);\n        },\n        endPulldownToRefresh: function() {\n            var self = this;\n            if (self.topPocket && self.loading && this.pulldown) {\n                self.scrollTo(0, 0, self.options.bounceTime, self.options.bounceEasing);\n                self.loading = false;\n                self._setCaption(self.options.down.contentdown, true);\n                setTimeout(function() {\n                    self.loading || self.topPocket.classList.remove(CLASS_VISIBILITY);\n                }, 350);\n            }\n        },\n        pullupLoading: function(callback, x, time) {\n            x = x || 0;\n            this.scrollTo(x, this.maxScrollY, time, this.options.bounceEasing);\n            if (this.loading) {\n                return;\n            }\n            this._initPullupRefresh();\n            this._setCaption(this.options.up.contentrefresh);\n            this.indicators.map(function(indicator) {\n                indicator.fade(0);\n            });\n            this.loading = true;\n            callback = callback || this.options.up.callback;\n            callback && callback.call(this);\n        },\n        endPullupToRefresh: function(finished) {\n            var self = this;\n            if (self.bottomPocket) { // && self.loading && !this.pulldown\n                self.loading = false;\n                if (finished) {\n                    this.finished = true;\n                    self._setCaption(self.options.up.contentnomore);\n                    //\t\t\t\t\tself.bottomPocket.classList.remove(CLASS_VISIBILITY);\n                    //\t\t\t\t\tself.bottomPocket.classList.add(CLASS_HIDDEN);\n                    self.wrapper.removeEventListener('scrollbottom', self);\n                } else {\n                    self._setCaption(self.options.up.contentdown);\n                    //\t\t\t\t\tsetTimeout(function() {\n                    self.loading || self.bottomPocket.classList.remove(CLASS_VISIBILITY);\n                    //\t\t\t\t\t}, 300);\n                }\n            }\n        },\n        disablePullupToRefresh: function() {\n            this._initPullupRefresh();\n            this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN;\n            this.wrapper.removeEventListener('scrollbottom', this);\n        },\n        disablePulldownToRefresh: function() {\n            this._initPulldownRefresh();\n            this.topPocket.className = 'mui-pull-top-pocket' + ' ' + CLASS_HIDDEN;\n            this.disablePulldown = true;\n        },\n        enablePulldownToRefresh: function() {\n            this._initPulldownRefresh();\n            this.topPocket.classList.remove(CLASS_HIDDEN);\n            this._setCaption(this.options.down.contentdown);\n            this.disablePulldown = false;\n        },\n        enablePullupToRefresh: function() {\n            this._initPullupRefresh();\n            this.bottomPocket.classList.remove(CLASS_HIDDEN);\n            this._setCaption(this.options.up.contentdown);\n            this.wrapper.addEventListener('scrollbottom', this);\n        },\n        refresh: function(isReset) {\n            if (isReset && this.finished) {\n                this.enablePullupToRefresh();\n                this.finished = false;\n            }\n            this._super();\n        },\n    }, $.PullRefresh));\n    $.fn.pullRefresh = function(options) {\n        if (this.length === 1) {\n            var self = this[0];\n            var pullRefreshApi = null;\n            var id = self.getAttribute('data-pullrefresh');\n            if (!id && typeof options === 'undefined') {\n                return false;\n            }\n            options = options || {};\n            if (!id) {\n                id = ++$.uuid;\n                $.data[id] = pullRefreshApi = new PullRefresh(self, options);\n                self.setAttribute('data-pullrefresh', id);\n            } else {\n                pullRefreshApi = $.data[id];\n            }\n            if (options.down && options.down.auto) { //如果设置了auto，则自动下拉一次\n                pullRefreshApi.pulldownLoading(options.down.autoY);\n            } else if (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n                pullRefreshApi.pullupLoading();\n            }\n            //暂不提供这种调用方式吧\t\t\t\n            //\t\t\tif (typeof options === 'string') {\n            //\t\t\t\tvar methodValue = pullRefreshApi[options].apply(pullRefreshApi, $.slice.call(arguments, 1));\n            //\t\t\t\tif (methodValue !== undefined) {\n            //\t\t\t\t\treturn methodValue;\n            //\t\t\t\t}\n            //\t\t\t}\n            return pullRefreshApi;\n        }\n    };\n})(mui, window, document);\n/**\n * snap 重构\n * @param {Object} $\n * @param {Object} window\n */\n(function($, window) {\n\tvar CLASS_SLIDER = 'mui-slider';\n\tvar CLASS_SLIDER_GROUP = 'mui-slider-group';\n\tvar CLASS_SLIDER_LOOP = 'mui-slider-loop';\n\tvar CLASS_SLIDER_INDICATOR = 'mui-slider-indicator';\n\tvar CLASS_ACTION_PREVIOUS = 'mui-action-previous';\n\tvar CLASS_ACTION_NEXT = 'mui-action-next';\n\tvar CLASS_SLIDER_ITEM = 'mui-slider-item';\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\tvar SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM;\n\tvar SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR;\n\tvar SELECTOR_SLIDER_PROGRESS_BAR = '.mui-slider-progress-bar';\n\n\tvar Slider = $.Slider = $.Scroll.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis._super(element, $.extend(true, {\n\t\t\t\tfingers: 1,\n\t\t\t\tinterval: 0, //设置为0，则不定时轮播\n\t\t\t\tscrollY: false,\n\t\t\t\tscrollX: true,\n\t\t\t\tindicators: false,\n\t\t\t\tscrollTime: 1000,\n\t\t\t\tstartX: false,\n\t\t\t\tslideTime: 0, //滑动动画时间\n\t\t\t\tsnap: SELECTOR_SLIDER_ITEM\n\t\t\t}, options));\n\t\t\tif (this.options.startX) {\n\t\t\t\t//\t\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._reInit();\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.scrollerStyle = this.scroller.style;\n\t\t\t\tthis.progressBar = this.wrapper.querySelector(SELECTOR_SLIDER_PROGRESS_BAR);\n\t\t\t\tif (this.progressBar) {\n\t\t\t\t\tthis.progressBarWidth = this.progressBar.offsetWidth;\n\t\t\t\t\tthis.progressBarStyle = this.progressBar.style;\n\t\t\t\t}\n\t\t\t\t//忘记这个代码是干什么的了？\n\t\t\t\t//\t\t\t\tthis.x = this._getScroll();\n\t\t\t\t//\t\t\t\tif (this.options.startX === false) {\n\t\t\t\t//\t\t\t\t\tthis.options.startX = this.x;\n\t\t\t\t//\t\t\t\t}\n\t\t\t\t//根据active修正startX\n\n\t\t\t\tthis._super();\n\t\t\t\tthis._initTimer();\n\t\t\t}\n\t\t},\n\t\t_triggerSlide: function() {\n\t\t\tvar self = this;\n\t\t\tself.isInTransition = false;\n\t\t\tvar page = self.currentPage;\n\t\t\tself.slideNumber = self._fixedSlideNumber();\n\t\t\tif (self.loop) {\n\t\t\t\tif (self.slideNumber === 0) {\n\t\t\t\t\tself.setTranslate(self.pages[1][0].x, 0);\n\t\t\t\t} else if (self.slideNumber === self.itemLength - 3) {\n\t\t\t\t\tself.setTranslate(self.pages[self.itemLength - 2][0].x, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self.lastSlideNumber != self.slideNumber) {\n\t\t\t\tself.lastSlideNumber = self.slideNumber;\n\t\t\t\tself.lastPage = self.currentPage;\n\t\t\t\t$.trigger(self.wrapper, 'slide', {\n\t\t\t\t\tslideNumber: self.slideNumber\n\t\t\t\t});\n\t\t\t}\n\t\t\tself._initTimer();\n\t\t},\n\t\t_handleSlide: function(e) {\n\t\t\tvar self = this;\n\t\t\tif (e.target !== self.wrapper) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tdetail.slideNumber = detail.slideNumber || 0;\n\t\t\tvar temps = self.scroller.querySelectorAll(SELECTOR_SLIDER_ITEM);\n\t\t\tvar items = [];\n\t\t\tfor (var i = 0, len = temps.length; i < len; i++) {\n\t\t\t\tvar item = temps[i];\n\t\t\t\tif (item.parentNode === self.scroller) {\n\t\t\t\t\titems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar _slideNumber = detail.slideNumber;\n\t\t\tif (self.loop) {\n\t\t\t\t_slideNumber += 1;\n\t\t\t}\n\t\t\tif (!self.wrapper.classList.contains('mui-segmented-control')) {\n\t\t\t\tfor (var i = 0, len = items.length; i < len; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item.parentNode === self.scroller) {\n\t\t\t\t\t\tif (i === _slideNumber) {\n\t\t\t\t\t\t\titem.classList.add(CLASS_ACTIVE);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.classList.remove(CLASS_ACTIVE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar indicatorWrap = self.wrapper.querySelector('.mui-slider-indicator');\n\t\t\tif (indicatorWrap) {\n\t\t\t\tif (indicatorWrap.getAttribute('data-scroll')) { //scroll\n\t\t\t\t\t$(indicatorWrap).scroll().gotoPage(detail.slideNumber);\n\t\t\t\t}\n\t\t\t\tvar indicators = indicatorWrap.querySelectorAll('.mui-indicator');\n\t\t\t\tif (indicators.length > 0) { //图片轮播\n\t\t\t\t\tfor (var i = 0, len = indicators.length; i < len; i++) {\n\t\t\t\t\t\tindicators[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar number = indicatorWrap.querySelector('.mui-number span');\n\t\t\t\t\tif (number) { //图文表格\n\t\t\t\t\t\tnumber.innerText = (detail.slideNumber + 1);\n\t\t\t\t\t} else { //segmented controls\n\t\t\t\t\t\tvar controlItems = indicatorWrap.querySelectorAll('.mui-control-item');\n\t\t\t\t\t\tfor (var i = 0, len = controlItems.length; i < len; i++) {\n\t\t\t\t\t\t\tcontrolItems[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t},\n\t\t_handleTabShow: function(e) {\n\t\t\tvar self = this;\n\t\t\tself.gotoItem((e.detail.tabNumber || 0), self.options.slideTime);\n\t\t},\n\t\t_handleIndicatorTap: function(event) {\n\t\t\tvar self = this;\n\t\t\tvar target = event.target;\n\t\t\tif (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) {\n\t\t\t\tself[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem']();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\t_initEvent: function(detach) {\n\t\t\tvar self = this;\n\t\t\tself._super(detach);\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\tself.wrapper[action]('slide', this);\n\t\t\tself.wrapper[action]($.eventName('shown', 'tab'), this);\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tthis._super(e);\n\t\t\tswitch (e.type) {\n\t\t\t\tcase 'slide':\n\t\t\t\t\tthis._handleSlide(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.eventName('shown', 'tab'):\n\t\t\t\t\tif (~this.snaps.indexOf(e.target)) { //避免嵌套监听错误的tab show\n\t\t\t\t\t\tthis._handleTabShow(e);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t_scrollend: function(e) {\n\t\t\tthis._super(e);\n\t\t\tthis._triggerSlide(e);\n\t\t},\n\t\t_drag: function(e) {\n\t\t\tthis._super(e);\n\t\t\tvar direction = e.detail.direction;\n\t\t\tif (direction === 'left' || direction === 'right') {\n\t\t\t\t//拖拽期间取消定时\n\t\t\t\tvar slidershowTimer = this.wrapper.getAttribute('data-slidershowTimer');\n\t\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\t_initTimer: function() {\n\t\t\tvar self = this;\n\t\t\tvar slider = self.wrapper;\n\t\t\tvar interval = self.options.interval;\n\t\t\tvar slidershowTimer = slider.getAttribute('data-slidershowTimer');\n\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\t\t\tif (interval) {\n\t\t\t\tslidershowTimer = window.setTimeout(function() {\n\t\t\t\t\tif (!slider) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t//仅slider显示状态进行自动轮播\n\t\t\t\t\tif (!!(slider.offsetWidth || slider.offsetHeight)) {\n\t\t\t\t\t\tself.nextItem(true);\n\t\t\t\t\t\t//下一个\n\t\t\t\t\t}\n\t\t\t\t\tself._initTimer();\n\t\t\t\t}, interval);\n\t\t\t\tslider.setAttribute('data-slidershowTimer', slidershowTimer);\n\t\t\t}\n\t\t},\n\n\t\t_fixedSlideNumber: function(page) {\n\t\t\tpage = page || this.currentPage;\n\t\t\tvar slideNumber = page.pageX;\n\t\t\tif (this.loop) {\n\t\t\t\tif (page.pageX === 0) {\n\t\t\t\t\tslideNumber = this.itemLength - 3;\n\t\t\t\t} else if (page.pageX === (this.itemLength - 1)) {\n\t\t\t\t\tslideNumber = 0;\n\t\t\t\t} else {\n\t\t\t\t\tslideNumber = page.pageX - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn slideNumber;\n\t\t},\n\t\t_reLayout: function() {\n\t\t\tthis.hasHorizontalScroll = true;\n\t\t\tthis.loop = this.scroller.classList.contains(CLASS_SLIDER_LOOP);\n\t\t\tthis._super();\n\t\t},\n\t\t_getScroll: function() {\n\t\t\tvar result = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));\n\t\t\treturn result ? result.x : 0;\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target !== this.scroller || !this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._transitionTime();\n\t\t\tthis.isInTransition = false;\n\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t},\n\t\t_flick: function(e) {\n\t\t\tif (!this.moved) { //无moved\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tthis._clearRequestAnimationFrame();\n\t\t\tthis.isInTransition = true;\n\t\t\t//\t\t\tif (direction === 'up' || direction === 'down') {\n\t\t\t//\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tif (e.type === 'flick') {\n\t\t\t\tif (detail.deltaTime < 200) { //flick，太容易触发，额外校验一下deltaTime\n\t\t\t\t\tthis.x = this._getPage((this.slideNumber + (direction === 'right' ? -1 : 1)), true).x;\n\t\t\t\t}\n\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t} else if (e.type === 'dragend' && !detail.flick) {\n\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t},\n\t\t_initSnap: function() {\n\t\t\tthis.scrollerWidth = this.itemLength * this.scrollerWidth;\n\t\t\tthis.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);\n\t\t\tthis._super();\n\t\t\tif (!this.currentPage.x) {\n\t\t\t\t//当slider处于隐藏状态时，导致snap计算是错误的，临时先这么判断一下，后续要考虑解决所有scroll在隐藏状态下初始化属性不正确的问题\n\t\t\t\tvar currentPage = this.pages[this.loop ? 1 : 0];\n\t\t\t\tcurrentPage = currentPage || this.pages[0];\n\t\t\t\tif (!currentPage) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.currentPage = currentPage[0];\n\t\t\t\tthis.slideNumber = 0;\n\t\t\t\tthis.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? 0 : this.lastSlideNumber;\n\t\t\t} else {\n\t\t\t\tthis.slideNumber = this._fixedSlideNumber();\n\t\t\t\tthis.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? this.slideNumber : this.lastSlideNumber;\n\t\t\t}\n\t\t\tthis.options.startX = this.currentPage.x || 0;\n\t\t},\n\t\t_getSnapX: function(offsetLeft) {\n\t\t\treturn Math.max(-offsetLeft, this.maxScrollX);\n\t\t},\n\t\t_getPage: function(slideNumber, isFlick) {\n\t\t\tif (this.loop) {\n\t\t\t\tif (slideNumber > (this.itemLength - (isFlick ? 2 : 3))) {\n\t\t\t\t\tslideNumber = 1;\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (slideNumber < (isFlick ? -1 : 0)) {\n\t\t\t\t\tslideNumber = this.itemLength - 2;\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else {\n\t\t\t\t\tslideNumber += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isFlick) {\n\t\t\t\t\tif (slideNumber > (this.itemLength - 1)) {\n\t\t\t\t\t\tslideNumber = 0;\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t} else if (slideNumber < 0) {\n\t\t\t\t\t\tslideNumber = this.itemLength - 1;\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tslideNumber = Math.min(Math.max(0, slideNumber), this.itemLength - 1);\n\t\t\t}\n\t\t\treturn this.pages[slideNumber][0];\n\t\t},\n\t\t_gotoItem: function(slideNumber, time) {\n\t\t\tthis.currentPage = this._getPage(slideNumber, true); //此处传true。可保证程序切换时，动画与人手操作一致(第一张，最后一张的切换动画)\n\t\t\tthis.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);\n\t\t\tif (time === 0) {\n\t\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t//API\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis._super(x, y);\n\t\t\tvar progressBar = this.progressBar;\n\t\t\tif (progressBar) {\n\t\t\t\tthis.progressBarStyle.webkitTransform = this._getTranslateStr((-x * (this.progressBarWidth / this.wrapperWidth)), 0);\n\t\t\t}\n\t\t},\n\t\tresetPosition: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tif (this.x > 0) {\n\t\t\t\tthis.x = 0;\n\t\t\t} else if (this.x < this.maxScrollX) {\n\t\t\t\tthis.x = this.maxScrollX;\n\t\t\t}\n\t\t\tthis.currentPage = this._nearestSnap(this.x);\n\t\t\tthis.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);\n\t\t\treturn true;\n\t\t},\n\t\tgotoItem: function(slideNumber, time) {\n\t\t\tthis._gotoItem(slideNumber, typeof time === 'undefined' ? this.options.scrollTime : time);\n\t\t},\n\t\tnextItem: function() {\n\t\t\tthis._gotoItem(this.slideNumber + 1, this.options.scrollTime);\n\t\t},\n\t\tprevItem: function() {\n\t\t\tthis._gotoItem(this.slideNumber - 1, this.options.scrollTime);\n\t\t},\n\t\tgetSlideNumber: function() {\n\t\t\treturn this.slideNumber || 0;\n\t\t},\n\t\t_reInit: function() {\n\t\t\tvar groups = this.wrapper.querySelectorAll('.' + CLASS_SLIDER_GROUP);\n\t\t\tfor (var i = 0, len = groups.length; i < len; i++) {\n\t\t\t\tif (groups[i].parentNode === this.wrapper) {\n\t\t\t\t\tthis.scroller = groups[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t\tif (this.progressBar) {\n\t\t\t\tthis.progressBarWidth = this.progressBar.offsetWidth;\n\t\t\t\tthis.progressBarStyle = this.progressBar.style;\n\t\t\t}\n\t\t},\n\t\trefresh: function(options) {\n\t\t\tif (options) {\n\t\t\t\t$.extend(this.options, options);\n\t\t\t\tthis._super();\n\t\t\t\tthis._initTimer();\n\t\t\t} else {\n\t\t\t\tthis._super();\n\t\t\t}\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._initEvent(true); //detach\n\t\t\tdelete $.data[this.wrapper.getAttribute('data-slider')];\n\t\t\tthis.wrapper.setAttribute('data-slider', '');\n\t\t}\n\t});\n\t$.fn.slider = function(options) {\n\t\tvar slider = null;\n\t\tthis.each(function() {\n\t\t\tvar sliderElement = this;\n\t\t\tif (!this.classList.contains(CLASS_SLIDER)) {\n\t\t\t\tsliderElement = this.querySelector('.' + CLASS_SLIDER);\n\t\t\t}\n\t\t\tif (sliderElement && sliderElement.querySelector(SELECTOR_SLIDER_ITEM)) {\n\t\t\t\tvar id = sliderElement.getAttribute('data-slider');\n\t\t\t\tif (!id) {\n\t\t\t\t\tid = ++$.uuid;\n\t\t\t\t\t$.data[id] = slider = new Slider(sliderElement, options);\n\t\t\t\t\tsliderElement.setAttribute('data-slider', id);\n\t\t\t\t} else {\n\t\t\t\t\tslider = $.data[id];\n\t\t\t\t\tif (slider && options) {\n\t\t\t\t\t\tslider.refresh(options);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn slider;\n\t};\n\t$.ready(function() {\n\t\t//\t\tsetTimeout(function() {\n\t\t$('.mui-slider').slider();\n\t\t$('.mui-scroll-wrapper.mui-slider-indicator.mui-segmented-control').scroll({\n\t\t\tscrollY: false,\n\t\t\tscrollX: true,\n\t\t\tindicators: false,\n\t\t\tsnap: '.mui-control-item'\n\t\t});\n\t\t//\t\t}, 500); //临时处理slider宽度计算不正确的问题(初步确认是scrollbar导致的)\n\n\t});\n})(mui, window);\n/**\n * pullRefresh 5+\n * @param {type} $\n * @returns {undefined}\n */\n(function($, document) {\n    if (!($.os.plus)) { //仅在5+android支持多webview的使用\n        return;\n    }\n    $.plusReady(function() {\n        if (window.__NWin_Enable__ === false) { //不支持多webview，则不用5+下拉刷新\n            return;\n        }\n        var CLASS_PLUS_PULLREFRESH = 'mui-plus-pullrefresh';\n        var CLASS_VISIBILITY = 'mui-visibility';\n        var CLASS_HIDDEN = 'mui-hidden';\n        var CLASS_BLOCK = 'mui-block';\n\n        var CLASS_PULL_CAPTION = 'mui-pull-caption';\n        var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down';\n        var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh';\n        var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore';\n\n        var PlusPullRefresh = $.Class.extend({\n            init: function(element, options) {\n                this.element = element;\n                this.options = options;\n                this.wrapper = this.scroller = element;\n                this._init();\n                this._initPulldownRefreshEvent();\n            },\n            _init: function() {\n                var self = this;\n                //document.addEventListener('plusscrollbottom', this);\n                window.addEventListener('dragup', self);\n                document.addEventListener(\"plusscrollbottom\", self);\n                self.scrollInterval = window.setInterval(function() {\n                    if (self.isScroll && !self.loading) {\n                        if (window.pageYOffset + window.innerHeight + 10 >= document.documentElement.scrollHeight) {\n                            self.isScroll = false; //放在这里是因为快速滚动的话，有可能检测时，还没到底，所以只要有滚动，没到底之前一直检测高度变化\n                            if (self.bottomPocket) {\n                                self.pullupLoading();\n                            }\n                        }\n                    }\n                }, 100);\n            },\n            _initPulldownRefreshEvent: function() {\n                var self = this;\n                $.plusReady(function() {\n                    if (self.options.down.style == \"circle\") {\n                        //单webview、原生转圈\n                        self.options.webview = plus.webview.currentWebview();\n                        self.options.webview.setPullToRefresh({\n                            support: true,\n                            color: self.options.down.color || '#2BD009',\n                            height: self.options.down.height || '50px',\n                            range: self.options.down.range || '100px',\n                            style: 'circle',\n                            offset: self.options.down.offset || '0px'\n                        }, function() {\n                            self.options.down.callback();\n                        });\n                    } else if (self.topPocket && self.options.webviewId) {\n                        var webview = plus.webview.getWebviewById(self.options.webviewId); //子窗口\n                        if (!webview) {\n                            return;\n                        }\n                        self.options.webview = webview;\n                        var downOptions = self.options.down;\n                        var height = downOptions.height;\n                        webview.addEventListener('close', function() {\n                            var attrWebviewId = self.options.webviewId && self.options.webviewId.replace(/\\//g, \"_\"); //替换所有\"/\" \n                            self.element.removeAttribute('data-pullrefresh-plus-' + attrWebviewId);\n                        });\n                        webview.addEventListener(\"dragBounce\", function(e) {\n                            if (!self.pulldown) {\n                                self._initPulldownRefresh();\n                            } else {\n                                self.pullPocket.classList.add(CLASS_BLOCK);\n                            }\n                            switch (e.status) {\n                                case \"beforeChangeOffset\": //下拉可刷新状态\n                                    self._setCaption(downOptions.contentdown);\n                                    break;\n                                case \"afterChangeOffset\": //松开可刷新状态\n                                    self._setCaption(downOptions.contentover);\n                                    break;\n                                case \"dragEndAfterChangeOffset\": //正在刷新状态\n                                    //执行下拉刷新所在webview的回调函数\n                                    webview.evalJS(\"window.mui&&mui.options.pullRefresh.down.callback()\");\n                                    self._setCaption(downOptions.contentrefresh);\n                                    break;\n                                default:\n                                    break;\n                            }\n                        }, false);\n\n                        webview.setBounce({\n                            position: {\n                                top: height * 2 + 'px'\n                            },\n                            changeoffset: {\n                                top: height + 'px'\n                            }\n                        });\n\n                    }\n                });\n            },\n            handleEvent: function(e) {\n                var self = this;\n                if (self.stopped) {\n                    return;\n                }\n                self.isScroll = false;\n                if (e.type === 'dragup' || e.type === 'plusscrollbottom') {\n                    self.isScroll = true;\n                    setTimeout(function() {\n                        self.isScroll = false;\n                    }, 1000);\n                }\n            }\n        }).extend($.extend({\n            setStopped: function(stopped) { //该方法是子页面调用的\n                this.stopped = !!stopped;\n                // TODO 此处需要设置当前webview的bounce为none,目前5+有BUG\n                if (this.stopped) {\n                    this.disablePullupToRefresh();\n                    this.disablePulldownToRefresh();\n                } else {\n                    this.enablePullupToRefresh();\n                    this.enablePulldownToRefresh();\n                }\n            },\n            beginPulldown: function() {\n                var self = this;\n                $.plusReady(function() {\n                    //这里延时的目的是为了保证下拉刷新组件初始化完成，后续应该做成有状态的\n                    setTimeout(function() {\n                        if (self.options.down.style == \"circle\") { //单webview下拉刷新\n                            plus.webview.currentWebview().beginPullToRefresh();\n                        } else { //双webview模式\n                            var webview = self.options.webview;\n                            if (webview) {\n                                webview.setBounce({\n                                    offset: {\n                                        top: self.options.down.height + \"px\"\n                                    }\n                                });\n                            }\n                        }\n                    }, 15);\n                }.bind(this));\n            },\n            pulldownLoading: function() { //该方法是子页面调用的，兼容老的历史API\n                this.beginPulldown();\n            },\n            _pulldownLoading: function() { //该方法是父页面调用的\n                var self = this;\n                $.plusReady(function() {\n                    var childWebview = plus.webview.getWebviewById(self.options.webviewId);\n                    childWebview && childWebview.setBounce({\n                        offset: {\n                            top: self.options.down.height + \"px\"\n                        }\n                    });\n                });\n            },\n            endPulldown: function() {\n                var _wv = plus.webview.currentWebview();\n                //双webview的下拉刷新，需要修改父窗口提示信息\n                if (_wv.parent() && this.options.down.style !== \"circle\") {\n                    _wv.parent().evalJS(\"mui&&mui(document.querySelector('.mui-content')).pullRefresh('\" + JSON.stringify({\n                        webviewId: _wv.id\n                    }) + \"')._endPulldownToRefresh()\");\n                } else {\n                    _wv.endPullToRefresh();\n                }\n            },\n            endPulldownToRefresh: function() { //该方法是子页面调用的，兼容老的历史API\n                this.endPulldown();\n            },\n            _endPulldownToRefresh: function() { //该方法是父页面调用的\n                var self = this;\n                if (self.topPocket && self.options.webview) {\n                    self.options.webview.endPullToRefresh(); //下拉刷新所在webview回弹\n                    self.loading = false;\n                    self._setCaption(self.options.down.contentdown, true);\n                    setTimeout(function() {\n                        self.loading || self.topPocket.classList.remove(CLASS_BLOCK);\n                    }, 350);\n                }\n            },\n            beginPullup: function(callback) { //开始上拉加载\n                var self = this;\n                if (self.isLoading) return;\n                self.isLoading = true;\n                if (self.pulldown !== false) {\n                    self._initPullupRefresh();\n                } else {\n                    this.pullPocket.classList.add(CLASS_BLOCK);\n                }\n                setTimeout(function() {\n                    self.pullLoading.classList.add(CLASS_VISIBILITY);\n                    self.pullLoading.classList.remove(CLASS_HIDDEN);\n                    self.pullCaption.innerHTML = ''; //修正5+里边第一次加载时，文字显示的bug(还会显示出来个“多”,猜测应该是渲染问题导致的)\n                    self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH;\n                    self.pullCaption.innerHTML = self.options.up.contentrefresh;\n                    callback = callback || self.options.up.callback;\n                    callback && callback.call(self);\n                }, 300);\n            },\n            pullupLoading: function(callback) { //兼容老的API\n                this.beginPullup(callback);\n            },\n            endPullup: function(finished) { //上拉加载结束\n                var self = this;\n                if (self.pullLoading) {\n                    self.pullLoading.classList.remove(CLASS_VISIBILITY);\n                    self.pullLoading.classList.add(CLASS_HIDDEN);\n                    self.isLoading = false;\n                    if (finished) {\n                        self.finished = true;\n                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;\n                        self.pullCaption.innerHTML = self.options.up.contentnomore;\n                        //取消5+的plusscrollbottom事件\n                        document.removeEventListener('plusscrollbottom', self);\n                        window.removeEventListener('dragup', self);\n                    } else { //初始化时隐藏，后续不再隐藏\n                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                        self.pullCaption.innerHTML = self.options.up.contentdown;\n                    }\n                }\n            },\n            endPullupToRefresh: function(finished) { //上拉加载结束，兼容老的API\n                this.endPullup(finished);\n            },\n            disablePulldownToRefresh: function() {\n                var webview = plus.webview.currentWebview();\n                if (this.options.down.style && this.options.down.style == 'circle') { // 单webview模式禁止原生下拉刷新\n                    this.options.webview.setPullToRefresh({\n                        support: false,\n                        style: 'circle'\n                    });\n                } else { // 双webview模式禁止下拉刷新\n                    webview.setStyle({\n                        bounce: 'none'\n                    });\n                    webview.setBounce({\n                        position: {\n                            top: 'none'\n                        }\n                    });\n                }\n            },\n            enablePulldownToRefresh: function() {\n                var self = this,\n                    webview = plus.webview.currentWebview(),\n                    height = this.options.down.height;\n                // 单webview模式禁止原生下拉刷新\n                if (this.options.down.style && this.options.down.style == 'circle') {\n                    webview.setPullToRefresh({\n                        support: true,\n                        height: height || '50px',\n                        range: self.options.down.range || '100px',\n                        style: 'circle',\n                        offset: self.options.down.offset || '0px'\n                    });\n                } else { // 重新初始化双webview模式下拉刷新\n                    webview.setStyle({\n                        bounce: 'vertical'\n                    });\n                    webview.setBounce({\n                        position: {\n                            top: height * 2 + 'px'\n                        },\n                        changeoffset: {\n                            top: height + 'px'\n                        }\n                    });\n                }\n            },\n            disablePullupToRefresh: function() {\n                this._initPullupRefresh();\n                this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN;\n                window.removeEventListener('dragup', this);\n            },\n            enablePullupToRefresh: function() {\n                this._initPullupRefresh();\n                this.bottomPocket.classList.remove(CLASS_HIDDEN);\n                this.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                this.pullCaption.innerHTML = this.options.up.contentdown;\n                document.addEventListener(\"plusscrollbottom\", this);\n                window.addEventListener('dragup', this);\n            },\n            scrollTo: function(x, y, time) {\n                $.scrollTo(y, time);\n            },\n            scrollToBottom: function(time) {\n                $.scrollTo(document.documentElement.scrollHeight, time);\n            },\n            refresh: function(isReset) {\n                if (isReset && this.finished) {\n                    this.enablePullupToRefresh();\n                    this.finished = false;\n                }\n            }\n        }, $.PullRefresh));\n\n        //override h5 pullRefresh\n        $.fn.pullRefresh_native = function(options) {\n            var self;\n            if (this.length === 0) {\n                self = document.createElement('div');\n                self.className = 'mui-content';\n                document.body.appendChild(self);\n            } else {\n                self = this[0];\n            }\n            var args = options;\n            //一个父需要支持多个子下拉刷新\n            options = options || {}\n            if (typeof options === 'string') {\n                options = $.parseJSON(options);\n            };\n            !options.webviewId && (options.webviewId = (plus.webview.currentWebview().id || plus.webview.currentWebview().getURL()));\n            var pullRefreshApi = null;\n            var attrWebviewId = options.webviewId && options.webviewId.replace(/\\//g, \"_\"); //替换所有\"/\"\n            var id = self.getAttribute('data-pullrefresh-plus-' + attrWebviewId);\n            if (!id && typeof args === 'undefined') {\n                return false;\n            }\n            if (!id) { //避免重复初始化5+ pullrefresh\n                id = ++$.uuid;\n                self.setAttribute('data-pullrefresh-plus-' + attrWebviewId, id);\n                document.body.classList.add(CLASS_PLUS_PULLREFRESH);\n                $.data[id] = pullRefreshApi = new PlusPullRefresh(self, options);\n            } else {\n                pullRefreshApi = $.data[id];\n            }\n            if (options.down && options.down.auto) { //如果设置了auto，则自动下拉一次\n                //pullRefreshApi._pulldownLoading(); //parent webview\n                pullRefreshApi.beginPulldown();\n            } else if (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n                pullRefreshApi.beginPullup();\n            }\n            return pullRefreshApi;\n        };\n    });\n\n})(mui, document);\n/**\n * off-canvas\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} action\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\tvar CLASS_OFF_CANVAS_LEFT = 'mui-off-canvas-left';\n\tvar CLASS_OFF_CANVAS_RIGHT = 'mui-off-canvas-right';\n\tvar CLASS_ACTION_BACKDROP = 'mui-off-canvas-backdrop';\n\tvar CLASS_OFF_CANVAS_WRAP = 'mui-off-canvas-wrap';\n\n\tvar CLASS_SLIDE_IN = 'mui-slide-in';\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\n\tvar CLASS_TRANSITIONING = 'mui-transitioning';\n\n\tvar SELECTOR_INNER_WRAP = '.mui-inner-wrap';\n\n\n\tvar OffCanvas = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.wrapper = this.element = element;\n\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\tthis.classList = this.wrapper.classList;\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.options = $.extend(true, {\n\t\t\t\t\tdragThresholdX: 10,\n\t\t\t\t\tscale: 0.8,\n\t\t\t\t\topacity: 0.1,\n\t\t\t\t\tpreventDefaultException: {\n\t\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/\n\t\t\t\t\t},\n\t\t\t\t}, options);\n\t\t\t\tdocument.body.classList.add('mui-fullscreen'); //fullscreen\n\t\t\t\tthis.refresh();\n\t\t\t\tthis.initEvent();\n\t\t\t}\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\trefresh: function(offCanvas) {\n\t\t\t//\t\t\toffCanvas && !offCanvas.classList.contains(CLASS_ACTIVE) && this.classList.remove(CLASS_ACTIVE);\n\t\t\tthis.slideIn = this.classList.contains(CLASS_SLIDE_IN);\n\t\t\tthis.scalable = this.classList.contains('mui-scalable') && !this.slideIn;\n\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\t//\t\t\t!offCanvas && this.scroller.classList.remove(CLASS_TRANSITIONING);\n\t\t\t//\t\t\t!offCanvas && this.scroller.setAttribute('style', '');\n\t\t\tthis.offCanvasLefts = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_LEFT);\n\t\t\tthis.offCanvasRights = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_RIGHT);\n\t\t\tif (offCanvas) {\n\t\t\t\tif (offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {\n\t\t\t\t\tthis.offCanvasLeft = offCanvas;\n\t\t\t\t} else if (offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {\n\t\t\t\t\tthis.offCanvasRight = offCanvas;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.offCanvasRight = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT);\n\t\t\t\tthis.offCanvasLeft = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT);\n\t\t\t}\n\t\t\tthis.offCanvasRightWidth = this.offCanvasLeftWidth = 0;\n\t\t\tthis.offCanvasLeftSlideIn = this.offCanvasRightSlideIn = false;\n\t\t\tif (this.offCanvasRight) {\n\t\t\t\tthis.offCanvasRightWidth = this.offCanvasRight.offsetWidth;\n\t\t\t\tthis.offCanvasRightSlideIn = this.slideIn && (this.offCanvasRight.parentNode === this.wrapper);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.classList.remove(CLASS_ACTIVE);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.setAttribute('style', '');\n\t\t\t}\n\t\t\tif (this.offCanvasLeft) {\n\t\t\t\tthis.offCanvasLeftWidth = this.offCanvasLeft.offsetWidth;\n\t\t\t\tthis.offCanvasLeftSlideIn = this.slideIn && (this.offCanvasLeft.parentNode === this.wrapper);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.classList.remove(CLASS_ACTIVE);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.setAttribute('style', '');\n\t\t\t}\n\t\t\tthis.backdrop = this.scroller.querySelector('.' + CLASS_ACTION_BACKDROP);\n\n\t\t\tthis.options.dragThresholdX = this.options.dragThresholdX || 10;\n\n\t\t\tthis.visible = false;\n\t\t\tthis.startX = null;\n\t\t\tthis.lastX = null;\n\t\t\tthis.offsetX = null;\n\t\t\tthis.lastTranslateX = null;\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\te.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd': //有个bug需要处理，需要考虑假设没有触发webkitTransitionEnd的情况\n\t\t\t\t\tif (e.target === this.scroller) {\n\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tvar detail = e.detail;\n\t\t\t\t\tif (!this.startX) {\n\t\t\t\t\t\tthis.startX = detail.center.x;\n\t\t\t\t\t\tthis.lastX = this.startX;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastX = detail.center.x;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.isDragging && Math.abs(this.lastX - this.startX) > this.options.dragThresholdX && (detail.direction === 'left' || (detail.direction === 'right'))) {\n\t\t\t\t\t\tif (this.slideIn) {\n\t\t\t\t\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\t\t\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\tif (this.offCanvasRight && this.offCanvasRight.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (detail.direction === 'left' && this.offCanvasRight) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t} else if (detail.direction === 'right' && this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.scroller = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\tif (detail.direction === 'left') {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (detail.direction === 'right') {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.offCanvas && this.scroller) {\n\t\t\t\t\t\t\tthis.startX = this.lastX;\n\t\t\t\t\t\t\tthis.isDragging = true;\n\n\t\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\n\t\t\t\t\t\t\tthis.offCanvas.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\t\t\tthis.scroller.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\t\t\tthis.offsetX = this.getTranslateX();\n\t\t\t\t\t\t\tthis._initOffCanvasVisible();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.isDragging) {\n\t\t\t\t\t\tthis.updateTranslate(this.offsetX + (this.lastX - this.startX));\n\t\t\t\t\t\tdetail.gesture.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tif (this.isDragging) {\n\t\t\t\t\t\tvar detail = e.detail;\n\t\t\t\t\t\tvar direction = detail.direction;\n\t\t\t\t\t\tthis.isDragging = false;\n\t\t\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tvar ratio = 0;\n\t\t\t\t\t\tvar x = this.getTranslateX();\n\t\t\t\t\t\tif (!this.slideIn) {\n\t\t\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 0) {\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t\tthis._dispatchEvent(); //此处不触发webkitTransitionEnd,所以手动dispatch\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (direction === 'right' && ratio >= 0 && (ratio >= 0.5 || detail.swipe)) { //右滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio < 0 && (ratio > -0.5 || detail.swipe)) { //右滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && ratio < 0.5) { //右滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio < 0.5) { //右滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio <= 0 && (ratio <= -0.5 || detail.swipe)) { //左滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio > 0 && (ratio <= 0.5 || detail.swipe)) { //左滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio < 0 && ratio >= -0.5) { //左滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio > 0.5) { //左滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else { //默认关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 1 || ratio === -1) { //此处不触发webkitTransitionEnd,所以手动dispatch\n\t\t\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (direction === 'right' && ratio <= 0 && (ratio >= -0.5 || detail.swipe)) { //右滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && (ratio >= 0.5 || detail.swipe)) { //右滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio <= -0.5) { //右滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && ratio <= 0.5) { //右滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= 0 && (ratio <= 0.5 || detail.swipe)) { //左滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio < 0 && (ratio <= -0.5 || detail.swipe)) { //左滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= 0.5) { //左滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= -0.5 && ratio < 0) { //左滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 1 || ratio === -1 || ratio === 0) {\n\t\t\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t_dispatchEvent: function() {\n\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t$.trigger(this.wrapper, 'shown', this);\n\t\t\t} else {\n\t\t\t\t$.trigger(this.wrapper, 'hidden', this);\n\t\t\t}\n\t\t},\n\t\t_initOffCanvasVisible: function() {\n\t\t\tif (!this.visible) {\n\t\t\t\tthis.visible = true;\n\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\tthis.offCanvasLeft.style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\tthis.offCanvasRight.style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinitEvent: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.backdrop) {\n\t\t\t\tself.backdrop.addEventListener('tap', function(e) {\n\t\t\t\t\tself.close();\n\t\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.classList.contains('mui-draggable')) {\n\t\t\t\tthis.wrapper.addEventListener($.EVENT_START, this); //临时处理\n\t\t\t\tthis.wrapper.addEventListener('drag', this);\n\t\t\t\tthis.wrapper.addEventListener('dragend', this);\n\t\t\t}\n\t\t\tthis.wrapper.addEventListener('webkitTransitionEnd', this);\n\t\t},\n\t\topenPercentage: function(percentage) {\n\t\t\tvar p = percentage / 100;\n\t\t\tif (!this.slideIn) {\n\t\t\t\tif (this.offCanvasLeft && percentage >= 0) {\n\t\t\t\t\tthis.updateTranslate(this.offCanvasLeftWidth * p);\n\t\t\t\t\tthis.offCanvasLeft.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t} else if (this.offCanvasRight && percentage <= 0) {\n\t\t\t\t\tthis.updateTranslate(this.offCanvasRightWidth * p);\n\t\t\t\t\tthis.offCanvasRight.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tthis.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t} else {\n\t\t\t\tif (this.offCanvasLeft && percentage >= 0) {\n\t\t\t\t\tp = p === 0 ? -1 : 0;\n\t\t\t\t\tthis.updateTranslate(this.offCanvasLeftWidth * p);\n\t\t\t\t\tthis.offCanvasLeft.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t} else if (this.offCanvasRight && percentage <= 0) {\n\t\t\t\t\tp = p === 0 ? 1 : 0;\n\t\t\t\t\tthis.updateTranslate(this.offCanvasRightWidth * p);\n\t\t\t\t\tthis.offCanvasRight.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tthis.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t}\n\t\t},\n\t\tupdateTranslate: function(x) {\n\t\t\tif (x !== this.lastTranslateX) {\n\t\t\t\tif (!this.slideIn) {\n\t\t\t\t\tif ((!this.offCanvasLeft && x > 0) || (!this.offCanvasRight && x < 0)) {\n\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.leftShowing && x > this.offCanvasLeftWidth) {\n\t\t\t\t\t\tthis.setTranslateX(this.offCanvasLeftWidth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.rightShowing && x < -this.offCanvasRightWidth) {\n\t\t\t\t\t\tthis.setTranslateX(-this.offCanvasRightWidth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setTranslateX(x);\n\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\tthis.leftShowing = true;\n\t\t\t\t\t\tthis.rightShowing = false;\n\t\t\t\t\t\tif (x > 0) {\n\t\t\t\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t$.each(this.offCanvasLefts, function(index, offCanvas) {\n\t\t\t\t\t\t\t\t\tif (offCanvas === this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t\t\tthis.offCanvasLeft.style.zIndex = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = -1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}.bind(this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\t\t\t\tthis.offCanvasRight.style.zIndex = -1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.rightShowing = true;\n\t\t\t\t\t\tthis.leftShowing = false;\n\t\t\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\t\t\t$.each(this.offCanvasRights, function(index, offCanvas) {\n\t\t\t\t\t\t\t\tif (offCanvas === this.offCanvasRight) {\n\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = -1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}.bind(this));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\t\t\tthis.offCanvasLeft.style.zIndex = -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x > this.offCanvasRightWidth) {\n\t\t\t\t\t\t\tthis.setTranslateX(this.offCanvasRightWidth);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (x > 0) {\n\t\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x < -this.offCanvasLeftWidth) {\n\t\t\t\t\t\t\tthis.setTranslateX(-this.offCanvasLeftWidth);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.setTranslateX(x);\n\t\t\t\t}\n\t\t\t\tthis.lastTranslateX = x;\n\t\t\t}\n\t\t},\n\t\tsetTranslateX: $.animationFrame(function(x) {\n\t\t\tif (this.scroller) {\n\t\t\t\tif (this.scalable && this.offCanvas.parentNode === this.wrapper) {\n\t\t\t\t\tvar percent = Math.abs(x) / this.offCanvasWidth;\n\t\t\t\t\tvar zoomOutScale = 1 - (1 - this.options.scale) * percent;\n\t\t\t\t\tvar zoomInScale = this.options.scale + (1 - this.options.scale) * percent;\n\t\t\t\t\tvar zoomOutOpacity = 1 - (1 - this.options.opacity) * percent;\n\t\t\t\t\tvar zoomInOpacity = this.options.opacity + (1 - this.options.opacity) * percent;\n\t\t\t\t\tif (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransformOrigin = '-100%';\n\t\t\t\t\t\tthis.scroller.style.webkitTransformOrigin = 'left';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransformOrigin = '200%';\n\t\t\t\t\t\tthis.scroller.style.webkitTransformOrigin = 'right';\n\t\t\t\t\t}\n\t\t\t\t\tthis.offCanvas.style.opacity = zoomInOpacity;\n\t\t\t\t\tthis.offCanvas.style.webkitTransform = 'translate3d(0,0,0) scale(' + zoomInScale + ')';\n\t\t\t\t\tthis.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0) scale(' + zoomOutScale + ')';\n\t\t\t\t} else {\n\t\t\t\t\tif (this.slideIn) {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}),\n\t\tgetTranslateX: function() {\n\t\t\tif (this.offCanvas) {\n\t\t\t\tvar scroller = this.slideIn ? this.offCanvas : this.scroller;\n\t\t\t\tvar result = $.parseTranslateMatrix($.getStyles(scroller, 'webkitTransform'));\n\t\t\t\treturn (result && result.x) || 0;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\tisShown: function(direction) {\n\t\t\tvar shown = false;\n\t\t\tif (!this.slideIn) {\n\t\t\t\tvar x = this.getTranslateX();\n\t\t\t\tif (direction === 'right') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x < 0;\n\t\t\t\t} else if (direction === 'left') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x > 0;\n\t\t\t\t} else {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x !== 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (direction === 'left') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);\n\t\t\t\t} else if (direction === 'right') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE);\n\t\t\t\t} else {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && (this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn shown;\n\t\t},\n\t\tclose: function() {\n\t\t\tthis._initOffCanvasVisible();\n\t\t\tthis.offCanvas = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);\n\t\t\tthis.offCanvasWidth = this.offCanvas.offsetWidth;\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.offCanvas.offsetHeight;\n\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.openPercentage(0);\n\t\t\t}\n\t\t},\n\t\tshow: function(direction) {\n\t\t\tthis._initOffCanvasVisible();\n\t\t\tif (this.isShown(direction)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!direction) {\n\t\t\t\tdirection = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT) ? 'right' : 'left';\n\t\t\t}\n\t\t\tif (direction === 'right') {\n\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t} else {\n\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t}\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.offCanvas.offsetHeight;\n\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.openPercentage(direction === 'left' ? 100 : -100);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\ttoggle: function(directionOrOffCanvas) {\n\t\t\tvar direction = directionOrOffCanvas;\n\t\t\tif (directionOrOffCanvas && directionOrOffCanvas.classList) {\n\t\t\t\tdirection = directionOrOffCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT) ? 'left' : 'right';\n\t\t\t\tthis.refresh(directionOrOffCanvas);\n\t\t\t}\n\t\t\tif (!this.show(direction)) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t});\n\n\t//hash to offcanvas\n\tvar findOffCanvasContainer = function(target) {\n\t\tparentNode = target.parentNode;\n\t\tif (parentNode) {\n\t\t\tif (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\treturn parentNode;\n\t\t\t} else {\n\t\t\t\tparentNode = parentNode.parentNode;\n\t\t\t\tif (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\t\treturn parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\tvar offcanvas = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif (offcanvas) {\n\t\t\t\tvar container = findOffCanvasContainer(offcanvas);\n\t\t\t\tif (container) {\n\t\t\t\t\t$.targets._container = container;\n\t\t\t\t\treturn offcanvas;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 60,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\twindow.addEventListener('tap', function(e) {\n\t\tif (!$.targets.offcanvas) {\n\t\t\treturn;\n\t\t}\n\t\t//TODO 此处类型的代码后续考虑统一优化(target机制)，现在的实现费力不讨好\n\t\tvar target = e.target;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.tagName === 'A' && target.hash && target.hash === ('#' + $.targets.offcanvas.id)) {\n\t\t\t\te.detail && e.detail.gesture && e.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\t\t$($.targets._container).offCanvas().toggle($.targets.offcanvas);\n\t\t\t\t$.targets.offcanvas = $.targets._container = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\t$.fn.offCanvas = function(options) {\n\t\tvar offCanvasApis = [];\n\t\tthis.each(function() {\n\t\t\tvar offCanvasApi = null;\n\t\t\tvar self = this;\n\t\t\t//hack old version\n\t\t\tif (!self.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\tself = findOffCanvasContainer(self);\n\t\t\t}\n\t\t\tvar id = self.getAttribute('data-offCanvas');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = offCanvasApi = new OffCanvas(self, options);\n\t\t\t\tself.setAttribute('data-offCanvas', id);\n\t\t\t} else {\n\t\t\t\toffCanvasApi = $.data[id];\n\t\t\t}\n\t\t\tif (options === 'show' || options === 'close' || options === 'toggle') {\n\t\t\t\toffCanvasApi.toggle();\n\t\t\t}\n\t\t\toffCanvasApis.push(offCanvasApi);\n\t\t});\n\t\treturn offCanvasApis.length === 1 ? offCanvasApis[0] : offCanvasApis;\n\t};\n\t$.ready(function() {\n\t\t$('.mui-off-canvas-wrap').offCanvas();\n\t});\n})(mui, window, document, 'offcanvas');\n/**\n * actions\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar CLASS_ACTION = 'mui-action';\n\n\tvar handle = function(event, target) {\n\t\tvar className = target.className || '';\n\t\tif (typeof className !== 'string') { //svg className(SVGAnimatedString)\n\t\t\tclassName = '';\n\t\t}\n\t\tif (className && ~className.indexOf(CLASS_ACTION)) {\n\t\t\tif (target.classList.contains('mui-action-back')) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\treturn target;\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 50,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisContinue: true\n\t});\n\n})(mui, 'action');\n/**\n * Modals\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} name\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\tvar CLASS_MODAL = 'mui-modal';\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\tvar modal = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif (modal && modal.classList.contains(CLASS_MODAL)) {\n\t\t\t\treturn modal;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 50,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\twindow.addEventListener('tap', function(event) {\n\t\tif ($.targets.modal) {\n\t\t\tevent.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\t$.targets.modal.classList.toggle('mui-active');\n\t\t}\n\t});\n})(mui, window, document, 'modal');\n/**\n * Popovers\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} name\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\n\tvar CLASS_POPOVER = 'mui-popover';\n\tvar CLASS_POPOVER_ARROW = 'mui-popover-arrow';\n\tvar CLASS_ACTION_POPOVER = 'mui-popover-action';\n\tvar CLASS_BACKDROP = 'mui-backdrop';\n\tvar CLASS_BAR_POPOVER = 'mui-bar-popover';\n\tvar CLASS_BAR_BACKDROP = 'mui-bar-backdrop';\n\tvar CLASS_ACTION_BACKDROP = 'mui-backdrop-action';\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_BOTTOM = 'mui-bottom';\n\n\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\t$.targets._popover = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif ($.targets._popover && $.targets._popover.classList.contains(CLASS_POPOVER)) {\n\t\t\t\treturn target;\n\t\t\t} else {\n\t\t\t\t$.targets._popover = null;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 60,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\tvar onPopoverShown = function(e) {\n\t\tthis.removeEventListener('webkitTransitionEnd', onPopoverShown);\n\t\tthis.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\t$.trigger(this, 'shown', this);\n\t}\n\tvar onPopoverHidden = function(e) {\n\t\tsetStyle(this, 'none');\n\t\tthis.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\tthis.removeEventListener($.EVENT_MOVE, $.preventDefault);\n\t\t$.trigger(this, 'hidden', this);\n\t};\n\n\tvar backdrop = (function() {\n\t\tvar element = document.createElement('div');\n\t\telement.classList.add(CLASS_BACKDROP);\n\t\telement.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\telement.addEventListener('tap', function(e) {\n\t\t\tvar popover = $.targets._popover;\n\t\t\tif (popover) {\n\t\t\t\tpopover.addEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t\tpopover.classList.remove(CLASS_ACTIVE);\n\t\t\t\tremoveBackdrop(popover);\n\t\t\t}\n\t\t});\n\n\t\treturn element;\n\t}());\n\tvar removeBackdropTimer;\n\tvar removeBackdrop = function(popover) {\n\t\tbackdrop.setAttribute('style', 'opacity:0');\n\t\t$.targets.popover = $.targets._popover = null; //reset\n\t\tremoveBackdropTimer = $.later(function() {\n\t\t\tif (!popover.classList.contains(CLASS_ACTIVE) && backdrop.parentNode && backdrop.parentNode === document.body) {\n\t\t\t\tdocument.body.removeChild(backdrop);\n\t\t\t}\n\t\t}, 350);\n\t};\n\twindow.addEventListener('tap', function(e) {\n\t\tif (!$.targets.popover) {\n\t\t\treturn;\n\t\t}\n\t\tvar toggle = false;\n\t\tvar target = e.target;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target === $.targets.popover) {\n\t\t\t\ttoggle = true;\n\t\t\t}\n\t\t}\n\t\tif (toggle) {\n\t\t\te.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\ttogglePopover($.targets._popover, $.targets.popover);\n\t\t}\n\n\t});\n\n\tvar togglePopover = function(popover, anchor, state) {\n\t\tif ((state === 'show' && popover.classList.contains(CLASS_ACTIVE)) || (state === 'hide' && !popover.classList.contains(CLASS_ACTIVE))) {\n\t\t\treturn;\n\t\t}\n\t\tremoveBackdropTimer && removeBackdropTimer.cancel(); //取消remove的timer\n\t\t//remove一遍，以免来回快速切换，导致webkitTransitionEnd不触发，无法remove\n\t\tpopover.removeEventListener('webkitTransitionEnd', onPopoverShown);\n\t\tpopover.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\tbackdrop.classList.remove(CLASS_BAR_BACKDROP);\n\t\tbackdrop.classList.remove(CLASS_ACTION_BACKDROP);\n\t\tvar _popover = document.querySelector('.mui-popover.mui-active');\n\t\tif (_popover) {\n\t\t\t//\t\t\t_popover.setAttribute('style', '');\n\t\t\t_popover.addEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t_popover.classList.remove(CLASS_ACTIVE);\n\t\t\t//\t\t\t_popover.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t//同一个弹出则直接返回，解决同一个popover的toggle\n\t\t\tif (popover === _popover) {\n\t\t\t\tremoveBackdrop(_popover);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tvar isActionSheet = false;\n\t\tif (popover.classList.contains(CLASS_BAR_POPOVER) || popover.classList.contains(CLASS_ACTION_POPOVER)) { //navBar\n\t\t\tif (popover.classList.contains(CLASS_ACTION_POPOVER)) { //action sheet popover\n\t\t\t\tisActionSheet = true;\n\t\t\t\tbackdrop.classList.add(CLASS_ACTION_BACKDROP);\n\t\t\t} else { //bar popover\n\t\t\t\tbackdrop.classList.add(CLASS_BAR_BACKDROP);\n\t\t\t\t//\t\t\t\tif (anchor) {\n\t\t\t\t//\t\t\t\t\tif (anchor.parentNode) {\n\t\t\t\t//\t\t\t\t\t\tvar offsetWidth = anchor.offsetWidth;\n\t\t\t\t//\t\t\t\t\t\tvar offsetLeft = anchor.offsetLeft;\n\t\t\t\t//\t\t\t\t\t\tvar innerWidth = window.innerWidth;\n\t\t\t\t//\t\t\t\t\t\tpopover.style.left = (Math.min(Math.max(offsetLeft, defaultPadding), innerWidth - offsetWidth - defaultPadding)) + \"px\";\n\t\t\t\t//\t\t\t\t\t} else {\n\t\t\t\t//\t\t\t\t\t\t//TODO anchor is position:{left,top,bottom,right}\n\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsetStyle(popover, 'block'); //actionsheet transform\n\t\tpopover.offsetHeight;\n\t\tpopover.classList.add(CLASS_ACTIVE);\n\t\tbackdrop.setAttribute('style', '');\n\t\tdocument.body.appendChild(backdrop);\n\t\tcalPosition(popover, anchor, isActionSheet); //position\n\t\tbackdrop.classList.add(CLASS_ACTIVE);\n\t\tpopover.addEventListener('webkitTransitionEnd', onPopoverShown);\n\t};\n\tvar setStyle = function(popover, display, top, left) {\n\t\tvar style = popover.style;\n\t\tif (typeof display !== 'undefined')\n\t\t\tstyle.display = display;\n\t\tif (typeof top !== 'undefined')\n\t\t\tstyle.top = top + 'px';\n\t\tif (typeof left !== 'undefined')\n\t\t\tstyle.left = left + 'px';\n\t};\n\tvar calPosition = function(popover, anchor, isActionSheet) {\n\t\tif (!popover || !anchor) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isActionSheet) { //actionsheet\n\t\t\tsetStyle(popover, 'block')\n\t\t\treturn;\n\t\t}\n\n\t\tvar wWidth = window.innerWidth;\n\t\tvar wHeight = window.innerHeight;\n\n\t\tvar pWidth = popover.offsetWidth;\n\t\tvar pHeight = popover.offsetHeight;\n\n\t\tvar aWidth = anchor.offsetWidth;\n\t\tvar aHeight = anchor.offsetHeight;\n\t\tvar offset = $.offset(anchor);\n\n\t\tvar arrow = popover.querySelector('.' + CLASS_POPOVER_ARROW);\n\t\tif (!arrow) {\n\t\t\tarrow = document.createElement('div');\n\t\t\tarrow.className = CLASS_POPOVER_ARROW;\n\t\t\tpopover.appendChild(arrow);\n\t\t}\n\t\tvar arrowSize = arrow && arrow.offsetWidth / 2 || 0;\n\n\n\n\t\tvar pTop = 0;\n\t\tvar pLeft = 0;\n\t\tvar diff = 0;\n\t\tvar arrowLeft = 0;\n\t\tvar defaultPadding = popover.classList.contains(CLASS_ACTION_POPOVER) ? 0 : 5;\n\n\t\tvar position = 'top';\n\t\tif ((pHeight + arrowSize) < (offset.top - window.pageYOffset)) { //top\n\t\t\tpTop = offset.top - pHeight - arrowSize;\n\t\t} else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset) - aHeight)) { //bottom\n\t\t\tposition = 'bottom';\n\t\t\tpTop = offset.top + aHeight + arrowSize;\n\t\t} else { //middle\n\t\t\tposition = 'middle';\n\t\t\tpTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset, 0);\n\t\t\tpLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0);\n\t\t}\n\t\tif (position === 'top' || position === 'bottom') {\n\t\t\tpLeft = aWidth / 2 + offset.left - pWidth / 2;\n\t\t\tdiff = pLeft;\n\t\t\tif (pLeft < defaultPadding) pLeft = defaultPadding;\n\t\t\tif (pLeft + pWidth > wWidth) pLeft = wWidth - pWidth - defaultPadding;\n\n\t\t\tif (arrow) {\n\t\t\t\tif (position === 'top') {\n\t\t\t\t\tarrow.classList.add(CLASS_BOTTOM);\n\t\t\t\t} else {\n\t\t\t\t\tarrow.classList.remove(CLASS_BOTTOM);\n\t\t\t\t}\n\t\t\t\tdiff = diff - pLeft;\n\t\t\t\tarrowLeft = (pWidth / 2 - arrowSize / 2 + diff);\n\t\t\t\tarrowLeft = Math.max(Math.min(arrowLeft, pWidth - arrowSize * 2 - 6), 6);\n\t\t\t\tarrow.setAttribute('style', 'left:' + arrowLeft + 'px');\n\t\t\t}\n\t\t} else if (position === 'middle') {\n\t\t\tarrow.setAttribute('style', 'display:none');\n\t\t}\n\t\tsetStyle(popover, 'block', pTop, pLeft);\n\t};\n\n\t$.createMask = function(callback) {\n\t\tvar element = document.createElement('div');\n\t\telement.classList.add(CLASS_BACKDROP);\n\t\telement.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\telement.addEventListener('tap', function() {\n\t\t\tmask.close();\n\t\t});\n\t\tvar mask = [element];\n\t\tmask._show = false;\n\t\tmask.show = function() {\n\t\t\tmask._show = true;\n\t\t\telement.setAttribute('style', 'opacity:1');\n\t\t\tdocument.body.appendChild(element);\n\t\t\treturn mask;\n\t\t};\n\t\tmask._remove = function() {\n\t\t\tif (mask._show) {\n\t\t\t\tmask._show = false;\n\t\t\t\telement.setAttribute('style', 'opacity:0');\n\t\t\t\t$.later(function() {\n\t\t\t\t\tvar body = document.body;\n\t\t\t\t\telement.parentNode === body && body.removeChild(element);\n\t\t\t\t}, 350);\n\t\t\t}\n\t\t\treturn mask;\n\t\t};\n\t\tmask.close = function() {\n\t\t\tif (callback) {\n\t\t\t\tif (callback() !== false) {\n\t\t\t\t\tmask._remove();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmask._remove();\n\t\t\t}\n\t\t};\n\t\treturn mask;\n\t};\n\t$.fn.popover = function() {\n\t\tvar args = arguments;\n\t\tthis.each(function() {\n\t\t\t$.targets._popover = this;\n\t\t\tif (args[0] === 'show' || args[0] === 'hide' || args[0] === 'toggle') {\n\t\t\t\ttogglePopover(this, args[1], args[0]);\n\t\t\t}\n\t\t});\n\t};\n\n})(mui, window, document, 'popover');\n/**\n * segmented-controllers\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, document, name, undefined) {\n\n    var CLASS_CONTROL_ITEM = 'mui-control-item';\n    var CLASS_SEGMENTED_CONTROL = 'mui-segmented-control';\n    var CLASS_SEGMENTED_CONTROL_VERTICAL = 'mui-segmented-control-vertical';\n    var CLASS_CONTROL_CONTENT = 'mui-control-content';\n    var CLASS_TAB_BAR = 'mui-bar-tab';\n    var CLASS_TAB_ITEM = 'mui-tab-item';\n    var CLASS_SLIDER_ITEM = 'mui-slider-item';\n\n   var handle = function(event, target) {\n        if (target.classList && (target.classList.contains(CLASS_CONTROL_ITEM) || target.classList.contains(CLASS_TAB_ITEM))) {\n            if (target.parentNode && target.parentNode.classList && target.parentNode.classList.contains(CLASS_SEGMENTED_CONTROL_VERTICAL)) {\n                //vertical 如果preventDefault会导致无法滚动\n            } else {\n\n                    event.preventDefault();      \n                    // if(target.tagName == 'A') {\n                    //     // fixed 底部选项卡href 无法跳转 && stop hash change\n                    //     var curr_href = location.hostname + location.pathname,\n                    //         target_href = target.hostname + target.pathname;\n                   \n                    //     if (curr_href == target_href && target.hash !== \"\") {\n                    //         event.preventDefault();\n                    //         return target;\n                    //     }else{\n                    //             return false\n                    //     }\n                    // }\n            }\n            //          if (target.hash) {\n            return target;\n            //          }\n        }\n        return false;\n    };\n\n    $.registerTarget({\n        name: name,\n        index: 80,\n        handle: handle,\n        target: false\n    });\n\n    window.addEventListener('tap', function(e) {\n\n        var targetTab = $.targets.tab;\n        if (!targetTab) {\n            return;\n        }\n        var activeTab;\n        var activeBodies;\n        var targetBody;\n        var className = 'mui-active';\n        var classSelector = '.' + className;\n        var segmentedControl = targetTab.parentNode;\n\n        for (; segmentedControl && segmentedControl !== document; segmentedControl = segmentedControl.parentNode) {\n            if (segmentedControl.classList.contains(CLASS_SEGMENTED_CONTROL)) {\n                activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_CONTROL_ITEM);\n                break;\n            } else if (segmentedControl.classList.contains(CLASS_TAB_BAR)) {\n                activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_TAB_ITEM);\n            }\n        }\n\n        if (activeTab) {\n            activeTab.classList.remove(className);\n        }\n\n        var isLastActive = targetTab === activeTab;\n        if (targetTab) {\n            targetTab.classList.add(className);\n        }\n\n        if (!targetTab.hash) {\n            return;\n        }\n        targetBody = document.getElementById(targetTab.hash.replace('#', ''));\n\n        if (!targetBody) {\n            return;\n        }\n        if (!targetBody.classList.contains(CLASS_CONTROL_CONTENT)) { //tab bar popover\n            targetTab.classList[isLastActive ? 'remove' : 'add'](className);\n            return;\n        }\n        if (isLastActive) { //same\n            return;\n        }\n        var parentNode = targetBody.parentNode;\n        activeBodies = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT + classSelector);\n        for (var i = 0; i < activeBodies.length; i++) {\n            var activeBody = activeBodies[i];\n            activeBody.parentNode === parentNode && activeBody.classList.remove(className);\n        }\n\n        targetBody.classList.add(className);\n\n        var contents = [];\n        var _contents = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT);\n        for (var i = 0; i < _contents.length; i++) { //查找直属子节点\n            _contents[i].parentNode === parentNode && (contents.push(_contents[i]));\n        }\n        $.trigger(targetBody, $.eventName('shown', name), {\n            tabNumber: Array.prototype.indexOf.call(contents, targetBody)\n        });\n        e.detail && e.detail.gesture.preventDefault(); //fixed hashchange\n    });\n\n})(mui, window, document, 'tab');\n/**\n * Toggles switch\n * @param {type} $\n * @param {type} window\n * @param {type} name\n * @returns {undefined}\n */\n(function($, window, name) {\n\n\tvar CLASS_SWITCH = 'mui-switch';\n\tvar CLASS_SWITCH_HANDLE = 'mui-switch-handle';\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_DRAGGING = 'mui-dragging';\n\n\tvar CLASS_DISABLED = 'mui-disabled';\n\n\tvar SELECTOR_SWITCH_HANDLE = '.' + CLASS_SWITCH_HANDLE;\n\n\tvar handle = function(event, target) {\n\t\tif (target.classList && target.classList.contains(CLASS_SWITCH)) {\n\t\t\treturn target;\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 100,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\n\n\tvar Toggle = function(element) {\n\t\tthis.element = element;\n\t\tthis.classList = this.element.classList;\n\t\tthis.handle = this.element.querySelector(SELECTOR_SWITCH_HANDLE);\n\t\tthis.init();\n\t\tthis.initEvent();\n\t};\n\tToggle.prototype.init = function() {\n\t\tthis.toggleWidth = this.element.offsetWidth;\n\t\tthis.handleWidth = this.handle.offsetWidth;\n\t\tthis.handleX = this.toggleWidth - this.handleWidth - 3;\n\t};\n\tToggle.prototype.initEvent = function() {\n\t\tthis.element.addEventListener($.EVENT_START, this);\n\t\tthis.element.addEventListener('drag', this);\n\t\tthis.element.addEventListener('swiperight', this);\n\t\tthis.element.addEventListener($.EVENT_END, this);\n\t\tthis.element.addEventListener($.EVENT_CANCEL, this);\n\n\t};\n\tToggle.prototype.handleEvent = function(e) {\n\t\tif (this.classList.contains(CLASS_DISABLED)) {\n\t\t\treturn;\n\t\t}\n\t\tswitch (e.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tthis.start(e);\n\t\t\t\tbreak;\n\t\t\tcase 'drag':\n\t\t\t\tthis.drag(e);\n\t\t\t\tbreak;\n\t\t\tcase 'swiperight':\n\t\t\t\tthis.swiperight();\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tthis.end(e);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\tToggle.prototype.start = function(e) {\n\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';\n\t\tthis.classList.add(CLASS_DRAGGING);\n\t\tif (this.toggleWidth === 0 || this.handleWidth === 0) { //当switch处于隐藏状态时，width为0，需要重新初始化\n\t\t\tthis.init();\n\t\t}\n\t};\n\tToggle.prototype.drag = function(e) {\n\t\tvar detail = e.detail;\n\t\tif (!this.isDragging) {\n\t\t\tif (detail.direction === 'left' || detail.direction === 'right') {\n\t\t\t\tthis.isDragging = true;\n\t\t\t\tthis.lastChanged = undefined;\n\t\t\t\tthis.initialState = this.classList.contains(CLASS_ACTIVE);\n\t\t\t}\n\t\t}\n\t\tif (this.isDragging) {\n\t\t\tthis.setTranslateX(detail.deltaX);\n\t\t\te.stopPropagation();\n\t\t\tdetail.gesture.preventDefault();\n\t\t}\n\t};\n\tToggle.prototype.swiperight = function(e) {\n\t\tif (this.isDragging) {\n\t\t\te.stopPropagation();\n\t\t}\n\t};\n\tToggle.prototype.end = function(e) {\n\t\tthis.classList.remove(CLASS_DRAGGING);\n\t\tif (this.isDragging) {\n\t\t\tthis.isDragging = false;\n\t\t\te.stopPropagation();\n\t\t\t$.trigger(this.element, 'toggle', {\n\t\t\t\tisActive: this.classList.contains(CLASS_ACTIVE)\n\t\t\t});\n\t\t} else {\n\t\t\tthis.toggle();\n\t\t}\n\t};\n\tToggle.prototype.toggle = function(animate) {\n\t\tvar classList = this.classList;\n\t\tif (animate === false) {\n\t\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '0s';\n\t\t} else {\n\t\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';\n\t\t}\n\t\tif (classList.contains(CLASS_ACTIVE)) {\n\t\t\tclassList.remove(CLASS_ACTIVE);\n\t\t\tthis.handle.style.webkitTransform = 'translate(0,0)';\n\t\t} else {\n\t\t\tclassList.add(CLASS_ACTIVE);\n\t\t\tthis.handle.style.webkitTransform = 'translate(' + this.handleX + 'px,0)';\n\t\t}\n\t\t$.trigger(this.element, 'toggle', {\n\t\t\tisActive: this.classList.contains(CLASS_ACTIVE)\n\t\t});\n\t};\n\tToggle.prototype.setTranslateX = $.animationFrame(function(x) {\n\t\tif (!this.isDragging) {\n\t\t\treturn;\n\t\t}\n\t\tvar isChanged = false;\n\t\tif ((this.initialState && -x > (this.handleX / 2)) || (!this.initialState && x > (this.handleX / 2))) {\n\t\t\tisChanged = true;\n\t\t}\n\t\tif (this.lastChanged !== isChanged) {\n\t\t\tif (isChanged) {\n\t\t\t\tthis.handle.style.webkitTransform = 'translate(' + (this.initialState ? 0 : this.handleX) + 'px,0)';\n\t\t\t\tthis.classList[this.initialState ? 'remove' : 'add'](CLASS_ACTIVE);\n\t\t\t} else {\n\t\t\t\tthis.handle.style.webkitTransform = 'translate(' + (this.initialState ? this.handleX : 0) + 'px,0)';\n\t\t\t\tthis.classList[this.initialState ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t}\n\t\t\tthis.lastChanged = isChanged;\n\t\t}\n\n\t});\n\n\t$.fn['switch'] = function(options) {\n\t\tvar switchApis = [];\n\t\tthis.each(function() {\n\t\t\tvar switchApi = null;\n\t\t\tvar id = this.getAttribute('data-switch');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = new Toggle(this);\n\t\t\t\tthis.setAttribute('data-switch', id);\n\t\t\t} else {\n\t\t\t\tswitchApi = $.data[id];\n\t\t\t}\n\t\t\tswitchApis.push(switchApi);\n\t\t});\n\t\treturn switchApis.length > 1 ? switchApis : switchApis[0];\n\t};\n\t$.ready(function() {\n\t\t$('.' + CLASS_SWITCH)['switch']();\n\t});\n})(mui, window, 'toggle');\n/**\n * Tableviews\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_SELECTED = 'mui-selected';\n\tvar CLASS_GRID_VIEW = 'mui-grid-view';\n\tvar CLASS_RADIO_VIEW = 'mui-table-view-radio';\n\tvar CLASS_TABLE_VIEW_CELL = 'mui-table-view-cell';\n\tvar CLASS_COLLAPSE_CONTENT = 'mui-collapse-content';\n\tvar CLASS_DISABLED = 'mui-disabled';\n\tvar CLASS_TOGGLE = 'mui-switch';\n\tvar CLASS_BTN = 'mui-btn';\n\n\tvar CLASS_SLIDER_HANDLE = 'mui-slider-handle';\n\tvar CLASS_SLIDER_LEFT = 'mui-slider-left';\n\tvar CLASS_SLIDER_RIGHT = 'mui-slider-right';\n\tvar CLASS_TRANSITIONING = 'mui-transitioning';\n\n\n\tvar SELECTOR_SLIDER_HANDLE = '.' + CLASS_SLIDER_HANDLE;\n\tvar SELECTOR_SLIDER_LEFT = '.' + CLASS_SLIDER_LEFT;\n\tvar SELECTOR_SLIDER_RIGHT = '.' + CLASS_SLIDER_RIGHT;\n\tvar SELECTOR_SELECTED = '.' + CLASS_SELECTED;\n\tvar SELECTOR_BUTTON = '.' + CLASS_BTN;\n\tvar overFactor = 0.8;\n\tvar cell, a;\n\n\tvar isMoved = isOpened = openedActions = progress = false;\n\tvar sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;\n\tvar timer = translateX = lastTranslateX = sliderActionLeftWidth = sliderActionRightWidth = 0;\n\n\n\n\tvar toggleActive = function(isActive) {\n\t\tif (isActive) {\n\t\t\tif (a) {\n\t\t\t\ta.classList.add(CLASS_ACTIVE);\n\t\t\t} else if (cell) {\n\t\t\t\tcell.classList.add(CLASS_ACTIVE);\n\t\t\t}\n\t\t} else {\n\t\t\ttimer && timer.cancel();\n\t\t\tif (a) {\n\t\t\t\ta.classList.remove(CLASS_ACTIVE);\n\t\t\t} else if (cell) {\n\t\t\t\tcell.classList.remove(CLASS_ACTIVE);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar updateTranslate = function() {\n\t\tif (translateX !== lastTranslateX) {\n\t\t\tif (buttonsRight && buttonsRight.length > 0) {\n\t\t\t\tprogress = translateX / sliderActionRightWidth;\n\t\t\t\tif (translateX < -sliderActionRightWidth) {\n\t\t\t\t\ttranslateX = -sliderActionRightWidth - Math.pow(-translateX - sliderActionRightWidth, overFactor);\n\t\t\t\t}\n\t\t\t\tfor (var i = 0, len = buttonsRight.length; i < len; i++) {\n\t\t\t\t\tvar buttonRight = buttonsRight[i];\n\t\t\t\t\tif (typeof buttonRight._buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonRight._buttonOffset = buttonRight.offsetLeft;\n\t\t\t\t\t}\n\t\t\t\t\tbuttonOffset = buttonRight._buttonOffset;\n\t\t\t\t\tsetTranslate(buttonRight, (translateX - buttonOffset * (1 + Math.max(progress, -1))));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (buttonsLeft && buttonsLeft.length > 0) {\n\t\t\t\tprogress = translateX / sliderActionLeftWidth;\n\t\t\t\tif (translateX > sliderActionLeftWidth) {\n\t\t\t\t\ttranslateX = sliderActionLeftWidth + Math.pow(translateX - sliderActionLeftWidth, overFactor);\n\t\t\t\t}\n\t\t\t\tfor (var i = 0, len = buttonsLeft.length; i < len; i++) {\n\t\t\t\t\tvar buttonLeft = buttonsLeft[i];\n\t\t\t\t\tif (typeof buttonLeft._buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t\tbuttonOffset = buttonLeft._buttonOffset;\n\t\t\t\t\tif (buttonsLeft.length > 1) {\n\t\t\t\t\t\tbuttonLeft.style.zIndex = buttonsLeft.length - i;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonLeft, (translateX + buttonOffset * (1 - Math.min(progress, 1))));\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTranslate(sliderHandle, translateX);\n\t\t\tlastTranslateX = translateX;\n\t\t}\n\t\tsliderRequestAnimationFrame = requestAnimationFrame(function() {\n\t\t\tupdateTranslate();\n\t\t});\n\t};\n\tvar setTranslate = function(element, x) {\n\t\tif (element) {\n\t\t\telement.style.webkitTransform = 'translate(' + x + 'px,0)';\n\t\t}\n\t};\n\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tif (cell) {\n\t\t\ttoggleActive(false);\n\t\t}\n\t\tcell = a = false;\n\t\tisMoved = isOpened = openedActions = false;\n\t\tvar target = event.target;\n\t\tvar isDisabled = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList) {\n\t\t\t\tvar classList = target.classList;\n\t\t\t\tif ((target.tagName === 'INPUT' && target.type !== 'radio' && target.type !== 'checkbox') || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN) || classList.contains(CLASS_DISABLED)) {\n\t\t\t\t\tisDisabled = true;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_COLLAPSE_CONTENT)) { //collapse content\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_TABLE_VIEW_CELL)) {\n\t\t\t\t\tcell = target;\n\t\t\t\t\t//TODO swipe to delete close\n\t\t\t\t\tvar selected = cell.parentNode.querySelector(SELECTOR_SELECTED);\n\t\t\t\t\tif (!cell.parentNode.classList.contains(CLASS_RADIO_VIEW) && selected && selected !== cell) {\n\t\t\t\t\t\t$.swipeoutClose(selected);\n\t\t\t\t\t\tcell = isDisabled = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!cell.parentNode.classList.contains(CLASS_GRID_VIEW)) {\n\t\t\t\t\t\tvar link = cell.querySelector('a');\n\t\t\t\t\t\tif (link && link.parentNode === cell) { //li>a\n\t\t\t\t\t\t\ta = link;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar handle = cell.querySelector(SELECTOR_SLIDER_HANDLE);\n\t\t\t\t\tif (handle) {\n\t\t\t\t\t\ttoggleEvents(cell);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tif (!isDisabled) {\n\t\t\t\t\t\tif (handle) {\n\t\t\t\t\t\t\tif (timer) {\n\t\t\t\t\t\t\t\ttimer.cancel();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimer = $.later(function() {\n\t\t\t\t\t\t\t\ttoggleActive(true);\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoggleActive(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\twindow.addEventListener($.EVENT_MOVE, function(event) {\n\t\ttoggleActive(false);\n\t});\n\n\tvar handleEvent = {\n\t\thandleEvent: function(event) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis.drag(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis.dragend(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'flick':\n\t\t\t\t\tthis.flick(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swiperight':\n\t\t\t\t\tthis.swiperight(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swipeleft':\n\t\t\t\t\tthis.swipeleft(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tdrag: function(event) {\n\t\t\tif (!cell) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isMoved) { //init\n\t\t\t\tsliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;\n\t\t\t\tsliderHandle = cell.querySelector(SELECTOR_SLIDER_HANDLE);\n\t\t\t\tif (sliderHandle) {\n\t\t\t\t\tsliderActionLeft = cell.querySelector(SELECTOR_SLIDER_LEFT);\n\t\t\t\t\tsliderActionRight = cell.querySelector(SELECTOR_SLIDER_RIGHT);\n\t\t\t\t\tif (sliderActionLeft) {\n\t\t\t\t\t\tsliderActionLeftWidth = sliderActionLeft.offsetWidth;\n\t\t\t\t\t\tbuttonsLeft = sliderActionLeft.querySelectorAll(SELECTOR_BUTTON);\n\t\t\t\t\t}\n\t\t\t\t\tif (sliderActionRight) {\n\t\t\t\t\t\tsliderActionRightWidth = sliderActionRight.offsetWidth;\n\t\t\t\t\t\tbuttonsRight = sliderActionRight.querySelectorAll(SELECTOR_BUTTON);\n\t\t\t\t\t}\n\t\t\t\t\tcell.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tisOpened = cell.classList.contains(CLASS_SELECTED);\n\t\t\t\t\tif (isOpened) {\n\t\t\t\t\t\topenedActions = cell.querySelector(SELECTOR_SLIDER_LEFT + SELECTOR_SELECTED) ? 'left' : 'right';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tvar angle = detail.angle;\n\t\t\tif (direction === 'left' && (angle > 150 || angle < -150)) {\n\t\t\t\tif (buttonsRight || (buttonsLeft && isOpened)) { //存在右侧按钮或存在左侧按钮且是已打开状态\n\t\t\t\t\tisMoved = true;\n\t\t\t\t}\n\t\t\t} else if (direction === 'right' && (angle > -30 && angle < 30)) {\n\t\t\t\tif (buttonsLeft || (buttonsRight && isOpened)) { //存在左侧按钮或存在右侧按钮且是已打开状态\n\t\t\t\t\tisMoved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\tvar translate = event.detail.deltaX;\n\t\t\t\tif (isOpened) {\n\t\t\t\t\tif (openedActions === 'right') {\n\t\t\t\t\t\ttranslate = translate - sliderActionRightWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttranslate = translate + sliderActionLeftWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ((translate > 0 && !buttonsLeft) || (translate < 0 && !buttonsRight)) {\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttranslate = 0;\n\t\t\t\t}\n\t\t\t\tif (translate < 0) {\n\t\t\t\t\tsliderDirection = 'toLeft';\n\t\t\t\t} else if (translate > 0) {\n\t\t\t\t\tsliderDirection = 'toRight';\n\t\t\t\t} else {\n\t\t\t\t\tif (!sliderDirection) {\n\t\t\t\t\t\tsliderDirection = 'toLeft';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!sliderRequestAnimationFrame) {\n\t\t\t\t\tupdateTranslate();\n\t\t\t\t}\n\t\t\t\ttranslateX = translate;\n\t\t\t}\n\t\t},\n\t\tflick: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tswipeleft: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tswiperight: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tdragend: function(event) {\n\t\t\tif (!isMoved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.stopPropagation();\n\t\t\tif (sliderRequestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(sliderRequestAnimationFrame);\n\t\t\t\tsliderRequestAnimationFrame = null;\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tisMoved = false;\n\t\t\tvar action = 'close';\n\t\t\tvar actionsWidth = sliderDirection === 'toLeft' ? sliderActionRightWidth : sliderActionLeftWidth;\n\t\t\tvar isToggle = detail.swipe || (Math.abs(translateX) > actionsWidth / 2);\n\t\t\tif (isToggle) {\n\t\t\t\tif (!isOpened) {\n\t\t\t\t\taction = 'open';\n\t\t\t\t} else if (detail.direction === 'left' && openedActions === 'right') {\n\t\t\t\t\taction = 'open';\n\t\t\t\t} else if (detail.direction === 'right' && openedActions === 'left') {\n\t\t\t\t\taction = 'open';\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tcell.classList.add(CLASS_TRANSITIONING);\n\t\t\tvar buttons;\n\t\t\tif (action === 'open') {\n\t\t\t\tvar newTranslate = sliderDirection === 'toLeft' ? -actionsWidth : actionsWidth;\n\t\t\t\tsetTranslate(sliderHandle, newTranslate);\n\t\t\t\tbuttons = sliderDirection === 'toLeft' ? buttonsRight : buttonsLeft;\n\t\t\t\tif (typeof buttons !== 'undefined') {\n\t\t\t\t\tvar button = null;\n\t\t\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\t\t\t\t\tsetTranslate(button, newTranslate);\n\t\t\t\t\t}\n\t\t\t\t\tbutton.parentNode.classList.add(CLASS_SELECTED);\n\t\t\t\t\tcell.classList.add(CLASS_SELECTED);\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\t$.trigger(cell, sliderDirection === 'toLeft' ? 'slideleft' : 'slideright');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsetTranslate(sliderHandle, 0);\n\t\t\t\tsliderActionLeft && sliderActionLeft.classList.remove(CLASS_SELECTED);\n\t\t\t\tsliderActionRight && sliderActionRight.classList.remove(CLASS_SELECTED);\n\t\t\t\tcell.classList.remove(CLASS_SELECTED);\n\t\t\t}\n\t\t\tvar buttonOffset;\n\t\t\tif (buttonsLeft && buttonsLeft.length > 0 && buttonsLeft !== buttons) {\n\t\t\t\tfor (var i = 0, len = buttonsLeft.length; i < len; i++) {\n\t\t\t\t\tvar buttonLeft = buttonsLeft[i];\n\t\t\t\t\tbuttonOffset = buttonLeft._buttonOffset;\n\t\t\t\t\tif (typeof buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonLeft, buttonOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (buttonsRight && buttonsRight.length > 0 && buttonsRight !== buttons) {\n\t\t\t\tfor (var i = 0, len = buttonsRight.length; i < len; i++) {\n\t\t\t\t\tvar buttonRight = buttonsRight[i];\n\t\t\t\t\tbuttonOffset = buttonRight._buttonOffset;\n\t\t\t\t\tif (typeof buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonRight._buttonOffset = buttonRight.offsetLeft;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonRight, -buttonOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction toggleEvents(element, isRemove) {\n\t\tvar method = !!isRemove ? 'removeEventListener' : 'addEventListener';\n\t\telement[method]('drag', handleEvent);\n\t\telement[method]('dragend', handleEvent);\n\t\telement[method]('swiperight', handleEvent);\n\t\telement[method]('swipeleft', handleEvent);\n\t\telement[method]('flick', handleEvent);\n\t};\n\t/**\n\t * 打开滑动菜单\n\t * @param {Object} el\n\t * @param {Object} direction\n\t */\n\t$.swipeoutOpen = function(el, direction) {\n\t\tif (!el) return;\n\t\tvar classList = el.classList;\n\t\tif (classList.contains(CLASS_SELECTED)) return;\n\t\tif (!direction) {\n\t\t\tif (el.querySelector(SELECTOR_SLIDER_RIGHT)) {\n\t\t\t\tdirection = 'right';\n\t\t\t} else {\n\t\t\t\tdirection = 'left';\n\t\t\t}\n\t\t}\n\t\tvar swipeoutAction = el.querySelector($.classSelector(\".slider-\" + direction));\n\t\tif (!swipeoutAction) return;\n\t\tswipeoutAction.classList.add(CLASS_SELECTED);\n\t\tclassList.add(CLASS_SELECTED);\n\t\tclassList.remove(CLASS_TRANSITIONING);\n\t\tvar buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);\n\t\tvar swipeoutWidth = swipeoutAction.offsetWidth;\n\t\tvar translate = (direction === 'right') ? -swipeoutWidth : swipeoutWidth;\n\t\tvar length = buttons.length;\n\t\tvar button;\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tbutton = buttons[i];\n\t\t\tif (direction === 'right') {\n\t\t\t\tsetTranslate(button, -button.offsetLeft);\n\t\t\t} else {\n\t\t\t\tsetTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));\n\t\t\t}\n\t\t}\n\t\tclassList.add(CLASS_TRANSITIONING);\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsetTranslate(buttons[i], translate);\n\t\t}\n\t\tsetTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), translate);\n\t};\n\t/**\n\t * 关闭滑动菜单\n\t * @param {Object} el\n\t */\n\t$.swipeoutClose = function(el) {\n\t\tif (!el) return;\n\t\tvar classList = el.classList;\n\t\tif (!classList.contains(CLASS_SELECTED)) return;\n\t\tvar direction = el.querySelector(SELECTOR_SLIDER_RIGHT + SELECTOR_SELECTED) ? 'right' : 'left';\n\t\tvar swipeoutAction = el.querySelector($.classSelector(\".slider-\" + direction));\n\t\tif (!swipeoutAction) return;\n\t\tswipeoutAction.classList.remove(CLASS_SELECTED);\n\t\tclassList.remove(CLASS_SELECTED);\n\t\tclassList.add(CLASS_TRANSITIONING);\n\t\tvar buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);\n\t\tvar swipeoutWidth = swipeoutAction.offsetWidth;\n\t\tvar length = buttons.length;\n\t\tvar button;\n\t\tsetTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), 0);\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tbutton = buttons[i];\n\t\t\tif (direction === 'right') {\n\t\t\t\tsetTranslate(button, (-button.offsetLeft));\n\t\t\t} else {\n\t\t\t\tsetTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));\n\t\t\t}\n\t\t}\n\t};\n\n\twindow.addEventListener($.EVENT_END, function(event) { //使用touchend来取消高亮，避免一次点击既不触发tap，doubletap，longtap的事件\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleActive(false);\n\t\tsliderHandle && toggleEvents(cell, true);\n\t});\n\twindow.addEventListener($.EVENT_CANCEL, function(event) { //使用touchcancel来取消高亮，避免一次点击既不触发tap，doubletap，longtap的事件\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleActive(false);\n\t\tsliderHandle && toggleEvents(cell, true);\n\t});\n\tvar radioOrCheckboxClick = function(event) {\n\t\tvar type = event.target && event.target.type || '';\n\t\tif (type === 'radio' || type === 'checkbox') {\n\t\t\treturn;\n\t\t}\n\t\tvar classList = cell.classList;\n\t\tif (classList.contains('mui-radio')) {\n\t\t\tvar input = cell.querySelector('input[type=radio]');\n\t\t\tif (input) {\n\t\t\t\t//\t\t\t\tinput.click();\n\t\t\t\tif (!input.disabled && !input.readOnly) {\n\t\t\t\t\tinput.checked = !input.checked;\n\t\t\t\t\t$.trigger(input, 'change');\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (classList.contains('mui-checkbox')) {\n\t\t\tvar input = cell.querySelector('input[type=checkbox]');\n\t\t\tif (input) {\n\t\t\t\t//\t\t\t\tinput.click();\n\t\t\t\tif (!input.disabled && !input.readOnly) {\n\t\t\t\t\tinput.checked = !input.checked;\n\t\t\t\t\t$.trigger(input, 'change');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t//fixed hashchange(android)\n\twindow.addEventListener($.EVENT_CLICK, function(e) {\n\t\tif (cell && cell.classList.contains('mui-collapse')) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\twindow.addEventListener('doubletap', function(event) {\n\t\tif (cell) {\n\t\t\tradioOrCheckboxClick(event);\n\t\t}\n\t});\n\tvar preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;\n\twindow.addEventListener('tap', function(event) {\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\tvar isExpand = false;\n\t\tvar classList = cell.classList;\n\t\tvar ul = cell.parentNode;\n\t\tif (ul && ul.classList.contains(CLASS_RADIO_VIEW)) {\n\t\t\tif (classList.contains(CLASS_SELECTED)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar selected = ul.querySelector('li' + SELECTOR_SELECTED);\n\t\t\tif (selected) {\n\t\t\t\tselected.classList.remove(CLASS_SELECTED);\n\t\t\t}\n\t\t\tclassList.add(CLASS_SELECTED);\n\t\t\t$.trigger(cell, 'selected', {\n\t\t\t\tel: cell\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (classList.contains('mui-collapse') && !cell.parentNode.classList.contains('mui-unfold')) {\n\t\t\tif (!preventDefaultException.test(event.target.tagName)) {\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t}\n\n\t\t\tif (!classList.contains(CLASS_ACTIVE)) { //展开时,需要收缩其他同类\n\t\t\t\tvar collapse = cell.parentNode.querySelector('.mui-collapse.mui-active');\n\t\t\t\tif (collapse) {\n\t\t\t\t\tcollapse.classList.remove(CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tisExpand = true;\n\t\t\t}\n\t\t\tclassList.toggle(CLASS_ACTIVE);\n\t\t\tif (isExpand) {\n\t\t\t\t//触发展开事件\n\t\t\t\t$.trigger(cell, 'expand');\n\n\t\t\t\t//scroll\n\t\t\t\t//暂不滚动\n\t\t\t\t// var offsetTop = $.offset(cell).top;\n\t\t\t\t// var scrollTop = document.body.scrollTop;\n\t\t\t\t// var height = window.innerHeight;\n\t\t\t\t// var offsetHeight = cell.offsetHeight;\n\t\t\t\t// var cellHeight = (offsetTop - scrollTop + offsetHeight);\n\t\t\t\t// if (offsetHeight > height) {\n\t\t\t\t// \t$.scrollTo(offsetTop, 300);\n\t\t\t\t// } else if (cellHeight > height) {\n\t\t\t\t// \t$.scrollTo(cellHeight - height + scrollTop, 300);\n\t\t\t\t// }\n\t\t\t}\n\t\t} else {\n\t\t\tradioOrCheckboxClick(event);\n\t\t}\n\t});\n})(mui, window, document);\n(function($, window) {\n\t/**\n\t * 警告消息框\n\t */\n\t$.alert = function(message, title, btnValue, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tif (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnValue = '确定';\n\t\t\t\t} else if (typeof btnValue === 'function') {\n\t\t\t\t\tcallback = btnValue;\n\t\t\t\t\tbtnValue = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.alert(message, callback, title, btnValue);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//TODO H5版本\n\t\t\twindow.alert(message);\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\t/**\n\t * 确认消息框\n\t */\n\t$.confirm = function(message, title, btnArray, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tif (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof btnArray === 'function') {\n\t\t\t\t\tcallback = btnArray;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.confirm(message, callback, title, btnArray);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//H5版本，0为确认，1为取消\n\t\t\tif (window.confirm(message)) {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 0\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\t/**\n\t * 输入对话框\n\t */\n\t$.prompt = function(text, defaultText, title, btnArray, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\n\t\t\t\tif (typeof defaultText === 'function') {\n\t\t\t\t\tcallback = defaultText;\n\t\t\t\t\tdefaultText = null;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof btnArray === 'function') {\n\t\t\t\t\tcallback = btnArray;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.prompt(text, callback, title, defaultText, btnArray);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//H5版本(确认index为0，取消index为1)\n\t\t\tvar result = window.prompt(text);\n\t\t\tif (result) {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tvalue: result\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 1,\n\t\t\t\t\tvalue: ''\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\tvar CLASS_ACTIVE = 'mui-active';\n\t/**\n\t * 自动消失提示框\n\t */\n\t$.toast = function(message,options) {\n\t\tvar durations = {\n\t\t    'long': 3500,\n\t\t    'short': 2000\n\t\t};\n\n\t\t//计算显示时间\n\t\t options = $.extend({\n\t        duration: 'short'\n\t    }, options || {});\n\n\n\t\tif ($.os.plus && options.type !== 'div') {\n\t\t\t//默认显示在底部；\n\t\t\t$.plusReady(function() {\n\t\t\t\tplus.nativeUI.toast(message, {\n\t\t\t\t\tverticalAlign: 'bottom',\n\t\t\t\t\tduration:options.duration\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tif (typeof options.duration === 'number') {\n\t\t        duration = options.duration>0 ? options.duration:durations['short'];\n\t\t    } else {\n\t\t        duration = durations[options.duration];\n\t\t    }\n\t\t    if (!duration) {\n\t\t        duration = durations['short'];\n\t\t    }\n\t\t\tvar toast = document.createElement('div');\n\t\t\ttoast.classList.add('mui-toast-container');\n\t\t\ttoast.innerHTML = '<div class=\"' + 'mui-toast-message' + '\">' + message + '</div>';\n\t\t\ttoast.addEventListener('webkitTransitionEnd', function() {\n\t\t\t\tif (!toast.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\ttoast.parentNode.removeChild(toast);\n\t\t\t\t\ttoast = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t//点击则自动消失\n\t\t\ttoast.addEventListener('click', function() {\n\t\t        toast.parentNode.removeChild(toast);\n\t\t        toast = null;\n\t\t    });\n\t\t\tdocument.body.appendChild(toast);\n\t\t\ttoast.offsetHeight;\n\t\t\ttoast.classList.add(CLASS_ACTIVE);\n\t\t\tsetTimeout(function() {\n\t\t\t\ttoast && toast.classList.remove(CLASS_ACTIVE);\n\t\t\t}, duration);\n\t\t\t\n\t\t\treturn {\n\t\t        isVisible: function() {return !!toast;}\n\t\t    }\n\t\t}   \n\t};\n\n})(mui, window);\n/**\n * Popup(alert,confirm,prompt)  \n * @param {Object} $\n * @param {Object} window\n * @param {Object} document\n */\n(function($, window, document) {\n    var CLASS_POPUP = 'mui-popup';\n    var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop';\n    var CLASS_POPUP_IN = 'mui-popup-in';\n    var CLASS_POPUP_OUT = 'mui-popup-out';\n    var CLASS_POPUP_INNER = 'mui-popup-inner';\n    var CLASS_POPUP_TITLE = 'mui-popup-title';\n    var CLASS_POPUP_TEXT = 'mui-popup-text';\n    var CLASS_POPUP_INPUT = 'mui-popup-input';\n    var CLASS_POPUP_BUTTONS = 'mui-popup-buttons';\n    var CLASS_POPUP_BUTTON = 'mui-popup-button';\n    var CLASS_POPUP_BUTTON_BOLD = 'mui-popup-button-bold';\n    var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop';\n    var CLASS_ACTIVE = 'mui-active';\n\n    var popupStack = [];\n    var backdrop = (function() {\n        var element = document.createElement('div');\n        element.classList.add(CLASS_POPUP_BACKDROP);\n        element.addEventListener($.EVENT_MOVE, $.preventDefault);\n        element.addEventListener('webkitTransitionEnd', function() {\n            if (!this.classList.contains(CLASS_ACTIVE)) {\n                element.parentNode && element.parentNode.removeChild(element);\n            }\n        });\n        return element;\n    }());\n\n    var createInput = function(placeholder) {\n        return '<div class=\"' + CLASS_POPUP_INPUT + '\"><input type=\"text\" autofocus placeholder=\"' + (placeholder || '') + '\"/></div>';\n    };\n    var createInner = function(message, title, extra) {\n        return '<div class=\"' + CLASS_POPUP_INNER + '\"><div class=\"' + CLASS_POPUP_TITLE + '\">' + title + '</div><div class=\"' + CLASS_POPUP_TEXT + '\">' + message.replace(/\\r\\n/g, \"<br/>\").replace(/\\n/g, \"<br/>\") + '</div>' + (extra || '') + '</div>';\n    };\n    var createButtons = function(btnArray) {\n        var length = btnArray.length;\n        var btns = [];\n        for (var i = 0; i < length; i++) {\n            btns.push('<span class=\"' + CLASS_POPUP_BUTTON + (i === length - 1 ? (' ' + CLASS_POPUP_BUTTON_BOLD) : '') + '\">' + btnArray[i] + '</span>');\n        }\n        return '<div class=\"' + CLASS_POPUP_BUTTONS + '\">' + btns.join('') + '</div>';\n    };\n\n    var createPopup = function(html, callback) {\n        var popupElement = document.createElement('div');\n        popupElement.className = CLASS_POPUP;\n        popupElement.innerHTML = html;\n        var removePopupElement = function() {\n            popupElement.parentNode && popupElement.parentNode.removeChild(popupElement);\n            popupElement = null;\n        };\n        popupElement.addEventListener($.EVENT_MOVE, $.preventDefault);\n        popupElement.addEventListener('webkitTransitionEnd', function(e) {\n            if (popupElement && e.target === popupElement && popupElement.classList.contains(CLASS_POPUP_OUT)) {\n                removePopupElement();\n            }\n        });\n        popupElement.style.display = 'block';\n        document.body.appendChild(popupElement);\n        popupElement.offsetHeight;\n        popupElement.classList.add(CLASS_POPUP_IN);\n\n        if (!backdrop.classList.contains(CLASS_ACTIVE)) {\n            backdrop.style.display = 'block';\n            document.body.appendChild(backdrop);\n            backdrop.offsetHeight;\n            backdrop.classList.add(CLASS_ACTIVE);\n        }\n        var btns = $.qsa('.' + CLASS_POPUP_BUTTON, popupElement);\n        var input = popupElement.querySelector('.' + CLASS_POPUP_INPUT + ' input');\n        var popup = {\n            element: popupElement,\n            close: function(index, animate) {\n                if (popupElement) {\n                    var result = callback && callback({\n                        index: index || 0,\n                        value: input && input.value || ''\n                    });\n                    if (result === false) { //返回false则不关闭当前popup\n                        return;\n                    }\n                    if (animate !== false) {\n                        popupElement.classList.remove(CLASS_POPUP_IN);\n                        popupElement.classList.add(CLASS_POPUP_OUT);\n                    } else {\n                        removePopupElement();\n                    }\n                    popupStack.pop();\n                    //如果还有其他popup，则不remove backdrop\n                    if (popupStack.length) {\n                        popupStack[popupStack.length - 1]['show'](animate);\n                    } else {\n                        backdrop.classList.remove(CLASS_ACTIVE);\n                    }\n                }\n            }\n        };\n        var handleEvent = function(e) {\n            popup.close(btns.indexOf(e.target));\n        };\n        $(popupElement).on('tap', '.' + CLASS_POPUP_BUTTON, handleEvent);\n        if (popupStack.length) {\n            popupStack[popupStack.length - 1]['hide']();\n        }\n        popupStack.push({\n            close: popup.close,\n            show: function(animate) {\n                popupElement.style.display = 'block';\n                popupElement.offsetHeight;\n                popupElement.classList.add(CLASS_POPUP_IN);\n            },\n            hide: function() {\n                popupElement.style.display = 'none';\n                popupElement.classList.remove(CLASS_POPUP_IN);\n            }\n        });\n        return popup;\n    };\n    var createAlert = function(message, title, btnValue, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof title === 'function') {\n                callback = title;\n                type = btnValue;\n                title = null;\n                btnValue = null;\n            } else if (typeof btnValue === 'function') {\n                type = callback;\n                callback = btnValue;\n                btnValue = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示') + createButtons([btnValue || '确定']), callback);\n        }\n        return plus.nativeUI.alert(message, callback, title || '提示', btnValue || '确定');\n    };\n    var createConfirm = function(message, title, btnArray, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof title === 'function') {\n                callback = title;\n                type = btnArray;\n                title = null;\n                btnArray = null;\n            } else if (typeof btnArray === 'function') {\n                type = callback;\n                callback = btnArray;\n                btnArray = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示') + createButtons(btnArray || ['取消', '确认']), callback);\n        }\n        return plus.nativeUI.confirm(message, callback, title, btnArray || ['取消', '确认']);\n    };\n    var createPrompt = function(message, placeholder, title, btnArray, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof placeholder === 'function') {\n                callback = placeholder;\n                type = title;\n                placeholder = null;\n                title = null;\n                btnArray = null;\n            } else if (typeof title === 'function') {\n                callback = title;\n                type = btnArray;\n                title = null;\n                btnArray = null;\n            } else if (typeof btnArray === 'function') {\n                type = callback;\n                callback = btnArray;\n                btnArray = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示', createInput(placeholder)) + createButtons(btnArray || ['取消', '确认']), callback);\n        }\n        return plus.nativeUI.prompt(message, callback, title || '提示', placeholder, btnArray || ['取消', '确认']);\n    };\n    var closePopup = function() {\n        if (popupStack.length) {\n            popupStack[popupStack.length - 1]['close']();\n            return true;\n        } else {\n            return false;\n        }\n    };\n    var closePopups = function() {\n        while (popupStack.length) {\n            popupStack[popupStack.length - 1]['close']();\n        }\n    };\n\n    $.closePopup = closePopup;\n    $.closePopups = closePopups;\n    $.alert = createAlert;\n    $.confirm = createConfirm;\n    $.prompt = createPrompt;\n})(mui, window, document);\n(function($, document) {\n\tvar CLASS_PROGRESSBAR = 'mui-progressbar';\n\tvar CLASS_PROGRESSBAR_IN = 'mui-progressbar-in';\n\tvar CLASS_PROGRESSBAR_OUT = 'mui-progressbar-out';\n\tvar CLASS_PROGRESSBAR_INFINITE = 'mui-progressbar-infinite';\n\n\tvar SELECTOR_PROGRESSBAR = '.mui-progressbar';\n\n\tvar _findProgressbar = function(container) {\n\t\tcontainer = $(container || 'body');\n\t\tif (container.length === 0) return;\n\t\tcontainer = container[0];\n\t\tif (container.classList.contains(CLASS_PROGRESSBAR)) {\n\t\t\treturn container;\n\t\t}\n\t\tvar progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR);\n\t\tif (progressbars) {\n\t\t\tfor (var i = 0, len = progressbars.length; i < len; i++) {\n\t\t\t\tvar progressbar = progressbars[i];\n\t\t\t\tif (progressbar.parentNode === container) {\n\t\t\t\t\treturn progressbar;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * 创建并显示进度条 \n\t * @param {Object} container  可选，默认body，支持selector,DOM Node,mui wrapper\n\t * @param {Object} progress 可选，undefined表示循环，数字表示具体进度\n\t * @param {Object} color 可选，指定颜色样式(目前暂未提供实际样式，可暂时不暴露此参数)\n\t */\n\tvar showProgressbar = function(container, progress, color) {\n\t\tif (typeof container === 'number') {\n\t\t\tcolor = progress;\n\t\t\tprogress = container;\n\t\t\tcontainer = 'body';\n\t\t}\n\t\tcontainer = $(container || 'body');\n\t\tif (container.length === 0) return;\n\t\tcontainer = container[0];\n\t\tvar progressbar;\n\t\tif (container.classList.contains(CLASS_PROGRESSBAR)) {\n\t\t\tprogressbar = container;\n\t\t} else {\n\t\t\tvar progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR + ':not(.' + CLASS_PROGRESSBAR_OUT + ')');\n\t\t\tif (progressbars) {\n\t\t\t\tfor (var i = 0, len = progressbars.length; i < len; i++) {\n\t\t\t\t\tvar _progressbar = progressbars[i];\n\t\t\t\t\tif (_progressbar.parentNode === container) {\n\t\t\t\t\t\tprogressbar = _progressbar;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!progressbar) {\n\t\t\t\tprogressbar = document.createElement('span');\n\t\t\t\tprogressbar.className = CLASS_PROGRESSBAR + ' ' + CLASS_PROGRESSBAR_IN + (typeof progress !== 'undefined' ? '' : (' ' + CLASS_PROGRESSBAR_INFINITE)) + (color ? (' ' + CLASS_PROGRESSBAR + '-' + color) : '');\n\t\t\t\tif (typeof progress !== 'undefined') {\n\t\t\t\t\tprogressbar.innerHTML = '<span></span>';\n\t\t\t\t}\n\t\t\t\tcontainer.appendChild(progressbar);\n\t\t\t} else {\n\t\t\t\tprogressbar.classList.add(CLASS_PROGRESSBAR_IN);\n\t\t\t}\n\t\t}\n\t\tif (progress) setProgressbar(container, progress);\n\t\treturn progressbar;\n\t};\n\t/**\n\t * 关闭进度条 \n\t * @param {Object} container 可选，默认body，支持selector,DOM Node,mui wrapper\n\t */\n\tvar hideProgressbar = function(container) {\n\t\tvar progressbar = _findProgressbar(container);\n\t\tif (!progressbar) {\n\t\t\treturn;\n\t\t}\n\t\tvar classList = progressbar.classList;\n\t\tif (!classList.contains(CLASS_PROGRESSBAR_IN) || classList.contains(CLASS_PROGRESSBAR_OUT)) {\n\t\t\treturn;\n\t\t}\n\t\tclassList.remove(CLASS_PROGRESSBAR_IN);\n\t\tclassList.add(CLASS_PROGRESSBAR_OUT);\n\t\tprogressbar.addEventListener('webkitAnimationEnd', function() {\n\t\t\tprogressbar.parentNode && progressbar.parentNode.removeChild(progressbar);\n\t\t\tprogressbar = null;\n\t\t});\n\t\treturn;\n\t};\n\t/**\n\t * 设置指定进度条进度 \n\t * @param {Object} container  可选，默认body，支持selector,DOM Node,mui wrapper\n\t * @param {Object} progress 可选，默认0 取值范围[0-100]\n\t * @param {Object} speed 进度条动画时间\n\t */\n\tvar setProgressbar = function(container, progress, speed) {\n\t\tif (typeof container === 'number') {\n\t\t\tspeed = progress;\n\t\t\tprogress = container;\n\t\t\tcontainer = false;\n\t\t}\n\t\tvar progressbar = _findProgressbar(container);\n\t\tif (!progressbar || progressbar.classList.contains(CLASS_PROGRESSBAR_INFINITE)) {\n\t\t\treturn;\n\t\t}\n\t\tif (progress) progress = Math.min(Math.max(progress, 0), 100);\n\t\tprogressbar.offsetHeight;\n\t\tvar span = progressbar.querySelector('span');\n\t\tif (span) {\n\t\t\tvar style = span.style;\n\t\t\tstyle.webkitTransform = 'translate3d(' + (-100 + progress) + '%,0,0)';\n\t\t\tif (typeof speed !== 'undefined') {\n\t\t\t\tstyle.webkitTransitionDuration = speed + 'ms';\n\t\t\t} else {\n\t\t\t\tstyle.webkitTransitionDuration = '';\n\t\t\t}\n\t\t}\n\t\treturn progressbar;\n\t};\n\t$.fn.progressbar = function(options) {\n\t\tvar progressbarApis = [];\n\t\toptions = options || {};\n\t\tthis.each(function() {\n\t\t\tvar self = this;\n\t\t\tvar progressbarApi = self.mui_plugin_progressbar;\n\t\t\tif (!progressbarApi) {\n\t\t\t\tself.mui_plugin_progressbar = progressbarApi = {\n\t\t\t\t\toptions: options,\n\t\t\t\t\tsetOptions: function(options) {\n\t\t\t\t\t\tthis.options = options;\n\t\t\t\t\t},\n\t\t\t\t\tshow: function() {\n\t\t\t\t\t\treturn showProgressbar(self, this.options.progress, this.options.color);\n\t\t\t\t\t},\n\t\t\t\t\tsetProgress: function(progress) {\n\t\t\t\t\t\treturn setProgressbar(self, progress);\n\t\t\t\t\t},\n\t\t\t\t\thide: function() {\n\t\t\t\t\t\treturn hideProgressbar(self);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else if (options) {\n\t\t\t\tprogressbarApi.setOptions(options);\n\t\t\t}\n\t\t\tprogressbarApis.push(progressbarApi);\n\t\t});\n\t\treturn progressbarApis.length === 1 ? progressbarApis[0] : progressbarApis;\n\t};\n\t//\t$.setProgressbar = setProgressbar;\n\t//\t$.showProgressbar = showProgressbar;\n\t//\t$.hideProgressbar = hideProgressbar;\n})(mui, document);\n/**\n * Input(TODO resize)\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n\tvar CLASS_ICON = 'mui-icon';\n\tvar CLASS_ICON_CLEAR = 'mui-icon-clear';\n\tvar CLASS_ICON_SPEECH = 'mui-icon-speech';\n\tvar CLASS_ICON_SEARCH = 'mui-icon-search';\n\tvar CLASS_ICON_PASSWORD = 'mui-icon-eye';\n\tvar CLASS_INPUT_ROW = 'mui-input-row';\n\tvar CLASS_PLACEHOLDER = 'mui-placeholder';\n\tvar CLASS_TOOLTIP = 'mui-tooltip';\n\tvar CLASS_HIDDEN = 'mui-hidden';\n\tvar CLASS_FOCUSIN = 'mui-focusin';\n\tvar SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR;\n\tvar SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH;\n\tvar SELECTOR_ICON_PASSWORD = '.' + CLASS_ICON_PASSWORD;\n\tvar SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER;\n\tvar SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP;\n\n\tvar findRow = function(target) {\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList && target.classList.contains(CLASS_INPUT_ROW)) {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\tvar Input = function(element, options) {\n\t\tthis.element = element;\n\t\tthis.options = options || {\n\t\t\tactions: 'clear'\n\t\t};\n\t\tif (~this.options.actions.indexOf('slider')) { //slider\n\t\t\tthis.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN;\n\t\t\tthis.sliderActionSelector = SELECTOR_TOOLTIP;\n\t\t} else { //clear,speech,search\n\t\t\tif (~this.options.actions.indexOf('clear')) {\n\t\t\t\tthis.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + ' ' + CLASS_HIDDEN;\n\t\t\t\tthis.clearActionSelector = SELECTOR_ICON_CLOSE;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('speech')) { //only for 5+\n\t\t\t\tthis.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH;\n\t\t\t\tthis.speechActionSelector = SELECTOR_ICON_SPEECH;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('search')) {\n\t\t\t\tthis.searchActionClass = CLASS_PLACEHOLDER;\n\t\t\t\tthis.searchActionSelector = SELECTOR_PLACEHOLDER;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('password')) {\n\t\t\t\tthis.passwordActionClass = CLASS_ICON + ' ' + CLASS_ICON_PASSWORD;\n\t\t\t\tthis.passwordActionSelector = SELECTOR_ICON_PASSWORD;\n\t\t\t}\n\t\t}\n\t\tthis.init();\n\t};\n\tInput.prototype.init = function() {\n\t\tthis.initAction();\n\t\tthis.initElementEvent();\n\t};\n\tInput.prototype.initAction = function() {\n\t\tvar self = this;\n\n\t\tvar row = self.element.parentNode;\n\t\tif (row) {\n\t\t\tif (self.sliderActionClass) {\n\t\t\t\tself.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector);\n\t\t\t} else {\n\t\t\t\tif (self.searchActionClass) {\n\t\t\t\t\tself.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector);\n\t\t\t\t\tself.searchAction.addEventListener('tap', function(e) {\n\t\t\t\t\t\t$.focus(self.element);\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.speechActionClass) {\n\t\t\t\t\tself.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector);\n\t\t\t\t\tself.speechAction.addEventListener('click', $.stopPropagation);\n\t\t\t\t\tself.speechAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.speechActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.clearActionClass) {\n\t\t\t\t\tself.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector);\n\t\t\t\t\tself.clearAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.clearActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.passwordActionClass) {\n\t\t\t\t\tself.passwordAction = self.createAction(row, self.passwordActionClass, self.passwordActionSelector);\n\t\t\t\t\tself.passwordAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.passwordActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tInput.prototype.createAction = function(row, actionClass, actionSelector) {\n\t\tvar action = row.querySelector(actionSelector);\n\t\tif (!action) {\n\t\t\tvar action = document.createElement('span');\n\t\t\taction.className = actionClass;\n\t\t\tif (actionClass === this.searchActionClass) {\n\t\t\t\taction.innerHTML = '<span class=\"' + CLASS_ICON + ' ' + CLASS_ICON_SEARCH + '\"></span><span>' + this.element.getAttribute('placeholder') + '</span>';\n\t\t\t\tthis.element.setAttribute('placeholder', '');\n\t\t\t\tif (this.element.value.trim()) {\n\t\t\t\t\trow.classList.add('mui-active');\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.insertBefore(action, this.element.nextSibling);\n\t\t}\n\t\treturn action;\n\t};\n\tInput.prototype.initElementEvent = function() {\n\t\tvar element = this.element;\n\n\t\tif (this.sliderActionClass) {\n\t\t\tvar tooltip = this.sliderAction;\n\t\t\tvar timer = null;\n\t\t\tvar showTip = function() { //每次重新计算是因为控件可能被隐藏，初始化时计算是不正确的\n\t\t\t\ttooltip.classList.remove(CLASS_HIDDEN);\n\t\t\t\tvar offsetLeft = element.offsetLeft;\n\t\t\t\tvar width = element.offsetWidth - 28;\n\t\t\t\tvar tooltipWidth = tooltip.offsetWidth;\n\t\t\t\tvar distince = Math.abs(element.max - element.min);\n\t\t\t\tvar scaleWidth = (width / distince) * Math.abs(element.value - element.min);\n\t\t\t\ttooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px';\n\t\t\t\ttooltip.innerText = element.value;\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\ttooltip.classList.add(CLASS_HIDDEN);\n\t\t\t\t}, 1000);\n\t\t\t};\n\t\t\telement.addEventListener('input', showTip);\n\t\t\telement.addEventListener('tap', showTip);\n\t\t\telement.addEventListener($.EVENT_MOVE, function(e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t} else {\n\t\t\tif (this.clearActionClass) {\n\t\t\t\tvar action = this.clearAction;\n\t\t\t\tif (!action) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.each(['keyup', 'change', 'input', 'focus', 'cut', 'paste'], function(index, type) {\n\t\t\t\t\t(function(type) {\n\t\t\t\t\t\telement.addEventListener(type, function() {\n\t\t\t\t\t\t\taction.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN);\n\t\t\t\t\t\t});\n\t\t\t\t\t})(type);\n\t\t\t\t});\n\t\t\t\telement.addEventListener('blur', function() {\n\t\t\t\t\taction.classList.add(CLASS_HIDDEN);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.searchActionClass) {\n\t\t\t\telement.addEventListener('focus', function() {\n\t\t\t\t\telement.parentNode.classList.add('mui-active');\n\t\t\t\t});\n\t\t\t\telement.addEventListener('blur', function() {\n\t\t\t\t\tif (!element.value.trim()) {\n\t\t\t\t\t\telement.parentNode.classList.remove('mui-active');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\tInput.prototype.setPlaceholder = function(text) {\n\t\tif (this.searchActionClass) {\n\t\t\tvar placeholder = this.element.parentNode.querySelector(SELECTOR_PLACEHOLDER);\n\t\t\tplaceholder && (placeholder.getElementsByTagName('span')[1].innerText = text);\n\t\t} else {\n\t\t\tthis.element.setAttribute('placeholder', text);\n\t\t}\n\t};\n\tInput.prototype.passwordActionClick = function(event) {\n\t\tif (this.element.type === 'text') {\n\t\t\tthis.element.type = 'password';\n\t\t} else {\n\t\t\tthis.element.type = 'text';\n\t\t}\n\t\tthis.passwordAction.classList.toggle('mui-active');\n\t\tevent.preventDefault();\n\t};\n\tInput.prototype.clearActionClick = function(event) {\n\t\tvar self = this;\n\t\tself.element.value = '';\n\t\t$.focus(self.element);\n\t\tself.clearAction.classList.add(CLASS_HIDDEN);\n\t\tevent.preventDefault();\n\t};\n\tInput.prototype.speechActionClick = function(event) {\n\t\tif (window.plus) {\n\t\t\tvar self = this;\n\t\t\tvar oldValue = self.element.value;\n\t\t\tself.element.value = '';\n\t\t\tdocument.body.classList.add(CLASS_FOCUSIN);\n\t\t\tplus.speech.startRecognize({\n\t\t\t\tengine: 'iFly'\n\t\t\t}, function(s) {\n\t\t\t\tself.element.value += s;\n\t\t\t\t$.focus(self.element);\n\t\t\t\tplus.speech.stopRecognize();\n\t\t\t\t$.trigger(self.element, 'recognized', {\n\t\t\t\t\tvalue: self.element.value\n\t\t\t\t});\n\t\t\t\tif (oldValue !== self.element.value) {\n\t\t\t\t\t$.trigger(self.element, 'change');\n\t\t\t\t\t$.trigger(self.element, 'input');\n\t\t\t\t}\n\t\t\t\t// document.body.classList.remove(CLASS_FOCUSIN);\n\t\t\t}, function(e) {\n\t\t\t\tdocument.body.classList.remove(CLASS_FOCUSIN);\n\t\t\t});\n\t\t} else {\n\t\t\talert('only for 5+');\n\t\t}\n\t\tevent.preventDefault();\n\t};\n\t$.fn.input = function(options) {\n\t\tvar inputApis = [];\n\t\tthis.each(function() {\n\t\t\tvar inputApi = null;\n\t\t\tvar actions = [];\n\t\t\tvar row = findRow(this.parentNode);\n\t\t\tif (this.type === 'range' && row.classList.contains('mui-input-range')) {\n\t\t\t\tactions.push('slider');\n\t\t\t} else {\n\t\t\t\tvar classList = this.classList;\n\t\t\t\tif (classList.contains('mui-input-clear')) {\n\t\t\t\t\tactions.push('clear');\n\t\t\t\t}\n\t\t\t\tif (!($.os.android && $.os.stream) && classList.contains('mui-input-speech')) {\n\t\t\t\t\tactions.push('speech');\n\t\t\t\t}\n\t\t\t\tif (classList.contains('mui-input-password')) {\n\t\t\t\t\tactions.push('password');\n\t\t\t\t}\n\t\t\t\tif (this.type === 'search' && row.classList.contains('mui-search')) {\n\t\t\t\t\tactions.push('search');\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar id = this.getAttribute('data-input-' + actions[0]);\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\tinputApi = $.data[id] = new Input(this, {\n\t\t\t\t\tactions: actions.join(',')\n\t\t\t\t});\n\t\t\t\tfor (var i = 0, len = actions.length; i < len; i++) {\n\t\t\t\t\tthis.setAttribute('data-input-' + actions[i], id);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinputApi = $.data[id];\n\t\t\t}\n\t\t\tinputApis.push(inputApi);\n\t\t});\n\t\treturn inputApis.length === 1 ? inputApis[0] : inputApis;\n\t};\n\t$.ready(function() {\n\t\t$('.mui-input-row input').input();\n\t});\n})(mui, window, document);\n(function($, window) {\n    var CLASS_ACTIVE = 'mui-active';\n    var rgbaRegex = /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n    var getColor = function(colorStr) {\n        var matches = colorStr.match(rgbaRegex);\n        if (matches && matches.length === 5) {\n            return [\n                matches[1],\n                matches[2],\n                matches[3],\n                matches[4]\n            ];\n        }\n        return [];\n    };\n    var Transparent = function(element, options) {\n        this.element = element;\n        this.options = $.extend({\n            top: 0, //距离顶部高度(到达该高度即触发)\n            offset: 150, //滚动透明距离\n            duration: 16, //过渡时间\n            scrollby: window//监听滚动距离容器\n        }, options || {});\n\n        this.scrollByElem = this.options.scrollby || window;\n        if (!this.scrollByElem) {\n            throw new Error(\"监听滚动的元素不存在\");\n        }\n        this.isNativeScroll = false;\n        if (this.scrollByElem === window) {\n            this.isNativeScroll = true;\n        } else if (!~this.scrollByElem.className.indexOf('mui-scroll-wrapper')) {\n            this.isNativeScroll = true;\n        }\n\n        this._style = this.element.style;\n        this._bgColor = this._style.backgroundColor;\n        var color = getColor(mui.getStyles(this.element, 'backgroundColor'));\n        if (color.length) {\n            this._R = color[0];\n            this._G = color[1];\n            this._B = color[2];\n            this._A = parseFloat(color[3]);\n            this.lastOpacity = this._A;\n            this._bufferFn = $.buffer(this.handleScroll, this.options.duration, this);\n            this.initEvent();\n        } else {\n            throw new Error(\"元素背景颜色必须为RGBA\");\n        }\n    };\n\n    Transparent.prototype.initEvent = function() {\n        this.scrollByElem.addEventListener('scroll', this._bufferFn);\n        if (this.isNativeScroll) { //原生scroll\n            this.scrollByElem.addEventListener($.EVENT_MOVE, this._bufferFn);\n        }\n    }\n    Transparent.prototype.handleScroll = function(e) {\n        var y = window.scrollY;\n        if (!this.isNativeScroll && e && e.detail) {\n            y = -e.detail.y;\n        }\n        var opacity = (y - this.options.top) / this.options.offset + this._A;\n        opacity = Math.min(Math.max(this._A, opacity), 1);\n        this._style.backgroundColor = 'rgba(' + this._R + ',' + this._G + ',' + this._B + ',' + opacity + ')';\n        if (opacity > this._A) {\n            this.element.classList.add(CLASS_ACTIVE);\n        } else {\n            this.element.classList.remove(CLASS_ACTIVE);\n        }\n        if (this.lastOpacity !== opacity) {\n            $.trigger(this.element, 'alpha', {\n                alpha: opacity\n            });\n            this.lastOpacity = opacity;\n        }\n    };\n    Transparent.prototype.destory = function() {\n        this.scrollByElem.removeEventListener('scroll', this._bufferFn);\n        this.scrollByElem.removeEventListener($.EVENT_MOVE, this._bufferFn);\n        this.element.style.backgroundColor = this._bgColor;\n        this.element.mui_plugin_transparent = null;\n    };\n    $.fn.transparent = function(options) {\n        options = options || {};\n        var transparentApis = [];\n        this.each(function() {\n            var transparentApi = this.mui_plugin_transparent;\n            if (!transparentApi) {\n                var top = this.getAttribute('data-top');\n                var offset = this.getAttribute('data-offset');\n                var duration = this.getAttribute('data-duration');\n                var scrollby = this.getAttribute('data-scrollby');\n                if (top !== null && typeof options.top === 'undefined') {\n                    options.top = top;\n                }\n                if (offset !== null && typeof options.offset === 'undefined') {\n                    options.offset = offset;\n                }\n                if (duration !== null && typeof options.duration === 'undefined') {\n                    options.duration = duration;\n                }\n                if (scrollby !== null && typeof options.scrollby === 'undefined') {\n                    options.scrollby = document.querySelector(scrollby) || window;\n                }\n                transparentApi = this.mui_plugin_transparent = new Transparent(this, options);\n            }\n            transparentApis.push(transparentApi);\n        });\n        return transparentApis.length === 1 ? transparentApis[0] : transparentApis;\n    };\n    $.ready(function() {\n        $('.mui-bar-transparent').transparent();\n    });\n})(mui, window);\n/**\n * 数字输入框\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($) {\n\n    var touchSupport = ('ontouchstart' in document);\n    var tapEventName = touchSupport ? 'tap' : 'click';\n    var changeEventName = 'change';\n    var holderClassName = 'mui-numbox';\n    var plusClassSelector = '.mui-btn-numbox-plus,.mui-numbox-btn-plus';\n    var minusClassSelector = '.mui-btn-numbox-minus,.mui-numbox-btn-minus';\n    var inputClassSelector = '.mui-input-numbox,.mui-numbox-input';\n\n    var Numbox = $.Numbox = $.Class.extend({\n        /**\n         * 构造函数\n         **/\n        init: function(holder, options) {\n            var self = this;\n            if (!holder) {\n                throw \"构造 numbox 时缺少容器元素\";\n            }\n            self.holder = holder;\n            options = options || {};\n            options.step = parseInt(options.step || 1);\n            self.options = options;\n            self.input = $.qsa(inputClassSelector, self.holder)[0];\n            self.plus = $.qsa(plusClassSelector, self.holder)[0];\n            self.minus = $.qsa(minusClassSelector, self.holder)[0];\n            self.checkValue();\n            self.initEvent();\n        },\n        /**\n         * 初始化事件绑定\n         **/\n        initEvent: function() {\n            var self = this;\n            self.plus.addEventListener(tapEventName, function(event) {\n                var val = parseInt(self.input.value) + self.options.step;\n                self.input.value = val.toString();\n                $.trigger(self.input, changeEventName, null);\n            });\n            self.minus.addEventListener(tapEventName, function(event) {\n                var val = parseInt(self.input.value) - self.options.step;\n                self.input.value = val.toString();\n                $.trigger(self.input, changeEventName, null);\n            });\n            self.input.addEventListener(changeEventName, function(event) {\n                self.checkValue();\n                var val = parseInt(self.input.value);\n                //触发顶层容器\n                $.trigger(self.holder, changeEventName, {\n                    value: val\n                });\n            });\n        },\n        /**\n         * 获取当前值\n         **/\n        getValue: function() {\n            var self = this;\n            return parseInt(self.input.value);\n        },\n        /**\n         * 验证当前值是法合法\n         **/\n        checkValue: function() {\n            var self = this;\n            var val = self.input.value;\n            if (val == null || val == '' || isNaN(val)) {\n                self.input.value = self.options.min || 0;\n                self.minus.disabled = self.options.min != null;\n            } else {\n                var val = parseInt(val);\n                if (self.options.max != null && !isNaN(self.options.max) && val >= parseInt(self.options.max)) {\n                    val = self.options.max;\n                    self.plus.disabled = true;\n                } else {\n                    self.plus.disabled = false;\n                }\n                if (self.options.min != null && !isNaN(self.options.min) && val <= parseInt(self.options.min)) {\n                    val = self.options.min;\n                    self.minus.disabled = true;\n                } else {\n                    self.minus.disabled = false;\n                }\n                self.input.value = val;\n            }\n        },\n        /**\n         * 更新选项\n         **/\n        setOption: function(name, value) {\n            var self = this;\n            self.options[name] = value;\n        },\n        /**\n         * 动态设置新值\n         **/\n        setValue: function(value) {\n            this.input.value = value;\n            this.checkValue();\n        }\n    });\n\n    $.fn.numbox = function(options) {\n        var instanceArray = [];\n        //遍历选择的元素\n        this.each(function(i, element) {\n            if (element.numbox) {\n                return;\n            }\n            if (options) {\n                element.numbox = new Numbox(element, options);\n            } else {\n                var optionsText = element.getAttribute('data-numbox-options');\n                var options = optionsText ? JSON.parse(optionsText) : {};\n                options.step = element.getAttribute('data-numbox-step') || options.step;\n                options.min = element.getAttribute('data-numbox-min') || options.min;\n                options.max = element.getAttribute('data-numbox-max') || options.max;\n                element.numbox = new Numbox(element, options);\n            }\n        });\n        return this[0] ? this[0].numbox : null;\n    }\n\n    //自动处理 class='mui-locker' 的 dom\n    $.ready(function() {\n        $('.' + holderClassName).numbox();\n    });\n\n}(mui));\n/**\n * Button\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n    var CLASS_ICON = 'mui-icon';\n    var CLASS_DISABLED = 'mui-disabled';\n\n    var STATE_RESET = 'reset';\n    var STATE_LOADING = 'loading';\n\n    var defaultOptions = {\n        loadingText: 'Loading...', //文案\n        loadingIcon: 'mui-spinner' + ' ' + 'mui-spinner-white', //图标，可为空\n        loadingIconPosition: 'left' //图标所处位置，仅支持left|right\n    };\n\n    var Button = function(element, options) {\n        this.element = element;\n        this.options = $.extend({}, defaultOptions, options);\n        if (!this.options.loadingText) {\n            this.options.loadingText = defaultOptions.loadingText;\n        }\n        if (this.options.loadingIcon === null) {\n            this.options.loadingIcon = 'mui-spinner';\n            if ($.getStyles(this.element, 'color') === 'rgb(255, 255, 255)') {\n                this.options.loadingIcon += ' ' + 'mui-spinner-white';\n            }\n        }\n        this.isInput = this.element.tagName === 'INPUT';\n        this.resetHTML = this.isInput ? this.element.value : this.element.innerHTML;\n        this.state = '';\n    };\n    Button.prototype.loading = function() {\n        this.setState(STATE_LOADING);\n    };\n    Button.prototype.reset = function() {\n        this.setState(STATE_RESET);\n    };\n    Button.prototype.setState = function(state) {\n        if (this.state === state) {\n            return false;\n        }\n        this.state = state;\n        if (state === STATE_RESET) {\n            this.element.disabled = false;\n            this.element.classList.remove(CLASS_DISABLED);\n            this.setHtml(this.resetHTML);\n        } else if (state === STATE_LOADING) {\n            this.element.disabled = true;\n            this.element.classList.add(CLASS_DISABLED);\n            var html = this.isInput ? this.options.loadingText : ('<span>' + this.options.loadingText + '</span>');\n            if (this.options.loadingIcon && !this.isInput) {\n                if (this.options.loadingIconPosition === 'right') {\n                    html += '&nbsp;<span class=\"' + this.options.loadingIcon + '\"></span>';\n                } else {\n                    html = '<span class=\"' + this.options.loadingIcon + '\"></span>&nbsp;' + html;\n                }\n            }\n            this.setHtml(html);\n        }\n    };\n    Button.prototype.setHtml = function(html) {\n        if (this.isInput) {\n            this.element.value = html;\n        } else {\n            this.element.innerHTML = html;\n        }\n    }\n    $.fn.button = function(state) {\n        var buttonApis = [];\n        this.each(function() {\n            var buttonApi = this.mui_plugin_button;\n            if (!buttonApi) {\n                var loadingText = this.getAttribute('data-loading-text');\n                var loadingIcon = this.getAttribute('data-loading-icon');\n                var loadingIconPosition = this.getAttribute('data-loading-icon-position');\n                this.mui_plugin_button = buttonApi = new Button(this, {\n                    loadingText: loadingText,\n                    loadingIcon: loadingIcon,\n                    loadingIconPosition: loadingIconPosition\n                });\n            }\n            if (state === STATE_LOADING || state === STATE_RESET) {\n                buttonApi.setState(state);\n            }\n            buttonApis.push(buttonApi);\n        });\n        return buttonApis.length === 1 ? buttonApis[0] : buttonApis;\n    };\n})(mui, window, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.lazyload.img.js",
    "content": "(function($, window, document) {\n\tvar ImageLazyload = $.Lazyload.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis._super(element, options);\n\t\t},\n\t\t_init: function() {\n\t\t\tthis.options.selector = '[data-lazyload]';\n\t\t\tthis._super();\n\t\t},\n\t\t_set: function(element, uri) {\n\t\t\tif (element.tagName === 'IMG') {\n\t\t\t\telement.src = uri;\n\t\t\t} else {\n\t\t\t\telement.style.backgroundImage = \"url(\" + uri + \")\";\n\t\t\t}\n\t\t},\n\t\t_hasPlaceholder: function(element) {\n\t\t\tif (element.offsetWidth) {\n\t\t\t\tif (element.tagName === 'IMG') {\n\t\t\t\t\treturn !!element.src;\n\t\t\t\t} else {\n\t\t\t\t\treturn !!element.style.backgroundImage;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t_addPlaceHolder: function(element) {\n\t\t\tvar self = this;\n\t\t\tif (element.tagName === 'IMG') {\n\t\t\t\tself._counter++;\n\t\t\t\telement.onload = function() {\n\t\t\t\t\tself._counter--;\n\t\t\t\t\tself.addCallback(element, self.handle);\n\t\t\t\t\tthis.onload = null;\n\t\t\t\t};\n\t\t\t\tself.onPlaceHolder(function(placeholder) {\n\t\t\t\t\tself._set(element, placeholder);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\telement.style.backgroundImage = \"url(\" + self.options.placeholder + \")\";\n\t\t\t}\n\t\t},\n\t\taddElement: function(element) {\n\t\t\tvar self = this;\n\t\t\tvar uri = element.getAttribute('data-lazyload');\n\t\t\tif (uri) {\n\t\t\t\tif (self._hasPlaceholder(element)) {\n\t\t\t\t\tself.addCallback(element, self.handle);\n\t\t\t\t} else {\n\t\t\t\t\tself.onPlaceHolder = self._createLoader(function(callback) {\n\t\t\t\t\t\tvar img = new Image();\n\t\t\t\t\t\tvar placeholder = self.options.placeholder;\n\t\t\t\t\t\timg.src = placeholder;\n\t\t\t\t\t\timg.onload = img.onerror = function() {\n\t\t\t\t\t\t\tcallback(placeholder);\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\tself._addPlaceHolder(element);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function(element, uri) {\n\t\t\tvar self = this;\n\t\t\tvar img = new Image();\n\t\t\timg.onload = function() {\n\t\t\t\tself._set(element, uri);\n\t\t\t\t$.trigger(self.element, 'success', {\n\t\t\t\t\telement: element,\n\t\t\t\t\turi: uri\n\t\t\t\t});\n\t\t\t};\n\t\t\timg.onerror = function() {\n\t\t\t\t$.trigger(self.element, 'error', {\n\t\t\t\t\telement: element,\n\t\t\t\t\turi: uri\n\t\t\t\t});\n\t\t\t};\n\t\t\timg.src = uri;\n\t\t\telement.removeAttribute('data-lazyload'); //只尝试一次，后续可能支持多次尝试\n\t\t},\n\t\thandle: function(element, key) {\n\t\t\tvar uri = element.getAttribute('data-lazyload');\n\t\t\tif (uri) {\n\t\t\t\tthis.set(element, uri);\n\t\t\t\t//element.parentNode.parentNode.setAttribute('data-lazyload', 'true'); //debug\n\t\t\t}\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._super();\n\t\t\tthis.element.removeAttribute('data-imageLazyload');\n\t\t}\n\n\t});\n\t$.fn.imageLazyload = function(options) {\n\t\tvar lazyloadApis = [];\n\t\tthis.each(function() {\n\t\t\tvar self = this;\n\t\t\tvar lazyloadApi = null;\n\t\t\tif (self === document || self === window) {\n\t\t\t\tself = document.body;\n\t\t\t}\n\t\t\tvar id = self.getAttribute('data-imageLazyload');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = lazyloadApi = new ImageLazyload(self, options);\n\t\t\t\tself.setAttribute('data-imageLazyload', id);\n\t\t\t} else {\n\t\t\t\tlazyloadApi = $.data[id];\n\t\t\t}\n\t\t\tlazyloadApis.push(lazyloadApi);\n\t\t});\n\t\treturn lazyloadApis.length === 1 ? lazyloadApis[0] : lazyloadApis;\n\t}\n})(mui, window, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.lazyload.js",
    "content": "(function($, window, document) {\n\tvar mid = 0;\n\t$.Lazyload = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tvar self = this;\n\t\t\tthis.container = this.element = element;\n\t\t\t//\t\t\tplaceholder //默认图片\n\t\t\tthis.options = $.extend({\n\t\t\t\tselector: '', //查询哪些元素需要lazyload\n\t\t\t\tdiff: false, //距离视窗底部多少像素出发lazyload\n\t\t\t\tforce: false, //强制加载(不论元素是否在是视窗内)\n\t\t\t\tautoDestroy: true, //元素加载完后是否自动销毁当前插件对象\n\t\t\t\tduration: 100 //滑动停止多久后开始加载\n\t\t\t}, options);\n\n\t\t\tthis._key = 0;\n\t\t\tthis._containerIsNotDocument = this.container.nodeType !== 9;\n\t\t\tthis._callbacks = {};\n\n\t\t\tthis._init();\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._initLoadFn();\n\n\t\t\tthis.addElements();\n\n\t\t\tthis._loadFn();\n\n\t\t\t$.ready(function() {\n\t\t\t\tthis._loadFn();\n\t\t\t}.bind(this));\n\n\t\t\tthis.resume();\n\t\t},\n\t\t_initLoadFn: function() {\n\t\t\tvar self = this;\n\t\t\tself._loadFn = this._buffer(function() { // 加载延迟项\n\t\t\t\tif(self.options.autoDestroy && self._counter == 0 && $.isEmptyObject(self._callbacks)) {\n\t\t\t\t\tself.destroy();\n\t\t\t\t}\n\t\t\t\tself._loadItems();\n\t\t\t}, self.options.duration, self);\n\t\t},\n\t\t/**\n\t\t *根据加载函数实现加载器\n\t\t *@param {Function} load 加载函数\n\t\t *@returns {Function} 加载器\n\t\t */\n\t\t_createLoader: function(load) {\n\t\t\tvar value, loading, handles = [],\n\t\t\t\th;\n\t\t\treturn function(handle) {\n\t\t\t\tif(!loading) {\n\t\t\t\t\tloading = true;\n\t\t\t\t\tload(function(v) {\n\t\t\t\t\t\tvalue = v;\n\t\t\t\t\t\twhile(h = handles.shift()) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\th && h.apply(null, [value]);\n\t\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t\t\t}, 0)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif(value) {\n\t\t\t\t\thandle && handle.apply(null, [value]);\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t\thandle && handles.push(handle);\n\t\t\t\treturn value;\n\t\t\t}\n\t\t},\n\t\t_buffer: function(fn, ms, context) {\n\t\t\tvar timer;\n\t\t\tvar lastStart = 0;\n\t\t\tvar lastEnd = 0;\n\t\t\tvar ms = ms || 150;\n\n\t\t\tfunction run() {\n\t\t\t\tif(timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t\ttimer = 0;\n\t\t\t\t}\n\t\t\t\tlastStart = $.now();\n\t\t\t\tfn.apply(context || this, arguments);\n\t\t\t\tlastEnd = $.now();\n\t\t\t}\n\n\t\t\treturn $.extend(function() {\n\t\t\t\tif(\n\t\t\t\t\t(!lastStart) || // 从未运行过\n\t\t\t\t\t(lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒\n\t\t\t\t\t(lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成，后8*ms毫秒\n\t\t\t\t) {\n\t\t\t\t\trun();\n\t\t\t\t} else {\n\t\t\t\t\tif(timer) {\n\t\t\t\t\t\ttimer.cancel();\n\t\t\t\t\t}\n\t\t\t\t\ttimer = $.later(run, ms, null, arguments);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tstop: function() {\n\t\t\t\t\tif(timer) {\n\t\t\t\t\t\ttimer.cancel();\n\t\t\t\t\t\ttimer = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t_getBoundingRect: function(c) {\n\t\t\tvar vh, vw, left, top;\n\n\t\t\tif(c !== undefined) {\n\t\t\t\tvh = c.offsetHeight;\n\t\t\t\tvw = c.offsetWidth;\n\t\t\t\tvar offset = $.offset(c);\n\t\t\t\tleft = offset.left;\n\t\t\t\ttop = offset.top;\n\t\t\t} else {\n\t\t\t\tvh = window.innerHeight;\n\t\t\t\tvw = window.innerWidth;\n\t\t\t\tleft = 0;\n\t\t\t\ttop = window.pageYOffset;\n\t\t\t}\n\n\t\t\tvar diff = this.options.diff;\n\n\t\t\tvar diffX = diff === false ? vw : diff;\n\t\t\tvar diffX0 = 0;\n\t\t\tvar diffX1 = diffX;\n\n\t\t\tvar diffY = diff === false ? vh : diff;\n\t\t\tvar diffY0 = 0;\n\t\t\tvar diffY1 = diffY;\n\n\t\t\tvar right = left + vw;\n\t\t\tvar bottom = top + vh;\n\n\t\t\tleft -= diffX0;\n\t\t\tright += diffX1;\n\t\t\ttop -= diffY0;\n\t\t\tbottom += diffY1;\n\t\t\treturn {\n\t\t\t\tleft: left,\n\t\t\t\ttop: top,\n\t\t\t\tright: right,\n\t\t\t\tbottom: bottom\n\t\t\t};\n\t\t},\n\t\t_cacheWidth: function(el) {\n\t\t\tif(el._mui_lazy_width) {\n\t\t\t\treturn el._mui_lazy_width;\n\t\t\t}\n\t\t\treturn el._mui_lazy_width = el.offsetWidth;\n\t\t},\n\t\t_cacheHeight: function(el) {\n\t\t\tif(el._mui_lazy_height) {\n\t\t\t\treturn el._mui_lazy_height;\n\t\t\t}\n\t\t\treturn el._mui_lazy_height = el.offsetHeight;\n\t\t},\n\t\t_isCross: function(r1, r2) {\n\t\t\tvar r = {};\n\t\t\tr.top = Math.max(r1.top, r2.top);\n\t\t\tr.bottom = Math.min(r1.bottom, r2.bottom);\n\t\t\tr.left = Math.max(r1.left, r2.left);\n\t\t\tr.right = Math.min(r1.right, r2.right);\n\t\t\treturn r.bottom >= r.top && r.right >= r.left;\n\t\t},\n\t\t_elementInViewport: function(elem, windowRegion, containerRegion) {\n\t\t\t// display none or inside display none\n\t\t\tif(!elem.offsetWidth) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar elemOffset = $.offset(elem);\n\t\t\tvar inContainer = true;\n\t\t\tvar inWin;\n\t\t\tvar left = elemOffset.left;\n\t\t\tvar top = elemOffset.top;\n\t\t\tvar elemRegion = {\n\t\t\t\tleft: left,\n\t\t\t\ttop: top,\n\t\t\t\tright: left + this._cacheWidth(elem),\n\t\t\t\tbottom: top + this._cacheHeight(elem)\n\t\t\t};\n\n\t\t\tinWin = this._isCross(windowRegion, elemRegion);\n\n\t\t\tif(inWin && containerRegion) {\n\t\t\t\tinContainer = this._isCross(containerRegion, elemRegion);\n\t\t\t}\n\t\t\t// 确保在容器内出现\n\t\t\t// 并且在视窗内也出现\n\t\t\treturn inContainer && inWin;\n\t\t},\n\t\t_loadItems: function() {\n\t\t\tvar self = this;\n\t\t\t// container is display none\n\t\t\tif(self._containerIsNotDocument && !self.container.offsetWidth) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself._windowRegion = self._getBoundingRect();\n\n\t\t\tif(self._containerIsNotDocument) {\n\t\t\t\tself._containerRegion = self._getBoundingRect(this.container);\n\t\t\t}\n\t\t\t$.each(self._callbacks, function(key, callback) {\n\t\t\t\tcallback && self._loadItem(key, callback);\n\t\t\t});\n\t\t},\n\t\t_loadItem: function(key, callback) {\n\t\t\tvar self = this;\n\t\t\tcallback = callback || self._callbacks[key];\n\t\t\tif(!callback) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar el = callback.el;\n\t\t\tvar remove = false;\n\t\t\tvar fn = callback.fn;\n\t\t\tif(self.options.force || self._elementInViewport(el, self._windowRegion, self._containerRegion)) {\n\t\t\t\ttry {\n\t\t\t\t\tremove = fn.call(self, el, key);\n\t\t\t\t} catch(e) {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(remove !== false) {\n\t\t\t\tdelete self._callbacks[key];\n\t\t\t}\n\t\t\treturn remove;\n\t\t},\n\t\taddCallback: function(el, fn) {\n\t\t\tvar self = this;\n\t\t\tvar callbacks = self._callbacks;\n\t\t\tvar callback = {\n\t\t\t\tel: el,\n\t\t\t\tfn: fn || $.noop\n\t\t\t};\n\t\t\tvar key = ++this._key;\n\t\t\tcallbacks[key] = callback;\n\n\t\t\t// add 立即检测，防止首屏元素问题\n\t\t\tif(self._windowRegion) {\n\t\t\t\tself._loadItem(key, callback);\n\t\t\t} else {\n\t\t\t\tself.refresh();\n\t\t\t}\n\t\t},\n\t\taddElements: function(elements) {\n\t\t\tvar self = this;\n\t\t\tself._counter = self._counter || 0;\n\t\t\tvar lazyloads = [];\n\t\t\tif(!elements && self.options.selector) {\n\t\t\t\tlazyloads = self.container.querySelectorAll(self.options.selector);\n\t\t\t} else {\n\t\t\t\t$.each(elements, function(index, el) {\n\t\t\t\t\tlazyloads = lazyloads.concat($.qsa(self.options.selector, el));\n\t\t\t\t});\n\t\t\t}\n\t\t\t//addElements时，自动初始化一次\n\t\t\tif(self._containerIsNotDocument) {\n\t\t\t\tself._containerRegion = self._getBoundingRect(self.container);\n\t\t\t}\n\t\t\t$.each(lazyloads, function(index, el) {\n\t\t\t\tif(!el.getAttribute('data-lazyload-id')) {\n\t\t\t\t\tif(self.addElement(el)) {\n\t\t\t\t\t\tel.setAttribute('data-lazyload-id', mid++);\n\t\t\t\t\t\tself.addCallback(el, self.handle);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\taddElement: function(el) {\n\t\t\treturn true;\n\t\t},\n\t\thandle: function() {\n\t\t\t//throw new Error('需子类实现');\n\t\t},\n\t\trefresh: function(check) {\n\t\t\tif(check) { //检查新的lazyload\n\t\t\t\tthis.addElements();\n\t\t\t}\n\t\t\tthis._loadFn();\n\t\t},\n\t\tpause: function() {\n\t\t\tvar load = this._loadFn;\n\t\t\tif(this._destroyed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twindow.removeEventListener('scroll', load);\n\t\t\twindow.removeEventListener($.EVENT_MOVE, load);\n\t\t\twindow.removeEventListener('resize', load);\n\t\t\tif(this._containerIsNotDocument) {\n\t\t\t\tthis.container.removeEventListener('scrollend', load);\n\t\t\t\tthis.container.removeEventListener('scroll', load);\n\t\t\t\tthis.container.removeEventListener($.EVENT_MOVE, load);\n\t\t\t}\n\t\t},\n\t\tresume: function() {\n\t\t\tvar load = this._loadFn;\n\t\t\tif(this._destroyed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twindow.addEventListener('scroll', load, false);\n\t\t\twindow.addEventListener($.EVENT_MOVE, load, false);\n\t\t\twindow.addEventListener('resize', load, false);\n\t\t\tif(this._containerIsNotDocument) {\n\t\t\t\tthis.container.addEventListener('scrollend', load, false);\n\t\t\t\tthis.container.addEventListener('scroll', load, false);\n\t\t\t\tthis.container.addEventListener($.EVENT_MOVE, load, false);\n\t\t\t}\n\t\t},\n\t\tdestroy: function() {\n\t\t\tvar self = this;\n\t\t\tself.pause();\n\t\t\tself._callbacks = {};\n\t\t\t$.trigger(this.container, 'destroy', self);\n\t\t\tself._destroyed = 1;\n\t\t}\n\t});\n})(mui, window, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.listpicker.js",
    "content": "/**\n * 选择列表插件\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar _listpickerId = 0;\n\n\tvar ListPicker = $.ListPicker = $.Class.extend({\n\t\tinit: function(box, options) {\n\t\t\tvar self = this;\n\t\t\tif (!box) {\n\t\t\t\tthrow \"构造 ListPicker 时找不到元素\";\n\t\t\t}\n\t\t\tself.box = box;\n\t\t\t//避免重复初始化开始\n\t\t\tif (self.box.listpickerId) return;\n\t\t\tself.listpickerId = self.box.listpickerId = \"listpicker-\" + (++_listpickerId);\n\t\t\t//避免重复初始化结束\n\t\t\tself.box.setAttribute('data-listpicker-id', self.box.listpickerId);\n\t\t\t//处理 options\n\t\t\toptions = options || {};\n\t\t\toptions.fiexdDur = options.fiexdDur || 150;\n\t\t\toptions.highlightStyle = options.highlightStyle || 'color: green;';\n\t\t\t//在 ios 上启用 h5 模式，\n\t\t\tif ($.os.ios) {\n\t\t\t\toptions.enabledH5 = true;\n\t\t\t}\n\t\t\t//如果没有设定 enabled3d，将默认用 3d 模式\n\t\t\tif (options.enabled3d === null || typeof options.enabled3d === 'undefined') {\n\t\t\t\toptions.enabled3d = $.os.ios;\n\t\t\t}\n\t\t\t//\n\t\t\tself.options = options;\n\t\t\tself._create();\n\t\t\tself._handleShim();\n\t\t\tself._bindEvent();\n\t\t\tself._applyToBox();\n\t\t\tself._handleHighlight();\n\t\t},\n\t\t_create: function() {\n\t\t\tvar self = this;\n\t\t\tself.boxInner = $('.mui-listpicker-inner', self.box)[0];\n\t\t\tself.boxHeight = self.box.offsetHeight;\n\t\t\tself.list = $('ul', self.boxInner)[0];\n\t\t\t//refresh 中会执行 self.itemElementArray = [].slice.call($('li', self.list));\n\t\t\tself.refresh();\n\t\t\tvar firstItem = self.itemElementArray[0];\n\t\t\tself.itemHeight = 0;\n\t\t\tif (firstItem) {\n\t\t\t\tself.itemHeight = firstItem.offsetHeight;\n\t\t\t} else {\n\t\t\t\tself.list.innerHTML = \"<li>...</li>\";\n\t\t\t\tfirstItem = $('li', self.list)[0];\n\t\t\t\tself.itemHeight = firstItem.offsetHeight;\n\t\t\t\tself.list.innerHTML = '';\n\t\t\t}\n\t\t\tself.list.style.paddingTop = self.list.style.paddingBottom = (self.boxHeight / 2 - self.itemHeight / 2) + 'px';\n\t\t\t//创建中间选中项的高亮行\n\t\t\tself.rule = $.dom('<div class=\"mui-listpicker-rule\"> </div>')[0];\n\t\t\tself.rule.style.height = self.itemHeight + 'px';\n\t\t\tself.rule.style.marginTop = -(self.itemHeight / 2) + 'px';\n\t\t\tself.box.appendChild(self.rule);\n\t\t\tself.middle = self.boxInner.offsetHeight / 2;\n\t\t\tself.showLine = parseInt((self.boxInner.offsetHeight / self.itemHeight).toFixed(0));\n\t\t\t//是否启用 3d 效果\n\t\t\tif (self.options.enabled3d) {\n\t\t\t\tself.box.classList.add('three-dimensional');\n\t\t\t}\n\t\t},\n\t\t//根据 options 处理不同平台兼容问题\n\t\t_handleShim: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.options.enabledH5) {\n\t\t\t\tself.options.fiexdDur *= 2;\n\t\t\t\tself.boxInner.classList.add($.className('scroll-wrapper'));\n\t\t\t\tself.list.classList.add($.className('scroll'));\n\t\t\t\tself._scrollerApi = $(self.boxInner).scroll({\n\t\t\t\t\tdeceleration: 0.002\n\t\t\t\t});\n\t\t\t\t//增加惯性滚动时的 scroll 触发处理\n\t\t\t\t//shimTetTranslate(self._scrollerApi);\n\t\t\t\t//--\n\t\t\t\tself.setScrollTop = function(y, dur, callback) {\n\t\t\t\t\tself._scrollerApi.scrollTo(0, -y, dur);\n\t\t\t\t};\n\t\t\t\tself.getScrollTop = function() {\n\t\t\t\t\tvar self = this;\n\t\t\t\t\tif (self._scrollerApi.lastY > 0) {\n\t\t\t\t\t\treturn 0\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn Math.abs(self._scrollerApi.lastY);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t//alert(0);\n\t\t\t\t//为 boxInner 增加 scrollend 事件 (没有原生 scrollend 事件)\n\t\t\t\tself.boxInner.addEventListener('scroll', function(event) {\n\t\t\t\t\tif (self.disabledScroll) return;\n\t\t\t\t\tself.isScrolling = true;\n\t\t\t\t\tif (self.scrollTimer) {\n\t\t\t\t\t\tclearTimeout(self.scrollTimer);\n\t\t\t\t\t}\n\t\t\t\t\tself.scrollTimer = setTimeout(function() {\n\t\t\t\t\t\tself.isScrolling = false;\n\t\t\t\t\t\tif (!self.isTouchDown || !$.os.ios) {\n\t\t\t\t\t\t\t$.trigger(self.boxInner, 'scrollend');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 150);\n\t\t\t\t}, false);\n\t\t\t\tself.aniScrollTop = function(y, dur, callback) {\n\t\t\t\t\tself.disabledScroll = true;\n\t\t\t\t\tvar stepNum = dur > 0 ? dur / 10 : 1;\n\t\t\t\t\tvar stepSize = (y - self.boxInner.scrollTop) / stepNum;\n\t\t\t\t\tself._lastScrollTop = self.boxInner.scrollTop; //记录最后的位置\n\t\t\t\t\tself._aniScrollTop(y, 0, stepNum, stepSize, callback);\n\t\t\t\t};\n\t\t\t\tself._aniScrollTop = function(y, stepIndex, stepNum, stepSize, callback) {\n\t\t\t\t\tself.boxInner.scrollTop = self._lastScrollTop + stepSize * stepIndex;\n\t\t\t\t\tif (stepIndex < stepNum) {\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\tself._aniScrollTop(y, ++stepIndex, stepNum, stepSize);\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//self.boxInner.scrollTop = y;\n\t\t\t\t\t\tself.disabledScroll = false;\n\t\t\t\t\t\tif (callback) callback();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tself.setScrollTop = function(y, dur, callback) {\n\t\t\t\t\tself.aniScrollTop(y, dur);\n\t\t\t\t};\n\t\t\t\tself.getScrollTop = function() {\n\t\t\t\t\tvar self = this;\n\t\t\t\t\treturn self.boxInner.scrollTop;\n\t\t\t\t};\n\t\t\t\t//在 ios 上手指不弹起时，防止定位抖动开始\n\t\t\t\tif ($.os.ios) {\n\t\t\t\t\tself.boxInner.addEventListener('touchstart', function(event) {\n\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\tself.isTouchDown = true;\n\t\t\t\t\t}, false);\n\t\t\t\t\tself.boxInner.addEventListener('touchend', function(event) {\n\t\t\t\t\t\tself.isTouchDown = false;\n\t\t\t\t\t\tif (!self.isScrolling) {\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t$.trigger(self.boxInner, 'scrollend');\n\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t}\n\t\t\t\t//在 ios 上手指不弹起时，防止定位抖动结束\n\t\t\t}\n\t\t},\n\t\t_handleHighlight: function() {\n\t\t\tvar self = this;\n\t\t\tvar scrollTop = self.getScrollTop();\n\t\t\tvar fiexd = parseInt((scrollTop / self.itemHeight).toFixed(0));\n\t\t\tvar lastIndex = self.itemElementArray.length - 1;\n\t\t\tvar displayRange = parseInt((self.showLine / 2).toFixed(0));\n\t\t\tvar displayBegin = fiexd - displayRange;\n\t\t\tvar displayEnd = fiexd + displayRange;\n\t\t\tif (displayBegin < 0) {\n\t\t\t\tdisplayBegin = 0;\n\t\t\t}\n\t\t\tif (displayEnd > lastIndex) {\n\t\t\t\tdisplayEnd = lastIndex;\n\t\t\t}\n\t\t\t//高亮选中行开始\n\t\t\tfor (var index = displayBegin; index <= displayEnd; index++) {\n\t\t\t\tvar itemElement = self.itemElementArray[index];\n\t\t\t\tif (index == fiexd) {\n\t\t\t\t\titemElement.classList.add($.className('listpicker-item-selected'));\n\t\t\t\t\t//itemElement.classList.remove($.className('listpicker-item-before'));\n\t\t\t\t\t//itemElement.classList.remove($.className('listpicker-item-after'));\n\t\t\t\t} else {\n\t\t\t\t\t//itemElement.classList.add($.className('listpicker-item-' + (fiexd > index ? 'before' : 'after')));\n\t\t\t\t\titemElement.classList.remove($.className('listpicker-item-selected'));\n\t\t\t\t}\n\t\t\t\tif (self.options.enabled3d) {\n\t\t\t\t\t//3d 处理开始\n\t\t\t\t\tvar itemOffset = self.middle - (itemElement.offsetTop - scrollTop + self.itemHeight / 2) + 1;\n\t\t\t\t\tvar percentage = itemOffset / self.itemHeight;\n\t\t\t\t\tvar angle = (18 * percentage);\n\t\t\t\t\t//if (angle > 180) angle = 180;\n\t\t\t\t\t//if (angle < -180) angle = -180;\n\t\t\t\t\titemElement.style.webkitTransform = 'rotateX(' + angle + 'deg) translate3d(0px,0px,' + (0 - Math.abs(percentage * 12)) + 'px)';\n\t\t\t\t\t//3d 处理结束\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_triggerChange: function() {\n\t\t\tvar self = this;\n\t\t\t$.trigger(self.box, 'change', {\n\t\t\t\tindex: self.getSelectedIndex(),\n\t\t\t\tvalue: self.getSelectedValue(),\n\t\t\t\ttext: self.getSelectedText(),\n\t\t\t\titem: self.getSelectedItem(),\n\t\t\t\telement: self.getSelectedElement()\n\t\t\t});\n\t\t},\n\t\t_scrollEndHandle: function() {\n\t\t\tvar self = this;\n\t\t\tvar scrollTop = self.getScrollTop();\n\t\t\tvar fiexd = (scrollTop / self.itemHeight).toFixed(0);\n\t\t\tself.disabledScrollEnd = true;\n\t\t\tself.setSelectedIndex(fiexd);\n\t\t\tself._triggerChange();\n\t\t\tself._handleHighlight();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.disabledScrollEnd = false;\n\t\t\t\tself._handleHighlight();\n\t\t\t}, self.options.fiexdDur);\n\t\t},\n\t\t_bindEvent: function() {\n\t\t\tvar self = this;\n\t\t\t//滚动处理高亮\n\t\t\tself.boxInner.addEventListener('scroll', function(event) {\n\t\t\t\tself._handleHighlight(event);\n\t\t\t}, false);\n\t\t\t//处理滚动结束\n\t\t\tself.disabledScrollEnd = false;\n\t\t\tself.boxInner.addEventListener('scrollend', function(event) {\n\t\t\t\tif (self.disabledScrollEnd) return;\n\t\t\t\tself.disabledScrollEnd = true;\n\t\t\t\tself._scrollEndHandle();\n\t\t\t}, false);\n\t\t\t//绑定项 tap 事件\n\t\t\t$(self.boxInner).on('tap', 'li', function(event) {\n\t\t\t\tvar tapItem = this;\n\t\t\t\tvar items = [].slice.call($('li', self.list));\n\t\t\t\tfor (var i in items) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item == tapItem) {\n\t\t\t\t\t\tself.setSelectedIndex(i);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tgetSelectedIndex: function() {\n\t\t\tvar self = this;\n\t\t\treturn (self.getScrollTop() / self.itemHeight).toFixed(0);\n\t\t},\n\t\tsetSelectedIndex: function(index, noAni) {\n\t\t\tvar self = this;\n\t\t\tindex = (index || 0);\n\t\t\tself.setScrollTop(self.itemHeight * index, noAni ? 0 : self.options.fiexdDur);\n\t\t},\n\t\tgetSelectedElement: function() {\n\t\t\tvar self = this;\n\t\t\tvar index = self.getSelectedIndex();\n\t\t\treturn $('li', self.list)[index];\n\t\t},\n\t\tgetSelectedItem: function() {\n\t\t\tvar self = this;\n\t\t\tvar itemElement = self.getSelectedElement();\n\t\t\tif (!itemElement) return null;\n\t\t\tvar itemJson = itemElement.getAttribute('data-item');\n\t\t\treturn itemJson ? JSON.parse(itemJson) : {\n\t\t\t\ttext: itemElement.innerText,\n\t\t\t\tvalue: itemElement.getAttribute('data-value')\n\t\t\t};\n\t\t},\n\t\trefresh: function() {\n\t\t\tvar self = this;\n\t\t\tself.itemElementArray = [].slice.call($('li', self.list));\n\t\t},\n\t\tsetItems: function(items) {\n\t\t\tvar self = this;\n\t\t\tvar buffer = [];\n\t\t\tfor (index in items) {\n\t\t\t\tvar item = items[index] || {\n\t\t\t\t\ttext: 'null',\n\t\t\t\t\tvalue: 'null' + index\n\t\t\t\t};\n\t\t\t\tvar itemJson = JSON.stringify(item);\n\t\t\t\tbuffer.push(\"<li data-value='\" + item.value + \"' data-item='\" + itemJson + \"'>\" + item.text + \"</li>\");\n\t\t\t};\n\t\t\tself.list.innerHTML = buffer.join('');\n\t\t\tif (self._scrollerApi && self._scrollerApi.refresh) {\n\t\t\t\tself._scrollerApi.refresh();\n\t\t\t}\n\t\t\tself.refresh();\n\t\t\tself._handleHighlight();\n\t\t\tself._triggerChange();\n\t\t},\n\t\tgetItems: function() {\n\t\t\tvar self = this;\n\t\t\tvar items = [];\n\t\t\tvar itemElements = $('li', self.list);\n\t\t\tfor (index in itemElements) {\n\t\t\t\tvar itemElement = itemElements[index];\n\t\t\t\tvar itemJson = itemElement.getAttribute('data-item');\n\t\t\t\titems.push(itemJson ? JSON.parse(itemJson) : {\n\t\t\t\t\ttext: itemElement.innerText,\n\t\t\t\t\tvalue: itemElement.getAttribute('data-value')\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\t\tgetSelectedValue: function() {\n\t\t\tvar self = this;\n\t\t\tvar item = self.getSelectedItem();\n\t\t\tif (!item) return null;\n\t\t\treturn item.value;\n\t\t},\n\t\tgetSelectedText: function() {\n\t\t\tvar self = this;\n\t\t\tvar item = self.getSelectedItem();\n\t\t\tif (!item) return null;\n\t\t\treturn item.text;\n\t\t},\n\t\tsetSelectedValue: function(value, noAni) {\n\t\t\tvar self = this;\n\t\t\tvar itemElements = $('li', self.list);\n\t\t\tfor (index in itemElements) {\n\t\t\t\tvar itemElement = itemElements[index];\n\t\t\t\tif (!itemElement || !itemElement.getAttribute) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (itemElement.getAttribute('data-value') == value) {\n\t\t\t\t\tself.setSelectedIndex(index, noAni);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_applyToBox: function() {\n\t\t\tvar self = this;\n\t\t\tvar memberArray = [\n\t\t\t\t\"getSelectedIndex\",\n\t\t\t\t\"setSelectedIndex\",\n\t\t\t\t\"getSelectedElement\",\n\t\t\t\t\"getSelectedItem\",\n\t\t\t\t\"setItems\",\n\t\t\t\t\"getItems\",\n\t\t\t\t\"getSelectedValue\",\n\t\t\t\t\"getSelectedText\",\n\t\t\t\t\"setSelectedValue\"\n\t\t\t];\n\t\t\tvar _clone = function(name) {\n\t\t\t\tif (typeof self[name] === 'function') {\n\t\t\t\t\tself.box[name] = function() {\n\t\t\t\t\t\treturn self[name].apply(self, arguments);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tself.box[name] = self[name];\n\t\t\t\t}\n\t\t\t};\n\t\t\tfor (var i in memberArray) {\n\t\t\t\tvar name = memberArray[i];\n\t\t\t\t_clone(name);\n\t\t\t}\n\t\t}\n\t});\n\n\t//添加 locker 插件\n\t$.fn.listpicker = function(options) {\n\t\t//遍历选择的元素\n\t\tthis.each(function(i, element) {\n\t\t\tif (options) {\n\t\t\t\tnew ListPicker(element, options);\n\t\t\t} else {\n\t\t\t\tvar optionsText = element.getAttribute('data-listpicker-options');\n\t\t\t\tvar _options = optionsText ? JSON.parse(optionsText) : {};\n\t\t\t\t_options.enabledH5 = element.getAttribute('data-listpicker-enabledh5') || _options.enabledH5;\n\t\t\t\t_options.enabled3d = element.getAttribute('data-listpicker-enabled3d') || _options.enabled3d;\n\t\t\t\t_options.fixedDur = element.getAttribute('data-listpicker-fixddur') || _options.fixedDur;\n\t\t\t\tnew ListPicker(element, _options);\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t};\n\n\t//自动初始化\n\t$.ready(function() {\n\t\t$('.mui-listpicker').listpicker();\n\t});\n\n})(mui, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.locker.js",
    "content": "/**\n * 手势锁屏插件\n * varstion 1.0.5\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, doc) {\n\n\tvar touchSupport = ('ontouchstart' in document);\n\tvar startEventName = touchSupport ? $.EVENT_START : 'mousedown';\n\tvar moveEventName = touchSupport ? $.EVENT_MOVE : 'mousemove';\n\tvar endEventName = touchSupport ? $.EVENT_END : 'mouseup';\n\tvar lockerHolderClassName = $.className('locker-holder');\n\tvar lockerClassName = $.className('locker');\n\n\tvar styleHolder = doc.querySelector('head') || doc.querySelector('body');\n\tstyleHolder.innerHTML += \"<style>.mui-locker-holder{overflow:hidden;position:relative;padding:0px;}.mui-locker-holder canvas{width:100%;height:100%;}</style>\";\n\n\tvar times = 2;\n\n\tfunction getElementLeft(element) {　　　　\n\t\tvar actualLeft = element.offsetLeft;　　　　\n\t\tvar current = element.offsetParent;　　　　\n\t\twhile (current !== null) {　　　　　　\n\t\t\tactualLeft += current.offsetLeft;　　　　　　\n\t\t\tcurrent = current.offsetParent;　　　　\n\t\t}　　　　\n\t\treturn actualLeft;　　\n\t}　　\n\n\tfunction getElementTop(element) {　　　　\n\t\tvar actualTop = element.offsetTop;　　　　\n\t\tvar current = element.offsetParent;　　　　\n\t\twhile (current !== null) {　　　　　　\n\t\t\tactualTop += current.offsetTop;　　　　　　\n\t\t\tcurrent = current.offsetParent;　　　　\n\t\t}　　　　\n\t\treturn actualTop;　　\n\t}\n\n\t//定义 Locker 类\n\tvar Locker = $.Locker = $.Class.extend({\n\t\tR: 26,\n\t\tCW: 400,\n\t\tCH: 320,\n\t\tOffsetX: 30,\n\t\tOffsetY: 30,\n\n\t\t/**\n\t\t * 构造函数\n\t\t * */\n\t\tinit: function(holder, options) {\n\t\t\tvar self = this;\n\t\t\tif (!holder) {\n\t\t\t\tthrow \"构造 Locker 时缺少容器元素\";\n\t\t\t}\n\t\t\tself.holder = holder;\n\t\t\t//\n\t\t\toptions = options || {};\n\t\t\toptions.callback = options.callback || options.done || $.noop;\n\t\t\toptions.times = options.times || times;\n\t\t\tself.options = options;\n\t\t\tself.holder.innerHTML = '<canvas></canvas>';\n\t\t\t//\n\t\t\tself.holder.classList.add(lockerHolderClassName);\n\t\t\t//初始化\n\t\t\tvar canvas = self.canvas = $.qsa('canvas', self.holder)[0];\n\t\t\tcanvas.on = canvas.addEventListener || function(name, handler, capture) {\n\t\t\t\tcanvas.attachEvent('on' + name, handler, capture);\n\t\t\t};\n\t\t\tcanvas.off = canvas.removeEventListener || function(name, handler, capture) {\n\t\t\t\tcanvas.detachEvent('on' + name, handler, capture);\n\t\t\t};\n\t\t\t//\n\t\t\tif (self.options.width) self.holder.style.width = self.options.width + 'px';\n\t\t\tif (self.options.height) self.holder.style.height = self.options.height + 'px';\n\t\t\tself.CW = self.options.width || self.holder.offsetWidth || self.CW;\n\t\t\tself.CH = self.options.height || self.holder.offsetHeight || self.CH;\n\t\t\t//处理 “宽、高” 等数值, 全部扩大 times 倍\n\t\t\tself.R *= self.options.times;\n\t\t\tself.CW *= self.options.times;\n\t\t\tself.CH *= self.options.times;\n\t\t\tself.OffsetX *= self.options.times;\n\t\t\tself.OffsetY *= self.options.times;\n\t\t\t//\n\t\t\tcanvas.width = self.CW;\n\t\t\tcanvas.height = self.CH;\n\t\t\tvar cxt = self.cxt = canvas.getContext(\"2d\");\n\t\t\t//两个圆之间的外距离 就是说两个圆心的距离去除两个半径\n\t\t\tvar X = (self.CW - 2 * self.OffsetX - self.R * 2 * 3) / 2;\n\t\t\tvar Y = (self.CH - 2 * self.OffsetY - self.R * 2 * 3) / 2;\n\t\t\tself.pointLocationArr = self.caculateNinePointLotion(X, Y);\n\t\t\tself.initEvent(canvas, cxt, self.holder);\n\t\t\t//console.log(X);\n\t\t\tself.draw(cxt, self.pointLocationArr, [], null);\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.draw(cxt, self.pointLocationArr, [], null);\n\t\t\t}, 0);\n\t\t},\n\n\t\t/**\n\t\t * 计算\n\t\t */\n\t\tcaculateNinePointLotion: function(diffX, diffY) {\n\t\t\tvar self = this;\n\t\t\tvar Re = [];\n\t\t\tfor (var row = 0; row < 3; row++) {\n\t\t\t\tfor (var col = 0; col < 3; col++) {\n\t\t\t\t\tvar Point = {\n\t\t\t\t\t\tX: (self.OffsetX + col * diffX + (col * 2 + 1) * self.R),\n\t\t\t\t\t\tY: (self.OffsetY + row * diffY + (row * 2 + 1) * self.R)\n\t\t\t\t\t};\n\t\t\t\t\tRe.push(Point);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Re;\n\t\t},\n\n\t\t/**\n\t\t * 绘制\n\t\t */\n\t\tdraw: function(cxt, _PointLocationArr, _LinePointArr, touchPoint) {\n\t\t\tvar self = this;\n\t\t\tvar R = self.R;\n\t\t\tif (_LinePointArr.length > 0) {\n\t\t\t\tcxt.beginPath();\n\t\t\t\tfor (var i = 0; i < _LinePointArr.length; i++) {\n\t\t\t\t\tvar pointIndex = _LinePointArr[i];\n\t\t\t\t\tcxt.lineTo(_PointLocationArr[pointIndex].X, _PointLocationArr[pointIndex].Y);\n\t\t\t\t}\n\t\t\t\tcxt.lineWidth = (self.options.lindeWidth || 2) * self.options.times;\n\t\t\t\tcxt.strokeStyle = self.options.lineColor || \"#999\"; //连结线颜色\n\t\t\t\tcxt.stroke();\n\t\t\t\tcxt.closePath();\n\t\t\t\tif (touchPoint != null) {\n\t\t\t\t\tvar lastPointIndex = _LinePointArr[_LinePointArr.length - 1];\n\t\t\t\t\tvar lastPoint = _PointLocationArr[lastPointIndex];\n\t\t\t\t\tcxt.beginPath();\n\t\t\t\t\tcxt.moveTo(lastPoint.X, lastPoint.Y);\n\t\t\t\t\tcxt.lineTo(touchPoint.X, touchPoint.Y);\n\t\t\t\t\tcxt.stroke();\n\t\t\t\t\tcxt.closePath();\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i = 0; i < _PointLocationArr.length; i++) {\n\t\t\t\tvar Point = _PointLocationArr[i];\n\t\t\t\tcxt.fillStyle = self.options.ringColor || \"#888\"; //圆圈边框颜色\n\t\t\t\tcxt.beginPath();\n\t\t\t\tcxt.arc(Point.X, Point.Y, R, 0, Math.PI * 2, true);\n\t\t\t\tcxt.closePath();\n\t\t\t\tcxt.fill();\n\t\t\t\tcxt.fillStyle = self.options.fillColor || \"#f3f3f3\"; //圆圈填充颜色\n\t\t\t\tcxt.beginPath();\n\t\t\t\tcxt.arc(Point.X, Point.Y, R - ((self.options.ringWidth || 2) * self.options.times), 0, Math.PI * 2, true);\n\t\t\t\tcxt.closePath();\n\t\t\t\tcxt.fill();\n\t\t\t\tif (_LinePointArr.indexOf(i) >= 0) {\n\t\t\t\t\tcxt.fillStyle = self.options.pointColor || \"#777\"; //圆圈中心点颜色\n\t\t\t\t\tcxt.beginPath();\n\t\t\t\t\tcxt.arc(Point.X, Point.Y, R - ((self.options.pointWidth || 16) * self.options.times), 0, Math.PI * 2, true);\n\t\t\t\t\tcxt.closePath();\n\t\t\t\t\tcxt.fill();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tisPointSelect: function(touches, linePoint) {\n\t\t\tvar self = this;\n\t\t\tfor (var i = 0; i < self.pointLocationArr.length; i++) {\n\t\t\t\tvar currentPoint = self.pointLocationArr[i];\n\t\t\t\tvar xdiff = Math.abs(currentPoint.X - touches.elementX);\n\t\t\t\tvar ydiff = Math.abs(currentPoint.Y - touches.elementY);\n\t\t\t\tvar dir = Math.pow((xdiff * xdiff + ydiff * ydiff), 0.5);\n\t\t\t\tif (dir < self.R) {\n\t\t\t\t\tif (linePoint.indexOf(i) < 0) {\n\t\t\t\t\t\tlinePoint.push(i);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tinitEvent: function(canvas, cxt, holder) {\n\t\t\tvar self = this;\n\t\t\tvar linePoint = [];\n\t\t\tvar isDown = false; //针对鼠标事件\n\t\t\t//start\n\t\t\tself._startHandler = function(e) {\n\t\t\t\te.point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t\t\te.point.elementX = (e.point.pageX - getElementLeft(holder)) * self.options.times;\n\t\t\t\te.point.elementY = (e.point.pageY - getElementTop(holder)) * self.options.times;\n\t\t\t\tself.isPointSelect(e.point, linePoint);\n\t\t\t\tisDown = true;\n\t\t\t};\n\t\t\tcanvas.on(startEventName, self._startHandler, false);\n\t\t\t//move\n\t\t\tself._moveHanlder = function(e) {\n\t\t\t\tif (!isDown) return;\n\t\t\t\te.preventDefault();\n\t\t\t\te.point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t\t\te.point.elementX = (e.point.pageX - getElementLeft(holder)) * self.options.times;\n\t\t\t\te.point.elementY = (e.point.pageY - getElementTop(holder)) * self.options.times;\n\t\t\t\tvar touches = e.point;\n\t\t\t\tself.isPointSelect(touches, linePoint);\n\t\t\t\tcxt.clearRect(0, 0, self.CW, self.CH);\n\t\t\t\tself.draw(cxt, self.pointLocationArr, linePoint, {\n\t\t\t\t\tX: touches.elementX,\n\t\t\t\t\tY: touches.elementY\n\t\t\t\t});\n\t\t\t};\n\t\t\tcanvas.on(moveEventName, self._moveHanlder, false);\n\t\t\t//end\n\t\t\tself._endHandler = function(e) {\n\t\t\t\te.point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t\t\te.point.elementX = (e.point.pageX - getElementLeft(holder)) * self.options.times;\n\t\t\t\te.point.elementY = (e.point.pageY - getElementTop(holder)) * self.options.times;\n\t\t\t\tcxt.clearRect(0, 0, self.CW, self.CH);\n\t\t\t\tself.draw(cxt, self.pointLocationArr, linePoint, null);\n\t\t\t\t//事件数据\n\t\t\t\tvar eventData = {\n\t\t\t\t\tsender: self,\n\t\t\t\t\tpoints: linePoint\n\t\t\t\t};\n\t\t\t\t/*\n\t\t\t\t * 回调完成事件\n\t\t\t\t *\n\t\t\t\t * 备注:\n\t\t\t\t * 比较理想的做法是为 Locker 的实例启用事件机制，比如 locker.on('done',handler);\n\t\t\t\t * 在 mui 没有完整的公共事件模块前，此版本中 locker 实例暂通过 options.callback 处理\n\t\t\t\t */\n\t\t\t\tself.options.callback(eventData);\n\t\t\t\t//触发声明的DOM的自定义事件(暂定 done 为事件名，可以考虑更有针对的事件名 )\n\t\t\t\t$.trigger(self.holder, 'done', eventData);\n\t\t\t\t//-\n\t\t\t\tlinePoint = [];\n\t\t\t\tisDown = false;\n\t\t\t};\n\t\t\tcanvas.on(endEventName, self._endHandler, false);\n\t\t},\n\n\t\tpointLocationArr: [],\n\n\t\t/**\n\t\t * 清除图形\n\t\t * */\n\t\tclear: function() {\n\t\t\tvar self = this;\n\t\t\t//self.pointLocationArr = [];\n\t\t\tif (self.cxt) {\n\t\t\t\tself.cxt.clearRect(0, 0, self.CW, self.CH);\n\t\t\t\tself.draw(self.cxt, self.pointLocationArr, [], {\n\t\t\t\t\tX: 0,\n\t\t\t\t\tY: 0\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * 释放资源\n\t\t * */\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.cxt = null;\n\t\t\tself.canvas.off(startEventName, self._startHandler);\n\t\t\tself.canvas.off(moveEventName, self._moveHandler);\n\t\t\tself.canvas.off(endEventName, self._endHandler);\n\t\t\tself.holder.innerHTML = '';\n\t\t\tself.canvas = null;\n\t\t}\n\t});\n\n\t//添加 locker 插件\n\t$.fn.locker = function(options) {\n\t\t//遍历选择的元素\n\t\tthis.each(function(i, element) {\n\t\t\tif (element.locker) return;\n\t\t\tif (options) {\n\t\t\t\telement.locker = new Locker(element, options);\n\t\t\t} else {\n\t\t\t\tvar optionsText = element.getAttribute('data-locker-options');\n\t\t\t\tvar _options = optionsText ? JSON.parse(optionsText) : {};\n\t\t\t\t_options.lineColor = element.getAttribute('data-locker-line-color') || _options.lineColor;\n\t\t\t\t_options.ringColor = element.getAttribute('data-locker-ring-color') || _options.ringColor;\n\t\t\t\t_options.fillColor = element.getAttribute('data-locker-fill-color') || _options.fillColor;\n\t\t\t\t_options.pointColor = element.getAttribute('data-locker-point-color') || _options.pointColor;\n\t\t\t\t_options.width = element.getAttribute('data-locker-width') || _options.width;\n\t\t\t\t_options.height = element.getAttribute('data-locker-height') || _options.height;\n\t\t\t\telement.locker = new Locker(element, _options);\n\t\t\t}\n\t\t});\n\t\treturn this[0] ? this[0].locker : null;\n\t};\n\n\t//自动处理 class='mui-locker' 的 dom\n\ttry {\n\t\t$('.' + lockerClassName).locker();\n\t} catch (ex) {}\n\t$.ready(function() {\n\t\t$('.' + lockerClassName).locker();\n\t});\n\n}(mui, document));"
  },
  {
    "path": "examples/hello-mui/js/mui.picker.all.js",
    "content": "/**\n * 选择列表插件\n * varstion 2.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, window, document, undefined) {\n\n\tvar MAX_EXCEED = 30;\n\tvar VISIBLE_RANGE = 90;\n\tvar DEFAULT_ITEM_HEIGHT = 40;\n\tvar BLUR_WIDTH = 10;\n\n\tvar rad2deg = $.rad2deg = function(rad) {\n\t\treturn rad / (Math.PI / 180);\n\t};\n\n\tvar deg2rad = $.deg2rad = function(deg) {\n\t\treturn deg * (Math.PI / 180);\n\t};\n\n\tvar platform = navigator.platform.toLowerCase();\n\tvar userAgent = navigator.userAgent.toLowerCase();\n\tvar isIos = (userAgent.indexOf('iphone') > -1 ||\n\t\t\tuserAgent.indexOf('ipad') > -1 ||\n\t\t\tuserAgent.indexOf('ipod') > -1) &&\n\t\t(platform.indexOf('iphone') > -1 ||\n\t\t\tplatform.indexOf('ipad') > -1 ||\n\t\t\tplatform.indexOf('ipod') > -1);\n\t//alert(isIos);\n\n\tvar Picker = $.Picker = function(holder, options) {\n\t\tvar self = this;\n\t\tself.holder = holder;\n\t\tself.options = options || {};\n\t\tself.init();\n\t\tself.initInertiaParams();\n\t\tself.calcElementItemPostion(true);\n\t\tself.bindEvent();\n\t};\n\n\tPicker.prototype.findElementItems = function() {\n\t\tvar self = this;\n\t\tself.elementItems = [].slice.call(self.holder.querySelectorAll('li'));\n\t\treturn self.elementItems;\n\t};\n\n\tPicker.prototype.init = function() {\n\t\tvar self = this;\n\t\tself.list = self.holder.querySelector('ul');\n\t\tself.findElementItems();\n\t\tself.height = self.holder.offsetHeight;\n\t\tself.r = self.height / 2 - BLUR_WIDTH;\n\t\tself.d = self.r * 2;\n\t\tself.itemHeight = self.elementItems.length > 0 ? self.elementItems[0].offsetHeight : DEFAULT_ITEM_HEIGHT;\n\t\tself.itemAngle = parseInt(self.calcAngle(self.itemHeight * 0.8));\n\t\tself.hightlightRange = self.itemAngle / 2;\n\t\tself.visibleRange = VISIBLE_RANGE;\n\t\tself.beginAngle = 0;\n\t\tself.beginExceed = self.beginAngle - MAX_EXCEED;\n\t\tself.list.angle = self.beginAngle;\n\t\tif (isIos) {\n\t\t\tself.list.style.webkitTransformOrigin = \"center center \" + self.r + \"px\";\n\t\t}\n\t};\n\n\tPicker.prototype.calcElementItemPostion = function(andGenerateItms) {\n\t\tvar self = this;\n\t\tif (andGenerateItms) {\n\t\t\tself.items = [];\n\t\t}\n\t\tself.elementItems.forEach(function(item) {\n\t\t\tvar index = self.elementItems.indexOf(item);\n\t\t\tself.endAngle = self.itemAngle * index;\n\t\t\titem.angle = self.endAngle;\n\t\t\titem.style.webkitTransformOrigin = \"center center -\" + self.r + \"px\";\n\t\t\titem.style.webkitTransform = \"translateZ(\" + self.r + \"px) rotateX(\" + (-self.endAngle) + \"deg)\";\n\t\t\tif (andGenerateItms) {\n\t\t\t\tvar dataItem = {};\n\t\t\t\tdataItem.text = item.innerHTML || '';\n\t\t\t\tdataItem.value = item.getAttribute('data-value') || dataItem.text;\n\t\t\t\tself.items.push(dataItem);\n\t\t\t}\n\t\t});\n\t\tself.endExceed = self.endAngle + MAX_EXCEED;\n\t\tself.calcElementItemVisibility(self.beginAngle);\n\t};\n\n\tPicker.prototype.calcAngle = function(c) {\n\t\tvar self = this;\n\t\tvar a = b = parseFloat(self.r);\n\t\t//直径的整倍数部分直接乘以 180\n\t\tc = Math.abs(c); //只算角度不关心正否值\n\t\tvar intDeg = parseInt(c / self.d) * 180;\n\t\tc = c % self.d;\n\t\t//余弦\n\t\tvar cosC = (a * a + b * b - c * c) / (2 * a * b);\n\t\tvar angleC = intDeg + rad2deg(Math.acos(cosC));\n\t\treturn angleC;\n\t};\n\n\tPicker.prototype.calcElementItemVisibility = function(angle) {\n\t\tvar self = this;\n\t\tself.elementItems.forEach(function(item) {\n\t\t\tvar difference = Math.abs(item.angle - angle);\n\t\t\tif (difference < self.hightlightRange) {\n\t\t\t\titem.classList.add('highlight');\n\t\t\t} else if (difference < self.visibleRange) {\n\t\t\t\titem.classList.add('visible');\n\t\t\t\titem.classList.remove('highlight');\n\t\t\t} else {\n\t\t\t\titem.classList.remove('highlight');\n\t\t\t\titem.classList.remove('visible');\n\t\t\t}\n\t\t});\n\t};\n\n\tPicker.prototype.setAngle = function(angle) {\n\t\tvar self = this;\n\t\tself.list.angle = angle;\n\t\tself.list.style.webkitTransform = \"perspective(1000px) rotateY(0deg) rotateX(\" + angle + \"deg)\";\n\t\tself.calcElementItemVisibility(angle);\n\t};\n\n\tPicker.prototype.bindEvent = function() {\n\t\tvar self = this;\n\t\tvar lastAngle = 0;\n\t\tvar startY = null;\n\t\tvar isPicking = false;\n\t\tself.holder.addEventListener($.EVENT_START, function(event) {\n\t\t\tisPicking = true;\n\t\t\tevent.preventDefault();\n\t\t\tself.list.style.webkitTransition = '';\n\t\t\tstartY = (event.changedTouches ? event.changedTouches[0] : event).pageY;\n\t\t\tlastAngle = self.list.angle;\n\t\t\tself.updateInertiaParams(event, true);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_END, function(event) {\n\t\t\tisPicking = false;\n\t\t\tevent.preventDefault();\n\t\t\tself.startInertiaScroll(event);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_CANCEL, function(event) {\n\t\t\tisPicking = false;\n\t\t\tevent.preventDefault();\n\t\t\tself.startInertiaScroll(event);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\tif (!isPicking) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tvar endY = (event.changedTouches ? event.changedTouches[0] : event).pageY;\n\t\t\tvar dragRange = endY - startY;\n\t\t\tvar dragAngle = self.calcAngle(dragRange);\n\t\t\tvar newAngle = dragRange > 0 ? lastAngle - dragAngle : lastAngle + dragAngle;\n\t\t\tif (newAngle > self.endExceed) {\n\t\t\t\tnewAngle = self.endExceed\n\t\t\t}\n\t\t\tif (newAngle < self.beginExceed) {\n\t\t\t\tnewAngle = self.beginExceed\n\t\t\t}\n\t\t\tself.setAngle(newAngle);\n\t\t\tself.updateInertiaParams(event);\n\t\t}, false);\n\t\t//--\n\t\tself.list.addEventListener('tap', function(event) {\n\t\t\telementItem = event.target;\n\t\t\tif (elementItem.tagName == 'LI') {\n\t\t\t\tself.setSelectedIndex(self.elementItems.indexOf(elementItem), 200);\n\t\t\t}\n\t\t}, false);\n\t};\n\n\tPicker.prototype.initInertiaParams = function() {\n\t\tvar self = this;\n\t\tself.lastMoveTime = 0;\n\t\tself.lastMoveStart = 0;\n\t\tself.stopInertiaMove = false;\n\t};\n\n\tPicker.prototype.updateInertiaParams = function(event, isStart) {\n\t\tvar self = this;\n\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\tif (isStart) {\n\t\t\tself.lastMoveStart = point.pageY;\n\t\t\tself.lastMoveTime = event.timeStamp || Date.now();\n\t\t\tself.startAngle = self.list.angle;\n\t\t} else {\n\t\t\tvar nowTime = event.timeStamp || Date.now();\n\t\t\tif (nowTime - self.lastMoveTime > 300) {\n\t\t\t\tself.lastMoveTime = nowTime;\n\t\t\t\tself.lastMoveStart = point.pageY;\n\t\t\t}\n\t\t}\n\t\tself.stopInertiaMove = true;\n\t};\n\n\tPicker.prototype.startInertiaScroll = function(event) {\n\t\tvar self = this;\n\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t/** \n\t\t * 缓动代码\n\t\t */\n\t\tvar nowTime = event.timeStamp || Date.now();\n\t\tvar v = (point.pageY - self.lastMoveStart) / (nowTime - self.lastMoveTime); //最后一段时间手指划动速度  \n\t\tvar dir = v > 0 ? -1 : 1; //加速度方向  \n\t\tvar deceleration = dir * 0.0006 * -1;\n\t\tvar duration = Math.abs(v / deceleration); // 速度消减至0所需时间  \n\t\tvar dist = v * duration / 2; //最终移动多少 \n\t\tvar startAngle = self.list.angle;\n\t\tvar distAngle = self.calcAngle(dist) * dir;\n\t\t//----\n\t\tvar srcDistAngle = distAngle;\n\t\tif (startAngle + distAngle < self.beginExceed) {\n\t\t\tdistAngle = self.beginExceed - startAngle;\n\t\t\tduration = duration * (distAngle / srcDistAngle) * 0.6;\n\t\t}\n\t\tif (startAngle + distAngle > self.endExceed) {\n\t\t\tdistAngle = self.endExceed - startAngle;\n\t\t\tduration = duration * (distAngle / srcDistAngle) * 0.6;\n\t\t}\n\t\t//----\n\t\tif (distAngle == 0) {\n\t\t\tself.endScroll();\n\t\t\treturn;\n\t\t}\n\t\tself.scrollDistAngle(nowTime, startAngle, distAngle, duration);\n\t};\n\n\tPicker.prototype.scrollDistAngle = function(nowTime, startAngle, distAngle, duration) {\n\t\tvar self = this;\n\t\tself.stopInertiaMove = false;\n\t\t(function(nowTime, startAngle, distAngle, duration) {\n\t\t\tvar frameInterval = 13;\n\t\t\tvar stepCount = duration / frameInterval;\n\t\t\tvar stepIndex = 0;\n\t\t\t(function inertiaMove() {\n\t\t\t\tif (self.stopInertiaMove) return;\n\t\t\t\tvar newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\n\t\t\t\tself.setAngle(newAngle);\n\t\t\t\tstepIndex++;\n\t\t\t\tif (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\n\t\t\t\t\tself.endScroll();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetTimeout(inertiaMove, frameInterval);\n\t\t\t})();\n\t\t})(nowTime, startAngle, distAngle, duration);\n\t};\n\n\tPicker.prototype.quartEaseOut = function(t, b, c, d) {\n\t\treturn -c * ((t = t / d - 1) * t * t * t - 1) + b;\n\t};\n\n\tPicker.prototype.endScroll = function() {\n\t\tvar self = this;\n\t\tif (self.list.angle < self.beginAngle) {\n\t\t\tself.list.style.webkitTransition = \"150ms ease-out\";\n\t\t\tself.setAngle(self.beginAngle);\n\t\t} else if (self.list.angle > self.endAngle) {\n\t\t\tself.list.style.webkitTransition = \"150ms ease-out\";\n\t\t\tself.setAngle(self.endAngle);\n\t\t} else {\n\t\t\tvar index = parseInt((self.list.angle / self.itemAngle).toFixed(0));\n\t\t\tself.list.style.webkitTransition = \"100ms ease-out\";\n\t\t\tself.setAngle(self.itemAngle * index);\n\t\t}\n\t\tself.triggerChange();\n\t};\n\n\tPicker.prototype.triggerChange = function(force) {\n\t\tvar self = this;\n\t\tsetTimeout(function() {\n\t\t\tvar index = self.getSelectedIndex();\n\t\t\tvar item = self.items[index];\n\t\t\tif ($.trigger && (index != self.lastIndex || force === true)) {\n\t\t\t\t$.trigger(self.holder, 'change', {\n\t\t\t\t\t\"index\": index,\n\t\t\t\t\t\"item\": item\n\t\t\t\t});\n\t\t\t\t//console.log('change:' + index);\n\t\t\t}\n\t\t\tself.lastIndex = index;\n\t\t\ttypeof force === 'function' && force();\n\t\t}, 0);\n\t};\n\n\tPicker.prototype.correctAngle = function(angle) {\n\t\tvar self = this;\n\t\tif (angle < self.beginAngle) {\n\t\t\treturn self.beginAngle;\n\t\t} else if (angle > self.endAngle) {\n\t\t\treturn self.endAngle;\n\t\t} else {\n\t\t\treturn angle;\n\t\t}\n\t};\n\n\tPicker.prototype.setItems = function(items) {\n\t\tvar self = this;\n\t\tself.items = items || [];\n\t\tvar buffer = [];\n\t\tself.items.forEach(function(item) {\n\t\t\tif (item !== null && item !== undefined) {\n\t\t\t\tbuffer.push('<li>' + (item.text || item) + '</li>');\n\t\t\t}\n\t\t});\n\t\tself.list.innerHTML = buffer.join('');\n\t\tself.findElementItems();\n\t\tself.calcElementItemPostion();\n\t\tself.setAngle(self.correctAngle(self.list.angle));\n\t\tself.triggerChange(true);\n\t};\n\n\tPicker.prototype.getItems = function() {\n\t\tvar self = this;\n\t\treturn self.items;\n\t};\n\n\tPicker.prototype.getSelectedIndex = function() {\n\t\tvar self = this;\n\t\treturn parseInt((self.list.angle / self.itemAngle).toFixed(0));\n\t};\n\n\tPicker.prototype.setSelectedIndex = function(index, duration, callback) {\n\t\tvar self = this;\n\t\tself.list.style.webkitTransition = '';\n\t\tvar angle = self.correctAngle(self.itemAngle * index);\n\t\tif (duration && duration > 0) {\n\t\t\tvar distAngle = angle - self.list.angle;\n\t\t\tself.scrollDistAngle(Date.now(), self.list.angle, distAngle, duration);\n\t\t} else {\n\t\t\tself.setAngle(angle);\n\t\t}\n\t\tself.triggerChange(callback);\n\t};\n\n\tPicker.prototype.getSelectedItem = function() {\n\t\tvar self = this;\n\t\treturn self.items[self.getSelectedIndex()];\n\t};\n\n\tPicker.prototype.getSelectedValue = function() {\n\t\tvar self = this;\n\t\treturn (self.items[self.getSelectedIndex()] || {}).value;\n\t};\n\n\tPicker.prototype.getSelectedText = function() {\n\t\tvar self = this;\n\t\treturn (self.items[self.getSelectedIndex()] || {}).text;\n\t};\n\n\tPicker.prototype.setSelectedValue = function(value, duration, callback) {\n\t\tvar self = this;\n\t\tfor (var index in self.items) {\n\t\t\tvar item = self.items[index];\n\t\t\tif (item.value == value) {\n\t\t\t\tself.setSelectedIndex(index, duration, callback);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\n\tif ($.fn) {\n\t\t$.fn.picker = function(options) {\n\t\t\t//遍历选择的元素\n\t\t\tthis.each(function(i, element) {\n\t\t\t\tif (element.picker) return;\n\t\t\t\tif (options) {\n\t\t\t\t\telement.picker = new Picker(element, options);\n\t\t\t\t} else {\n\t\t\t\t\tvar optionsText = element.getAttribute('data-picker-options');\n\t\t\t\t\tvar _options = optionsText ? JSON.parse(optionsText) : {};\n\t\t\t\t\telement.picker = new Picker(element, _options);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn this[0] ? this[0].picker : null;\n\t\t};\n\n\t\t//自动初始化\n\t\t$.ready(function() {\n\t\t\t$('.mui-picker').picker();\n\t\t});\n\t}\n\n})(window.mui || window, window, document, undefined);\n//end\n/**\n * 弹出选择列表插件\n * 此组件依赖 listpcker ，请在页面中先引入 mui.picker.css + mui.picker.js\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar panelBuffer = '<div class=\"mui-poppicker\">\\\n\t\t<div class=\"mui-poppicker-header\">\\\n\t\t\t<button class=\"mui-btn mui-poppicker-btn-cancel\">取消</button>\\\n\t\t\t<button class=\"mui-btn mui-btn-blue mui-poppicker-btn-ok\">确定</button>\\\n\t\t\t<div class=\"mui-poppicker-clear\"></div>\\\n\t\t</div>\\\n\t\t<div class=\"mui-poppicker-body\">\\\n\t\t</div>\\\n\t</div>';\n\n\tvar pickerBuffer = '<div class=\"mui-picker\">\\\n\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t</ul>\\\n\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t</div>\\\n\t</div>';\n\n\t//定义弹出选择器类\n\tvar PopPicker = $.PopPicker = $.Class.extend({\n\t\t//构造函数\n\t\tinit: function(options) {\n\t\t\tvar self = this;\n\t\t\tself.options = options || {};\n\t\t\tself.options.buttons = self.options.buttons || ['取消', '确定'];\n\t\t\tself.panel = $.dom(panelBuffer)[0];\n\t\t\tdocument.body.appendChild(self.panel);\n\t\t\tself.ok = self.panel.querySelector('.mui-poppicker-btn-ok');\n\t\t\tself.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');\n\t\t\tself.body = self.panel.querySelector('.mui-poppicker-body');\n\t\t\tself.mask = $.createMask();\n\t\t\tself.cancel.innerText = self.options.buttons[0];\n\t\t\tself.ok.innerText = self.options.buttons[1];\n\t\t\tself.cancel.addEventListener('tap', function(event) {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself.ok.addEventListener('tap', function(event) {\n\t\t\t\tif (self.callback) {\n\t\t\t\t\tvar rs = self.callback(self.getSelectedItems());\n\t\t\t\t\tif (rs !== false) {\n\t\t\t\t\t\tself.hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tself.mask[0].addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself._createPicker();\n\t\t\t//防止滚动穿透\n\t\t\tself.panel.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t\tself.panel.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t},\n\t\t_createPicker: function() {\n\t\t\tvar self = this;\n\t\t\tvar layer = self.options.layer || 1;\n\t\t\tvar width = (100 / layer) + '%';\n\t\t\tself.pickers = [];\n\t\t\tfor (var i = 1; i <= layer; i++) {\n\t\t\t\tvar pickerElement = $.dom(pickerBuffer)[0];\n\t\t\t\tpickerElement.style.width = width;\n\t\t\t\tself.body.appendChild(pickerElement);\n\t\t\t\tvar picker = $(pickerElement).picker();\n\t\t\t\tself.pickers.push(picker);\n\t\t\t\tpickerElement.addEventListener('change', function(event) {\n\t\t\t\t\tvar nextPickerElement = this.nextSibling;\n\t\t\t\t\tif (nextPickerElement && nextPickerElement.picker) {\n\t\t\t\t\t\tvar eventData = event.detail || {};\n\t\t\t\t\t\tvar preItem = eventData.item || {};\n\t\t\t\t\t\tnextPickerElement.picker.setItems(preItem.children);\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t}\n\t\t},\n\t\t//填充数据\n\t\tsetData: function(data) {\n\t\t\tvar self = this;\n\t\t\tdata = data || [];\n\t\t\tself.pickers[0].setItems(data);\n\t\t},\n\t\t//获取选中的项（数组）\n\t\tgetSelectedItems: function() {\n\t\t\tvar self = this;\n\t\t\tvar items = [];\n\t\t\tfor (var i in self.pickers) {\n\t\t\t\tvar picker = self.pickers[i];\n\t\t\t\titems.push(picker.getSelectedItem() || {});\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\t\t//显示\n\t\tshow: function(callback) {\n\t\t\tvar self = this;\n\t\t\tself.callback = callback;\n\t\t\tself.mask.show();\n\t\t\tdocument.body.classList.add($.className('poppicker-active-for-page'));\n\t\t\tself.panel.classList.add($.className('active'));\n\t\t\t//处理物理返回键\n\t\t\tself.__back = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tself.hide();\n\t\t\t};\n\t\t},\n\t\t//隐藏\n\t\thide: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.disposed) return;\n\t\t\tself.panel.classList.remove($.className('active'));\n\t\t\tself.mask.close();\n\t\t\tdocument.body.classList.remove($.className('poppicker-active-for-page'));\n\t\t\t//处理物理返回键\n\t\t\t$.back=self.__back;\n\t\t},\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.hide();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.panel.parentNode.removeChild(self.panel);\n\t\t\t\tfor (var name in self) {\n\t\t\t\t\tself[name] = null;\n\t\t\t\t\tdelete self[name];\n\t\t\t\t};\n\t\t\t\tself.disposed = true;\n\t\t\t}, 300);\n\t\t}\n\t});\n\n})(mui, document);\n/**\n * 日期时间插件\n * varstion 1.0.5\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar domBuffer = '<div class=\"mui-dtpicker\" data-type=\"datetime\">\\\n\t\t<div class=\"mui-dtpicker-header\">\\\n\t\t\t<button data-id=\"btn-cancel\" class=\"mui-btn\">取消</button>\\\n\t\t\t<button data-id=\"btn-ok\" class=\"mui-btn mui-btn-blue\">确定</button>\\\n\t\t</div>\\\n\t\t<div class=\"mui-dtpicker-title\"><h5 data-id=\"title-y\">年</h5><h5 data-id=\"title-m\">月</h5><h5 data-id=\"title-d\">日</h5><h5 data-id=\"title-h\">时</h5><h5 data-id=\"title-i\">分</h5></div>\\\n\t\t<div class=\"mui-dtpicker-body\">\\\n\t\t\t<div data-id=\"picker-y\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-m\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-d\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-h\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-i\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t</div>\\\n\t</div>';\n\n\t//plugin\n\tvar DtPicker = $.DtPicker = $.Class.extend({\n\t\tinit: function(options) {\n\t\t\tvar self = this;\n\t\t\tvar _picker = $.dom(domBuffer)[0];\n\t\t\tdocument.body.appendChild(_picker);\n\t\t\t$('[data-id*=\"picker\"]', _picker).picker();\n\t\t\tvar ui = self.ui = {\n\t\t\t\tpicker: _picker,\n\t\t\t\tmask: $.createMask(),\n\t\t\t\tok: $('[data-id=\"btn-ok\"]', _picker)[0],\n\t\t\t\tcancel: $('[data-id=\"btn-cancel\"]', _picker)[0],\n\t\t\t\ty: $('[data-id=\"picker-y\"]', _picker)[0],\n\t\t\t\tm: $('[data-id=\"picker-m\"]', _picker)[0],\n\t\t\t\td: $('[data-id=\"picker-d\"]', _picker)[0],\n\t\t\t\th: $('[data-id=\"picker-h\"]', _picker)[0],\n\t\t\t\ti: $('[data-id=\"picker-i\"]', _picker)[0],\n\t\t\t\tlabels: $('[data-id*=\"title-\"]', _picker),\n\t\t\t};\n\t\t\tui.cancel.addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tui.ok.addEventListener('tap', function() {\n\t\t\t\tvar rs = self.callback(self.getSelected());\n\t\t\t\tif (rs !== false) {\n\t\t\t\t\tself.hide();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.y.addEventListener('change', function(e) { //目前的change事件容易导致级联触发\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) {\n\t\t\t\t\tself._createMonth();\n\t\t\t\t} else {\n\t\t\t\t\tself._createDay();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.m.addEventListener('change', function(e) {\n\t\t\t\tself._createDay();\n\t\t\t}, false);\n\t\t\tui.d.addEventListener('change', function(e) {\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) { //仅提供了beginDate时，触发day,hours,minutes的change\n\t\t\t\t\tself._createHours();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.h.addEventListener('change', function(e) {\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) {\n\t\t\t\t\tself._createMinutes();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.mask[0].addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself._create(options);\n\t\t\t//防止滚动穿透\n\t\t\tself.ui.picker.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t\tself.ui.picker.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t},\n\t\tgetSelected: function() {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tvar type = self.options.type;\n\t\t\tvar selected = {\n\t\t\t\ttype: type,\n\t\t\t\ty: ui.y.picker.getSelectedItem(),\n\t\t\t\tm: ui.m.picker.getSelectedItem(),\n\t\t\t\td: ui.d.picker.getSelectedItem(),\n\t\t\t\th: ui.h.picker.getSelectedItem(),\n\t\t\t\ti: ui.i.picker.getSelectedItem(),\n\t\t\t\ttoString: function() {\n\t\t\t\t\treturn this.value;\n\t\t\t\t}\n\t\t\t};\n\t\t\tswitch (type) {\n\t\t\t\tcase 'datetime':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'time':\n\t\t\t\t\tselected.value = selected.h.value + ':' + selected.i.value;\n\t\t\t\t\tselected.text = selected.h.text + ':' + selected.i.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'month':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'hour':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\tsetSelectedValue: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tvar parsedValue = self._parseValue(value);\n\t\t\t//TODO 嵌套过多，因为picker的change时间是异步(考虑到性能)的，所以为了保证change之后再setSelected，目前使用回调处理\n\t\t\tui.y.picker.setSelectedValue(parsedValue.y, 0, function() {\n\t\t\t\tui.m.picker.setSelectedValue(parsedValue.m, 0, function() {\n\t\t\t\t\tui.d.picker.setSelectedValue(parsedValue.d, 0, function() {\n\t\t\t\t\t\tui.h.picker.setSelectedValue(parsedValue.h, 0, function() {\n\t\t\t\t\t\t\tui.i.picker.setSelectedValue(parsedValue.i, 0);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tisLeapYear: function(year) {\n\t\t\treturn (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);\n\t\t},\n\t\t_inArray: function(array, item) {\n\t\t\tfor (var index in array) {\n\t\t\t\tvar _item = array[index];\n\t\t\t\tif (_item === item) return true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tgetDayNum: function(year, month) {\n\t\t\tvar self = this;\n\t\t\tif (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) {\n\t\t\t\treturn 31;\n\t\t\t} else if (self._inArray([4, 6, 9, 11], month)) {\n\t\t\t\treturn 30;\n\t\t\t} else if (self.isLeapYear(year)) {\n\t\t\t\treturn 29;\n\t\t\t} else {\n\t\t\t\treturn 28;\n\t\t\t}\n\t\t},\n\t\t_fill: function(num) {\n\t\t\tnum = num.toString();\n\t\t\tif (num.length < 2) {\n\t\t\t\tnum = 0 + num;\n\t\t\t}\n\t\t\treturn num;\n\t\t},\n\t\t_isBeginYear: function() {\n\t\t\treturn this.options.beginYear === parseInt(this.ui.y.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginMonth: function() {\n\t\t\treturn this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginDay: function() {\n\t\t\treturn this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginHours: function() {\n\t\t\treturn this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.picker.getSelectedValue());\n\t\t},\n\t\t_isEndYear: function() {\n\t\t\treturn this.options.endYear === parseInt(this.ui.y.picker.getSelectedValue());\n\t\t},\n\t\t_isEndMonth: function() {\n\t\t\treturn this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.picker.getSelectedValue());\n\t\t},\n\t\t_isEndDay: function() {\n\t\t\treturn this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.picker.getSelectedValue());\n\t\t},\n\t\t_isEndHours: function() {\n\t\t\treturn this._isEndDay() && this.options.endHours === parseInt(this.ui.h.picker.getSelectedValue());\n\t\t},\n\t\t_createYear: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\t//生成年列表\n\t\t\tvar yArray = [];\n\t\t\tif (options.customData.y) {\n\t\t\t\tyArray = options.customData.y;\n\t\t\t} else {\n\t\t\t\tvar yBegin = options.beginYear;\n\t\t\t\tvar yEnd = options.endYear;\n\t\t\t\tfor (var y = yBegin; y <= yEnd; y++) {\n\t\t\t\t\tyArray.push({\n\t\t\t\t\t\ttext: y + '',\n\t\t\t\t\t\tvalue: y\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.y.picker.setItems(yArray);\n\t\t\t//ui.y.picker.setSelectedValue(current);\n\t\t},\n\t\t_createMonth: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成月列表\n\t\t\tvar mArray = [];\n\t\t\tif (options.customData.m) {\n\t\t\t\tmArray = options.customData.m;\n\t\t\t} else {\n\t\t\t\tvar m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1;\n\t\t\t\tvar maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12;\n\t\t\t\tfor (; m <= maxMonth; m++) {\n\t\t\t\t\tvar val = self._fill(m);\n\t\t\t\t\tmArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.m.picker.setItems(mArray);\n\t\t\t//ui.m.picker.setSelectedValue(current);\n\t\t},\n\t\t_createDay: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成日列表\n\t\t\tvar dArray = [];\n\t\t\tif (options.customData.d) {\n\t\t\t\tdArray = options.customData.d;\n\t\t\t} else {\n\t\t\t\tvar d = self._isBeginMonth() ? options.beginDay : 1;\n\t\t\t\tvar maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.picker.getSelectedValue()), parseInt(this.ui.m.picker.getSelectedValue()));\n\t\t\t\tfor (; d <= maxDay; d++) {\n\t\t\t\t\tvar val = self._fill(d);\n\t\t\t\t\tdArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.d.picker.setItems(dArray);\n\t\t\tcurrent = current || ui.d.picker.getSelectedValue();\n\t\t\t//ui.d.picker.setSelectedValue(current);\n\t\t},\n\t\t_createHours: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\t//生成时列表\n\t\t\tvar hArray = [];\n\t\t\tif (options.customData.h) {\n\t\t\t\thArray = options.customData.h;\n\t\t\t} else {\n\t\t\t\tvar h = self._isBeginDay() ? options.beginHours : 0;\n\t\t\t\tvar maxHours = self._isEndDay() ? options.endHours : 23;\n\t\t\t\tfor (; h <= maxHours; h++) {\n\t\t\t\t\tvar val = self._fill(h);\n\t\t\t\t\thArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.h.picker.setItems(hArray);\n\t\t\t//ui.h.picker.setSelectedValue(current);\n\t\t},\n\t\t_createMinutes: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成分列表\n\t\t\tvar iArray = [];\n\t\t\tif (options.customData.i) {\n\t\t\t\tiArray = options.customData.i;\n\t\t\t} else {\n\t\t\t\tvar i = self._isBeginHours() ? options.beginMinutes : 0;\n\t\t\t\tvar maxMinutes = self._isEndHours() ? options.endMinutes : 59;\n\t\t\t\tfor (; i <= maxMinutes; i++) {\n\t\t\t\t\tvar val = self._fill(i);\n\t\t\t\t\tiArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.i.picker.setItems(iArray);\n\t\t\t//ui.i.picker.setSelectedValue(current);\n\t\t},\n\t\t_setLabels: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\tui.labels.each(function(i, label) {\n\t\t\t\tlabel.innerText = options.labels[i];\n\t\t\t});\n\t\t},\n\t\t_setButtons: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\tui.cancel.innerText = options.buttons[0];\n\t\t\tui.ok.innerText = options.buttons[1];\n\t\t},\n\t\t_parseValue: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar rs = {};\n\t\t\tif (value) {\n\t\t\t\tvar parts = value.replace(\":\", \"-\").replace(\" \", \"-\").split(\"-\");\n\t\t\t\trs.y = parts[0];\n\t\t\t\trs.m = parts[1];\n\t\t\t\trs.d = parts[2];\n\t\t\t\trs.h = parts[3];\n\t\t\t\trs.i = parts[4];\n\t\t\t} else {\n\t\t\t\tvar now = new Date();\n\t\t\t\trs.y = now.getFullYear();\n\t\t\t\trs.m = now.getMonth() + 1;\n\t\t\t\trs.d = now.getDate();\n\t\t\t\trs.h = now.getHours();\n\t\t\t\trs.i = now.getMinutes();\n\t\t\t}\n\t\t\treturn rs;\n\t\t},\n\t\t_create: function(options) {\n\t\t\tvar self = this;\n\t\t\toptions = options || {};\n\t\t\toptions.labels = options.labels || ['年', '月', '日', '时', '分'];\n\t\t\toptions.buttons = options.buttons || ['取消', '确定'];\n\t\t\toptions.type = options.type || 'datetime';\n\t\t\toptions.customData = options.customData || {};\n\t\t\tself.options = options;\n\t\t\tvar now = new Date();\n\t\t\tvar beginDate = options.beginDate;\n\t\t\tif (beginDate instanceof Date && !isNaN(beginDate.valueOf())) { //设定了开始日期\n\t\t\t\toptions.beginYear = beginDate.getFullYear();\n\t\t\t\toptions.beginMonth = beginDate.getMonth() + 1;\n\t\t\t\toptions.beginDay = beginDate.getDate();\n\t\t\t\toptions.beginHours = beginDate.getHours();\n\t\t\t\toptions.beginMinutes = beginDate.getMinutes();\n\t\t\t}\n\t\t\tvar endDate = options.endDate;\n\t\t\tif (endDate instanceof Date && !isNaN(endDate.valueOf())) { //设定了结束日期\n\t\t\t\toptions.endYear = endDate.getFullYear();\n\t\t\t\toptions.endMonth = endDate.getMonth() + 1;\n\t\t\t\toptions.endDay = endDate.getDate();\n\t\t\t\toptions.endHours = endDate.getHours();\n\t\t\t\toptions.endMinutes = endDate.getMinutes();\n\t\t\t}\n\t\t\toptions.beginYear = options.beginYear || (now.getFullYear() - 5);\n\t\t\toptions.endYear = options.endYear || (now.getFullYear() + 5);\n\t\t\tvar ui = self.ui;\n\t\t\t//设定label\n\t\t\tself._setLabels();\n\t\t\tself._setButtons();\n\t\t\t//设定类型\n\t\t\tui.picker.setAttribute('data-type', options.type);\n\t\t\t//生成\n\t\t\tself._createYear();\n\t\t\tself._createMonth();\n\t\t\tself._createDay();\n\t\t\tself._createHours();\n\t\t\tself._createMinutes();\n\t\t\t//设定默认值\n\t\t\tself.setSelectedValue(options.value);\n\t\t},\n\t\t//显示\n\t\tshow: function(callback) {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tself.callback = callback || $.noop;\n\t\t\tui.mask.show();\n\t\t\tdocument.body.classList.add($.className('dtpicker-active-for-page'));\n\t\t\tui.picker.classList.add($.className('active'));\n\t\t\t//处理物理返回键\n\t\t\tself.__back = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tself.hide();\n\t\t\t};\n\t\t},\n\t\thide: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.disposed) return;\n\t\t\tvar ui = self.ui;\n\t\t\tui.picker.classList.remove($.className('active'));\n\t\t\tui.mask.close();\n\t\t\tdocument.body.classList.remove($.className('dtpicker-active-for-page'));\n\t\t\t//处理物理返回键\n\t\t\t$.back = self.__back;\n\t\t},\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.hide();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.ui.picker.parentNode.removeChild(self.ui.picker);\n\t\t\t\tfor (var name in self) {\n\t\t\t\t\tself[name] = null;\n\t\t\t\t\tdelete self[name];\n\t\t\t\t};\n\t\t\t\tself.disposed = true;\n\t\t\t}, 300);\n\t\t}\n\t});\n\n})(mui, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.picker.js",
    "content": "/**\n * 选择列表插件\n * varstion 2.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, window, document, undefined) {\n\n\tvar MAX_EXCEED = 30;\n\tvar VISIBLE_RANGE = 90;\n\tvar DEFAULT_ITEM_HEIGHT = 40;\n\tvar BLUR_WIDTH = 10;\n\n\tvar rad2deg = $.rad2deg = function(rad) {\n\t\treturn rad / (Math.PI / 180);\n\t};\n\n\tvar deg2rad = $.deg2rad = function(deg) {\n\t\treturn deg * (Math.PI / 180);\n\t};\n\n\tvar platform = navigator.platform.toLowerCase();\n\tvar userAgent = navigator.userAgent.toLowerCase();\n\tvar isIos = (userAgent.indexOf('iphone') > -1 ||\n\t\t\tuserAgent.indexOf('ipad') > -1 ||\n\t\t\tuserAgent.indexOf('ipod') > -1) &&\n\t\t(platform.indexOf('iphone') > -1 ||\n\t\t\tplatform.indexOf('ipad') > -1 ||\n\t\t\tplatform.indexOf('ipod') > -1);\n\t//alert(isIos);\n\n\tvar Picker = $.Picker = function(holder, options) {\n\t\tvar self = this;\n\t\tself.holder = holder;\n\t\tself.options = options || {};\n\t\tself.init();\n\t\tself.initInertiaParams();\n\t\tself.calcElementItemPostion(true);\n\t\tself.bindEvent();\n\t};\n\n\tPicker.prototype.findElementItems = function() {\n\t\tvar self = this;\n\t\tself.elementItems = [].slice.call(self.holder.querySelectorAll('li'));\n\t\treturn self.elementItems;\n\t};\n\n\tPicker.prototype.init = function() {\n\t\tvar self = this;\n\t\tself.list = self.holder.querySelector('ul');\n\t\tself.findElementItems();\n\t\tself.height = self.holder.offsetHeight;\n\t\tself.r = self.height / 2 - BLUR_WIDTH;\n\t\tself.d = self.r * 2;\n\t\tself.itemHeight = self.elementItems.length > 0 ? self.elementItems[0].offsetHeight : DEFAULT_ITEM_HEIGHT;\n\t\tself.itemAngle = parseInt(self.calcAngle(self.itemHeight * 0.8));\n\t\tself.hightlightRange = self.itemAngle / 2;\n\t\tself.visibleRange = VISIBLE_RANGE;\n\t\tself.beginAngle = 0;\n\t\tself.beginExceed = self.beginAngle - MAX_EXCEED;\n\t\tself.list.angle = self.beginAngle;\n\t\tif (isIos) {\n\t\t\tself.list.style.webkitTransformOrigin = \"center center \" + self.r + \"px\";\n\t\t}\n\t};\n\n\tPicker.prototype.calcElementItemPostion = function(andGenerateItms) {\n\t\tvar self = this;\n\t\tif (andGenerateItms) {\n\t\t\tself.items = [];\n\t\t}\n\t\tself.elementItems.forEach(function(item) {\n\t\t\tvar index = self.elementItems.indexOf(item);\n\t\t\tself.endAngle = self.itemAngle * index;\n\t\t\titem.angle = self.endAngle;\n\t\t\titem.style.webkitTransformOrigin = \"center center -\" + self.r + \"px\";\n\t\t\titem.style.webkitTransform = \"translateZ(\" + self.r + \"px) rotateX(\" + (-self.endAngle) + \"deg)\";\n\t\t\tif (andGenerateItms) {\n\t\t\t\tvar dataItem = {};\n\t\t\t\tdataItem.text = item.innerHTML || '';\n\t\t\t\tdataItem.value = item.getAttribute('data-value') || dataItem.text;\n\t\t\t\tself.items.push(dataItem);\n\t\t\t}\n\t\t});\n\t\tself.endExceed = self.endAngle + MAX_EXCEED;\n\t\tself.calcElementItemVisibility(self.beginAngle);\n\t};\n\n\tPicker.prototype.calcAngle = function(c) {\n\t\tvar self = this;\n\t\tvar a = b = parseFloat(self.r);\n\t\t//直径的整倍数部分直接乘以 180\n\t\tc = Math.abs(c); //只算角度不关心正否值\n\t\tvar intDeg = parseInt(c / self.d) * 180;\n\t\tc = c % self.d;\n\t\t//余弦\n\t\tvar cosC = (a * a + b * b - c * c) / (2 * a * b);\n\t\tvar angleC = intDeg + rad2deg(Math.acos(cosC));\n\t\treturn angleC;\n\t};\n\n\tPicker.prototype.calcElementItemVisibility = function(angle) {\n\t\tvar self = this;\n\t\tself.elementItems.forEach(function(item) {\n\t\t\tvar difference = Math.abs(item.angle - angle);\n\t\t\tif (difference < self.hightlightRange) {\n\t\t\t\titem.classList.add('highlight');\n\t\t\t} else if (difference < self.visibleRange) {\n\t\t\t\titem.classList.add('visible');\n\t\t\t\titem.classList.remove('highlight');\n\t\t\t} else {\n\t\t\t\titem.classList.remove('highlight');\n\t\t\t\titem.classList.remove('visible');\n\t\t\t}\n\t\t});\n\t};\n\n\tPicker.prototype.setAngle = function(angle) {\n\t\tvar self = this;\n\t\tself.list.angle = angle;\n\t\tself.list.style.webkitTransform = \"perspective(1000px) rotateY(0deg) rotateX(\" + angle + \"deg)\";\n\t\tself.calcElementItemVisibility(angle);\n\t};\n\n\tPicker.prototype.bindEvent = function() {\n\t\tvar self = this;\n\t\tvar lastAngle = 0;\n\t\tvar startY = null;\n\t\tvar isPicking = false;\n\t\tself.holder.addEventListener($.EVENT_START, function(event) {\n\t\t\tisPicking = true;\n\t\t\tevent.preventDefault();\n\t\t\tself.list.style.webkitTransition = '';\n\t\t\tstartY = (event.changedTouches ? event.changedTouches[0] : event).pageY;\n\t\t\tlastAngle = self.list.angle;\n\t\t\tself.updateInertiaParams(event, true);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_END, function(event) {\n\t\t\tisPicking = false;\n\t\t\tevent.preventDefault();\n\t\t\tself.startInertiaScroll(event);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_CANCEL, function(event) {\n\t\t\tisPicking = false;\n\t\t\tevent.preventDefault();\n\t\t\tself.startInertiaScroll(event);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\tif (!isPicking) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tvar endY = (event.changedTouches ? event.changedTouches[0] : event).pageY;\n\t\t\tvar dragRange = endY - startY;\n\t\t\tvar dragAngle = self.calcAngle(dragRange);\n\t\t\tvar newAngle = dragRange > 0 ? lastAngle - dragAngle : lastAngle + dragAngle;\n\t\t\tif (newAngle > self.endExceed) {\n\t\t\t\tnewAngle = self.endExceed\n\t\t\t}\n\t\t\tif (newAngle < self.beginExceed) {\n\t\t\t\tnewAngle = self.beginExceed\n\t\t\t}\n\t\t\tself.setAngle(newAngle);\n\t\t\tself.updateInertiaParams(event);\n\t\t}, false);\n\t\t//--\n\t\tself.list.addEventListener('tap', function(event) {\n\t\t\telementItem = event.target;\n\t\t\tif (elementItem.tagName == 'LI') {\n\t\t\t\tself.setSelectedIndex(self.elementItems.indexOf(elementItem), 200);\n\t\t\t}\n\t\t}, false);\n\t};\n\n\tPicker.prototype.initInertiaParams = function() {\n\t\tvar self = this;\n\t\tself.lastMoveTime = 0;\n\t\tself.lastMoveStart = 0;\n\t\tself.stopInertiaMove = false;\n\t};\n\n\tPicker.prototype.updateInertiaParams = function(event, isStart) {\n\t\tvar self = this;\n\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\tif (isStart) {\n\t\t\tself.lastMoveStart = point.pageY;\n\t\t\tself.lastMoveTime = event.timeStamp || Date.now();\n\t\t\tself.startAngle = self.list.angle;\n\t\t} else {\n\t\t\tvar nowTime = event.timeStamp || Date.now();\n\t\t\tif (nowTime - self.lastMoveTime > 300) {\n\t\t\t\tself.lastMoveTime = nowTime;\n\t\t\t\tself.lastMoveStart = point.pageY;\n\t\t\t}\n\t\t}\n\t\tself.stopInertiaMove = true;\n\t};\n\n\tPicker.prototype.startInertiaScroll = function(event) {\n\t\tvar self = this;\n\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t/** \n\t\t * 缓动代码\n\t\t */\n\t\tvar nowTime = event.timeStamp || Date.now();\n\t\tvar v = (point.pageY - self.lastMoveStart) / (nowTime - self.lastMoveTime); //最后一段时间手指划动速度  \n\t\tvar dir = v > 0 ? -1 : 1; //加速度方向  \n\t\tvar deceleration = dir * 0.0006 * -1;\n\t\tvar duration = Math.abs(v / deceleration); // 速度消减至0所需时间  \n\t\tvar dist = v * duration / 2; //最终移动多少 \n\t\tvar startAngle = self.list.angle;\n\t\tvar distAngle = self.calcAngle(dist) * dir;\n\t\t//----\n\t\tvar srcDistAngle = distAngle;\n\t\tif (startAngle + distAngle < self.beginExceed) {\n\t\t\tdistAngle = self.beginExceed - startAngle;\n\t\t\tduration = duration * (distAngle / srcDistAngle) * 0.6;\n\t\t}\n\t\tif (startAngle + distAngle > self.endExceed) {\n\t\t\tdistAngle = self.endExceed - startAngle;\n\t\t\tduration = duration * (distAngle / srcDistAngle) * 0.6;\n\t\t}\n\t\t//----\n\t\tif (distAngle == 0) {\n\t\t\tself.endScroll();\n\t\t\treturn;\n\t\t}\n\t\tself.scrollDistAngle(nowTime, startAngle, distAngle, duration);\n\t};\n\n\tPicker.prototype.scrollDistAngle = function(nowTime, startAngle, distAngle, duration) {\n\t\tvar self = this;\n\t\tself.stopInertiaMove = false;\n\t\t(function(nowTime, startAngle, distAngle, duration) {\n\t\t\tvar frameInterval = 13;\n\t\t\tvar stepCount = duration / frameInterval;\n\t\t\tvar stepIndex = 0;\n\t\t\t(function inertiaMove() {\n\t\t\t\tif (self.stopInertiaMove) return;\n\t\t\t\tvar newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\n\t\t\t\tself.setAngle(newAngle);\n\t\t\t\tstepIndex++;\n\t\t\t\tif (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\n\t\t\t\t\tself.endScroll();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetTimeout(inertiaMove, frameInterval);\n\t\t\t})();\n\t\t})(nowTime, startAngle, distAngle, duration);\n\t};\n\n\tPicker.prototype.quartEaseOut = function(t, b, c, d) {\n\t\treturn -c * ((t = t / d - 1) * t * t * t - 1) + b;\n\t};\n\n\tPicker.prototype.endScroll = function() {\n\t\tvar self = this;\n\t\tif (self.list.angle < self.beginAngle) {\n\t\t\tself.list.style.webkitTransition = \"150ms ease-out\";\n\t\t\tself.setAngle(self.beginAngle);\n\t\t} else if (self.list.angle > self.endAngle) {\n\t\t\tself.list.style.webkitTransition = \"150ms ease-out\";\n\t\t\tself.setAngle(self.endAngle);\n\t\t} else {\n\t\t\tvar index = parseInt((self.list.angle / self.itemAngle).toFixed(0));\n\t\t\tself.list.style.webkitTransition = \"100ms ease-out\";\n\t\t\tself.setAngle(self.itemAngle * index);\n\t\t}\n\t\tself.triggerChange();\n\t};\n\n\tPicker.prototype.triggerChange = function(force) {\n\t\tvar self = this;\n\t\tsetTimeout(function() {\n\t\t\tvar index = self.getSelectedIndex();\n\t\t\tvar item = self.items[index];\n\t\t\tif ($.trigger && (index != self.lastIndex || force === true)) {\n\t\t\t\t$.trigger(self.holder, 'change', {\n\t\t\t\t\t\"index\": index,\n\t\t\t\t\t\"item\": item\n\t\t\t\t});\n\t\t\t\t//console.log('change:' + index);\n\t\t\t}\n\t\t\tself.lastIndex = index;\n\t\t\ttypeof force === 'function' && force();\n\t\t}, 0);\n\t};\n\n\tPicker.prototype.correctAngle = function(angle) {\n\t\tvar self = this;\n\t\tif (angle < self.beginAngle) {\n\t\t\treturn self.beginAngle;\n\t\t} else if (angle > self.endAngle) {\n\t\t\treturn self.endAngle;\n\t\t} else {\n\t\t\treturn angle;\n\t\t}\n\t};\n\n\tPicker.prototype.setItems = function(items) {\n\t\tvar self = this;\n\t\tself.items = items || [];\n\t\tvar buffer = [];\n\t\tself.items.forEach(function(item) {\n\t\t\tif (item !== null && item !== undefined) {\n\t\t\t\tbuffer.push('<li>' + (item.text || item) + '</li>');\n\t\t\t}\n\t\t});\n\t\tself.list.innerHTML = buffer.join('');\n\t\tself.findElementItems();\n\t\tself.calcElementItemPostion();\n\t\tself.setAngle(self.correctAngle(self.list.angle));\n\t\tself.triggerChange(true);\n\t};\n\n\tPicker.prototype.getItems = function() {\n\t\tvar self = this;\n\t\treturn self.items;\n\t};\n\n\tPicker.prototype.getSelectedIndex = function() {\n\t\tvar self = this;\n\t\treturn parseInt((self.list.angle / self.itemAngle).toFixed(0));\n\t};\n\n\tPicker.prototype.setSelectedIndex = function(index, duration, callback) {\n\t\tvar self = this;\n\t\tself.list.style.webkitTransition = '';\n\t\tvar angle = self.correctAngle(self.itemAngle * index);\n\t\tif (duration && duration > 0) {\n\t\t\tvar distAngle = angle - self.list.angle;\n\t\t\tself.scrollDistAngle(Date.now(), self.list.angle, distAngle, duration);\n\t\t} else {\n\t\t\tself.setAngle(angle);\n\t\t}\n\t\tself.triggerChange(callback);\n\t};\n\n\tPicker.prototype.getSelectedItem = function() {\n\t\tvar self = this;\n\t\treturn self.items[self.getSelectedIndex()];\n\t};\n\n\tPicker.prototype.getSelectedValue = function() {\n\t\tvar self = this;\n\t\treturn (self.items[self.getSelectedIndex()] || {}).value;\n\t};\n\n\tPicker.prototype.getSelectedText = function() {\n\t\tvar self = this;\n\t\treturn (self.items[self.getSelectedIndex()] || {}).text;\n\t};\n\n\tPicker.prototype.setSelectedValue = function(value, duration, callback) {\n\t\tvar self = this;\n\t\tfor (var index in self.items) {\n\t\t\tvar item = self.items[index];\n\t\t\tif (item.value == value) {\n\t\t\t\tself.setSelectedIndex(index, duration, callback);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\n\tif ($.fn) {\n\t\t$.fn.picker = function(options) {\n\t\t\t//遍历选择的元素\n\t\t\tthis.each(function(i, element) {\n\t\t\t\tif (element.picker) return;\n\t\t\t\tif (options) {\n\t\t\t\t\telement.picker = new Picker(element, options);\n\t\t\t\t} else {\n\t\t\t\t\tvar optionsText = element.getAttribute('data-picker-options');\n\t\t\t\t\tvar _options = optionsText ? JSON.parse(optionsText) : {};\n\t\t\t\t\telement.picker = new Picker(element, _options);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn this[0] ? this[0].picker : null;\n\t\t};\n\n\t\t//自动初始化\n\t\t$.ready(function() {\n\t\t\t$('.mui-picker').picker();\n\t\t});\n\t}\n\n})(window.mui || window, window, document, undefined);\n//end"
  },
  {
    "path": "examples/hello-mui/js/mui.poppicker.js",
    "content": "/**\n * 弹出选择列表插件\n * 此组件依赖 listpcker ，请在页面中先引入 mui.picker.css + mui.picker.js\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar panelBuffer = '<div class=\"mui-poppicker\">\\\n\t\t<div class=\"mui-poppicker-header\">\\\n\t\t\t<button class=\"mui-btn mui-poppicker-btn-cancel\">取消</button>\\\n\t\t\t<button class=\"mui-btn mui-btn-blue mui-poppicker-btn-ok\">确定</button>\\\n\t\t\t<div class=\"mui-poppicker-clear\"></div>\\\n\t\t</div>\\\n\t\t<div class=\"mui-poppicker-body\">\\\n\t\t</div>\\\n\t</div>';\n\n\tvar pickerBuffer = '<div class=\"mui-picker\">\\\n\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t</ul>\\\n\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t</div>\\\n\t</div>';\n\n\t//定义弹出选择器类\n\tvar PopPicker = $.PopPicker = $.Class.extend({\n\t\t//构造函数\n\t\tinit: function(options) {\n\t\t\tvar self = this;\n\t\t\tself.options = options || {};\n\t\t\tself.options.buttons = self.options.buttons || ['取消', '确定'];\n\t\t\tself.panel = $.dom(panelBuffer)[0];\n\t\t\tdocument.body.appendChild(self.panel);\n\t\t\tself.ok = self.panel.querySelector('.mui-poppicker-btn-ok');\n\t\t\tself.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');\n\t\t\tself.body = self.panel.querySelector('.mui-poppicker-body');\n\t\t\tself.mask = $.createMask();\n\t\t\tself.cancel.innerText = self.options.buttons[0];\n\t\t\tself.ok.innerText = self.options.buttons[1];\n\t\t\tself.cancel.addEventListener('tap', function(event) {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself.ok.addEventListener('tap', function(event) {\n\t\t\t\tif (self.callback) {\n\t\t\t\t\tvar rs = self.callback(self.getSelectedItems());\n\t\t\t\t\tif (rs !== false) {\n\t\t\t\t\t\tself.hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tself.mask[0].addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself._createPicker();\n\t\t\t//防止滚动穿透\n\t\t\tself.panel.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t\tself.panel.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t},\n\t\t_createPicker: function() {\n\t\t\tvar self = this;\n\t\t\tvar layer = self.options.layer || 1;\n\t\t\tvar width = (100 / layer) + '%';\n\t\t\tself.pickers = [];\n\t\t\tfor (var i = 1; i <= layer; i++) {\n\t\t\t\tvar pickerElement = $.dom(pickerBuffer)[0];\n\t\t\t\tpickerElement.style.width = width;\n\t\t\t\tself.body.appendChild(pickerElement);\n\t\t\t\tvar picker = $(pickerElement).picker();\n\t\t\t\tself.pickers.push(picker);\n\t\t\t\tpickerElement.addEventListener('change', function(event) {\n\t\t\t\t\tvar nextPickerElement = this.nextSibling;\n\t\t\t\t\tif (nextPickerElement && nextPickerElement.picker) {\n\t\t\t\t\t\tvar eventData = event.detail || {};\n\t\t\t\t\t\tvar preItem = eventData.item || {};\n\t\t\t\t\t\tnextPickerElement.picker.setItems(preItem.children);\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t}\n\t\t},\n\t\t//填充数据\n\t\tsetData: function(data) {\n\t\t\tvar self = this;\n\t\t\tdata = data || [];\n\t\t\tself.pickers[0].setItems(data);\n\t\t},\n\t\t//获取选中的项（数组）\n\t\tgetSelectedItems: function() {\n\t\t\tvar self = this;\n\t\t\tvar items = [];\n\t\t\tfor (var i in self.pickers) {    \n\t\t\t\tif(self.pickers.hasOwnProperty(i)) { // 修复for in会访问继承属性造成items报错情况\n\t\t\t\t\tvar picker = self.pickers[i];\n\t\t\t\t\titems.push(picker.getSelectedItem() || {});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\t\t//显示\n\t\tshow: function(callback) {\n\t\t\tvar self = this;\n\t\t\tself.callback = callback;\n\t\t\tself.mask.show();\n\t\t\tdocument.body.classList.add($.className('poppicker-active-for-page'));\n\t\t\tself.panel.classList.add($.className('active'));\n\t\t\t//处理物理返回键\n\t\t\tself.__back = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tself.hide();\n\t\t\t};\n\t\t},\n\t\t//隐藏\n\t\thide: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.disposed) return;\n\t\t\tself.panel.classList.remove($.className('active'));\n\t\t\tself.mask.close();\n\t\t\tdocument.body.classList.remove($.className('poppicker-active-for-page'));\n\t\t\t//处理物理返回键\n\t\t\t$.back=self.__back;\n\t\t},\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.hide();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.panel.parentNode.removeChild(self.panel);\n\t\t\t\tfor (var name in self) {\n\t\t\t\t\tself[name] = null;\n\t\t\t\t\tdelete self[name];\n\t\t\t\t};\n\t\t\t\tself.disposed = true;\n\t\t\t}, 300);\n\t\t}\n\t});\n\n})(mui, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.previewimage.js",
    "content": "(function($, window) {\n\n\tvar template = '<div id=\"{{id}}\" class=\"mui-slider mui-preview-image mui-fullscreen\"><div class=\"mui-preview-header\">{{header}}</div><div class=\"mui-slider-group\"></div><div class=\"mui-preview-footer mui-hidden\">{{footer}}</div><div class=\"mui-preview-loading\"><span class=\"mui-spinner mui-spinner-white\"></span></div></div>';\n\tvar itemTemplate = '<div class=\"mui-slider-item mui-zoom-wrapper {{className}}\"><div class=\"mui-zoom-scroller\"><img src=\"{{src}}\" data-preview-lazyload=\"{{lazyload}}\" style=\"{{style}}\" class=\"mui-zoom\"></div></div>';\n\tvar defaultGroupName = '__DEFAULT';\n\tvar div = document.createElement('div');\n\tvar imgId = 0;\n\tvar PreviewImage = function(options) {\n\t\tthis.options = $.extend(true, {\n\t\t\tid: '__MUI_PREVIEWIMAGE',\n\t\t\tzoom: true,\n\t\t\theader: '<span class=\"mui-preview-indicator\"></span>',\n\t\t\tfooter: ''\n\t\t}, options || {});\n\t\tthis.init();\n\t\tthis.initEvent();\n\t};\n\tvar proto = PreviewImage.prototype;\n\tproto.init = function() {\n\t\tvar options = this.options;\n\t\tvar el = document.getElementById(this.options.id);\n\t\tif (!el) {\n\t\t\tdiv.innerHTML = template.replace(/\\{\\{id\\}\\}/g, this.options.id).replace('{{header}}', options.header).replace('{{footer}}', options.footer);\n\t\t\tdocument.body.appendChild(div.firstElementChild);\n\t\t\tel = document.getElementById(this.options.id);\n\t\t}\n\n\t\tthis.element = el;\n\t\tthis.scroller = this.element.querySelector($.classSelector('.slider-group'));\n\t\tthis.indicator = this.element.querySelector($.classSelector('.preview-indicator'));\n\t\tthis.loader = this.element.querySelector($.classSelector('.preview-loading'));\n\t\tif (options.footer) {\n\t\t\tthis.element.querySelector($.classSelector('.preview-footer')).classList.remove($.className('hidden'));\n\t\t}\n\t\tthis.addImages();\n\t};\n\tproto.initEvent = function() {\n\t\tvar self = this;\n\t\t$(document.body).on('tap', 'img[data-preview-src]', function() {\n\t\t\tself.open(this);\n\t\t\treturn false;\n\t\t});\n\t\tvar laterClose = null;\n\t\tvar laterCloseEvent = function() {\n\t\t\t!laterClose && (laterClose = $.later(function() {\n\t\t\t\tself.loader.removeEventListener('tap', laterCloseEvent);\n\t\t\t\tself.scroller.removeEventListener('tap', laterCloseEvent);\n\t\t\t\tself.close();\n\t\t\t}, 300));\n\t\t};\n\t\tthis.scroller.addEventListener('doubletap', function() {\n\t\t\tif (laterClose) {\n\t\t\t\tlaterClose.cancel();\n\t\t\t\tlaterClose = null;\n\t\t\t}\n\t\t});\n\t\tthis.element.addEventListener('webkitAnimationEnd', function() {\n\t\t\tif (self.element.classList.contains($.className('preview-out'))) { //close\n\t\t\t\tself.element.style.display = 'none';\n\t\t\t\tself.element.classList.remove($.className('preview-out'));\n\t\t\t\tself.element.classList.remove($.className('preview-in'));\n\t\t\t\tlaterClose = null;\n\t\t\t} else { //open\n\t\t\t\tself.loader.addEventListener('tap', laterCloseEvent);\n\t\t\t\tself.scroller.addEventListener('tap', laterCloseEvent);\n\t\t\t}\n\t\t});\n\t\tthis.element.addEventListener('slide', function(e) {\n\t\t\tif (self.options.zoom) {\n\t\t\t\tvar lastZoomerEl = self.element.querySelector('.mui-zoom-wrapper:nth-child(' + (self.lastIndex + 1) + ')');\n\t\t\t\tif (lastZoomerEl) {\n\t\t\t\t\t$(lastZoomerEl).zoom().setZoom(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar slideNumber = e.detail.slideNumber;\n\t\t\tself.lastIndex = slideNumber;\n\t\t\tself.indicator && (self.indicator.innerText = (slideNumber + 1) + '/' + self.currentGroup.length);\n\t\t\tself._loadItem(slideNumber);\n\n\t\t});\n\t};\n\tproto.addImages = function(group, index) {\n\t\tthis.groups = {};\n\t\tvar imgs = [];\n\t\tif (group) {\n\t\t\tif (group === defaultGroupName) {\n\t\t\t\timgs = document.querySelectorAll(\"img[data-preview-src]:not([data-preview-group])\");\n\t\t\t} else {\n\t\t\t\timgs = document.querySelectorAll(\"img[data-preview-src][data-preview-group='\" + group + \"']\");\n\t\t\t}\n\t\t} else {\n\t\t\timgs = document.querySelectorAll(\"img[data-preview-src]\");\n\t\t}\n\t\tif (imgs.length) {\n\t\t\tfor (var i = 0, len = imgs.length; i < len; i++) {\n\t\t\t\tthis.addImage(imgs[i]);\n\t\t\t}\n\t\t}\n\t};\n\tproto.addImage = function(img) {\n\t\tvar group = img.getAttribute('data-preview-group');\n\t\tgroup = group || defaultGroupName;\n\t\tif (!this.groups[group]) {\n\t\t\tthis.groups[group] = [];\n\t\t}\n\t\tvar src = img.getAttribute('src');\n\t\tif (img.__mui_img_data && img.__mui_img_data.src === src) { //已缓存且图片未变化\n\t\t\tthis.groups[group].push(img.__mui_img_data);\n\t\t} else {\n\t\t\tvar lazyload = img.getAttribute('data-preview-src');\n\t\t\tif (!lazyload) {\n\t\t\t\tlazyload = src;\n\t\t\t}\n\t\t\tvar imgObj = {\n\t\t\t\tsrc: src,\n\t\t\t\tlazyload: src === lazyload ? '' : lazyload,\n\t\t\t\tloaded: src === lazyload ? true : false,\n\t\t\t\tsWidth: 0,\n\t\t\t\tsHeight: 0,\n\t\t\t\tsTop: 0,\n\t\t\t\tsLeft: 0,\n\t\t\t\tsScale: 1,\n\t\t\t\tel: img\n\t\t\t};\n\t\t\tthis.groups[group].push(imgObj);\n\t\t\timg.__mui_img_data = imgObj;\n\t\t}\n\t};\n\n\n\tproto.empty = function() {\n\t\tthis.scroller.innerHTML = '';\n\t};\n\tproto._initImgData = function(itemData, imgEl) {\n\t\tif (!itemData.sWidth) {\n\t\t\tvar img = itemData.el;\n\t\t\titemData.sWidth = img.offsetWidth;\n\t\t\titemData.sHeight = img.offsetHeight;\n\t\t\tvar offset = $.offset(img);\n\t\t\titemData.sTop = offset.top;\n\t\t\titemData.sLeft = offset.left;\n\t\t\titemData.sScale = Math.max(itemData.sWidth / window.innerWidth, itemData.sHeight / window.innerHeight);\n\t\t}\n\t\timgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';\n\t};\n\n\tproto._getScale = function(from, to) {\n\t\tvar scaleX = from.width / to.width;\n\t\tvar scaleY = from.height / to.height;\n\t\tvar scale = 1;\n\t\tif (scaleX <= scaleY) {\n\t\t\tscale = from.height / (to.height * scaleX);\n\t\t} else {\n\t\t\tscale = from.width / (to.width * scaleY);\n\t\t}\n\t\treturn scale;\n\t};\n\tproto._imgTransitionEnd = function(e) {\n\t\tvar img = e.target;\n\t\timg.classList.remove($.className('transitioning'));\n\t\timg.removeEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this));\n\t};\n\tproto._loadItem = function(index, isOpening) { //TODO 暂时仅支持img\n\t\tvar itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')'));\n\t\tvar itemData = this.currentGroup[index];\n\t\tvar imgEl = itemEl.querySelector('img');\n\t\tthis._initImgData(itemData, imgEl);\n\t\tif (isOpening) {\n\t\t\tvar posi = this._getPosition(itemData);\n\t\t\timgEl.style.webkitTransitionDuration = '0ms';\n\t\t\timgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')';\n\t\t\timgEl.offsetHeight;\n\t\t}\n\t\tif (!itemData.loaded && imgEl.getAttribute('data-preview-lazyload')) {\n\t\t\tvar self = this;\n\t\t\tself.loader.classList.add($.className('active'));\n\t\t\t//移动位置动画\n\t\t\timgEl.style.webkitTransitionDuration = '0.5s';\n\t\t\timgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self));\n\t\t\timgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';\n\t\t\tthis.loadImage(imgEl, function() {\n\t\t\t\titemData.loaded = true;\n\t\t\t\timgEl.src = itemData.lazyload;\n\t\t\t\tself._initZoom(itemEl, this.width, this.height);\n\t\t\t\timgEl.classList.add($.className('transitioning'));\n\t\t\t\timgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self));\n\t\t\t\timgEl.setAttribute('style', '');\n\t\t\t\timgEl.offsetHeight;\n\t\t\t\tself.loader.classList.remove($.className('active'));\n\t\t\t});\n\t\t} else {\n\t\t\titemData.lazyload && (imgEl.src = itemData.lazyload);\n\t\t\tthis._initZoom(itemEl, imgEl.width, imgEl.height);\n\t\t\timgEl.classList.add($.className('transitioning'));\n\t\t\timgEl.addEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this));\n\t\t\timgEl.setAttribute('style', '');\n\t\t\timgEl.offsetHeight;\n\t\t}\n\t\tthis._preloadItem(index + 1);\n\t\tthis._preloadItem(index - 1);\n\t};\n\tproto._preloadItem = function(index) {\n\t\tvar itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')'));\n\t\tif (itemEl) {\n\t\t\tvar itemData = this.currentGroup[index];\n\t\t\tif (!itemData.sWidth) {\n\t\t\t\tvar imgEl = itemEl.querySelector('img');\n\t\t\t\tthis._initImgData(itemData, imgEl);\n\t\t\t}\n\t\t}\n\t};\n\tproto._initZoom = function(zoomWrapperEl, zoomerWidth, zoomerHeight) {\n\t\tif (!this.options.zoom) {\n\t\t\treturn;\n\t\t}\n\t\tif (zoomWrapperEl.getAttribute('data-zoomer')) {\n\t\t\treturn;\n\t\t}\n\t\tvar zoomEl = zoomWrapperEl.querySelector($.classSelector('.zoom'));\n\t\tif (zoomEl.tagName === 'IMG') {\n\t\t\tvar self = this;\n\t\t\tvar maxZoom = self._getScale({\n\t\t\t\twidth: zoomWrapperEl.offsetWidth,\n\t\t\t\theight: zoomWrapperEl.offsetHeight\n\t\t\t}, {\n\t\t\t\twidth: zoomerWidth,\n\t\t\t\theight: zoomerHeight\n\t\t\t});\n\t\t\t$(zoomWrapperEl).zoom({\n\t\t\t\tmaxZoom: Math.max(maxZoom, 1)\n\t\t\t});\n\t\t} else {\n\t\t\t$(zoomWrapperEl).zoom();\n\t\t}\n\t};\n\tproto.loadImage = function(imgEl, callback) {\n\t\tvar onReady = function() {\n\t\t\tcallback && callback.call(this);\n\t\t};\n\t\tvar img = new Image();\n\t\timg.onload = onReady;\n\t\timg.onerror = onReady;\n\t\timg.src = imgEl.getAttribute('data-preview-lazyload');\n\t};\n\tproto.getRangeByIndex = function(index, length) {\n\t\treturn {\n\t\t\tfrom: 0,\n\t\t\tto: length - 1\n\t\t};\n\t\t//\t\tvar from = Math.max(index - 1, 0);\n\t\t//\t\tvar to = Math.min(index + 1, length);\n\t\t//\t\tif (index === length - 1) {\n\t\t//\t\t\tfrom = Math.max(length - 3, 0);\n\t\t//\t\t\tto = length - 1;\n\t\t//\t\t}\n\t\t//\t\tif (index === 0) {\n\t\t//\t\t\tfrom = 0;\n\t\t//\t\t\tto = Math.min(2, length - 1);\n\t\t//\t\t}\n\t\t//\t\treturn {\n\t\t//\t\t\tfrom: from,\n\t\t//\t\t\tto: to\n\t\t//\t\t};\n\t};\n\n\tproto._getPosition = function(itemData) {\n\t\tvar sLeft = itemData.sLeft - window.pageXOffset;\n\t\tvar sTop = itemData.sTop - window.pageYOffset;\n\t\tvar left = (window.innerWidth - itemData.sWidth) / 2;\n\t\tvar top = (window.innerHeight - itemData.sHeight) / 2;\n\t\treturn {\n\t\t\tleft: sLeft,\n\t\t\ttop: sTop,\n\t\t\tx: sLeft - left,\n\t\t\ty: sTop - top\n\t\t};\n\t};\n\tproto.refresh = function(index, groupArray) {\n\t\tthis.currentGroup = groupArray;\n\t\t//重新生成slider\n\t\tvar length = groupArray.length;\n\t\tvar itemHtml = [];\n\t\tvar currentRange = this.getRangeByIndex(index, length);\n\t\tvar from = currentRange.from;\n\t\tvar to = currentRange.to + 1;\n\t\tvar currentIndex = index;\n\t\tvar className = '';\n\t\tvar itemStr = '';\n\t\tvar wWidth = window.innerWidth;\n\t\tvar wHeight = window.innerHeight;\n\t\tfor (var i = 0; from < to; from++, i++) {\n\t\t\tvar itemData = groupArray[from];\n\t\t\tvar style = '';\n\t\t\tif (itemData.sWidth) {\n\t\t\t\tstyle = '-webkit-transform:translate3d(0,0,0) scale(' + itemData.sScale + ');transform:translate3d(0,0,0) scale(' + itemData.sScale + ')';\n\t\t\t}\n\t\t\titemStr = itemTemplate.replace('{{src}}', itemData.src).replace('{{lazyload}}', itemData.lazyload).replace('{{style}}', style);\n\t\t\tif (from === index) {\n\t\t\t\tcurrentIndex = i;\n\t\t\t\tclassName = $.className('active');\n\t\t\t} else {\n\t\t\t\tclassName = '';\n\t\t\t}\n\t\t\titemHtml.push(itemStr.replace('{{className}}', className));\n\t\t}\n\t\tthis.scroller.innerHTML = itemHtml.join('');\n\t\tthis.element.style.display = 'block';\n\t\tthis.element.classList.add($.className('preview-in'));\n\t\tthis.lastIndex = currentIndex;\n\t\tthis.element.offsetHeight;\n\t\t$(this.element).slider().gotoItem(currentIndex, 0);\n\t\tthis.indicator && (this.indicator.innerText = (currentIndex + 1) + '/' + this.currentGroup.length);\n\t\tthis._loadItem(currentIndex, true);\n\t};\n\tproto.openByGroup = function(index, group) {\n\t\tindex = Math.min(Math.max(0, index), this.groups[group].length - 1);\n\t\tthis.refresh(index, this.groups[group]);\n\t};\n\tproto.open = function(index, group) {\n\t\tif (this.isShown()) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof index === \"number\") {\n\t\t\tgroup = group || defaultGroupName;\n\t\t\tthis.addImages(group, index); //刷新当前group\n\t\t\tthis.openByGroup(index, group);\n\t\t} else {\n\t\t\tgroup = index.getAttribute('data-preview-group');\n\t\t\tgroup = group || defaultGroupName;\n\t\t\tthis.addImages(group, index); //刷新当前group\n\t\t\tthis.openByGroup(this.groups[group].indexOf(index.__mui_img_data), group);\n\t\t}\n\t};\n\tproto.close = function(index, group) {\n\t\tif (!this.isShown()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.element.classList.remove($.className('preview-in'));\n\t\tthis.element.classList.add($.className('preview-out'));\n\t\tvar itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (this.lastIndex + 1) + ')'));\n\t\tvar imgEl = itemEl.querySelector('img');\n\t\tif (imgEl) {\n\t\t\timgEl.classList.add($.className('transitioning'));\n\t\t\tvar itemData = this.currentGroup[this.lastIndex];\n\t\t\tvar posi = this._getPosition(itemData);\n\t\t\tvar sLeft = posi.left;\n\t\t\tvar sTop = posi.top;\n\t\t\tif (sTop > window.innerHeight || sLeft > window.innerWidth || sTop < 0 || sLeft < 0) { //out viewport\n\t\t\t\timgEl.style.opacity = 0;\n\t\t\t\timgEl.style.webkitTransitionDuration = '0.5s';\n\t\t\t\timgEl.style.webkitTransform = 'scale(' + itemData.sScale + ')';\n\t\t\t} else {\n\t\t\t\tif (this.options.zoom) {\n\t\t\t\t\t$(imgEl.parentNode.parentNode).zoom().toggleZoom(0);\n\t\t\t\t}\n\t\t\t\timgEl.style.webkitTransitionDuration = '0.5s';\n\t\t\t\timgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')';\n\t\t\t}\n\t\t}\n\t\tvar zoomers = this.element.querySelectorAll($.classSelector('.zoom-wrapper'));\n\t\tfor (var i = 0, len = zoomers.length; i < len; i++) {\n\t\t\t$(zoomers[i]).zoom().destroy();\n\t\t}\n\t\t$(this.element).slider().destroy();\n//\t\tthis.empty();\n\t};\n\tproto.isShown = function() {\n\t\treturn this.element.classList.contains($.className('preview-in'));\n\t};\n\n\tvar previewImageApi = null;\n\t$.previewImage = function(options) {\n\t\tif (!previewImageApi) {\n\t\t\tpreviewImageApi = new PreviewImage(options);\n\t\t}\n\t\treturn previewImageApi;\n\t};\n\t$.getPreviewImage = function() {\n\t\treturn previewImageApi;\n\t}\n\n})(mui, window);"
  },
  {
    "path": "examples/hello-mui/js/mui.pullToRefresh.js",
    "content": "(function($, window, document) {\n\tvar STATE_BEFORECHANGEOFFSET = 'beforeChangeOffset';\n\tvar STATE_AFTERCHANGEOFFSET = 'afterChangeOffset';\n\n\tvar EVENT_PULLSTART = 'pullstart';\n\tvar EVENT_PULLING = 'pulling';\n\tvar EVENT_BEFORECHANGEOFFSET = STATE_BEFORECHANGEOFFSET;\n\tvar EVENT_AFTERCHANGEOFFSET = STATE_AFTERCHANGEOFFSET;\n\tvar EVENT_DRAGENDAFTERCHANGEOFFSET = 'dragEndAfterChangeOffset';\n\n\tvar CLASS_TRANSITIONING = $.className('transitioning');\n\tvar CLASS_PULL_TOP_TIPS = $.className('pull-top-tips');\n\tvar CLASS_PULL_BOTTOM_TIPS = $.className('pull-bottom-tips');\n\tvar CLASS_PULL_LOADING = $.className('pull-loading');\n\tvar CLASS_SCROLL = $.className('scroll');\n\n\tvar CLASS_PULL_TOP_ARROW = $.className('pull-loading') + ' ' + $.className('icon') + ' ' + $.className('icon-pulldown');\n\tvar CLASS_PULL_TOP_ARROW_REVERSE = CLASS_PULL_TOP_ARROW + ' ' + $.className('reverse');\n\tvar CLASS_PULL_TOP_SPINNER = $.className('pull-loading') + ' ' + $.className('spinner');\n\tvar CLASS_HIDDEN = $.className('hidden');\n\n\tvar SELECTOR_PULL_LOADING = '.' + CLASS_PULL_LOADING;\n\t$.PullToRefresh = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.element = element;\n\t\t\tthis.options = $.extend(true, {\n\t\t\t\tdown: {\n\t\t\t\t\theight: 75,\n\t\t\t\t\tcallback: false,\n\t\t\t\t},\n\t\t\t\tup: {\n\t\t\t\t\tauto: false,\n\t\t\t\t\toffset: 100, //距离底部高度(到达该高度即触发)\n\t\t\t\t\tshow: true,\n\t\t\t\t\tcontentinit: '上拉显示更多',\n\t\t\t\t\tcontentdown: '上拉显示更多',\n\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\tcontentnomore: '没有更多数据了',\n\t\t\t\t\tcallback: false\n\t\t\t\t},\n\t\t\t\tpreventDefaultException: {\n\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/\n\t\t\t\t}\n\t\t\t}, options);\n\t\t\tthis.stopped = this.isNeedRefresh = this.isDragging = false;\n\t\t\tthis.state = STATE_BEFORECHANGEOFFSET;\n\t\t\tthis.isInScroll = this.element.classList.contains(CLASS_SCROLL);\n\t\t\tthis.initPullUpTips();\n\n\t\t\tthis.initEvent();\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tinitEvent: function() {\n\t\t\tif ($.isFunction(this.options.down.callback)) {\n\t\t\t\tthis.element.addEventListener($.EVENT_START, this);\n\t\t\t\tthis.element.addEventListener('drag', this);\n\t\t\t\tthis.element.addEventListener('dragend', this);\n\t\t\t}\n\t\t\tif (this.pullUpTips) {\n\t\t\t\tthis.element.addEventListener('dragup', this);\n\t\t\t\tif (this.isInScroll) {\n\t\t\t\t\tthis.element.addEventListener('scrollbottom', this);\n\t\t\t\t} else {\n\t\t\t\t\twindow.addEventListener('scroll', this);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\tthis.isInScroll && this._canPullDown() && e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis._drag(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis._dragend(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd':\n\t\t\t\t\tthis._transitionEnd(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragup':\n\t\t\t\tcase 'scroll':\n\t\t\t\t\tthis._dragup(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollbottom':\n\t\t\t\t\tif (e.target === this.element) {\n\t\t\t\t\t\tthis.pullUpLoading(e);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tinitPullDownTips: function() {\n\t\t\tvar self = this;\n\t\t\tif ($.isFunction(self.options.down.callback)) {\n\t\t\t\tself.pullDownTips = (function() {\n\t\t\t\t\tvar element = document.querySelector('.' + CLASS_PULL_TOP_TIPS);\n\t\t\t\t\tif (element) {\n\t\t\t\t\t\telement.parentNode.removeChild(element);\n\t\t\t\t\t}\n\t\t\t\t\tif (!element) {\n\t\t\t\t\t\telement = document.createElement('div');\n\t\t\t\t\t\telement.classList.add(CLASS_PULL_TOP_TIPS);\n\t\t\t\t\t\telement.innerHTML = '<div class=\"mui-pull-top-wrapper\"><span class=\"mui-pull-loading mui-icon mui-icon-pulldown\"></span></div>';\n\t\t\t\t\t\telement.addEventListener('webkitTransitionEnd', self);\n\t\t\t\t\t}\n\t\t\t\t\tself.pullDownTipsIcon = element.querySelector(SELECTOR_PULL_LOADING);\n\t\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\treturn element;\n\t\t\t\t}());\n\t\t\t}\n\t\t},\n\t\tinitPullUpTips: function() {\n\t\t\tvar self = this;\n\t\t\tif ($.isFunction(self.options.up.callback)) {\n\t\t\t\tself.pullUpTips = (function() {\n\t\t\t\t\tvar element = self.element.querySelector('.' + CLASS_PULL_BOTTOM_TIPS);\n\t\t\t\t\tif (!element) {\n\t\t\t\t\t\telement = document.createElement('div');\n\t\t\t\t\t\telement.classList.add(CLASS_PULL_BOTTOM_TIPS);\n\t\t\t\t\t\tif (!self.options.up.show) {\n\t\t\t\t\t\t\telement.classList.add(CLASS_HIDDEN);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.innerHTML = '<div class=\"mui-pull-bottom-wrapper\"><span class=\"mui-pull-loading\">' + self.options.up.contentinit + '</span></div>';\n\t\t\t\t\t\tself.element.appendChild(element);\n\t\t\t\t\t}\n\t\t\t\t\tself.pullUpTipsIcon = element.querySelector(SELECTOR_PULL_LOADING);\n\t\t\t\t\treturn element;\n\t\t\t\t}());\n\t\t\t}\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target === this.pullDownTips && this.removing) {\n\t\t\t\tthis.removePullDownTips();\n\t\t\t}\n\t\t},\n\t\t_dragup: function(e) {\n\t\t\tvar self = this;\n\t\t\tif (self.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e && e.detail && $.gestures.session.drag) {\n\t\t\t\tself.isDraggingUp = true;\n\t\t\t} else {\n\t\t\t\tif (!self.isDraggingUp) { //scroll event\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self.isDragging) {\n\t\t\t\tif (self._canPullUp()) {\n\t\t\t\t\tself.pullUpLoading(e);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_canPullUp: function() {\n\t\t\tif (this.removing) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this.isInScroll) {\n\t\t\t\tvar scrollId = this.element.parentNode.getAttribute('data-scroll');\n\t\t\t\tif (scrollId) {\n\t\t\t\t\tvar scrollApi = $.data[scrollId];\n\t\t\t\t\treturn scrollApi.y === scrollApi.maxScrollY;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn window.pageYOffset + window.innerHeight + this.options.up.offset >= document.documentElement.scrollHeight;\n\t\t},\n\t\t_canPullDown: function() {\n\t\t\tif (this.removing) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this.isInScroll) {\n\t\t\t\tvar scrollId = this.element.parentNode.getAttribute('data-scroll');\n\t\t\t\tif (scrollId) {\n\t\t\t\t\tvar scrollApi = $.data[scrollId];\n\t\t\t\t\treturn scrollApi.y === 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn document.body.scrollTop === 0;\n\t\t},\n\t\t_drag: function(e) {\n\t\t\tif (this.loading || this.stopped) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tif (!this.isDragging) {\n\t\t\t\tif (detail.direction === 'down' && this._canPullDown()) {\n\t\t\t\t\tif (document.querySelector('.' + CLASS_PULL_TOP_TIPS)) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.isDragging = true;\n\t\t\t\t\tthis.removing = false;\n\t\t\t\t\tthis.startDeltaY = detail.deltaY;\n\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\tthis._pullStart(this.startDeltaY);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.isDragging) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t\tvar deltaY = detail.deltaY - this.startDeltaY;\n\t\t\t\tdeltaY = Math.min(deltaY, 1.5 * this.options.down.height);\n\t\t\t\tthis.deltaY = deltaY;\n\t\t\t\tthis._pulling(deltaY);\n\t\t\t\tvar state = deltaY > this.options.down.height ? STATE_AFTERCHANGEOFFSET : STATE_BEFORECHANGEOFFSET;\n\t\t\t\tif (this.state !== state) {\n\t\t\t\t\tthis.state = state;\n\t\t\t\t\tif (this.state === STATE_AFTERCHANGEOFFSET) {\n\t\t\t\t\t\tthis.removing = false;\n\t\t\t\t\t\tthis.isNeedRefresh = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.removing = true;\n\t\t\t\t\t\tthis.isNeedRefresh = false;\n\t\t\t\t\t}\n\t\t\t\t\tthis['_' + state](deltaY);\n\t\t\t\t}\n\t\t\t\tif ($.os.ios && parseFloat($.os.version) >= 8) {\n\t\t\t\t\tvar clientY = detail.gesture.touches[0].clientY;\n\t\t\t\t\tif ((clientY + 10) > window.innerHeight || clientY < 10) {\n\t\t\t\t\t\tthis._dragend(e);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_dragend: function(e) {\n\t\t\tvar self = this;\n\t\t\tif (self.isDragging) {\n\t\t\t\tself.isDragging = false;\n\t\t\t\tself._dragEndAfterChangeOffset(self.isNeedRefresh);\n\t\t\t}\n\t\t\tif (self.isPullingUp) {\n\t\t\t\tif (self.pullingUpTimeout) {\n\t\t\t\t\tclearTimeout(self.pullingUpTimeout);\n\t\t\t\t}\n\t\t\t\tself.pullingUpTimeout = setTimeout(function() {\n\t\t\t\t\tself.isPullingUp = false;\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t},\n\t\t_pullStart: function(startDeltaY) {\n\t\t\tthis.pullStart(startDeltaY);\n\t\t\t$.trigger(this.element, EVENT_PULLSTART, {\n\t\t\t\tapi: this,\n\t\t\t\tstartDeltaY: startDeltaY\n\t\t\t});\n\t\t},\n\t\t_pulling: function(deltaY) {\n\t\t\tthis.pulling(deltaY);\n\t\t\t$.trigger(this.element, EVENT_PULLING, {\n\t\t\t\tapi: this,\n\t\t\t\tdeltaY: deltaY\n\t\t\t});\n\t\t},\n\t\t_beforeChangeOffset: function(deltaY) {\n\t\t\tthis.beforeChangeOffset(deltaY);\n\t\t\t$.trigger(this.element, EVENT_BEFORECHANGEOFFSET, {\n\t\t\t\tapi: this,\n\t\t\t\tdeltaY: deltaY\n\t\t\t});\n\t\t},\n\t\t_afterChangeOffset: function(deltaY) {\n\t\t\tthis.afterChangeOffset(deltaY);\n\t\t\t$.trigger(this.element, EVENT_AFTERCHANGEOFFSET, {\n\t\t\t\tapi: this,\n\t\t\t\tdeltaY: deltaY\n\t\t\t});\n\t\t},\n\t\t_dragEndAfterChangeOffset: function(isNeedRefresh) {\n\t\t\tthis.dragEndAfterChangeOffset(isNeedRefresh);\n\t\t\t$.trigger(this.element, EVENT_DRAGENDAFTERCHANGEOFFSET, {\n\t\t\t\tapi: this,\n\t\t\t\tisNeedRefresh: isNeedRefresh\n\t\t\t});\n\t\t},\n\t\tremovePullDownTips: function() {\n\t\t\tif (this.pullDownTips) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.pullDownTips.parentNode && this.pullDownTips.parentNode.removeChild(this.pullDownTips);\n\t\t\t\t\tthis.pullDownTips = null;\n\t\t\t\t\tthis.removing = false;\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\t\t},\n\t\tpullStart: function(startDeltaY) {\n\t\t\tthis.initPullDownTips(startDeltaY);\n\t\t},\n\t\tpulling: function(deltaY) {\n\t\t\tthis.pullDownTips.style.webkitTransform = 'translate3d(0,' + deltaY + 'px,0)';\n\t\t},\n\t\tbeforeChangeOffset: function(deltaY) {\n\t\t\tthis.pullDownTipsIcon.className = CLASS_PULL_TOP_ARROW;\n\t\t},\n\t\tafterChangeOffset: function(deltaY) {\n\t\t\tthis.pullDownTipsIcon.className = CLASS_PULL_TOP_ARROW_REVERSE;\n\t\t},\n\t\tdragEndAfterChangeOffset: function(isNeedRefresh) {\n\t\t\tif (isNeedRefresh) {\n\t\t\t\tthis.pullDownTipsIcon.className = CLASS_PULL_TOP_SPINNER;\n\t\t\t\tthis.pullDownLoading();\n\t\t\t} else {\n\t\t\t\tthis.pullDownTipsIcon.className = CLASS_PULL_TOP_ARROW;\n\t\t\t\tthis.endPullDownToRefresh();\n\t\t\t}\n\t\t},\n\t\tpullDownLoading: function() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.pullDownTips) {\n\t\t\t\tthis.initPullDownTips();\n\t\t\t\tthis.dragEndAfterChangeOffset(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.loading = true;\n\t\t\tthis.pullDownTips.classList.add(CLASS_TRANSITIONING);\n\t\t\tthis.pullDownTips.style.webkitTransform = 'translate3d(0,' + this.options.down.height + 'px,0)';\n\t\t\tthis.options.down.callback.apply(this);\n\t\t},\n\t\tpullUpLoading: function(e) {\n\t\t\tif (this.loading || this.finished) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.loading = true;\n\t\t\tthis.isDraggingUp = false;\n\t\t\tthis.pullUpTips.classList.remove(CLASS_HIDDEN);\n\t\t\te && e.detail && e.detail.gesture && e.detail.gesture.preventDefault();\n\t\t\tthis.pullUpTipsIcon.innerHTML = this.options.up.contentrefresh;\n\t\t\tthis.options.up.callback.apply(this);\n\t\t},\n\t\tendPullDownToRefresh: function() {\n\t\t\tthis.loading = false;\n\t\t\tthis.pullUpTips && this.pullUpTips.classList.remove(CLASS_HIDDEN);\n\t\t\tthis.pullDownTips.classList.add(CLASS_TRANSITIONING);\n\t\t\tthis.pullDownTips.style.webkitTransform = 'translate3d(0,0,0)';\n\t\t\tif (this.deltaY <= 0) {\n\t\t\t\tthis.removePullDownTips();\n\t\t\t} else {\n\t\t\t\tthis.removing = true;\n\t\t\t}\n\t\t\tif (this.isInScroll) {\n\t\t\t\t$(this.element.parentNode).scroll().refresh();\n\t\t\t}\n\t\t},\n\t\tendPullUpToRefresh: function(finished) {\n\t\t\tif (finished) {\n\t\t\t\tthis.finished = true;\n\t\t\t\tthis.pullUpTipsIcon.innerHTML = this.options.up.contentnomore;\n\t\t\t\tthis.element.removeEventListener('dragup', this);\n\t\t\t\twindow.removeEventListener('scroll', this);\n\t\t\t} else {\n\t\t\t\tthis.pullUpTipsIcon.innerHTML = this.options.up.contentdown;\n\t\t\t}\n\t\t\tthis.loading = false;\n\t\t\tif (this.isInScroll) {\n\t\t\t\t$(this.element.parentNode).scroll().refresh();\n\t\t\t}\n\t\t},\n\t\tsetStopped: function(stopped) {\n\t\t\tif (stopped != this.stopped) {\n\t\t\t\tthis.stopped = stopped;\n\t\t\t\tthis.pullUpTips && this.pullUpTips.classList[stopped ? 'add' : 'remove'](CLASS_HIDDEN);\n\t\t\t}\n\t\t},\n\t\trefresh: function(isReset) {\n\t\t\tif (isReset && this.finished && this.pullUpTipsIcon) {\n\t\t\t\tthis.pullUpTipsIcon.innerHTML = this.options.up.contentdown;\n\t\t\t\tthis.element.addEventListener('dragup', this);\n\t\t\t\twindow.addEventListener('scroll', this);\n\t\t\t\tthis.finished = false;\n\t\t\t}\n\t\t}\n\t});\n\t$.fn.pullToRefresh = function(options) {\n\t\tvar pullRefreshApis = [];\n\t\toptions = options || {};\n\t\tthis.each(function() {\n\t\t\tvar self = this;\n\t\t\tvar pullRefreshApi = null;\n\t\t\tvar id = self.getAttribute('data-pullToRefresh');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = pullRefreshApi = new $.PullToRefresh(self, options);\n\t\t\t\tself.setAttribute('data-pullToRefresh', id);\n\t\t\t} else {\n\t\t\t\tpullRefreshApi = $.data[id];\n\t\t\t}\n\t\t\tif (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n\t\t\t\tpullRefreshApi.pullUpLoading();\n\t\t\t}\n\t\t\tpullRefreshApis.push(pullRefreshApi);\n\t\t});\n\t\treturn pullRefreshApis.length === 1 ? pullRefreshApis[0] : pullRefreshApis;\n\t}\n})(mui, window, document);"
  },
  {
    "path": "examples/hello-mui/js/mui.pullToRefresh.material.js",
    "content": "(function($) {\n\tvar CLASS_PULL_TOP_TIPS = $.className('pull-top-tips');\n\n\t$.PullToRefresh = $.PullToRefresh.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis._super(element, options);\n\t\t\tthis.options = $.extend(true, {\n\t\t\t\tdown: {\n\t\t\t\t\ttips: {\n\t\t\t\t\t\tcolors: ['008000', 'd8ad44', 'd00324', 'dc00b8', '017efc'],\n\t\t\t\t\t\tsize: 200, //width=height=size;x=y=size/2;radius=size/4\n\t\t\t\t\t\tlineWidth: 15,\n\t\t\t\t\t\tduration: 1000,\n\t\t\t\t\t\ttail_duration: 1000 * 2.5\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this.options);\n\t\t\tthis.options.down.tips.color = this.options.down.tips.colors[0];\n\t\t\tthis.options.down.tips.colors = this.options.down.tips.colors.map(function(color) {\n\t\t\t\treturn {\n\t\t\t\t\tr: parseInt(color.substring(0, 2), 16),\n\t\t\t\t\tg: parseInt(color.substring(2, 4), 16),\n\t\t\t\t\tb: parseInt(color.substring(4, 6), 16)\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tinitPullDownTips: function() {\n\t\t\tvar self = this;\n\t\t\tif ($.isFunction(self.options.down.callback)) {\n\t\t\t\tself.pullDownTips = (function() {\n\t\t\t\t\tvar element = document.querySelector('.' + CLASS_PULL_TOP_TIPS);\n\t\t\t\t\tif (element) {\n\t\t\t\t\t\telement.parentNode.removeChild(element);\n\t\t\t\t\t}\n\t\t\t\t\tif (!element) {\n\t\t\t\t\t\telement = document.createElement('div');\n\t\t\t\t\t\telement.classList.add(CLASS_PULL_TOP_TIPS);\n\t\t\t\t\t\telement.innerHTML = '<div class=\"mui-pull-top-wrapper\"><div class=\"mui-pull-top-canvas\"><canvas id=\"pullDownTips\" width=\"' + self.options.down.tips.size + '\" height=\"' + self.options.down.tips.size + '\"></canvas></div></div>';\n\t\t\t\t\t\telement.addEventListener('webkitTransitionEnd', self);\n\t\t\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\t}\n\t\t\t\t\tself.pullDownCanvas = document.getElementById(\"pullDownTips\");\n\t\t\t\t\tself.pullDownCanvasCtx = self.pullDownCanvas.getContext('2d');\n\t\t\t\t\tself.canvasUtils.init(self.pullDownCanvas, self.options.down.tips);\n\t\t\t\t\treturn element;\n\t\t\t\t}());\n\t\t\t}\n\t\t},\n\t\tremovePullDownTips: function() {\n\t\t\tthis._super();\n\t\t\tthis.canvasUtils.stopSpin();\n\t\t},\n\t\tpulling: function(deltaY) {\n\t\t\tvar ratio = Math.min(deltaY / (this.options.down.height * 1.5), 1);\n\t\t\tvar ratioPI = Math.min(1, ratio * 2);\n\t\t\tthis.pullDownTips.style.webkitTransform = 'translate3d(0,' + (deltaY < 0 ? 0 : deltaY) + 'px,0)';\n\t\t\tthis.pullDownCanvas.style.opacity = ratioPI;\n\t\t\tthis.pullDownCanvas.style.webkitTransform = 'rotate(' + 300 * ratio + 'deg)';\n\t\t\tvar canvas = this.pullDownCanvas;\n\t\t\tvar ctx = this.pullDownCanvasCtx;\n\t\t\tvar size = this.options.down.tips.size;\n\t\t\tctx.lineWidth = this.options.down.tips.lineWidth;\n\t\t\tctx.fillStyle = '#' + this.options.down.tips.color;\n\t\t\tctx.strokeStyle = '#' + this.options.down.tips.color;\n\t\t\tctx.stroke();\n\t\t\tctx.clearRect(0, 0, size, size);\n\t\t\t//fixed android 4.1.x\n\t\t\tcanvas.style.display = 'none'; // Detach from DOM\n\t\t\tcanvas.offsetHeight; // Force the detach\n\t\t\tcanvas.style.display = 'inherit'; // Reattach to DOM\n\t\t\tthis.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);\n\t\t},\n\n\t\tbeforeChangeOffset: function(deltaY) {},\n\t\tafterChangeOffset: function(deltaY) {},\n\t\tdragEndAfterChangeOffset: function(isNeedRefresh) {\n\t\t\tif (isNeedRefresh) {\n\t\t\t\tthis.canvasUtils.startSpin();\n\t\t\t\tthis.pullDownLoading();\n\t\t\t} else {\n\t\t\t\tthis.canvasUtils.stopSpin();\n\t\t\t\tthis.endPullDownToRefresh();\n\t\t\t}\n\t\t},\n\t\tcanvasUtils: (function() {\n\t\t\tvar canvasObj = null,\n\t\t\t\tctx = null,\n\t\t\t\tsize = 200,\n\t\t\t\tlineWidth = 15,\n\t\t\t\ttick = 0,\n\t\t\t\tstartTime = 0,\n\t\t\t\tframeTime = 0,\n\t\t\t\ttimeLast = 0,\n\t\t\t\toldStep = 0,\n\t\t\t\tacc = 0,\n\t\t\t\thead = 0,\n\t\t\t\ttail = 180,\n\t\t\t\trad = Math.PI / 180,\n\t\t\t\tduration = 1000,\n\t\t\t\ttail_duration = 1000 * 2.5,\n\t\t\t\tcolors = ['35ad0e', 'd8ad44', 'd00324', 'dc00b8', '017efc'],\n\t\t\t\trAF = null;\n\n\t\t\tfunction easeLinear(currentIteration, startValue, changeInValue, totalIterations) {\n\t\t\t\treturn changeInValue * currentIteration / totalIterations + startValue;\n\t\t\t}\n\n\t\t\tfunction easeInOutQuad(currentIteration, startValue, changeInValue, totalIterations) {\n\t\t\t\tif ((currentIteration /= totalIterations / 2) < 1) {\n\t\t\t\t\treturn changeInValue / 2 * currentIteration * currentIteration + startValue;\n\t\t\t\t}\n\t\t\t\treturn -changeInValue / 2 * ((--currentIteration) * (currentIteration - 2) - 1) + startValue;\n\t\t\t}\n\n\t\t\tfunction minmax(value, v0, v1) {\n\t\t\t\tvar min = Math.min(v0, v1);\n\t\t\t\tvar max = Math.max(v0, v1);\n\t\t\t\tif (value < min)\n\t\t\t\t\treturn min;\n\t\t\t\tif (value > max)\n\t\t\t\t\treturn min;\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tvar drawHead = function(ctx, x0, y0, x1, y1, x2, y2, style) {\n\t\t\t\t'use strict';\n\t\t\t\tif (typeof(x0) == 'string') x0 = parseInt(x0);\n\t\t\t\tif (typeof(y0) == 'string') y0 = parseInt(y0);\n\t\t\t\tif (typeof(x1) == 'string') x1 = parseInt(x1);\n\t\t\t\tif (typeof(y1) == 'string') y1 = parseInt(y1);\n\t\t\t\tif (typeof(x2) == 'string') x2 = parseInt(x2);\n\t\t\t\tif (typeof(y2) == 'string') y2 = parseInt(y2);\n\t\t\t\tvar radius = 3;\n\t\t\t\tvar twoPI = 2 * Math.PI;\n\t\t\t\tctx.save();\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(x0, y0);\n\t\t\t\tctx.lineTo(x1, y1);\n\t\t\t\tctx.lineTo(x2, y2);\n\t\t\t\tswitch (style) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tvar backdist = Math.sqrt(((x2 - x0) * (x2 - x0)) + ((y2 - y0) * (y2 - y0)));\n\t\t\t\t\t\tctx.arcTo(x1, y1, x0, y0, .55 * backdist);\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tctx.moveTo(x0, y0);\n\t\t\t\t\t\tctx.lineTo(x1, y1);\n\t\t\t\t\t\tctx.lineTo(x2, y2);\n\t\t\t\t\t\tctx.lineTo(x0, y0);\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tvar cpx = (x0 + x1 + x2) / 3;\n\t\t\t\t\t\tvar cpy = (y0 + y1 + y2) / 3;\n\t\t\t\t\t\tctx.quadraticCurveTo(cpx, cpy, x0, y0);\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tvar cp1x, cp1y, cp2x, cp2y, backdist;\n\t\t\t\t\t\tvar shiftamt = 5;\n\t\t\t\t\t\tif (x2 == x0) {\n\t\t\t\t\t\t\tbackdist = y2 - y0;\n\t\t\t\t\t\t\tcp1x = (x1 + x0) / 2;\n\t\t\t\t\t\t\tcp2x = (x1 + x0) / 2;\n\t\t\t\t\t\t\tcp1y = y1 + backdist / shiftamt;\n\t\t\t\t\t\t\tcp2y = y1 - backdist / shiftamt;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbackdist = Math.sqrt(((x2 - x0) * (x2 - x0)) + ((y2 - y0) * (y2 - y0)));\n\t\t\t\t\t\t\tvar xback = (x0 + x2) / 2;\n\t\t\t\t\t\t\tvar yback = (y0 + y2) / 2;\n\t\t\t\t\t\t\tvar xmid = (xback + x1) / 2;\n\t\t\t\t\t\t\tvar ymid = (yback + y1) / 2;\n\t\t\t\t\t\t\tvar m = (y2 - y0) / (x2 - x0);\n\t\t\t\t\t\t\tvar dx = (backdist / (2 * Math.sqrt(m * m + 1))) / shiftamt;\n\t\t\t\t\t\t\tvar dy = m * dx;\n\t\t\t\t\t\t\tcp1x = xmid - dx;\n\t\t\t\t\t\t\tcp1y = ymid - dy;\n\t\t\t\t\t\t\tcp2x = xmid + dx;\n\t\t\t\t\t\t\tcp2y = ymid + dy;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x0, y0);\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tctx.restore();\n\t\t\t};\n\t\t\tvar drawArcedArrow = function(ctx, x, y, r, startangle, endangle, anticlockwise, style, which, angle, d, lineWidth, lineRatio) {\n\t\t\t\t'use strict';\n\t\t\t\tstyle = typeof(style) != 'undefined' ? style : 3;\n\t\t\t\twhich = typeof(which) != 'undefined' ? which : 1;\n\t\t\t\tangle = typeof(angle) != 'undefined' ? angle : Math.PI / 8;\n\t\t\t\tlineWidth = lineWidth || 1;\n\t\t\t\tlineRatio = lineRatio || 10;\n\t\t\t\td = typeof(d) != 'undefined' ? d : 10;\n\t\t\t\tctx.save();\n\t\t\t\tctx.lineWidth = lineWidth;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(x, y, r, startangle, endangle, anticlockwise);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar sx, sy, lineangle, destx, desty;\n\t\t\t\tif (which & 1) {\n\t\t\t\t\tsx = Math.cos(startangle) * r + x;\n\t\t\t\t\tsy = Math.sin(startangle) * r + y;\n\t\t\t\t\tlineangle = Math.atan2(x - sx, sy - y);\n\t\t\t\t\tif (anticlockwise) {\n\t\t\t\t\t\tdestx = sx + 10 * Math.cos(lineangle);\n\t\t\t\t\t\tdesty = sy + 10 * Math.sin(lineangle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdestx = sx - 10 * Math.cos(lineangle);\n\t\t\t\t\t\tdesty = sy - 10 * Math.sin(lineangle);\n\t\t\t\t\t}\n\t\t\t\t\tdrawArrow(ctx, sx, sy, destx, desty, style, 2, angle, d);\n\t\t\t\t}\n\t\t\t\tif (which & 2) {\n\t\t\t\t\tsx = Math.cos(endangle) * r + x;\n\t\t\t\t\tsy = Math.sin(endangle) * r + y;\n\t\t\t\t\tlineangle = Math.atan2(x - sx, sy - y);\n\t\t\t\t\tif (anticlockwise) {\n\t\t\t\t\t\tdestx = sx - 10 * Math.cos(lineangle);\n\t\t\t\t\t\tdesty = sy - 10 * Math.sin(lineangle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdestx = sx + 10 * Math.cos(lineangle);\n\t\t\t\t\t\tdesty = sy + 10 * Math.sin(lineangle);\n\t\t\t\t\t}\n\t\t\t\t\tdrawArrow(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)\n\t\t\t\t}\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t\tvar drawArrow = function(ctx, x1, y1, x2, y2, style, which, angle, d) {\n\t\t\t\t'use strict';\n\t\t\t\tif (typeof(x1) == 'string') x1 = parseInt(x1);\n\t\t\t\tif (typeof(y1) == 'string') y1 = parseInt(y1);\n\t\t\t\tif (typeof(x2) == 'string') x2 = parseInt(x2);\n\t\t\t\tif (typeof(y2) == 'string') y2 = parseInt(y2);\n\t\t\t\tstyle = typeof(style) != 'undefined' ? style : 3;\n\t\t\t\twhich = typeof(which) != 'undefined' ? which : 1;\n\t\t\t\tangle = typeof(angle) != 'undefined' ? angle : Math.PI / 8;\n\t\t\t\td = typeof(d) != 'undefined' ? d : 10;\n\t\t\t\tvar toDrawHead = typeof(style) != 'function' ? drawHead : style;\n\t\t\t\tvar dist = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n\t\t\t\tvar ratio = (dist - d / 3) / dist;\n\t\t\t\tvar tox, toy, fromx, fromy;\n\t\t\t\tif (which & 1) {\n\t\t\t\t\ttox = Math.round(x1 + (x2 - x1) * ratio);\n\t\t\t\t\ttoy = Math.round(y1 + (y2 - y1) * ratio);\n\t\t\t\t} else {\n\t\t\t\t\ttox = x2;\n\t\t\t\t\ttoy = y2;\n\t\t\t\t}\n\t\t\t\tif (which & 2) {\n\t\t\t\t\tfromx = x1 + (x2 - x1) * (1 - ratio);\n\t\t\t\t\tfromy = y1 + (y2 - y1) * (1 - ratio);\n\t\t\t\t} else {\n\t\t\t\t\tfromx = x1;\n\t\t\t\t\tfromy = y1;\n\t\t\t\t}\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(fromx, fromy);\n\t\t\t\tctx.lineTo(tox, toy);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar lineangle = Math.atan2(y2 - y1, x2 - x1);\n\t\t\t\tvar h = Math.abs(d / Math.cos(angle));\n\t\t\t\tif (which & 1) {\n\t\t\t\t\tvar angle1 = lineangle + Math.PI + angle;\n\t\t\t\t\tvar topx = x2 + Math.cos(angle1) * h;\n\t\t\t\t\tvar topy = y2 + Math.sin(angle1) * h;\n\t\t\t\t\tvar angle2 = lineangle + Math.PI - angle;\n\t\t\t\t\tvar botx = x2 + Math.cos(angle2) * h;\n\t\t\t\t\tvar boty = y2 + Math.sin(angle2) * h;\n\t\t\t\t\ttoDrawHead(ctx, topx, topy, x2, y2, botx, boty, style);\n\t\t\t\t}\n\t\t\t\tif (which & 2) {\n\t\t\t\t\tvar angle1 = lineangle + angle;\n\t\t\t\t\tvar topx = x1 + Math.cos(angle1) * h;\n\t\t\t\t\tvar topy = y1 + Math.sin(angle1) * h;\n\t\t\t\t\tvar angle2 = lineangle - angle;\n\t\t\t\t\tvar botx = x1 + Math.cos(angle2) * h;\n\t\t\t\t\tvar boty = y1 + Math.sin(angle2) * h;\n\t\t\t\t\ttoDrawHead(ctx, topx, topy, x1, y1, botx, boty, style);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar spinColors = function(currentIteration, totalIterations) {\n\t\t\t\tvar step = currentIteration % totalIterations;\n\t\t\t\tif (step < oldStep)\n\t\t\t\t\tcolors.push(colors.shift());\n\t\t\t\tvar c0 = colors[0],\n\t\t\t\t\tc1 = colors[1],\n\t\t\t\t\tr = minmax(easeLinear(step, c0.r, c1.r - c0.r, totalIterations), c0.r, c1.r),\n\t\t\t\t\tg = minmax(easeLinear(step, c0.g, c1.g - c0.g, totalIterations), c0.g, c1.g),\n\t\t\t\t\tb = minmax(easeLinear(step, c0.b, c1.b - c0.b, totalIterations), c0.b, c1.b);\n\n\t\t\t\toldStep = step;\n\t\t\t\treturn \"rgb(\" + parseInt(r) + \",\" + parseInt(g) + \",\" + parseInt(b) + \")\";\n\t\t\t}\n\n\t\t\tvar spin = function(t) {\n\t\t\t\tvar timeCurrent = t || (new Date).getTime();\n\t\t\t\tif (!startTime) {\n\t\t\t\t\tstartTime = timeCurrent;\n\t\t\t\t}\n\t\t\t\ttick = timeCurrent - startTime;\n\t\t\t\tacc = easeInOutQuad((tick + tail_duration / 2) % tail_duration, 0, duration, tail_duration);\n\t\t\t\thead = easeLinear((tick + acc) % duration, 0, 360, duration);\n\t\t\t\ttail = 20 + Math.abs(easeLinear((tick + tail_duration / 2) % tail_duration, -300, 600, tail_duration));\n\n\t\t\t\tctx.lineWidth = lineWidth;\n\t\t\t\tctx.lineCap = \"round\";\n\n\t\t\t\tctx.strokeStyle = spinColors(tick, duration);\n\t\t\t\tctx.clearRect(0, 0, size, size);\n\t\t\t\t//fixed android 4.1.x\n\t\t\t\tcanvasObj.style.display = 'none'; // Detach from DOM\n\t\t\t\tcanvasObj.offsetHeight; // Force the detach\n\t\t\t\tcanvasObj.style.display = 'inherit'; // Reattach to DOM\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(size / 2, size / 2, size / 4, parseInt(head - tail) % 360 * rad, parseInt(head) % 360 * rad, false);\n\t\t\t\tctx.stroke();\n\n\t\t\t\trAF = requestAnimationFrame(spin);\n\t\t\t};\n\t\t\tvar startSpin = function() {\n\t\t\t\tstartTime = 0;\n\t\t\t\toldStep = 0;\n\t\t\t\trAF = requestAnimationFrame(spin);\n\t\t\t};\n\t\t\tvar stopSpin = function() {\n\t\t\t\trAF && cancelAnimationFrame(rAF);\n\t\t\t}\n\t\t\tvar init = function(canvas, options) {\n\t\t\t\tcanvasObj = canvas;\n\t\t\t\tctx = canvasObj.getContext('2d');\n\t\t\t\tvar options = $.extend(true, {}, options);\n\t\t\t\tcolors = options.colors;\n\t\t\t\tduration = options.duration;\n\t\t\t\ttail_duration = options.tail_duration;\n\t\t\t\tsize = options.size;\n\t\t\t\tlineWidth = options.lineWidth;\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tinit: init,\n\t\t\t\tdrawArcedArrow: drawArcedArrow,\n\t\t\t\tstartSpin: startSpin,\n\t\t\t\tstopSpin: stopSpin\n\t\t\t};\n\t\t})()\n\t});\n})(mui);"
  },
  {
    "path": "examples/hello-mui/js/mui.view.js",
    "content": "/**\n * <div id=\"app\" class=\"mui-views\">\n\t<div class=\"mui-view\">\n\t\t<div class=\"mui-navbar\">\n\t\t</div>\n\t\t<div class=\"mui-pages\">\n\t\t</div>\n\t</div>\n</div>\n * @param {Object} $\n * @param {Object} window\n */\n(function($, window) {\n\tvar CLASS_LEFT = $.className('left');\n\tvar CLASS_CENTER = $.className('center');\n\tvar CLASS_RIGHT = $.className('right');\n\tvar CLASS_PAGE = $.className('page');\n\tvar CLASS_PAGE_LEFT = $.className('page-left');\n\tvar CLASS_PAGE_CENTER = $.className('page-center');\n\tvar CLASS_NAVBAR_LEFT = $.className('navbar-left');\n\tvar CLASS_NAVBAR_CENTER = $.className('navbar-center');\n\tvar CLASS_PAGE_SHADOW = $.className('page-shadow');\n\n\tvar CLASS_TRANSITIONING = $.className('transitioning');\n\n\tvar SELECTOR_LEFT = '.' + CLASS_LEFT;\n\tvar SELECTOR_CENTER = '.' + CLASS_CENTER;\n\tvar SELECTOR_RIGHT = '.' + CLASS_RIGHT;\n\n\tvar SELECTOR_ICON = $.classSelector('.icon');\n\tvar SELECTOR_NAVBAR = $.classSelector('.navbar');\n\tvar SELECTOR_NAVBAR_INNER = $.classSelector('.navbar-inner');\n\tvar SELECTOR_PAGES = $.classSelector('.pages');\n\tvar SELECTOR_BTN_NAV = $.classSelector('.btn-nav');\n\tvar SELECTOR_PAGE_LEFT = '.' + CLASS_PAGE_LEFT;\n\tvar SELECTOR_PAGE_CENTER = '.' + CLASS_PAGE_CENTER;\n\tvar SELECTOR_NAVBAR_LEFT = '.' + CLASS_NAVBAR_LEFT;\n\tvar SELECTOR_NAVBAR_CENTER = '.' + CLASS_NAVBAR_CENTER;\n\n\tvar View = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.view = this.element = element;\n\t\t\tthis.options = $.extend({\n\t\t\t\tanimateNavbar: 'ios', //ios\n\t\t\t\tswipeBackPageActiveArea: 30,\n\t\t\t\thardwareAccelerated: true\n\t\t\t}, options);\n\t\t\tthis.navbars = this.view.querySelector(SELECTOR_NAVBAR);\n\t\t\tthis.pages = this.view.querySelector(SELECTOR_PAGES);\n\n\t\t\tthis.history = []; //history\n\n\t\t\tthis.maxScrollX = this.view.offsetWidth;\n\t\t\tthis.x = this.y = 0;\n\t\t\tthis.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : '';\n\t\t\tthis.ratio = 0;\n\t\t\tthis.isBack = true;\n\t\t\tthis.moved = this.dragging = false;\n\n\t\t\tthis.activeNavbar = this.previousNavbar = null;\n\t\t\tthis.activePage = this.previousPage = null;\n\n\t\t\tthis._initPageEventMethod();\n\n\t\t\tthis._initDefaultPage();\n\n\t\t\tthis.navbars && this._initNavBar();\n\n\t\t\tthis.initEvent();\n\t\t},\n\t\t_initPageEventMethod: function() {\n\t\t\tvar self = this;\n\t\t\t$.each(['onPageBeforeShow', 'onPageShow', 'onPageBeforeBack', 'onPageBack'], function(index, event) {\n\t\t\t\tself[event + 'Callbacks'] = {};\n\t\t\t\tself[event] = function(page, callback) {\n\t\t\t\t\tvar eventCallbacks = event + 'Callbacks';\n\t\t\t\t\tif (!self[eventCallbacks].hasOwnProperty(page)) {\n\t\t\t\t\t\tself[eventCallbacks][page] = [callback];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself[eventCallbacks][page].push(callback);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\t_initDefaultPage: function() {\n\t\t\tvar defaultPage = document.querySelector(this.options.defaultPage);\n\t\t\tif (defaultPage) {\n\t\t\t\tthis._appendPage(defaultPage);\n\t\t\t} else {\n\t\t\t\tthrow new Error('defaultPage[' + this.options.defaultPage + '] does not exist');\n\t\t\t}\n\t\t},\n\t\tinitEvent: function() {\n\t\t\tthis.view.addEventListener('click', this);\n\t\t\tthis.view.addEventListener('tap', this);\n\t\t\tthis.pages.addEventListener('drag', this);\n\t\t\tthis.pages.addEventListener('dragend', this);\n\t\t\tthis.pages.addEventListener('webkitTransitionEnd', this);\n\t\t},\n\t\thandleEvent: function(event) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'click':\n\t\t\t\t\tthis._click(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'tap':\n\t\t\t\t\tthis._tap(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis._drag(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis._dragend(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd':\n\t\t\t\t\tthis._webkitTransitionEnd(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshadow: function() {\n\t\t\tvar shadow = document.createElement('div');\n\t\t\tshadow.className = CLASS_PAGE_SHADOW;\n\t\t\treturn shadow;\n\t\t}(),\n\t\t_removePage: function(page, navbar) {\n\t\t\tnavbar && this._removeNavbar(page, navbar);\n\t\t\tdocument.body.appendChild(page);\n\t\t\tthis._cleanPageClass(page);\n\t\t},\n\t\t_prependPage: function(page) {\n\t\t\tvar navbar = page.querySelector(SELECTOR_NAVBAR_INNER);\n\t\t\tnavbar && this._prependNavbar(navbar);\n\t\t\tpage.classList.add(CLASS_PAGE_LEFT);\n\t\t\tthis.pages.insertBefore(page, this.pages.firstElementChild);\n\t\t},\n\t\t_appendPage: function(page) {\n\t\t\tvar navbar = page.querySelector(SELECTOR_NAVBAR_INNER);\n\t\t\tnavbar && this._appendNavbar(navbar);\n\t\t\tpage.classList.add(CLASS_PAGE_CENTER);\n\t\t\tthis.pages.appendChild(page);\n\t\t},\n\t\t_removeNavbar: function(page, navbar) {\n\t\t\tpage.insertBefore(navbar, page.firstElementChild);\n\t\t\tthis._cleanNavbarClass(navbar);\n\t\t},\n\t\t_prependNavbar: function(navbar) {\n\t\t\tnavbar.classList.add(CLASS_NAVBAR_LEFT);\n\t\t\tthis.navbars.insertBefore(navbar, this.navbars.firstElementChild);\n\t\t},\n\t\t_appendNavbar: function(navbar) {\n\t\t\tnavbar.classList.add(CLASS_NAVBAR_CENTER);\n\t\t\tthis.navbars.appendChild(navbar);\n\t\t},\n\t\t_cleanPageClass: function(page) {\n\t\t\tpage.classList.remove(CLASS_PAGE_CENTER);\n\t\t\tpage.classList.remove(CLASS_PAGE_LEFT);\n\t\t},\n\t\t_cleanNavbarClass: function(navbar) {\n\t\t\tnavbar.classList.remove(CLASS_NAVBAR_CENTER);\n\t\t\tnavbar.classList.remove(CLASS_NAVBAR_LEFT);\n\t\t},\n\t\t_tap: function(event) {\n\t\t\tvar target = event.target;\n\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\t\t\tvar page = document.getElementById(target.hash.replace('#', ''));\n\t\t\t\t\tif (page && page.classList.contains(CLASS_PAGE)) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\t\t\tthis.go(target.hash);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_click: function(event) {\n\t\t\tvar target = event.target;\n\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\t\t\tvar page = document.getElementById(target.hash.replace('#', ''));\n\t\t\t\t\tif (page && page.classList.contains(CLASS_PAGE)) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_cleanStyle: function(el) {\n\t\t\tif (el) {\n\t\t\t\tel.style.webkitTransform = '';\n\t\t\t\tel.style.opacity = '';\n\t\t\t}\n\t\t},\n\t\t_isAnimateNavbarIOS: function() {\n\t\t\treturn !$.os.android && this.options.animateNavbar === 'ios';\n\t\t},\n\t\t_webkitTransitionEnd: function(event) {\n\t\t\tthis.dragging = this.moved = false;\n\t\t\tif (this.activePage !== event.target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isInTransition = false;\n\n\t\t\tthis.shadow.parentNode === this.activePage && this.activePage.removeChild(this.shadow);\n\t\t\tthis.previousPageClassList.remove(CLASS_TRANSITIONING);\n\t\t\tthis.activePageClassList.remove(CLASS_TRANSITIONING);\n\n\t\t\tvar self = this;\n\t\t\tif (this._isAnimateNavbarIOS() && this.previousNavElements && this.activeNavElements) {\n\t\t\t\tvar isBack = this.isBack;\n\t\t\t\t$.each(this.previousNavElements, function(i, el) {\n\t\t\t\t\tel.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tisBack && self._cleanStyle(el);\n\t\t\t\t});\n\t\t\t\t$.each(this.activeNavElements, function(i, el) {\n\t\t\t\t\tel.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tself._cleanStyle(el);\n\t\t\t\t});\n\t\t\t\tif (this.previousNavBackIcon) {\n\t\t\t\t\tthis.previousNavBackIcon.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tisBack && this._cleanStyle(this.previousNavBackIcon);\n\t\t\t\t}\n\t\t\t\tif (this.activeNavBackIcon) {\n\t\t\t\t\tthis.activeNavBackIcon.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tthis._cleanStyle(this.activeNavBackIcon);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.previousNavbar && this.previousNavbar.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\tthis.activeNavbar && this.activeNavbar.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\tthis._cleanStyle(this.previousNavbar);\n\t\t\t\tthis._cleanStyle(this.activeNavbar);\n\t\t\t}\n\n\t\t\tthis._cleanStyle(this.previousPage);\n\t\t\tthis._cleanStyle(this.activePage);\n\n\t\t\tif (this.ratio <= 0.5) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.isBack) {\n\t\t\t\tthis._removePage(this.activePage, this.activeNavbar);\n\t\t\t\tthis.previousPageClassList.remove(CLASS_PAGE_LEFT);\n\t\t\t\tthis.previousPageClassList.add(CLASS_PAGE_CENTER);\n\t\t\t\tif (this.previousNavbar) {\n\t\t\t\t\tthis.previousNavbar.classList.remove(CLASS_NAVBAR_LEFT);\n\t\t\t\t\tthis.previousNavbar.classList.add(CLASS_NAVBAR_CENTER);\n\t\t\t\t}\n\t\t\t\tif (this.history.length > 0) {\n\t\t\t\t\tthis._prependPage(this.history.pop());\n\t\t\t\t}\n\t\t\t\tthis.navbars && this._initNavBar();\n\t\t\t\tthis._trigger('pageBack', this.activePage);\n\t\t\t\tthis._trigger('pageShow', this.previousPage);\n\t\t\t} else {\n\t\t\t\tthis.previousPageClassList.add(CLASS_PAGE_LEFT);\n\t\t\t\tthis.activePageClassList.add(CLASS_PAGE_CENTER);\n\t\t\t\tthis._trigger('pageShow', this.activePage);\n\t\t\t}\n\n\n\t\t},\n\t\t_trigger: function(eventType, page) {\n\t\t\tvar eventCallbacks = 'on' + eventType.charAt(0).toUpperCase() + eventType.slice(1) + 'Callbacks';\n\t\t\tif (this[eventCallbacks].hasOwnProperty(page.id)) {\n\t\t\t\tvar callbacks = this[eventCallbacks][page.id];\n\t\t\t\tvar event = new CustomEvent(eventType, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tpage: page\n\t\t\t\t\t},\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcancelable: true\n\t\t\t\t});\n\t\t\t\tfor (var len = callbacks.length; len--;) {\n\t\t\t\t\tcallbacks[len].call(this, event);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$.trigger(this.view, eventType, {\n\t\t\t\tpage: page\n\t\t\t});\n\t\t},\n\t\t_initPageTransform: function() {\n\t\t\tthis.previousPage = this.pages.querySelector(SELECTOR_PAGE_LEFT);\n\t\t\tthis.activePage = this.pages.querySelector(SELECTOR_PAGE_CENTER);\n\t\t\tif (this.previousPage && this.activePage) {\n\t\t\t\tthis.activePage.appendChild(this.shadow);\n\t\t\t\tthis.previousPageClassList = this.previousPage.classList;\n\t\t\t\tthis.activePageClassList = this.activePage.classList;\n\n\t\t\t\tthis.previousPageStyle = this.previousPage.style;\n\t\t\t\tthis.activePageStyle = this.activePage.style;\n\n\t\t\t\tthis.previousPageClassList.remove(CLASS_TRANSITIONING);\n\t\t\t\tthis.activePageClassList.remove(CLASS_TRANSITIONING);\n\n\t\t\t\tif (this.navbars) {\n\t\t\t\t\tthis.previousNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_LEFT);\n\t\t\t\t\tthis.activeNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_CENTER);\n\t\t\t\t\tif (this._isAnimateNavbarIOS() && this.previousNavbar && this.activeNavbar) {\n\t\t\t\t\t\tthis.previousNavElements = this.previousNavbar.querySelectorAll(SELECTOR_LEFT + ',' + SELECTOR_CENTER + ',' + SELECTOR_RIGHT);\n\t\t\t\t\t\tthis.activeNavElements = this.activeNavbar.querySelectorAll(SELECTOR_LEFT + ',' + SELECTOR_CENTER + ',' + SELECTOR_RIGHT);\n\t\t\t\t\t\tthis.previousNavBackIcon = this.previousNavbar.querySelector(SELECTOR_LEFT + SELECTOR_BTN_NAV + ' ' + SELECTOR_ICON);\n\t\t\t\t\t\tthis.activeNavBackIcon = this.activeNavbar.querySelector(SELECTOR_LEFT + SELECTOR_BTN_NAV + ' ' + SELECTOR_ICON);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.x = 0;\n\t\t\t\tthis.dragging = true;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t_initNavBar: function() {\n\t\t\tif (this._isAnimateNavbarIOS() && this.navbars) {\n\t\t\t\tvar inners = this.navbars.querySelectorAll(SELECTOR_NAVBAR_INNER);\n\t\t\t\tvar inner, left, right, center, leftWidth, rightWidth, centerWidth, noLeft, onRight, currLeft, diff, navbarWidth;\n\t\t\t\tfor (var i = 0, len = inners.length; i < len; i++) {\n\t\t\t\t\tinner = inners[i];\n\t\t\t\t\tleft = inner.querySelector(SELECTOR_LEFT);\n\t\t\t\t\tright = inner.querySelector(SELECTOR_RIGHT);\n\t\t\t\t\tcenter = inner.querySelector(SELECTOR_CENTER);\n\t\t\t\t\tnoLeft = !left;\n\t\t\t\t\tnoRight = !right;\n\t\t\t\t\tleftWidth = noLeft ? 0 : left.offsetWidth;\n\t\t\t\t\trightWidth = noRight ? 0 : right.offsetWidth;\n\t\t\t\t\tcenterWidth = center ? center.offsetWidth : 0;\n\t\t\t\t\tnavbarWidth = this.maxScrollX;\n\t\t\t\t\tonLeft = inner.classList.contains('navbar-left');\n\t\t\t\t\tif (noRight) {\n\t\t\t\t\t\tcurrLeft = navbarWidth - centerWidth;\n\t\t\t\t\t}\n\t\t\t\t\tif (noLeft) {\n\t\t\t\t\t\tcurrLeft = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!noLeft && !noRight) {\n\t\t\t\t\t\tcurrLeft = (navbarWidth - rightWidth - centerWidth + leftWidth) / 2;\n\t\t\t\t\t}\n\t\t\t\t\tvar requiredLeft = (navbarWidth - centerWidth) / 2;\n\t\t\t\t\tif (navbarWidth - leftWidth - rightWidth > centerWidth) {\n\t\t\t\t\t\tif (requiredLeft < leftWidth) {\n\t\t\t\t\t\t\trequiredLeft = leftWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (requiredLeft + centerWidth > navbarWidth - rightWidth) {\n\t\t\t\t\t\t\trequiredLeft = navbarWidth - rightWidth - centerWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdiff = requiredLeft - currLeft;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiff = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar centerLeft = diff;\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\tcenter.style.marginLeft = -leftWidth + 'px';\n\t\t\t\t\t\tcenter.mNavbarLeftOffset = -(currLeft + diff) + 30; //这个30是测出来的。后续要实际计算一下\n\t\t\t\t\t\tcenter.mNavbarRightOffset = navbarWidth - currLeft - diff - centerWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (onLeft) center.style.webkitTransform = ('translate3d(' + center.mNavbarLeftOffset + 'px, 0, 0)');\n\n\t\t\t\t\tif (!noLeft) {\n\t\t\t\t\t\tleft.mNavbarLeftOffset = -leftWidth;\n\t\t\t\t\t\tleft.mNavbarRightOffset = (navbarWidth - leftWidth) / 2;\n\t\t\t\t\t\tif (onLeft) left.style.webkitTransform = ('translate3d(' + left[0].mNavbarLeftOffset + 'px, 0, 0)');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!noRight) {\n\t\t\t\t\t\tright.mNavbarLeftOffset = -(navbarWidth - rightWidth) / 2;\n\t\t\t\t\t\tright.mNavbarRightOffset = rightWidth;\n\t\t\t\t\t\tif (onLeft) right.style.webkitTransform = ('translate3d(' + right[0].mNavbarLeftOffset + 'px, 0, 0)');\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_drag: function(event) {\n\t\t\tif (this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tif (!this.dragging) {\n\t\t\t\tif (($.gestures.session.firstTouch.center.x - this.view.offsetLeft) < this.options.swipeBackPageActiveArea) {\n\t\t\t\t\tthis.isBack = true;\n\t\t\t\t\tthis._initPageTransform();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.dragging) {\n\t\t\t\tvar deltaX = 0;\n\t\t\t\tif (!this.moved) { //start\n\t\t\t\t\tdeltaX = detail.deltaX;\n\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t} else { //move\n\t\t\t\t\tdeltaX = detail.deltaX - ($.gestures.session.prevTouch && $.gestures.session.prevTouch.deltaX || 0);\n\t\t\t\t}\n\t\t\t\tvar newX = this.x + deltaX;\n\t\t\t\tif (newX < 0 || newX > this.maxScrollX) {\n\t\t\t\t\tnewX = newX < 0 ? 0 : this.maxScrollX;\n\t\t\t\t}\n\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tdetail.gesture.preventDefault();\n\n\t\t\t\tif (!this.requestAnimationFrame) {\n\t\t\t\t\tthis._updateTranslate();\n\t\t\t\t}\n\n\t\t\t\tthis.moved = true;\n\t\t\t\tthis.x = newX;\n\t\t\t\tthis.y = 0;\n\t\t\t}\n\t\t},\n\t\t_dragend: function(event) {\n\t\t\tif (!this.moved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar detail = event.detail;\n\n\t\t\tthis._clearRequestAnimationFrame();\n\n\t\t\tthis._prepareTransition();\n\n\t\t\tthis.ratio = this.x / this.maxScrollX;\n\t\t\tif (this.ratio === 1 || this.ratio === 0) {\n\t\t\t\t$.trigger(this.activePage, 'webkitTransitionEnd');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.ratio > 0.5) {\n\t\t\t\tthis.setTranslate(this.maxScrollX, 0);\n\t\t\t} else {\n\t\t\t\tthis._cleanStyle(this.previousPage);\n\t\t\t\tthis._cleanStyle(this.activePage);\n\t\t\t}\n\t\t},\n\t\t_prepareTransition: function() {\n\t\t\tthis.isInTransition = true;\n\t\t\tthis.previousPageClassList.add(CLASS_TRANSITIONING);\n\t\t\tthis.activePageClassList.add(CLASS_TRANSITIONING);\n\t\t\tvar self = this;\n\t\t\tif (this.previousNavbar && this.activeNavbar) {\n\t\t\t\tthis.previousNavbar.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.activeNavbar.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tif (this._isAnimateNavbarIOS() && this.previousNavElements && this.activeNavElements) {\n\t\t\t\t\t$.each(this.previousNavElements, function(i, el) {\n\t\t\t\t\t\tel.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tself._cleanStyle(el);\n\t\t\t\t\t});\n\t\t\t\t\t$.each(this.activeNavElements, function(i, el) {\n\t\t\t\t\t\tel.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tself._cleanStyle(el);\n\t\t\t\t\t});\n\t\t\t\t\tif (this.previousNavBackIcon) {\n\t\t\t\t\t\tthis._cleanStyle(this.previousNavBackIcon);\n\t\t\t\t\t\tthis.previousNavBackIcon.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.activeNavBackIcon) {\n\t\t\t\t\t\tthis._cleanStyle(this.activeNavBackIcon);\n\t\t\t\t\t\tthis.activeNavBackIcon.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_clearRequestAnimationFrame: function() {\n\t\t\tif (this.requestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(this.requestAnimationFrame);\n\t\t\t\tthis.requestAnimationFrame = null;\n\t\t\t}\n\t\t},\n\t\t_getTranslateStr: function(x, y) {\n\t\t\tif (this.options.hardwareAccelerated) {\n\t\t\t\treturn 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ;\n\t\t\t}\n\t\t\treturn 'translate(' + x + 'px,' + y + 'px) ';\n\t\t},\n\n\t\t_updateTranslate: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.x !== self.lastX || self.y !== self.lastY) {\n\t\t\t\tself.setTranslate(self.x, self.y);\n\t\t\t}\n\t\t\tself.requestAnimationFrame = requestAnimationFrame(function() {\n\t\t\t\tself._updateTranslate();\n\t\t\t});\n\t\t},\n\t\t_setNavbarTranslate: function(x, y) {\n\t\t\tvar percentage = x / this.maxScrollX;\n\t\t\t//only for ios\n\t\t\tif (this._isAnimateNavbarIOS()) {\n\t\t\t\tif (this.previousNavElements && this.activeNavElements) {\n\t\t\t\t\tthis.animateNavbarByIOS(percentage);\n\t\t\t\t}\n\t\t\t} else { //pop-in\n\t\t\t\tthis.activeNavbar.style.opacity = 1 - percentage * 1.3;\n\t\t\t\tthis.previousNavbar.style.opacity = percentage * 1.3 - 0.3;\n\t\t\t}\n\t\t},\n\t\tanimateNavbarByIOS: function(percentage) {\n\t\t\tvar i, len, style, el;\n\t\t\tfor (i = 0, len = this.activeNavElements.length; i < len; i++) {\n\t\t\t\tel = this.activeNavElements[i];\n\t\t\t\tstyle = el.style;\n\t\t\t\tstyle.opacity = (1 - percentage * (el.classList.contains(CLASS_LEFT) ? 3.5 : 1.3));\n\t\t\t\tif (!el.classList.contains(CLASS_RIGHT)) {\n\t\t\t\t\tvar activeNavTranslate = percentage * el.mNavbarRightOffset;\n\t\t\t\t\tel.style.webkitTransform = ('translate3d(' + activeNavTranslate + 'px,0,0)');\n\t\t\t\t\tif (el.classList.contains(CLASS_LEFT) && this.activeNavBackIcon) {\n\t\t\t\t\t\tthis.activeNavBackIcon.style.webkitTransform = ('translate3d(' + -activeNavTranslate + 'px,0,0)');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (i = 0, len = this.previousNavElements.length; i < len; i++) {\n\t\t\t\tel = this.previousNavElements[i];\n\t\t\t\tstyle = el.style;\n\t\t\t\tstyle.opacity = percentage * 1.3 - 0.3;\n\t\t\t\tif (!el.classList.contains(CLASS_RIGHT)) {\n\t\t\t\t\tvar previousNavTranslate = el.mNavbarLeftOffset * (1 - percentage);\n\t\t\t\t\tel.style.webkitTransform = ('translate3d(' + previousNavTranslate + 'px,0,0)');\n\t\t\t\t\tif (el.classList.contains(CLASS_LEFT) && this.previousNavBackIcon) {\n\t\t\t\t\t\tthis.previousNavBackIcon.style.webkitTransform = ('translate3d(' + -previousNavTranslate + 'px,0,0)');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.previousPage.style.opacity = 0.9 + 0.1 * x / this.maxScrollX;\n\t\t\tthis.previousPage.style['webkitTransform'] = this._getTranslateStr((x / 6 - this.maxScrollX / 6), y);\n\t\t\tthis.activePage.style['webkitTransform'] = this._getTranslateStr(x, y);\n\n\t\t\tthis.navbars && this._setNavbarTranslate(x, y);\n\t\t\tthis.lastX = this.x;\n\t\t\tthis.lastY = this.y;\n\t\t},\n\t\tcanBack: function() {\n\t\t\treturn this.pages.querySelector(SELECTOR_PAGE_LEFT);\n\t\t},\n\t\tback: function() {\n\t\t\tif (this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.isBack = true;\n\t\t\tthis.ratio = 1;\n\t\t\tif (this._initPageTransform()) {\n\t\t\t\tthis._trigger('pageBeforeBack', this.activePage);\n\t\t\t\tthis._trigger('pageBeforeShow', this.previousPage);\n\t\t\t\tthis._prepareTransition();\n\t\t\t\tthis.previousPage.offsetHeight;\n\t\t\t\tthis.activePage.offsetHeight;\n\t\t\t\tthis.setTranslate(this.maxScrollX, 0);\n\t\t\t}\n\t\t},\n\t\tgo: function(pageSelector) {\n\t\t\tif (this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar nextPage = document.querySelector(pageSelector);\n\n\t\t\tif (nextPage) {\n\t\t\t\tvar previousPage = this.pages.querySelector(SELECTOR_PAGE_LEFT);\n\t\t\t\tvar activePage = this.pages.querySelector(SELECTOR_PAGE_CENTER);\n\t\t\t\tvar previousNavbar;\n\t\t\t\tvar activeNavbar;\n\t\t\t\tif (this.navbars) {\n\t\t\t\t\tpreviousNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_LEFT);\n\t\t\t\t\tactiveNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_CENTER);\n\t\t\t\t}\n\t\t\t\tif (activeNavbar) {\n\t\t\t\t\tactiveNavbar.classList.remove(CLASS_NAVBAR_CENTER);\n\t\t\t\t\tactiveNavbar.classList.add(CLASS_NAVBAR_LEFT);\n\t\t\t\t}\n\n\t\t\t\tif (previousPage) {\n\t\t\t\t\tthis._removePage(previousPage, previousNavbar);\n\t\t\t\t\tthis.history.push(previousPage); //add to history\n\t\t\t\t}\n\n\t\t\t\tif (activePage) {\n\t\t\t\t\tactivePage.classList.remove(CLASS_PAGE_CENTER);\n\t\t\t\t\tactivePage.style.webkitTransform = 'translate3d(0,0,0)';\n\t\t\t\t\tactivePage.classList.add(CLASS_PAGE_LEFT);\n\t\t\t\t}\n\n\n\t\t\t\tnextPage.style.webkitTransform = 'translate3d(100%,0,0)';\n\t\t\t\tthis._appendPage(nextPage);\n\t\t\t\tnextPage.appendChild(this.shadow); //shadow\n\t\t\t\tnextPage.offsetHeight; //force\n\t\t\t\tthis.isBack = false;\n\t\t\t\tthis.ratio = 1;\n\n\t\t\t\tthis._initPageTransform();\n\n\t\t\t\tthis.navbars && this._initNavBar();\n\n\t\t\t\tthis.navbars && this._setNavbarTranslate(this.maxScrollX, 0);\n\t\t\t\t//force\n\t\t\t\tthis.previousPage.offsetHeight;\n\t\t\t\tthis.activePage.offsetHeight;\n\n\t\t\t\tif (this.navbars) {\n\t\t\t\t\tthis.previousNavbar.offsetHeight;\n\t\t\t\t\tthis.activeNavbar.offsetHeight;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger('pageBeforeShow', this.activePage);\n\t\t\t\tthis._prepareTransition();\n\t\t\t\tthis.setTranslate(0, 0);\n\t\t\t}\n\t\t}\n\n\t});\n\n\n\t$.fn.view = function(options) {\n\t\tvar self = this[0];\n\t\tvar viewApi = null;\n\t\tvar id = self.getAttribute('data-view');\n\t\tif (!id) {\n\t\t\tid = ++$.uuid;\n\t\t\t$.data[id] = viewApi = new View(self, options);\n\t\t\tself.setAttribute('data-view', id);\n\t\t} else {\n\t\t\tviewApi = $.data[id];\n\t\t}\n\t\treturn viewApi;\n\t}\n})(mui, window);"
  },
  {
    "path": "examples/hello-mui/js/mui.zoom.js",
    "content": "(function($, window) {\n\tvar CLASS_ZOOM = $.className('zoom');\n\tvar CLASS_ZOOM_SCROLLER = $.className('zoom-scroller');\n\n\tvar SELECTOR_ZOOM = '.' + CLASS_ZOOM;\n\tvar SELECTOR_ZOOM_SCROLLER = '.' + CLASS_ZOOM_SCROLLER;\n\n\tvar EVENT_PINCH_START = 'pinchstart';\n\tvar EVENT_PINCH = 'pinch';\n\tvar EVENT_PINCH_END = 'pinchend';\n\tif ('ongesturestart' in window) {\n\t\tEVENT_PINCH_START = 'gesturestart';\n\t\tEVENT_PINCH = 'gesturechange';\n\t\tEVENT_PINCH_END = 'gestureend';\n\t}\n\t$.Zoom = function(element, options) {\n\t\tvar zoom = this;\n\n\t\tzoom.options = $.extend($.Zoom.defaults, options);\n\n\t\tzoom.wrapper = zoom.element = element;\n\t\tzoom.scroller = element.querySelector(SELECTOR_ZOOM_SCROLLER);\n\t\tzoom.scrollerStyle = zoom.scroller && zoom.scroller.style;\n\n\t\tzoom.zoomer = element.querySelector(SELECTOR_ZOOM);\n\t\tzoom.zoomerStyle = zoom.zoomer && zoom.zoomer.style;\n\n\t\tzoom.init = function() {\n\t\t\t//自动启用\n\t\t\t$.options.gestureConfig.pinch = true;\n\t\t\t$.options.gestureConfig.doubletap = true;\n\t\t\tzoom.initEvents();\n\t\t};\n\n\t\tzoom.initEvents = function(detach) {\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\tvar target = zoom.scroller;\n\n\t\t\ttarget[action](EVENT_PINCH_START, zoom.onPinchstart);\n\t\t\ttarget[action](EVENT_PINCH, zoom.onPinch);\n\t\t\ttarget[action](EVENT_PINCH_END, zoom.onPinchend);\n\n\t\t\ttarget[action]($.EVENT_START, zoom.onTouchstart);\n\t\t\ttarget[action]($.EVENT_MOVE, zoom.onTouchMove);\n\t\t\ttarget[action]($.EVENT_CANCEL, zoom.onTouchEnd);\n\t\t\ttarget[action]($.EVENT_END, zoom.onTouchEnd);\n\n\t\t\ttarget[action]('drag', zoom.dragEvent);\n\t\t\ttarget[action]('doubletap', zoom.doubleTapEvent);\n\t\t};\n\t\tzoom.dragEvent = function(e) {\n\t\t\tif (imageIsMoved || isGesturing) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t};\n\t\tzoom.doubleTapEvent = function(e) {\n\t\t\tzoom.toggleZoom(e.detail.center);\n\t\t};\n\t\tzoom.transition = function(style, time) {\n\t\t\ttime = time || 0;\n\t\t\tstyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\treturn zoom;\n\t\t};\n\t\tzoom.translate = function(style, x, y) {\n\t\t\tx = x || 0;\n\t\t\ty = y || 0;\n\t\t\tstyle['webkitTransform'] = 'translate3d(' + x + 'px,' + y + 'px,0px)';\n\t\t\treturn zoom;\n\t\t};\n\t\tzoom.scale = function(style, scale) {\n\t\t\tscale = scale || 1;\n\t\t\tstyle['webkitTransform'] = 'translate3d(0,0,0) scale(' + scale + ')';\n\t\t\treturn zoom;\n\t\t};\n\t\tzoom.scrollerTransition = function(time) {\n\t\t\treturn zoom.transition(zoom.scrollerStyle, time);\n\t\t};\n\t\tzoom.scrollerTransform = function(x, y) {\n\t\t\treturn zoom.translate(zoom.scrollerStyle, x, y);\n\t\t};\n\t\tzoom.zoomerTransition = function(time) {\n\t\t\treturn zoom.transition(zoom.zoomerStyle, time);\n\t\t};\n\t\tzoom.zoomerTransform = function(scale) {\n\t\t\treturn zoom.scale(zoom.zoomerStyle, scale);\n\t\t};\n\n\t\t// Gestures\n\t\tvar scale = 1,\n\t\t\tcurrentScale = 1,\n\t\t\tisScaling = false,\n\t\t\tisGesturing = false;\n\t\tzoom.onPinchstart = function(e) {\n\t\t\tisGesturing = true;\n\t\t};\n\t\tzoom.onPinch = function(e) {\n\t\t\tif (!isScaling) {\n\t\t\t\tzoom.zoomerTransition(0);\n\t\t\t\tisScaling = true;\n\t\t\t}\n\t\t\tscale = (e.detail ? e.detail.scale : e.scale) * currentScale;\n\t\t\tif (scale > zoom.options.maxZoom) {\n\t\t\t\tscale = zoom.options.maxZoom - 1 + Math.pow((scale - zoom.options.maxZoom + 1), 0.5);\n\t\t\t}\n\t\t\tif (scale < zoom.options.minZoom) {\n\t\t\t\tscale = zoom.options.minZoom + 1 - Math.pow((zoom.options.minZoom - scale + 1), 0.5);\n\t\t\t}\n\t\t\tzoom.zoomerTransform(scale);\n\t\t};\n\t\tzoom.onPinchend = function(e) {\n\t\t\tscale = Math.max(Math.min(scale, zoom.options.maxZoom), zoom.options.minZoom);\n\t\t\tzoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);\n\t\t\tcurrentScale = scale;\n\t\t\tisScaling = false;\n\t\t};\n\t\tzoom.setZoom = function(newScale) {\n\t\t\tscale = currentScale = newScale;\n\t\t\tzoom.scrollerTransition(zoom.options.speed).scrollerTransform(0, 0);\n\t\t\tzoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);\n\t\t};\n\t\tzoom.toggleZoom = function(position, speed) {\n\t\t\tif (typeof position === 'number') {\n\t\t\t\tspeed = position;\n\t\t\t\tposition = undefined;\n\t\t\t}\n\t\t\tspeed = typeof speed === 'undefined' ? zoom.options.speed : speed;\n\t\t\tif (scale && scale !== 1) {\n\t\t\t\tscale = currentScale = 1;\n\t\t\t\tzoom.scrollerTransition(speed).scrollerTransform(0, 0);\n\t\t\t} else {\n\t\t\t\tscale = currentScale = zoom.options.maxZoom;\n\t\t\t\tif (position) {\n\t\t\t\t\tvar offset = $.offset(zoom.zoomer);\n\t\t\t\t\tvar top = offset.top;\n\t\t\t\t\tvar left = offset.left;\n\t\t\t\t\tvar offsetX = (position.x - left) * scale;\n\t\t\t\t\tvar offsetY = (position.y - top) * scale;\n\t\t\t\t\tthis._cal();\n\t\t\t\t\tif (offsetX >= imageMaxX && offsetX <= (imageMaxX + wrapperWidth)) { //center\n\t\t\t\t\t\toffsetX = imageMaxX - offsetX + wrapperWidth / 2;\n\t\t\t\t\t} else if (offsetX < imageMaxX) { //left\n\t\t\t\t\t\toffsetX = imageMaxX - offsetX + wrapperWidth / 2;\n\t\t\t\t\t} else if (offsetX > (imageMaxX + wrapperWidth)) { //right\n\t\t\t\t\t\toffsetX = imageMaxX + wrapperWidth - offsetX - wrapperWidth / 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (offsetY >= imageMaxY && offsetY <= (imageMaxY + wrapperHeight)) { //middle\n\t\t\t\t\t\toffsetY = imageMaxY - offsetY + wrapperHeight / 2;\n\t\t\t\t\t} else if (offsetY < imageMaxY) { //top\n\t\t\t\t\t\toffsetY = imageMaxY - offsetY + wrapperHeight / 2;\n\t\t\t\t\t} else if (offsetY > (imageMaxY + wrapperHeight)) { //bottom\n\t\t\t\t\t\toffsetY = imageMaxY + wrapperHeight - offsetY - wrapperHeight / 2;\n\t\t\t\t\t}\n\t\t\t\t\toffsetX = Math.min(Math.max(offsetX, imageMinX), imageMaxX);\n\t\t\t\t\toffsetY = Math.min(Math.max(offsetY, imageMinY), imageMaxY);\n\t\t\t\t\tzoom.scrollerTransition(speed).scrollerTransform(offsetX, offsetY);\n\t\t\t\t} else {\n\t\t\t\t\tzoom.scrollerTransition(speed).scrollerTransform(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tzoom.zoomerTransition(speed).zoomerTransform(scale);\n\t\t};\n\n\t\tzoom._cal = function() {\n\t\t\twrapperWidth = zoom.wrapper.offsetWidth;\n\t\t\twrapperHeight = zoom.wrapper.offsetHeight;\n\t\t\timageWidth = zoom.zoomer.offsetWidth;\n\t\t\timageHeight = zoom.zoomer.offsetHeight;\n\t\t\tvar scaledWidth = imageWidth * scale;\n\t\t\tvar scaledHeight = imageHeight * scale;\n\t\t\timageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);\n\t\t\timageMaxX = -imageMinX;\n\t\t\timageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);\n\t\t\timageMaxY = -imageMinY;\n\t\t};\n\n\t\tvar wrapperWidth, wrapperHeight, imageIsTouched, imageIsMoved, imageCurrentX, imageCurrentY, imageMinX, imageMinY, imageMaxX, imageMaxY, imageWidth, imageHeight, imageTouchesStart = {},\n\t\t\timageTouchesCurrent = {},\n\t\t\timageStartX, imageStartY, velocityPrevPositionX, velocityPrevTime, velocityX, velocityPrevPositionY, velocityY;\n\n\t\tzoom.onTouchstart = function(e) {\n\t\t\te.preventDefault();\n\t\t\timageIsTouched = true;\n\t\t\timageTouchesStart.x = e.type === $.EVENT_START ? e.targetTouches[0].pageX : e.pageX;\n\t\t\timageTouchesStart.y = e.type === $.EVENT_START ? e.targetTouches[0].pageY : e.pageY;\n\t\t};\n\t\tzoom.onTouchMove = function(e) {\n\t\t\te.preventDefault();\n\t\t\tif (!imageIsTouched) return;\n\t\t\tif (!imageIsMoved) {\n\t\t\t\twrapperWidth = zoom.wrapper.offsetWidth;\n\t\t\t\twrapperHeight = zoom.wrapper.offsetHeight;\n\t\t\t\timageWidth = zoom.zoomer.offsetWidth;\n\t\t\t\timageHeight = zoom.zoomer.offsetHeight;\n\t\t\t\tvar translate = $.parseTranslateMatrix($.getStyles(zoom.scroller, 'webkitTransform'));\n\t\t\t\timageStartX = translate.x || 0;\n\t\t\t\timageStartY = translate.y || 0;\n\t\t\t\tzoom.scrollerTransition(0);\n\t\t\t}\n\t\t\tvar scaledWidth = imageWidth * scale;\n\t\t\tvar scaledHeight = imageHeight * scale;\n\n\t\t\tif (scaledWidth < wrapperWidth && scaledHeight < wrapperHeight) return;\n\n\t\t\timageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);\n\t\t\timageMaxX = -imageMinX;\n\t\t\timageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);\n\t\t\timageMaxY = -imageMinY;\n\n\t\t\timageTouchesCurrent.x = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageX : e.pageX;\n\t\t\timageTouchesCurrent.y = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageY : e.pageY;\n\n\t\t\tif (!imageIsMoved && !isScaling) {\n\t\t\t\t//\t\t\t\tif (Math.abs(imageTouchesCurrent.y - imageTouchesStart.y) < Math.abs(imageTouchesCurrent.x - imageTouchesStart.x)) {\n\t\t\t\t//TODO 此处需要优化，当遇到长图，需要上下滚动时，下列判断会导致滚动不流畅\n\t\t\t\tif (\n\t\t\t\t\t(Math.floor(imageMinX) === Math.floor(imageStartX) && imageTouchesCurrent.x < imageTouchesStart.x) ||\n\t\t\t\t\t(Math.floor(imageMaxX) === Math.floor(imageStartX) && imageTouchesCurrent.x > imageTouchesStart.x)\n\t\t\t\t) {\n\t\t\t\t\timageIsTouched = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t\timageIsMoved = true;\n\t\t\timageCurrentX = imageTouchesCurrent.x - imageTouchesStart.x + imageStartX;\n\t\t\timageCurrentY = imageTouchesCurrent.y - imageTouchesStart.y + imageStartY;\n\n\t\t\tif (imageCurrentX < imageMinX) {\n\t\t\t\timageCurrentX = imageMinX + 1 - Math.pow((imageMinX - imageCurrentX + 1), 0.8);\n\t\t\t}\n\t\t\tif (imageCurrentX > imageMaxX) {\n\t\t\t\timageCurrentX = imageMaxX - 1 + Math.pow((imageCurrentX - imageMaxX + 1), 0.8);\n\t\t\t}\n\n\t\t\tif (imageCurrentY < imageMinY) {\n\t\t\t\timageCurrentY = imageMinY + 1 - Math.pow((imageMinY - imageCurrentY + 1), 0.8);\n\t\t\t}\n\t\t\tif (imageCurrentY > imageMaxY) {\n\t\t\t\timageCurrentY = imageMaxY - 1 + Math.pow((imageCurrentY - imageMaxY + 1), 0.8);\n\t\t\t}\n\n\t\t\t//Velocity\n\t\t\tif (!velocityPrevPositionX) velocityPrevPositionX = imageTouchesCurrent.x;\n\t\t\tif (!velocityPrevPositionY) velocityPrevPositionY = imageTouchesCurrent.y;\n\t\t\tif (!velocityPrevTime) velocityPrevTime = $.now();\n\t\t\tvelocityX = (imageTouchesCurrent.x - velocityPrevPositionX) / ($.now() - velocityPrevTime) / 2;\n\t\t\tvelocityY = (imageTouchesCurrent.y - velocityPrevPositionY) / ($.now() - velocityPrevTime) / 2;\n\t\t\tif (Math.abs(imageTouchesCurrent.x - velocityPrevPositionX) < 2) velocityX = 0;\n\t\t\tif (Math.abs(imageTouchesCurrent.y - velocityPrevPositionY) < 2) velocityY = 0;\n\t\t\tvelocityPrevPositionX = imageTouchesCurrent.x;\n\t\t\tvelocityPrevPositionY = imageTouchesCurrent.y;\n\t\t\tvelocityPrevTime = $.now();\n\n\t\t\tzoom.scrollerTransform(imageCurrentX, imageCurrentY);\n\t\t};\n\t\tzoom.onTouchEnd = function(e) {\n\t\t\tif (!e.touches.length) {\n\t\t\t\tisGesturing = false;\n\t\t\t}\n\t\t\tif (!imageIsTouched || !imageIsMoved) {\n\t\t\t\timageIsTouched = false;\n\t\t\t\timageIsMoved = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\timageIsTouched = false;\n\t\t\timageIsMoved = false;\n\t\t\tvar momentumDurationX = 300;\n\t\t\tvar momentumDurationY = 300;\n\t\t\tvar momentumDistanceX = velocityX * momentumDurationX;\n\t\t\tvar newPositionX = imageCurrentX + momentumDistanceX;\n\t\t\tvar momentumDistanceY = velocityY * momentumDurationY;\n\t\t\tvar newPositionY = imageCurrentY + momentumDistanceY;\n\n\t\t\tif (velocityX !== 0) momentumDurationX = Math.abs((newPositionX - imageCurrentX) / velocityX);\n\t\t\tif (velocityY !== 0) momentumDurationY = Math.abs((newPositionY - imageCurrentY) / velocityY);\n\t\t\tvar momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n\t\t\timageCurrentX = newPositionX;\n\t\t\timageCurrentY = newPositionY;\n\n\t\t\tvar scaledWidth = imageWidth * scale;\n\t\t\tvar scaledHeight = imageHeight * scale;\n\t\t\timageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);\n\t\t\timageMaxX = -imageMinX;\n\t\t\timageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);\n\t\t\timageMaxY = -imageMinY;\n\t\t\timageCurrentX = Math.max(Math.min(imageCurrentX, imageMaxX), imageMinX);\n\t\t\timageCurrentY = Math.max(Math.min(imageCurrentY, imageMaxY), imageMinY);\n\n\t\t\tzoom.scrollerTransition(momentumDuration).scrollerTransform(imageCurrentX, imageCurrentY);\n\t\t};\n\t\tzoom.destroy = function() {\n\t\t\tzoom.initEvents(true); //detach\n\t\t\tdelete $.data[zoom.wrapper.getAttribute('data-zoomer')];\n\t\t\tzoom.wrapper.setAttribute('data-zoomer', '');\n\t\t}\n\t\tzoom.init();\n\t\treturn zoom;\n\t};\n\t$.Zoom.defaults = {\n\t\tspeed: 300,\n\t\tmaxZoom: 3,\n\t\tminZoom: 1,\n\t};\n\t$.fn.zoom = function(options) {\n\t\tvar zoomApis = [];\n\t\tthis.each(function() {\n\t\t\tvar zoomApi = null;\n\t\t\tvar self = this;\n\t\t\tvar id = self.getAttribute('data-zoomer');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = zoomApi = new $.Zoom(self, options);\n\t\t\t\tself.setAttribute('data-zoomer', id);\n\t\t\t} else {\n\t\t\t\tzoomApi = $.data[id];\n\t\t\t}\n\t\t\tzoomApis.push(zoomApi);\n\t\t});\n\t\treturn zoomApis.length === 1 ? zoomApis[0] : zoomApis;\n\t};\n})(mui, window);"
  },
  {
    "path": "examples/hello-mui/js/update.js",
    "content": "/**\n * 5+ App客户端升级参考：http://ask.dcloud.net.cn/article/431\n * 服务端升级逻辑参考：https://ext.dcloud.net.cn/plugin?id=2226\n * \n * 检查升级返回值为JSON格式，如下：\n * \n * 需升级\n {\n\t\"isUpdate\":true,\n\t\"version\": \"2.6.0\",\n\t\"title\": \"Hello MUI版本更新\",\n\t\"note\": \"修复“选项卡+下拉刷新”示例中，某个选项卡滚动到底时，会触发所有选项卡上拉加载事件的bug；\\n修复Android4.4.4版本部分手机上，软键盘弹出时影响图片轮播组件，导致自动轮播停止的bug；\",\n\t\"url\": \"http://www.dcloud.io/hellomui/HelloMUI.apk\"\n}\n*\n* 无需升级\n{\n  \"isUpdate\":false\n}\n*\n*/\n\n//服务端检查更新地址，这里是 uniCloud 实现示例，开发者可替换为自己的地址\nvar server = \"https://7a3e3fa9-7820-41d0-be80-11927ac2026c.bspapp.com/http/update\"; \n\nfunction update() {\n\tmui.getJSON(server, {\n\t\t\"appid\": plus.runtime.appid,\n\t\t\"version\": plus.runtime.version,\n\t\t\"imei\": plus.device.imei\n\t}, function(data) {\n\t\tif (data.isUpdate) {\n\t\t\tplus.nativeUI.confirm(data.note, function(event) {\n\t\t\t\tif (0 == event.index) {\n\t\t\t\t\tplus.runtime.openURL(data.url);\n\t\t\t\t}\n\t\t\t}, data.title, [\"立即更新\", \"取　　消\"]);\n\t\t}\n\t});\n}\n\n// 真机运行不需要检查更新，真机运行时appid固定为'HBuilder'，这是调试基座的appid\nif(plus.runtime.appid !== 'HBuilder' && mui.os.plus && !mui.os.stream ){\n  mui.plusReady(update);\n} "
  },
  {
    "path": "examples/hello-mui/js/webviewGroup.js",
    "content": "var webviewGroup = function(id, options) {\n\tthis.id = id;\n\tthis.options = options;\n\tthis.styles = options.styles;\n\tthis.items = options.items;\n\tthis.onChange = options.onChange\n\n\tthis.options.index = options.index || 0;\n\n\tthis.webviews = {};\n\tthis.webviewContexts = {};\n\tthis.currentWebview = false;\n\tthis._init();\n};\n\nvar proto = webviewGroup.prototype;\n\nproto._init = function() {\n\tthis._initParent();\n\tthis._initNativeView();\n\tthis._initWebviewContexts(this.options.index);\n};\nproto._initParent = function() {\n\tthis.parent = plus.webview.getWebviewById(this.id);\n\tif(!this.parent) {\n\t\tthis.parent = plus.webview.create(this.id, this.id);\n\t\tthis.parent.show('none');\n\t}\n};\nproto._initNativeView = function() {\n\t// fixed by wmy 因为沉浸式应用，需要额外加上状态栏高度\n\tvar statusbar_H = plus.navigator.getStatusbarHeight(); \n\tthis.nativeView = new plus.nativeObj.View('__MUI_TAB_NATIVE', {\n\t\t'top': (83 + statusbar_H) +'px', //这个需要根据顶部导航及顶部选项卡高度自动调整\n\t\t'height': (window.screen.height - 83)+\"px\",\n\t\t'left': '100%',\n\t\t'width': '100%',\n\t\t\"backgroundColor\":\"#ffffff\"\n\t});\n\tthis.nativeView.show();\n};\nproto._initWebviewContexts = function() {\n\tfor(var len = this.items.length, i = len - 1; i >= 0; i--) {\n\t\tvar webviewOptions = this.items[i];\n\t\tvar id = webviewOptions.id;\n\t\tvar isFirst = i === 0;\n\t\tvar isLast = i === (len - 1);\n\t\tvar isCurrent = this.options.index === i;\n\t\tvar extras = webviewOptions.extras;\n\t\textras.__mui_url = webviewOptions.url;\n\t\textras.__mui_index = i;\n\n\t\textras.__mui_left = isFirst ? '' : this.items[i - 1].id;\n\t\textras.__mui_right = isLast ? '' : this.items[i + 1].id;\n\n\t\tvar styles = webviewOptions.styles || {};\n\n\t\tif(i > this.options.index) {\n\t\t\tstyles.left = '100%';\n\t\t} else if(i < this.options.index) {\n\t\t\tstyles.left = '-100%';\n\t\t} else {\n\t\t\tstyles.left = '0';\n\t\t}\n\t\tvar webviewContext = new webviewGroupContext(id, webviewOptions, this);\n\t\tthis.webviewContexts[id] = webviewContext;\n\t\tif(isCurrent) {\n\t\t\twebviewContext.webview = plus.webview.getWebviewById(id);\n\t\t\twebviewContext.createWebview();\n\t\t\twebviewContext.webview.show(\"none\");\n\t\t\tthis._initDrags(webviewContext.webview);\n\t\t\tthis.currentWebview = webviewContext.webview;\n\t\t}\n\t}\n};\nproto._onChange = function(webview) {\n\tthis.currentWebview = webview;\n\tthis.onChange({\n\t\tindex: webview.__mui_index\n\t});\n};\nproto._dragCallback = function(dir, fromWebview, view, viewId) {\n\tif(view === this.nativeView) { //需要创建webview\n\t\t//第一步:初始化目标webview\n\t\tthis.webviewContexts[viewId].createWebview('drag');\n\t\tvar targetWebview = this.webviewContexts[viewId].webview;\n\t\ttargetWebview.show();\n\t\tthis.nativeView.setStyle({\n\t\t\tleft: '100%'\n\t\t});\n\t\t//第二步:初始化目标webview的drag\n\t\tthis._initDrags(targetWebview);\n\t\tthis._onChange(targetWebview);\n\t\t//第三步:校验目标webview的左右webview的drag初始化\n\t\tthis._checkDrags(targetWebview);\n\t} else {\n\t\tthis._onChange(view);\n\t}\n};\n\nproto._initDrag = function(webview, dir) {\n\tvar flag = ('__mui_drag_' + dir + '_flag');\n\tif(webview[flag]) {\n\t\treturn;\n\t}\n\tvar viewId = webview['__mui_' + (dir === 'left' ? 'right' : 'left')];\n\tif(viewId) {\n\t\tvar view = plus.webview.getWebviewById(viewId);\n\t\tif(!view) { //如果目标webview不存在,使用nativeView替换\n\t\t\tview = this.nativeView;\n\t\t} else {\n\t\t\twebview[flag] = true;\n\t\t}\n\t\twebview.drag({\n\t\t\t\t'direction': dir,\n\t\t\t\t'moveMode': 'followFinger'\n\t\t\t}, {\n\t\t\t\t'view': view,\n\t\t\t\t'moveMode': 'follow'\n\t\t\t},\n\t\t\tfunction(res) {\n\t\t\t\tif(res.type === 'end' && res.result) { //拖拽完成\n\t\t\t\t\tthis._dragCallback(dir, webview, view, viewId);\n\t\t\t\t}\n\t\t\t}.bind(this)\n\t\t)\n\t} else {\n\t\twebview[flag] = true;\n\t}\n};\nproto._initDrags = function(webview) {\n\tthis._initDrag(webview, 'left');\n\tthis._initDrag(webview, 'right');\n};\nproto._checkDrags = function(webview) {\n\tvar left = webview.__mui_left;\n\tvar right = webview.__mui_right;\n\tif(left) {\n\t\tvar leftWebview = plus.webview.getWebviewById(left);\n\t\tif(leftWebview && !leftWebview.__mui_drag_left_flag) {\n\t\t\tthis._initDrag(leftWebview, 'left');\n\t\t}\n\t}\n\tif(right) {\n\t\tvar rightWebview = plus.webview.getWebviewById(right);\n\t\tif(rightWebview && !rightWebview.__mui_drag_right_flag) {\n\t\t\tthis._initDrag(rightWebview, 'right');\n\t\t}\n\t}\n};\nproto.getCurrentWebview = function() {\n\treturn this.currentWebview;\n};\nproto.getCurrentWebviewContext = function() {\n\tif(this.currentWebview) {\n\t\treturn this.webviewContexts[this.currentWebview.id];\n\t}\n\treturn false;\n};\nproto.switchTab = function(id) {\n\tid = id.replace('_0', ''); //首页需要替换为appid\n\tvar fromWebview = this.currentWebview;\n\tif(id === fromWebview.id) {\n\t\treturn;\n\t}\n\tvar toWebviewContext = this.webviewContexts[id];\n\tvar toWebview = toWebviewContext.webview;\n\tvar fromToLeft = '100%';\n\tvar toFromLeft = '-100%';\n\tif(toWebviewContext.options.extras.__mui_index > fromWebview.__mui_index) {\n\t\tfromToLeft = '-100%';\n\t\ttoFromLeft = '100%';\n\t}\n\tvar isNew = false;\n\tif(!toWebview) {\n\t\tisNew = true;\n\t\ttoWebviewContext.createWebview('startAnimation');\n\t\ttoWebview = toWebviewContext.webview;\n\t\t//\t\t\t\t\ttoWebview.showBehind(plus.webview.getSecondWebview());\n\t\ttoWebview.show();\n\t\tthis._initDrags(toWebview);\n\t\tthis._checkDrags(toWebview); //新建的时候均需校验\n\t}\n\tvar self = this;\n//\tconsole.log(\"current:\" + fromWebview.id + \",to:\" + fromToLeft);\n//\tconsole.log(\"next:\" + toWebview.id + \",from:\" + toFromLeft);\n\n\tplus.webview.startAnimation({\n\t\t\t'view': fromWebview,\n\t\t\t'styles': {\n\t\t\t\t'fromLeft': '0',\n\t\t\t\t'toLeft': fromToLeft\n\t\t\t},\n\t\t\t'action': 'show'\n\t\t}, {\n\t\t\t'view': toWebview,\n\t\t\t'styles': {\n\t\t\t\t'fromLeft': toFromLeft,\n\t\t\t\t'toLeft': '0'\n\t\t\t},\n\t\t\t'action': 'show'\n\t\t},\n\t\tfunction(e) {\n\t\t\t//console.log(\"startAnimation callback...\");\n\t\t\tif(e.id === toWebview.id) {\n\t\t\t\tisNew && plus.nativeUI.showWaiting();\n\t\t\t\tthis.currentWebview = toWebview;\n\t\t\t\tthis.onChange({\n\t\t\t\t\tindex: toWebview.__mui_index\n\t\t\t\t});\n\t\t\t}\n\t\t}.bind(this)\n\t)\n};\n\n/**\n * @param {Object} id\n * @param {Object} webviewOptions\n */\nvar webviewGroupContext = function(id, webviewOptions, groupContext) {\n\tthis.id = id;\n\tthis.url = webviewOptions.url;\n\tthis.options = webviewOptions;\n\tthis.groupContext = groupContext;\n\n\tthis.webview = false;\n\tthis.inited = false;\n};\n\nvar _proto = webviewGroupContext.prototype;\n\n_proto.createWebview = function(from) {\n\tvar options = this.options;\n\toptions.styles = options.styles || {\n\t\ttop: \"83px\",\n\t\tbottom: \"0px\",\n\t\trender: \"always\"\n\t};\n\toptions.styles.popGesture = 'none';\n\tif(this.webview) {\n\t\tthis.webview.setStyle(options.styles);\n\t\tfor(var key in options.extras) {\n\t\t\tthis.webview[key] = options.extras[key];\n\t\t}\n\t} else {\n\t\toptions.styles.left = '100%';\n\t\tif(from !== 'startAnimation') {\n\t\t\toptions.styles.left = '0';\n\t\t\tplus.nativeUI.showWaiting();\n\t\t}\n\t\tthis.webview = plus.webview.create(this.url, this.id, options.styles, options.extras);\n\t\t//append进去，避免返回时闪屏\n\t\tplus.webview.currentWebview().append(this.webview);\n\t}\n\tthis._initWebview();\n\tthis.inited = true;\n};\n_proto._initWebview = function() {\n\tvar options = this.options;\n\tif(!this.webview) {\n\t\treturn;\n\t}\n\tthis.webview.addEventListener('rendering', function() {\n\t\tsetTimeout(function() {\n\t\t\tplus.nativeUI.closeWaiting();\n\t\t}, 500);\n\t});\n\tif(options.pullToRefresh && options.pullToRefresh.support && support.pullToRefresh()) {\n\t\tvar callback = options.pullToRefresh.callback;\n\t\tthis.webview.setPullToRefresh(options.pullToRefresh, function() {\n\t\t\tif(callback) { //如果指定了下拉回调\n\t\t\t\tcallback(this.webview);\n\t\t\t} else { //下拉刷新回调，默认reload当前页面\n\t\t\t\tvar self = this;\n\t\t\t\tvar titleUpdate = function() {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tself.webview.endPullToRefresh();\n\t\t\t\t\t}.bind(this), 1000);\n\t\t\t\t\tself.webview.removeEventListener('titleUpdate', titleUpdate);\n\t\t\t\t};\n\t\t\t\tthis.webview.addEventListener('titleUpdate', titleUpdate);\n\t\t\t\tthis.webview.reload();\n\t\t\t}\n\t\t}.bind(this));\n\t}\n};"
  },
  {
    "path": "examples/hello-mui/libs/echarts-all.js",
    "content": "!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(\".\",\"\")-0<s.dependencies.zrender.replace(\".\",\"\")-0&&console.error(\"ZRender \"+a.version+\" is too old for ECharts \"+s.version+\". Current version need ZRender \"+s.dependencies.zrender+\"+\"),t=t instanceof Array?t[0]:t;var o=t.getAttribute(V);return o||(o=h++,t.setAttribute(V,o)),m[o]&&m[o].dispose(),m[o]=new i(t),m[o].id=o,m[o].canvasSupported=l,m[o].setTheme(n),m[o]},s.getInstanceById=function(e){return m[e]},o.merge(t.prototype,r.Dispatcher.prototype,!0);var U=e(\"zrender/config\").EVENT,d=[\"CLICK\",\"DBLCLICK\",\"MOUSEOVER\",\"MOUSEOUT\",\"DRAGSTART\",\"DRAGEND\",\"DRAGENTER\",\"DRAGOVER\",\"DRAGLEAVE\",\"DROP\"];return i.prototype={_init:function(){var t=this,i=e(\"zrender\").init(this.dom);this._zr=i,this._messageCenter.dispatch=function(e,i,n,a){n=n||{},n.type=e,n.event=i,t._messageCenter.dispatchWithContext(e,n,a),t._messageCenterOutSide.dispatchWithContext(e,n,a)},this._onevent=function(e){return t.__onevent(e)};for(var n in a.EVENT)\"CLICK\"!=n&&\"DBLCLICK\"!=n&&\"HOVER\"!=n&&\"MOUSEOUT\"!=n&&\"MAP_ROAM\"!=n&&this._messageCenter.bind(a.EVENT[n],this._onevent,this);var o={};this._onzrevent=function(e){return t[o[e.type]](e)};for(var r=0,s=d.length;s>r;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);\n\nnull==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='<img style=\"vertical-align:middle\" src=\"'+i+'\" title=\"'+(window.ActiveXObject||\"ActiveXObject\"in window?\"右键->图片另存为\":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} <br/>{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,\nthis.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+=\"<br/>\"+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)+\"<br/>\"+this._encodeHTML(u[0].indicator)+\" : \"+this.numAddCommas(u[0].value);for(var V=1,U=u.length;U>V;V++)i+=\"<br/>\"+this._encodeHTML(u[V].name)+\"<br/>\",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)+\"<br/>\":\"\")+(\"\"===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?\"\":\"<br />\";for(var o=0;o<n.length;o++)a+=this._encodeHTML(n[o].text)+\" : \"+this.numAddCommas(i[o])+\"<br />\";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)+\"<br/>\":\"\")+o+\" -> \"+r+\" (\"+this.numAddCommas(i)+\")<br />\"+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?\"\":\"<br />\",n=n.evolution;for(var o=0,r=n.length;r>o;o++)a+='<div style=\"padding-top:5px;\">',n[o].detail&&(n[o].detail.img&&(a+='<img src=\"'+n[o].detail.img+'\" style=\"float:left;width:40px;height:40px;\">'),a+='<div style=\"margin-left:45px;\">'+n[o].time+\"<br/>\",a+='<a href=\"'+n[o].detail.link+'\" target=\"_blank\">',a+=n[o].detail.text+\"</a></div>\",a+=\"</div>\");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,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\")}},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){\nfor(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)<Math.abs(e-t[n+1].x)?n:n+1},__onclick:function(e){var t=m.getX(e.event),i=this._findChainIndex(t);return i===this.currentIndex?!0:(this.currentIndex=i,this.timelineOption.autoPlay&&this.stop(),clearTimeout(this.playTicket),void this._onFrame())},__ondrift:function(e,t){this.timelineOption.autoPlay&&this.stop();var i,n=this._chainPoint,a=n.length;e.style.x+t<=n[0].x-n[0].symbolSize?(e.style.x=n[0].x-n[0].symbolSize,i=0):e.style.x+t>=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.width<l.width?h.highlightStyle.width+=8:h.highlightStyle.width=0,e(h),e(r),t()},l.timeInterval))},t}),i(\"zrender/loadingEffect/Bubble\",[\"require\",\"./Base\",\"../tool/util\",\"../tool/color\",\"../shape/Circle\"],function(e){function t(e){i.call(this,e)}var i=e(\"./Base\"),n=e(\"../tool/util\"),a=e(\"../tool/color\"),o=e(\"../shape/Circle\");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:\"#888\"},backgroundColor:\"rgba(250, 250, 250, 0.8)\",effect:{n:50,lineWidth:2,brushType:\"stroke\",color:\"random\",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effect,h=l.n,m=l.brushType,V=l.lineWidth,U=[],d=this.canvasWidth,p=this.canvasHeight,c=0;h>c;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;\n\nnull==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,\"&amp;\").replace(/\"/g,\"&quot;\")}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(\"<g_vml_:stroke\",' opacity=\"',a,'\"',' joinstyle=\"',e.lineJoin,'\"',' miterlimit=\"',e.miterLimit,'\"',' endcap=\"',b(e.lineCap),'\"',' weight=\"',o,'px\"',' color=\"',n,'\" />')}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('<g_vml_:fill type=\"',a.type_,'\"',' method=\"none\" focus=\"100%\"',' color=\"',X,'\"',' color2=\"',K,'\"',' colors=\"',S.join(\",\"),'\"',' opacity=\"',J,'\"',' g_o_:opacity2=\"',I,'\"',' angle=\"',h,'\"',' focusposition=\"',m.x,\",\",m.y,'\" />')}else if(a instanceof w){if(s&&l){var T=-i.x,z=-i.y;t.push(\"<g_vml_:fill\",' position=\"',T/s*o*o,\",\",z/l*r*r,'\"',' type=\"tile\"',' src=\"',a.src_,'\" />')}}else{var M=c(e.fillStyle),O=M.color,P=M.alpha*e.globalAlpha;t.push('<g_vml_:fill color=\"',O,'\" opacity=\"',P,'\" />')}}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;i<t.length;i++)this.initElement(t[i])},initElement:function(t){if(!t.getContext){t.getContext=e,a(t.ownerDocument),t.innerHTML=\"\",t.attachEvent(\"onpropertychange\",o),t.attachEvent(\"onresize\",r);var i=t.attributes;i.width&&i.width.specified?t.style.width=i.width.nodeValue+\"px\":t.width=t.clientWidth,i.height&&i.height.specified?t.style.height=i.height.nodeValue+\"px\":t.height=t.clientHeight}return t}};P.init();for(var D=[],N=0;16>N;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(\" <g_vml_:group\",' coordsize=\"',A*c,\",\",A*u,'\"',' coordorigin=\"0,0\"',' style=\"width:',c,\"px;height:\",u,\"px;position:absolute;\"),1!=this.m_[0][0]||this.m_[0][1]||1!=this.m_[1][1]||this.m_[1][0]){var g=[],y=this.scaleX_,b=this.scaleY_;g.push(\"M11=\",this.m_[0][0]/y,\",\",\"M12=\",this.m_[1][0]/b,\",\",\"M21=\",this.m_[0][1]/y,\",\",\"M22=\",this.m_[1][1]/b,\",\",\"Dx=\",S(d.x/A),\",\",\"Dy=\",S(d.y/A),\"\");var f=d,k=L(this,t+n,i),x=L(this,t,i+a),_=L(this,t+n,i+a);f.x=C.max(f.x,k.x,x.x,_.x),f.y=C.max(f.y,k.y,x.y,_.y),p.push(\"padding:0 \",S(f.x/A),\"px \",S(f.y/A),\"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(\",g.join(\"\"),\", SizingMethod='clip');\")}else p.push(\"top:\",S(d.y/A),\"px;left:\",S(d.x/A),\"px;\");p.push(' \">'),(o||r)&&p.push('<div style=\"overflow: hidden; width:',Math.ceil((n+o*n/s)*y),\"px;\",\" height:\",Math.ceil((a+r*a/l)*b),\"px;\",\" filter:progid:DxImageTransform.Microsoft.Matrix(Dx=\",-o*n/s*y,\",Dy=\",-r*a/l*b,');\">'),p.push('<div style=\"width:',Math.round(y*V*n/s),\"px;\",\" height:\",Math.round(b*U*a/l),\"px;\",\" filter:\"),this.globalAlpha<1&&p.push(\" progid:DXImageTransform.Microsoft.Alpha(opacity=\"+100*this.globalAlpha+\")\"),p.push(\" progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\",e.src,',sizingMethod=scale)\">'),(o||r)&&p.push(\"</div>\"),p.push(\"</div></div>\"),this.element_.insertAdjacentHTML(\"BeforeEnd\",p.join(\"\"))},Z.stroke=function(e){var t=[],i=10,n=10;t.push(\"<g_vml_:shape\",' filled=\"',!!e,'\"',' style=\"position:absolute;width:',i,\"px;height:\",n,'px;\"',' coordorigin=\"0,0\"',' coordsize=\"',A*i,\",\",A*n,'\"',' stroked=\"',!e,'\"',' path=\"');for(var a={x:null,y:null},o={x:null,y:null},r=0;r<this.currentPath_.length;r++){var s,l=this.currentPath_[r];switch(l.type){case\"moveTo\":s=l,t.push(\" m \",S(l.x),\",\",S(l.y));break;case\"lineTo\":t.push(\" l \",S(l.x),\",\",S(l.y));break;case\"close\":t.push(\" x \"),l=null;break;case\"bezierCurveTo\":t.push(\" c \",S(l.cp1x),\",\",S(l.cp1y),\",\",S(l.cp2x),\",\",S(l.cp2y),\",\",S(l.x),\",\",S(l.y));break;case\"at\":case\"wa\":t.push(\" \",l.type,\" \",S(l.x-this.scaleX_*l.radius),\",\",S(l.y-this.scaleY_*l.radius),\" \",S(l.x+this.scaleX_*l.radius),\",\",S(l.y+this.scaleY_*l.radius),\" \",S(l.xStart),\",\",S(l.yStart),\" \",S(l.xEnd),\",\",S(l.yEnd))}l&&((null==a.x||l.x<a.x)&&(a.x=l.x),(null==o.x||l.x>o.x)&&(o.x=l.x),(null==a.y||l.y<a.y)&&(a.y=l.y),(null==o.y||l.y>o.y)&&(o.y=l.y))}t.push(' \">'),e?_(this,t,a,o):x(this,t),t.push(\"</g_vml_:shape>\"),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('<g_vml_:line from=\"',-l,' 0\" to=\"',h,' 0.05\" ',' coordsize=\"100 100\" coordorigin=\"0 0\"',' filled=\"',!o,'\" stroked=\"',!!o,'\" style=\"position:absolute;width:1px;height:1px;\">'),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('<g_vml_:skew on=\"t\" matrix=\"',f,'\" ',' offset=\"',k,'\" origin=\"',l,' 0\" />','<g_vml_:path textpathok=\"true\" />','<g_vml_:textpath on=\"true\" string=\"',i(e),'\" style=\"v-text-align:',c,\";font:\",i(d),'\" /></g_vml_:line>'),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='<span style=\"position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;\"></span>';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),\nthis._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<V.touchClickDelay&&(this._mobileFindFixed(e),this._clickHandler(e),i-this._lastClickMoment<V.touchClickDelay/2&&(this._dblclickHandler(e),this._lastHover&&this._lastHover.clickable&&s.stop(e)),this._lastClickMoment=i),this.painter.clearHover()}}},u=function(e,t,o){U.call(this),this.root=e,this.storage=t,this.painter=o,this._lastX=this._lastY=this._mouseX=this._mouseY=0,this._findHover=i(a,this),this._domHover=o.getDomHover(),n(this),window.addEventListener?(window.addEventListener(\"resize\",this._resizeHandler),r.os.tablet||r.os.phone?(e.addEventListener(\"touchstart\",this._touchstartHandler),e.addEventListener(\"touchmove\",this._touchmoveHandler),e.addEventListener(\"touchend\",this._touchendHandler)):(e.addEventListener(\"click\",this._clickHandler),e.addEventListener(\"dblclick\",this._dblclickHandler),e.addEventListener(\"mousewheel\",this._mousewheelHandler),e.addEventListener(\"mousemove\",this._mousemoveHandler),e.addEventListener(\"mousedown\",this._mousedownHandler),e.addEventListener(\"mouseup\",this._mouseupHandler)),e.addEventListener(\"DOMMouseScroll\",this._mousewheelHandler),e.addEventListener(\"mouseout\",this._mouseoutHandler)):(window.attachEvent(\"onresize\",this._resizeHandler),e.attachEvent(\"onclick\",this._clickHandler),e.ondblclick=this._dblclickHandler,e.attachEvent(\"onmousewheel\",this._mousewheelHandler),e.attachEvent(\"onmousemove\",this._mousemoveHandler),e.attachEvent(\"onmouseout\",this._mouseoutHandler),e.attachEvent(\"onmousedown\",this._mousedownHandler),e.attachEvent(\"onmouseup\",this._mouseupHandler))};u.prototype.on=function(e,t,i){return this.bind(e,t,i),this},u.prototype.un=function(e,t){return this.unbind(e,t),this},u.prototype.trigger=function(e,t){switch(e){case V.RESIZE:case V.CLICK:case V.DBLCLICK:case V.MOUSEWHEEL:case V.MOUSEMOVE:case V.MOUSEDOWN:case V.MOUSEUP:case V.MOUSEOUT:this[\"_\"+e+\"Handler\"](t,!0)}},u.prototype.dispose=function(){var e=this.root;window.removeEventListener?(window.removeEventListener(\"resize\",this._resizeHandler),r.os.tablet||r.os.phone?(e.removeEventListener(\"touchstart\",this._touchstartHandler),e.removeEventListener(\"touchmove\",this._touchmoveHandler),e.removeEventListener(\"touchend\",this._touchendHandler)):(e.removeEventListener(\"click\",this._clickHandler),e.removeEventListener(\"dblclick\",this._dblclickHandler),e.removeEventListener(\"mousewheel\",this._mousewheelHandler),e.removeEventListener(\"mousemove\",this._mousemoveHandler),e.removeEventListener(\"mousedown\",this._mousedownHandler),e.removeEventListener(\"mouseup\",this._mouseupHandler)),e.removeEventListener(\"DOMMouseScroll\",this._mousewheelHandler),e.removeEventListener(\"mouseout\",this._mouseoutHandler)):(window.detachEvent(\"onresize\",this._resizeHandler),e.detachEvent(\"onclick\",this._clickHandler),e.detachEvent(\"dblclick\",this._dblclickHandler),e.detachEvent(\"onmousewheel\",this._mousewheelHandler),e.detachEvent(\"onmousemove\",this._mousemoveHandler),e.detachEvent(\"onmouseout\",this._mouseoutHandler),e.detachEvent(\"onmousedown\",this._mousedownHandler),e.detachEvent(\"onmouseup\",this._mouseupHandler)),this.root=this._domHover=this.storage=this.painter=null,this.un()},u.prototype._processDragStart=function(e){var t=this._lastHover;if(this._isMouseDown&&t&&t.draggable&&!this._draggingTarget&&this._mouseDownTarget==t){if(t.dragEnableTime&&new Date-this._lastMouseDownMoment<t.dragEnableTime)return;var i=t;this._draggingTarget=i,this._isDragging=1,i.invisible=!0,this.storage.mod(i.id),this._dispatchAgency(i,V.DRAGSTART,e),this.painter.refresh()}},u.prototype._processDragEnter=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGENTER,e,this._draggingTarget)},u.prototype._processDragOver=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGOVER,e,this._draggingTarget)},u.prototype._processDragLeave=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGLEAVE,e,this._draggingTarget)},u.prototype._processDrop=function(e){this._draggingTarget&&(this._draggingTarget.invisible=!1,this.storage.mod(this._draggingTarget.id),this.painter.refresh(),this._dispatchAgency(this._lastHover,V.DROP,e,this._draggingTarget))},u.prototype._processDragEnd=function(e){this._draggingTarget&&(this._dispatchAgency(this._draggingTarget,V.DRAGEND,e),this._lastHover=null),this._isDragging=0,this._draggingTarget=null},u.prototype._processOverShape=function(e){this._dispatchAgency(this._lastHover,V.MOUSEOVER,e)},u.prototype._processOutShape=function(e){this._dispatchAgency(this._lastHover,V.MOUSEOUT,e)},u.prototype._dispatchAgency=function(e,t,i,n){var a=\"on\"+t,o={type:t,event:i,target:e,cancelBubble:!1},r=e;for(n&&(o.dragged=n);r&&(r[a]&&(o.cancelBubble=r[a](o)),r.dispatch(t,o),r=r.parent,!o.cancelBubble););if(e)o.cancelBubble||this.dispatch(t,o);else if(!n){var s={type:t,event:i};this.dispatch(t,s),this.painter.eachOtherLayer(function(e){\"function\"==typeof e[a]&&e[a](s),e.dispatch&&e.dispatch(t,s)})}},u.prototype._iterateAndFindHover=function(){var e=m.create();return function(){for(var t,i,n=this.storage.getShapeList(),a=[0,0],o=n.length-1;o>=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&&t<y.length;t++){var i=y[t];i.x&&(this._mouseX+=i.x),i.y&&(this._mouseY+=i.y),this._iterateAndFindHover()}this._lastHover&&(e.zrenderX=this._mouseX,e.zrenderY=this._mouseY)},u.prototype._zrenderEventFixed=function(e,t){if(e.zrenderFixed)return e;if(t){var i=\"touchend\"!=e.type?e.targetTouches[0]:e.changedTouches[0];if(i){var n=this.painter._domRoot.getBoundingClientRect();e.zrenderX=i.clientX-n.left,e.zrenderY=i.clientY-n.top}}else{e=e||window.event;var a=e.toElement||e.relatedTarget||e.srcElement||e.target;a&&a!=this._domHover&&(e.zrenderX=(\"undefined\"!=typeof e.offsetX?e.offsetX:e.layerX)+a.offsetLeft,e.zrenderY=(\"undefined\"!=typeof e.offsetY?e.offsetY:e.layerY)+a.offsetTop)}return e.zrenderFixed=1,e},l.merge(u.prototype,U.prototype,!0),u}),i(\"zrender/Painter\",[\"require\",\"./config\",\"./tool/util\",\"./tool/log\",\"./loadingEffect/Base\",\"./Layer\",\"./shape/Image\"],function(e){\"use strict\";function t(){return!1}function i(){}function n(e){return e?e.isBuildin?!0:\"function\"!=typeof e.resize||\"function\"!=typeof e.refresh?!1:!0:!1}var a=e(\"./config\"),o=e(\"./tool/util\"),r=e(\"./tool/log\"),s=e(\"./loadingEffect/Base\"),l=e(\"./Layer\"),h=function(e,i){this.root=e,e.style[\"-webkit-tap-highlight-color\"]=\"transparent\",e.style[\"-webkit-user-select\"]=\"none\",e.style[\"user-select\"]=\"none\",e.style[\"-webkit-touch-callout\"]=\"none\",this.storage=i,e.innerHTML=\"\",this._width=this._getWidth(),this._height=this._getHeight();var n=document.createElement(\"div\");this._domRoot=n,n.style.position=\"relative\",n.style.overflow=\"hidden\",n.style.width=this._width+\"px\",n.style.height=this._height+\"px\",e.appendChild(n),this._layers={},this._zlevelList=[],this._layerConfig={},this._loadingEffect=new s({}),this.shapeToImage=this._createShapeToImageProcessor(),this._bgDom=document.createElement(\"div\"),this._bgDom.style.cssText=[\"position:absolute;left:0px;top:0px;width:\",this._width,\"px;height:\",this._height+\"px;\",\"-webkit-user-select:none;user-select;none;\",\"-webkit-touch-callout:none;\"].join(\"\"),this._bgDom.setAttribute(\"data-zr-dom-id\",\"bg\"),this._bgDom.className=a.elementClassName,n.appendChild(this._bgDom),this._bgDom.onselectstart=t;var o=new l(\"_zrender_hover_\",this);this._layers.hover=o,n.appendChild(o.dom),o.initContext(),o.dom.onselectstart=t,o.dom.style[\"-webkit-user-select\"]=\"none\",o.dom.style[\"user-select\"]=\"none\",o.dom.style[\"-webkit-touch-callout\"]=\"none\",this.refreshNextFrame=null};return h.prototype.render=function(e){return this.isLoading()&&this.hideLoading(),this.refresh(e,!0),this},h.prototype.refresh=function(e,t){var i=this.storage.getShapeList(!0);this._paintList(i,t);for(var n=0;n<this._zlevelList.length;n++){var a=this._zlevelList[n],o=this._layers[a];!o.isBuildin&&o.refresh&&o.refresh()}return\"function\"==typeof e&&e(),this},h.prototype._preProcessLayer=function(e){e.unusedCount++,e.updateTransform()},h.prototype._postProcessLayer=function(e){e.dirty=!1,1==e.unusedCount&&e.clear()},h.prototype._paintList=function(e,t){\"undefined\"==typeof t&&(t=!1),this._updateLayerStatus(e);var i,n,o;this.eachBuildinLayer(this._preProcessLayer);for(var s=0,l=e.length;l>s;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&&this._zlevelList[o+1]>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;i<this._zlevelList.length;i++){var n=this._zlevelList[i];e.call(t,this._layers[n],n)}},h.prototype.eachBuildinLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i],a=this._layers[n];a.isBuildin&&e.call(t,a,n)}},h.prototype.eachOtherLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i],a=this._layers[n];a.isBuildin||e.call(t,a,n)}},h.prototype.getLayers=function(){return this._layers},h.prototype._updateLayerStatus=function(e){var t=this._layers,i={};this.eachBuildinLayer(function(e,t){i[t]=e.elCount,e.elCount=0});for(var n=0,a=e.length;a>n;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;i<e._children.length;i++){var n=e._children[i];n.__dirty=e.__dirty||n.__dirty,this._updateAndAddShape(n,t)}e.__dirty=!1}else e.__clipShapes=t,this._shapeList[this._shapeListOffset++]=e},o.prototype.mod=function(e,t){if(\"string\"==typeof e&&(e=this._elements[e]),e&&(e.modSelf(),t))if(t.parent||t._storage||t.__clipShapes){var n={};for(var a in t)\"parent\"!==a&&\"_storage\"!==a&&\"__clipShapes\"!==a&&t.hasOwnProperty(a)&&(n[a]=t[a]);i.merge(e,n,!0)}else i.merge(e,t,!0);return this},o.prototype.drift=function(e,t,i){var n=this._elements[e];return n&&(n.needTransform=!0,\"horizontal\"===n.draggable?i=0:\"vertical\"===n.draggable&&(t=0),(!n.ondrift||n.ondrift&&!n.ondrift(t,i))&&n.drift(t,i)),this},o.prototype.addHover=function(e){return e.updateNeedTransform(),this._hoverElements.push(e),this},o.prototype.delHover=function(){return this._hoverElements=[],this},o.prototype.hasHoverShape=function(){return this._hoverElements.length>0},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;t<this._roots.length;t++){var a=this._roots[t];a instanceof n&&a.delChildrenFromStorage(this)}return this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],void(this._shapeListOffset=0)}if(e instanceof Array)for(var t=0,o=e.length;o>t;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._onframeList.length;L++)t._onframeList[L](e,o)}},T=new m({target:t._target,life:k,loop:t._loop,delay:t._delay,onframe:F,ondestroy:d});e&&\"spline\"!==e&&(T.easing=e),t._clipList.push(T),t._clipCount++,t.animation.add(T)}}};for(var c in this._tracks)p(this._tracks[c],c);return this},stop:function(){for(var e=0;e<this._clipList.length;e++){var t=this._clipList[e];this.animation.remove(t)}this._clipList=[]},delay:function(e){return this._delay=e,this},done:function(e){return e&&this._doneList.push(e),this}},u}),i(\"zrender/tool/vector\",[],function(){var e=\"undefined\"==typeof Float32Array?Array:Float32Array,t={create:function(t,i){var n=new e(2);return n[0]=t||0,n[1]=i||0,n},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},clone:function(t){var i=new e(2);return i[0]=t[0],i[1]=t[1],i},set:function(e,t,i){return e[0]=t,e[1]=i,e},add:function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e},scaleAndAdd:function(e,t,i,n){return e[0]=t[0]+i[0]*n,e[1]=t[1]+i[1]*n,e},sub:function(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e},len:function(e){return Math.sqrt(this.lenSquare(e))},lenSquare:function(e){return e[0]*e[0]+e[1]*e[1]},mul:function(e,t,i){return e[0]=t[0]*i[0],e[1]=t[1]*i[1],e},div:function(e,t,i){return e[0]=t[0]/i[0],e[1]=t[1]/i[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},scale:function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e},normalize:function(e,i){var n=t.len(i);return 0===n?(e[0]=0,e[1]=0):(e[0]=i[0]/n,e[1]=i[1]/n),e},distance:function(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1]))},distanceSquare:function(e,t){return(e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},lerp:function(e,t,i,n){return e[0]=t[0]+n*(i[0]-t[0]),e[1]=t[1]+n*(i[1]-t[1]),e},applyTransform:function(e,t,i){var n=t[0],a=t[1];return e[0]=i[0]*n+i[2]*a+i[4],e[1]=i[1]*n+i[3]*a+i[5],e},min:function(e,t,i){return e[0]=Math.min(t[0],i[0]),e[1]=Math.min(t[1],i[1]),e},max:function(e,t,i){return e[0]=Math.max(t[0],i[0]),e[1]=Math.max(t[1],i[1]),e}};return t.length=t.len,t.lengthSquare=t.lenSquare,t.dist=t.distance,t.distSquare=t.distanceSquare,t}),i(\"zrender/tool/matrix\",[],function(){var e=\"undefined\"==typeof Float32Array?Array:Float32Array,t={create:function(){var i=new e(6);return t.identity(i),i},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e},mul:function(e,t,i){return e[0]=t[0]*i[0]+t[2]*i[1],e[1]=t[1]*i[0]+t[3]*i[1],e[2]=t[0]*i[2]+t[2]*i[3],e[3]=t[1]*i[2]+t[3]*i[3],e[4]=t[0]*i[4]+t[2]*i[5]+t[4],e[5]=t[1]*i[4]+t[3]*i[5]+t[5],e},translate:function(e,t,i){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+i[0],e[5]=t[5]+i[1],e},rotate:function(e,t,i){var n=t[0],a=t[2],o=t[4],r=t[1],s=t[3],l=t[5],h=Math.sin(i),m=Math.cos(i);return e[0]=n*m+r*h,e[1]=-n*h+r*m,e[2]=a*m+s*h,e[3]=-a*h+m*s,e[4]=m*o+h*l,e[5]=m*l-h*o,e},scale:function(e,t,i){var n=i[0],a=i[1];return e[0]=t[0]*n,e[1]=t[1]*a,e[2]=t[2]*n,e[3]=t[3]*a,e[4]=t[4]*n,e[5]=t[5]*a,e},invert:function(e,t){var i=t[0],n=t[2],a=t[4],o=t[1],r=t[3],s=t[5],l=i*r-o*n;return l?(l=1/l,e[0]=r*l,e[1]=-o*l,e[2]=-n*l,e[3]=i*l,e[4]=(n*s-r*a)*l,e[5]=(o*a-i*s)*l,e):null}};return t}),i(\"zrender/loadingEffect/Base\",[\"require\",\"../tool/util\",\"../shape/Text\",\"../shape/Rectangle\"],function(e){function t(e){this.setOptions(e)}var i=e(\"../tool/util\"),n=e(\"../shape/Text\"),a=e(\"../shape/Rectangle\"),o=\"Loading...\",r=\"normal 16px Arial\";return t.prototype.createTextShape=function(e){return new n({highlightStyle:i.merge({x:this.canvasWidth/2,y:this.canvasHeight/2,text:o,textAlign:\"center\",textBaseline:\"middle\",textFont:r,color:\"#333\",brushType:\"fill\"},e,!0)})},t.prototype.createBackgroundShape=function(e){return new a({highlightStyle:{x:0,y:0,width:this.canvasWidth,height:this.canvasHeight,brushType:\"fill\",color:e}})},t.prototype.start=function(e){function t(t){e.storage.addHover(t)}function i(){e.refreshHover()}this.canvasWidth=e._width,this.canvasHeight=e._height,this.loadingTimer=this._start(t,i)},t.prototype._start=function(){return setInterval(function(){},1e4)},t.prototype.stop=function(){clearInterval(this.loadingTimer)},t.prototype.setOptions=function(e){this.options=e||{}},t.prototype.adjust=function(e,t){return e<=t[0]?e=t[0]:e>=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){\nvar 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]<E[0]&&p>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?u<E[0]?t>V?1:-1:u<E[1]?V>U?1:-1:U>s?1:-1:u<E[0]?t>V?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]<h?t>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;x<e.length;x++){var _=e[x],L=_.points;if(p||\"M\"===_.command){if(x>0&&(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<this.__clipShapes.length;t++){var i=this.__clipShapes[t];if(i.needTransform){var o=i.transform;a.invert(U,o),e.transform(o[0],o[1],o[2],o[3],o[4],o[5])}if(e.beginPath(),i.buildPath(e,i.style),e.clip(),i.needTransform){var o=U;e.transform(o[0],o[1],o[2],o[3],o[4],o[5])}}},m.prototype.getHighlightStyle=function(t,i,n){var a={};for(var o in t)a[o]=t[o];var r=e(\"../tool/color\"),s=r.getHighlightColor();\"stroke\"!=t.brushType?(a.strokeColor=s,a.lineWidth=(t.lineWidth||1)+this.getHighlightZoom(),a.brushType=\"both\"):\"stroke\"!=n?(a.strokeColor=s,a.lineWidth=(t.lineWidth||1)+this.getHighlightZoom()):a.strokeColor=i.strokeColor||r.mix(t.strokeColor,r.toRGB(s));for(var o in i)\"undefined\"!=typeof i[o]&&(a[o]=i[o]);return a},m.prototype.getHighlightZoom=function(){return\"text\"!=this.type?6:2},m.prototype.drift=function(e,t){this.position[0]+=e,this.position[1]+=t},m.prototype.buildPath=function(){s(\"buildPath not implemented in \"+this.type)},m.prototype.getRect=function(){s(\"getRect not implemented in \"+this.type)},m.prototype.isCover=function(t,i){var n=this.transformCoordToLocal(t,i);return t=n[0],i=n[1],this.isCoverRect(t,i)?e(\"../tool/area\").isInside(this,this.style,t,i):!1},m.prototype.isCoverRect=function(e,t){var i=this.style.__rect;return i||(i=this.style.__rect=this.getRect(this.style)),e>=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;e<this._children.length;e++){var t=this._children[e];this._storage&&(this._storage.delFromMap(t.id),t instanceof o&&t.delChildrenFromStorage(this._storage))}this._children.length=0},o.prototype.eachChild=function(e,t){for(var i=!!t,n=0;n<this._children.length;n++){var a=this._children[n];i?e.call(t,a):e(a)}},o.prototype.traverse=function(e,t){for(var i=!!t,n=0;n<this._children.length;n++){var a=this._children[n];i?e.call(t,a):e(a),\"group\"===a.type&&a.traverse(e,t)}},o.prototype.addChildrenToStorage=function(e){for(var t=0;t<this._children.length;t++){var i=this._children[t];e.addToMap(i),i instanceof o&&i.addChildrenToStorage(e)}},o.prototype.delChildrenFromStorage=function(e){for(var t=0;t<this._children.length;t++){var i=this._children[t];e.delFromMap(i.id),i instanceof o&&i.delChildrenFromStorage(e)}},o.prototype.modSelf=function(){this.__dirty=!0},i.merge(o.prototype,n.prototype,!0),i.merge(o.prototype,a.prototype,!0),o}),i(\"zrender/animation/Clip\",[\"require\",\"./easing\"],function(e){function t(e){this._targetPool=e.target||{},this._targetPool instanceof Array||(this._targetPool=[this._targetPool]),this._life=e.life||1e3,this._delay=e.delay||0,this._startTime=(new Date).getTime()+this._delay,this._endTime=this._startTime+1e3*this._life,this.loop=\"undefined\"==typeof e.loop?!1:e.loop,this.gap=e.gap||0,this.easing=e.easing||\"Linear\",this.onframe=e.onframe,this.ondestroy=e.ondestroy,this.onrestart=e.onrestart}var i=e(\"./easing\");return t.prototype={step:function(e){var t=(e-this._startTime)/this._life;if(!(0>t)){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||{};\n\nif(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;y<V.length;y++){var g=V[y];if(t(g[0])&&t(g[1])){var b=this.deepMerge(g),f=[b,n],k=l,x=null!=b.value?b.value:\"\";if(r){k=isNaN(x)?k:r.getColor(x);var _=this.deepQuery(f,\"itemStyle.normal.color\")||k,L=this.deepQuery(f,\"itemStyle.emphasis.color\")||_;if(null==_&&null==L)continue}g[0].tooltip=b.tooltip||n.tooltip||{trigger:\"item\"},g[0].name=g[0].name||\"\",g[1].name=g[1].name||\"\",g[0].value=x,U.push({points:[[this.parsePercent(g[0].x,d),this.parsePercent(g[0].y,p)],[this.parsePercent(g[1].x,d),this.parsePercent(g[1].y,p)]],rawData:g,color:k})}}var W=this.query(n,\"bundling.enable\");if(W){var X=new c;X.maxTurningAngle=this.query(n,\"bundling.maxTurningAngle\")/180*Math.PI,U=X.run(U)}n.name=a.name;for(var v=[],y=0,w=U.length;w>y;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.length<i&&!this.motionlessOnce){for(var V=0,U=n.length;U>V;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;i<t.length;i++)t[i].effectAnimator&&t[i].effectAnimator.stop()}this.effectList=[]},addMark:function(e,t,i){var n=this.series[e];if(this.selectedMap[n.name]){var a=this.query(this.option,\"animationDurationUpdate\"),o=this.query(this.option,\"animationEasing\"),r=n[i].data,s=this.shapeList.length;if(n[i].data=t.data,this[\"_build\"+i.replace(\"m\",\"M\")](e),this.option.animation&&!this.option.renderAsImage)this.animationMark(a,o,this.shapeList.slice(s));else{for(var l=s,h=this.shapeList.length;h>l;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;n<i.shapeList.length;n++){var a=i.shapeList[n],o=a.style;t&&(o=a.getHighlightStyle(o,a.highlightStyle||{},a.brushTypeOnly)),a.buildPath(e,o)}switch(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)},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;o<e.shapeList.length;o++)var r=e.shapeList[o],s=r.getRect(r.style),t=Math.min(s.x,t),n=Math.min(s.y,n),i=Math.max(s.x+s.width,i),a=Math.max(s.y+s.height,a);return e.__rect={x:t,y:n,width:i-t,height:a-n},e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);if(e=i[0],t=i[1],this.isCoverRect(e,t))for(var n=0;n<this.style.shapeList.length;n++){var a=this.style.shapeList[n];if(a.isCover(e,t))return!0}return!1}},e(\"../tool/util\").inherits(i,t),i}),i(\"echarts/util/ecAnimation\",[\"require\",\"zrender/tool/util\",\"zrender/tool/curve\",\"zrender/shape/Polygon\"],function(e){function t(e,t,i,n,a){var o,r=i.style.pointList,s=r.length;if(!t){if(o=[],\"vertical\"!=i._orient)for(var l=r[0][1],h=0;s>h;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?{\nstyle:{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;L<x.length;L++){if(_){var W=_[2*(L-1)],X=_[2*(L-1)+1];k+=d.dist(x[L-1],W)+d.dist(W,X)+d.dist(X,x[L])}else k+=d.dist(x[L-1],x[L]);f.push(k)}for(var v={p:0},w=e.animation.animate(v,{loop:s.loop}),L=0;L<f.length;L++)w.when(f[L]*s.period,{p:L});w.during(function(){var t,i,n=Math.floor(v.p);if(n==x.length-1)t=x[n][0],i=x[n][1];else{var o=v.p-n,r=x[n],s=x[n+1];if(_){var h=_[2*n],m=_[2*n+1];t=l.cubicAt(r[0],h[0],m[0],s[0],o),i=l.cubicAt(r[1],h[1],m[1],s[1],o)}else t=(s[0]-r[0])*o+r[0],i=(s[1]-r[1])*o+r[1]}y.style.x=t,y.style.y=i,a||e.modShape(y)}).done(b).start(),w.duration=k*s.period,y.effectAnimator=w}else{var K=h.xStart-g,I=h.yStart-g,J=h.xEnd-g,C=h.yEnd-g;y.style.x=K,y.style.y=I;var S=(J-K)*(J-K)+(C-I)*(C-I),E=Math.round(Math.sqrt(Math.round(S*s.period*s.period)));if(i.style.curveness>0){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;m<r.length;m++){r[m].effect=s;var U=n(e,null,r[m],a,!0),d=U.effectAnimator;o.style.shapeList.push(U),d.duration>l&&(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<h.length;e++)h[e].stop()};if(l){o.__dummy=0;var c=e.animate(o.id,\"\",s.loop).when(l,{__dummy:1}).during(function(){e.modShape(o)}).done(function(){i.effect.show=!1,e.delShape(o.id)}).start(),u=c.stop;c.stop=function(){p(),u.call(this)}}}var o=e(\"../util/ecData\"),r=e(\"zrender/shape/Circle\"),s=e(\"zrender/shape/Image\"),l=e(\"zrender/tool/curve\"),h=e(\"../util/shape/Icon\"),m=e(\"../util/shape/Symbol\"),V=e(\"zrender/shape/ShapeBundle\"),U=e(\"zrender/shape/Polyline\"),d=e(\"zrender/tool/vector\"),p=e(\"zrender/tool/env\").canvasSupported;return{point:t,largePoint:i,line:n,largeLine:a}}),i(\"echarts/component/base\",[\"require\",\"../config\",\"../util/ecData\",\"../util/ecQuery\",\"../util/number\",\"zrender/tool/util\",\"zrender/tool/env\"],function(e){function t(e,t,a,o,r){this.ecTheme=e,this.messageCenter=t,this.zr=a,this.option=o,this.series=o.series,this.myChart=r,this.component=r.component,this.shapeList=[],this.effectList=[];var s=this;s._onlegendhoverlink=function(e){if(s.legendHoverLink)for(var t,a=e.target,o=s.shapeList.length-1;o>=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]<t[1][1]||e instanceof i?(this.array=[t[0][0],t[0][1],t[1][0],t[1][1]],this._startPoint=t[0],this._endPoint=t[1]):(this.array=[t[1][0],t[1][1],t[0][0],t[0][1]],this._startPoint=t[1],this._endPoint=t[0]),this.ink=m(t[0],t[1]),this.edge=e,this.group=null}function a(){this.edgeList=[],this.mp0=l(),this.mp1=l(),this.ink=0}function o(){this.maxNearestEdge=6,this.maxTurningAngle=Math.PI/4,this.maxIteration=20}var r=e(\"../data/KDTree\"),s=e(\"zrender/tool/vector\"),l=s.create,h=s.distSquare,m=s.dist,V=s.copy,U=s.clone;return n.prototype.getStartPoint=function(){return this._startPoint},n.prototype.getEndPoint=function(){return this._endPoint},a.prototype.addEdge=function(e){e.group=this,this.edgeList.push(e)},a.prototype.removeEdge=function(e){e.group=null,this.edgeList.splice(this.edgeList.indexOf(e),1)},o.prototype={constructor:o,run:function(e){function t(e,t){return h(e,t)<1e-10}function n(e,i){for(var n=[],a=0,o=0;o<e.length;o++)a>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++<this.maxIteration;){for(var r=[],s=0;s<a.groups.length;s++)r.push(new i(a.groups[s]));var l=this._iterate(r);if(l.savedInk<=0)break;a=l}var m=[],V=function(e,t){for(var a,o=0;o<e.length;o++){var r=e[o];if(r.edgeList[0]&&r.edgeList[0].edge instanceof i){for(var s=[],l=0;l<r.edgeList.length;l++)s.push(r.edgeList[l].edge.group);a=t?t.slice():[],a.unshift(r.mp0),a.push(r.mp1),V(s,a)}else for(var l=0;l<r.edgeList.length;l++){var h=r.edgeList[l];a=t?t.slice():[],a.unshift(r.mp0),a.push(r.mp1),a.unshift(h.getStartPoint()),a.push(h.getEndPoint()),m.push({points:n(a,h.edge.points),rawEdge:h.edge})}}};return V(a.groups),m},_iterate:function(e){for(var i=[],o=[],s=0,h=0;h<e.length;h++){var m=new n(e[h]);i.push(m)}for(var U=new r(i,4),d=[],p=l(),c=l(),u=0,y=l(),g=l(),b=0,h=0;h<i.length;h++){var m=i[h];if(!m.group){U.nearestN(m,this.maxNearestEdge,t,d);for(var f=0,k=null,x=null,_=0;_<d.length;_++){var L=d[_],W=0;L.group?L.group!==x&&(x=L.group,u=this._calculateGroupEdgeInk(L.group,m,p,c),W=L.group.ink+m.ink-u):(u=this._calculateEdgeEdgeInk(m,L,p,c),W=L.ink+m.ink-u),W>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;r<e.edgeList.length;r++){var s=e.edgeList[r];a.push(s.getStartPoint()),o.push(s.getEndPoint())}a.push(t.getStartPoint()),o.push(t.getEndPoint()),this._calculateMeetPoints(a,o,i,n);for(var l=m(i,n),r=0;r<a.length;r++)l+=m(a[r],i)+m(o[r],n);return l},_calculateMeetPoints:function(){var e=l(),t=l();return function(i,n,a,o){s.set(e,0,0),s.set(t,0,0);for(var r=i.length,l=0;r>l;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;p<a.length;p++){var c=a[p];s.sub(t,c,o);var u=s.len(t);s.scale(t,t,1/u);var y=s.dot(t,e);if(V>y){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;u<p.length;u++)e.lineTo(p[u][0],p[u][1]);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.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(r,o),r}),i(\"zrender/shape/Heart\",[\"require\",\"./Base\",\"./util/PathProxy\",\"../tool/area\",\"../tool/util\"],function(e){\"use strict\";var t=e(\"./Base\"),i=e(\"./util/PathProxy\"),n=e(\"../tool/area\"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:\"heart\",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y),n.bezierCurveTo(t.x+t.a/2,t.y-2*t.b/3,t.x+2*t.a,t.y+t.b/3,t.x,t.y+t.b),n.bezierCurveTo(t.x-2*t.a,t.y+t.b/3,t.x-t.a/2,t.y-2*t.b/3,t.x,t.y),n.closePath()},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.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e(\"../tool/util\").inherits(a,t),a}),i(\"zrender/shape/Droplet\",[\"require\",\"./Base\",\"./util/PathProxy\",\"../tool/area\",\"../tool/util\"],function(e){\"use strict\";var t=e(\"./Base\"),i=e(\"./util/PathProxy\"),n=e(\"../tool/area\"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:\"droplet\",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y+t.a),n.bezierCurveTo(t.x+t.a,t.y+t.a,t.x+3*t.a/2,t.y-t.a/3,t.x,t.y-t.b),n.bezierCurveTo(t.x-3*t.a/2,t.y-t.a/3,t.x-t.a,t.y+t.a,t.x,t.y+t.a),n.closePath()},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.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e(\"../tool/util\").inherits(a,t),a}),i(\"zrender/tool/math\",[],function(){function e(e,t){return Math.sin(t?e*a:e)}function t(e,t){return Math.cos(t?e*a:e)}function i(e){return e*a}function n(e){return e/a}var a=Math.PI/180;return{sin:e,cos:t,degreeToRadian:i,radianToDegree:n}}),i(\"zrender/shape/util/PathProxy\",[\"require\",\"../../tool/vector\"],function(e){var t=e(\"../../tool/vector\"),i=function(e,t){this.command=e,this.points=t||null},n=function(){this.pathCommands=[],this._ctx=null,this._min=[],this._max=[]};return n.prototype.fastBoundingRect=function(){var e=this._min,i=this._max;e[0]=e[1]=1/0,i[0]=i[1]=-(1/0);for(var n=0;n<this.pathCommands.length;n++){var a=this.pathCommands[n],o=a.points;switch(a.command){case\"M\":t.min(e,e,o),t.max(i,i,o);break;case\"L\":t.min(e,e,o),t.max(i,i,o);break;case\"C\":for(var r=0;6>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\"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]<t&&(t=o[r][0]),o[r][0]>i&&(i=o[r][0]),o[r][1]<n&&(n=o[r][1]),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]<i.data.array[i.axis]?(i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right));a--;){i=n[a];var s=e.array[i.axis]-i.data.array[i.axis],l=0>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]<a.data.array[a.axis]?(a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right));r--;){a=o[r];var h=e.array[a.axis]-a.data.array[a.axis],V=0>h,U=!1;h*=h,(t>m||h<s[m-1].dist)&&(h=i(a.data,e),(t>m||h<s[m-1].dist)&&a.data!==e&&(t>m&&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='<p style=\"padding:8px 0;margin:0 0 10px 0;border-bottom:1px solid #eee\">'+(t[0]||this._lang[0])+\"</p>\";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\",\nthis._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;s<e.length;s++){var l=e[s];l[0]<n&&(n=l[0]),l[0]>a&&(a=l[0]),l[1]<o&&(o=l[1]),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<s.length;l++)s[l]=o.cubicAt(e[0],t[0],i[0],n[0],s[l]);var h=[];o.cubicExtrema(e[1],t[1],i[1],n[1],h);for(var l=0;l<h.length;l++)h[l]=o.cubicAt(e[1],t[1],i[1],n[1],h[l]);s.push(e[0],n[0]),h.push(e[1],n[1]);var m=Math.min.apply(null,s),V=Math.max.apply(null,s),U=Math.min.apply(null,h),d=Math.max.apply(null,h);a[0]=m,a[1]=U,r[0]=V,r[1]=d}function n(e,t,i,n,a){var r=o.quadraticExtremum(e[0],t[0],i[0]),s=o.quadraticExtremum(e[1],t[1],i[1]);r=Math.max(Math.min(r,1),0),s=Math.max(Math.min(s,1),0);var l=1-r,h=1-s,m=l*l*e[0]+2*l*r*t[0]+r*r*i[0],V=l*l*e[1]+2*l*r*t[1]+r*r*i[1],U=h*h*e[0]+2*h*s*t[0]+s*s*i[0],d=h*h*e[1]+2*h*s*t[1]+s*s*i[1];n[0]=Math.min(e[0],i[0],m,U),n[1]=Math.min(e[1],i[1],V,d),a[0]=Math.max(e[0],i[0],m,U),a[1]=Math.max(e[1],i[1],V,d)}var a=e(\"./vector\"),o=e(\"./curve\"),r=a.create(),s=a.create(),l=a.create(),h=function(e,t,i,n,o,h,m,V){if(Math.abs(n-o)>=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];\n\n\"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.x<t.x&&(i.x=t.x),i.x+i.width>t.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<n/2&&(a-=-n),t=s.getNewDate(a),e*=1.5;e-->=0&&((\"month\"==i||\"quarter\"==i||\"half-year\"==i||\"year\"==i)&&t.setDate(1),!(this._max-t<n/2));)this._valueList.push(t),t=s.getNewDate(t- -n);this._valueList.push(s.getNewDate(this._max)),this._reformLabelData(function(e){return function(t){return s.format(e,t)}}(i))},_customerValue:function(){var t=e(\"../util/accMath\"),i=null!=this.option.splitNumber?this.option.splitNumber:5,n=(this._max-this._min)/i;this._valueList=[];for(var a=0;i>=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=e<this._min?this._min:e,e=e>this._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=e<this.grid.getX()?this.grid.getX():e,e=e>this.grid.getXend()?this.grid.getXend():e,t=this._min+(e-this.grid.getX())/this.grid.getWidth()*(this._max-this._min)):(e=e<this.grid.getY()?this.grid.getY():e,e=e>this.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.e<t.e?r(t,e,i):r(e,t,i)}function l(e,t){t=t||L,e=o(e);for(var i=e.c,n=0;i>t[n];)n++;if(!t[n])for(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){\nreturn 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)*C<r;)e++;for(var l=i(s,0),t=l-2;l>t&&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].max<U&&(n[p].max=U,n[p].maxY=r,n[p].maxX=o),n[p].sum+=U,n[p].counter++):y[p].length>0&&(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].max<U&&(n[p].max=U,n[p].maxX=o,n[p].maxY=r),n[p].sum+=U,n[p].counter++):y[p].length>0&&(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].max0<g[0]&&(n[V].max0=g[0],n[V].maxY0=f,n[V].maxX0=b),n[V].sum0+=g[0],n[V].counter0++,n[V].min1>g[1]&&(n[V].min1=g[1],n[V].minY1=f,n[V].minX1=b),n[V].max1<g[1]&&(n[V].max1=g[1],n[V].maxY1=f,n[V].maxX1=b),n[V].sum1+=g[1],n[V].counter1++}}}for(var k in r)r[k].length>0&&(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;i<e.length;i++)t+=e[i];return t/e.length};break;default:i=function(e){return e[0]}}for(var r=[],s=0;n>s;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].max<g&&(o[f].max=g,x?(o[f].maxY=V,o[f].maxX=o[f][F]):(o[f].maxX=m+l,o[f].maxY=o[f][F])),o[f].sum+=g,o[f].counter++,F%S===0&&(u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:l,x?l:h,x?\"vertical\":\"horizontal\"),this.shapeList.push(new n(u))));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,\"-\"),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].max0<k[0]&&(a[m].max0=k[0],a[m].maxY0=W,a[m].maxX0=L),a[m].sum0+=k[0],a[m].counter0++,a[m].min1>k[1]&&(a[m].min1=k[1],a[m].minY1=W,a[m].minX1=L),a[m].max1<k[1]&&(a[m].max1=k[1],a[m].maxY1=W,a[m].maxX1=L),a[m].sum1+=k[1],a[m].counter1++}}}this._calculMarkMapXY(a,i,\"xy\")},_mapSize:function(e,t,i){var n,a,o=this._findSpecialBarSzie(t,i),r=o.barWidthMap,s=o.barMaxWidthMap,l=o.barMinHeightMap,h=o.sBarWidthCounter,m=o.sBarWidthTotal,V=o.barGap,U=o.barCategoryGap,d=1;if(t.length!=h){if(i)n=e.getGap(),V=0,a=+(n/t.length).toFixed(2),0>=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]<o&&(a-=o-i[m])}return{barWidthMap:t,barMaxWidthMap:i,barMinHeightMap:n,gap:a,barWidth:o,barGap:r,interval:s}},_getBarItem:function(e,t,i,n,a,r,l,h){var m,V=this.series,U=V[e],d=U.data[t],p=this._sIndex2ColorMap[e],c=[d,U],u=this.deepMerge(c,\"itemStyle.normal\"),y=this.deepMerge(c,\"itemStyle.emphasis\"),g=u.barBorderWidth;m={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(c,\"clickable\"),style:{x:n,y:a,width:r,height:l,brushType:\"both\",color:this.getItemStyleColor(this.deepQuery(c,\"itemStyle.normal.color\")||p,e,t,d),radius:u.barBorderRadius,lineWidth:g,strokeColor:u.barBorderColor},highlightStyle:{color:this.getItemStyleColor(this.deepQuery(c,\"itemStyle.emphasis.color\"),e,t,d),radius:y.barBorderRadius,lineWidth:y.barBorderWidth,strokeColor:y.barBorderColor},_orient:h};var b=m.style;m.highlightStyle.color=m.highlightStyle.color||(\"string\"==typeof b.color?s.lift(b.color,-.3):b.color),b.x=Math.floor(b.x),b.y=Math.floor(b.y),b.height=Math.ceil(b.height),b.width=Math.ceil(b.width),g>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.max0<a[0]&&(o.max0=a[0],o.maxY0=n[r][1],o.maxX0=n[r][0]),o.sum0+=a[0],o.counter0++,o.min1>a[1]&&(o.min1=a[1],o.minY1=n[r][1],o.minX1=n[r][0]),o.max1<a[1]&&(o.max1=a[1],o.maxY1=n[r][1],o.maxX1=n[r][0]),o.sum1+=a[1],o.counter1++;var l=this.component.grid.getX(),h=this.component.grid.getXend(),m=this.component.grid.getY(),V=this.component.grid.getYend();o.average0=o.sum0/o.counter0;var U=e.getCoord(o.average0);o.averageLine0=[[U,V],[U,m]],o.minLine0=[[o.minX0,V],[o.minX0,m]],o.maxLine0=[[o.maxX0,V],[o.maxX0,m]],o.average1=o.sum1/o.counter1;var d=t.getCoord(o.average1);return o.averageLine1=[[l,d],[h,d]],o.minLine1=[[l,o.minY1],[h,o.minY1]],o.maxLine1=[[l,o.maxY1],[h,o.maxY1]],o},_buildPointList:function(e){var t,i,n,a,o=this.series;for(var r in e)if(t=o[r],i=e[r],t.large&&t.data.length>t.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);\n\n},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;t<this.dataRangeOption.min?t=this.dataRangeOption.min:t>this.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(e<this.dataRangeOption.min?e=this.dataRangeOption.min:e>this.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]<y[2],this.shapeList.push(this._getCandle(b,y[6],y[7],y[0],y[1],y[2],y[3],y[4],y[5],g?this.query(p,\"itemStyle.normal.color\")||r:this.query(p,\"itemStyle.normal.color0\")||s,this.query(p,\"itemStyle.normal.lineStyle.width\")||i,g?this.query(p,\"itemStyle.normal.lineStyle.color\")||n:this.query(p,\"itemStyle.normal.lineStyle.color0\")||o,g?this.query(p,\"itemStyle.emphasis.color\")||V||r:this.query(p,\"itemStyle.emphasis.color0\")||U||s,this.query(p,\"itemStyle.emphasis.lineStyle.width\")||l||i,g?this.query(p,\"itemStyle.emphasis.lineStyle.color\")||h||n:this.query(p,\"itemStyle.emphasis.lineStyle.color0\")||m||o))}},_isLarge:function(e){return e[0][1]<.5},_getLargePointList:function(e){for(var t=this.component.grid.getWidth(),i=e.length,n=[],a=0;t>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,\nthis.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.x<t[0]?n.push(e[o]):a.push(e[o]));this._layoutCalculate(n,t,i,-1),this._layoutCalculate(a,t,i,1)},_layoutCalculate:function(e,t,i,n){function a(t,i,n){for(var a=t;i>a;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;l<r.length;l++)n=r[l].name||\"\",this.selectedMap[n]=o?o.isSelected(n):!0,this.selectedMap[n]&&(o?(i=o.getColor(n),t=o.getItemShape(n),t&&(t.style.brushType=this.deepQuery([r[l],this.serie],\"itemStyle.normal.areaStyle\")?\"both\":\"stroke\",o.setItemShape(n,t))):i=this.zr.getColor(l),a=this._getPointList(this.serie.polarIndex,r[l]),this._addSymbol(a,i,l,e,this.serie.polarIndex),this._addDataShape(a,i,r[l],e,l,s),this._radarDataCounter++)},_getPointList:function(e,t){for(var i,n,a=[],o=this.component.polar,r=0,s=t.value.length;s>r;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;d<r.length;d++)a.value[d]=U.accAdd(a.value[d],r[d]);V&&V.add(a.name,l.style.color||l.style.strokeColor)}i.dragIn=i.dragIn||!0,this.isDrop=!1}},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},r.inherits(t,i),e(\"../chart\").define(\"radar\",t),t}),i(\"echarts/component/polar\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Line\",\"zrender/shape/Polygon\",\"zrender/shape/Circle\",\"zrender/shape/Ring\",\"../config\",\"zrender/tool/util\",\"../util/coordinates\",\"../util/accMath\",\"../util/smartSteps\",\"../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/Line\"),o=e(\"zrender/shape/Polygon\"),r=e(\"zrender/shape/Circle\"),s=e(\"zrender/shape/Ring\"),l=e(\"../config\");l.polar={zlevel:0,z:0,center:[\"50%\",\"50%\"],radius:\"75%\",startAngle:90,boundaryGap:[0,0],splitNumber:5,name:{show:!0,textStyle:{color:\"#333\"}},axisLine:{show:!0,lineStyle:{color:\"#ccc\",width:1,type:\"solid\"}},axisLabel:{show:!1,textStyle:{color:\"#333\"}},splitArea:{show:!0,areaStyle:{color:[\"rgba(250,250,250,0.3)\",\"rgba(200,200,200,0.3)\"]}},splitLine:{show:!0,lineStyle:{width:1,color:\"#ccc\"}},type:\"polygon\"};var h=e(\"zrender/tool/util\"),m=e(\"../util/coordinates\");return t.prototype={type:l.COMPONENT_TYPE_POLAR,_buildShape:function(){for(var e=0;e<this.polar.length;e++)this._index=e,this.reformOption(this.polar[e]),this._queryTarget=[this.polar[e],this.option],this._createVector(e),this._buildSpiderWeb(e),this._buildText(e),this._adjustIndicatorValue(e),this._addAxisLabel(e);for(var e=0;e<this.shapeList.length;e++)this.zr.addShape(this.shapeList[e])},_createVector:function(e){for(var t,i=this.polar[e],n=this.deepQuery(this._queryTarget,\"indicator\"),a=n.length,o=i.startAngle,r=2*Math.PI/a,s=this._getRadius(),l=i.__ecIndicator=[],h=0;a>h;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<c.length;b++)if(i=this.deepQuery([c[b],p,this.option],\"axisLabel\"),i.show){var f=this.deepQuery([i,p,this.option],\"textStyle\"),k=this.deepQuery([i,p],\"formatter\");if(o={},o.textFont=this.getFont(f),o.color=f.color,o=h.merge(o,i),o.lineWidth=o.width,a=u[b].vector,s=u[b].value,m=b/c.length*2*Math.PI,V=i.offset||10,U=i.interval||0,!s)return;for(var x=1;y>=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;c<V.length;c++)o=this.deepQuery([V[c],h,this.option],\"name\"),o.show&&(l=this.deepQuery([o,h,this.option],\"textStyle\"),i={},i.textFont=this.getFont(l),i.color=l.color,i.text=\"function\"==typeof o.formatter?o.formatter.call(this.myChart,V[c].text,c):\"string\"==typeof o.formatter?o.formatter.replace(\"{value}\",V[c].text):V[c].text,m[c].text=i.text,t=m[c].vector,a=Math.round(t[0])>0?\"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;r<this.series.length;r++)if(t=this.series[r],t.type==l.CHART_TYPE_RADAR){i=t.data||[];for(var s=0;s<i.length;s++)n=this.deepQuery([i[s],t,this.option],\"polarIndex\")||0,n!=e||o&&!o.isSelected(i[s].name)||a.push(i[s])}return a},_findValue:function(e,t,i,n){function a(e){(e>o||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;l<e.length;l++)a(this.getDataFromOption(e[l].value[t]));else{s=e[0];for(var l=0;l<s.value.length;l++)a(this.getDataFromOption(s.value[l]))}var h=Math.abs(o-r);return r-=Math.abs(h*n[0]),o+=Math.abs(h*n[1]),r===o&&(0===o?o=1:o>0?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;V<this.polar.length;V++){if(t=this.polar[V],i=this.getCenter(V),e[0]==i[0]&&e[1]==i[1])return{polarIndex:V,valueIndex:0};if(n=this._getRadius(),o=t.startAngle,r=t.indicator,s=r.length,l=2*Math.PI/s,a=m.cartesian2polar(e[0]-i[0],i[1]-e[1]),e[0]-i[0]<0&&(a[1]+=Math.PI),a[1]<0&&(a[1]+=2*Math.PI),h=a[1]-o/180*Math.PI+2*Math.PI,Math.abs(Math.cos(h%(l/2)))*n>a[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;o<e.length;o++){var r=e[o];if(this.selectedMap[r.name]){var s;r.matrix?s=this._getSerieGraphFromDataMatrix(r,i):r.links&&(s=this._getSerieGraphFromNodeLinks(r,i)),s.filterNode(n,this),r.ribbonType&&s.filterEdge(a(s)),t.push(s),s.__serie=r}}if(t.length){var l=t[0];if(!i.ribbonType){var h=i.minRadius,m=i.maxRadius,V=1/0,U=-(1/0);l.eachNode(function(e){U=Math.max(e.layout.size,U),V=Math.min(e.layout.size,V)});var d=(m-h)/(U-V);l.eachNode(function(e){var t=this._getNodeQueryTarget(i,e),n=this.query(t,\"symbolSize\");e.layout.size=U===V?n||V:n||(e.layout.size-V)*d+h},this)}var c=new p;c.clockWise=i.clockWise,c.startAngle=i.startAngle*Math.PI/180,c.clockWise||(c.startAngle=-c.startAngle),c.padding=i.padding*Math.PI/180,c.sort=i.sort,c.sortSub=i.sortSub,c.directed=i.ribbonType,c.run(t);var u=this.query(i,\"itemStyle.normal.label.show\");if(i.ribbonType){this._buildSectors(i,0,l,i,t),u&&this._buildLabels(i,0,l,i,t);for(var o=0,y=0;o<e.length;o++)this.selectedMap[e[o].name]&&this._buildRibbons(e,o,t[y++],i);i.showScale&&this._buildScales(i,0,l)}else{this._buildNodeIcons(i,0,l,i,t),u&&this._buildLabels(i,0,l,i,t);for(var o=0,y=0;o<e.length;o++)this.selectedMap[e[o].name]&&this._buildEdgeCurves(e,o,t[y++],i,l)}this._initHoverHandler(e,t)}},_getSerieGraphFromDataMatrix:function(e,t){for(var i=[],n=0,a=[],o=0;o<e.matrix.length;o++)a[o]=e.matrix[o].slice();for(var r=e.data||e.nodes,o=0;o<r.length;o++){var s={},l=r[o];l.rawIndex=o;for(var h in l)\"name\"===h?s.id=l.name:s[h]=l[h];var m=this._getNodeCategory(t,l),V=m?m.name:l.name;if(this.selectedMap[V]=this.isSelected(V),this.selectedMap[V])i.push(s),n++;else{a.splice(n,1);for(var U=0;U<a.length;U++)a[U].splice(n,1)}}var p=d.fromMatrix(i,a,!0);return p.eachNode(function(e){e.layout={size:e.data.outValue},e.rawIndex=e.data.rawIndex}),p.eachEdge(function(e){e.layout={weight:e.data.weight}}),p},_getSerieGraphFromNodeLinks:function(e,t){for(var i=new d(!0),n=e.data||e.nodes,a=0,o=n.length;o>a;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;n<e.outEdges.length;n++)i+=e.outEdges[n].data.weight||0;else for(var n=0;n<e.edges.length;n++)i+=e.edges[n].data.weight||0;e.layout={size:i}}),i.eachEdge(function(e){e.layout={weight:null==e.data.weight?1:e.data.weight}}),i},_initHoverHandler:function(e,t){var i=e[0],n=t[0],a=this;n.eachNode(function(e){e.shape.onmouseover=function(){n.eachNode(function(e){e.shape.style.opacity=.1,e.labelShape&&(e.labelShape.style.opacity=.1,e.labelShape.modSelf()),e.shape.modSelf()});for(var i=0;i<t.length;i++)for(var o=0;o<t[i].edges.length;o++){var r=t[i].edges[o],s=a._getEdgeQueryTarget(t[i].__serie,r.data);r.shape.style.opacity=.1*a.deepQuery(s,\"opacity\"),r.shape.modSelf()}e.shape.style.opacity=1,e.labelShape&&(e.labelShape.style.opacity=1);for(var i=0;i<t.length;i++){var l=t[i].getNodeById(e.id);if(l)for(var o=0;o<l.outEdges.length;o++){var r=l.outEdges[o],s=a._getEdgeQueryTarget(t[i].__serie,r.data);r.shape.style.opacity=a.deepQuery(s,\"opacity\");var h=t[0].getNodeById(r.node2.id);h&&(h.shape&&(h.shape.style.opacity=1),h.labelShape&&(h.labelShape.style.opacity=1))}}a.zr.refreshNextFrame()},e.shape.onmouseout=function(){n.eachNode(function(e){e.shape.style.opacity=1,e.labelShape&&(e.labelShape.style.opacity=1,e.labelShape.modSelf()),e.shape.modSelf()});for(var e=0;e<t.length;e++)for(var o=0;o<t[e].edges.length;o++){var r=t[e].edges[o],s=[r.data,i];r.shape.style.opacity=a.deepQuery(s,\"itemStyle.normal.chordStyle.opacity\"),r.shape.modSelf()}a.zr.refreshNextFrame()}})},_buildSectors:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),r=this.parseRadius(this.zr,n.radius),s=n.clockWise,l=s?1:-1;i.eachNode(function(i){var h=this._getNodeCategory(n,i.data),V=this.getColor(h?h.name:i.id),U=i.layout.startAngle/Math.PI*180*l,d=i.layout.endAngle/Math.PI*180*l,p=new o({zlevel:e.zlevel,z:e.z,style:{x:a[0],y:a[1],r0:r[0],r:r[1],startAngle:U,endAngle:d,brushType:\"fill\",opacity:1,color:V,clockWise:s},clickable:n.clickable,highlightStyle:{brushType:\"fill\"}});p.style.lineWidth=this.deepQuery([i.data,n],\"itemStyle.normal.borderWidth\"),p.highlightStyle.lineWidth=this.deepQuery([i.data,n],\"itemStyle.emphasis.borderWidth\"),p.style.strokeColor=this.deepQuery([i.data,n],\"itemStyle.normal.borderColor\"),p.highlightStyle.strokeColor=this.deepQuery([i.data,n],\"itemStyle.emphasis.borderColor\"),p.style.lineWidth>0&&(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;\n\ni.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;i<this.edges.length;){var n=this.edges[i];n.node1===e||n.node2===e?this.removeEdge(n):i++}}},i.prototype.filterNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;)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;o<this.nodes.length;o++)this.nodes[o].__visited=!1;if(!e.call(n,t,null))for(var r=[t];r.length;)for(var s=r.shift(),l=s[a],o=0;o<l.length;o++){var h=l[o],m=h.node1===s?h.node2:h.node1;if(!m.__visited){if(e.call(m,m,s))return;r.push(m),m.__visited=!0}}}},i.prototype.clone=function(){for(var e=new i(this._directed),t=0;t<this.nodes.length;t++)e.addNode(this.nodes[t].id,this.nodes[t].data);for(var t=0;t<this.edges.length;t++){var n=this.edges[t];e.addEdge(n.node1.id,n.node2.id,n.data)}return e};var n=function(e,t){this.id=e,this.data=t||null,this.inEdges=[],this.outEdges=[],this.edges=[]};n.prototype.degree=function(){return this.edges.length},n.prototype.inDegree=function(){return this.inEdges.length},n.prototype.outDegree=function(){return this.outEdges.length};var a=function(e,t,i){this.node1=e,this.node2=t,this.data=i||null};return i.Node=n,i.Edge=a,i.fromMatrix=function(e,t,n){if(t&&t.length&&t[0].length===t.length&&e.length===t.length){for(var a=t.length,o=new i(n),r=0;a>r;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;U<e.length;U++){var d=e[U],p=d.getNodeById(h.id);if(p){m.size+=p.layout.size;for(var c=this.directed?p.outEdges:p.edges,u=0;u<c.length;u++){var y=c[u],g=y.layout.weight;m.subGroups.push({weight:g,edge:y,graph:d}),V+=g}}}s+=m.size;for(var b=m.size/V,u=0;u<m.subGroups.length;u++)m.subGroups[u].weight*=b;\"ascending\"===this.sortSub?m.subGroups.sort(t):\"descending\"===this.sort&&(m.subGroups.sort(t),m.subGroups.reverse())}\"ascending\"===this.sort?r.sort(i):\"descending\"===this.sort&&(r.sort(i),r.reverse());for(var b=(2*Math.PI-this.padding*o)/s,f=this.startAngle,k=this.clockWise?1:-1,l=0;o>l;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;u<m.subGroups.length;u++){var x=m.subGroups[u];x.edge.layout.startAngle=f,f+=k*x.weight*b,x.edge.layout.endAngle=f}f=m.node.layout.endAngle+k*this.padding}}};var t=function(e,t){return e.weight-t.weight},i=function(e,t){return e.size-t.size};return e}),i(\"echarts/chart/force\",[\"require\",\"./base\",\"../data/Graph\",\"../layout/Force\",\"zrender/shape/Line\",\"zrender/shape/BezierCurve\",\"zrender/shape/Image\",\"../util/shape/Icon\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/config\",\"zrender/tool/vector\",\"../chart\"],function(e){\"use strict\";function t(e,t,o,h,m){var V=this;r.call(this,e,t,o,h,m),this.__nodePositionMap={},this._graph=new s(!0),this._layout=new l,this._layout.onupdate=function(){V._step()},this._steps=1,this.ondragstart=function(){i.apply(V,arguments)},this.ondragend=function(){a.apply(V,arguments)},this.ondrop=function(){},this.shapeHandler.ondragstart=function(){V.isDragstart=!0},this.onmousemove=function(){n.apply(V,arguments)},this.refresh(h)}function i(e){if(this.isDragstart&&e.target){var t=e.target;t.fixed=!0,this.isDragstart=!1,this.zr.on(u.EVENT.MOUSEMOVE,this.onmousemove)}}function n(){this._layout.temperature=.8,this._step()}function a(e,t){if(this.isDragend&&e.target){var i=e.target;i.fixed=!1,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this.zr.un(u.EVENT.MOUSEMOVE,this.onmousemove)}}function o(e,t,i){var n=y.create();return n[0]=(Math.random()-.5)*i+e,n[1]=(Math.random()-.5)*i+t,n}var r=e(\"./base\"),s=e(\"../data/Graph\"),l=e(\"../layout/Force\"),h=e(\"zrender/shape/Line\"),m=e(\"zrender/shape/BezierCurve\"),V=e(\"zrender/shape/Image\"),U=e(\"../util/shape/Icon\"),d=e(\"../config\");d.force={zlevel:1,z:2,center:[\"50%\",\"50%\"],size:\"100%\",preventOverlap:!1,coolDown:.99,minRadius:10,maxRadius:20,ratioScaling:!1,large:!1,useWorker:!1,steps:1,scaling:1,gravity:1,symbol:\"circle\",symbolSize:0,linkSymbol:null,linkSymbolSize:[10,15],draggable:!0,clickable:!0,roam:!1,itemStyle:{normal:{label:{show:!1,position:\"inside\"},nodeStyle:{brushType:\"both\",borderColor:\"#5182ab\",borderWidth:1},linkStyle:{color:\"#5182ab\",width:1,type:\"line\"}},emphasis:{label:{show:!1},nodeStyle:{},linkStyle:{opacity:0}}}};var p=e(\"../util/ecData\"),c=e(\"zrender/tool/util\"),u=e(\"zrender/config\"),y=e(\"zrender/tool/vector\");return t.prototype={constructor:t,type:d.CHART_TYPE_FORCE,_init:function(){this.selectedMap={};var e,t=this.component.legend,i=this.series;this.clear();for(var n=0,a=i.length;a>n;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;a<e.matrix.length;a++)n[a]=e.matrix[a].slice();for(var o=e.data||e.nodes,a=0;a<o.length;a++){var r={},l=o[a];for(var h in l)\"name\"===h?r.id=l.name:r[h]=l[h];var m=this._getNodeCategory(e,l),V=m?m.name:l.name;if(this.selectedMap[V]=this.isSelected(V),this.selectedMap[V])t.push(r),i++;else{n.splice(i,1);for(var U=0;U<n.length;U++)n[U].splice(i,1)}}var d=s.fromMatrix(t,n,!0);return d.eachNode(function(e,t){e.layout={size:e.data.value,mass:0},e.rawIndex=t}),d.eachEdge(function(e){e.layout={weight:e.data.weight}}),d},_getSerieGraphFromNodeLinks:function(e){for(var t=new s(!0),i=e.data||e.nodes,n=0,a=i.length;a>n;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;i<e.edges.length;i++)t+=e.edges[i].data.weight||0}e.layout={size:t,mass:0}}),t.eachEdge(function(e){e.layout={weight:null==e.data.weight?1:e.data.weight}}),t},_initLayout:function(e){var t=this._graph,i=t.nodes.length,n=this.query(e,\"minRadius\"),a=this.query(e,\"maxRadius\");this._steps=e.steps||1;var r=this._layout;r.center=this.parseCenter(this.zr,e.center),r.width=this.parsePercent(e.size,this.zr.getWidth()),r.height=this.parsePercent(e.size,this.zr.getHeight()),r.large=e.large,r.scaling=e.scaling,r.ratioScaling=e.ratioScaling,r.gravity=e.gravity,r.temperature=1,r.coolDown=e.coolDown,r.preventNodeEdgeOverlap=e.preventOverlap,r.preventNodeOverlap=e.preventOverlap;for(var s=1/0,l=-(1/0),h=0;i>h;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<e.nodes.length;t++){var i=e.nodes[t],n=i.layout.position,a=i.data,o=i.shape,r=o.fixed||a.fixX,s=o.fixed||a.fixY;r===!0?r=1:isNaN(r)&&(r=0),s===!0?s=1:isNaN(s)&&(s=0),o.position[0]+=(n[0]-o.position[0])*(1-r),o.position[1]+=(n[1]-o.position[1])*(1-s),y.copy(n,o.position);var l=a.name;if(l){var h=this.__nodePositionMap[l];h||(h=this.__nodePositionMap[l]=y.create()),y.copy(h,n)}o.modSelf()}},_step:function(){this._syncNodePositions(),this._updateLinkShapes(),this.zr.refreshNextFrame(),this._layout.temperature>.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;n<t.length;n++){var s=t[n];i[2*n]=s.layout.position[0],i[2*n+1]=s.layout.position[1]}this._layoutWorker.postMessage(i.buffer,[i.buffer]),this._layoutWorker.postMessage({cmd:\"update\",steps:e,temperature:this.temperature,coolDown:this.coolDown});for(var n=0;e>n;n++)this.temperature*=this.coolDown}else{o(this._$onupdate);for(var n=0;n<t.length;n++){var s=t[n];a.copy(this._layout.nodes[n].position,s.layout.position)}for(var n=0;e>n;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;i<this.graph.nodes.length;i++){var n=this.graph.nodes[i];n.layout.position[0]=t[2*i],n.layout.position[1]=t[2*i+1]}this.onupdate&&this.onupdate()}else if(this._layout){for(var i=0;i<this.graph.nodes.length;i++){var n=this.graph.nodes[i];a.copy(n.layout.position,this._layout.nodes[i].position)}this.onupdate&&this.onupdate()}},s.prototype.dispose=function(){this._layoutWorker&&this._layoutWorker.terminate(),this._layoutWorker=null,this._layout=null},s}),i(\"echarts/layout/forceLayoutWorker\",[\"require\",\"zrender/tool/vector\"],function o(e){\"use strict\";function t(){this.subRegions=[],this.nSubRegions=0,this.node=null,this.mass=0,this.centerOfMass=null,this.bbox=new l(4),this.size=0}function i(){this.position=r.create(),this.force=r.create(),this.forcePrev=r.create(),this.speed=r.create(),this.speedPrev=r.create(),this.mass=1,this.inDegree=0,this.outDegree=0}function n(e,t){this.node1=e,this.node2=t,this.weight=1}function a(){this.barnesHutOptimize=!1,this.barnesHutTheta=1.5,this.repulsionByDegree=!1,this.preventNodeOverlap=!1,this.preventNodeEdgeOverlap=!1,this.strongGravity=!0,this.gravity=1,this.scaling=1,this.edgeWeightInfluence=1,this.center=[0,0],this.width=500,this.height=500,this.maxSpeedIncrease=1,this.nodes=[],this.edges=[],this.bbox=new l(4),this._rootRegion=new t,this._rootRegion.centerOfMass=r.create(),this._massArr=null,this._k=0}var r,s=\"undefined\"==typeof window&&\"undefined\"==typeof e;r=s?{create:function(e,t){var i=new Float32Array(2);return i[0]=e||0,i[1]=t||0,i},dist:function(e,t){var i=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(i*i+n*n)},len:function(e){var t=e[0],i=e[1];return Math.sqrt(t*t+i*i)},scaleAndAdd:function(e,t,i,n){return e[0]=t[0]+i[0]*n,e[1]=t[1]+i[1]*n,e},scale:function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e},add:function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e},sub:function(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},normalize:function(e,t){var i=t[0],n=t[1],a=i*i+n*n;return a>0&&(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<this.nSubRegions;e++)this.subRegions[e].beforeUpdate();this.mass=0,this.centerOfMass&&(this.centerOfMass[0]=0,this.centerOfMass[1]=0),this.nSubRegions=0,this.node=null},t.prototype.afterUpdate=function(){this.subRegions.length=this.nSubRegions;for(var e=0;e<this.nSubRegions;e++)this.subRegions[e].afterUpdate()},t.prototype.addNode=function(e){if(0===this.nSubRegions){if(null==this.node)return void(this.node=e);this._addNodeToSubRegion(this.node),this.node=null}this._addNodeToSubRegion(e),this._updateCenterOfMass(e)},t.prototype.findSubRegion=function(e,t){for(var i=0;i<this.nSubRegions;i++){var n=this.subRegions[i];if(n.contain(e,t))return n}},t.prototype.contain=function(e,t){return this.bbox[0]<=e&&this.bbox[2]>=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);\n\n}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;e<this.nodes.length;e++)this.applyNodeGravity(this.nodes[e])},a.prototype.updateEdgeForce=function(){for(var e=0;e<this.edges.length;e++)this.applyEdgeAttraction(this.edges[e])},a.prototype.updateNodeEdgeForce=function(){for(var e=0;e<this.nodes.length;e++)for(var t=0;t<this.edges.length;t++)this.applyEdgeToNodeRepulsion(this.edges[t],this.nodes[e])},a.prototype.applyRegionToNodeRepulsion=function(){var e=r.create();return function(t,i){if(t.node)this.applyNodeToNodeRepulsion(t.node,i,!0);else{if(0===t.mass&&0===i.mass)return;r.sub(e,i.position,t.centerOfMass);var n=e[0]*e[0]+e[1]*e[1];if(n>this.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;o<t.nSubRegions;o++)this.applyRegionToNodeRepulsion(t.subRegions[o],i)}}}(),a.prototype.applyNodeToNodeRepulsion=function(){var e=r.create();return function(t,i,n){if(t!==i&&(0!==t.mass||0!==i.mass)){r.sub(e,t.position,i.position);var a=e[0]*e[0]+e[1]*e[1];if(0!==a){var o,s=t.mass+i.mass,l=Math.sqrt(a);r.scale(e,e,1/l),this.preventNodeOverlap?(l=l-t.size-i.size,l>0?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;a<this.nodes.length;a++){var o=this.nodes[a].position;e=Math.min(e,o[0]),t=Math.min(t,o[1]),i=Math.max(i,o[0]),n=Math.max(n,o[1])}this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n},a.getWorkerCode=function(){var e=o.toString();return e.slice(e.indexOf(\"{\")+1,e.lastIndexOf(\"return\"))},s){var h=null;self.onmessage=function(e){if(e.data instanceof ArrayBuffer){if(!h)return;for(var t=new Float32Array(e.data),i=t.length/2,n=0;i>n;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;i<e.pointList.length;i++){var n=e.pointList[i];n[0]*=t,n[1]*=t}var a=e.controlPointList;if(a)for(var i=0;i<a.length;i++){var n=a[i];n[0]*=t,n[1]*=t}}function i(e,t){e.xStart*=t,e.yStart*=t,e.xEnd*=t,e.yEnd*=t,null!=e.cpX1&&(e.cpX1*=t,e.cpY1*=t)}if(!(this.shapeList.length<=0)){for(var n=0,a=this.shapeList.length;a>n;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]<e[1]*t[0]?-1:1)*Math.acos(o(e,t))},s=function(e){t.call(this,e)};return s.prototype={type:\"path\",buildPathArray:function(e,t,i){if(!e)return[];t=t||0,i=i||0;var a=e,o=[\"m\",\"M\",\"l\",\"L\",\"v\",\"V\",\"h\",\"H\",\"z\",\"Z\",\"c\",\"C\",\"q\",\"Q\",\"t\",\"T\",\"s\",\"S\",\"a\",\"A\"];a=a.replace(/-/g,\" -\"),a=a.replace(/  /g,\" \"),a=a.replace(/ /g,\",\"),a=a.replace(/,,/g,\",\");var r;for(r=0;r<o.length;r++)a=a.replace(new RegExp(o[r],\"g\"),\"|\"+o[r]);var s=a.split(\"|\"),l=[],h=0,m=0;for(r=1;r<s.length;r++){var V=s[r],U=V.charAt(0);V=V.slice(1),V=V.replace(new RegExp(\"e,-\",\"g\"),\"e-\");var d=V.split(\",\");d.length>0&&\"\"===d[0]&&d.shift();for(var p=0;p<d.length;p++)d[p]=parseFloat(d[p]);for(;d.length>0&&!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;h<l.length;h++)for(var m=l[h].points,V=0;V<m.length;V++)V%2===0?(m[V]+r<i&&(i=m[V]),m[V]+r>n&&(n=m[V])):(m[V]+s<a&&(a=m[V]),m[V]+s>o&&(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),\ny: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<t.length;n++)for(var a=t[n],o=a.geometry.coordinates,r=a.geometry.encodeOffsets,s=0;s<o.length;s++){var l=o[s];if(\"Polygon\"===a.geometry.type)o[s]=i(l,r[s]);else if(\"MultiPolygon\"===a.geometry.type)for(var h=0;h<l.length;h++){var m=l[h];l[h]=i(m,r[s][h])}}return e.UTF8Encoding=!1,e}function i(e,t){for(var i=[],n=t[0],a=t[1],o=0;o<e.length;o+=2){var r=e.charCodeAt(o)-64,s=e.charCodeAt(o+1)-64;r=r>>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;n<t.length;){var a=parseFloat(t[n++]),o=parseFloat(t[n++]);i.push([a,o])}return i}var h=e(\"zrender/shape/Path\"),m={path:function(e,t){var i=e.getAttribute(\"d\"),n=h.prototype.getRect({path:i});return{shapeType:\"path\",path:i,cp:[(n.x+n.width/2)*t[0],(n.y+n.height/2)*t[1]]}},rect:function(e,i){var n=t(e.getAttribute(\"x\")),a=t(e.getAttribute(\"y\")),o=t(e.getAttribute(\"width\")),r=t(e.getAttribute(\"height\"));return{shapeType:\"rectangle\",x:n,y:a,width:o,height:r,cp:[(n+o/2)*i[0],(a+r/2)*i[1]]}},line:function(e,i){var n=t(e.getAttribute(\"x1\")),a=t(e.getAttribute(\"y1\")),o=t(e.getAttribute(\"x2\")),r=t(e.getAttribute(\"y2\"));return{shapeType:\"line\",xStart:n,yStart:a,xEnd:o,yEnd:r,cp:[.5*(n+o)*i[0],.5*(a+r)*i[1]]}},circle:function(e,i){var n=t(e.getAttribute(\"cx\")),a=t(e.getAttribute(\"cy\")),o=t(e.getAttribute(\"r\"));return{shapeType:\"circle\",x:n,y:a,r:o,cp:[n*i[0],a*i[1]]}},ellipse:function(e,t){var i=parseFloat(e.getAttribute(\"cx\")||0),n=parseFloat(e.getAttribute(\"cy\")||0),a=parseFloat(e.getAttribute(\"rx\")||0),o=parseFloat(e.getAttribute(\"ry\")||0);return{shapeType:\"ellipse\",x:i,y:n,a:a,b:o,cp:[i*t[0],n*t[1]]}},polygon:function(e,t){var i=e.getAttribute(\"points\"),n=[1/0,1/0],a=[-(1/0),-(1/0)];if(i){i=l(i);for(var o=0;o<i.length;o++){var r=i[o];n[0]=Math.min(r[0],n[0]),n[1]=Math.min(r[1],n[1]),a[0]=Math.max(r[0],a[0]),a[1]=Math.max(r[1],a[1])}return{shapeType:\"polygon\",pointList:i,cp:[(n[0]+a[0])/2*t[0],(n[1]+a[1])/2*t[0]]}}},polyline:function(e,t){var i=m.polygon(e,t);return i}};return{getBbox:i,geoJson2Path:n,pos2geo:a,geo2pos:o}}),i(\"echarts/util/projection/normal\",[],function(){function e(e,i){return i=i||{},e.srcSize||t(e,i),e.srcSize}function t(e,t){t=t||{},r.xmin=360,r.xmax=-360,r.ymin=180,r.ymax=-180;for(var i,n,a=e.features,o=0,s=a.length;s>o;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.xmax<e[0]&&(t._bbox.xmax=e[0]),t._bbox.ymin>e[1]&&(t._bbox.ymin=e[1]),t._bbox.ymax<e[1]&&(t._bbox.ymax=e[1]);var n=(i[0]-o.offset.x)*o.scale.x+o.offset.left,a=(i[1]-o.offset.y)*o.scale.y+o.offset.top;return[n,a]},Point:function(e){return e=this.makePoint(e),e.join(\",\")},LineString:function(e){for(var t,i=\"\",n=0,a=e.length;a>n;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.xmax<n&&(t.xmax=n),t.ymin>a&&(t.ymin=a),t.ymax<a&&(t.ymax=a)},Point:function(e){this.makePoint(e)},LineString:function(e){for(var t=0,i=e.length;i>t;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ǉÝ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:[\"@@ǊnllLnxV@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@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]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@jCEF}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@HMBOKiOQDWEUDMQSF_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\"],\nencodeOffsets:[[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\"],\nencodeOffsets:[[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Ç²Llk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ĉwÇ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ĢnĢ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KÇÅ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Å@Ç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ÇôkUÇ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ƅÛÇ±wÝ@ĉ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\"]],\nencodeOffsets:[[[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@Ç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:[\"@@hĲ¤Ī¯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Tt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[AOSKKAMPSDSLOAV_@@`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[@[LGScDOGQOAGSYZ[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óܛǊÛ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±@nVÇ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@Ç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(){\nreturn{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ȰĉwnǉÜóéVÛnĊīČǉĉ@ō@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\"],\nencodeOffsets:[[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@Ç²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¥ȁ£ʵǊǓƲɳÞǔ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»ğğǉVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVǉó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:[\"@@ɲŁĢǉĊ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ĀĠǊĠ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ġǊɱłō¦\"],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¯ŃóʇŐŻĉǊŻĢ¯ÒÈ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»ôÇÑ°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\",\nproperties:{name:\"呼和浩特市\",cp:[111.4124,40.4901],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@ʶUĊ¥ÈřĠ¯ĉômīÑ¯mwk¯ÇV°ÑżġĊǉǓɱţǓƝó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@Ñ²±ğVUĢƨ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ƐaĢô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£UÇ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ŉXUVI^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UaÇ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\"],\nencodeOffsets:[[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êĸǊ°¤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ÞÇ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ê±Ǌn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È¥WÇ_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ÝUÇ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Ç²@Þ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KUnÇ±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VÇ²Ll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ÞÇ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ŉq¯Bq]ÙYgSåk_gwU­isTEĕiqiUEkue_OSsZaWKo¡­qycY£w}ĩĕS§Z©SN¥SyLÑ¡±Ks^IYPd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:[\"@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾ǌƀ̚ІɣʪҴMوǯʲĹ،˒˰ǋ˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ͑ɳ̡ߛͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ\"],encodeOffsets:[[62680,36506]]}},{type:\"Feature\",id:\"AGO\",properties:{name:\"Angola\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽ໳΁᎝Š׋Ж₭ŵÏԃϞկ~ԉƝЙǅÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒ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Ԗ{ֺ֪ظՠՎԮǆ˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝǱᡋъ͏࡚Ț\"],encodeOffsets:[[52818,24828]]}},{type:\"Feature\",id:\"ARG\",properties:{name:\"Argentina\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп\"],[\"@@Ӵ؇͠ڰॠƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢Ǝݐжǈфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξǄę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐ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:[\"@@ը˃ߐĿǅɽϣಇÃq҂ŮΎÊǢ\"],encodeOffsets:[[70590,-49792]]}},{type:\"Feature\",id:\"AUS\",properties:{name:\"Australia\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ߺ́ҜŘپǊԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫԭܘŗֈӝܸtϬռõ\"],[\"@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػŉׁªˇӕ̇वޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗǉѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕуʁЗˋؕ֛Bࢽ՜ҋǄlӖкŘƚȒ̠ĺאģӼѻࡖƏӒӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿǱҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠǊϬеɡ͉҇ͻ˿Įͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنǈǠŽˬȮѾǆҦtʈ̸̾ʂЩÎՃȾķΛ̨ёÚӇ̥\"]],encodeOffsets:[[[148888,-41771]],[[147008,-14093]]]}},{type:\"Feature\",id:\"AUT\",properties:{name:\"Austria\"},geometry:{type:\"Polygon\",coordinates:[\"@@Û΃ӁCǎǻ˧էǇƗܽsщȏۛÞயɐȉ̊ࠧƣĭǅԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅\"],encodeOffsets:[[17388,49279]]}},{type:\"Feature\",id:\"AZE\",properties:{name:\"Azerbaijan\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv\"],[\"@@ϊËƞɈԈͺѴѵђ׭ϺʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘĲбҔɔŚʀ׀ԙ\"]],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˴ښۢŬּɲȴОœΚǢŘɎٴϖǆˀ޼ΒҦŢɀǇՠJáСŔϣӀչНॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم\"],encodeOffsets:[[-2895,9874]]}},{type:\"Feature\",id:\"BGD\",properties:{name:\"Bangladesh\"},geometry:{type:\"Polygon\",coordinates:[\"@@i׽̉ŶÆگʉѬµєǅКΕӨޟü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶ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ࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳǉÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌ϊ\"],encodeOffsets:[[24048,55207]]}},{type:\"Feature\",id:\"BLZ\",properties:{name:\"Belize\"},geometry:{type:\"Polygon\",coordinates:[\"@@OŮĸƴı̞ԔǄZHūǄ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ڤуӞеǇǒӜŖӼBҦ̡ƴ̿Ƌ̻į͔ýޔƿʤ֥ɪ΃ǏࢱǈÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ͑ঐʔbYδǏʖӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶ǲΰұԞΓݴɜƶA΢ԖʎċҔɊ̈Ôϼ०ֲێǊŔŴݴϚᘰpθſӔύ̬LؐӀƒǚē͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆǌʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪȜȗŉσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥ĢǒˆϠƦ˚ɢҬíȲҚçøǢƗǘĎʐͺõЈĒӔǱξǥʺɪȊŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤Ɓࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴఔ۝੸व٪ʏܖ̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę\"],\nencodeOffsets:[[-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كĘ̹ïųȱ˕}ͧǲधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩ƘԅѻѯޱėʐϦϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜\"],encodeOffsets:[[15647,7601]]}},{type:\"Feature\",id:\"CAN\",properties:{name:\"Canada\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С\"],[\"@@Хcઝ˂ޯІ̄î૆Ɂ࡮Η|Ʒ\"],[\"@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ\"],[\"@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝփǂǾیɻńইܯԅצЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶ǋɫ҅Չ\"],[\"@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ\"],[\"@@͡ѳχîəʢ Î͖ʦΆkɈǣ\"],[\"@@ঝҧץnǿɪزϲ଼SiǍ\"],[\"@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å\"],[\"@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ\"],[\"@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦǅԠ͍\"],[\"@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উంƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁ࠯ͽय؁ٓÖ܆ฤ۞഍णĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻŉࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ৭؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘĲܒƦࣆԋࣴьࡩΦժ˼৾ڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ\"],[\"@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈરƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬ǋ\"],[\"@@݉ևಹך˸Ş૸ٔȁ\"],[\"@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ̠ИÈነěชң\"],[\"@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի\"],[\"@@৊ǯຄńɖʑ޷Е౜αƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռসР\"],[\"@@࣓عय़Խ݆`кѮΨ࠰ɮცྈȱళݟ৉Ǎ\"],[\"@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν\"],[\"@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ\"],[\"@@ٞϵљϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ\"],[\"@@̙͢ݠƘࢢƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ĳ୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ\"],[\"@@ढ˓ကFܨˡȑ́८ȍՔȧଊ௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ\"],[\"@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ\"],[\"@@ϣy༽Âɡɼၜ]מƻĵĩ\"],[\"@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ\"],[\"@@৽ǏඉBbŤࡴʦҌદǝ\"],[\"@@కǥۃȚέ͂áΎજӪÅ৐̇ɫ̣\"],[\"@@͜Ε൏Ĥ൩˘ሏߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ\"],[\"@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև\"],[\"@@ᖢßᅮŅ໤ɫɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹǈڼ͘๰Ȩʄ̊஋͠ΥѠᘞڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దǈঘ࿲ƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲҀĝ᝚ƚᆔÁᆒÁ\"]],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׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾őіͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંĲͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒ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হƥ׍ʍ̯ࠫǋvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝǌĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾֺɏɠ஡Ο۷ɕेθܣͧ\"],encodeOffsets:[[-2924,5115]]}},{type:\"Feature\",id:\"CMR\",properties:{name:\"Cameroon\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךǲȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰˌʂ¶ͮ՟Ê֏֏Ҝޅҷ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̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨǱ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶǲȦΫ݊֏\"],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:[\"@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ÚтȢ̦иÊΞՆ͐Ѵ̳ȦǄӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ĳ̵ǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā\"],encodeOffsets:[[-77182,-155]]}},{type:\"Feature\",id:\"CRI\",properties:{name:\"Costa Rica\"},geometry:{type:\"Polygon\",coordinates:[\"@@җȆǟǮĬƤȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖǌŴňֆɝȖŊˊéƔǥʜÇȪǲɈҙ͖ͷЂΩ͗õ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ކʢ֧ΧÔƿęǇÙűj¥iĎÑ¾ǋVɫïƿ¬\"],encodeOffsets:[[33518,35984]]}},{type:\"Feature\",id:\"CYP\",properties:{name:\"Cyprus\"},geometry:{type:\"Polygon\",coordinates:[\"@@ãࡱͿЩŊȟͶЎǀ«ɬðǌUÒ½jč¦ŲiǈÚĚ\"],encodeOffsets:[[34789,35900]]}},{type:\"Feature\",id:\"CZE\",properties:{name:\"Czech Republic\"},geometry:{type:\"Polygon\",coordinates:[\"@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂǆɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕÅȑǇ¡wý˹ēϋbšȁ\"],encodeOffsets:[[17368,49764]]}},{type:\"Feature\",id:\"DEU\",properties:{name:\"Germany\"},geometry:{type:\"Polygon\",coordinates:[\"@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁǅ׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐǲ۰°Ƽȃ֮вȓ̀ӈٌōՠŸ\"],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՘ϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfǌ@ÊQ঺ബب࠼Ÿێɦ͎тচͪجӢòϞ̶સƚƸ͜ɛǲ̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌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ЈɗெƷыֹŃ׳ɱƝϣüɇؙҽ]ϟВƀ˾ρʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅŉिϞ̧ǹ໹Ϣͯ͜ѢԎǆူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵\"]],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ɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰǅķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐǆռఢ÷D@ŮӤ֛Ԯ_\\\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì\"]],encodeOffsets:[[[-5797,55864]],[[-3077,60043]]]}},{type:\"Feature\",id:\"GEO\",properties:{name:\"Georgia\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ųάȿִӟ̲ҭĬ̯ʴĺĲ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡\"],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ȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞǋ·νƃ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ƒƦǆت{ڨɲע̉ކĀVмЦɝ\"]],encodeOffsets:[[[24269,36562]],[[27243,42560]]]}},{type:\"Feature\",id:\"GRL\",properties:{name:\"Greenland\"},geometry:{type:\"Polygon\",coordinates:[\"@@ᬜԆ᱒ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼǋҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկध৚շಽ൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\\\Ϗပΐћɣଌȿ઼ԣ͈ڱກǉ٫͖ਣӘ˼֭উѵᕖ୆¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟᏅ×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή\"],encodeOffsets:[[-47886,84612]]}},{type:\"Feature\",id:\"GTM\",properties:{name:\"Guatemala\"},geometry:{type:\"Polygon\",coordinates:[\"@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏǉâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ\"],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:[\"@@ơˀʭòÐʹŗĞǣÒσĳŔʩƈǷǚʛìǨɈáǒÐǊЊɼϦ͎ĔȂƨʊ\\\\þåž¦ϸùϲ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ɼ̈ĒĈͺڞɠˊĻؼέۜǉ̼Ų\"],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Ü΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽ١ə̻űۛǊػήˉļǍ˴ƗV\"],encodeOffsets:[[16592,47977]]}},{type:\"Feature\",id:\"IDN\",properties:{name:\"Indonesia\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ\"],[\"@@ܙȁĳĶø˸ΰԢࠨͬĐǓfʫշع\"],[\"@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖\"],[\"@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮\"],[\"@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗\"],[\"@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ\"],[\"@@̿˥ׅƸǏΰࡘ¢Ⱦˣ\"],[\"@@̨ٝۿΌۯìӃÅׇȦҦਠऎʕ\"],[\"@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘǇbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹\"],[\"@@ڭ࠭كǉ߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîওறՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴࠨ؎Ʀȉ\"],[\"@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃\"],[\"@@सާহį˫ֵݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ\"],[\"@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզಢǋݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅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:[\"@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସŉӜёٮāৠȝ۪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:[\"@@݈ǌװӔ֚{τƾװýघэڤğ।ݓظòۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυ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ʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀ʂβǵМ¢Ҽ˶ƢƃАǼͺتĿψƚâΆԘšĮǆࠨƤȊ̉\"]],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:[\"@@Ʀˆपͫ࿪ࣆͺ৽ǅų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆŨоഊ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Úࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖǅ̊অ˺ϛݮҩɆ˜ࠊāؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטǋΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃ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:[\"@@΁Ѭыࢄȣ২ՠۨઘǆ߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū\"],encodeOffsets:[[105982,10888]]}},{type:\"Feature\",id:\"KOR\",properties:{name:\"South Korea\"},geometry:{type:\"Polygon\",coordinates:[\"@@ܨযȺխPॷ̓ҥݽǉڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ͞Ϝצ¢ΨÈŨȮ\"],encodeOffsets:[[131431,39539]]}},{type:\"Feature\",id:\"CS-KM\",properties:{name:\"Kosovo\"},geometry:{type:\"Polygon\",coordinates:[\"@@ǣŃPĘ́ȩĐǳɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒǎƻŢLĥȳĳĳ×ȉӹŻ\"],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ɖĨΘԧÇ͵ǐǳʂ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:[\"@@ãɊĚɲχƄࢡƨǱ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻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:[\"@@نЮՆߊ˼ڜعڪhǊ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ\"],encodeOffsets:[[21562,57376]]}},{type:\"Feature\",id:\"MAR\",properties:{name:\"Morocco\"},geometry:{type:\"Polygon\",coordinates:[\"@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜǱƷ͛ષƙϝ̵ӡñثঙ͍ͩсۍɥ࠻ŷഫا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:[\"@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝǈثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмҶǤ̶Ʋτ\\\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί\"],encodeOffsets:[[50733,-12769]]}},{type:\"Feature\",id:\"MEX\",properties:{name:\"Mexico\"},geometry:{type:\"Polygon\",coordinates:[\"@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔԚîȬǱЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳĲķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿǄ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФˀҍو̓٠^͔؇ͬ˫ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼Ϝ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|\"],encodeOffsets:[[-99471,26491]]}},{type:\"Feature\",id:\"MKD\",properties:{name:\"Macedonia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ńOǤӺżȊ˺¶ϴbтˏÒ։ǅƑƥҕh͋ǿջõΑȴšήń˸\"],encodeOffsets:[[21085,42860]]}},{type:\"Feature\",id:\"MLI\",properties:{name:\"Mali\"},geometry:{type:\"Polygon\",coordinates:[\"@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟Iȿǈҥš޻ΑǅʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴŉùʱʎ¬ʢĿİǳĉ˚Ǥɐ΅ΚĳɴȇȂǙvȫş˕őɱǹΫäɷɈƓɕőƅAµ̮ʾí̽͘ʀǓӔԺ\"],encodeOffsets:[[-12462,14968]]}},{type:\"Feature\",id:\"MMR\",properties:{name:\"Myanmar\"},geometry:{type:\"Polygon\",coordinates:[\"@@ӫηץϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟۙߓۭĳঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յǳ̱ӓȗ\"],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:[\"@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼ௐɁࠈגͿӶࢊࢊश΍ނįনɍǈؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެ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:[\"@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈Ǉۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ\"],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৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КǆԊƞհ}ԄϝŶÐ₮׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍س{ᲽࠣBយA᷋ݣѕҋÕՇǄϗÔƗάͩɰГг\"],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՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘĲࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧǱȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש\"],encodeOffsets:[[8705,4887]]}},{type:\"Feature\",id:\"NIC\",properties:{name:\"Nicaragua\"},geometry:{type:\"Polygon\",coordinates:[\"@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾŀȔŬRkЮȠrǬOǺɤʜǝĒľƺĲ̊ɴbǦĄQňȪĖ|ƜŹǚȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩǱʛÈƓǦˉêȕŉօɞųŇ\"],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ȉ̩ԃƅɽΟˏ\"],[\"@@ŉƳǅ˺ʔ˺ľñā΍\"]],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ǻĩŶªǖìǠƲŲĲǩŲK͸͘ö̠̝iǱͲĀæɴȵЮÔΨɄԜǞ˺ʤҬ·ĉҶώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС\"],encodeOffsets:[[-79750,7398]]}},{type:\"Feature\",id:\"PER\",properties:{name:\"Peru\"},geometry:{type:\"Polygon\",coordinates:[\"@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎĲΓʇȧx̭ΎâͼĝΚщӆΌǄ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍǉ॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝǱί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡\"],encodeOffsets:[[-71260,-18001]]}},{type:\"Feature\",id:\"PHL\",properties:{name:\"Philippines\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱\"],[\"@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ\"],[\"@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ\"],[\"@@Ԏʹ՘BgΗϳΣՕʧϸÒєŽА\"],[\"@@ʀभ٫ɞj˭ȶԯЍȋעʧªƁԘӶãY͈ԣٜ߮mɴ̻\"],[\"@@ɟܩέоѓ٘ܚ̡̈\"],[\"@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊĲਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘ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:[\"@@Şƥ͉ºη˵ʣ˷׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑÁùСǆĵƿʙéǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮ЎˁܪſѺಚβͰҼժӹ\"],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ʵʞҳÇଛࢲǇ΄ǐ֦ɩǀʣþޓİ͓̼̀ƌ̢Ƴ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ࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗŉҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ\"],[\"@@ः©ƭˌੲΖ@ַ\"],[\"@@ળ»@ָň܈E௒ʉïŗࡽȩ\"],[\"@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə\"],[\"@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ\"],[\"@@ډرᶽzඃȣမղҎ׀૎ǂᕞᴬѽ\"],[\"@@ӹóᩣŊɟώູɦūҒ࡮ǶҞသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ\"],[\"@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴǄєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋ೔Ϳ߸ࢦഖϙ෢ɦྼʵؤʀൖş؅ޮૐζ䢀ձܐӿᔲٛ₎ǄာƑ۪΍Ĺؙਜʇ૴Ǥ๰vཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿ᚝مݛĭ౽ן௛ԧ̱ϣய׊ᔗڇϣ̸ߵΫ૱Ř˓ց৙߽ͻड़ȋő௣ޭΫ۱Δα฽ѕ̅ॡభȳʥ࡟ே޳ׂ̳έ௬ҵለИ୘܀ԆªϾರȊຊ੒คࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶ਩ЭᢵƠ᪏ʟᨩ࿛ủጝ೚ŁаՃࠄȅ՞оईÃௌऍ܍ځ࠽ë্ϛഉ్௓˯ׇଙ঑ଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦKѐіxŦ঴ɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢ૛uਯƱۛлҤȥXҩұˑݷࢻRσஅՍ৙̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎ੝ŋߏƹ஛ΜǇـধɎށİवΎࢉࢉ΀ӵࠇב௏ɂ࠻֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחǌЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉ୻ʓʟ੹Ѧ೯iࢻΟহͼᇡ׊ಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇ͹ƝɇωÌֿԚɿՅȚʳΈ޵ǮԙƁƥƼଥЖఅƌ܃ƞĹıੱ܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉώѠɼ߼ÖƄ˪ȅҪ΀ѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽ȷ՞ȟ˨ǊĀڴ͞Ȁʍɢ֥ƪ¼Ʋ΁ƴՃվǸɨĉЂࠑȨѱĳšȼࢭɂˑӸíТЙȖάˊʝ޶װӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜ঍ग़ޢي౿֔ŬךڶüොͶࢀ̈൦ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆ࡫ઌʯڂɓňРԑΰ՘͈᎖Թ۾Ȳ֣؜ዦࠖޢµ޸̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹ੡Ļ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ҊŸ@@ÉeǋEౝ᪁ªᒷ޿÷ȳћǄ்ᾓNǽ˫΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ŉϢ@˔ȒԲ\"],encodeOffsets:[[-9005,27772]]}},{type:\"Feature\",id:\"SAU\",properties:{name:\"Saudi Arabia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ŉΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīאӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фǆŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒǆ͍ș࡙͐ᡌщǞǲϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ\"],encodeOffsets:[[43807,16741]]}},{type:\"Feature\",id:\"SDN\",properties:{name:\"Sudan\"},geometry:{type:\"Polygon\",coordinates:[\"@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃǥ࠵@řǦ؃̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ ZΚॲH@း⁪@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dĳ\"],encodeOffsets:[[34779,9692]]}},{type:\"Feature\",id:\"SDS\",properties:{name:\"South Sudan\"},geometry:{type:\"Polygon\",coordinates:[\"@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵǱϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄Śǥ࠶@ǦѠǄĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg\"],encodeOffsets:[[34779,9692]]}},{type:\"Feature\",id:\"SEN\",properties:{name:\"Senegal\"},geometry:{type:\"Polygon\",coordinates:[\"@@΍ٺн̚φǄРמȦќ˾ːкïШǾҶ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ɺ̛ǼΛʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ\"],encodeOffsets:[[-11713,6949]]}},{type:\"Feature\",id:\"SLV\",properties:{name:\"El Salvador\"},geometry:{type:\"Polygon\",coordinates:[\"@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«ĲȠ¾ʜëǸǙʪƇœτĴǤÑŘĝÏͳ\"],encodeOffsets:[[-89900,13706]]}},{type:\"Feature\",id:\"-99\",properties:{name:\"Somaliland\"},geometry:{type:\"Polygon\",coordinates:[\"@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎKaE΋Aࡑ@ѫ\"],\nencodeOffsets:[[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:[\"@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞĳƑšϳa˹µØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾҖͣĦˋ\"],encodeOffsets:[[21376,46507]]}},{type:\"Feature\",id:\"SUR\",properties:{name:\"Suriname\"},geometry:{type:\"Polygon\",coordinates:[\"@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓǲЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ\"],encodeOffsets:[[-58518,6117]]}},{type:\"Feature\",id:\"SVK\",properties:{name:\"Slovakia\"},geometry:{type:\"Polygon\",coordinates:[\"@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹ǳđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺Ĕxþǈ¢ÆȒȖžưʢD\"],encodeOffsets:[[19306,50685]]}},{type:\"Feature\",id:\"SVN\",properties:{name:\"Slovenia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ۜÝъȐܾtǈƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙבȈúȫΨĞа\"],encodeOffsets:[[14138,47626]]}},{type:\"Feature\",id:\"SWE\",properties:{name:\"Sweden\"},geometry:{type:\"Polygon\",coordinates:[\"@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮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:[\"@@ڱǳȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ЭǜǥኝȺׅ\"],encodeOffsets:[[1911,6290]]}},{type:\"Feature\",id:\"THA\",properties:{name:\"Thailand\"},geometry:{type:\"Polygon\",coordinates:[\"@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ܅˙ϛ޿Ŧગǅ՟ۧȤ১\"],encodeOffsets:[[105047,12480]]}},{type:\"Feature\",id:\"TJK\",properties:{name:\"Tajikistan\"},geometry:{type:\"Polygon\",coordinates:[\"@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯ǌ؋ˑʱĺӀࡘǹض؟ȨɔφۮЌҬˌբ૲ȜǩϵŤɹΎv\"],encodeOffsets:[[72719,41211]]}},{type:\"Feature\",id:\"TKM\",properties:{name:\"Turkmenistan\"},geometry:{type:\"Polygon\",coordinates:[\"@@ñۼطॣݔڣĠगюׯþσƽ֙|ׯӓ݇ǋƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦˮƳаࡽ०ׇոЃ࢞Щ૤ΫwԥʩЅɤſ̙۽ǋǙڥӁʭڏŵǫϟهŏࡩ͈\"],encodeOffsets:[[62680,36506]]}},{type:\"Feature\",id:\"TLS\",properties:{name:\"East Timor\"},geometry:{type:\"Polygon\",coordinates:[\"@@ĲȤܢȌזˀŀ͆Ľ̯ɫ࢕ο۳ʋ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ȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒǉпЫMϱ̆ȽōܫփхǄқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț\"],encodeOffsets:[[9710,31035]]}},{type:\"Feature\",id:\"TUR\",properties:{name:\"Turkey\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟȗΑׇĳ߻҄ࣻ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ʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨǈߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟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ÀĈî̘āɘŹëĵ\"],[\"@@ĝ҉|Úĸа\"],[\"@@­µÓŻŃȒɤŚêÃʐ˥\"],[\"@@ıĉ˱ƴªÖŸĈȘijȝ\"],[\"@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸ౦N໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦǉεǴՑևƀׂ˓ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓǇō̵Ů́ǃ؍طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕǄ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠȚχˤٯ۴řۆ҃ҞȀۢܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J\"],[\"@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ\"],[\"@@ԧŽսƾԛɮࠦƞښùĂ͑\"],[\"@@԰ǅԾĒڸɛ࠲őéĝُǱٕǾ͋Ʋݍµȧôº̈́\"],[\"@@؊ϛώǌහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ŉ૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩǄ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झǳťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થǇ܁ЀַȬ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ϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝǋʱٷÅҧѼʯ࠺ɟ̧̌ȄюмȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷêǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ\"],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:[\"@@؉ɥǋύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗ǉ۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸǊξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח\"],encodeOffsets:[[54384,17051]]}},{type:\"Feature\",id:\"ZAF\",properties:{name:\"South Africa\"},geometry:{type:\"Polygon\",coordinates:[\"@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеǅ࣫ǊԙĹΏ¬ࡿͩܓƃԱͅϡ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:[\"@@ІϏɊ܋ƝɩǙڻǈۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳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ȻţǩÝ˹ÛǉťǓǫō@Ɲ²¯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Іǉĸÿ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͈ĉłƾǊÆŤ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ċ¹ɅykwÇ¯£Å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͈ĉłƾǊÆŤ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ÆÅmǊĉ°ō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ǉ°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Ċ¯nǉÆ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ǈĉýţÛ¯VnV¤ÝÈ@°ÅÞÝ¤ŰğŁm¦ÝxóK¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑnŎÇ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²ǉmÅÞĕƒƛ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¯¼ŹĀ\"],\nencodeOffsets:[[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=V<t.max?V:t.max;var U=(o.startAngle-o.totalAngle/i*(V-t.min))*Math.PI/180,d=\"auto\"===a.color?this._getColor(e,V):a.color,p=new n({zlevel:t.zlevel,z:t.z+1,clickable:this.query(t,\"clickable\"),style:{x:h[0],y:h[1],r:r,startAngle:o.startAngle*Math.PI/180,angle:U,color:d,width:l,shadowColor:a.shadowColor,shadowBlur:a.shadowBlur,shadowOffsetX:a.shadowOffsetX,shadowOffsetY:a.shadowOffsetY},highlightStyle:{brushType:\"fill\",width:l>2?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])<o.fontSize?2:1),hoverable:!1,style:{x:m,y:V,width:i.width,height:i.height,brushType:\"both\",color:\"auto\"===a?this._getColor(e,h):a,lineWidth:i.borderWidth,strokeColor:i.borderColor,shadowColor:i.shadowColor,shadowBlur:i.shadowBlur,shadowOffsetX:i.shadowOffsetX,shadowOffsetY:i.shadowOffsetY,text:this._getLabelText(i.formatter,h),textFont:this.getFont(o),textPosition:\"inside\",textColor:\"auto\"===s?this._getColor(e,h):s}}))}},_getValue:function(e){return this.getDataFromOption(this.series[e].data[0])},_colorMap:function(e){var t=this.series[e],i=t.min,n=t.max-i,a=t.axisLine.lineStyle.color;a instanceof Array||(a=[[1,a]]);for(var o=[],r=0,s=a.length;s>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;a<e.length;a++)if(e[a].type===this.type){e[a]=this.reformOption(e[a]),this.legendHoverLink=e[a].legendHoverLink||this.legendHoverLink;var o=e[a].name||\"\";if(this.selectedMap[o]=t?t.isSelected(o):!0,!this.selectedMap[o])continue;this.buildMark(a),i.push(this.series[a])}n(i,this._intervalX,this.component.grid.getArea()),this._drawEventRiver(),this.addShapeList()},_dataPreprocessing:function(){for(var e,t,i=this.series,n=0,a=i.length;a>n;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;t<e.length;t++){var i=e[t].name||\"\";if(e[t].type===this.type&&this.selectedMap[i])for(var n=0;n<e[t].data.length;n++)this._drawEventBubble(e[t].data[n],t,n)}},_drawEventBubble:function(e,t,i){var n=this.series,o=n[t],s=o.name||\"\",l=o.data[i],m=[l,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,l)||U,u=this.getItemStyleColor(p.color,t,i,l)||(\"string\"==typeof c?h.lift(c,-.2):c),y=this._calculateControlPoints(e),g={zlevel:o.zlevel,z:o.z,clickable:this.deepQuery(m,\"clickable\"),style:{pointList:y,smooth:\"spline\",brushType:\"both\",lineJoin:\"round\",color:c,lineWidth:d.borderWidth,strokeColor:d.borderColor},highlightStyle:{color:u,lineWidth:p.borderWidth,strokeColor:p.borderColor},draggable:\"vertical\",ondragend:this._ondragend};g=new a(g),this.addLabel(g,o,l,e.name),r.pack(g,n[t],t,n[t].data[i],i,n[t].data[i].name),this.shapeList.push(g)},_calculateControlPoints:function(e){var t=this._intervalX,i=e.y,n=e.evolution,a=n.length;if(!(1>a)){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.length;l++){for(var h=0;h<e[l].data.length;h++){null==e[l].data[h].weight&&(e[l].data[h].weight=1);for(var m=0,V=0;V<e[l].data[h].evolution.length;V++)m+=e[l].data[h].evolution[V].valueScale;e[l].data[h].importance=m*e[l].data[h].weight}e[l].data.sort(r)}for(var l=0;l<e.length;l++){null==e[l].weight&&(e[l].weight=1);for(var m=0,h=0;h<e[l].data.length;h++)m+=e[l].data[h].weight;e[l].importance=m*e[l].weight}e.sort(r);for(var U=Number.MAX_VALUE,d=0,l=0;l<e.length;l++)for(var h=0;h<e[l].data.length;h++)for(var V=0;V<e[l].data[h].evolution.length;V++){var p=e[l].data[h].evolution[V].timeScale;U=Math.min(U,p),d=Math.max(d,p)}U=~~U,d=~~d;for(var c=function(){var e=d-U+1+~~i;if(0>=e)return[0];for(var t=[];e--;)t.push(0);return t}(),u=c.slice(0),y=[],g=0,b=0,l=0;l<e.length;l++)for(var h=0;h<e[l].data.length;h++){var f=e[l].data[h];f.time=[],f.value=[];for(var k,x=0,V=0;V<e[l].data[h].evolution.length;V++)k=e[l].data[h].evolution[V],f.time.push(k.timeScale),f.value.push(k.valueScale),x=Math.max(x,k.valueScale);n(f,i,U),f.y=a(u,f,function(e,t){return e.ypx[t]}),f._offset=a(c,f,function(){return s}),g=Math.max(g,f.y+x),b=Math.max(b,f._offset),y.push(f)}t(y,o,g,b)}function t(e,t,i,n){for(var a=t.height,o=n/a>.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;i<e.length;i++)if(e[i].type===r.CHART_TYPE_VENN){e[i]=this.reformOption(e[i]);var n=e[i].name||\"\";if(this.selectedMap[n]=t?t.isSelected(n):!0,!this.selectedMap[n])continue;this._buildVenn(i)}this.addShapeList()},_buildVenn:function(e){var t,i,n=this.series[e],a=n.data;a[0].value>a[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].value<a[1].value&&o+V>l&&(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:{\nshow:!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;n<t.length;n++)if(t[n].type===h.CHART_TYPE_TREEMAP){t[n]=this.reformOption(t[n]);var a=t[n].name||\"\";if(this.selectedMap[a]=i?i.isSelected(a):!0,!this.selectedMap[a])continue;this._buildSeries(t[n],n)}},_buildSeries:function(e,t){var i=l.fromOptionData(e.name,e.data);this._treesMap[t]=i;var n=e.root&&i.getNodeById(e.root)||i.root;this._buildTreemap(n,t)},_buildTreemap:function(e,t){for(var i=this.shapeList,n=0;n<i.length;){var a=i[n];m.get(a,\"seriesIndex\")===t?(this.zr.delShape(i[n]),i.splice(n,1)):n++}for(var o=i.length,r=this.series[t],l=r.itemStyle,h=this.parsePercent(r.size[0],this.zr.getWidth())||400,V=this.parsePercent(r.size[1],this.zr.getHeight())||500,U=this.parseCenter(this.zr,r.center),d=U[0]-.5*h,p=U[1]-.5*V,c=h*V,u=0,y=[],g=e.children,n=0;n<g.length;n++)u+=g[n].data.value;for(var b=0;b<g.length;b++)y.push(g[b].data.value*c/u);for(var f=new s({x:d,y:p,width:h,height:V}),k=f.run(y),x=0;x<k.length;x++){var _=g[x].data,L=k[x],W=[_.itemStyle,l],X=this.deepMerge(W);X.normal.color||(X.normal.color=this.zr.getColor(x)),X.emphasis.color||(X.emphasis.color=X.normal.color),this._buildItem(_,X,L,t,x),_.children&&this._buildChildrenTreemap(_.children,X,L,t)}this.query(r,\"itemStyle.normal.breadcrumb.show\")&&this._buildBreadcrumb(e,t,d,p+V);for(var n=o;n<i.length;n++)this.zr.addShape(i[n])},_buildItem:function(e,t,i,n,a){var o=this.series,r=this.getRectangle(e,t,i);m.pack(r,o[n],n,e,a,e.name),this.shapeList.push(r)},getRectangle:function(e,t,i){var n=t.emphasis,o=t.normal,r=this.getLabel(t,i,e.name,e.value),s=this.option.hoverable,l={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:s,clickable:!0,style:U.merge({x:i.x,y:i.y,width:i.width,height:i.height,brushType:\"both\",color:o.color,lineWidth:o.borderWidth,strokeColor:o.borderColor},r.style,!0),highlightStyle:U.merge({color:n.color,lineWidth:n.borderWidth,strokeColor:n.borderColor},r.highlightStyle,!0)};return new a(l)},getLabel:function(e,t,i,a){var o=e.normal.label.textStyle,r=[e.emphasis.label.textStyle,o],s=this.deepMerge(r),l=e.normal.label.formatter,h=this.getLabelText(i,a,l),m=this.getFont(o),V=n.getTextWidth(h,m),U=n.getTextHeight(h,m),d=this.deepQuery([e.emphasis,e.normal],\"label.formatter\"),p=this.getLabelText(i,a,d),c=this.getFont(s),u=n.getTextWidth(h,c),y=n.getTextHeight(h,c);e.normal.label.show?(e.normal.label.x+V>t.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<e.length;l++)o+=e[l].value;for(var h=0;h<e.length;h++)r.push(e[h].value*a/o);for(var V=new s({x:i.x,y:i.y,width:i.width,height:i.height}),U=V.run(r),d=t.normal.childBorderWidth,p=t.normal.childBorderColor,c=0;c<U.length;c++){var u=U[c],y=[];i.y.toFixed(2)!==u.y.toFixed(2)&&y.push(this._getLine(u.x,u.y,u.x+u.width,u.y,d,p)),i.x.toFixed(2)!==u.x.toFixed(2)&&y.push(this._getLine(u.x,u.y,u.x,u.y+u.height,d,p)),(i.y+i.height).toFixed(2)!==(u.y+u.height).toFixed(2)&&y.push(this._getLine(u.x,u.y+u.height,u.x+u.width,u.y+u.height,d,p)),(i.x+i.width).toFixed(2)!==(u.x+u.width).toFixed(2)&&y.push(this._getLine(u.x+u.width,u.y,u.x+u.width,u.y+u.height,d,p));for(var g=0;g<y.length;g++)m.set(y[g],\"seriesIndex\",n),this.shapeList.push(y[g])}},_getLine:function(e,t,i,n,a,o){var s={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:e,yStart:t,xEnd:i,yEnd:n,lineWidth:a,strokeColor:o}};return new r(s)},_buildBreadcrumb:function(e,t,i,n){for(var a=[],r=e;r;)a.unshift(r.data.name),r=r.parent;for(var s=this.series[t],l=this.query(s,\"itemStyle.normal.breadcrumb.textStyle\")||{},h=this.query(s,\"itemStyle.emphasis.breadcrumb.textStyle\")||{},V={y:n+10,textBaseline:\"top\",textAlign:\"left\",color:l.color,textFont:this.getFont(l)},p={brushType:\"fill\",color:h.color||d.lift(l.color,-.3),textFont:this.getFont(h)},c=0;c<a.length;c++){var u=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:U.merge({x:i,text:a[c]+(a.length-1-c?\" > \":\"\")},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.width<t.height&&(n=\"HORIZONTAL\",a=t.height,o=t.width);for(var r=this._getShapeListInAbstractRow(e,a,o),s=0;s<r.length;s++){r[s].x=0,r[s].y=0;for(var l=0;s>l;l++)r[s].y+=r[l].height}var h={};if(\"VERTICAL\"==n){for(var m=0;m<r.length;m++)i.push({x:r[m].x+t.x,y:r[m].y+t.y,width:r[m].width,height:r[m].height});h={x:r[0].width+t.x,y:t.y,width:t.width-r[0].width,height:t.height}}else{for(var V=0;V<r.length;V++)i.push({x:r[V].y+t.x,y:r[V].x+t.y,width:r[V].height,height:r[V].width});h={x:t.x,y:t.y+r[0].width,width:t.width,height:t.height-r[0].width}}var U=e.slice(r.length);0!==U.length&&this._squarify(U,h,i)},e.prototype._getShapeListInAbstractRow=function(e,t,i){if(1===e.length)return[{width:t,height:i}];for(var n=1;n<e.length;n++){var a=this._placeFixedNumberRectangles(e.slice(0,n),t,i),o=this._placeFixedNumberRectangles(e.slice(0,n+1),t,i);if(this._isFirstBetter(a,o))return a}},e.prototype._placeFixedNumberRectangles=function(e,t,i){for(var n=e.length,a=[],o=0,r=0;r<e.length;r++)o+=e[r];for(var s=o/i,l=0;n>l;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;i<this.children.length;i++)this.children[i].traverse(e,t)},t.prototype.updateDepthAndHeight=function(e){var t=0;this.depth=e;for(var i=0;i<this.children.length;i++){var n=this.children[i];n.updateDepthAndHeight(e+1),n.height>t&&(t=n.height)}this.height=t+1},t.prototype.getNodeById=function(e){if(this.id===e)return this;for(var t=0;t<this.children.length;t++){var i=this.children[t].getNodeById(e);if(i)return i}},i.prototype.traverse=function(e,t){this.root.traverse(e,t)},i.prototype.getSubTree=function(e){var t=this.getNodeById(e);if(t){var n=new i(t.id);return n.root=t,n}},i.prototype.getNodeById=function(e){return this.root.getNodeById(e)},i.fromOptionData=function(e,n){function a(e,i){var n=new t(e.name,e);i.add(n);var o=e.children;if(o)for(var r=0;r<o.length;r++)a(o[r],n)}var o=new i(e),r=o.root;r.data={name:e,children:n};for(var s=0;s<n.length;s++)a(n[s],r);return o.root.updateDepthAndHeight(0),o},i.fromGraph=function(e){function n(t){for(var i=e.getNodeById(t.id),a=0;a<i.outEdges.length;a++){var r=i.outEdges[a],s=o[r.node2.id];t.children.push(s),n(s)}}for(var a={},o={},r=0;r<e.nodes.length;r++){var s,l=e.nodes[r];0===l.inDegree()?(a[l.id]=new i(l.id),s=a[l.id].root):s=new t(l.id),s.data=l.data,o[l.id]=s}var h=[];for(var m in a)n(a[m].root),a[m].root.updateDepthAndHeight(0),h.push(a[m]);return h},i}),i(\"echarts/chart/tree\",[\"require\",\"./base\",\"../util/shape/Icon\",\"zrender/shape/Image\",\"zrender/shape/Line\",\"zrender/shape/BezierCurve\",\"../layout/Tree\",\"../data/Tree\",\"../config\",\"../util/ecData\",\"zrender/config\",\"zrender/tool/event\",\"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=.618,a=e(\"../util/shape/Icon\"),o=e(\"zrender/shape/Image\"),r=e(\"zrender/shape/Line\"),s=e(\"zrender/shape/BezierCurve\"),l=e(\"../layout/Tree\"),h=e(\"../data/Tree\"),m=e(\"../config\");m.tree={zlevel:1,z:2,calculable:!1,clickable:!0,rootLocation:{},orient:\"vertical\",symbol:\"circle\",symbolSize:20,nodePadding:30,layerPadding:100,itemStyle:{normal:{label:{show:!0},lineStyle:{width:1,color:\"#777\",type:\"curve\"}},emphasis:{}}};var V=e(\"../util/ecData\"),U=(e(\"zrender/config\"),e(\"zrender/tool/event\"),e(\"zrender/tool/util\"));return t.prototype={type:m.CHART_TYPE_TREE,_buildShape:function(e,t){var i=e.data[0];this.tree=h.fromOptionData(i.name,i.children),this.tree.root.data=i,this._setTreeShape(e),this.tree.traverse(function(i){this._buildItem(i,e,t),i.children.length>0&&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;n<e.children.length;n++){var a=e.layout.position[0],o=e.layout.position[1],r=e.children[n].layout.position[0],s=e.children[n].layout.position[1];switch(i.type){case\"curve\":this._buildBezierCurve(e,e.children[n],i,t);break;case\"broken\":break;default:var l=this._getLine(a,o,r,s,i);this.shapeList.push(l)}}},_buildBrokenLine:function(e,t,i){var a=U.clone(t);a.type=\"solid\";var o=[],r=e.layout.position[0],s=e.layout.position[1],l=i.orient,h=e.children[0].layout.position[1],m=r,V=s+(h-s)*(1-n),d=e.children[0].layout.position[0],p=V,c=e.children[e.children.length-1].layout.position[0],u=V;if(\"horizontal\"===l){var y=e.children[0].layout.position[0];m=r+(y-r)*(1-n),V=s,d=m,p=e.children[0].layout.position[1],c=m,u=e.children[e.children.length-1].layout.position[1]}o.push(this._getLine(r,s,m,V,a)),o.push(this._getLine(d,p,c,u,a));for(var g=0;g<e.children.length;g++)y=e.children[g].layout.position[0],h=e.children[g].layout.position[1],\"horizontal\"===l?p=h:d=y,o.push(this._getLine(d,p,y,h,a));this.shapeList=this.shapeList.concat(o)},_getLine:function(e,t,i,n,a){return e===i&&(e=i=this.subPixelOptimize(e,a.width)),t===n&&(t=n=this.subPixelOptimize(t,a.width)),new r({zlevel:this.getZlevelBase(),hoverable:!1,style:U.merge({xStart:e,yStart:t,xEnd:i,yEnd:n,lineType:a.type,strokeColor:a.color,lineWidth:a.width},a,!0)})},_buildBezierCurve:function(e,t,i,a){var o=n,r=a.orient,l=e.layout.position[0],h=e.layout.position[1],m=t.layout.position[0],V=t.layout.position[1],d=l,p=(V-h)*o+h,c=m,u=(V-h)*(1-o)+h;if(\"horizontal\"===r)d=(m-l)*o+l,p=h,c=(m-l)*(1-o)+l,u=V;else if(\"radial\"===r)if(e.id===this.tree.root.id)d=(m-l)*o+l,p=(V-h)*o+h,c=(m-l)*(1-o)+l,u=(V-h)*(1-o)+h;else{var y=e.layout.originPosition[0],g=e.layout.originPosition[1],b=t.layout.originPosition[0],f=t.layout.originPosition[1],k=this.tree.root.layout.position[0],x=this.tree.root.layout.position[1];d=y,p=(f-g)*o+g,c=b,u=(f-g)*(1-o)+g;var _=(d-this.minX)/this.width*Math.PI*2;d=p*Math.cos(_)+k,p=p*Math.sin(_)+x,_=(c-this.minX)/this.width*Math.PI*2,c=u*Math.cos(_)+k,u=u*Math.sin(_)+x}var L=new s({zlevel:this.getZlevelBase(),hoverable:!1,style:U.merge({xStart:l,yStart:h,cpX1:d,cpY1:p,cpX2:c,cpY2:u,xEnd:m,yEnd:V,strokeColor:i.color,lineWidth:i.width},i,!0)});this.shapeList.push(L)},_setTreeShape:function(e){var t=new l({nodePadding:e.nodePadding,layerPadding:e.layerPadding});this.tree.traverse(function(t){var i=[t.data,e],n=this.deepQuery(i,\"symbolSize\");\"number\"==typeof n&&(n=[n,n]),t.layout={width:n[0],height:n[1]}},this),t.run(this.tree);var i=e.orient,n=e.rootLocation.x,a=e.rootLocation.y,o=this.zr.getWidth(),r=this.zr.getHeight();n=\"center\"===n?.5*o:this.parsePercent(n,o),a=\"center\"===a?.5*r:this.parsePercent(a,r),a=this.parsePercent(a,r),\"horizontal\"===i&&(n=isNaN(n)?10:n,a=isNaN(a)?.5*r:a),\"radial\"===i?(n=isNaN(n)?.5*o:n,a=isNaN(a)?.5*r:a):(n=isNaN(n)?.5*o:n,a=isNaN(a)?10:a);var s=this.tree.root.layout.position[0];if(\"radial\"===i){var h=1/0,m=0,V=0;this.tree.traverse(function(e){m=Math.max(m,e.layout.position[0]),h=Math.min(h,e.layout.position[0]),V=Math.max(V,e.layout.width)}),this.width=m-h+2*V,this.minX=h}this.tree.traverse(function(t){var o,r;if(\"vertical\"===i&&\"inverse\"===e.direction)o=t.layout.position[0]-s+n,r=a-t.layout.position[1];else if(\"vertical\"===i)o=t.layout.position[0]-s+n,r=t.layout.position[1]+a;else if(\"horizontal\"===i&&\"inverse\"===e.direction)r=t.layout.position[0]-s+a,o=n-t.layout.position[1];else if(\"horizontal\"===i)r=t.layout.position[0]-s+a,o=t.layout.position[1]+n;else{o=t.layout.position[0],r=t.layout.position[1],t.layout.originPosition=[o,r];var l=r,m=(o-h)/this.width*Math.PI*2;o=l*Math.cos(m)+n,r=l*Math.sin(m)+a,t.layout.angle=m}t.layout.position[0]=o,t.layout.position[1]=r},this)},refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series);for(var t=this.series,i=this.component.legend,n=0;n<t.length;n++)if(t[n].type===m.CHART_TYPE_TREE){t[n]=this.reformOption(t[n]);var a=t[n].name||\"\";if(this.selectedMap[a]=i?i.isSelected(a):!0,!this.selectedMap[a])continue;this._buildSeries(t[n],n)}},_buildSeries:function(e,t){this._buildShape(e,t)}},U.inherits(t,i),e(\"../chart\").define(\"tree\",t),t}),i(\"echarts/layout/Tree\",[\"require\",\"zrender/tool/vector\"],function(e){function t(e){e=e||{},this.nodePadding=e.nodePadding||30,this.layerPadding=e.layerPadding||100,this._layerOffsets=[],this._layers=[]}var i=e(\"zrender/tool/vector\");return t.prototype.run=function(e){this._layerOffsets.length=0;for(var t=0;t<e.root.height+1;t++)this._layerOffsets[t]=0,this._layers[t]=[];this._updateNodeXPosition(e.root);var i=e.root;this._updateNodeYPosition(i,0,i.layout.height)},t.prototype._updateNodeXPosition=function(e){var t=1/0,n=-(1/0);e.layout.position=e.layout.position||i.create();for(var a=0;a<e.children.length;a++){var o=e.children[a];this._updateNodeXPosition(o);var r=o.layout.position[0];t>r&&(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;a<e.height+e.depth;a++)this._layerOffsets[a]+=l}this._layerOffsets[e.depth]=e.layout.position[0]+e.layout.width+this.nodePadding,this._layers[e.depth].push(e)},t.prototype._shiftSubtree=function(e,t){e.layout.position[0]+=t;for(var i=0;i<e.children.length;i++)this._shiftSubtree(e.children[i],t)},t.prototype._updateNodeYPosition=function(e,t,i){e.layout.position[1]=t;for(var n=0,a=0;a<e.children.length;a++)n=Math.max(e.children[a].layout.height,n);var o=this.layerPadding;\"function\"==typeof o&&(o=o(e.depth));for(var a=0;a<e.children.length;a++)this._updateNodeYPosition(e.children[a],t+o+i,n)},t}),i(\"echarts/chart/wordCloud\",[\"require\",\"./base\",\"zrender/shape/Text\",\"../layout/WordCloud\",\"../component/grid\",\"../component/dataRange\",\"../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/Text\"),a=e(\"../layout/WordCloud\");e(\"../component/grid\"),e(\"../component/dataRange\");var o=e(\"../config\"),r=e(\"../util/ecData\"),s=e(\"zrender/tool/util\"),l=e(\"zrender/tool/color\");return o.wordCloud={zlevel:0,z:2,clickable:!0,center:[\"50%\",\"50%\"],size:[\"40%\",\"40%\"],textRotation:[0,90],textPadding:0,autoSize:{enable:!0,minSize:12},itemStyle:{normal:{textStyle:{fontSize:function(e){return e.value}}}}},t.prototype={type:o.CHART_TYPE_WORDCLOUD,refresh:function(e){e&&(this.option=e,this.series=e.series),this._init()},_init:function(){var e=this.series;this.backupShapeList();for(var t=this.component.legend,i=0;i<e.length;i++)if(e[i].type===o.CHART_TYPE_WORDCLOUD){e[i]=this.reformOption(e[i]);var n=e[i].name||\"\";if(this.selectedMap[n]=t?t.isSelected(n):!0,!this.selectedMap[n])continue;this.buildMark(i),this._initSerie(e[i])}},_initSerie:function(e){var t=e.itemStyle.normal.textStyle,i=[this.parsePercent(e.size[0],this.zr.getWidth())||200,this.parsePercent(e.size[1],this.zr.getHeight())||200],n=this.parseCenter(this.zr,e.center),o={size:i,wordletype:{autoSizeCal:e.autoSize},center:n,rotate:e.textRotation,padding:e.textPadding,font:t.fontFamily,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,text:function(e){return e.name},data:e.data},r=new a(o),s=this;r.end(function(e){s._buildShapes(e)}),r.start()},_buildShapes:function(e){for(var t=e.length,i=0;t>i;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<V.timeInterval&&++s<i&&V.timer;)e=m[s],e.x=d[0]>>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<V;){e=t[i],o.save(),o.font=e.style+\" \"+e.weight+\" \"+~~((e.size+1)/r)+\"px \"+e.font;var U=o.measureText(e.text+\"m\").width*r,d=e.size<<1;if(e.rotate){var p=Math.sin(e.rotate*s),c=Math.cos(e.rotate*s),u=U*c,y=U*p,g=d*c,b=d*p;U=Math.max(Math.abs(u+b),Math.abs(u-b))+31>>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<<l|(o>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<<k|(y>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.size<a?void(e.size=a):o(e))}function r(e,t){for(var i=e.length,n=0;i--;)n+=t(e[i]);return n}for(var s,l,h=r(e,function(e){return e.size}),m=e.length,V=.25,U=a,d=this.defaultOption.cw,p=this.defaultOption.ch,c=this.defaultOption.c,u=this.defaultOption.ratio,y=this.defaultOption.cloudRadians;m--;)s=e[m],l=s.size/h,s.areapre=V?V>l?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;++n<i;)t[n]=0;return t}},e}),i(\"echarts/chart/heatmap\",[\"require\",\"./base\",\"../layer/heatmap\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/color\",\"zrender/shape/Image\",\"../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(\"../layer/heatmap\"),a=e(\"../config\"),o=(e(\"../util/ecData\"),e(\"zrender/tool/util\")),r=(e(\"zrender/tool/color\"),e(\"zrender/shape/Image\"));return a.heatmap={zlevel:0,z:2,clickable:!0},t.prototype={type:a.CHART_TYPE_HEATMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=e.series),this._init()},_init:function(){var e=this.series;this.backupShapeList();for(var t=e.length,i=0;t>i;++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);"
  },
  {
    "path": "examples/hello-mui/manifest.json",
    "content": "{\n\t\"@platforms\": [\n\t\t\"android\",\n\t\t\"iPhone\",\n\t\t\"iPad\"\n\t],\n\t\"id\": \"hellomui\",/*必选，应用的标识*/\n\t\"name\": \"hellomui\",/*必选，应用名称*/\n\t\"version\": {\n\t\t\"name\": \"1.0.0\",/*必选，版本名称*/\n\t\t\"code\": \"100\"\n\t},\n\t\"description\": \"\",/*可选，应用描述信息*/\n\t\"icons\": {\n\t\t\"72\": \"icon.png\"\n\t},\n\t\"fullscreen\": true,\n\t\"launch_path\": \"index.html\",/*必选，应用的入口页面，默认为根目录下的index.html；也可以是网络地址，网络地址必须以http://或https://开头*/\n\t\"developer\": {\n\t\t\"email\": \"\",/*可选，开发者名称*/\n\t\t\"name\": \"\",/*可选，开发者邮箱地址*/\n\t\t\"url\": \"\"\n\t},\n\t\"permissions\": {\n\n\t\t\"Events\": {\n\t\t\t\"description\": \"应用扩展事件\"\n\t\t},\n\t\t\"Speech\": {\n\t\t\t\"description\": \"管理语音识别插件\"\n\t\t},\n\t\t\"Payment\": {},\n\t\t\"Share\": {},\n\t\t\"Push\": {},\n\t\t\"Maps\": {},\n\t\t\"OAuth\": {},\n\t\t\"Contacts\": {},\n\t\t\"Statistic\": {},\n\t\t\"Messaging\": {}\n\t},\n\t\"plus\": {\n\t\t\"launchwebview\": {\n\t\t\t\"titleNView\": {\n\t\t\t\t\"backgroundcolor\": \"#f7f7f7\",\n\t\t\t\t\"titletext\": \"首页\",\n\t\t\t\t\"titlecolor\": \"#000000\"\n\t\t\t}\n\t\t},\n\t\t\"statusbar\": {\n\t\t\t\"immersed\": \"supportedDevice\",\n\t\t\t\"style\": \"dark\"\n\t\t},\n\t\t\"popGesture\": \"close\",/*设置应用默认侧滑返回关闭Webview窗口，none为无侧滑返回功能，hide为侧滑隐藏Webview窗口。参考ask.dcloud.net.cn/article/102*/\n\t\t\"splashscreen\": {\n\t\t\t\"autoclose\": false,/*如果为true，程序启动的图片可以自动关闭，如果为false，开发者需要手动关闭*/\n\t\t\t\"waiting\": true\n\t\t},\n\t\t\"runmode\": \"normal\",/*两个值，liberate或normal，前者在应用安装时释放资源，后者不需要释放资源*/\n\t\t\"signature\": \"Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==\",/*可选，保留给应用签名，暂不使用*/\n\t\t\"distribute\": {\n\t\t\t\"debug\": \"\",/*可选，是否为debug模式，可取值：true表示debug模式运行，false表示release模式运行，默认值为false*/\n\t\t\t\"apple\": {\n\t\t\t\t\"appid\": \"\",/*iOS必选，苹果开发网站申请的appid，如io.dcloud.HelloMUI*/\n\t\t\t\t\"mobileprovision\": \"\",/*iOS必选，打包配置文件*/\n\t\t\t\t\"password\": \"\",/*iOS必选，导入配置文件密码*/\n\t\t\t\t\"p12\": \"\",/*iOS必选，打包配置文件关联的个人证书*/\n\t\t\t\t\"devices\": \"universal\",/*iphone，可取值iphone/ipad/universal*/\n\t\t\t\t\"frameworks\": []\n\t\t\t},\n\t\t\t\"google\": {\n\t\t\t\t\"packagename\": \"\",/*Android必选，程序包名，如io.dcloud.HelloMUI*/\n\t\t\t\t\"keystore\": \"\",/*Android必选，打包证书文件*/\n\t\t\t\t\"password\": \"\",/*Android必选，打包证书密码*/\n\t\t\t\t\"aliasname\": \"\",/*Android必选，打包证书别名*/\n\t\t\t\t\"permissions\": [\"<uses-permission android:name=\\\"android.permission.CHANGE_NETWORK_STATE\\\"/>\",\"<uses-permission android:name=\\\"android.permission.READ_CONTACTS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.VIBRATE\\\"/>\",\"<uses-permission android:name=\\\"android.permission.READ_LOGS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.ACCESS_WIFI_STATE\\\"/>\",\"<uses-feature android:name=\\\"android.hardware.camera.autofocus\\\"/>\",\"<uses-permission android:name=\\\"android.permission.WRITE_CONTACTS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.ACCESS_NETWORK_STATE\\\"/>\",\"<uses-permission android:name=\\\"android.permission.RECEIVE_BOOT_COMPLETED\\\"/>\",\"<uses-permission android:name=\\\"android.permission.CAMERA\\\"/>\",\"<uses-permission android:name=\\\"android.permission.GET_ACCOUNTS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.RECORD_AUDIO\\\"/>\",\"<uses-permission android:name=\\\"android.permission.MODIFY_AUDIO_SETTINGS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.SEND_SMS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.INTERNET\\\"/>\",\"<uses-permission android:name=\\\"android.permission.READ_PHONE_STATE\\\"/>\",\"<uses-permission android:name=\\\"android.permission.CHANGE_WIFI_STATE\\\"/>\",\"<uses-permission android:name=\\\"android.permission.WAKE_LOCK\\\"/>\",\"<uses-permission android:name=\\\"android.permission.FLASHLIGHT\\\"/>\",\"<uses-permission android:name=\\\"android.permission.CALL_PHONE\\\"/>\",\"<uses-permission android:name=\\\"android.permission.ACCESS_COARSE_LOCATION\\\"/>\",\"<uses-feature android:name=\\\"android.hardware.camera\\\"/>\",\"<uses-permission android:name=\\\"android.permission.ACCESS_FINE_LOCATION\\\"/>\",\"<uses-permission android:name=\\\"android.permission.WRITE_EXTERNAL_STORAGE\\\"/>\",\"<uses-permission android:name=\\\"android.permission.RECEIVE_USER_PRESENT\\\"/>\",\"<uses-permission android:name=\\\"android.permission.WRITE_SETTINGS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.WRITE_SMS\\\"/>\",\"<uses-permission android:name=\\\"android.permission.READ_SMS\\\"/>\"]\n\t\t\t},\n\t\t\t\"orientation\": [\n\t\t\t\t\"portrait-primary\",\n\t\t\t\t\"landscape-primary\",\n\t\t\t\t\"portrait-secondary\",\n\t\t\t\t\"landscape-secondary\"\n\t\t\t],/*必选*/\n\t\t\t\"icons\": {\n\t\t\t\t\"ios\": {\n\t\t\t\t\t\"prerendered\": \"\", /*必选，是否高亮显示*/\n\t\t\t\t\t\"auto\": \"\", /*可选，512x512，用于自动生成各种尺寸图标的大分辨率程序图标*/\n\t\t\t\t\t\"iphone\": {\n\t\t\t\t\t\t\"normal\": \"\",/*可选，57x57，iPhone普通屏幕程序图标*/\n\t\t\t\t\t\t\"retina\": \"\",/*可选，114x114，iPhone高分屏程序图标*/\n\t\t\t\t\t\t\"retina7\": \"\",/*可选，120x120，iPhone iOS7高分屏程序图标*/\n\t\t\t\t\t\t\"spotlight-normal\": \"\", /*可选，29x29，iPhone Spotlight搜索程序图标*/\n\t\t\t\t\t\t\"spotlight-retina\": \"\", /*可选，58x58，iPhone高分屏Spotlight搜索程序图标*/\n\t\t\t\t\t\t\"spotlight-retina7\": \"\",/*可选，80x80，iPhone iOS7高分屏Spotlight搜索程序图标*/\n\t\t\t\t\t\t\"settings-normal\": \"\", /*可选，29x29，iPhone设置页面程序图标*/\n\t\t\t\t\t\t\"settings-retina\": \"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"ipad\": {\n\t\t\t\t\t\t\"normal\": \"\", /*可选，72x72，iPad普通屏幕程序图标*/\n\t\t\t\t\t\t\"retina\": \"\", /*可选，144x144，iPad高分屏程序图标*/\n\t\t\t\t\t\t\"normal7\": \"\", /*可选，76x76，iPad iOS7程序图标*/\n\t\t\t\t\t\t\"retina7\": \"\", /*可选，152x152，iPad iOS7高分屏程序图标*/\n\t\t\t\t\t\t\"spotlight-normal\": \"\", /*可选，50x50，iPad Spotlight搜索程序图标*/\n\t\t\t\t\t\t\"spotlight-retina\": \"\", /*可选，100x100，iPad高分屏Spotlight搜索程序图标*/\n\t\t\t\t\t\t\"spotlight-normal7\": \"\",/*可选，40x40，iPad iOS7 Spotlight搜索程序图标*/\n\t\t\t\t\t\t\"spotlight-retina7\": \"\",/*可选，80x80，iPad iOS7高分屏Spotlight搜索程序图标*/\n\t\t\t\t\t\t\"settings-normal\": \"\",/*可选，29x29，iPad设置页面程序图标*/\n\t\t\t\t\t\t\"settings-retina\": \"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"android\": {\n\t\t\t\t\t\"mdpi\": \"\", /*必选，48x48，普通屏程序图标*/\n\t\t\t\t\t\"ldpi\": \"\", /*必选，48x48，大屏程序图标*/\n\t\t\t\t\t\"hdpi\": \"\", /*必选，72x72，高分屏程序图标*/\n\t\t\t\t\t\"xhdpi\": \"\",/*必选，96x96，720P高分屏程序图标*/\n\t\t\t\t\t\"xxhdpi\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"splashscreen\": {\n\t\t\t\t\"ios\": {\n\t\t\t\t\t\"iphone\": {\n\t\t\t\t\t\t\"default\": \"\", /*必选，320x480，iPhone3启动图片*/\n\t\t\t\t\t\t\"retina35\": \"\",/*必选，640x960，3.5英寸设备(iPhone4)启动图片*/\n\t\t\t\t\t\t\"retina40\": \"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"ipad\": {\n\t\t\t\t\t\t\"portrait\": \"\", /*可选，768x1004，需支持iPad时必选，iPad竖屏启动图片*/\n\t\t\t\t\t\t\"portrait-retina\": \"\",/*可选，1536x2008，需支持iPad时必选，iPad高分屏竖屏图片*/\n\t\t\t\t\t\t\"landscape\": \"\", /*可选，1024x748，需支持iPad时必选，iPad横屏启动图片*/\n\t\t\t\t\t\t\"landscape-retina\": \"\", /*可选 ，2048x1496，需支持iPad时必选，iPad高分屏横屏启动图片*/\n\t\t\t\t\t\t\"portrait7\": \"\", /*可选，768x1024，需支持iPad iOS7时必选，iPad竖屏启动图片*/\n\t\t\t\t\t\t\"portrait-retina7\": \"\",/*可选，1536x2048，需支持iPad iOS7时必选，iPad高分屏竖屏图片*/\n\t\t\t\t\t\t\"landscape7\": \"\", /*可选，1024x768，需支持iPad iOS7时必选，iPad横屏启动图片*/\n\t\t\t\t\t\t\"landscape-retina7\": \"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"android\": {\n\t\t\t\t\t\"mdpi\": \"\", /*必选，240x282，普通屏启动图片*/\n\t\t\t\t\t\"ldpi\": \"\", /*必选，320x442，大屏启动图片*/\n\t\t\t\t\t\"hdpi\": \"\", /*必选，480x762，高分屏启动图片*/\n\t\t\t\t\t\"xhdpi\": \"\", /*必选，720x1242，720P高分屏启动图片*/\n\t\t\t\t\t\"xxhdpi\": \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"schemeWhitelist\":[\"market\"]\n\t},\n\t\"dependencies\": {\n\t\t\"pages\": {\n\t\t\t\"index.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/update.js\",\n\t\t\t\t\t\"list.html\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"index-menu.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tab-webview-subpage-contact.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/60x60.gif\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tab-webview-main.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"examples/tab-webview-subpage-setting.html\",\n\t\t\t\t\t\"examples/tab-webview-subpage-chat.html\",\n\t\t\t\t\t\"examples/tab-webview-subpage-contact.html\",\n\t\t\t\t\t\"examples/tab-webview-subpage-about.html\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"list.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"examples/template.html\",\n\t\t\t\t\t\"examples/tab-webview-main.html\",\n\t\t\t\t\t\"examples/pullrefresh_main.html\",\n\t\t\t\t\t\"examples/ajax.html\",\n\t\t\t\t\t\"examples/accordion.html\",\n\t\t\t\t\t\"examples/buttons.html\",\n\t\t\t\t\t\"examples/guide.html\",\n\t\t\t\t\t\"examples/badges.html\",\n\t\t\t\t\t\"examples/actionsheet.html\",\n\t\t\t\t\t\"examples/actionsheet-plus.html\",\n\t\t\t\t\t\"examples/ad.html\",\n\t\t\t\t\t\"examples/buttons-with-icons.html\",\n\t\t\t\t\t\"examples/buttons-with-badges.html\",\n\t\t\t\t\t\"examples/buttons-with-block.html\",\n\t\t\t\t\t\"examples/checkbox.html\",\n\t\t\t\t\t\"examples/clouddb_wilddog.html\",\n\t\t\t\t\t\"examples/dtpicker.html\",\n\t\t\t\t\t\"examples/date.html\",\n\t\t\t\t\t\"examples/dialog.html\",\n\t\t\t\t\t\"examples/slider-default.html\",\n\t\t\t\t\t\"examples/slider-with-title.html\",\n\t\t\t\t\t\"examples/slider-table-default.html\",\n\t\t\t\t\t\"examples/slider-table-pagination.html\",\n\t\t\t\t\t\"examples/grid-default.html\",\n\t\t\t\t\t\"examples/grid-pagination.html\",\n\t\t\t\t\t\"examples/icons.html\",\n\t\t\t\t\t\"examples/input.html\",\n\t\t\t\t\t\"examples/echarts.html\",\n\t\t\t\t\t\"examples/imageviewer.html\",\n\t\t\t\t\t\"examples/indexed-list.html\",\n\t\t\t\t\t\"examples/indexed-list-select.html\",\n\t\t\t\t\t\"examples/lazyload-image.html\",\n\t\t\t\t\t\"examples/locker-dom.html\",\n\t\t\t\t\t\"examples/login.html\",\n\t\t\t\t\t\"examples/setting.html\",\n\t\t\t\t\t\"examples/offcanvas-drag-right-plus-main.html\",\n\t\t\t\t\t\"examples/offcanvas-drag-left-plus-main.html\",\n\t\t\t\t\t\"examples/offcanvas-drag-right.html\",\n\t\t\t\t\t\"examples/offcanvas-drag-left.html\",\n\t\t\t\t\t\"examples/offcanvas-drag-down.html\",\n\t\t\t\t\t\"examples/picker.html\",\n\t\t\t\t\t\"examples/pagination.html\",\n\t\t\t\t\t\"examples/popovers.html\",\n\t\t\t\t\t\"examples/pullrefresh_with_tab.html\",\n\t\t\t\t\t\"examples/radio.html\",\n\t\t\t\t\t\"examples/range.html\",\n\t\t\t\t\t\"examples/switches.html\",\n\t\t\t\t\t\"examples/tabbar.html\",\n\t\t\t\t\t\"examples/tabbar-with-submenus.html\",\n\t\t\t\t\t\"examples/tab-with-viewpagerindicator.html\",\n\t\t\t\t\t\"examples/tab-with-segmented-control.html\",\n\t\t\t\t\t\"examples/tab-with-segmented-control-vertical.html\",\n\t\t\t\t\t\"examples/typography.html\",\n\t\t\t\t\t\"examples/im-chat.html\",\n\t\t\t\t\t\"examples/info.html\",\n\t\t\t\t\t\"examples/tableviews.html\",\n\t\t\t\t\t\"examples/tableviews-with-badges.html\",\n\t\t\t\t\t\"examples/list-with-input.html\",\n\t\t\t\t\t\"examples/list-triplex-row.html\",\n\t\t\t\t\t\"examples/tableviews-with-collapses.html\",\n\t\t\t\t\t\"examples/tableviews-with-swipe.html\",\n\t\t\t\t\t\"examples/media-list.html\",\n\t\t\t\t\t\"examples/nav.html\",\n\t\t\t\t\t\"examples/numbox.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/pullrefresh_main.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"examples/pullrefresh_sub.html\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/ajax.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/accordion.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/cbd.jpg\",\n\t\t\t\t\t\"images/muwu.jpg\",\n\t\t\t\t\t\"images/yuantiao.jpg\",\n\t\t\t\t\t\"images/shuijiao.jpg\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tab-webview-subpage-setting.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"index-menu.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"examples/offcanvas-drag-left.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/template.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tab-webview-subpage-about.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/guide.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/badges.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/actionsheet.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/actionsheet-plus.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/ad.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/ad.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/buttons.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/buttons-with-icons.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/buttons-with-badges.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/buttons-with-block.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/checkbox.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tab-webview-subpage-chat.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/clouddb_wilddog.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/dtpicker.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.picker.min.js\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"css/mui.picker.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/date.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/dialog.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/slider-default.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/cbd.jpg\",\n\t\t\t\t\t\"images/muwu.jpg\",\n\t\t\t\t\t\"images/yuantiao.jpg\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"images/shuijiao.jpg\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/slider-with-title.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/cbd.jpg\",\n\t\t\t\t\t\"images/yuantiao.jpg\",\n\t\t\t\t\t\"images/muwu.jpg\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"images/shuijiao.jpg\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/slider-table-default.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/cbd.jpg\",\n\t\t\t\t\t\"images/yuantiao.jpg\",\n\t\t\t\t\t\"images/muwu.jpg\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"images/shuijiao.jpg\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/slider-table-pagination.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/cbd.jpg\",\n\t\t\t\t\t\"images/muwu.jpg\",\n\t\t\t\t\t\"images/yuantiao.jpg\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"images/shuijiao.jpg\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/grid-default.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/grid-pagination.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/icons.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/input.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/pullrefresh_sub.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/echarts.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"libs/echarts-all.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/imageviewer.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.zoom.js\",\n\t\t\t\t\t\"images/muwu.jpg\",\n\t\t\t\t\t\"images/yuantiao.jpg\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/mui.previewimage.js\",\n\t\t\t\t\t\"images/shuijiao.jpg\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/indexed-list.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"css/mui.indexedlist.css\",\n\t\t\t\t\t\"js/mui.indexedlist.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/indexed-list-select.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"css/mui.indexedlist.css\",\n\t\t\t\t\t\"js/mui.indexedlist.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/lazyload-image.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"images/60x60.gif\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/mui.lazyload.js\",\n\t\t\t\t\t\"js/mui.lazyload.img.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/locker-dom.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/mui.locker.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/login.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"images/login-1.png\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/setting.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/logo.png\",\n\t\t\t\t\t\"libs/easymob-webim-sdk/easemob.im-1.0.5.js\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"libs/easymob-webim-sdk/json2.js\",\n\t\t\t\t\t\"libs/easymob-webim-sdk/jquery-1.11.1.js\",\n\t\t\t\t\t\"js/feedback.js\",\n\t\t\t\t\t\"css/feedback-page.css\",\n\t\t\t\t\t\"js/feedback-page.js\",\n\t\t\t\t\t\"libs/easymob-webim-sdk/strophe-custom-2.0.0.js\",\n\t\t\t\t\t\"js/mui.view.js\",\n\t\t\t\t\t\"images/iconfont-tianjia.png\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/offcanvas-drag-right-plus-main.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"examples/offcanvas-drag-right-plus-menu.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/offcanvas-drag-right-plus-menu.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/offcanvas-drag-left-plus-menu.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/offcanvas-drag-left-plus-main.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"examples/offcanvas-drag-left-plus-menu.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/offcanvas-drag-right.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/offcanvas-drag-left.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/offcanvas-drag-down.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/picker.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.picker.js\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"js/mui.poppicker.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/city.data.js\",\n\t\t\t\t\t\"css/mui.poppicker.css\",\n\t\t\t\t\t\"css/mui.picker.css\",\n\t\t\t\t\t\"js/city.data-3.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/pagination.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/popovers.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/pullrefresh_with_tab.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.pullToRefresh.js\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/mui.pullToRefresh.material.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/radio.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/range.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/switches.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tabbar.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"images/60x60.gif\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tabbar-with-submenus.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tab-with-viewpagerindicator.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tab-with-segmented-control.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tab-with-segmented-control-vertical.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/typography.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/im-chat.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.imageViewer.js\",\n\t\t\t\t\t\"images/logo.png\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"css/mui.imageviewer.css\",\n\t\t\t\t\t\"js/arttmpl.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/info.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"images/qrcode.png\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/beecloud.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/beecloud.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tableviews.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tableviews-with-badges.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/list-with-input.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/list-triplex-row.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tableviews-with-collapses.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/tableviews-with-swipe.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/media-list.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/cbd.jpg\",\n\t\t\t\t\t\"images/yuantiao.jpg\",\n\t\t\t\t\t\"images/muwu.jpg\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"images/shuijiao.jpg\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/nav.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"examples/numbox.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/app.css\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/mui.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t}\n\t\t},\n\t\t\"idle\": {\n\t\t\t\"resources\": [\n\t\t\t\t\"js/mui.dtpicker.js\",\n\t\t\t\t\"css/mui.listpicker.css\",\n\t\t\t\t\"css/mui.dtpicker.css\",\n\t\t\t\t\"css/mui.picker.all.css\",\n\t\t\t\t\"examples/modals.html\",\n\t\t\t\t\"examples/tabbar-labels-only.html\",\n\t\t\t\t\"js/mui.listpicker.js\",\n\t\t\t\t\"libs/easymob-webim-sdk/quickstart.md\",\n\t\t\t\t\"js/mui.picker.all.js\"\n\t\t\t]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "examples/login/.project",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>login</name>\n\t<comment></comment>\n\t<projects>\n\t</projects>\n\t<buildSpec>\n\t\t<buildCommand>\n\t\t\t<name>com.aptana.ide.core.unifiedBuilder</name>\n\t\t\t<arguments>\n\t\t\t</arguments>\n\t\t</buildCommand>\n\t\t<buildCommand>\n\t\t\t<name>com.pandora.projects.ui.MKeyBuilder</name>\n\t\t\t<arguments>\n\t\t\t</arguments>\n\t\t</buildCommand>\n\t</buildSpec>\n\t<natures>\n\t\t<nature>com.pandora.projects.ui.MKeyNature</nature>\n\t</natures>\n</projectDescription>\n"
  },
  {
    "path": "examples/login/README.md",
    "content": "## 简单概述\n这是带登录和设置功能的mui模板项目，主要为了演示登录流程及设置界面div窗口切换效果；\n\n## 核心功能\n1. 启动App后校验登录状态，若已登录，直接跳转应用首页；否则，显示登录页面；\n2. 支持本地注册；\n3. 支持设置手势密码，登录时可使用手势密码代替账号、密码；\n4. 支持评分、分享、拨打客服电话\n\n## 关联项目\n\n基于 uni-app 的登录模板功能更为完善，主要有如下特点：\n- 前后一体项目，后端基于[uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README)实现\n- 支持短信验证码登录\n\n详情参考：[https://github.com/dcloudio/uni-template-login](https://github.com/dcloudio/uni-template-login)\n"
  },
  {
    "path": "examples/login/css/feedback-page.css",
    "content": ".feedback body {\n\tbackground-color: #EFEFF4;\n}\n.feedback input,\n.feedback textarea {\n\tborder: none !important;\n}\n.feedback textarea {\n\theight: 100px;\n\tmargin-bottom: 0 !important;\n\tpadding-bottom: 0 !important;\n}\n.feedback .row {\n\twidth: 100%;\n\tbackground-color: #fff;\n}\n.feedback p {\n\tpadding: 10px 15px 0;\n}\n.feedback button#submit { \n\twidth: 90%;\n\theight: 46px;\n\tleft: 50%;\n\t-webkit-transform: translate(-50%);\n}\n.feedback .hidden {\n\tdisplay: none;\n}\n.feedback .image-list {\n\twidth: 100%;\n\theight: 85px;\n\tbackground-size: cover;\n\tpadding: 10px 10px;\n\toverflow: hidden;\n}\n.feedback .image-item {\n\twidth: 65px;\n\theight: 65px;\n\tbackground-image: url(../images/iconfont-tianjia.png);\n\tbackground-size: 100% 100%;\n\tdisplay: inline-block;\n\tposition: relative;\n\tborder-radius: 5px;\n\tmargin-right: 10px;\n\tmargin-bottom: 10px;\n\tborder: solid 1px #e8e8e8;\n}\n.feedback .image-item input[type=\"file\"] {\n\tposition: absolute;\n\tleft: 0px;\n\ttop: 0px;\n\twidth: 100%;\n\theight: 100%;\n\topacity: 0;\n\tcursor: pointer;\n\tz-index: 0;\n}\n.feedback .image-item.space {\n\tborder: none;\n}\n.feedback .image-item .image-close {\n\tposition: absolute;\n\tdisplay: inline-block;\n\tright: -6px;\n\ttop: -6px;\n\twidth: 20px;\n\theight: 20px;\n\ttext-align: center;\n\tline-height: 20px;\n\tborder-radius: 12px;\n\tbackground-color: #FF5053;\n\tcolor: #f3f3f3;\n\tborder: solid 1px #FF5053;\n\tfont-size: 9px;\n\tfont-weight: 200;\n\tz-index: 1;\n}\n.feedback .image-item.space .image-close {\n\tdisplay: none;\n}"
  },
  {
    "path": "examples/login/css/style.css",
    "content": ".ui-page-login,\nbody {\n\twidth: 100%;\n\theight: 100%;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n.mui-content{height: 100%;}\n"
  },
  {
    "path": "examples/login/forget_password.html",
    "content": "<!DOCTYPE html>\n<html class=\"ui-page-login\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<link href=\"css/style.css\" rel=\"stylesheet\" />\n\t\t<style>\n\t\t\t.area {\n\t\t\t\tmargin: 20px auto 0px auto;\n\t\t\t}\n\t\t\t.mui-input-group:first-child {\n\t\t\t\tmargin-top: 20px;\n\t\t\t}\n\t\t\t.mui-input-group label {\n\t\t\t\twidth: 22%;\n\t\t\t}\n\t\t\t.mui-input-row label~input,\n\t\t\t.mui-input-row label~select,\n\t\t\t.mui-input-row label~textarea {\n\t\t\t\twidth: 78%;\n\t\t\t}\n\t\t\t.mui-checkbox input[type=checkbox],\n\t\t\t.mui-radio input[type=radio] {\n\t\t\t\ttop: 6px;\n\t\t\t}\n\t\t\t.mui-content-padded {\n\t\t\t\tmargin-top: 25px;\n\t\t\t}\n\t\t\t.mui-btn {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t\t.mui-input-row label~input, .mui-input-row label~select, .mui-input-row label~textarea{\n\t\t\t\tmargin-top: 1px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">找回密码</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t<!--\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<label>账号</label>\n\t\t\t\t\t<input id='account' type=\"text\" class=\"mui-input-clear mui-input\" placeholder=\"请输入账号\">\n\t\t\t\t</div>             \t\n                -->\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<label>邮箱</label>\n\t\t\t\t\t<input id='email' type=\"email\" class=\"mui-input-clear mui-input\" placeholder=\"请输入注册邮箱\">\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<button id='sendMail' class=\"mui-btn mui-btn-block mui-btn-primary\">提交</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"js/mui.min.js\"></script>\n\t\t<script src=\"js/app.js\"></script>\n\t\t<script>\n\t\t\t(function($, doc) {\n\t\t\t\t$.init();\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tvar sendButton = doc.getElementById('sendMail');\n\t\t\t\t\tvar emailBox = doc.getElementById('email');\n\t\t\t\t\tsendButton.addEventListener('tap', function() {\n\t\t\t\t\t\tapp.forgetPassword(emailBox.value, function(err, info) {\n\t\t\t\t\t\t\tplus.nativeUI.toast(err || info);\n\t\t\t\t\t\t});\n\t\t\t\t\t}, false);\n\t\t\t\t});\n\t\t\t}(mui, document));\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/login/js/app.js",
    "content": "/**\n * 演示程序当前的 “注册/登录” 等操作，是基于 “本地存储” 完成的\n * 当您要参考这个演示程序进行相关 app 的开发时，\n * 请注意将相关方法调整成 “基于服务端Service” 的实现。\n **/\n(function($, owner) {\n\t/**\n\t * 用户登录\n\t **/\n\towner.login = function(loginInfo, callback) {\n\t\tcallback = callback || $.noop;\n\t\tloginInfo = loginInfo || {};\n\t\tloginInfo.account = loginInfo.account || '';\n\t\tloginInfo.password = loginInfo.password || '';\n\t\tif (loginInfo.account.length < 5) {\n\t\t\treturn callback('账号最短为 5 个字符');\n\t\t}\n\t\tif (loginInfo.password.length < 6) {\n\t\t\treturn callback('密码最短为 6 个字符');\n\t\t}\n\t\tvar users = JSON.parse(localStorage.getItem('$users') || '[]');\n\t\tvar authed = users.some(function(user) {\n\t\t\treturn loginInfo.account == user.account && loginInfo.password == user.password;\n\t\t});\n\t\tif (authed) {\n\t\t\treturn owner.createState(loginInfo.account, callback);\n\t\t} else {\n\t\t\treturn callback('用户名或密码错误');\n\t\t}\n\t};\n\n\towner.createState = function(name, callback) {\n\t\tvar state = owner.getState();\n\t\tstate.account = name;\n\t\tstate.token = \"token123456789\";\n\t\towner.setState(state);\n\t\treturn callback();\n\t};\n\n\t/**\n\t * 新用户注册\n\t **/\n\towner.reg = function(regInfo, callback) {\n\t\tcallback = callback || $.noop;\n\t\tregInfo = regInfo || {};\n\t\tregInfo.account = regInfo.account || '';\n\t\tregInfo.password = regInfo.password || '';\n\t\tif (regInfo.account.length < 5) {\n\t\t\treturn callback('用户名最短需要 5 个字符');\n\t\t}\n\t\tif (regInfo.password.length < 6) {\n\t\t\treturn callback('密码最短需要 6 个字符');\n\t\t}\n\t\tif (!checkEmail(regInfo.email)) {\n\t\t\treturn callback('邮箱地址不合法');\n\t\t}\n\t\tvar users = JSON.parse(localStorage.getItem('$users') || '[]');\n\t\tusers.push(regInfo);\n\t\tlocalStorage.setItem('$users', JSON.stringify(users));\n\t\treturn callback();\n\t};\n\n\t/**\n\t * 获取当前状态\n\t **/\n\towner.getState = function() {\n\t\tvar stateText = localStorage.getItem('$state') || \"{}\";\n\t\treturn JSON.parse(stateText);\n\t};\n\n\t/**\n\t * 设置当前状态\n\t **/\n\towner.setState = function(state) {\n\t\tstate = state || {};\n\t\tlocalStorage.setItem('$state', JSON.stringify(state));\n\t\t//var settings = owner.getSettings();\n\t\t//settings.gestures = '';\n\t\t//owner.setSettings(settings);\n\t};\n\n\tvar checkEmail = function(email) {\n\t\temail = email || '';\n\t\treturn (email.length > 3 && email.indexOf('@') > -1);\n\t};\n\n\t/**\n\t * 找回密码\n\t **/\n\towner.forgetPassword = function(email, callback) {\n\t\tcallback = callback || $.noop;\n\t\tif (!checkEmail(email)) {\n\t\t\treturn callback('邮箱地址不合法');\n\t\t}\n\t\treturn callback(null, '新的随机密码已经发送到您的邮箱，请查收邮件。');\n\t};\n\n\t/**\n\t * 获取应用本地配置\n\t **/\n\towner.setSettings = function(settings) {\n\t\tsettings = settings || {};\n\t\tlocalStorage.setItem('$settings', JSON.stringify(settings));\n\t}\n\n\t/**\n\t * 设置应用本地配置\n\t **/\n\towner.getSettings = function() {\n\t\t\tvar settingsText = localStorage.getItem('$settings') || \"{}\";\n\t\t\treturn JSON.parse(settingsText);\n\t\t}\n\t\t/**\n\t\t * 获取本地是否安装客户端\n\t\t **/\n\towner.isInstalled = function(id) {\n\t\tif (id === 'qihoo' && mui.os.plus) {\n\t\t\treturn true;\n\t\t}\n\t\tif (mui.os.android) {\n\t\t\tvar main = plus.android.runtimeMainActivity();\n\t\t\tvar packageManager = main.getPackageManager();\n\t\t\tvar PackageManager = plus.android.importClass(packageManager)\n\t\t\tvar packageName = {\n\t\t\t\t\"qq\": \"com.tencent.mobileqq\",\n\t\t\t\t\"weixin\": \"com.tencent.mm\",\n\t\t\t\t\"sinaweibo\": \"com.sina.weibo\"\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn packageManager.getPackageInfo(packageName[id], PackageManager.GET_ACTIVITIES);\n\t\t\t} catch (e) {}\n\t\t} else {\n\t\t\tswitch (id) {\n\t\t\t\tcase \"qq\":\n\t\t\t\t\tvar TencentOAuth = plus.ios.import(\"TencentOAuth\");\n\t\t\t\t\treturn TencentOAuth.iphoneQQInstalled();\n\t\t\t\tcase \"weixin\":\n\t\t\t\t\tvar WXApi = plus.ios.import(\"WXApi\");\n\t\t\t\t\treturn WXApi.isWXAppInstalled()\n\t\t\t\tcase \"sinaweibo\":\n\t\t\t\t\tvar SinaAPI = plus.ios.import(\"WeiboSDK\");\n\t\t\t\t\treturn SinaAPI.isWeiboAppInstalled()\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}(mui, window.app = {}));"
  },
  {
    "path": "examples/login/js/feedback-page.js",
    "content": "(function(mui, window, document, undefined) {\n\tmui.init();\n\tvar get = function(id) {\n\t\treturn document.getElementById(id);\n\t};\n\tvar qsa = function(sel) {\n\t\treturn [].slice.call(document.querySelectorAll(sel));\n\t};\n\tvar ui = {\n\t\tquestion: get('question'),\n\t\tcontact: get('contact'),\n\t\timageList: get('image-list'),\n\t\tsubmit: get('submit')\n\t};\n\tui.clearForm = function() {\n\t\tui.question.value = '';\n\t\tui.contact.value = '';\n\t\tui.imageList.innerHTML = '';\n\t\tui.newPlaceholder();\n\t};\n\tui.getFileInputArray = function() {\n\t\treturn [].slice.call(ui.imageList.querySelectorAll('input[type=\"file\"]'));\n\t};\n\tui.getFileInputIdArray = function() {\n\t\tvar fileInputArray = ui.getFileInputArray();\n\t\tvar idArray = [];\n\t\tfileInputArray.forEach(function(fileInput) {\n\t\t\tif (fileInput.value != '') {\n\t\t\t\tidArray.push(fileInput.getAttribute('id'));\n\t\t\t}\n\t\t});\n\t\treturn idArray;\n\t};\n\tvar imageIndexIdNum = 0;\n\tui.newPlaceholder = function() {\n\t\tvar fileInputArray = ui.getFileInputArray();\n\t\tif (fileInputArray &&\n\t\t\tfileInputArray.length > 0 &&\n\t\t\tfileInputArray[fileInputArray.length - 1].parentNode.classList.contains('space')) {\n\t\t\treturn;\n\t\t}\n\t\timageIndexIdNum++;\n\t\tvar placeholder = document.createElement('div');\n\t\tplaceholder.setAttribute('class', 'image-item space');\n\t\tvar closeButton = document.createElement('div');\n\t\tcloseButton.setAttribute('class', 'image-close');\n\t\tcloseButton.innerHTML = 'X';\n\t\tcloseButton.addEventListener('click', function(event) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.cancelBubble = true;\n\t\t\tsetTimeout(function() {\n\t\t\t\tui.imageList.removeChild(placeholder);\n\t\t\t}, 0);\n\t\t\treturn false;\n\t\t}, false);\n\t\tvar fileInput = document.createElement('input');\n\t\tfileInput.setAttribute('type', 'file');\n\t\tfileInput.setAttribute('accept', 'image/*');\n\t\tfileInput.setAttribute('id', 'image-' + imageIndexIdNum);\n\t\tfileInput.addEventListener('change', function(event) {\n\t\t\tvar file = fileInput.files[0];\n\t\t\tif (file) {\n\t\t\t\tvar reader = new FileReader();\n\t\t\t\treader.onload = function() {\n\t\t\t\t\t//处理 android 4.1 兼容问题\n\t\t\t\t\tvar base64 = reader.result.split(',')[1];\n\t\t\t\t\tvar dataUrl = 'data:image/png;base64,' + base64;\n\t\t\t\t\t//\n\t\t\t\t\tplaceholder.style.backgroundImage = 'url(' + dataUrl + ')';\n\t\t\t\t}\n\t\t\t\treader.readAsDataURL(file);\n\t\t\t\tplaceholder.classList.remove('space');\n\t\t\t\tui.newPlaceholder();\n\t\t\t}\n\t\t}, false);\n\t\tplaceholder.appendChild(closeButton);\n\t\tplaceholder.appendChild(fileInput);\n\t\tui.imageList.appendChild(placeholder);\n\t};\n\tui.newPlaceholder();\n\tui.submit.addEventListener('tap', function(event) {\n\t\tif (ui.question.value == '' ||\n\t\t\t(ui.contact.value != '' &&\n\t\t\t\tui.contact.value.search(/^(\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+)|([1-9]\\d{4,9})$/) != 0)) {\n\t\t\treturn mui.toast('信息填写不符合规范');\n\t\t} \n\t\tplus.nativeUI.showWaiting();\n\t\tfeedback.send({\n\t\t\tquestion: ui.question.value,\n\t\t\tcontact: ui.contact.value,\n\t\t\timages: ui.getFileInputIdArray()\n\t\t}, function() {\n\t\t\tplus.nativeUI.closeWaiting();\n\t\t\tmui.toast('感谢您的建议~');\n\t\t\tui.clearForm();\n\t\t\tmui.back();\n\t\t});\n\t}, false);\n})(mui, window, document, undefined);"
  },
  {
    "path": "examples/login/js/feedback.js",
    "content": "(function($, feedback, window, document) {\n\n\t/*************** 环信配置开始 ****************/\n\t//以后信息更改后，需卸载 “调试 app” 重新调用运行\n\tvar APP_KEY = 'dcloudio#mui';\n\tvar CUSTOM_ID = 'customer';\n\t/*************** 环信配置结束 ****************/\n\n\t//一组 “常量”\n\tvar PASSWORD = 'pass01!';\n\tvar LOCAL_STORE_KEY = 'mui://user';\n\tvar USER_PREFIX = 'mui-user-';\n\n\n\t/**\n\t * 生成一个 IM 用户名\n\t **/\n\tvar createUsername = function() {\n\t\treturn USER_PREFIX + (new Date()).getTime();\n\t};\n\n\t/**\n\t * 获取用户，如果在本地存储中已有用户则直接返回。\n\t * 否则，注册新的用户\n\t **/\n\tfeedback.getUser = function(callback) {\n\t\tvar storeUserText = localStorage.getItem(LOCAL_STORE_KEY);\n\t\tif (storeUserText) {\n\t\t\tif (callback) callback(JSON.parse(storeUserText));\n\t\t\treturn;\n\t\t}\n\t\tvar newUsername = createUsername();\n\t\tEasemob.im.Helper.registerUser({\n\t\t\tusername: newUsername,\n\t\t\tpassword: PASSWORD,\n\t\t\tappKey: APP_KEY,\n\t\t\tsuccess: function(result) {\n\t\t\t\tvar userInfo = {\n\t\t\t\t\tusername: newUsername,\n\t\t\t\t\tpassword: PASSWORD\n\t\t\t\t};\n\t\t\t\tlocalStorage.setItem(LOCAL_STORE_KEY, JSON.stringify(userInfo));\n\t\t\t\tif (callback) callback(userInfo);\n\t\t\t},\n\t\t\terror: function(e) {\n\t\t\t\tplus.nativeUI.toast(e.message);\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * 登录环信息服务器\n\t **/\n\tfeedback.login = function(callback) {\n\t\tfeedback.getUser(function(user) {\n\t\t\tvar conn = new Easemob.im.Connection();\n\t\t\tconn.init({\n\t\t\t\tonOpened: function() {\n\t\t\t\t\t//alert(\"成功登录\");\n\t\t\t\t\tconn.setPresence();\n\t\t\t\t\tif (callback) callback(user, conn);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconn.open({\n\t\t\t\tuser: user.username,\n\t\t\t\tpwd: user.password,\n\t\t\t\tappKey: APP_KEY\n\t\t\t});\n\t\t});\n\t};\n\n\t/**\n\t * 发送反馈信息\n\t **/\n\tfeedback.send = function(content, callback) {\n\t\tfeedback.login(function(user, conn) {\n\t\t\t//发送文本消息\n\t\t\tvar msgText = '问题:' + content.question;\n\t\t\tif (content.contact) {\n\t\t\t\tmsgText += '; 联系方式:' + content.contact + ';'\n\t\t\t}\n\t\t\tconn.sendTextMessage({\n\t\t\t\tto: CUSTOM_ID,\n\t\t\t\tmsg: msgText,\n\t\t\t\ttype: \"chat\"\n\t\t\t});\n\t\t\t//如果没有截图\n\t\t\tif (!content.images || content.images.length < 1) {\n\t\t\t\tif (callback) callback();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//如果有截图\n\t\t\tvar sendImageCount = 0;\n\t\t\tvar hasError = false;\n\t\t\tcontent.images.forEach(function(fileInputId) {\n\t\t\t\t//alert(fileInputId)\n\t\t\t\tconn.sendPicture({\n\t\t\t\t\tfileInputId: fileInputId,\n\t\t\t\t\tto: CUSTOM_ID,\n\t\t\t\t\tonFileUploadError: function(error) {\n\t\t\t\t\t\t//处理图片上传失败\n\t\t\t\t\t\talert(JSON.stringify(error));\n\t\t\t\t\t\thasError = true;\n\t\t\t\t\t},\n\t\t\t\t\tonFileUploadComplete: function(data) {\n\t\t\t\t\t\t//处理图片上传成功，如本地消息显示\n\t\t\t\t\t\tsendImageCount++;\n\t\t\t\t\t\tif (!hasError && sendImageCount >= content.images.length) {\n\t\t\t\t\t\t\tif (callback) callback();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t\t//--\n\t\t});\n\t};\n\n})(mui, window.feedback = {}, window, document);"
  },
  {
    "path": "examples/login/js/mui.enterfocus.js",
    "content": "(function($) {\n\t$.enterfocus = function(selector, callback) {\n\t\tvar boxArray = [].slice.call(document.querySelectorAll(selector));\n\t\tfor (var index in boxArray) {\n\t\t\tvar box = boxArray[index];\n\t\t\tbox.addEventListener('keyup', function(event) {\n\t\t\t\tif (event.keyCode == 13) {\n\t\t\t\t\tvar boxIndex = boxArray.indexOf(this);\n\t\t\t\t\tif (boxIndex == boxArray.length - 1) {\n\t\t\t\t\t\tif (callback) callback();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//console.log(boxIndex);\n\t\t\t\t\t\tvar nextBox = boxArray[++boxIndex];\n\t\t\t\t\t\tnextBox.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\t};\n}(window.mui = window.mui || {}));"
  },
  {
    "path": "examples/login/js/mui.locker.js",
    "content": "/**\n * 手势锁屏插件\n * varstion 1.0.5\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, doc) {\n\n\tvar touchSupport = ('ontouchstart' in document);\n\tvar startEventName = touchSupport ? 'touchstart' : 'mousedown';\n\tvar moveEventName = touchSupport ? 'touchmove' : 'mousemove';\n\tvar endEventName = touchSupport ? 'touchend' : 'mouseup';\n\tvar lockerHolderClassName = $.className('locker-holder');\n\tvar lockerClassName = $.className('locker');\n\n\tvar styleHolder = doc.querySelector('head') || doc.querySelector('body');\n\tstyleHolder.innerHTML += \"<style>.mui-locker-holder{overflow:hidden;position:relative;padding:0px;}.mui-locker-holder canvas{width:100%;height:100%;}</style>\";\n\n\tvar times = 4;\n\n\tfunction getElementLeft(element) {　　　　\n\t\tvar actualLeft = element.offsetLeft;　　　　\n\t\tvar current = element.offsetParent;　　　　\n\t\twhile (current !== null) {　　　　　　\n\t\t\tactualLeft += current.offsetLeft;　　　　　　\n\t\t\tcurrent = current.offsetParent;　　　　\n\t\t}　　　　\n\t\treturn actualLeft;　　\n\t}　　\n\n\tfunction getElementTop(element) {　　　　\n\t\tvar actualTop = element.offsetTop;　　　　\n\t\tvar current = element.offsetParent;　　　　\n\t\twhile (current !== null) {　　　　　　\n\t\t\tactualTop += current.offsetTop;　　　　　　\n\t\t\tcurrent = current.offsetParent;　　　　\n\t\t}　　　　\n\t\treturn actualTop;　　\n\t}\n\n\t//定义 Locker 类\n\tvar Locker = $.Locker = $.Class.extend({\n\t\tR: 26,\n\t\tCW: 400,\n\t\tCH: 320,\n\t\tOffsetX: 30,\n\t\tOffsetY: 30,\n\n\t\t/**\n\t\t * 构造函数\n\t\t * */\n\t\tinit: function(holder, options) {\n\t\t\tvar self = this;\n\t\t\tif (!holder) {\n\t\t\t\tthrow \"构造 Locker 时缺少容器元素\";\n\t\t\t}\n\t\t\tself.holder = holder;\n\t\t\t//避免重复初始化开始\n\t\t\tif (self.holder.__locker_inited) return;\n\t\t\tself.holder.__locker_inited = true;\n\t\t\t//避免重复初始化结束\n\t\t\t//\n\t\t\tself.options = options || {};\n\t\t\tself.options.callback = self.options.callback || self.options.done || $.noop;\n\t\t\tself.holder.innerHTML = '<canvas></canvas>';\n\t\t\t//\n\t\t\tself.holder.classList.add(lockerHolderClassName);\n\t\t\t//初始化\n\t\t\tvar canvas = self.canvas = $.qsa('canvas', self.holder)[0];\n\t\t\tcanvas.on = canvas.addEventListener || function(name, handler, capture) {\n\t\t\t\tcanvas.attachEvent('on' + name, handler, capture);\n\t\t\t};\n\t\t\tcanvas.off = canvas.removeEventListener || function(name, handler, capture) {\n\t\t\t\tcanvas.detachEvent('on' + name, handler, capture);\n\t\t\t};\n\t\t\t//\n\t\t\tif (self.options.width) self.holder.style.width = self.options.width + 'px';\n\t\t\tif (self.options.height) self.holder.style.height = self.options.height + 'px';\n\t\t\tself.CW = self.options.width || self.holder.offsetWidth || self.CW;\n\t\t\tself.CH = self.options.height || self.holder.offsetHeight || self.CH;\n\t\t\t//处理 “宽、高” 等数值, 全部扩大 times 倍\n\t\t\tself.R *= times;\n\t\t\tself.CW *= times;\n\t\t\tself.CH *= times;\n\t\t\tself.OffsetX *= times;\n\t\t\tself.OffsetY *= times;\n\t\t\t//\n\t\t\tcanvas.width = self.CW;\n\t\t\tcanvas.height = self.CH;\n\t\t\tvar cxt = self.cxt = canvas.getContext(\"2d\");\n\t\t\t//两个圆之间的外距离 就是说两个圆心的距离去除两个半径\n\t\t\tvar X = (self.CW - 2 * self.OffsetX - self.R * 2 * 3) / 2;\n\t\t\tvar Y = (self.CH - 2 * self.OffsetY - self.R * 2 * 3) / 2;\n\t\t\tself.pointLocationArr = self.caculateNinePointLotion(X, Y);\n\t\t\tself.initEvent(canvas, cxt, self.holder);\n\t\t\t//console.log(X);\n\t\t\tself.draw(cxt, self.pointLocationArr, [], null);\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.draw(cxt, self.pointLocationArr, [], null);\n\t\t\t}, 0);\n\t\t},\n\n\t\t/**\n\t\t * 计算\n\t\t */\n\t\tcaculateNinePointLotion: function(diffX, diffY) {\n\t\t\tvar self = this;\n\t\t\tvar Re = [];\n\t\t\tfor (var row = 0; row < 3; row++) {\n\t\t\t\tfor (var col = 0; col < 3; col++) {\n\t\t\t\t\tvar Point = {\n\t\t\t\t\t\tX: (self.OffsetX + col * diffX + (col * 2 + 1) * self.R),\n\t\t\t\t\t\tY: (self.OffsetY + row * diffY + (row * 2 + 1) * self.R)\n\t\t\t\t\t};\n\t\t\t\t\tRe.push(Point);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Re;\n\t\t},\n\n\t\t/**\n\t\t * 绘制\n\t\t */\n\t\tdraw: function(cxt, _PointLocationArr, _LinePointArr, touchPoint) {\n\t\t\tvar self = this;\n\t\t\tvar R = self.R;\n\t\t\tif (_LinePointArr.length > 0) {\n\t\t\t\tcxt.beginPath();\n\t\t\t\tfor (var i = 0; i < _LinePointArr.length; i++) {\n\t\t\t\t\tvar pointIndex = _LinePointArr[i];\n\t\t\t\t\tcxt.lineTo(_PointLocationArr[pointIndex].X, _PointLocationArr[pointIndex].Y);\n\t\t\t\t}\n\t\t\t\tcxt.lineWidth = 2 * times;\n\t\t\t\tcxt.strokeStyle = self.options.lineColor || \"#999\"; //连结线颜色\n\t\t\t\tcxt.stroke();\n\t\t\t\tcxt.closePath();\n\t\t\t\tif (touchPoint != null) {\n\t\t\t\t\tvar lastPointIndex = _LinePointArr[_LinePointArr.length - 1];\n\t\t\t\t\tvar lastPoint = _PointLocationArr[lastPointIndex];\n\t\t\t\t\tcxt.beginPath();\n\t\t\t\t\tcxt.moveTo(lastPoint.X, lastPoint.Y);\n\t\t\t\t\tcxt.lineTo(touchPoint.X, touchPoint.Y);\n\t\t\t\t\tcxt.stroke();\n\t\t\t\t\tcxt.closePath();\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i = 0; i < _PointLocationArr.length; i++) {\n\t\t\t\tvar Point = _PointLocationArr[i];\n\t\t\t\tcxt.fillStyle = self.options.ringColor || \"#888\"; //圆圈边框颜色\n\t\t\t\tcxt.beginPath();\n\t\t\t\tcxt.arc(Point.X, Point.Y, R, 0, Math.PI * times, true);\n\t\t\t\tcxt.closePath();\n\t\t\t\tcxt.fill();\n\t\t\t\tcxt.fillStyle = self.options.fillColor || \"#f3f3f3\"; //圆圈填充颜色\n\t\t\t\tcxt.beginPath();\n\t\t\t\tcxt.arc(Point.X, Point.Y, R - (2 * times), 0, Math.PI * times, true);\n\t\t\t\tcxt.closePath();\n\t\t\t\tcxt.fill();\n\t\t\t\tif (_LinePointArr.indexOf(i) >= 0) {\n\t\t\t\t\tcxt.fillStyle = self.options.pointColor || \"#777\"; //圆圈中心点颜色\n\t\t\t\t\tcxt.beginPath();\n\t\t\t\t\tcxt.arc(Point.X, Point.Y, R - (16 * times), 0, Math.PI * times, true);\n\t\t\t\t\tcxt.closePath();\n\t\t\t\t\tcxt.fill();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tisPointSelect: function(touches, linePoint) {\n\t\t\tvar self = this;\n\t\t\tfor (var i = 0; i < self.pointLocationArr.length; i++) {\n\t\t\t\tvar currentPoint = self.pointLocationArr[i];\n\t\t\t\tvar xdiff = Math.abs(currentPoint.X - touches.elementX);\n\t\t\t\tvar ydiff = Math.abs(currentPoint.Y - touches.elementY);\n\t\t\t\tvar dir = Math.pow((xdiff * xdiff + ydiff * ydiff), 0.5);\n\t\t\t\tif (dir < self.R) {\n\t\t\t\t\tif (linePoint.indexOf(i) < 0) {\n\t\t\t\t\t\tlinePoint.push(i);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tinitEvent: function(canvas, cxt, holder) {\n\t\t\tvar self = this;\n\t\t\tvar linePoint = [];\n\t\t\tvar isDown = false; //针对鼠标事件\n\t\t\t//start\n\t\t\tself._startHandler = function(e) {\n\t\t\t\te.point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t\t\te.point.elementX = (e.point.pageX - getElementLeft(holder)) * times;\n\t\t\t\te.point.elementY = (e.point.pageY - getElementTop(holder)) * times;\n\t\t\t\tself.isPointSelect(e.point, linePoint);\n\t\t\t\tisDown = true;\n\t\t\t};\n\t\t\tcanvas.on(startEventName, self._startHandler, false);\n\t\t\t//move\n\t\t\tself._moveHanlder = function(e) {\n\t\t\t\tif (!isDown) return;\n\t\t\t\te.preventDefault();\n\t\t\t\te.point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t\t\te.point.elementX = (e.point.pageX - getElementLeft(holder)) * times;\n\t\t\t\te.point.elementY = (e.point.pageY - getElementTop(holder)) * times;\n\t\t\t\tvar touches = e.point;\n\t\t\t\tself.isPointSelect(touches, linePoint);\n\t\t\t\tcxt.clearRect(0, 0, self.CW, self.CH);\n\t\t\t\tself.draw(cxt, self.pointLocationArr, linePoint, {\n\t\t\t\t\tX: touches.elementX,\n\t\t\t\t\tY: touches.elementY\n\t\t\t\t});\n\t\t\t};\n\t\t\tcanvas.on(moveEventName, self._moveHanlder, false);\n\t\t\t//end\n\t\t\tself._endHandler = function(e) {\n\t\t\t\te.point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t\t\te.point.elementX = (e.point.pageX - getElementLeft(holder)) * times;\n\t\t\t\te.point.elementY = (e.point.pageY - getElementTop(holder)) * times;\n\t\t\t\tcxt.clearRect(0, 0, self.CW, self.CH);\n\t\t\t\tself.draw(cxt, self.pointLocationArr, linePoint, null);\n\t\t\t\t//事件数据\n\t\t\t\tvar eventData = {\n\t\t\t\t\tsender: self,\n\t\t\t\t\tpoints: linePoint\n\t\t\t\t};\n\t\t\t\t/*\n\t\t\t\t * 回调完成事件\n\t\t\t\t *\n\t\t\t\t * 备注:\n\t\t\t\t * 比较理想的做法是为 Locker 的实例启用事件机制，比如 locker.on('done',handler);\n\t\t\t\t * 在 mui 没有完整的公共事件模块前，此版本中 locker 实例暂通过 options.callback 处理\n\t\t\t\t */\n\t\t\t\tself.options.callback(eventData);\n\t\t\t\t//触发声明的DOM的自定义事件(暂定 done 为事件名，可以考虑更有针对的事件名 )\n\t\t\t\t$.trigger(self.holder, 'done', eventData);\n\t\t\t\t//-\n\t\t\t\tlinePoint = [];\n\t\t\t\tisDown = false;\n\t\t\t};\n\t\t\tcanvas.on(endEventName, self._endHandler, false);\n\t\t},\n\n\t\tpointLocationArr: [],\n\n\t\t/**\n\t\t * 清除图形\n\t\t * */\n\t\tclear: function() {\n\t\t\tvar self = this;\n\t\t\t//self.pointLocationArr = [];\n\t\t\tif (self.cxt) {\n\t\t\t\tself.cxt.clearRect(0, 0, self.CW, self.CH);\n\t\t\t\tself.draw(self.cxt, self.pointLocationArr, [], {\n\t\t\t\t\tX: 0,\n\t\t\t\t\tY: 0\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * 释放资源\n\t\t * */\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.cxt = null;\n\t\t\tself.canvas.off(startEventName, self._startHandler);\n\t\t\tself.canvas.off(moveEventName, self._moveHandler);\n\t\t\tself.canvas.off(endEventName, self._endHandler);\n\t\t\tself.holder.innerHTML = '';\n\t\t\tself.canvas = null;\n\t\t}\n\t});\n\n\t//添加 locker 插件\n\t$.fn.locker = function(options) {\n\t\t//遍历选择的元素\n\t\tthis.each(function(i, element) {\n\t\t\tif (options) {\n\t\t\t\tnew Locker(element, options);\n\t\t\t} else {\n\t\t\t\tvar optionsText = element.getAttribute('data-locker-options');\n\t\t\t\tvar options = optionsText ? JSON.parse(optionsText) : {};\n\t\t\t\toptions.lineColor = element.getAttribute('data-locker-line-color') || options.lineColor;\n\t\t\t\toptions.ringColor = element.getAttribute('data-locker-ring-color') || options.ringColor;\n\t\t\t\toptions.fillColor = element.getAttribute('data-locker-fill-color') || options.fillColor;\n\t\t\t\toptions.pointColor = element.getAttribute('data-locker-point-color') || options.pointColor;\n\t\t\t\toptions.width = element.getAttribute('data-locker-width') || options.width;\n\t\t\t\toptions.height = element.getAttribute('data-locker-height') || options.height;\n\t\t\t\tnew Locker(element, options);\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t};\n\n\t//自动处理 class='mui-locker' 的 dom\n\ttry {\n\t\t$('.' + lockerClassName).locker();\n\t} catch (ex) {}\n\t$.ready(function() {\n\t\t$('.' + lockerClassName).locker();\n\t});\n\n}(mui, document));"
  },
  {
    "path": "examples/login/js/mui.view.js",
    "content": "/**\n * <div id=\"app\" class=\"mui-views\">\n\t<div class=\"mui-view\">\n\t\t<div class=\"mui-navbar\">\n\t\t</div>\n\t\t<div class=\"mui-pages\">\n\t\t</div>\n\t</div>\n</div>\n * @param {Object} $\n * @param {Object} window\n */\n(function($, window) {\n\tvar CLASS_LEFT = $.className('left');\n\tvar CLASS_CENTER = $.className('center');\n\tvar CLASS_RIGHT = $.className('right');\n\tvar CLASS_PAGE = $.className('page');\n\tvar CLASS_PAGE_LEFT = $.className('page-left');\n\tvar CLASS_PAGE_CENTER = $.className('page-center');\n\tvar CLASS_NAVBAR_LEFT = $.className('navbar-left');\n\tvar CLASS_NAVBAR_CENTER = $.className('navbar-center');\n\tvar CLASS_PAGE_SHADOW = $.className('page-shadow');\n\n\tvar CLASS_TRANSITIONING = $.className('transitioning');\n\n\tvar SELECTOR_LEFT = '.' + CLASS_LEFT;\n\tvar SELECTOR_CENTER = '.' + CLASS_CENTER;\n\tvar SELECTOR_RIGHT = '.' + CLASS_RIGHT;\n\n\tvar SELECTOR_ICON = $.classSelector('.icon');\n\tvar SELECTOR_NAVBAR = $.classSelector('.navbar');\n\tvar SELECTOR_NAVBAR_INNER = $.classSelector('.navbar-inner');\n\tvar SELECTOR_PAGES = $.classSelector('.pages');\n\tvar SELECTOR_BTN_NAV = $.classSelector('.btn-nav');\n\tvar SELECTOR_PAGE_LEFT = '.' + CLASS_PAGE_LEFT;\n\tvar SELECTOR_PAGE_CENTER = '.' + CLASS_PAGE_CENTER;\n\tvar SELECTOR_NAVBAR_LEFT = '.' + CLASS_NAVBAR_LEFT;\n\tvar SELECTOR_NAVBAR_CENTER = '.' + CLASS_NAVBAR_CENTER;\n\n\tvar View = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.view = this.element = element;\n\t\t\tthis.options = $.extend({\n\t\t\t\tanimateNavbar: true,\n\t\t\t\tswipeBackPageActiveArea: 30,\n\t\t\t\thardwareAccelerated: true\n\t\t\t}, options);\n\t\t\tthis.navbars = this.view.querySelector(SELECTOR_NAVBAR);\n\t\t\tthis.pages = this.view.querySelector(SELECTOR_PAGES);\n\n\t\t\tthis.history = []; //history\n\n\t\t\tthis.maxScrollX = this.view.offsetWidth;\n\t\t\tthis.x = this.y = 0;\n\t\t\tthis.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : '';\n\t\t\tthis.ratio = 0;\n\t\t\tthis.isBack = true;\n\t\t\tthis.moved = this.dragging = false;\n\n\t\t\tthis.activeNavbar = this.previousNavbar = null;\n\t\t\tthis.activePage = this.previousPage = null;\n\n\t\t\tthis._initPageEventMethod();\n\n\t\t\tthis._initDefaultPage();\n\n\t\t\tthis._initNavBar();\n\n\t\t\tthis.initEvent();\n\t\t},\n\t\t_initPageEventMethod: function() {\n\t\t\tvar self = this;\n\t\t\t$.each(['onPageBeforeShow', 'onPageShow', 'onPageBeforeBack', 'onPageBack'], function(index, event) {\n\t\t\t\tself[event + 'Callbacks'] = {};\n\t\t\t\tself[event] = function(page, callback) {\n\t\t\t\t\tvar eventCallbacks = event + 'Callbacks';\n\t\t\t\t\tif (!self[eventCallbacks].hasOwnProperty(page)) {\n\t\t\t\t\t\tself[eventCallbacks][page] = [callback];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself[eventCallbacks][page].push(callback);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\t_initDefaultPage: function() {\n\t\t\tvar defaultPage = document.querySelector(this.options.defaultPage);\n\t\t\tif (defaultPage) {\n\t\t\t\tthis._appendPage(defaultPage);\n\t\t\t} else {\n\t\t\t\tthrow new Error('defaultPage[' + this.options.defaultPage + '] does not exist');\n\t\t\t}\n\t\t},\n\t\tinitEvent: function() {\n\t\t\tthis.view.addEventListener('click', this);\n\t\t\tthis.view.addEventListener('tap', this);\n\t\t\tthis.pages.addEventListener('drag', this);\n\t\t\tthis.pages.addEventListener('dragend', this);\n\t\t\tthis.pages.addEventListener('webkitTransitionEnd', this);\n\t\t},\n\t\thandleEvent: function(event) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'click':\n\t\t\t\t\tthis._click(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'tap':\n\t\t\t\t\tthis._tap(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis._drag(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis._dragend(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd':\n\t\t\t\t\tthis._webkitTransitionEnd(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshadow: function() {\n\t\t\tvar shadow = document.createElement('div');\n\t\t\tshadow.className = CLASS_PAGE_SHADOW;\n\t\t\treturn shadow;\n\t\t}(),\n\t\t_removePage: function(page, navbar) {\n\t\t\tthis._removeNavbar(page, navbar);\n\t\t\tdocument.body.appendChild(page);\n\t\t\tthis._cleanPageClass(page);\n\t\t},\n\t\t_prependPage: function(page) {\n\t\t\tvar navbar = page.querySelector(SELECTOR_NAVBAR_INNER);\n\t\t\tthis._prependNavbar(navbar);\n\t\t\tpage.classList.add(CLASS_PAGE_LEFT);\n\t\t\tthis.pages.insertBefore(page, this.pages.firstElementChild);\n\t\t},\n\t\t_appendPage: function(page) {\n\t\t\tvar navbar = page.querySelector(SELECTOR_NAVBAR_INNER);\n\t\t\tthis._appendNavbar(navbar);\n\t\t\tpage.classList.add(CLASS_PAGE_CENTER);\n\t\t\tthis.pages.appendChild(page);\n\t\t},\n\t\t_removeNavbar: function(page, navbar) {\n\t\t\tpage.insertBefore(navbar, page.firstElementChild);\n\t\t\tthis._cleanNavbarClass(navbar);\n\t\t},\n\t\t_prependNavbar: function(navbar) {\n\t\t\tnavbar.classList.add(CLASS_NAVBAR_LEFT);\n\t\t\tthis.navbars.insertBefore(navbar, this.navbars.firstElementChild);\n\t\t},\n\t\t_appendNavbar: function(navbar) {\n\t\t\tnavbar.classList.add(CLASS_NAVBAR_CENTER);\n\t\t\tthis.navbars.appendChild(navbar);\n\t\t},\n\t\t_cleanPageClass: function(page) {\n\t\t\tpage.classList.remove(CLASS_PAGE_CENTER);\n\t\t\tpage.classList.remove(CLASS_PAGE_LEFT);\n\t\t},\n\t\t_cleanNavbarClass: function(navbar) {\n\t\t\tnavbar.classList.remove(CLASS_NAVBAR_CENTER);\n\t\t\tnavbar.classList.remove(CLASS_NAVBAR_LEFT);\n\t\t},\n\t\t_tap: function(event) {\n\t\t\tvar target = event.target;\n\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\t\t\tvar page = document.getElementById(target.hash.replace('#', ''));\n\t\t\t\t\tif (page && page.classList.contains(CLASS_PAGE)) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\t\t\tthis.go(target.hash);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_click: function(event) {\n\t\t\tvar target = event.target;\n\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\t\t\tvar page = document.getElementById(target.hash.replace('#', ''));\n\t\t\t\t\tif (page && page.classList.contains(CLASS_PAGE)) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_cleanStyle: function(el) {\n\t\t\tif (el) {\n\t\t\t\tel.style.webkitTransform = '';\n\t\t\t\tel.style.opacity = '';\n\t\t\t}\n\t\t},\n\t\t_webkitTransitionEnd: function(event) {\n\t\t\tthis.dragging = this.moved = false;\n\t\t\tif (this.activePage !== event.target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isInTransition = false;\n\n\t\t\tthis.shadow.parentNode === this.activePage && this.activePage.removeChild(this.shadow);\n\t\t\tthis.previousPageClassList.remove(CLASS_TRANSITIONING);\n\t\t\tthis.activePageClassList.remove(CLASS_TRANSITIONING);\n\n\t\t\tvar self = this;\n\t\t\tif ($.os.ios && this.options.animateNavbar && this.previousNavElements && this.activeNavElements) {\n\t\t\t\tvar isBack = this.isBack;\n\t\t\t\t$.each(this.previousNavElements, function(i, el) {\n\t\t\t\t\tel.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tisBack && self._cleanStyle(el);\n\t\t\t\t});\n\t\t\t\t$.each(this.activeNavElements, function(i, el) {\n\t\t\t\t\tel.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tself._cleanStyle(el);\n\t\t\t\t});\n\t\t\t\tif (this.previousNavBackIcon) {\n\t\t\t\t\tthis.previousNavBackIcon.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tisBack && this._cleanStyle(this.previousNavBackIcon);\n\t\t\t\t}\n\t\t\t\tif (this.activeNavBackIcon) {\n\t\t\t\t\tthis.activeNavBackIcon.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tthis._cleanStyle(this.activeNavBackIcon);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.previousNavbar.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\tthis.activeNavbar.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\tthis._cleanStyle(this.previousNavbar);\n\t\t\t\tthis._cleanStyle(this.activeNavbar);\n\t\t\t}\n\n\t\t\tthis._cleanStyle(this.previousPage);\n\t\t\tthis._cleanStyle(this.activePage);\n\n\t\t\tif (this.ratio <= 0.5) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.isBack) {\n\t\t\t\tthis._removePage(this.activePage, this.activeNavbar);\n\t\t\t\tthis.previousPageClassList.remove(CLASS_PAGE_LEFT);\n\t\t\t\tthis.previousPageClassList.add(CLASS_PAGE_CENTER);\n\t\t\t\tthis.previousNavbar.classList.remove(CLASS_NAVBAR_LEFT);\n\t\t\t\tthis.previousNavbar.classList.add(CLASS_NAVBAR_CENTER);\n\t\t\t\tif (this.history.length > 0) {\n\t\t\t\t\tthis._prependPage(this.history.pop());\n\t\t\t\t}\n\t\t\t\tthis._initNavBar();\n\t\t\t\tthis._trigger('pageBack', this.activePage);\n\t\t\t\tthis._trigger('pageShow', this.previousPage);\n\t\t\t} else {\n\t\t\t\tthis.previousPageClassList.add(CLASS_PAGE_LEFT);\n\t\t\t\tthis.activePageClassList.add(CLASS_PAGE_CENTER);\n\t\t\t\tthis._trigger('pageShow', this.activePage);\n\t\t\t}\n\n\n\t\t},\n\t\t_trigger: function(eventType, page) {\n\t\t\tvar eventCallbacks = 'on' + eventType.charAt(0).toUpperCase() + eventType.slice(1) + 'Callbacks';\n\t\t\tif (this[eventCallbacks].hasOwnProperty(page.id)) {\n\t\t\t\tvar callbacks = this[eventCallbacks][page.id];\n\t\t\t\tvar event = new CustomEvent(eventType, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tpage: page\n\t\t\t\t\t},\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcancelable: true\n\t\t\t\t});\n\t\t\t\tfor (var len = callbacks.length; len--;) {\n\t\t\t\t\tcallbacks[len].apply(this, event);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$.trigger(this.view, eventType, {\n\t\t\t\tpage: page\n\t\t\t});\n\t\t},\n\t\t_initPageTransform: function() {\n\t\t\tthis.previousPage = this.pages.querySelector(SELECTOR_PAGE_LEFT);\n\t\t\tthis.activePage = this.pages.querySelector(SELECTOR_PAGE_CENTER);\n\t\t\tif (this.previousPage && this.activePage) {\n\t\t\t\tthis.activePage.appendChild(this.shadow);\n\t\t\t\tthis.previousPageClassList = this.previousPage.classList;\n\t\t\t\tthis.activePageClassList = this.activePage.classList;\n\n\t\t\t\tthis.previousPageStyle = this.previousPage.style;\n\t\t\t\tthis.activePageStyle = this.activePage.style;\n\n\t\t\t\tthis.previousPageClassList.remove(CLASS_TRANSITIONING);\n\t\t\t\tthis.activePageClassList.remove(CLASS_TRANSITIONING);\n\n\t\t\t\tif (this.options.animateNavbar && this.navbars) {\n\t\t\t\t\tthis.previousNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_LEFT);\n\t\t\t\t\tthis.activeNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_CENTER);\n\t\t\t\t\tif (this.previousNavbar && this.activeNavbar) {\n\t\t\t\t\t\tthis.previousNavElements = this.previousNavbar.querySelectorAll(SELECTOR_LEFT + ',' + SELECTOR_CENTER + ',' + SELECTOR_RIGHT);\n\t\t\t\t\t\tthis.activeNavElements = this.activeNavbar.querySelectorAll(SELECTOR_LEFT + ',' + SELECTOR_CENTER + ',' + SELECTOR_RIGHT);\n\t\t\t\t\t\tthis.previousNavBackIcon = this.previousNavbar.querySelector(SELECTOR_LEFT + SELECTOR_BTN_NAV + ' ' + SELECTOR_ICON);\n\t\t\t\t\t\tthis.activeNavBackIcon = this.activeNavbar.querySelector(SELECTOR_LEFT + SELECTOR_BTN_NAV + ' ' + SELECTOR_ICON);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.x = 0;\n\t\t\t\tthis.dragging = true;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t_initNavBar: function() {\n\t\t\tif (this.options.animateNavbar && this.navbars) {\n\t\t\t\tvar inners = this.navbars.querySelectorAll(SELECTOR_NAVBAR_INNER);\n\t\t\t\tvar inner, left, right, center, leftWidth, rightWidth, centerWidth, noLeft, onRight, currLeft, diff, navbarWidth;\n\t\t\t\tfor (var i = 0, len = inners.length; i < len; i++) {\n\t\t\t\t\tinner = inners[i];\n\t\t\t\t\tleft = inner.querySelector(SELECTOR_LEFT);\n\t\t\t\t\tright = inner.querySelector(SELECTOR_RIGHT);\n\t\t\t\t\tcenter = inner.querySelector(SELECTOR_CENTER);\n\t\t\t\t\tnoLeft = !left;\n\t\t\t\t\tnoRight = !right;\n\t\t\t\t\tleftWidth = noLeft ? 0 : left.offsetWidth;\n\t\t\t\t\trightWidth = noRight ? 0 : right.offsetWidth;\n\t\t\t\t\tcenterWidth = center ? center.offsetWidth : 0;\n\t\t\t\t\tnavbarWidth = this.maxScrollX;\n\t\t\t\t\tonLeft = inner.classList.contains('navbar-left');\n\t\t\t\t\tif (noRight) {\n\t\t\t\t\t\tcurrLeft = navbarWidth - centerWidth;\n\t\t\t\t\t}\n\t\t\t\t\tif (noLeft) {\n\t\t\t\t\t\tcurrLeft = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!noLeft && !noRight) {\n\t\t\t\t\t\tcurrLeft = (navbarWidth - rightWidth - centerWidth + leftWidth) / 2;\n\t\t\t\t\t}\n\t\t\t\t\tvar requiredLeft = (navbarWidth - centerWidth) / 2;\n\t\t\t\t\tif (navbarWidth - leftWidth - rightWidth > centerWidth) {\n\t\t\t\t\t\tif (requiredLeft < leftWidth) {\n\t\t\t\t\t\t\trequiredLeft = leftWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (requiredLeft + centerWidth > navbarWidth - rightWidth) {\n\t\t\t\t\t\t\trequiredLeft = navbarWidth - rightWidth - centerWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdiff = requiredLeft - currLeft;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiff = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar centerLeft = diff;\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\tcenter.style.marginLeft = -leftWidth + 'px';\n\t\t\t\t\t\tcenter.mNavbarLeftOffset = -(currLeft + diff) + 30; //这个30是测出来的。后续要实际计算一下\n\t\t\t\t\t\tcenter.mNavbarRightOffset = navbarWidth - currLeft - diff - centerWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (onLeft) center.style.webkitTransform = ('translate3d(' + center.mNavbarLeftOffset + 'px, 0, 0)');\n\n\t\t\t\t\tif (!noLeft) {\n\t\t\t\t\t\tleft.mNavbarLeftOffset = -leftWidth;\n\t\t\t\t\t\tleft.mNavbarRightOffset = (navbarWidth - leftWidth) / 2;\n\t\t\t\t\t\tif (onLeft) left.style.webkitTransform = ('translate3d(' + left[0].mNavbarLeftOffset + 'px, 0, 0)');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!noRight) {\n\t\t\t\t\t\tright.mNavbarLeftOffset = -(navbarWidth - rightWidth) / 2;\n\t\t\t\t\t\tright.mNavbarRightOffset = rightWidth;\n\t\t\t\t\t\tif (onLeft) right.style.webkitTransform = ('translate3d(' + right[0].mNavbarLeftOffset + 'px, 0, 0)');\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_drag: function(event) {\n\t\t\tif (this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tif (!this.dragging) {\n\t\t\t\tif ((detail.start.x - this.view.offsetLeft) < this.options.swipeBackPageActiveArea) {\n\t\t\t\t\tthis.isBack = true;\n\t\t\t\t\tthis._initPageTransform();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.dragging) {\n\t\t\t\tvar deltaX = 0;\n\t\t\t\tif (!this.moved) { //start\n\t\t\t\t\tdeltaX = detail.deltaX;\n\t\t\t\t\t$.gestures.touch.lockDirection = true; //锁定方向\n\t\t\t\t\t$.gestures.touch.startDirection = detail.direction;\n\t\t\t\t} else { //move\n\t\t\t\t\tdeltaX = detail.deltaX - detail.lastDeltaX;\n\t\t\t\t}\n\t\t\t\tvar newX = this.x + deltaX;\n\t\t\t\tif (newX < 0 || newX > this.maxScrollX) {\n\t\t\t\t\tnewX = newX < 0 ? 0 : this.maxScrollX;\n\t\t\t\t}\n\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tdetail.gesture.preventDefault();\n\n\t\t\t\tif (!this.requestAnimationFrame) {\n\t\t\t\t\tthis._updateTranslate();\n\t\t\t\t}\n\n\t\t\t\tthis.moved = true;\n\t\t\t\tthis.x = newX;\n\t\t\t\tthis.y = 0;\n\t\t\t}\n\t\t},\n\t\t_dragend: function(event) {\n\t\t\tif (!this.moved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar detail = event.detail;\n\n\t\t\tthis._clearRequestAnimationFrame();\n\n\t\t\tthis._prepareTransition();\n\n\t\t\tthis.ratio = this.x / this.maxScrollX;\n\t\t\tif (this.ratio === 1 || this.ratio === 0) {\n\t\t\t\t$.trigger(this.activePage, 'webkitTransitionEnd');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.ratio > 0.5) {\n\t\t\t\tthis.setTranslate(this.maxScrollX, 0);\n\t\t\t} else {\n\t\t\t\tthis._cleanStyle(this.previousPage);\n\t\t\t\tthis._cleanStyle(this.activePage);\n\t\t\t}\n\t\t},\n\t\t_prepareTransition: function() {\n\t\t\tthis.isInTransition = true;\n\t\t\tthis.previousPageClassList.add(CLASS_TRANSITIONING);\n\t\t\tthis.activePageClassList.add(CLASS_TRANSITIONING);\n\t\t\tvar self = this;\n\t\t\tif (this.options.animateNavbar && this.previousNavElements && this.activeNavElements) {\n\t\t\t\tthis.previousNavbar.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.activeNavbar.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t$.each(this.previousNavElements, function(i, el) {\n\t\t\t\t\tel.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\tself._cleanStyle(el);\n\t\t\t\t});\n\t\t\t\t$.each(this.activeNavElements, function(i, el) {\n\t\t\t\t\tel.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\tself._cleanStyle(el);\n\t\t\t\t});\n\t\t\t\tif (this.previousNavBackIcon) {\n\t\t\t\t\tthis._cleanStyle(this.previousNavBackIcon);\n\t\t\t\t\tthis.previousNavBackIcon.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t}\n\t\t\t\tif (this.activeNavBackIcon) {\n\t\t\t\t\tthis._cleanStyle(this.activeNavBackIcon);\n\t\t\t\t\tthis.activeNavBackIcon.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_clearRequestAnimationFrame: function() {\n\t\t\tif (this.requestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(this.requestAnimationFrame);\n\t\t\t\tthis.requestAnimationFrame = null;\n\t\t\t}\n\t\t},\n\t\t_getTranslateStr: function(x, y) {\n\t\t\tif (this.options.hardwareAccelerated) {\n\t\t\t\treturn 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ;\n\t\t\t}\n\t\t\treturn 'translate(' + x + 'px,' + y + 'px) ';\n\t\t},\n\n\t\t_updateTranslate: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.x !== self.lastX || self.y !== self.lastY) {\n\t\t\t\tself.setTranslate(self.x, self.y);\n\t\t\t}\n\t\t\tself.requestAnimationFrame = requestAnimationFrame(function() {\n\t\t\t\tself._updateTranslate();\n\t\t\t});\n\t\t},\n\t\t_setNavbarTranslate: function(x, y) {\n\t\t\tvar percentage = x / this.maxScrollX;\n\t\t\t//only for ios\n\t\t\tif ($.os.ios && this.options.animateNavbar && this.previousNavElements && this.activeNavElements) {\n\t\t\t\tvar i, len, style, el;\n\t\t\t\tfor (i = 0, len = this.activeNavElements.length; i < len; i++) {\n\t\t\t\t\tel = this.activeNavElements[i];\n\t\t\t\t\tstyle = el.style;\n\t\t\t\t\tstyle.opacity = (1 - percentage * (el.classList.contains(CLASS_LEFT) ? 3.5 : 1.3));\n\t\t\t\t\tif (!el.classList.contains(CLASS_RIGHT)) {\n\t\t\t\t\t\tvar activeNavTranslate = percentage * el.mNavbarRightOffset;\n\t\t\t\t\t\tel.style.webkitTransform = ('translate3d(' + activeNavTranslate + 'px,0,0)');\n\t\t\t\t\t\tif (el.classList.contains(CLASS_LEFT) && this.activeNavBackIcon) {\n\t\t\t\t\t\t\tthis.activeNavBackIcon.style.webkitTransform = ('translate3d(' + -activeNavTranslate + 'px,0,0)');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (i = 0, len = this.previousNavElements.length; i < len; i++) {\n\t\t\t\t\tel = this.previousNavElements[i];\n\t\t\t\t\tstyle = el.style;\n\t\t\t\t\tstyle.opacity = percentage * 1.3 - 0.3;\n\t\t\t\t\tif (!el.classList.contains(CLASS_RIGHT)) {\n\t\t\t\t\t\tvar previousNavTranslate = el.mNavbarLeftOffset * (1 - percentage);\n\t\t\t\t\t\tel.style.webkitTransform = ('translate3d(' + previousNavTranslate + 'px,0,0)');\n\t\t\t\t\t\tif (el.classList.contains(CLASS_LEFT) && this.previousNavBackIcon) {\n\t\t\t\t\t\t\tthis.previousNavBackIcon.style.webkitTransform = ('translate3d(' + -previousNavTranslate + 'px,0,0)');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.activeNavbar.style.opacity = 1 - percentage * 1.3;\n\t\t\t\tthis.previousNavbar.style.opacity = percentage * 1.3 - 0.3;\n\t\t\t}\n\t\t},\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.previousPage.style.opacity = 0.9 + 0.1 * x / this.maxScrollX;\n\t\t\tif ($.os.ios) { //only for ios\n\t\t\t\tthis.previousPage.style['webkitTransform'] = this._getTranslateStr((x / 5 - this.maxScrollX / 5), y);\n\t\t\t}\n\t\t\tthis.activePage.style['webkitTransform'] = this._getTranslateStr(x, y);\n\n\t\t\tif (this.options.animateNavbar) {\n\t\t\t\tthis._setNavbarTranslate(x, y);\n\t\t\t}\n\t\t\tthis.lastX = this.x;\n\t\t\tthis.lastY = this.y;\n\t\t},\n\t\tcanBack: function() {\n\t\t\treturn this.pages.querySelector(SELECTOR_PAGE_LEFT);\n\t\t},\n\t\tback: function() {\n\t\t\tif (this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.isBack = true;\n\t\t\tthis.ratio = 1;\n\t\t\tif (this._initPageTransform()) {\n\t\t\t\tthis._trigger('pageBeforeBack', this.activePage);\n\t\t\t\tthis._trigger('pageBeforeShow', this.previousPage);\n\t\t\t\tthis._prepareTransition();\n\t\t\t\tthis.previousPage.offsetHeight;\n\t\t\t\tthis.activePage.offsetHeight;\n\t\t\t\tthis.setTranslate(this.maxScrollX, 0);\n\t\t\t}\n\t\t},\n\t\tgo: function(pageSelector) {\n\t\t\tif (this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar nextPage = document.querySelector(pageSelector);\n\n\t\t\tif (nextPage) {\n\t\t\t\tvar nextNavbar = nextPage.querySelector(SELECTOR_NAVBAR_INNER);\n\n\t\t\t\tvar previousNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_LEFT);\n\t\t\t\tvar activeNavbar = this.navbars.querySelector(SELECTOR_NAVBAR_CENTER);\n\t\t\t\tvar previousPage = this.pages.querySelector(SELECTOR_PAGE_LEFT);\n\t\t\t\tvar activePage = this.pages.querySelector(SELECTOR_PAGE_CENTER);\n\n\t\t\t\tif (previousNavbar && previousPage) {\n\t\t\t\t\tthis._removePage(previousPage, previousNavbar);\n\t\t\t\t\tthis.history.push(previousPage); //add to history\n\t\t\t\t}\n\t\t\t\tif (activeNavbar) {\n\t\t\t\t\tactiveNavbar.classList.remove(CLASS_NAVBAR_CENTER);\n\t\t\t\t\tactiveNavbar.classList.add(CLASS_NAVBAR_LEFT);\n\t\t\t\t}\n\n\t\t\t\tif (activePage) {\n\t\t\t\t\tactivePage.classList.remove(CLASS_PAGE_CENTER);\n\t\t\t\t\tactivePage.style.webkitTransform = 'translate3d(0,0,0)';\n\t\t\t\t\tactivePage.classList.add(CLASS_PAGE_LEFT);\n\t\t\t\t}\n\n\t\t\t\tnextPage.style.webkitTransform = 'translate3d(100%,0,0)';\n\t\t\t\tthis._appendPage(nextPage);\n\t\t\t\tnextPage.appendChild(this.shadow); //shadow\n\t\t\t\tnextPage.offsetHeight; //force\n\t\t\t\tthis.isBack = false;\n\t\t\t\tthis.ratio = 1;\n\n\t\t\t\tthis._initPageTransform();\n\t\t\t\tthis._initNavBar();\n\n\t\t\t\tthis._setNavbarTranslate(this.maxScrollX, 0);\n\t\t\t\t//force\n\t\t\t\tthis.previousPage.offsetHeight;\n\t\t\t\tthis.activePage.offsetHeight;\n\t\t\t\tthis.previousNavbar.offsetHeight;\n\t\t\t\tthis.activeNavbar.offsetHeight;\n\n\t\t\t\tthis._trigger('pageBeforeShow', this.activePage);\n\t\t\t\tthis._prepareTransition();\n\t\t\t\tthis.setTranslate(0, 0);\n\t\t\t}\n\t\t}\n\n\t});\n\n\n\t$.fn.view = function(options) {\n\t\tvar self = this[0];\n\t\tvar viewApi = null;\n\t\tvar id = self.getAttribute('data-view');\n\t\tif (!id) {\n\t\t\tid = ++$.uuid;\n\t\t\t$.data[id] = viewApi = new View(self, options);\n\t\t} else {\n\t\t\tviewApi = $.data[id];\n\t\t}\n\t\treturn viewApi;\n\n\t}\n})(mui, window);"
  },
  {
    "path": "examples/login/libs/easymob-webim-sdk/easemob.im-1.0.5.js",
    "content": "if (typeof jQuery == 'undefined') {\r\n\talert(\"need jquery\");\r\n} if(typeof Strophe == 'undefined'){\r\n\talert(\"need Strophe\");\r\n} else {\r\n\r\n(function($) {\r\n\t\r\nif (typeof Easemob == 'undefined') {\r\n\tEasemob = {};\r\n}\r\nif (typeof Easemob.im == 'undefined') {\r\n\tEasemob.im = {};\r\n}\r\nif (typeof Easemob.im.Connection !== 'undefined') {\r\n\treturn;\r\n}\r\n\r\nvar innerBase64 = (function() {\r\n\tvar keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\r\n\tvar obj = {\r\n\t\t/**\r\n\t\t * Encodes a string in base64\r\n\t\t * \r\n\t\t * @param {String}\r\n\t\t *            input The string to encode in base64.\r\n\t\t */\r\n\t\tencode : function(input) {\r\n\t\t\tvar output = \"\";\r\n\t\t\tvar chr1, chr2, chr3;\r\n\t\t\tvar enc1, enc2, enc3, enc4;\r\n\t\t\tvar i = 0;\r\n\r\n\t\t\tdo {\r\n\t\t\t\tchr1 = input.charCodeAt(i++);\r\n\t\t\t\tchr2 = input.charCodeAt(i++);\r\n\t\t\t\tchr3 = input.charCodeAt(i++);\r\n\r\n\t\t\t\tenc1 = chr1 >> 2;\r\n\t\t\t\tenc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n\t\t\t\tenc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n\t\t\t\tenc4 = chr3 & 63;\r\n\r\n\t\t\t\tif (isNaN(chr2)) {\r\n\t\t\t\t\tenc3 = enc4 = 64;\r\n\t\t\t\t} else if (isNaN(chr3)) {\r\n\t\t\t\t\tenc4 = 64;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)\r\n\t\t\t\t\t\t+ keyStr.charAt(enc3) + keyStr.charAt(enc4);\r\n\t\t\t} while (i < input.length);\r\n\r\n\t\t\treturn output;\r\n\t\t},\r\n\r\n\t\tbyteEncode : function(bytes) {\r\n\t\t\tvar output = \"\";\r\n\t\t\tvar chr1, chr2, chr3;\r\n\t\t\tvar enc1, enc2, enc3, enc4;\r\n\t\t\tvar i = 0;\r\n\r\n\t\t\tdo {\r\n\t\t\t\tchr1 = bytes[i++];\r\n\t\t\t\tchr2 = bytes[i++];\r\n\t\t\t\tchr3 = bytes[i++];\r\n\r\n\t\t\t\tenc1 = chr1 >> 2;\r\n\t\t\t\tenc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n\t\t\t\tenc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n\t\t\t\tenc4 = chr3 & 63;\r\n\r\n\t\t\t\tif (isNaN(chr2)) {\r\n\t\t\t\t\tenc3 = enc4 = 64;\r\n\t\t\t\t} else if (isNaN(chr3)) {\r\n\t\t\t\t\tenc4 = 64;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)\r\n\t\t\t\t\t\t+ keyStr.charAt(enc3) + keyStr.charAt(enc4);\r\n\t\t\t} while (i < bytes.length);\r\n\r\n\t\t\treturn output;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Decodes a base64 string.\r\n\t\t * \r\n\t\t * @param {String}\r\n\t\t *            input The string to decode.\r\n\t\t */\r\n\t\tdecode : function(input) {\r\n\t\t\tvar output = \"\";\r\n\t\t\tvar chr1, chr2, chr3;\r\n\t\t\tvar enc1, enc2, enc3, enc4;\r\n\t\t\tvar i = 0;\r\n\r\n\t\t\t// remove all characters that are not A-Z, a-z, 0-9, +, /, or =\r\n\t\t\tinput = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n\r\n\t\t\tdo {\r\n\t\t\t\tenc1 = keyStr.indexOf(input.charAt(i++));\r\n\t\t\t\tenc2 = keyStr.indexOf(input.charAt(i++));\r\n\t\t\t\tenc3 = keyStr.indexOf(input.charAt(i++));\r\n\t\t\t\tenc4 = keyStr.indexOf(input.charAt(i++));\r\n\r\n\t\t\t\tchr1 = (enc1 << 2) | (enc2 >> 4);\r\n\t\t\t\tchr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n\t\t\t\tchr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n\t\t\t\toutput = output + String.fromCharCode(chr1);\r\n\r\n\t\t\t\tif (enc3 != 64) {\r\n\t\t\t\t\toutput = output + String.fromCharCode(chr2);\r\n\t\t\t\t}\r\n\t\t\t\tif (enc4 != 64) {\r\n\t\t\t\t\toutput = output + String.fromCharCode(chr3);\r\n\t\t\t\t}\r\n\t\t\t} while (i < input.length);\r\n\r\n\t\t\treturn output;\r\n\t\t}\r\n\t};\r\n\r\n\treturn obj;\r\n})();\r\n\r\nvar emptyFn = function() {};\r\n\r\nvar tempIndex = 0;\r\nEASEMOB_IM_CONNCTION_USER_NOT_ASSIGN_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_OPEN_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_AUTH_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_ATTACH_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_ATTACH_USERGRID_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_REOPEN_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_SERVER_CLOSE_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_SERVER_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_IQ_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_PING_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_GETROSTER_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_CROSSDOMAIN_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_LISTENING_OUTOF_MAXRETRIES = tempIndex++;\r\nEASEMOB_IM_CONNCTION_RECEIVEMSG_CONTENTERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_JOINROOM_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_GETROOM_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_GETROOMINFO_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_GETROOMMEMBER_ERROR = tempIndex++;\r\nEASEMOB_IM_CONNCTION_GETROOMOCCUPANTS_ERROR = tempIndex++;\r\n\r\nEASEMOB_IM_UPLOADFILE_BROWSER_ERROR = tempIndex++;\r\nEASEMOB_IM_UPLOADFILE_ERROR = tempIndex++;\r\nEASEMOB_IM_UPLOADFILE_NO_LOGIN = tempIndex++;\r\nEASEMOB_IM_UPLOADFILE_NO_FILE = tempIndex++;\r\nEASEMOB_IM_DOWNLOADFILE_ERROR = tempIndex++;\r\nEASEMOB_IM_DOWNLOADFILE_NO_LOGIN = tempIndex++;\r\nEASEMOB_IM_DOWNLOADFILE_BROWSER_ERROR = tempIndex++;\r\n\r\nEASEMOB_IM_RESISTERUSER_ERROR = tempIndex++;\r\n\r\ntempIndex = 0;\r\nEASEMOB_IM_MESSAGE_REC_TEXT = tempIndex++;\r\nEASEMOB_IM_MESSAGE_REC_EMOTION = tempIndex++;\r\nEASEMOB_IM_MESSAGE_REC_PHOTO = tempIndex++;\r\nEASEMOB_IM_MESSAGE_REC_AUDIO = tempIndex++;\r\nEASEMOB_IM_MESSAGE_REC_AUDIO_FILE = tempIndex++;\r\nEASEMOB_IM_MESSAGE_REC_VEDIO = tempIndex++;\r\nEASEMOB_IM_MESSAGE_REC_VEDIO_FILE = tempIndex++;\r\nEASEMOB_IM_MESSAGE_REC_FILE = tempIndex++;\r\n\r\nEASEMOB_IM_MESSAGE_SED_TEXT = tempIndex++;\r\nEASEMOB_IM_MESSAGE_SED_EMOTION = tempIndex++;\r\nEASEMOB_IM_MESSAGE_SED_PHOTO = tempIndex++;\r\nEASEMOB_IM_MESSAGE_SED_AUDIO = tempIndex++;\r\nEASEMOB_IM_MESSAGE_SED_AUDIO_FILE = tempIndex++;\r\nEASEMOB_IM_MESSAGE_SED_VEDIO = tempIndex++;\r\nEASEMOB_IM_MESSAGE_SED_VEDIO_FILE = tempIndex++;\r\nEASEMOB_IM_MESSAGE_SED_FILE = tempIndex++;\r\n\r\nvar emotionPicData = {\r\n\t\t\"[):]\":\"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==\",\r\n\t\t\"[: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=\",\r\n\t\t\"[;)]\":\"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\",\r\n\t\t\"[:-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==\",\r\n\t\t\"[: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=\",\r\n\t\t\"[(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=\",\r\n\t\t\"[:@]\":\"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\",\r\n\t\t\"[: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\",\r\n\t\t\"[:$]\":\"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\",\r\n\t\t\"[:(]\":\"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=\",\r\n\t\t\"[:'(]\":\"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==\",\r\n\t\t\"[:|]\":\"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\",\r\n\t\t\"[(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==\",\r\n\t\t\"[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==\",\r\n\t\t\"[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==\",\r\n\t\t\"[+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\",\r\n\t\t\"[<o)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAG/0lEQVRYw72XbWyT1xXHf9fvTpzYOCEhbkISDCWEN/MaXjIR1EobbZnQPm37ULJ9mIY2bZGGNKmaVFeatA9DU4S0SptazdCq00ZLmbYV7YXWrIIRAiUhNE1hgJMQQjBqbMdx7Ofl3n2wHUwTAkztni9X99znOf//+d/znHuPADgU7tkPdAMngO6D4bZ+/k+PrTA2AT6gE+g8FO6JAREgcjDcNvxlEhAFBV4Gwt7FZWRSOfScWfpOX1Gdg+G25JelAADLmvrZtvEYIze8DI79mJuDBkCooAaHwj0nCkSOfNEK7AciWzb9g41briGFD5ceJea+wGsfXOPpCZNkPFP6XaKQL5GD4bbTX4QCMYDP4g5cehTD2kTW3oGgn5tVFVS3+GkSNjxjWYavxMmktM/nSzF5nzhfLKWTnObBohJo1hAOsw+3vYrwhiAfT6ah3MbEMjdf2x5it3c1QXstNt1aTOAuIPb6r/70QWqwvfF/JmBYmvisvBubjKFZQxjWJmLpGQB64ylqXA7UACzaVs7a8Uaev72JNlZQV+HLOxNmh5Iylri843eT/dsbn3gLpMWHYXWTKAtzc3I5b7zbS6C6nFf2tM5+IJeBGgBqgctQZ13EeHISLFC/4i62xVVo9xKdUtP33ftoW1f1xnNHHqlAce8m4w7uajs4+No0v36nn1MXRtjaumT2ZcdEH2VPRVHpQgZvh8TANCOWewCEtlzC5q2gLNiAvcrnU1JG7p7fuv+xt0DPmUxlNF7cs4qWxkVUlDk4evITjp4cpPJCN4EjG/C/30X5niiW70Fq3TRnNgwBsLX9HJXeqVlfzho/rkANUqrI+NnN+x+LAIDsGaE2rfHinlaO/2IvAM9sXop0+jAqG9FqQmSXdpDMTPNh7xB6zmTZiuu0tffMce7wV1LWUIOSKjL24ab1jypEfUDo6hsfYTElm3/5AhXNfgCmMhrptZ2k13bimOgjdiXO5fdH0HMm1TVxnn3+7w84nU7q9P51nPhoBrvTQrBZUbtEdQO7F1IgAWCWue7LeGGUrjUBzg/e4fzgHaaTOaJny7h48iZ6zqRl7SDf+PbbOF3aA07PHL9FfDRD/coOHK5ahoYgfpeO2KnQrgVLMcCS3UEW+Z1UNPvxvfQeNVfjNPywnUuVXk798wp6zsThzNHWfo7Qlr45ksYGkiTv5tj29TDB0F607BTv/eZbDA/fxueVncDphxGIAdR1BFm8tBKA0WmT623LuX5bJ3dvDIBA/SjPPvc3Kr1TKClAFOo5gBCMXZui3FtHMJTPn2v9/fjr2xn9+Bi6pvYB31mQwIWTN7A7bfna/5VVs4uBwDBb2s7wVMMoCIHSC8hCoIRAiDwNPWtS7gsAEH3nLV796Q+oqnXR/tUA6TS+q39Z0/j0C1eG5xDwesZjmayXTAogv6dV/jsE6mKsW3ueispkHkwTBdA8uBB5IkoU7FIhCpkVPf4WAGWePIzbY0PKXBMwl8DenT9vsthtCHc1mu6mwpOAglMEDwGeS6Su0cXA2YukE7dn1VsarMDusOD2wMykmj8JpVQxDIlLpLE7p5E6syAIUAhEAawoO4I5ROrqHQw5BP/6w09Yt20VHvd/qF7iJrjOgzRSKPkwAqaKKWmidOM+CMxGlp+Xgs5nE7icsGazh4Heaxj6VeqWltOw3EXL+nJunh1/eCFSUsVMJZGagbAUIof7CVaMfl5bXoGirb7RRm3AS2rSxO604PXb0aZmkFKx/ptXT89biBo6Lg0rU8W0rI7UDZRuoIy8Ivm5uYDNmGOzCYnfL6jwgNIN0vEppCmjCxYiaaqIljXCNqwlEd2PmnlspXmxkGKJ8RRKqsiCBJRS3Zouu+xC+WzWB2UtoC9I7NbFGdJxg+XPVGJzFWuDYCoxg5bVE0KIEwAtHF4P+Ib40WnxeUaf/nl1/oruyjsVMPsnFEkwDzEE9L+dInnLwOYULN/toXaNC9NQ3LoxiWnKrt++czjWe2o0nJsxQgW4TjHfEfnJiVWXLBCqdIGlECmzY+G/n4fY9D2T/nfTmIWz6eLEZoZnVrJk8Uji9L93dmtZM6xlH+g5TsxLYPD4Kq+UKmoVKlTpBKulpOCXgs9DzMwpxgZ0Jj7V+dmbB8jqroUuRN3iYSsDf1zplVJFBSpUbocyR8nB8whVJpM6yZTO2Jiv76WXvxspafuaSo//5lZ/h1iIXt/vV3iVVGGl6LKgcNnAZRc47UXZ749ZTZHJSqamDaSpAMI7vj/yStFXC4d3AVGA5lZ/onm1v+PVY8/1i8e5Ol88GmwsENmnlPIpBSiF1QK6oUCBUgoFCRQRoHvngZE5Tcqe1jfXL6px+zZ21PcV+0zxpJ1Mz+vNu5RUIaWULw8MSqkE0LfzwMgTt2n/BY1eJaFdbLZnAAAAAElFTkSuQmCC\",\r\n\t\t\"[|-)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAF2klEQVRYw8WXW2xc1RWGv3PmzC32eJzxbZTYzpAEUpE0DE0LCbZqq0goD4WYV4QahISqSFUVnlqpD50+tRIvrvpStZU6VqU+wENTpReEVGEVaICQ1LEhcYA68cSALwwez+3M5Zy9+jBnLsf2GOJG6pb26Mzea63/X2uvvfbe8H9u2t0I526MHgDGnR5rTAhI7WdahJnwsbf+fE8J5G6MjgEJB7iGKaAH/SCgqhZSrSJSn5MMwgUREpH4pcVdE3A8TtaB9c4O9D1BtEAAzaNvkVelCrZpYmXy2KVyLTIiid4T7/zsrgnkboyeQUgKdHv2hvF0hbYFbdesgklldR2rUESEGYTx/kfe3fhKBLLXR84CSc3nw+jrQff7dp1klS+ymJ+uoSyVQRiPnrp8bUcCG++PnAG5oPl8+PZH78rrttEolsl9dAdl2TMI4/tGrzQi4bKemXvsgChJ4r134ADGHj+h+wdB0+NKSbJ1zoWglCRF07r9gwP3DLxJIkDHUD9KyUTq9YfPNsbrH+l/nxwTJeO+gQgv/2iGO7PrbY09/oMjPPzUkGvsvX8s85ufzFLMWdvqnPjOAC/+6gRmOkspnUsAUy4CouS8HvDh7Q5x858rLM1m2hKIPzlIY9M7rZittgUHKGSriFKEDvRjrmVjC68dP3vwidkpDWD18iNhIBPc14e3u7NR3do2B3xbEdnysWUufT1FeaN44dDpuacNx/sJAE/Qj1TtNoqya8DNA4G9nZjrhYnGEiglcSPoByWIskGEtWVtkxVpEPH6IBxx7+BiXqOYbz0cWvQQwnt1vE458Qb9KFu4efHoWD0CcTQdVW2u4RuvGo4RBVLvNqDoHYDR036Xh4sfepif1d3yODqiGH3CS29UBxE8OogSBLrrEUDTNcSyWxz20D/0IANDR3nll79wPFEMH44gfT5nqZoMxFm5+fduNSLw4KMjxI4cYmHu72Q+h0iPp3XLA8T1mrKgLIVULcSqdcRmb1+M4yPPUDLDzF9dYv7qp3h9GihHtmo3OqrmbermCvNX7jB/dYnjo88y+MApEEVXSCFWU1736ChbGjmA2DWBegsGbZY+eotvPv4CL118gw/eeZP8+i0+vvJbgkG3LECoExAv3/vxD4ne92369g/TPzjMpYs/B7EJ+jXEakasWrZAnEqolGQqxXKNodOHhioUMp9x6S8vUSnl6Y12kF56HUQxNARi2y75aF8Fw7BJf3aZ3mgn/YPDzL/7CguzfyPSIwT8yiWvbEEpmdYAFl47/lNd1xPh/lCTYRXevuQlu9GaiDaxg3D0mL7tdlte0bl2zcCqNpPQMGxOntLp6mqKl4sVVhYzADEN4D+vfv0hEWbCPR14DLfxpSUN06wVn0hE6OnR2lcpgaKp8cknGohgeIXB/YLX66pfrK8WyK6bt7/x7Mf3GQCHTs9d+/Cvx26b+XKsI+Rz2d8f3YRh7VB4gKAPDsc267grZyFbQpRc2HwWJM1CJREMeNC0LynFLdVx5/mtf/K5CpWyjQaTmwlMisj57Hqpu6vLu0M5hcUPSlx/03SNRfYZPPrdzh1LtVLC56tFREnyW8/fWnTdB7525vqGUpIolSzMQrWZsba9JeNTcyWWFyqunnq/5JLZom8rVleK2FWVESHR9ko29/KRPwlM9HQZGIbWNgrLt6ruCEQ9+IJa21VZS5fJ5y2A506+cHtqy4Wk5aR9TkSm05lKPLTHwx6/vm1Yo8OeTcwEbNk2Tda+qJDPWwhMPvb9xakvvRXP/PH+sIhMixDvCOiEghq6prXPtDZem2VFOlOlXFEgTI6cS734ld8FV/9wOCwiCRHOa5rQGdDp8Gt4dI0dMxQolRW5oiJXsAEywPmRc6mpXT3NLv/+4JiITCLEBfB6wO/VMHTwGU0KpbJg2YJZVrQcE0kgMXIutfg/P07f/l1sjFp+TCB0S/2WtDUIM8A0MLkT8K5ex/X2r18PPyRCt/NCjjmgGWBm5Fxq425s/Re+T1rMc2fv6QAAAABJRU5ErkJggg==\",\r\n\t\t\"[*-)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFdElEQVRYw82XS2xc5RXHf/fO0/O6M3Ycx4kTOygPQmMyQQZCEimDYJGyYSQkJJBaGYmqZNddlxn2XXTbqgIvKkBiM1UXLVQIU6UphBCNycM0hMR2nBi/4nl4xnfm3vsdFhmP547HiZ1mwd3cuZ/+95zfOd+Z852r8X9cpfGTR4B4/TEfPXRubKs2tEdwOAykgCQCAlD/IQAiORFGgZH44PmxxwJQGj95CsgAKRHQvB40rxctGHDpnIqJsiykZtdhGBWRTNfRL794JIDS+ElDhBGQNLqOJxJGj0bQA/4HAiuzilVYxsqXENsByIow3D30VWHTAMWrJ/oFsghJTzyKNxFH8+hb2l9xHKpzS1QX8oiQQxjuef7C2EMB8peP9wM5TdfjtaDBd7kKlYIFwMCgwcCgsaHTcsHi6rkFl75vr4/lWzOI7eRFSPUevzi2IcDSt8cNkFFN15N2bBuffXAHq6pcmv1DCZIv9bR1/q/3b7XVH37BoHh9GrGdnEBq18lvCgDrcipKMqIkGejbwfjXRayqYupGiev/6+XlX/8JXyDC9xeXmJuqrAO4em5hQ/29BUXsQB+i60lRMrL6jgtg8dKxU0rJ73zdXdh4mbxSoHCvyqXz81z76j8szJq88GoGgInL7nqqmc5D9d5QkFBvF8qR9NTnR0+tA1BKMprHg7/LID9XBWDm9lqkoajB7idfBGjscaNuNqkP9Xbi6QiglMq4AOYuPNcvSlL+7oTLcCSxj1A0xivD77D3qUEAEj0HNizCzegju7ehHEnd/PTpI96m6NOaR8ffGXOJf/mr1/j9X37rLtTZ63TvDrUF2Iw+2BVD9/twzFpabyq+tDcWboji2+93uZu5v7uM/VB/jve4u+BW9X4jhFKS0psykPQ0tVZ/0EP/YYNyYYb//u0sNbPE7MRFvvnkD/W/Vqfb4EP1CRBBRBAlBGIhlCOpRh+Y/vczYjy5B38s5Krs0Q+nKNQLbPV69pXets1oI/3Q6R4GfhFDpHFiYS6Vmc1N0FwDrJ5tzVGl3tjD9xeXmJ+q4Avq7B/qZPueUMNQ/QYIPp/Gqdf77uunK/j8OvuPGnT3daAsu6FDBLEdlJK1Tjj5WVISh/sJGOGWzrTeEUIjnfc1m1hredcsVJi5Mt2SAaGtAZD6rWlNVqEeDUjZDuLIGoAoydeKlbgvHGhxVI//Ic63BCRQLa6glOSbMzBq3ltOh7ZFmyKvZ+QxATWvmSUTUZJzA+TLace00HWtvXPgxj/nmPxiEXvl/okX3RkgmPCx/XCEnc/E2oM3100doLxYQSnJNm9B1nbsP1bmi4S7Im2diwjF2ysN5wClu1VKd6vMX11m7nKJI2/2uGuG1sxBabGCbTmgaVnXPDCePfS+x+cd7jm4A03X2myFOxoAa8Vh/lqZ6/9YxDaF/acT7DkWfSDA1Pgcds0ZGRq++ZbXPQuQsUxrOH9niXivsQkAweOFHYMdhLu3c2u0QKTbi7Id17vNAEuzZWqmjaZpmbYT0eWPD55FyHTuihOOd2wAsPb7QZG2rhfzJnN3iiBknn974t0NZ8Kxjw58jkiqc6dBJB5s6g/rDUtrVpoBmtZXyhYz0yWUI7ljv5k4uurL23aaFUmLktGF2/mkU4sQSwTXO3pAXbSu5++ZLMxWEMhpGqlNjeWX/rrPEJEsQirQ4aOzO4Q/oG8JwLYcZn+ssFKxERjV0NLH35ksbOnL6OuRJ84iZESEYIeXSNRPOOxF17W2AI4SyssWy8sW5WV71UzmxJmpdx/50+zCe3v7RSQjwvBqPfj9HnR97QAVEZQSqu6RfKTufPKxfJx++ecBQ0TSIqQFSSIMtEgmgByQBbInzkwV+LlfPwH8Jg9a3haDYQAAAABJRU5ErkJggg==\",\r\n\t\t\"[:-#]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAG3ElEQVRYw8WXW2wU5xXHf7Mzszd7L76s7bUNtiEY0hQwBQQNCJaHhjRthSMFVZUi1X2plJeGqigvfSi89SWSqfJWqdBUTdJIUZGiPKAqjSM1irnFNhBjsChrGwdfMN71eq8z850+7HrttQ0BEamj/Vb6zpzvnP8535lzgf/zoz3tgdTNgyEgBnSVSDEgjhAXJIHQF3zhi6HvHEDq5sFfAt2lBYAIgCz9QKREIy4i5xF6a3Z+OfZMAFI3Dx4Gepcs1vw+XH4fmmHg8nnLfGLZKMtGZXPYqTQqly+CEXqBU3U/6E8+NYDUzYN/AE6habhCQfRgAE13PZHHnHSW/Ow89mIWkLgI3Q17Lw09MYCF4QNngR6X348RqXtixasfa2GRzMQMYjsJEWJN+y8PfSuA5I0DZ0F6jPpajHDwmSNdHIfU6D3sTD4hQqz5wJWhRwJIXH/xTaDXbKzHCFaX6fHrSSZHU0Q2+GnfHsLt1ddVNjOeYfTKQ6ycYsueGlo6AwAo22Hh9gR2Op8QkfbWQ18l1wCYH/phGxDXg9V4opEy/dIn9xm7sRxDoQYPL/2qY13ln78/XkHb+0qU9u2hYlzkLeZv3EVZzvkNsYFXASouVpScQtdxN9RWCB27kWTTzp9y/K0+tu77BcmZPLcvP1wDYPDTaUxPNcd+8zHH3+qjprGTwU+nKeQcAHSPib+5HqWke+zfXYcrADz4an+bEukx62vQdL3C9aanmt1HT+L2Bthz9CQ1jZ18M7pYoTydtEjO5Nl99CTV4Wbc3gDbD/8aK6+YHc8UE4UIvqYaXKaBcuREBQBRcgLdwAwHKgRnkhaN7Xtwe5fprdtizE5k1gAAqGnqLNM2bDtSjKvpLOI4KNtBLJuqaC2ipPvOhR2hMgClJGYE/OsGVlU4SnohyWcfvcfd4eurQlwQkaW0iFVQfPinP/LZR++t+AoUqmAjpeWu9qKUII50GwBT/XtDoqRLr/KtUW56XczEr/Lxu30MX/wCgNd/+yr+oIHYTlm5oRcBvPO744wMTBaDeupWMWhrDMSyK8Cafg/5VC7mKrm/SylB93oqrBIlRFp9zE/fZiZ+tSTMzeLcEJEWL8qykdIKhXX8AZ1oC5hm0bH/HfgHAHURo5yql/h100CUtBsl94OAy9BXWFUE0ra1itEr8+w70siDqRz1TV5Mt8a23UGksNIq2L4/SCblcORnLQD4q0227qxC1xxUoVS9lvgRlBKMkgeK7yx7+T5LAHSXsP/lOq79J4Hp1vFX6+x7qRafdy1/U7PJrhcDjAylAdi4yUPnC56S+5fKZ0mX7RTjbqUHVMmiZaTFQ8Ggi4M/rinvEUEKVsW+eHNCa5tB68bQ8jVaTqlkl8r20nlHIUr6KjxgZ3Lohr7GC+vvly1aKbjMwwqelcpLMeYUnBVXIAyKEqzFHFqVZ+2h1cpZT/BKhVR8mmtAi5DPWoiSwXItuHNhx4Av6OuqqqteXznr01YLLrJVgl4NMu+Embxv4pLFHmNFJuzLJLNd/qDvKSxdjpNHWQqQcZpI2R3cnQkyMeNmNuHCsiw6Ojp6yh4Y/eT7bSISD9RW4fWbZcGj/0qyOG2tyn7lvwpaKRRJ6UGuB35ER9Qhmatn+kGaubk5gsEgrdEwkWCWWxM6oVBouRZs+cmNMaXk3MJcGqdgI7ZN6ps89y6nKWQjGNW7GImbjMRNjMAuLl7LMjLmJi3PcfFalvvJCFPJCF8OK4arX8Hrr2PgluJhssCWaB11dXXs3+7j5Y1n2az9jVCoWKJXlWNOObZKJB+kEcvBShctb4u9xqHTH3DB3swFezOHTn/A24NZLtibqX3t97w9mGVy2zEmtx3jWmg3ZtVyF+X1esnPTxX7AVuRSFooJeeW3lcAeL57eEyUnMhmbFLJHOKoYqWbvcfs1/00aos0aovMft1PZ1inUVukcO8mnWEd38IkvoVJcvfvPLo/tAXHUXGEE4/tCa9/uPWsiPS4XS5G/pnDKTxdD3i3NYZq/h5TU1MYhkEkHGBuIc2O56M0e0d7Yj9/569nzpyRx3bFQ+9vOStCj8qBV2mUm2KpiLg1gwmArRlcTuykNaJTcDUxnqhhNgFTU1MEg0EaGhoSMzMz4Wg0+vi5YODvz70pil5NgyqPht+joWsrAciaj2HpyRUUiUVFtiAgMlgIHDqVq3u9fWJiIpZKpWL5fD7c0tJy/lsno6vvbt4pIr0ixBDwmmDq4DE1EPC6NWxHsB2wHSFvCZm8wrYFERJA74E3xk8/82x46S+bDoP0iJKesvHlBLQ8Jy7NhsC5kvLkdzodA/T/uf2wiHSJEF5OvcXGGBg88Mb42JPK+h8bsFb7XCl2sQAAAABJRU5ErkJggg==\",\r\n\t\t\"[:-*]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAG2klEQVRYw62XS2wdZxXHfzN37vvp2E7sPF3nge2kOMEpapNUvrShkdwGYQKbbuKCREAsSARbqFkiujBIqKibOmIRCYRSVBQBotQJEakLMXFIbJOWxIljO8a+9X2/Zr7vsLjXThycxjY5q9GM5vv95/zPOd83BiuI1LWD7SISEy1xreWKaEnWdQye5wmE8agHmdFDURHpFaFHMGKGZSFKo7WgbQdlq6Qo/Y4IvY0H/n77iQrIjBw6LkifGQzGzFAQw+VClEYchShVEVKysbMFSrki2tG9WzqHfvREBKRHDr5ueDy9Vt06DMuqQpfCxVGgNKIUuuyQT+WxS05/04tXXvu/BKSvHzxueNz97o0bQGDyRoaPhpLUNXpo2RdaAk8mytwcK4IIO3e5EbtIqWj3bT9y9dSaBKSuHYxiGuOezY0xwzSZvJHh0rv3qNmwi/mZGzS3BdizPwhKk0vbnP99Bm+gAYBSbprOuEUhW8SxVXzXK9dXXKDmwoXW0uuKhGOGaSKOYnhgjqc7v0nXiTN0vPQ9bo7ksQsVGyZulvAGGug6cYauE2cwXCGmJhR+nwutpHc1GTAfSEaPKxxa9DyfcWhuPwpAy7OvApBMlBGlScw4NO89iscXxuML07z3KOm0YBlgGsSv/6Zl20oFWACJoWfbDa8nhsh9n4FQbCPXBy8yMniRYLQRVApRIAgAuXSKc/1v4nXfxbIr77pNKCmJA6dXLEBraXJV+3yh2t0eg4mx9/nJt3oQneelY1uxXH5QGr/fIJec4lz/m/z6Zz8m/somPrfPDVrjMirrrSoDWum9D7dawxYvl37bSyTm0NK+gUjUJBI2EK3ZvNFgcPB3FMub2LO/lug6LxvrbURpEI1WenVdMH1p/3FvLNzviQYXs2AXFB+eT5P4j4M/YNDxeS+RMIsCx28pxm6A5RJ2NilqYg62EpZhXwEGgL627tHbywqYvNjRaQW8A4H62JIhI0pXvkppRN+/R/W+dhTZvEPJrtSEJ+TDF/VjmCZUR3YxU8Au2Au8PqC3rXs09T9z4O6FDolsqftUeHa6zEd/zpK6a+OpcbH1RT9uryLUWEOsqR7LXR3ZSpFP2eRSNrV1LpximeRUkmK2tJCRnrbu0eElAsbf2/t2sDbU4/F7Hvnlg28lKKY1Dc/twN+coVgQHGXQ+vwGgmFrEX5nLMfQhSQA/qDJgS+E8Psgn8yTmssiWpJAU1v3aGpxDoiWvlwii7bVsvDk7RLFtGZX9zeI7YaxqxlShU6UCvCvDxJLvnzoQpI7H2fw17yA4wS4MphDtMYf9FBTHwKIAe8sGURPfXF42C45fZm5zPKe64rPYt0iPZ/i3K/ukcmuo+X5HzI7WSSfKoPSTN0qkM/a/OOvsyippePI90nMKuxiZS232yQY9gDER862HjcfrMidXddO5dPF/vmZDNp2lhRcsKbiluNcZnqiSKlYKfeG5jiOLeSSZURVQKlPygAEwlG2tMQre828QnRlvWDAwjQNgJPmw23R8qWR1wq5Ut/M3TT5TAlVtcRyC61dPlx+A18gwjOHu+jq+XZVFNX21SBCIBLlmcNdxI+9en9hvZDJyno+rwmw11xuOOz+ytgp5ej4/FxhYGoyy+xsgVSqjFUjoDU19V5O/vQXBCNRbl19F6XAH6gMKcuCug0+vttXeT4xNgBAOCSL8IWR/alHsoUY+uWObVrLl0VLzBuw4i63K57IRXB5t7O++WWGB94iGCxw4HAElKZcVLx3LkNDc5zNn4lz+Q9vsL42x9O7ud9dulJTiYx6vIAHY+Rs6+tAb2zHVoYvfkI2rfEFTJ57IYLbVd3ItGbiVpmRf5ZxHFhXA/vaDSxzKRwtJHK6shesNgIB4VBXLeLoxcJagKM0mzeZbGr0LPH8Ybjj6Pub0SpiAKCYyhOIBpbAZ0dyZKZLeCMmdds9WG4eCRetcZQAxuosqNow7w16Y3VPVca2nXO4/PY02XuL855QvUX71yK43LIsHC2ky+CIkTTX4EBfKVeilC4gSjM1lCF7z2Zr/BhHfv4XPtvzA7KzDh+/n30k3FaCIwZA35oEAMn5qSTadpgdy+MOhNn/nTcIrt/Mjpe/TrSplWJKLQvXWpN1DIDkmgRUt9Ie5WjmJpN4QwZ2PkM5lwagnEtjV6+Xg2dsE6k439PWPZoyWGOMnG09DvTnZhR3/lQmUL+JbfGvMvW3P5IaH6X5gIeNe9yL8JIj5JXxIPz0igbRY0R0Av3JfztNM5dttA2mGxr2uNna4Ua0YDtCSYGuoMar8POP/TldhYgo0AOcBB51GL1SPZKdXvHf8RrFbKuKWBAyDowvdxZciP8CJcyl2bO7IDYAAAAASUVORK5CYII=\",\r\n\t\t\"[^o)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAHHElEQVRYw+WXW2xcVxWGv3PmHM/NnvHEjhPHcTw0REmTJjZ1Y1KnbUyEioQqMYCqCqlIpkgphQcCDwjRh5qH5AGoGoSEVFQgogIhIoEB1TRQKhelShPX9dgJxbXjxHbieHybi2fGntvZi4czHo9jOylV39jSlvb1X/9ea+2114b/96L9L4tjQ+1+REJASIQg0AKCSHGBEBYII9ILdNe2Xkp8LARigw83idAFdK4I1F0VaLoOAivyVS6PyhVABAF+dupW9/CVpWogDnSdG4sP3pPAk7urm4CzwMlzY/HBhYEjLwBdAI5KD0aVF6PKg+ZwbEhWLIuhN27yy9MjROcL5VNxIHhuLL5GK/oGGC1ABxD+3Qt7BkSkS3e78OxuxN24ndsRYT6S3VD43NQSZ06G+fF33yc6X+DRLzTw4m8P0PZoFUA1cPJDmeCbR7d+ey6SPwPQ0l7Ncy8exuszmRhe5FTnOzTt8/H82SPr9p048neWkgVqd7h59tQh7m+rAWB5JkbPKyO0tleFvV69Y+dj7yXuSmC2r21g6ma+5RcvRZi/vYynyqD1+Db635xhKVng+V9/ugReXl7+wSBbGzx87qtBvD5zzVxmLsHi9WlAehuPDXxmUwIzl9peAjnpDdaT05z88eejnH91HABPlcHT39/PY6GdH+nKLc/GSYxNg0hX0/HwD9cRiLxzuBkIu7Zvwb199YSj/VEG/zVH0z4fex4MUL3NdVdB6USe8Su2lr1+k+BBf2lu8UaE9NQCQDD42cEJY40HK+nSK4w1wi+/Ns3EVRtsfCjB+FCCw5+vXwNaXqZGkvT1TJPPqtLYyLtROr6yiwqXg8rGraSnY6iC1QV8rXQLbr/d2iQiIVeZ8H9fmGfiagLTU4uz9jjDgzHyOYu+nmlmJ5dWgg+IgAi5jFUSvm1fiJzeSiKaJTGbpe+1aUQpNE2jsrEWUdI59vpBv756ekJoOq4aXwlw9N0ouulh/+On+fPLv2d4MMaVvgXbLH1RxFKIKlZLMXp5gXxWUb//S/gbjtFz9hwXzk+zlMpz+1qKdDSLWAp3jQ+lQCnpLBFQSkKmz2uDWorZ8RT5rCLQ8BDeqi1k0ikAJsdSJUCxLKRgIYXinpu2Vpqav0hmMQ5APq8Y+49twqnRJGJZaICr2oso6SjTgHQYHmeRgIVYUnSietxuN+1PfLksfHntPUXB9noLBCpr7sMfqKP5aAe79h4AIBHN2WSWLShYYFkYbhOlaDHKCKAbDqRgFfu2ExmGgdPp5MSpn/LEM9/CFwgw9OZpZif6baErfoDtC5nkDG63G9M0+dFf3mK47yJuT5aL3d9DlCCWjVvhdSFKgjrAjTeajykRW53FE3k89g2NR65imiamaXLfgUMEttYQi3yAp9IBBVU6kVgWpqlRyKVZik1gGAa6rnPgyCNEpwcA8AccRZPZ60WJ/RaIkmItqrOgcHt0ausriE4NMjX8DxwOB7qu03/+J+SzKXbtcRdVb5uBgkX9LicA4X+eoZBLo2ka0cgHXA//FaNCo6bOKK0XS6GU2IHo+vlDfiUS3xKso8LrLGl1fjrH23+LAlDX1Eo+kyQ2M4Jhajz+ZC1mhbaq/mK58HqMhZk8Xn893uodzE70A/Cp9koad7tKJsskM8yMzKxGwtGeB8S/I4C72luyJ8D0ZJYrfSmW07btaraZPPCQF3/AuPMhBoF8Thi4mCRyK2/7kKmx96Cb3ftcNtci4cW5JLFbsXi5E4ZzS7kWV+XaMLu9wWT7jgCJWAHT1PBU6nbssRRrPdBuGg44/Egl+ZwiEbOorTOKeYJag5tNZVFKwsZqHKB3ObHUUlVbeYda7Y7Pp60HErlj1WrDcAg1tbp9mzbAS8eWECXd5XHgbCFbYDm+VIps5U62OlY2VzbGSlX2rVjpr91r4yXn0lh5hQirBO4PvT+oFL2phXQZUBnIBkAbE1N3IWa3o5FFlEjvg09fW/8aZlLZ3uR8isqAe52Jy51t3ZTIBgniugaxmTS5TIGVPHNdQjL0h71/0jUttHWnD9NplO2XTcDLOrIR39WRXKbAzWtRgDNtz9z4DoCxnrV0WpYKz0zGg3UNRRJ3nG64J0HkambThKTlqWqqGyvWEMtmCkxNJBAhrBVPv2FWfOipkYQIIaug4pGbCTKpLMW3s2RXZ5W+qXCHU1uNqMX1yUSGWzfiWHkVF5FQ29dvJO75MXnv1U82C9KNEKzyO6kOuNB1bUMbyCbmUEqIzi8Tj2YAwhpa6MiJ8YkP/TPq/81uvyg5KxDSNY3KKhOf34lhaJs4nC08m7VYTORILuaw7Ge9W4POh5+dSHykr9nlX33iGMIZgRZEMAydigqdCqejzPGEbNYim7Eo5NWKHno16Gr/xuRbH8vn9NIrwWYROkWkA2iRsjygTAFhoBc4e/S5ycF7Yf4XB/xJUbaYD5UAAAAASUVORK5CYII=\",\r\n\t\t\"[8-)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAG4UlEQVRYw+WXW2xcRxnHf+fs2Yt3vbu241saO97gpE6aKt7WJHWahC4VNOUh1FQ8lQgMVATIAyBAQuoD5gEpPBFABYQQtdqqlVKpGIkUKgjaiATq3FgnjeMmmNiu40vi2169tzMfD8e73o3XCa36xkhH2pmd7/v/v+vMwP/70D7I5sXLj/sR6QF6RAgAQRBEVjYIEYEIImFgoL5rMPqREFgc2tsmQh/QWwDUXQ40XQeBAr7K5lDZPIhYa0I/0Ne459z4hyYw/6/uHwJ9ALZqN4bXg+F1o9lsFfeLaZKLJckuxMgnlhFhCaGvee/5n30gAvOXuv3Xr6YG/nhiLnR9OFVcP/DMJg7/4CE8PntFuQunZnj12DXmppYBqHLrhA7W8PTn6gaA3gf2XYjel8Dcxcf8oyPL4RePTQaXU4odu+vYsXsDF07NMPFenM0dXl7o715D4s8v3+TVn1zD7TXoerIJt8/OxVOzzE0ts2e/l+eeb4yISKjlE5eKJIxKBJSS8PDlZFCz6bzw0m527NkAwLNHt/Hmizd485c3+PvAJE9/cUs5gVfG2Nzh5Tu/6KJhk9uS+eY2ftz7DufOxHnqszXBunpjAPjkuh6YHdzzU5BvewIbyWrOiq4eH4nRtt23Zj0Zy1Xcn4zlmJtaprFOER2dBpG+ticjP1pDYOad3Z1AxNVcR1WzZfX18wsMn50jl1HYnTrbPl7Hzv316yZtNm1y/q1ppm4kAHD77Ox7dhM1TS4AYjdnSN6aBwgEPjU0rpdlsJI+zbCVgQ/97Ta5jKK26UFyGcXw2TnOnZxeFzz8+gRTNxLYndV4/BtJxXKEX59gaTYNQHVrA+g6SolVWQXhqbNdbcCv3S2NGG4X2bTJP35/C5vh4eBX+9kVOkJLR4jxd99mYTpOw2Y3Hr+dQsEDjAzOMzkSp6UjxKe/9Bt27v8yANOjF4jPZ2jb6UNDA10jvZAIfutw03F91Xp60HRcG3wgwtiVKLmMYnv3c9Q1dwBQ19xB18HvATB2eQkxFaJWPlMxdsVK7r3P9OFweQHY9cQRapse5M77yyQXMoipqNrgQylQSnr1kszvsfs8llJTkVzKAtDSESpzc3vwkJVY0SximkjeRPKWTCqWp7GtqwheGC3bLR3JRUtGA1w1HkRJqMQDEjLczhUCZjFmdc0dXB08U6HlUQQW00RMs/jX7ckJbk9OrBFZup2GvAmmiVFlRymCpQTQDVvRooZNVtZ+9zPb6fvCIb5/6ADJWJRsOr4iIEVgySskrwC4NXqVo6FOjoY6OfnSr1aS05Lx1RpFDzs8LkRJQAe4+dfOJ5SIBb5ikb/O6lH1DZbisWvvcu4vJxkZfA2AjQEX5FXRIjFN6jc6sBtp/LUOAE78/BjZdJzJkTAA/pqCgSvElVidUJSseMECR6C51Ym72sbmrV5SyTyjw1EWJs8wdXUQu0NjY6uzzO2I0P6Qm7npLI/ua+DK+XnQ7fzzD30ko9O0bnVh2AQxV7BMhVJiNaL/vL3Lr0SW6gKNODzOQoiJzuc486cF8lkpi+Uj+31s3lpF2Vm8Mi6difH+aLpszVdrY99TNdgdWjF/0vE0s9dnVzvhjbceFv8DtVTVeIoWAaQSJiNDSVIJhduj09ruor7Zvga4lMzEaJqZySy5rFDfZOdjHS7sDq20ZRC7E2dxcnHJKEnCSDaVDbqqXWVqq6o0HnmsmlJEMVXJVMo4ALQGHLQGHCWkVl1fGJlEBqUkYqz2AcLL0VTQW199l3WyBqc07mto3INY6SS5mEKUDJSWYX8+k2d5KVXsbFaZqdWOZ5Z+ZtkahU9ZVVGYl8ta+uJ3kpg5hQirBHb0DA8pRTgxnyxRVKKkgqLKxNQ9iFm/F2ZiKJHwo4f/PW7cfRqmE5lwfC5BdW1VRdffeW+ZK2/MVzwNAwe8bDng5R5xYXE2STadp3DPLCPw8OdHTl8+0TEQvZPscTht2J1Gifxqr6jZ7KhIzuXVLavXyZNsOs/8TBzg+J6v3Dxd+Uom0muaKjI7sRRo3OSzSJQoqW93UN/uWEOsOMoIrCZwJp3n1ngUESLaivXrXkojr23rFJGwpms1Dc3VuKqMu41ZU/vrWQ2QiGe5PZVAmbKERrD7+bHx+17LL72ytVOQAYSA1++kptaFrmtUqi1Zp2yVEhbmlllaSANENLSe7q+Njf/PD5OLL7f7RUm/QI+uaVR77fj8TgxDq3g8F8AzGZNYNEs8lsW0GtCABr17j4xHP9TT7NzvtjyBcFwgiAiGoeNw6DictpIoCJmMSSZtks+pgh/CGvQ9/vWJ0x/J43Twt4FOEXpFJAQEVx+lUuqACBAG+vd9Y2Lofjr/CyoYBYNTINAHAAAAAElFTkSuQmCC\",\r\n\t\t\"[(|)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAWlBMVEUAAADuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjvXj/ziG3zgWbxc1buUC/0ln34uaTuSSj2pIz2q5TuSSj1nYX3spzxbE70j3XvVzfyel7cxRSSAAAAHnRSTlMAL3+fv18PT6//799v/////////x///8////////+sIC8ZAAAA9ElEQVQ4y61TQYKDIAxMEcSktWrDttV2///NJaJoK3DauSUzJGQIAP+Ek6q0MvUaWtVoZXe0xhmkQnhewsvCG8L22vWSq+Q4RlThAA037pbUBRxtApxLavzh+5ohp3EPB+CwZ77GzOOD9xXBYMexwwEaQIngWRT4FmNBYHEYmaeMoJFLSo9XRiBeNXOJd5Incd8785srEbw3iE/mNn3FReGbJCZ9xOc12CYG2XhR9DwOeT4obgVeDJ3GqcADVNjeNzPO9XEvvWHx1emUWNx6two2vdr0aeAR5svA1DXCXmYFNa1PnIMtNgh/oNBA4LITxEm+4j9JsxdaKeGywAAAAABJRU5ErkJggg==\",\r\n\t\t\"[(u)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAtFBMVEUAAADuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjuSSjmvbvuSSjvVzf0j3XxbE7pinrmvbvzgWb4uaT1nYXrbVXmvbvmvbvwZUftUDHsWT3uSSj0ln3uUC/qg3HsZkzmvbvziG3yel7rdF/mvbvuSSjnrqjmvbvmvbvmvbv2q5TtVzrvXj/np5/mvbvxc1booJbmvbvmvbvooJb2pIzqe2juSSjpkYPmtbHqg3Ert3r1AAAAPHRSTlMADz8fX39vT8//3++PD7//////j///////r///b6//////3////78v/+9fz/////8v//9/n7///5///1+U7zcrAAABPUlEQVQ4y81T21LCMBDtLaXb2FIuwRWFAgpFpUVEpej//5dJk95oRsc3z0Nmzp4zu9nNxjD+L0zLspvcIYS4daTnAYfvVJxCgatAcgIKoal4P4oGIjAcCYsDFUKhWzBmE8mv8YaXp7UBRJVwwNhU0lvEuzBs6DAzDBvmjMWSLhCX0IaoMKkyDHE10xjuGXuQbI0bp2NIYMrKS8L20fBaumiDihr9so2npNkEuMUYeIpIBdaroOnwxaRMH6IqBSyeA1IbkmKSCY13bK5CKW7s1pikI6s6hT2+0AtdOA5sp6KvePQudekYl4a3ri4dssgW3zU63wnIPuLikngqdqOzZA5kBy6cEFP5ih3kqsKZn56pW1Rx+aVMkGg32aaih7N6AR1cnuAzVZuoRf6Fe57A/uHDHEc5kF/+lPe3P/gNbKkfpYJqqEsAAAAASUVORK5CYII=\",\r\n\t\t\"[(S)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACK1BMVEUAAABjZIRjZIRjZIRjZIRjZIRjZIRrbIt7fJpjZIRjZISDhKGrrMbLzOTj5fujpL9jZIRjZISLjKnT1Ozb3PNjZIRjZITDxN3S1Ozi5Puio7/g4vvf4fpyc5JjZIRzdJLh4/vd3/rNzutjZISztM7c3vra3Pq7vdza3PPZ2/rX2fq5u9yCg6He4PrV1/nU1vm2uNugob+nqs64u+C0tttwcZKJi6+Wl758faFjZISeoL/W2PnS1Pm/weZwdJiBharMzvjKzPjIyvjHyfjFx/ixs+Joaoudnr/R0/nP0fm2ueDJy/jDxffCxPfAwvenqdqbnb7T1fnNz/i5vOaFibDExve/wfe9v/e8vvaam77O0Pifos60tuW8vve6vPazte59fqHLzfjBw/e4uva3ufaCg65ub5nDxPDGyPiho9Oho9l3eKBmZ4qEhsKanMWxs+hoaYuIibWvsO6jpeBnaItxcp+Zm+x4ea1vcJK+wPe5u/anqeBqa5GGiMmbnfOTleWQkr22uPa0tvatr+6Aga5jZISDhLyCg7yBgruEhcKSk96anPN0daapq+CytPWxs/WvsfWtr/WipOaBg7V0daBzdaBzdKCeoO2govSeoPOdn/OFh8mlp+CytPausPWsrvWqrPWoqvSnqfSlp/SkpvSipPSfofOMjtdnaYuho9+pq/ScnvOLjcOmqPSWmOx7fLSUldiho/Rpa5Fqa5J9frSKjNCPkd6IitB3ea0J8x3fAAAAuXRSTlMALz8fb7/////vn///////z3////9PD/////////9f/////9////////////////////////////+P////////////////////////////////////////////////////////////////////////////////////////////////////r/////////////////////////////////////////////////////////////////////CFNf8AAAIBSURBVDjLY2AgDTAyMTEx45JkZmFlY2PnYGPjxC7NxcbNw8vHx88uwIJNXpBNSJiPj09EiFMUm7QYK7s4HwgICYhhlRfgEAHL83NilWfggspLsGM1n4GFnRckLSkpxYpVXoyTBywtLSMrh1WBoDxIWkFGUYkNuwuUVfhA0qpq6srYQ5dNAyytqaWN3QksOjK6IGk9fQNlQUFBzJjgMoRIGxmbmJqZW7BZoitgtdLUsta3sbWzd3B0cnZxdUNXweoOlPbw9LKz83Z28fH180f2i4AgUEFAoIdnkEOwXYhLqK9fWHgEGxNcnokNqMAy0jPKwdHbOToGJB0bF8/GCA9CZTZg0LEkOCQCDQ/1TQJJJ6ekCiDcnwYyjZEt3TkDJJ0Jks7K5mSEp4GcXHDiUs4L9QHqzmcrKMwqKi5RhkSImCBnaVk5FzikKpLCKmPjqqoL2EBAQI6F1ZKLla2mtq4e4l4x5QagdEpjU3MLW6scEwtrSVt7R2dXXXd3DzTsRdl6gdJ9/RMmTpo8Zeq0tukzZs4CSnfP5oSFu2XBnLn9E+bNX7Bw0eIlS2csA0t3L2dDJA+uFSuB0qug0qtB0t2zc5CTD1fJmlWL1iJJr1vPhpq85Dinbli6ESbdPXuTMhN6yuTi3Lxlaz1Qctv2HTnKgtgSr1yrMiQkuERxZ28xdJMBvF2JRlNcrBgAAAAASUVORK5CYII=\",\r\n\t\t\"[(*)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABwlBMVEUAAAC6iS+6iS+6iS+6iS+6iS+6iS+6iS+6iS+9jzHVuUG6iS+6iS/Rsj/18Ve6iS/p3E/5+FrZwES6iS/BljTdx0fx6lS6iS/491nRsT7l1Uz381bv4U7IoDbFnTf591n49Vj38FT27FH0503z4kry3kbx2kPw1kDv0j3uzjrtyjfsxjTMnzD27lP16k/05Uzz4Ejy3EXx2ELw1D/v0DzuzDntyDbsxDPMnjD38VX16E7z40rrwzHMni/39Fb271Pz4UjtyTbsxTPrwTDMnS66iS/t41H49lj27VHy30fuzzrtyzfsxzTqvy7MnC7s4E/161D05kzz4Uny3UXw1T/v0TzuzTnqvS3Roi3q10j05Evx20Tw10Hv0z7uzzvtyzjsxzXrwzLqvy/pvCzXpyy9jjDnzUHx2ULrwjDqvi3puyvdrCu6iS/pzT7syDXrxDLqwC/qvCzpuSrotyjiryfKoDPv0T3rwjHqvi7ouCnotSfnsyXnsSTKmCrhvTjtzDjSoy7Lmy3isSnntCbnsiTbpybHmTHYqy/Ajy68iy7QnSnkriS/ji3ctDPeszDDky/WoijAkC/lvDHGly/FkyzeqSYNOZEtAAAAlnRSTlMADy9vv9//P5///x/v//9f////z////3////////////////////////////////////////////////////////////9P//////////////////////////////////////////////////+P//////////////////////////////////////////////////////+XLHICAAABkklEQVQ4y5VT5V8CURCU42455AGeBSaI3Z2gWKjY3d3d7WEXigrG/+sDQY4Dj5/7cXdmbt7ebEjIf0tEBAGIySAACiSCcwkALQigpaEgE7KI5AqpkIQSwphwIYmISIZRCLggIIphGPnfEjQoMCDaR0Km4hSS4zmjjgFvC68OOBXrnMfFJ3g7LueJTmF3abRJuuSU1LT0jMys7Jyfj3ER6rjcvPyCwqLiktKy8gqPmV+ERlupq9K76YZqr1k3Ql1jzMuvddHr6hsauY8xocgmTXNlS5XejOmtbe2Gjk7ffRFI2mXs7untK+ofGMT0oWH+PjFiZNQ8Nj4xOTU9Mzs3779vAi0sLrnoyyura4H+xzpsYPrm1vbO7t5+AIAIHRzixx0dr56cnrEWJOIDVHB+gemXV9c3tyx7B0q/tN5j+sMjgPXpmWVZG+WXpZfy1zegTDISbHaWtfPTTTnePwC5dCUUfH49W2megAOQymNMjMBi8c0Vie+B0xDROAoqn3sheTkkSEDciwxwbyZKGezSnYf+Da0FSRY6a5opAAAAAElFTkSuQmCC\",\r\n\t\t\"[(#)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAtFBMVEUAAADtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCG6iS+6iS/BeyzGcivJbSrMaSq6iS/RqirgwCboyyXDeCztMCHNZynFmSzw1iP44iK6iS/03CLTXCi6iS+6iS/s0SS9gy7TXCjOZSnNpCrBfC3ZtSjPYinVrym6iS/BlC3NZym6iS/kxibQYSi9ji7ZUSbcuyfdSyXYUya6iS/PYynVWSftMCFeFPtwAAAAPHRSTlMAP28fX78v308P/6+fj+8fb8///9//////r3//////f///D+///x+f/2//3/9P/3/f/4/////Pny+/78+blAboAAABIElEQVQ4y7VTa1ODMBAEm+cBaX20aEqxKCpirdi0WuX//y+xQKAhM44zep+S281eNrlznN+G+/+EE2t2hPQSd1nSU0OaQYkuxvoaqJHmgAZnmtoeP6TBr/eBb97DE8gZT07PzifjSp5SbhK4gIvpLLwMZ9MrCmCxK+fRIv6ORTQHbPF6HS3jOpZRwob4zW0at5He3Q9w/hDFXWSPxw/pSgxJ3iPkicd4C7pIBhhMAgBQX7LODHpa9QirhErT6PO6R1i/WGwWocZfC9ufb1TrM1UbC87FVu0O+E5tBbe8NMBbobI8U8W7ADnAicDVtfcfyee+UguAmAXKumNY0w9uaRQJSNtRzTdx/4ghtWI50j3GbbjjdVlmnQD50+CwP5/NL6lmHHJczhNXAAAAAElFTkSuQmCC\",\r\n\t\t\"[(R)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABO1BMVEUAAADtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtMCHtOx/ydRj2rxH50Qz16wnw7gj76Qr3ug/zgBbuRx7tMCHtMCH0jBX33gvn8QbG8Qie7AyC4xKL5hC67wri9Ab1oxLtMCHwXhvl8waY6A9b1ho1ySJIzx7V8gfy7AgxyS4lyV8byYQhyWsuyTo+zCCh6w3q8AcVyZwFydkCyuYOybUoyVNu3BYYyZD0mBTE8ggFt9kTdq4ZWpshNYMbUJUVbKgJpM0LycERf7QDwN8RyajtMCEfPonxaRkuMoZCLotQK45XKpBJLIw1MIcIyc0NksD46glXKpBXKpBXKpA8L4kdR49l2RhXKpBTKo9XKpBXKpDw7giC4xI1ySIbyYQCyuYhNYNXKpBXKpAuMoYJpM3l8wb0jBX41gnuAAAAaXRSTlMAT4+/7/+fXx+vP3//////////////D8//////////////L////////////////////////////////////////////////9///////////////28/3////x//D6+/v7+/v7+/f7+/v79O3N4bAAABdklEQVQ4y+2Q51bCQBBGF5MJqIEQGx0LZRQ0NBcLZbGiYuy9IcH2/k/gEIpHj2+g99ecvTPf7C5jfw7HkCQDgKQ4Xb9Yl9KRfYZHfvpRANXt0by6ro+NT0xSzreUKR+o/kAwFI4Q0ekZ7+wkyI4vPydDTIsnkthjPrLg9QM4B/MyuFPTpNOLS4SRQczm8rPqoMNHPpfFTGGZdymuIK4Gx0Ge690vlsohGn3dYS2Nq/l18NnvA1UrZdGg43KlKkRtY5PKrTRGUzF7iQL+eNL226JHdYfzXcyWNKhTg6wGEpih/A0xYK/MuUFL9sHBHODOJ7HQnT9oHJpHx1TUOD9BDHlAYUPgCWF6mZfp+Ni0aVB52omIntEOCbQwLnJeoXnTPGfs4tK8EuKa8wLe6DFgdfBGcIlzun+j4xm7Ne8oosyLmIzvAwPQ7YY9IQ7Ne/tjHswDIeitiHE/MEl6fGo+t1qWZbXb3Z99ab9a1lur1Wy+f0jsH5tPJc9K5e3l4mIAAAAASUVORK5CYII=\",\r\n\t\t\"[({)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAJK0lEQVRYCc1Wa4xV1Rld+5xz79wH8+DO686dgRlgGBAoUNFSoNKgqFDUSGVsSwqpIaGxRtum1tY0TS5NGpKKaZTaVCk/xBgaB0qjNWkVCkXHlsIYgYHhMYMjDDDceT/u85x9dtc+M1eG+KA//NGd7Hv2Pfvba337+9b+9gH+x6YA8VojzJuZaxttezO7/PxNDTVYUyOMh5sg84uObX7RF0OLb7jb8RwqilryChbZt730fTtvox1pbIJLAkJ8dvtcB1QchojDHVveGGxZe/Ku6uCZlbAwzwygivEo9OYkRmQGV+Gg9XJ69v5F+750AGhK67kbMcaQJv5+pgOKOxDjuz7/7foNJYXtj1mlWFwy+xYgthQoqQWCRWNY6WFg8CPgynsYPNMGpw9HBkfqX5j5p/ZXtMFErInkevypDuQXbCtsKHu4sefZSMXAxvCty6HmPAxEZ0tRUCpg+K6v1kF2bahsn0L3GVOcbkLy/X+iPzF512tN5T95cuRcbx7zpg7o3Ol8X7k/NjVY17u3pCF3m7z9pzBn3iNhhQ3kUgKMN7Qk1Hh6hd4H5cC8wB9ScJKuPP+WaR59BoPn/MfSnWUPxd64cjGPPdGJG1St8zXv93DjiJV9fdXwnuJ56cXu4qccc/pygVzSQKpLwGG4VZY7zvE53l39nym3B4BMj6DsDKN8hnKLpsigc7hG2Wpx4EjZ64+dHklqji2Hrgvz4xRwL3of3pZ6n4g0ld7Sv04u3OQYU5ZZwh71yBR8EAbxpUtjWudXc5ViNIRpQLl8wuacH8o3Ce6lZsf8YKfV0xbZU/F8f6Pe/UQu4+NwxMfgLmwobiyt6V+Xi82BEakzkbwClUmAYYUIJSm80bGn0z+2Y71rjm+cS46t4VqNkYvNRTkxL2yIeA5gnEtzeynwPDoEtRkoXrPa/4fg9Fy12XCXFBVFhrCGIGQWKpDDu++cxeuvHEFBkUK0miJMMh0yBRRKfHDiIzTtaEZOpTF1WgGEykCE0+wGA+OTSLUaIm3VDjTnmh44hIzm3JJ3YC6F13Qa6oWH/PdNnZ77sTWrFsOhqDjwdqfo7upB9dww2k52YfeDf0b50cs49OoJ1KwoR0XUAiwbp1ov4+X7mlDGueY9p1FzbwUidX40v92OU8evorLGJwrMlBADfdU1Jb5jO9pkW56TCEDjXKaliSesQq4uqA0jFyxwd//u30bXzi6Ucr570wwUdqbx6JQKFEz14XDzZXS+14G5M/VqeOMv87l8WTWyF210PHMUbXVBXN7ZgT6+v7SpRjzySMgtqA0Zsa7UKr7am+e0vPDHvWpXVFyM+SgP49LVpMqQ/Fu3RlARCCC9cwgl8wMIE7Qvm2L5s1BVTWGOniUWOM6wCFoosHOI1YVQ0SMxeGAIwaUxJDIZHCDWpVU1akb5JIQmpRZwSREr7LDmNrZcF0SlHbJikAKRyqCoWlGM7PvDCIckar9RiOIqP6yAyypnw1gTxszbeOZTPIbseqzfOX10gzbaVq/RazWGxtKYGtsOkwOo1I5rbmPOqTH1rwVC0m+EQMzJAUMs+VkUPUtD6No/gmwqA+W3kRI5tHdk0LCpHIVhHiebR5K9MATvXXtHGmnaaFu9Rq/tWRbCkqeiHqbGVgVG6Lvk0g5obk8D+g8HQri8vIQL2Z/GlBILRc9G8WHzKE7uGkGkDei7loG1tRQNs7ngKo8jz73nfl8WDbcE0bu1BK1P96E0GkB/BTG3lWDJskkoFjYko2MSWylXk+YrCKzT4wI8zhomJGusk+aRc5Xsd0VxWGDBSh96vhrAhb8n0f0fAyvulhDJPhYZooy7r3TdGU1h3t0WDh4yIL8iMf3eMMp5V4qhATgjzLZlsERnhbBVpoVcetOa20JcD4FzQC9PVALSjnqS9Gt7G4KCqphsoWS9gcw6qscZYrUj8CRuYvwuEH6mwlEopkN3/sZCwG/An0zCTThwlQlR4IPr0N62YWXdxElyeaRx+sVO97zWOzSgzkRy7nydBlgSBj1RJsHTOdAf+P20058lPjW2yLuEOKERvDlBeTPRunKzPsFPcleH3WHMmS7bhebgjOdAnGa6FCt9QfCJ1gs44PSTXCrDsIQSloDJWmnTiTSfkhcdoqz1ZYyA18fHzLcoJwDnZEBBf4k4dM4QtOfdYZgccD8au7UT/Fgh6RgnU8CmS6JuD7wp919daJyNTlWzeN0oXjgCkxUOHwJefgG445sCVSQpI2GAp8DnG9OSnSPpCAtWQqC7CzjyV+AHPwcWL6SmBwWobWU5SnR3q7OaQ3PlOT0H4ixE+jIj3YWWU3LHmlp7G0JMbCGFQ0/mLwFq9rjo/BXFXyeQ6BzLhI68bqTRpwjRen4YtfNIbgRmL9IhZ/cZSgzToNuBxqbZhXEuhlqvvd70WGNWtj9p7Zmx1Pc1WWFKI0QV1Lg4d1Fh3/ck6mcIhKNAjqlmer2m0+SjB0MfsuwSff1zJmLF1M41qigtpJmQZsd79rv125x1XHCNPc91gwOaXcuKD+uOzl+IP9YutRpkmSnNMLVSqcTpTuDgixKBDoVIjBpjGrR1ZpQ14jLH3PU9mwTqInydMBTJXbNPmp3/cs5P+7XaRGW8c52D9mwTI+C9GA+Pbz3M1Vu3GL+deqs1TU02lQpRsVEYfVmF4y0KiVMK2YSG4ycCI1I138QC5ryIHskEXCPDjPZLcfF9p/OXcfdHuyD/Ruwcd8hF19snHNBTWqEiDhZ7LDv7Q+vphgXGCtRaVLgBczKrQMQQ/DRBJquzTwcKFIIatpcFbEgYZoa5uejg3HH34KznnK2ceZeYWWKOJ41vxtunOqDnvEgsYM0+gfo3HzTWL7rdfCgyxZjhK6Owguyscl5F18QZdp4CpFzYvS76L7kdLUfl3jV/cV/ltdOhHuUV8SnkXPHJFOiX+aYDvP1x+J/YzsgCM/etNO6MzjEWV5WIuqIgKlmYqALecI4aHUohcXVAdXafcY+sfcv9B+3PP/84hh/fzrB7Ssmj3vj8zAhMNDsYh7W7Bf6X3vD2zBJkVW+EKisuQVDbDQ0ivQuC1c3RUuzdfD9S31mE3Io4PxO+yKa1cexFfho3esQ6CToyuhfqd3pO23yRnJ+LpXWi++ca/b9P/hfVyPLy6IxmjwAAAABJRU5ErkJggg==\",\r\n\t\t\"[(})]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAI5ElEQVRYCc1XaWxU1xX+7n1vNttje7zgAQwUqAFDoWWxgXRBTWgjqhAiVRARQYraCqpuoFZtVVQlplIbtZXatJGqglBDQhQUrEYJkZoqaVOIKkJogRaHxXbYcfA+tsfj2d57t9954yFAWfKzz74zd+495zvfOfecc2eAj/AYQO1fC+teoiIjsveSu3H/rsI+2Fpo1Qq3qLRz887AsnRnMDQ8qGUtW1HlHYk05Lbs2pIvyhgh2wqP4IS4+3NHAqaFhlvgFdQ3l5x65B8rKiOnVykbjYEwJiOAMn8vj9F8Bl3GwZmh9NzX573ymUPArjHZuxmjgHTr620JSCjXjXt9YX3D+rLSzm1WNZpjc+cC8WVA7GNAuLyAlRkBEheB7iNInD4NdwBHR1MNT0/f17lPBG7EKijc47V41j/H5OqrX4vtHf0RjGl9wHhtvzNe/98ckzzumtR7rhkbHzLnmuyJjMgmqSO6glEkcSezN0WgyHbk0cmzvAl9L1TMzjU5i74He/aXXNilGrmUgpshFlPCjB+vEgjmpxUGgqUGTspz2v9s2cd/jeH28D91b/WG8pe6OorYtxKxiwvj5+V+i6ytSUMvRmfnFntLf+zYUz5tIZ2wjHMRyqIhVSyGIvdxInkXJuUqZVdY9qz7jRcJuRX2U01jduJFYj64rrVr4HY54aNItnPiI3V/M7a3bn5ig7PgK46essJW+VGoAD3WAZic5KTxhYvE5b0QDAUVZGF4eZi8BRMog3flkGOffM7uaYu9EP99YqMve4Mt+eyXElhq8uHS4+UbaqcmNuTr58OunWlpuw+qLIkcUsi6Cc5TND5EIoOAk/CHzGVN9kRGZEVHdAUjX78Agnnp8dgGsVG05c/5YvveFzK+LDbFbNX1pFjX6KIsY50+1YHDhy7g0tkP4OQVZn6qHg+vbsSEijBM1vExVMhG70AGB/acwbl/X4UdMJg2ZxLuWzEdc+dNVXbdbFcNn7RiSWcrFV5lT0neGHFdZNT5mPVAsDK/xInWQJUH9J/2H8H2rW8iFShF0+omfH7jfYjU12FslGWXZwRyQ4XBuazJnsiIrOhs/+6beJkYqjyoBVOwOx8L3u+zHo+4zIuZhHPfCfxhxtLwFhOf4Lpls6zjfQFM/XgV4tEQQ01vXQ6bCTg4CJNJMxcLp2dcDyocAaqqKMdcsZjXto3uZBaX3x/Eoto8rGSHq3p6rfPvZnbOfCb/DZ9Ewbbxq2AtUFYZQSMiYSjPUXZmEM3TKoDkeaCrn6B5IMAE1DmqRaCyNM7W53vA1sjMo1yab0FGh3tuAPHyGsSnsTQHh0VWCXZlJNMotlqBUcl48d4nsBCoVyE9EwSjrFKZXpj+bh9YRQMYSXs4P5hHIuWhfsIYGuI0lPOLxifW2ZXD1V4XsVIPM6oDKGfVmEsXaEH7lWFsYhJb04bYIoGzO1povwWFCATjiFK2Ai450REz5kCJgZDCkTMp7H5lGP3HcsiyBE+S1l/3TUXjDJLgc+Z8DivXd2EB5yFi1iwO4utrKrBsepDVQiISuVIeHa8my1YVwSmI4grwJOVbOPwIaJuVJA5lqeAy3CMuVNpIJHGsewwLV4Wx7PvV8LTGME+hpkZk2RGpU1Oj8dzeelSQj/YMjpwexbGeMTRFeXJ0wo0wCoZ5oonJfc02Qu3rj08gnUJG5d1RZDJlxqECQ21GPV6HwJalDF0tR5jEolwI84xTnEvCkWAtvVsZ5yRDT3myCysD8HoU9Lkx0B6Uq5kaFvsCncuZpNgS6zvGKRTZ1F3bZh+Izw00u67lqSFqkYB8vdAllKwmkowYnWZeScdLZ5mjhIryUo4EKcuqNMxXlSDkgOIxUo9hNyUaptLyLMvV3Wfz7078jbOGOz3CjZKFHJCF/rTpjBvTbALGaN4p8ifx8hhKVc64ye3PakOI6/TGySr8hwlx4hiwqBlo5k1dTrJelvscbMz+naWI5RETrkH/mHlfbHFcPwdtWgptuLcbB3PsUSpktIlRvZZh5GWqWY2qlBr0HOxyftURO0pSK79s8NUWg91vaDz1SwVHIkaiqpwCbAuGGF4lscJG55Ieej/AQaL4X1TkTeaWOgj+wzzfbvq+vUQ/FJ1oVXtlyiOQ8r/zyLkXvZfEZ9YYi6BM7FGmwamzFOtU+OI8oK6WBBlyxd6lSijDG9yEtGc50P1X3M4Fu50niDBStMk5dAujxgDRCq6ceM991gxQOsD0q6A71bRSxa0KDgIizMHS9GuHa+8cUvjsQxoPNnhY+AkPrn/mRKpmotZQt9Iyilhm0MGJNvdZsSG2xCbn/kNJPsSUZ9UB7/mOdu8tNeYq1ygPLCHQC0QoIFetzXdyU4yA5PLKVUDHYYM/ntX4y1GNAJPUl2cUREcKT6c91dHhvSXYvpFxW/6cL5T07cuVLltdc55xfjJw0rloJV3LzSoGWSqXYn7OUsQUhqG3mRxLjFEZoNQ5ppZLklruCKaRm9WuYAy05S8KpmCLDdEWm8VHjF5/JDyUsLdFrNXbf6h/VbvEnmFiljHlxqggfScXOuVzSg6DV7VBT5vB4llA4xzGNcawl7DkMoRJuKrvuHPhZ7/wfvDbtHuA2GzyNxsXwzcRkIVxEpEZsJe/vg1PNMzXn1PTbXjSTiP0O8AQUMthp8wys0ul5PhdIcejtgJaW+w+5rKDzjbv7S88jZ9ehnOYmKT0v8ZvS+A6iU+ihI2/4bU1+tGmpdba2CQ9MziR4S2l9SCHtEmHEUlxSG/jPDfgIXHNO3/0qNv68KveS5iEdtOF9J2M35GAT4LR2bEJoZY9vDyA2S+v1Csmz1HLa2N6alUU8UBIlXrMMjdvRoeS6OkbNpe62r13HnnDe5vy7S2bMPLkHrBd3d5zsSEP9+/+mP2wtuxFaNdrjAiLi6UwaSPMhEppTaSWTCKzB6qXIbjG/b7NqzG2cyMNr/vw59zdLNyTQFFZOibvcXvdKf4I+Ds7Qf918gbL4fxrE5zF13iht3xY40Xdu71/ZAK3gkiy+mt85f9NpXWr7P/15/8CFhXQsfsskmAAAAAASUVORK5CYII=\",\r\n\t\t\"[(k)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACqVBMVEUAAADuSSjuSSjjPB7hOh3gORzuSSjuSSjuSSjuSSjhOh3fORvdNhrcNBjuSSjtSCfrRibqRCTgORzfOBvdNhnbMxjZMRbXLxTuSSjvVzfrRSXpQyPnQSLlPyDgORzcNRnaMxfYMRbWLhTULBLTKhHvXT/1qZPxmIHsUjPqRSXoQyPmQCHkPiDiPB7gORzeNxrYMBXWLhPULBLSKRDQJw7OJQ3uSSjwb1LzoYvthW3oaE7pSCnoQiPkPh/iOx7gORzcNBjaMhfVLRPTKxHRKRDPJg7NJAzLIgrJIAnuSSjxgGbvjnfpcljmVjroRifoQiLmPyHjPR/hOx3dNhrbNBjZMhbXLxTRKA/PJg3LIQrJHwjHHQbuVDXwhWzsemHqWz7qSCnpRCTnQSLlPyDhOh3ZMRbVLBLTKhHMIwvKIQrIHwjGHAbEGgTCGAPuUTHvZUjub1PtWDrjPB7hOhzSKhDQJw/OJQ3KIAnIHgjCFwLAFQG/FADuSSjuTy/vaEruVjbsRyfoTC/qblbpbFXna1TmaVLkZ1HjZlDhZE/gYk3eYEzcX0rbXUnZW0jYWUfWWEXVVkTJKhXDGQTBFwK/FQC/FADuSSjvXj/2r5rynIXuiXHrY0foa1TzvrL8+vb47OfcfW/DGQPBFgL0lXzqa1HjZE7zwbj78e7rr6bIKBPDGAPBFgHuZknuhGzqdl3mRynlf2/76Ob329jWXEzCGAO/FAC/FADrRibpRCTnRSfnWT3mXkTiRCfYSzb42db75uTxwLrMNSG/FADlPyDjPB7hPiHhRireOh7QJw7OJQzURzP32dbJKBPeNxvcNRnLIgrJIAnXXEzMNCG/FADYMBXVLRPHHQbFGgW/FADRKA/PJg3NIwzKIQnEGQS/FADGHAbBFgK/FAC/FABbs/P1AAAA43RSTlMALz8PPw+f/68Pr//PD2//zw9f////zw9f////7y9//////88P////////////z///////zw+P/////////////////////88Pv///////////////////////n9//////////////////////n5////////////////+ff+/////////////////////////////////P////////////////////////////////////////718Pf+///////////y8Pf+//////////D3//////zx+///8Pb+8fv/+Pfy/fPzM30SoAAAGnSURBVDjLY2AYfoCRCcpgZmHFJs/Gzs7BCWZxcfPwYsrzsbOz8wsIAllCwiKiYuLo8hKSkuz8UtIysgxywvIKikrKKmjyqmrqGppa2jq6evryCgaGRsYmpsjyZuYWllbWNtq2dvb6Do4GTs4urm7uHnBpTk8vbx9fP/+AwCDu4JDQMCfn8Ai3yKhomDxTTGxcfEJiUnJgCtB5qWFp6eERGZlZ2Tm5EO15+QWFQOclJRcVg51nVFJallFekZ1TWVUNlK6pravnb9DUamxqbmlta+/o7Oru6e3rnzBx0uQpU6cyMEybPmPmrNmaQOfNmTsPAeYvWLho6lSQAnbJxTNnLYE4b+my5VCwYuWq1VMhCpg4+NesXbce6rwNG0Fg0+acLVUg6a3bQI7cvmPnrt17oM7bu2///gMHgc4Dyx+CevPwkaPHjoND78TJU6cPnAE7D0keCM6eg4be+QsXL0GcN/XyIZS4uHIVEnrXrkOdd/kGenTevAUOPYjzplbfwEwQt+9UZN+FOG/qPexp7j7UeVO34UqVDx6CpB8ewpNwDz169GiQ5SUAHrG6xm0Tgr0AAAAASUVORK5CYII=\",\r\n\t\t\"[(F)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACT1BMVEUAAAD3Uz70Pyf2SDH8dGf4W0j0QSjwJwnhGgXOEgu9DBH3Uz70PSTuIwXoOyv1V0XNEgu7CxK2CRS4ChOtBRfcGAfKFBDpNSLIEwbPFAjHEA64ChOtBRf3VkLEFBbmHwS+EwLWFgj4V0OzCBXjJxS9FgPgGgO9Fh74Wke3DBbLIxLdHgTlHAPTTE/7bF3MIBrHHAjwJgjjbGz7b2DIHAnsNBvsfXurBBf7cmXNFAfYKRPzOiDWLin1lZH8dmrTGAHxRzH/rqj/iH/hGgPfKxL2TzrylJHBRFL/iH/kHAHtRjG+Pk6gABz/iH/oHgD3X03LHBrjmp2pBBigABzwJAXwOB/5ZFPZHxL1p6PVanD/iH/8dmn0STPpKRLycWjldHG4ChOtBRZYngB3kRPkYT3zNxz5YU/IEA28CxFUlABmhQN6fhGPgSi4bzPLWivIShjFOQazNQKMQATNEgxWmQBVlQBSkABQjABOhwBMggBJfQBHeABFcwBDbgBBaQA+ZAA8YQBYngBXmgBVlgBAgAFGgQBJfQBIeQBEcgBDbgBBaQA+ZQBYngBYnAAPXgdLgQBJfQBHeABGdQBDcABBagBQjABNhQBKfgBHdwBDcABAaAA9YgBXmgBUlABRjQBNhgBAaAA+ZAAPXgdXmwBUlQBHdwBDcABXnABTkgBOhwBKfwBJkAFUlQBRjQBNhgBKfwBTkQBIegBEcAAPXgcPXgdWmQBIegBDbwAlYQMPXgdRjwBNhgA0YwEPXgdMggBIegBEcAAPXgcPXgcPXgcPXgeUFVsMAAAAxXRSTlMAP18vf9////+/T3////////+fPx//////////f6//////v///////////////L/////9v////v6////////////8//////99P////D3///////x////////8P7//////vL1/v////3y+P//////////+/D0//3////6/v////308P309//88vHz8/L28P/x8/Px8/H0+v/////48Pr///zw+/n//vf6+PXw+fv39/T//vT39PH///z49f79/PDz8vH2/vD/nTwCsAAAFzSURBVDjLY2AgATAyMbOwsrFzcHLhUMDNw8vHD1QgICgkLIJDgaiYODuHhKSUtAw2BbJABVJy7PIKijgUKIEUKKuoqilKqWNVoAFSoKmlraMopYtNgR5Ygb6BIVCBETYFxmAFJqYgBWbmWBRYgBRYWlkDFdjYYlNgB1Jg7wBW4IhFgRNIgbOLK0iBlJs7pgIPkAJPL4gCdW8fDAW+IAV+/mAFAYFBwVhNCAkNAykIj4jE4oaoaKCCGJCC2Lj4hERMBUnJKTypaWATFNMzsEZ3ZlZ2Tm5efkFhUTFW+ZLSsvKKyqrqmtq6+gYs8o1NzQwtrZVt7R2dXd3YDOjpBRJ9/RMmMjBMmjwFV7LsY2CYOm36jJmzZuNSMGfuvPlABQsW4lCwaPESoIKly7DJLV+xchXDotVr1q5bj13z4g3zN27avAV3ttm6Yf627Tt24slYu3Zv275nL76st2//AYa+gwTy56LNBBQcOnwEv4Ijh9GMAAAtMGlRHWiirgAAAABJRU5ErkJggg==\",\r\n\t\t\"[(W)]\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACLlBMVEUAAABZnwBVlwBQiwBKfwBGdgBVlgBQigBKfgBEcQBAaABTlABEcQA+ZQAPXgcPXgcPXgdPiABJfQA4bQEbYAUPXgcPXgcPXgdOiABMgwBLgAAPXgcPXgcZXgUUXgYPXgdYnQBWmABTkwBRjgBOhwBMggBKfQBCdgAyZAE+YwAPXgcPXgdYnQBVmABxggWhWwXDOAHQIgWETwQ3XAUxaAJAaAA/ZQD3VD/6iHr2blvpHQLcGAbPEwvCDg96Kg5PYAJAaQAPXgf4XUv7cmT6hnnxKQu1CRSoAxiaKgpeTQQPXgcPXgf5YE70Qim/DBDMEQy5ChKsBRf7bFz8k4j3V0L0PCK5ChPaFweoAxj7bFz9q6T6k4bSFAreGQanAxn7bl/9sar5iHrJEhDuIwWpBBj7b2H+vbjnLhmrBRdJjwFTkgBPigD8eGv8lIn2TjjcJRjzOyG5ChKuBhcTYgZOkwBTkgBPigBLgQBIegD+fnP9fnL5ZFPhIhD1Tzu9CxEtdwRTkgBLgQBHeQBEcQD+f3X8dWfrIwn2XUz3VEDNEgzADRBSkABPiQBDcABAaQD+gnj8cmTxKw36aFj7bl/REwpLgABHeAA/aAA9YQD+g3nyNRrxLA/7b2HfGQXpST7dJxrlGwPsHwL2TDfjGwTMEgzRFArZFwfhGgXqIwnvIwXlHATJEA3OEgvVFQndGAboKRP2UDvwJQcPXgfQEwvWFQndGAb2TjjzOR/xKQsPXgdPdr5LAAAAunRSTlMAP//ffw/f///fL0//z4+/fz+vz///zw8vPw8v78+Pry8/Pz8fz/+/r69PP3/v////r///798Pn///////////Px+f////////v59f//////9PH///////zz///////3//////v6///29PPz/v/////+8P/////+9vL/////9/b+///59v/////98PL8//n7//////X1/P/1/v////32//////X5//////7w9f3/////+fbx8/Lx+fT98nuUF/AAABm0lEQVQ4y2NgIB4wMjGzsOJVwcbOwcmFTwE3OwcPLx8/vwBOFYJCwiKiQCAmjk1WQlKKQVpGVFaOX1RUHl1SQVFJWUVVTV1GRkOTgUFLRlQbTYGOrp6+gaGRsaiJqRmQKyDKj26EuYWllbWNrZ29A4gnLiPqiCrv5OziClLg5u7hCeJ7iXqjKvBx9oUo8PMPCATypUW9UOSDgkNCwQrCwv0DIkAiMqiOiIyKhiiIifUPiAOJyIuiKIhPSAQrSEoGKkhhAPsDRUFqGsSKdJCCDJCIt2hmVjZCQU5uHkhBfgFQQWERSES7uKS0rLwCKl9ZVQ1SUFMLUlAHFtIWrW8oa2xqhihoafUBKmhr7wAq6OyCKtDu7mls6u0D8/onABVMnDQZpGAKA0wBA8PUab3TZ4B4M4EKZs2eA1IwlwFJAQLMm1+zYOEikILF2BUwLFm6bPmKSR0FK1fhUMCwes3ades3FGyE8TdhpAiGzVu2btu+A8YTEBXHnwXQ4gITiBFSILoTv7w2ZqJEBZsIKZAXFcCvQIaAAm1RRDgBAONoa547W9uXAAAAAElFTkSuQmCC\",\r\n\t\t\"[(D)]\":\"data:image/gif;base64,R0lGODlhJAAkAPcAAPf37/f3jPf3lPfvjPfvhPfve+/m3vfvc/fmc+/mhPfmY+/me/fma/PeY+/ebffeWubee+bWzu/eWu/eUu/eSu/WSubWZd7Ove/OOubOV+/OQt7Ga+bFSt7FUta9rda9Y9a9Wt69Sta9Us61nNa1X961Mdm1QtC1UOa1CNayOs6tWOatCMWllOalIealEOalCN6lIc6lSt6lEM6lOt6lCMWlQs6hK72chN6cGcWcUN6cEMWcOtacCN6UEN6UGdaUGcWXLNaUCL2USs6UCL2UQr2RMdaMELWMc86MGb2OOsyMCL2MKc6EEMyECLWEOrWELbV7Y8V7ELV9Ia17Or17AK17Mb15CK1zUsVzCLd2EK1zKa1zIbVzAaVwL7VrELhrCKVrIaVrGaVjQrVjCKhmAK1jCKNjEJxjIZxjGa1aCJxaMaVaCJxaGaVaAJxaEKVSCJRUGZxSEJxSCJRSEJxSAJRKIZxKAJRKEJRKAJRKCIxCEIxDCIxCAIw6AIQ6AIQxAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCwCAACwCAAYAHwAcAAAI/wABCRxIUCAAKGISirlyo+ENFhciXogwUMyfi3/UJITSUMwdISBDCulypqRJNnUAGfijYsMGEiGnmJwSoKbNmzc3/AF04c+An0CDDiAitChQImoA3YBDoKnTpx9UPJ06lYgYQFeqFNjKtSsIOCa1egVB9usRrHdMWjjAtm0SjH9OtD0QA+5FD4AAsGioRguCvwjepgWTZAfgwwgs1PhzBEDBEXsaMJic4c+TyZgza+6w50pBQHVqKBitQAsa0qhTkzbxhyLBI2waNJAgYUYe2rhxhzARIreEPDcKRvhTATeHP7lDsMkjJUyeP3NyswlesM6MCdgr7DGBHfufPN05hP/pPsENdYJXpFRYXyFOCvYV8CyBvwe++c83zGDYj8GMFP4YuFECfzbEAeAc5w00Ah8tNNiCF2s42MIPEq4hh4R/XPBZTxJ6YYeEIPaRhYM/ZLjhHzikiIMXfqjoIg5R/PGDijF+xhOKKo7xhw8vprgGHi6WcdVnI/jhw5E+6BgFkkga8UcaTPLBwkBqaCSGHmX0oGUPa/zxxZZbfvHHGmNE0UOMjt0YxZpmgonHH3zYsQaYWhqBxRh2/KGHGBStpIQOgAaqg5N71bGGoIgC2gQdQ/6hhAuQRuqCHUkB8ocVkmYaKR5ngcbFC6CCSgMedVDkwR80hKqqqjy0JtAVdHA+ISsXZGSUJhR8KLHCrn3wEasSPOxqRUoCGcCCQguNQJABUNQB55seeHBDs3/Q0UenNmar0gg34EWQXjc4FhAAIfkECQsAgAAsAgAGAB8AHAAACDIAAQkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoUx4MCAAh+QQFCwCAACwCAAQAHwAeAAAI/wABGbhA8AIAQAgRXvjDsCFDNWIiSrxyAWEdhw3rRKzDZoPHjxtyCBlJcsofgX8gBAiQ4KMKIkSEOFlJs6ZNEicXEtjJs+cCIj2DBiUiBtCNM0J7flDRs4DTp1CdFIVSBarVAiDgnNlaFSqIr1/h3AB05c6ZJ0kcHFjLNonDGGwPnMD4xwMgACxu3FBTA4FfBE8a7jkD5q9fCyJE1NDy50jChCPmMJjMoMOfIpQza5684w+Lx3f/dFBAWsEcNKVTqy5dRM/Bx1eepC6CpoHt27hzN6gLmkUeCcAlmPgTPLiJJWHYhDFRnM3Yxwb+hJhAvcIf6tRTMJwBZEue69idg/8GVGcH9gl4Upz/M+f8FuoUKLh5/hiKlAr4K7iZkb9CHyD97dHffOPdYAYGCGJghhQJYuBGCQkCEUeDc3wG2gh8tKBhC16ssWELSHy4hhwf/lERaAt96IUdH7boRxYb4vBHBOMthMONOHjhB4484oDEHz/gyMRJNf7B4xhG9nhjGXwcWdR4Hvzhw5Q+IBkFlVjykQaWdjiG0BFH6KXGGj2U2UMZf0RhpplDlmFEmUbMiFAEf9hhJx1vmmnHH2tEoaaZUYyxBh58rLFGHSfS2YMOjDaqQw9+qMGQHY5W2sQYdvjh5R9NuODppy5Y8cdBanwB6qmfrnEFQn8ogaoSfThiBkCrqKLKh4VqcLHCrrvCKsZBUfK6QhA8CLtrEH8YgBAUfJDBxbN0/PErQjfwYQUPKKDAEB9tWDFEtlyo8RgLR0gkxgjQQXFRH3jU5cEN6v5BR6zj1QuaASPcYNdjeN1wUEAAIfkECQsAgAAsAgAEAB8AHgAACDMAAQkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6rcGBAAIfkEBQsAgAAsAgAGAB8AHAAACP8AAQkcSFAgAChiEoq5cqPhDRYXIl6IMFDMn4t/1CSE0lDMHSEgQwrpcqakSTZ1ABn4o2LDBhIhp5icEqCmzZs3N/wBdOHPgJ9Agw4gIrQoUCJqAN2AQ6Cp06cfVDydOpWIGEBXqhTYyrUrCDgmtXoFQfbrEax3TFo4wLZtEox/TrQ9EAPuRQ+AALBoqEYLgr8I3qYFk2QH4MMILNT4cwRAwRF7GjCYnOHPk8mYM2vusOdKQUB1aigYrUALGtKoU5M28YciwSNsGjSQIGFGHtq4cYcwESK3hDw3Ckb4UwE3hz+5Q7DJIyVMnj9zcrMJXrDOjAnYK+wxgR37nzzdOYT/6T7BDXWCV6RUWF8hTgr2FfAsgb8HvvnPN8xg2I/BjBT+GLhRAn82xAHgHOcNNAIfLTTYghdrONjCDxKuIYeEf1zwWU8SemGHhCD2kYWDP2S44R84pIiDF36o6CIOUfzxg4oxfsYTiiqO8YcPL6a4Bh4ulnHVZyP44cORPugYBZJIGvFHGkzywcJAamgkhh5l9KBlD2v88cWWW37xxxpjRNFDjI7dGMWaZoKJxx982LEGmFoagcUYdvyhhxgUraSEDoAGqoOTe9WxhqCIAtoEHUP+oYQLkEbqgh1JAfKHFZJmGikeZ4HGxQuggkoDHnVQ5MEfNISqqqo8tCbQFXRwPiErF2RklCYUfCixwq598BGrEjzsakVKAhnAgkILjUCQAVDUAeebHnhwQ7N/0NFHpzZmq9IIN+BFkF43OBYQACH5BAkLAIAALAIABgAfABwAAAgyAAEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFMeDAgAIfkEBQsAgAAsAgAEAB8AHgAACP8AARm4QPACAEAIEV74w7AhQzViIkq8cgFhHYcN60Ssw2aDx48bcggZSXLKH4F/IAQIkOCjCiJEhDhZSbOmTRInFxLYybPnAiI9gwYlIgbQjTNCe35Q0bOA06dQnRSFUgWq1QIg4JzZWhUqiK9f4dwAdOXOmSdJHBxYyzaJwxhsD5zA+McDIAAsbtxQUwOBXwRPGu45A+avXwsiRNTQ8udIwoQj5jCYzKDDnyKUM2uevOMPi8d3/3RQQFrBHDSlU6suXUTPwcdXnqQugqaB7du4czeoC5pFHgnAJZj4Ezy4iSVh2IQxUZzN2McG/oSYQL3CH+rUUzCcAWRLnuvYnYP/BlRnB/YJeFKc/zPn/BbqFCi4ef4YipQK+Cu4mZG/Qh8g/e3R33zj3WAGBghiYIYUCWLgRgkJAhFHg3N8BtoIfLSgYQterLFhC0h8uIYcH/5REWgLfeiFHR+26EcWG+LwRwTjLYTDjTh44QeOPOKAxB8/4MjESTX+weMYRvZ4Yxl8HFnUeB784cOUPiAZBZVY8pEGlnY4htARR+ilxho9lNlDGX9EYaaZQ5ZhRJlGzIhQBH/YYScdb5ppxx9rRKGmmVGMsQYefKyxRh0n0tmDDow2qkMPfqjBkB2OVtrEGHb44eUfTbjg6acuWPHHQWp8Aeqpn65xBUJ/KIGqEn04YgZAq6iiyoeFanCxwq67wirGQVHyukIQPAi7axB/GIAQFHyQwcWzdPzxK0I38GEFDyigwBAfbVgxRLZcqPEYC0dIJMYI0EFxUR941OXBDer+QUes49ULmgEj3GDXY3jdcFBAACH5BAkLAIAALAIABAAfAB4AAAgzAAEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOq3BgQACH5BAULAIAALAIACwAfABcAAAj/AAF5uEHwhocLFwwAEvinocOGasRInHhlxEI9U4QIcXKm4x2HXQKIHBlgg8mTG3L8AXThz4CXMGMOICKzJswcagDdgEOgp8+fH1T8HDrUyRVAYsCAWFqgqdMCMR6eeeogiVWrd24IvCJRT4wDYA/sOPOx4R4HYQ+IuKrlDxQAC+OOuMOgLoMMf4rY3cu3bo09FuMurFNDgWEFWtAcXsz4cIg/EQQDYsFGgmUJM+ZcvpzBRJElRTJsnqNVsIE/HCaorvBHterHf1LMWMJmjusJbEoLvrLkdhwTFFz/2XLbTXHdcW+YwcAcgxkgzTHEKdE8xZzobpAv9NCnhfcWXrx84W8RZfwaOeP/XJDM8s94L+jHf8fxp7z3H38USm6Joz+OMXz4J+B/fgiYRR3sMeTDgj6M8YcRDEbIxxoR0nFEXFBMVEcaPXTYQxp/YOGhh1/8scYYUfTARH4LtRTFi1HoIKOMePzBhx1rzChjh1F8sQYeeojhASAA/NGEC0gm6UITkF1QRxlKRpnkGmJc1MQLWGZpRR8WncZDlmCGyeVCV5ChxJlntqHHepPxocQKcLbRBhdUvAknFXrABYgBXE0kBgt6AhIBFGrYWCNBYhTaBx19XJjgo3FFcEFkgkl6AVwBAQAh+QQJCwCAACwCAAsAHwAXAAAILQABCRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTCgAAh+QQFCwCAACwEAAAAHQAcAAAI/wD/KHFBsCAPPH8S/mlSsKFDPEfqWFlBkSINhAr/0KjIkSOPPx7E0FEypCSXPhn/8OGBomUfPmSssGxp5c+FKylzKuzThkxOOlwQXrihM6GYokgvsEBKFKlOABeQelDjNCegCAn15LxwFGfOownrJAQEKOERq0RvaM2op+mfEWPL/rlBNSMgoiPAKhTTVI9cskdveDUKKOrQlEfg/oECSCxgkG7/XLn6x4BihTeiggR0lCzRCx4y3iD7h3LGC1HrkIWixrNNrApHkJ0sV6EBAH+OeBZDNiqA2jY9P1ZIOgJZFrwLl26s8DcgA6v3klXdOznu4cvJHlfIGJAH7Vy1J2Fvmly78oSjzQPWrhuQYtrmcSf8rp6z9vSa06sX+8d4/QvaOSeXbPWBVV9vB2oFYH1EtXaggOYdBV19oZV3YH1nXWjAXBdeyIKDB77V4YHhXSjGgiPGpx+GKR5I4IH0dRgQACH5BAkLAIAALAQAAAAdABwAAAgwAAEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTIAMCACH5BAULAIAALAoAAAAWAAcAAAg/AP/8uQCooEFAR/7UOXjQgJg/ERgWHPFHjESDUP5cBBThz5GNgG4s3PiHBcgLFjeqIbjRwMeNUACADAnSJMiAACH5BAkLAIAALAoAAAAWAAcAAAgXAAEJHEiwoMGDCBMqXMiwocOHECMCCggAIfkEBQsAgAAsAAAAAAEAAQAACAQAAQUEACH5BAULAIAALAAAAAABAAEAAAgEAAEFBAAh+QQFCwCAACwAAAAAAQABAAAIBAABBQQAIfkECQsAgAAsAAAAAAEAAQAACAQAAQUEADs=\"\r\n};\r\nvar createStandardXHR = function () {\r\n\ttry {\r\n\t\treturn new window.XMLHttpRequest();\r\n\t} catch( e ) {\r\n\t\treturn false;\r\n\t}\r\n};\r\nvar createActiveXHR = function () {\r\n\ttry {\r\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\r\n\t} catch( e ) {\r\n\t\treturn false;\r\n\t}\r\n};\r\nif (window.XDomainRequest) {\r\n\tXDomainRequest.prototype.oldsend = XDomainRequest.prototype.send;\r\n\tXDomainRequest.prototype.send = function() {\r\n\t\tXDomainRequest.prototype.oldsend.apply(this, arguments);\r\n\t\tthis.readyState = 2;\r\n\t};\r\n}\r\n\r\nvar xmlrequest = function (crossDomain){\r\n\tcrossDomain = crossDomain || true;\r\n\tvar temp = createStandardXHR () || createActiveXHR();\r\n\t\r\n\tif (\"withCredentials\" in temp) {\r\n\t\treturn temp;\r\n\t}\r\n\tif(!crossDomain){\r\n\t\treturn temp;\r\n\t}\r\n\tif(window.XDomainRequest===undefined){\r\n\t\treturn temp;\r\n\t}\r\n\tvar xhr = new XDomainRequest();\r\n\txhr.readyState = 0;\r\n\txhr.status = 100;\r\n\txhr.onreadystatechange = emptyFn;\r\n\txhr.onload = function () {\r\n\t\txhr.readyState = 4;\r\n\t\txhr.status = 200;\r\n\t\t\r\n\t\tvar xmlDoc = new ActiveXObject(\"Microsoft.XMLDOM\");\r\n\t\txmlDoc.async = \"false\";\r\n\t\txmlDoc.loadXML(xhr.responseText);\r\n\t\txhr.responseXML = xmlDoc;\r\n\t\txhr.response = xhr.responseText;\r\n\t\txhr.onreadystatechange();\r\n\t};\r\n\txhr.ontimeout = xhr.onerror = function(){\r\n\t\txhr.readyState = 4;\r\n\t\txhr.status = 500;\r\n\t\txhr.onreadystatechange();\r\n\t};\r\n\treturn xhr;\r\n};\r\nStrophe.Request.prototype._newXHR = function(){\r\n\tvar xhr =  xmlrequest(true);\r\n  if (xhr.overrideMimeType) {\r\n      xhr.overrideMimeType(\"text/xml\");\r\n  }\r\n  xhr.onreadystatechange = this.func.bind(null, this);\r\n  return xhr;\r\n};\r\n\r\nfunction getIEVersion(){\r\n    var ua = navigator.userAgent,matches,tridentMap={'4':8,'5':9,'6':10,'7':11};\r\n    matches = ua.match(/MSIE (\\d+)/i);\r\n    if(matches&&matches[1])\r\n    {   \r\n        return +matches[1];\r\n    }\r\n    matches = ua.match(/Trident\\/(\\d+)/i);\r\n    if(matches&&matches[1])\r\n    {   \r\n        return tridentMap[matches[1]]||null;\r\n    }\r\n    return null;\r\n};\r\nvar ieVersion = getIEVersion();\r\n\r\nvar tepmxhr = xmlrequest();\r\nvar hasSetRequestHeader = (tepmxhr.setRequestHeader || false );\r\nvar hasOverrideMimeType = (tepmxhr.overrideMimeType || false);\r\ntepmxhr = null;\r\n\r\nvar doAjaxRequest = function(options) {\r\n\tvar dataType = options.dataType || 'text';\r\n\tvar suc = options.success || emptyFn;\r\n\tvar error = options.error || emptyFn;\r\n\tvar xhr = xmlrequest();\r\n\txhr.onreadystatechange = function (){\r\n\t\tif( xhr.readyState === 4){\r\n\t\t\tvar status = xhr.status || 0;\r\n\t\t\tif (status == 200) {\r\n\t\t\t\tif(dataType=='text'){\r\n\t\t\t\t\tsuc(xhr.responseText,xhr);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(dataType=='json'){\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\tvar json = $.parseJSON(xhr.responseText);\r\n\t\t\t\t\t\tsuc(json,xhr);\r\n\t\t\t\t\t} catch(e){\r\n\t\t\t\t\t\terror(xhr.responseText,xhr,\"错误的数据,无法转换为json\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(dataType=='xml'){\r\n\t\t\t\t\tif (xhr.responseXML && xhr.responseXML.documentElement) {\r\n\t\t\t\t\t\tsuc(xhr.responseXML.documentElement,xhr);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\terror(xhr.responseText,xhr,\"浏览器不支持ajax返回xml对象\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tsuc(xhr.response || xhr.responseText,xhr);\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tif(dataType=='json'){\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\tvar json = $.parseJSON(xhr.responseText);\r\n\t\t\t\t\t\terror(json,xhr,\"服务器返回错误信息\");\r\n\t\t\t\t\t} catch(e){\r\n\t\t\t\t\t\terror(xhr.responseText,xhr,\"服务器返回错误信息\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(dataType=='xml'){\r\n\t\t\t\t\tif (xhr.responseXML && xhr.responseXML.documentElement) {\r\n\t\t\t\t\t\terror(xhr.responseXML.documentElement,xhr,\"服务器返回错误信息\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\terror(xhr.responseText,xhr,\"服务器返回错误信息\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\terror(xhr.responseText,xhr,\"服务器返回错误信息\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif( xhr.readyState === 0){\r\n\t\t\terror(xhr.responseText,xhr,\"服务器异常\");\r\n\t\t}\r\n\t};\r\n\r\n\tif(options.responseType){\r\n\t\tif(xhr.responseType){\r\n\t\t\txhr.responseType = options.responseType;\r\n\t\t} else {\r\n\t\t\terror('',xhr,\"当前浏览器不支持设置响应类型\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\tif(options.mimeType){\r\n\t\tif(hasOverrideMimeType){\r\n\t\t\txhr.overrideMimeType(options.mimeType);\r\n\t\t} else {\r\n\t\t\terror('',xhr,\"当前浏览器不支持设置mimeType\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\t\r\n\tvar type = options.type || \"POST\";\r\n\txhr.open(type, options.url);\r\n\t\r\n\tvar headers = options.headers || {};\r\n\tfor(var key in headers){\r\n\t\tif(hasSetRequestHeader){\r\n\t\t\txhr.setRequestHeader(key, headers[key]);\r\n\t\t} else {\r\n\t\t\terror('',xhr,\"当前浏览器不支持设置header\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tvar data = options.data || null;\r\n\txhr.send(data);\r\n\treturn xhr;\r\n};\r\n\r\nvar registerUserFn = function(options){\r\n\tvar orgName = options.orgName || '';\r\n\tvar appName = options.appName || '';\r\n\tvar appKey = options.appKey || '';\r\n\tif(!orgName && !appName && appKey){\r\n\t\tvar devInfos = appKey.split('#');\r\n\t\tif(devInfos.length==2){\r\n\t\t\torgName = devInfos[0];\r\n\t\t\tappName = devInfos[1];\r\n\t\t}\r\n\t}\r\n\tif(!orgName && !appName){\r\n\t\toptions.error({\r\n\t\t\ttype : EASEMOB_IM_RESISTERUSER_ERROR,\r\n\t\t\tmsg : '没有指定开发者信息'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\tvar prefix = options.https ? 'https' : 'http';\r\n\tvar restUrl = options.url || prefix + '://a1.easemob.com/'+ orgName + '/' + appName + '/users';\r\n\t\r\n\tvar userjson = {\r\n\t\t\tusername : options.username,\r\n\t\t\tpassword : options.password,\r\n\t\t\tnickname : options.nickname || ''\r\n\t};\r\n\t\r\n\tvar userinfo = JSON.stringify(userjson);\r\n\tvar options = {\r\n\t\turl : restUrl,\r\n\t\tdataType : 'json',\r\n\t\tdata : userinfo,\r\n\t\tsuccess : options.success || emptyFn,\r\n\t\terror : options.error || emptyFn\r\n\t};\r\n\tvar param = doAjaxRequest(options);\r\n\treturn param;\r\n};\r\n  \r\n\r\nvar getFileUrlFn = function(fileInputId) {\r\n\tvar uri = {\r\n\t\turl : '',\r\n\t\tfilename : '',\r\n\t\tfiletype : ''\r\n\t};\r\n\tif (window.URL  && window.URL.createObjectURL) {\r\n\t\tvar fileItems = document.getElementById(fileInputId).files;\r\n\t\tif (fileItems.length > 0) {\r\n\t\t\tvar u = fileItems.item(0);\r\n\t\t\turi.url = window.URL.createObjectURL(u);\r\n\t\t\turi.filename = u.name || '';\r\n\t\t}\r\n\t} else { // IE\r\n\t\tvar u = document.getElementById(fileInputId).value;\r\n\t\turi.url = u;\r\n\t\tvar pos1 = u.lastIndexOf('/');\r\n\t\tvar pos2 = u.lastIndexOf('\\\\');\r\n\t\tvar pos = Math.max(pos1, pos2)\r\n\t\tif (pos < 0)\r\n\t\t\turi.filename = u;\r\n\t\telse\r\n\t\t\turi.filename = u.substring(pos + 1);\r\n\t}\r\n\tvar index = uri.filename.lastIndexOf(\".\");\r\n\tif (index != -1) {\r\n\t\turi.filetype = uri.filename.substring(index+1).toLowerCase();\r\n\t}\r\n\treturn uri;\r\n};\r\nvar isIe = false;\r\nif (!!window.ActiveXObject || \"ActiveXObject\" in window) {\r\n\tisIe = true;\r\n}\r\nvar getFileSizeFn = function(fileInputId){\r\n\tvar file = document.getElementById(fileInputId)\r\n\tvar fileSize = 0;\r\n\tif(file){\r\n\t\tif(file.files){\r\n\t\t\tif(file.files.length>0){\r\n\t\t\t\tfileSize = file.files[0].size;\r\n\t\t\t}\r\n\t\t} else if(isIe){\r\n\t\t\tfile.select();\r\n\t\t\tvar fileobject = new ActiveXObject (\"Scripting.FileSystemObject\");  \r\n\t\t\tvar file = fileobject.GetFile (file.value);  \r\n\t\t\tfileSize = file.Size;\r\n\t\t}\r\n\t}\r\n\treturn fileSize;\r\n};\r\n\r\nvar hasFormData = (typeof FormData != 'undefined');\r\nvar isCanUploadFile = (hasSetRequestHeader && hasFormData);\r\nvar uploadFn = function(options) {\r\n\toptions = options || {};\r\n\toptions.onFileUploadProgress = options.onFileUploadProgress || emptyFn;\r\n\toptions.onFileUploadComplete = options.onFileUploadComplete || emptyFn;\r\n\toptions.onFileUploadError = options.onFileUploadError || emptyFn;\r\n\toptions.onFileUploadCanceled = options.onFileUploadCanceled || emptyFn;\r\n\r\n\tif (!isCanUploadFile) {\r\n\t\toptions.onFileUploadError({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_BROWSER_ERROR,\r\n\t\t\tmsg : '当前浏览器不支持异步上传文件,请换用其他浏览器'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\t\r\n\tvar acc = options.accessToken;\r\n\tif (!acc) {\r\n\t\toptions.onFileUploadError({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_NO_LOGIN,\r\n\t\t\tmsg : '用户未登录到usergrid服务器,无法使用文件上传功能'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\r\n\torgName = options.orgName || '';\r\n\tappName = options.appName || '';\r\n\tappKey = options.appKey || '';\r\n\tif(!orgName && !appName && appKey){\r\n\t\tvar devInfos = appKey.split('#');\r\n\t\tif(devInfos.length==2){\r\n\t\t\torgName = devInfos[0];\r\n\t\t\tappName = devInfos[1];\r\n\t\t}\r\n\t}\r\n\tif(!orgName && !appName){\r\n\t\toptions.onFileUploadError({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_ERROR,\r\n\t\t\tmsg : '没有指定开发者信息'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\tvar fileSize = getFileSizeFn(options.fileInputId);\r\n\tif(fileSize > 10485760){\r\n\t\toptions.onFileUploadError({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_ERROR,\r\n\t\t\tmsg : '上传文件超过服务器大小限制（10M）'\r\n\t\t});\r\n\t\treturn ;\r\n\t}else if(fileSize <= 0){\r\n\t\toptions.onFileUploadError({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_ERROR,\r\n\t\t\tmsg : '上传文件大小为0'\r\n\t\t});\r\n\t\treturn ;\r\n\t}\r\n\tvar apiUrl = options.apiUrl || 'http://a1.easemob.com';\r\n\tvar uploadUrl = apiUrl + \"/\" + orgName + '/' + appName + '/chatfiles';\r\n\r\n\tvar xhr = xmlrequest();\r\n\tvar onError = function(e) {\r\n\t\toptions.onFileUploadError({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_ERROR,\r\n\t\t\tmsg : '上传文件失败',\r\n\t\t\te : e,\r\n\t\t\txhr : xhr\r\n\t\t});\r\n\t}\r\n\tif(xhr.upload){\r\n\t\txhr.upload.addEventListener(\"progress\",options.onFileUploadProgress, false);\r\n\t}\r\n\tif(xhr.addEventListener){\r\n\t\txhr.addEventListener(\"abort\", options.onFileUploadCanceled, false);\r\n\t\txhr.addEventListener(\"load\", function(e) {\r\n\t\t\ttry{\r\n\t\t\t\tvar json = $.parseJSON(xhr.responseText);\r\n\t\t\t\toptions.onFileUploadComplete(json);\r\n\t\t\t} catch(e){\r\n\t\t\t\toptions.onFileUploadError({\r\n\t\t\t\t\ttype : EASEMOB_IM_UPLOADFILE_ERROR,\r\n\t\t\t\t\tmsg : '上传文件失败,服务端返回值值不正确',\r\n\t\t\t\t\te : e,\r\n\t\t\t\t\tdata : xhr.responseText,\r\n\t\t\t\t\txhr : xhr\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, false);\r\n\t\txhr.addEventListener(\"error\", onError, false);\r\n\t} else if(xhr.onreadystatechange){\r\n\t\txhr.onreadystatechange = function (){\r\n\t\t\tif( xhr.readyState === 4){\r\n\t\t\t\tif (ajax.status == 200) {\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\tvar json = $.parseJSON(xhr.responseText);\r\n\t\t\t\t\t\toptions.onFileUploadComplete(json);\r\n\t\t\t\t\t} catch(e){\r\n\t\t\t\t\t\toptions.onFileUploadError({\r\n\t\t\t\t\t\t\ttype : EASEMOB_IM_UPLOADFILE_ERROR,\r\n\t\t\t\t\t\t\tmsg : '上传文件失败,服务端返回值不正确',\r\n\t\t\t\t\t\t\te : e,\r\n\t\t\t\t\t\t\tdata : xhr.responseText,\r\n\t\t\t\t\t\t\txhr : xhr\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t\toptions.onFileUploadError({\r\n\t\t\t\t\t\t\ttype : EASEMOB_IM_UPLOADFILE_ERROR,\r\n\t\t\t\t\t\t\tmsg : '上传文件失败,服务端返回异常',\r\n\t\t\t\t\t\t\tdata : xhr.responseText,\r\n\t\t\t\t\t\t\txhr : xhr\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\txhr.abort();\r\n\t\t\t\toptions.onFileUploadCanceled();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\txhr.open(\"POST\", uploadUrl);\r\n\r\n\txhr.setRequestHeader('restrict-access', 'true');\r\n\txhr.setRequestHeader('Authorization', 'Bearer ' + acc);\r\n\r\n\tvar localFile = '';\r\n\tvar fileInput = document.getElementById(options.fileInputId);\r\n\tvar localFile = null;\r\n\tif (\"files\" in fileInput) {\r\n\t\tlocalFile = fileInput.files[0];\r\n\t} else {\r\n\t\tlocalFile = fileInput.value;\r\n\t}\r\n\tvar formData = new FormData();\r\n\tformData.append(\"file\", localFile);\r\n\txhr.send(formData);\r\n};\r\nvar hasBlob = (typeof Blob != 'undefined');\r\nvar isCanDownLoadFile = (hasSetRequestHeader && (hasBlob || hasOverrideMimeType));\r\nvar downloadFn = function(options){\r\n\toptions.onFileDownloadComplete = options.onFileDownloadComplete || emptyFn;\r\n\toptions.onFileDownloadError = options.onFileDownloadError || emptyFn;\r\n\t\r\n\tif (!isCanDownLoadFile) {\r\n\t\toptions.onFileDownloadError({\r\n\t\t\ttype : EASEMOB_IM_DOWNLOADFILE_BROWSER_ERROR,\r\n\t\t\tmsg : '当前浏览器不支持异步下载文件,请换用其他浏览器'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\tvar accessToken = options.accessToken || '';\r\n\tif (!accessToken) {\r\n\t\toptions.onFileDownloadError({\r\n\t\t\ttype : EASEMOB_IM_DOWNLOADFILE_NO_LOGIN,\r\n\t\t\tmsg : '用户未登录到usergrid服务器,无法使用文件下载功能'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\t\r\n\tvar onError = function(e) {\r\n\t\toptions.onFileDownloadError({\r\n\t\t\ttype : EASEMOB_IM_DOWNLOADFILE_ERROR,\r\n\t\t\tmsg : '下载文件失败',\r\n\t\t\txhr : xhr,\r\n\t\t\te : e\r\n\t\t});\r\n\t}\r\n\tvar xhr = xmlrequest();\r\n\tif(\"addEventListener\" in xhr){\r\n\t\txhr.addEventListener(\"load\", function(e) {\r\n\t\t\toptions.onFileDownloadComplete(xhr.response,xhr);\r\n\t\t}, false);\r\n\t\txhr.addEventListener(\"error\", onError, false);\r\n\t} else if(\"onreadystatechange\" in xhr){\r\n\t\txhr.onreadystatechange = function (){\r\n\t\t\tif( xhr.readyState === 4){\r\n\t\t\t\tif (ajax.status == 200) {\r\n\t\t\t\t\toptions.onFileDownloadComplete(xhr.response,xhr);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t\toptions.onFileDownloadError({\r\n\t\t\t\t\t\t\ttype : EASEMOB_IM_DOWNLOADFILE_ERROR,\r\n\t\t\t\t\t\t\tmsg : '下载文件失败,服务端返回异常',\r\n\t\t\t\t\t\t\txhr : xhr\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\txhr.abort();\r\n\t\t\t\toptions.onFileDownloadError({\r\n\t\t\t\t\ttype : EASEMOB_IM_DOWNLOADFILE_ERROR,\r\n\t\t\t\t\tmsg : '错误的下载状态,退出下载',\r\n\t\t\t\t\txhr : xhr\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tvar method = options.method || 'GET';\r\n\tvar resType = options.responseType || 'blob';\r\n\tvar mimeType = options.mimeType || \"text/plain; charset=x-user-defined\";\r\n\txhr.open(method, options.url);\r\n\tif(typeof Blob != 'undefined'){\r\n\t\txhr.responseType = resType;\r\n\t} else {\r\n\t\txhr.overrideMimeType(mimeType);\r\n\t}\r\n\r\n\tvar innerHeaer = {\r\n\t\t'X-Requested-With' : 'XMLHttpRequest',\r\n\t\t'Accept' : 'application/octet-stream',\r\n\t\t'share-secret' : options.secret,\r\n\t\t'Authorization' : 'Bearer ' + accessToken\r\n\t};\r\n\tvar headers = options.headers || {};\r\n\tfor(var key in headers){\r\n\t\tinnerHeaer[key] = headers[key];\r\n\t}\r\n\tfor(var key in innerHeaer){\r\n\t\tif(innerHeaer[key]){\r\n\t\t\txhr.setRequestHeader(key, innerHeaer[key]);\r\n\t\t}\r\n\t}\r\n\txhr.send(null);\r\n};\r\n\r\nvar parseNameFromJidFn = function(jid,domain){\r\n\tdomain = domain || \"\";\r\n\tvar tempstr = jid;\r\n\tvar findex = tempstr.indexOf(\"_\");\r\n\tif(findex!=-1){\r\n\t\ttempstr = tempstr.substring(findex+1);\r\n\t}\r\n\tvar atindex = tempstr.indexOf(\"@\" + domain);\r\n\tif(atindex!=-1){\r\n\t\ttempstr = tempstr.substring(0,atindex);\r\n\t}\r\n\treturn tempstr;\r\n};\r\n\r\nvar parseTextMessageFn = function(message){\r\n\tvar receiveMsg = message;\r\n\tvar emessage = [];\r\n\tvar expr = /\\[[^[\\]]{2,3}\\]/mg;\r\n\tvar emotions = receiveMsg.match(expr);\r\n\tif (!emotions || emotions.length < 1){\r\n\t\treturn {\"isemotion\":false,\"body\":[{\"type\" : \"txt\",\"data\":message}]};\r\n\t}\r\n\tvar isemotion = false;\r\n\tfor (var i = 0; i < emotions.length; i++) {\r\n\t\tvar tmsg = receiveMsg.substring(0,receiveMsg.indexOf(emotions[i]));\r\n\t\tif (tmsg) {\r\n\t\t\temessage.push({\r\n\t\t\t\t\"type\" : \"txt\",\r\n\t\t\t\t\"data\" : tmsg\r\n\t\t\t});\r\n\t\t}\r\n\t\tvar emotion = emotionPicData[emotions[i]];\r\n\t\tif (emotion) {\r\n\t\t\tisemotion = true;\r\n\t\t\temessage.push({\r\n\t\t\t\t\"type\" : \"emotion\",\r\n\t\t\t\t\"data\" : emotion\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\temessage.push({\r\n\t\t\t\t\"type\" : \"txt\",\r\n\t\t\t\t\"data\" : emotions[i]\r\n\t\t\t});\r\n\t\t}\r\n\t\tvar restMsgIndex = receiveMsg.indexOf(emotions[i]) + emotions[i].length;\r\n\t\treceiveMsg = receiveMsg.substring(restMsgIndex);\r\n\t}\r\n\tif (receiveMsg) {\r\n\t\temessage.push({\r\n\t\t\t\"type\" : \"txt\",\r\n\t\t\t\"data\" : receiveMsg\r\n\t\t});\r\n\t}\r\n\tif(isemotion){\r\n\t\treturn {\"isemotion\":isemotion,\"body\":emessage};\r\n\t}\r\n\treturn {\"isemotion\":false,\"body\":[{\"type\" : \"txt\",\"data\":message}]};\r\n}\r\n\r\nvar parseResponseMessageFn = function(msginfo){\r\n\tvar parseMsgData = {errorMsg:true,data:[]};\r\n\t\r\n\tvar msgBodies = msginfo.getElementsByTagName(\"body\");\r\n\tif(msgBodies){\r\n\t\tfor (var i=0;i<msgBodies.length;i++){\r\n\t\t\tvar msgBody = msgBodies[i];\r\n\t\t\tvar childNodes = msgBody.childNodes;\r\n\t\t\tif(childNodes && childNodes.length>0){\r\n\t\t\t\tvar childNode = msgBody.childNodes[0];\r\n\t\t\t\tif(childNode.nodeType==Strophe.ElementType.TEXT){\r\n\t\t\t\t\tvar jsondata = childNode.wholeText ||childNode.nodeValue;\r\n\t\t\t\t\tjsondata = jsondata.replace('\\n','<br>');\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\tvar data = eval(\"(\"+jsondata+\")\");\r\n\t\t\t\t\t\tparseMsgData.errorMsg = false;\r\n\t\t\t\t\t\tparseMsgData.data = [data];\r\n\t\t\t\t\t}catch(e){\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar delayTags = msginfo.getElementsByTagName(\"delay\");\r\n\t\tif(delayTags && delayTags.length>0){\r\n\t\t\tvar delayTag = delayTags[0];\r\n\t\t\tvar delayMsgTime = delayTag.getAttribute(\"stamp\");\r\n\t\t\tif(delayMsgTime){\r\n\t\t\t\tparseMsgData.delayTimeStamp = delayMsgTime;\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\tvar childrens = msginfo.childNodes;\r\n\t\tif(childrens&&childrens.length>0){\r\n\t\t\tvar child = msginfo.childNodes[0];\r\n\t\t\tif(child.nodeType==Strophe.ElementType.TEXT){\r\n\t\t\t\ttry{\r\n\t\t\t\t\tvar data = eval(\"(\"+child.nodeValue+\")\");\r\n\t\t\t\t\tparseMsgData.errorMsg = false;\r\n\t\t\t\t\tparseMsgData.data = [data];\r\n\t\t\t\t} catch(e){\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn parseMsgData;\r\n};\r\nvar parseFriendFn = function(queryTag){\r\n\tvar rouster = [];\r\n\tvar items = queryTag.getElementsByTagName(\"item\");\r\n\tif(items){\r\n\t\tfor(var i=0;i<items.length;i++){\r\n\t\t\tvar item = items[i];\r\n\t\t\tvar jid = item.getAttribute('jid');\r\n\t\t\tif(!jid){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tvar subscription = item.getAttribute('subscription');\r\n\t\t\tvar friend = {\r\n\t\t\t\t\t\tsubscription : subscription,\r\n\t\t\t\t\t\tjid : jid\r\n\t\t\t};\r\n\t\t\tvar ask = item.getAttribute('ask');\r\n\t\t\tif(ask){\r\n\t\t\t\tfriend.ask = ask;\r\n\t\t\t}\r\n\t\t\tvar name = item.getAttribute('name');\r\n\t\t\tif(name){\r\n\t\t\t\tfriend.name = name;\r\n\t\t\t} else {\r\n\t\t\t\tvar n = parseNameFromJidFn(jid);\r\n\t\t\t\tfriend.name = n;\r\n\t\t\t}\r\n\t\t\tvar groups = [];\r\n\t\t\tStrophe.forEachChild(item, 'group',function(group){\r\n\t\t\t\tgroups.push(Strophe.getText(group));\r\n\t\t\t});\r\n\t\t\tfriend.groups = groups;\r\n\t\t\trouster.push(friend);\r\n\t\t}\r\n\t}\r\n\treturn rouster;\r\n};\r\nvar parseRoomFn = function(result){\r\n\tvar rooms = [];\r\n\tvar items = result.getElementsByTagName(\"item\");\r\n\tif(items){\r\n\t\tfor(var i=0;i<items.length;i++){\r\n\t\t\tvar item = items[i];\r\n\t\t\tvar roomJid = item.getAttribute('jid');\r\n\t\t\tvar tmp = roomJid.split(\"@\")[0];\r\n\t\t\tvar room = {\r\n\t\t\t\t\tjid : roomJid,\r\n\t\t\t\t\tname : item.getAttribute('name'),\r\n\t\t\t\t\troomId : tmp.split('_')[1] \r\n\t\t\t\t};\r\n\t\t\trooms.push(room);\r\n\t\t}\r\n\t}\r\n\treturn rooms;\r\n};\r\nvar parseRoomOccupantsFn = function(result){\r\n\tvar occupants = [];\r\n\tvar items = result.getElementsByTagName(\"item\");\r\n\tif(items){\r\n\t\tfor(var i=0;i<items.length;i++){\r\n\t\t\tvar item = items[i];\r\n\t\t\tvar room = {\r\n\t\t\t\t\tjid : item.getAttribute('jid'),\r\n\t\t\t\t\tname : item.getAttribute('name')\r\n\t\t\t\t};\r\n\t\t\toccupants.push(room);\r\n\t\t}\r\n\t}\r\n\treturn occupants;\r\n}\r\nvar login2UserGrid = function(options){\r\n\toptions = options || {};\r\n\r\n\tvar appKey = options.appKey || '';\r\n\tvar devInfos = appKey.split('#');\r\n\tif(devInfos.length!=2){\r\n\t\terror({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR,\r\n\t\t\tmsg : '请指定正确的开发者信息(appKey)'\r\n\t\t});\r\n\t\treturn false;\r\n\t}\r\n\tvar orgName = devInfos[0];\r\n\tvar appName = devInfos[1];\r\n\tif(!orgName){\r\n\t\terror({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR,\r\n\t\t\tmsg : '请指定正确的开发者信息(appKey)'\r\n\t\t});\r\n\t\treturn false;\r\n\t}\r\n\tif(!appName){\r\n\t\terror({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR,\r\n\t\t\tmsg : '请指定正确的开发者信息(appKey)'\r\n\t\t});\r\n\t\treturn false;\r\n\t}\r\n\tvar suc = options.success || emptyFn;\r\n\tvar error = options.error || emptyFn;\r\n\tvar user = options.user || '';\r\n\tvar pwd = options.pwd || '';\r\n\t\r\n\tvar https = options.https;\r\n\tvar url = https ? 'https://a1.easemob.com' : 'http://a1.easemob.com';\r\n\tvar apiUrl = options.apiUrl || url;\r\n\t\r\n\treturn dologin2UserGrid(apiUrl,user,pwd,orgName,appName,suc,error);\r\n};\r\nvar dologin2UserGrid = function(apiUrl,user,pwd,orgName,appName,suc,error) {\r\n\tvar loginJson = {\r\n\t\tgrant_type : 'password',\r\n\t\tusername : user,\r\n\t\tpassword : pwd\r\n\t};\r\n\tvar loginfo = JSON.stringify(loginJson);\r\n\t\r\n\tvar options = {\r\n\t\turl : apiUrl+\"/\"+orgName+\"/\"+appName+\"/token\",\r\n\t\tdataType : 'json',\r\n\t\tdata : loginfo,\r\n\t\tsuccess : suc || emptyFn,\r\n\t\terror : error || emptyFn\r\n\t};\r\n\tvar param = doAjaxRequest(options);\r\n\treturn param;\r\n};\r\nvar innerCheck = function(options,conn){\r\n\tif (conn.isOpened() || conn.isOpening()) {\r\n\t\tconn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_REOPEN_ERROR,\r\n\t\t\tmsg : '重复打开连接,请先关闭连接再打开'\r\n\t\t});\r\n\t\treturn false;\r\n\t}\r\n\toptions = options || {};\r\n\t\r\n\tvar user = options.user || '';\r\n\tif (options.user == '') {\r\n\t\tconn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_USER_NOT_ASSIGN_ERROR,\r\n\t\t\tmsg : '未指定用户'\r\n\t\t});\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar appKey = options.appKey || \"\";\r\n\tvar devInfos = appKey.split('#');\r\n\tif(devInfos.length!=2){\r\n\t\tconn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_ERROR,\r\n\t\t\tmsg : '请指定正确的开发者信息(appKey)'\r\n\t\t});\r\n\t\treturn false;\r\n\t}\r\n\tvar orgName = devInfos[0];\r\n\tvar appName = devInfos[1];\r\n\tif(!orgName){\r\n\t\tconn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_ERROR,\r\n\t\t\tmsg : '请指定正确的开发者信息(appKey)'\r\n\t\t});\r\n\t\treturn false;\r\n\t}\r\n\tif(!appName){\r\n\t\tconn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_ERROR,\r\n\t\t\tmsg : '请指定正确的开发者信息(appKey)'\r\n\t\t});\r\n\t\treturn false;\r\n\t}\r\n\tvar jid = appKey + \"_\" + user + \"@\" + conn.domain;// jid =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// {appkey}_{username}@domain/resource\r\n\t\r\n\tvar resource = options.resource || \"webim\";\r\n\tif(resource != \"\"){\r\n\t\tjid = jid + \"/\" + resource;\r\n\t}\r\n\tconn.context.jid = jid;\r\n\tconn.context.userId = user;\r\n\tconn.context.appKey = appKey;\r\n\tconn.context.appName = appName;\r\n\tconn.context.orgName = orgName;\r\n\treturn true;\r\n};\r\nvar parseMessageType = function(msginfo){\r\n\tvar msgtype = 'normal';\r\n\tvar receiveinfo = msginfo.getElementsByTagName(\"received\");\r\n\tif(receiveinfo && receiveinfo.length > 0 && receiveinfo[0].namespaceURI == \"urn:xmpp:receipts\"){\r\n\t\tmsgtype = 'received';\r\n    }else{\r\n    \tvar inviteinfo =  msginfo.getElementsByTagName(\"invite\");\r\n    \tif(inviteinfo && inviteinfo.length > 0){\r\n    \t\tmsgtype = 'invite';\r\n    \t}\r\n    }\r\n\treturn msgtype;\r\n};\r\nvar login2ImCallback = function (status,msg,conn){\r\n\tif (status == Strophe.Status.CONNFAIL){\r\n\t  conn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_SERVER_CLOSE_ERROR,\r\n\t\t\tmsg : msg\r\n\t\t});\r\n\t} else if ((status == Strophe.Status.ATTACHED) || (status == Strophe.Status.CONNECTED)){\r\n\t\tvar handleMessage = function(msginfo){\r\n\t\t\tvar type = parseMessageType(msginfo);\r\n\t\t\tif('received' == type){\r\n\t\t\t\tconn.handleReceivedMessage(msginfo);\r\n                return true;\r\n            }else if('invite' == type){\r\n            \tconn.handleInviteMessage(msginfo);\r\n            \treturn true;\r\n            }else{\r\n            \tconn.handleMessage(msginfo);\r\n            \treturn true;\r\n            }\r\n\t\t};\r\n\t\tvar handlePresence = function(msginfo){\r\n\t\t\tconn.handlePresence(msginfo);\r\n\t\t\treturn true;\r\n\t\t};\r\n\t\tvar handlePing = function(msginfo){\r\n\t\t\tconn.handlePing(msginfo);\r\n\t\t\treturn true;\r\n\t\t};\r\n\t\tvar handleIq = function(msginfo){\r\n\t\t\tconn.handleIq(msginfo);\r\n\t\t\treturn true;\r\n\t\t};\r\n\t\t\r\n\t\tconn.addHandler(handleMessage, null, 'message', null, null,  null);\r\n\t\tconn.addHandler(handlePresence, null, 'presence', null, null,  null);\r\n\t\tconn.addHandler(handlePing, \"urn:xmpp:ping\", 'iq', \"get\", null,  null);\r\n\t\tconn.addHandler(handleIq, \"jabber:iq:roster\", 'iq', \"set\", null,  null);\r\n\t\t\r\n\t\tconn.context.status = STATUS_OPENED;\r\n\t\tvar supportRecMessage = [\r\n           EASEMOB_IM_MESSAGE_REC_TEXT,\r\n           EASEMOB_IM_MESSAGE_REC_EMOTION ];\r\n\t\tif (isCanDownLoadFile) {\r\n\t\t\tsupportRecMessage.push(EASEMOB_IM_MESSAGE_REC_PHOTO);\r\n\t\t\tsupportRecMessage.push(EASEMOB_IM_MESSAGE_REC_AUDIO_FILE);\r\n\t\t}\r\n\t\tvar supportSedMessage = [ EASEMOB_IM_MESSAGE_SED_TEXT ];\r\n\t\tif (isCanUploadFile) {\r\n\t\t\tsupportSedMessage.push(EASEMOB_IM_MESSAGE_REC_PHOTO);\r\n\t\t\tsupportSedMessage.push(EASEMOB_IM_MESSAGE_REC_AUDIO_FILE);\r\n\t\t}\r\n\t\tconn.onOpened({\r\n\t\t\tcanReceive : supportRecMessage,\r\n\t\t\tcanSend : supportSedMessage,\r\n\t\t\taccessToken : conn.context.accessToken\r\n\t\t});\r\n\t} else if (status == Strophe.Status.DISCONNECTING) {\r\n\t\tif(conn.isOpened()){// 不是主动关闭\r\n\t\t\tconn.context.status = STATUS_CLOSING;\r\n\t\t\tconn.onError({\r\n\t\t\t\ttype : EASEMOB_IM_CONNCTION_SERVER_CLOSE_ERROR,\r\n\t\t\t\tmsg : msg\r\n\t\t\t});\r\n\t\t}\r\n\t} else if (status == Strophe.Status.DISCONNECTED) {\r\n\t\tconn.context.status = STATUS_CLOSED;\r\n\t\tconn.clear();\r\n\t\tconn.onClosed();\r\n\t} else if (status == Strophe.Status.AUTHFAIL){\r\n\t\tconn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_AUTH_ERROR,\r\n\t\t\tmsg : '登录失败,请输入正确的用户名和密码'\r\n\t\t});\r\n\t\tconn.clear();\r\n\t} else if(status == Strophe.Status.ERROR){\r\n\t\tconn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_SERVER_ERROR,\r\n\t\t\tmsg : msg || '服务器异常'\r\n\t\t});\r\n\t}\r\n};\r\nvar getJid = function(options,conn){\r\n\tvar jid = options.toJid || '';\r\n\tif(jid==''){\r\n\t\tvar appKey = conn.context.appKey || '';\r\n\t\tvar toJid = appKey + \"_\" + options.to + \"@\"\r\n\t\t\t\t+ conn.domain;\r\n\t\tif(options.resource){\r\n\t\t\ttoJid = toJid + \"/\" + options.resource;\r\n\t\t}\r\n\t\tjid = toJid;\r\n\t}\r\n\treturn jid;\r\n};\r\n\r\ntempIndex = 0;\r\nvar STATUS_INIT = tempIndex++;\r\nvar STATUS_DOLOGIN_USERGRID = tempIndex++;\r\nvar STATUS_DOLOGIN_IM = tempIndex++;\r\nvar STATUS_OPENED = tempIndex++;\r\nvar STATUS_CLOSING = tempIndex++;\r\nvar STATUS_CLOSED = tempIndex++;\r\n\r\nvar connection = function() {\r\n}\r\nconnection.prototype.init = function(options) {\r\n\tvar prefix = options.https ? 'https' : 'http';\r\n\tthis.url = options.url || prefix + '://im-api.easemob.com/http-bind/';\r\n\tthis.https = options.https || false;\r\n\tthis.wait = options.wait || 60;\r\n\tthis.hold = options.hold || 1;\r\n\tif(options.route){\r\n\t\tthis.route = options.route;\r\n\t}\r\n\r\n\tthis.domain = options.domain || \"easemob.com\";\r\n\tthis.inactivity = options.inactivity || 60;\r\n\tthis.maxRetries = options.maxRetries || 5;\r\n\tthis.pollingTime = options.pollingTime || 800;\r\n\tthis.stropheConn = false;\r\n\t\r\n\tthis.onOpened = options.onOpened || emptyFn;\r\n\tthis.onClosed = options.onClosed || emptyFn;\r\n\tthis.onTextMessage = options.onTextMessage || emptyFn;\r\n\tthis.onEmotionMessage = options.onEmotionMessage || emptyFn;\r\n\tthis.onPictureMessage = options.onPictureMessage || emptyFn;\r\n\tthis.onAudioMessage = options.onAudioMessage || emptyFn;\r\n\tthis.onVideoMessage = options.onVideoMessage || emptyFn;\r\n\tthis.onFileMessage = options.onFileMessage || emptyFn;\r\n\tthis.onLocationMessage = options.onLocationMessage || emptyFn;\r\n\tthis.onCmdMessage = options.onCmdMessage || emptyFn;\r\n\tthis.onPresence = options.onPresence || emptyFn;\r\n\tthis.onRoster = options.onRoster || emptyFn;\r\n\tthis.onError = options.onError || emptyFn;\r\n\tthis.onReceivedMessage = options.onReceivedMessage || emptyFn;\r\n\tthis.onInviteMessage = options.onInviteMessage || emptyFn;\r\n\t\r\n\tthis.context = {\r\n\t\tstatus : STATUS_INIT\r\n\t};\r\n}\r\nvar dologin2IM = function(options,conn){ \r\n\tvar accessToken = options.access_token || '';\r\n\tif(accessToken == ''){\r\n\t\tvar loginfo = JSON.stringify(options);\r\n\t\tconn.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR,\r\n\t\t\tmsg : \"登录失败,\"+ loginfo,\r\n\t\t\tdata : options,\r\n\t\t\txhr : xhr\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\tconn.context.accessToken = options.access_token;\r\n\tconn.context.accessTokenExpires = options.expires_in;\r\n\tvar stropheConn = new Strophe.Connection(conn.url,{\r\n\t\t\t\t\t\tinactivity : conn.inactivity,\r\n\t\t\t\t\t\tmaxRetries : conn.maxRetries,\r\n\t\t\t\t\t\tpollingTime : conn.pollingTime\r\n\t});\r\n\tvar callback = function(status,msg){\r\n\t\tlogin2ImCallback(status,msg,conn);\r\n\t};\r\n\tvar jid = conn.context.jid;\r\n\tconn.context.stropheConn = stropheConn;\r\n\tif(conn.route){\r\n\t\tstropheConn.connect(jid,\"$t$\" + accessToken,callback,conn.wait,conn.hold,conn.route);\r\n\t} else {\r\n\t\tstropheConn.connect(jid,\"$t$\" + accessToken,callback,conn.wait,conn.hold);\r\n\t}\r\n\r\n};\r\n// user, pwd, appKey, resource\r\nconnection.prototype.open = function(options) {\r\n\tvar pass = innerCheck(options,this);\r\n\tif(pass == false){\r\n\t\treturn;\r\n\t}\r\n\tvar conn = this;\r\n\tif(options.accessToken){\r\n\t\toptions.access_token = options.accessToken;\r\n\t\tdologin2IM(options,conn);\r\n\t}else{\r\n\t\tvar loginUrl = this.https ? \"https://a1.easemob.com\" : \"http://a1.easemob.com\";\r\n\t\tvar apiUrl = options.apiUrl || loginUrl;\r\n\t\tvar userId = this.context.userId;\r\n\t\tvar pwd = options.pwd || '';\r\n\t\tvar appName = this.context.appName;\r\n\t\tvar orgName = this.context.orgName;\r\n\t\t\r\n\t\tvar suc = function(data,xhr){\r\n\t\t\tconn.context.status = STATUS_DOLOGIN_IM;\r\n\t\t\tdologin2IM(data,conn);\r\n\t\t};\r\n\t\tvar error = function(res,xhr,msg){\r\n\t\t\tif(res.error && res.error_description){\r\n\t\t\t\tconn.onError({\r\n\t\t\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR,\r\n\t\t\t\t\tmsg : \"登录失败,\"+res.error_description,\r\n\t\t\t\t\tdata : res,\r\n\t\t\t\t\txhr : xhr\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tconn.onError({\r\n\t\t\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_USERGRID_ERROR,\r\n\t\t\t\t\tmsg : \"登录失败\",\r\n\t\t\t\t\tdata : res,\r\n\t\t\t\t\txhr : xhr\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tconn.clear();\r\n\t\t};\r\n\t\tthis.context.status = STATUS_DOLOGIN_USERGRID;\r\n\t\tdologin2UserGrid(apiUrl,userId,pwd,orgName,appName,suc,error);\r\n\t}\r\n};\r\nconnection.prototype.attach = function(options) {\r\n\tvar pass = innerCheck(options,this);\r\n\tif(pass == false)\r\n\t\treturn;{\r\n\t}\r\n\toptions = options || {};\r\n\t\r\n\tvar accessToken = options.accessToken || '';\r\n\tif(accessToken == ''){\r\n\t\tthis.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_ATTACH_USERGRID_ERROR,\r\n\t\t\tmsg : '未指定用户的accessToken'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar sid = options.sid || '';\r\n\tif(sid == ''){\r\n\t\tthis.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_ATTACH_ERROR,\r\n\t\t\tmsg : '未指定用户的会话信息'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\t\r\n\tvar rid = options.rid || '';\r\n\tif(rid == ''){\r\n\t\tthis.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_ATTACH_ERROR,\r\n\t\t\tmsg : '未指定用户的消息id'\r\n\t\t});\r\n\t\treturn;\r\n\t}\r\n\t\r\n\tvar stropheConn = new Strophe.Connection(this.url,{\r\n\t\t\t\t\t\tinactivity : this.inactivity,\r\n\t\t\t\t\t\tmaxRetries : this.maxRetries,\r\n\t\t\t\t\t\tpollingTime : this.pollingTime\r\n\t});\r\n\t\r\n\tthis.context.accessToken = accessToken;\r\n\tthis.context.stropheConn = stropheConn;\r\n\tthis.context.status = STATUS_DOLOGIN_IM;\r\n\t\r\n\tvar conn = this;\r\n\tvar callback = function(status,msg){\r\n\t\tlogin2ImCallback(status,msg,conn);\r\n\t};\r\n\tvar jid = this.context.jid;\r\n\tvar wait = this.wait;\r\n\tvar hold = this.hold;\r\n\tvar wind = this.wind || 5;\r\n\tstropheConn.attach(jid, sid, rid, callback, wait, hold, wind);\r\n};\r\nconnection.prototype.close = function() {\r\n\tvar status = this.context.status;\r\n\tif (status==STATUS_INIT) {\r\n\t\treturn;\r\n\t}\r\n\tif(this.isClosed() || this.isClosing()){\r\n\t\treturn;\r\n\t}\r\n\tthis.context.status = STATUS_CLOSING;\r\n\tthis.context.stropheConn.disconnect();\r\n};\r\n// see stropheConn.addHandler\r\nconnection.prototype.addHandler = function (handler, ns, name, type, id, from, options){\r\n\tthis.context.stropheConn.addHandler(handler, ns, name, type, id, from, options);\r\n};\r\nconnection.prototype.handlePresence = function(msginfo){\r\n\tif(this.isClosed()){\r\n\t\treturn;\r\n\t}\r\n\tvar from = msginfo.getAttribute('from') || '';\r\n\tvar to = msginfo.getAttribute('to') || '';\r\n\tvar type = msginfo.getAttribute('type') || '';\r\n\tvar fromUser = parseNameFromJidFn(from);\r\n\tvar toUser = parseNameFromJidFn(to);\r\n\tvar info = {\r\n\t\tfrom: fromUser,\r\n\t\tto : toUser,\r\n\t\tfromJid : from,\r\n\t\ttoJid : to,\r\n\t\ttype : type\r\n\t};\r\n\t\r\n\tvar showTags = msginfo.getElementsByTagName(\"show\");\r\n\tif(showTags && showTags.length>0){\r\n\t\tvar showTag = showTags[0];\r\n\t\tinfo.show = Strophe.getText(showTag);\r\n\t}\r\n\tvar statusTags = msginfo.getElementsByTagName(\"status\");\r\n\tif(statusTags && statusTags.length>0){\r\n\t\tvar statusTag = statusTags[0];\r\n\t\tinfo.status = Strophe.getText(statusTag);\r\n\t}\r\n\t\r\n\tvar priorityTags = msginfo.getElementsByTagName(\"priority\");\r\n\tif(priorityTags && priorityTags.length>0){\r\n\t\tvar priorityTag = priorityTags[0];\r\n\t\tinfo.priority  = Strophe.getText(priorityTag);\r\n\t}\r\n\tthis.onPresence(info,msginfo);\r\n};\r\nconnection.prototype.handlePing = function(e) {\r\n\tif(this.isClosed()){\r\n\t\treturn;\r\n\t}\r\n\tvar id = e.getAttribute('id');\r\n\tvar from = e.getAttribute('from');\r\n\tvar to = e.getAttribute('to');\r\n\tvar dom = $iq({\r\n\t\t\t\tfrom : to,\r\n\t\t\t\tto : from,\r\n\t\t\t\tid : id,\r\n\t\t\t\ttype : 'result'\r\n\t});\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.handleIq = function(e) {\r\n\tvar id = e.getAttribute('id');\r\n\tvar from = e.getAttribute('from') || '';\r\n\tvar name = parseNameFromJidFn(from);\r\n\tvar curJid = this.context.jid;\r\n\tvar curUser = this.context.userId;\r\n\tif (from !== \"\" && from != curJid && curUser != name)\r\n\t\treturn true;\r\n\t\t\r\n\tvar iqresult = $iq({type: 'result', id: id, from: curJid});\r\n\tthis.sendCommand(iqresult.tree());\r\n\t\r\n\tvar msgBodies = e.getElementsByTagName(\"query\");\r\n\tif(msgBodies&&msgBodies.length>0){\r\n\t\tvar queryTag = msgBodies[0];\r\n\t\tvar rouster = parseFriendFn(queryTag);\r\n\t\tthis.onRoster(rouster);\r\n\t}\r\n\treturn true;\r\n};\r\nconnection.prototype.handleMessage = function(msginfo){\r\n\tif(this.isClosed()){\r\n\t\treturn;\r\n\t}\r\n\tvar id = msginfo.getAttribute('id') || '';\r\n\tthis.sendReceiptsMessage({\r\n\t\tid : id\r\n\t});\r\n\tvar parseMsgData = parseResponseMessageFn(msginfo);\r\n\tif(parseMsgData.errorMsg){\r\n\t\treturn;\r\n\t}\r\n\tvar msgDatas = parseMsgData.data;\r\n\tfor(var i in msgDatas){\r\n\t\tvar msg = msgDatas[i];\r\n\t\tvar from = msg.from;\r\n\t\tvar too = msg.to;\r\n\t\tvar extmsg = msg.ext || {};\r\n\t\tvar chattype = msginfo.getAttribute('type') || 'chat';\r\n\t\tvar msgBodies = msg.bodies;\r\n\t\tif(!msgBodies || msgBodies.length==0){\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tvar msgBody = msg.bodies[0];\r\n\t\tvar type = msgBody.type;\r\n\t\tif (\"txt\" == type) {\r\n\t\t\tvar receiveMsg = msgBody.msg;\r\n\t\t\tvar emotionsbody = parseTextMessageFn(receiveMsg);\r\n\t\t\tif(emotionsbody.isemotion){\r\n\t\t\t\tthis.onEmotionMessage({\r\n\t\t\t\t\ttype : chattype,\r\n\t\t\t\t\tfrom : from,\r\n\t\t\t\t\tto : too,\r\n\t\t\t\t\tdata : emotionsbody.body,\r\n\t\t\t\t\text : extmsg\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.onTextMessage({\r\n\t\t\t\t\ttype : chattype,\r\n\t\t\t\t\tfrom : from,\r\n\t\t\t\t\tto : too,\r\n\t\t\t\t\tdata : receiveMsg,\r\n\t\t\t\t\text : extmsg\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else if (\"img\" == type) {\r\n\t\t\tvar rwidth = 0;\r\n\t\t\tvar rheight = 0;\r\n\t\t\tif(msgBody.size){\r\n\t\t\t\trwidth = msgBody.size.width;\r\n\t\t\t\trheight = msgBody.size.height;\r\n\t\t\t}\r\n\t\t\tvar msg = {\r\n\t\t\t\ttype : chattype,\r\n\t\t\t\tfrom : from,\r\n\t\t\t\tto : too,\r\n\t\t\t\turl : msgBody.url,\r\n\t\t\t\tsecret : msgBody.secret,\r\n\t\t\t\tfilename : msgBody.filename,\r\n\t\t\t\tthumb : msgBody.thumb,\r\n\t\t\t\tthumb_secret : msgBody.thumb_secret,\r\n\t\t\t\tfile_length : msgBody.file_length||'',\r\n\t\t\t\twidth : rwidth,\r\n\t\t\t\theight : rheight,\r\n\t\t\t\tfiletype : msgBody.filetype||'',\r\n\t\t\t\taccessToken : this.context.accessToken || '',\r\n\t\t\t\text : extmsg\r\n\t\t\t};\r\n\t\t\tthis.onPictureMessage(msg);\r\n\t\t} else if (\"audio\" == type) {\r\n\t\t\tthis.onAudioMessage({\r\n\t\t\t\ttype : chattype,\r\n\t\t\t\tfrom : from,\r\n\t\t\t\tto : too,\r\n\t\t\t\turl : msgBody.url,\r\n\t\t\t\tsecret : msgBody.secret,\r\n\t\t\t\tfilename : msgBody.filename,\r\n\t\t\t\tlength : msgBody.length||'',\r\n\t\t\t\tfile_length : msgBody.file_length||'',\r\n\t\t\t\tfiletype : msgBody.filetype||'',\r\n\t\t\t\taccessToken : this.context.accessToken || '',\r\n\t\t\t\text : extmsg\r\n\t\t\t});\r\n\t\t} else if (\"file\" == type) {\r\n\t\t\tthis.onFileMessage({\r\n\t\t\t\ttype : chattype,\r\n\t\t\t\tfrom : from,\r\n\t\t\t\tto : too,\r\n\t\t\t\turl : msgBody.url,\r\n\t\t\t\tsecret : msgBody.secret,\r\n\t\t\t\tfilename : msgBody.filename,\r\n\t\t\t\tfile_length : msgBody.file_length,\r\n\t\t\t\taccessToken : this.context.accessToken || '',\r\n\t\t\t\text : extmsg\r\n\t\t\t});\r\n\t\t} else if (\"loc\" == type) {\r\n\t\t\tthis.onLocationMessage({\r\n\t\t\t\ttype : chattype,\r\n\t\t\t\tfrom : from,\r\n\t\t\t\tto : too,\r\n\t\t\t\taddr : msgBody.addr,\r\n\t\t\t\tlat : msgBody.lat,\r\n\t\t\t\tlng : msgBody.lng,\r\n\t\t\t\text : extmsg\r\n\t\t\t});\r\n\t\t}else if(\"video\" == type){\r\n\t\t\tthis.onVideoMessage({\r\n\t\t\t\ttype : chattype,\r\n\t\t\t\tfrom : from,\r\n\t\t\t\tto : too,\r\n\t\t\t\turl : msgBody.url,\r\n\t\t\t\tsecret : msgBody.secret,\r\n\t\t\t\tfilename : msgBody.filename,\r\n\t\t\t\tfile_length : msgBody.file_length,\r\n\t\t\t\taccessToken : this.context.accessToken || '',\r\n\t\t\t\text : extmsg\r\n\t\t\t});\r\n\t\t}else if(\"cmd\" == type){\r\n\t\t\tthis.onCmdMessage({\r\n\t\t\t\tfrom : from,\r\n\t\t\t\tto : too,\r\n\t\t\t\taction : msgBody.action,\r\n\t\t\t\text : extmsg\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\nconnection.prototype.handleReceivedMessage = function(message){\r\n\tthis.onReceivedMessage(message);\r\n};\r\nconnection.prototype.handleInviteMessage = function(message){\r\n\tvar form = null;\r\n\tvar invitemsg = message.getElementsByTagName('invite');\r\n\tif(invitemsg && invitemsg.length>0){\r\n\t\tvar fromJid = invitemsg[0].getAttribute('from');\r\n\t\tform = parseNameFromJidFn(fromJid);\r\n\t}\r\n\tvar xmsg = message.getElementsByTagName('x');\r\n\tvar roomid = null;\r\n\tif(xmsg && xmsg.length > 0){\r\n\t\tfor(var i = 0; i < xmsg.length; i++){\r\n\t\t\tif('jabber:x:conference' == xmsg[i].namespaceURI){\r\n\t\t\t\tvar roomjid = xmsg[i].getAttribute('jid');\r\n\t\t\t\troomid = parseNameFromJidFn(roomjid);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tthis.onInviteMessage({\r\n\t\ttype : 'invite',\r\n\t\tfrom : form,\r\n\t\troomid : roomid\r\n\t});\r\n};\r\nconnection.prototype.sendCommand = function(dom) {\r\n\tif(this.isOpened()){\r\n\t\tthis.context.stropheConn.send(dom);\r\n\t} else {\r\n\t\tthis.onError({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_ERROR,\r\n\t\t\tmsg : '连接还未建立,请先登录或等待登录处理完毕'\r\n\t\t});\r\n\t}\r\n};\r\nconnection.prototype.getUniqueId = function (prefix)\r\n{\r\n\tvar cdate = new Date();\r\n\tvar offdate = new Date(2010,1,1);\r\n\t\tvar offset = cdate.getTime()-offdate.getTime();\r\n\t\tvar hexd = parseInt(offset).toString(16);\r\n    if (typeof(prefix) == \"string\" || typeof(prefix) == \"number\") {\r\n        return prefix+\"_\"+hexd;\r\n    } else {\r\n        return 'WEBIM_'+hexd;\r\n    }\r\n};\r\nconnection.prototype.sendTextMessage = function(options) {\r\n\tvar appKey = this.context.appKey || '';\r\n\tvar toJid = appKey + \"_\" + options.to + \"@\"\t+ this.domain;\r\n\tif(options.type && options.type == 'groupchat'){\r\n\t\ttoJid = appKey + \"_\"+options.to+'@conference.' + this.domain;\r\n\t}\r\n\tif(options.resource){\r\n\t\ttoJid = toJid + \"/\" + options.resource;\r\n\t}\r\n\tvar msgTxt = options.msg;\r\n\tvar json = {\r\n\t\tfrom : this.context.userId || '',\r\n\t\tto : \toptions.to,\r\n\t\tbodies : [{\r\n\t\t\ttype : \"txt\",\r\n\t\t\tmsg : msgTxt\r\n\t\t}],\r\n\t\text : options.ext || {}\r\n\t};\r\n\tvar jsonstr = JSON.stringify(json);\r\n\tvar dom = $msg({\r\n\t\tto : toJid, \r\n\t\ttype : options.type || 'chat', \r\n\t\tid : this.getUniqueId(),\r\n\t\txmlns : \"jabber:client\"\r\n\t}).c(\"body\").t(jsonstr);\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.sendPicture = function(options) {\r\n\tvar onerror =  options.onFileUploadError || this.onError || emptyFn;\r\n\tif(!isCanUploadFile){\r\n\t  onerror({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_BROWSER_ERROR,\r\n\t\t\tmsg : '当前浏览器不支持异步上传文件,请换用其他浏览器'\r\n\t\t});\r\n\t  return;\r\n\t}\r\n\tvar conn = this;\r\n\tvar onFileUploadComplete = options.onFileUploadComplete || emptyFn;\r\n\tvar myUploadComplete = function(data) {\r\n\t\toptions[\"url\"] = data.uri;\r\n\t\toptions[\"secret\"] = data.entities[0][\"share-secret\"];\r\n\t\tif(data.entities[0][\"file-metadata\"]){\r\n\t\t\tvar file_len = data.entities[0][\"file-metadata\"][\"content-length\"];\r\n\t\t\toptions[\"file_length\"] = file_len;\r\n\t\t\toptions[\"filetype\"] = data.entities[0][\"file-metadata\"][\"content-type\"]\r\n\t\t\tif (file_len > 204800) {\r\n\t\t\t\toptions[\"thumbnail\"] = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\toptions[\"uuid\"] = data.entities[0].uuid;\r\n\t\t\r\n\t\tonFileUploadComplete(data);\r\n\t\tconn.sendPictureMessage(options);\r\n\t};\r\n\toptions.onFileUploadComplete = myUploadComplete;\r\n\toptions.onFileUploadError = options.onFileUploadError|| this.onError || emptyFn;\r\n\r\n\tvar image = new Image();\r\n\tvar imageLoadFn = function() {\r\n\t\timage.onload = null;\r\n\t\tif (!this.readyState || this.readyState == 'loaded'\r\n\t\t\t\t|| this.readyState == 'complete') {\r\n\t\t\tvar heigth = image.height;\r\n\t\t\tvar width = image.width;\r\n\t\t\toptions.height = heigth;\r\n\t\t\toptions.width = width;\r\n\t\t\toptions.appName = conn.context.appName || '';\r\n\t\t\toptions.orgName = conn.context.orgName || '';\r\n\t\t\toptions.accessToken = conn.context.accessToken || '';\r\n\t\t\tuploadFn(options);\r\n\t\t};\r\n\t};\r\n\tif(\"onload\" in image){\r\n\t\timage.onload = imageLoadFn;\r\n\t} else {\r\n\t\timage.onreadystatechange = imageLoadFn;\r\n\t}\r\n\timage.onerror = function() {\r\n\t\timage.onerror = function(){\r\n\t\t\timage.onerror = null;\r\n\t\t\toptions.onFileUploadError({\r\n\t\t\t\ttype : EASEMOB_IM_UPLOADFILE_ERROR,\r\n\t\t\t\tmsg : '指定的图片不存在或者不是一个图片格式文件'\r\n\t\t\t});\r\n\t\t};\r\n\t\timage.src = document.getElementById(options.fileInputId).value;\r\n\t};\r\n\tvar picId = options.fileInputId;\r\n\tfile = getFileUrlFn(picId);\r\n\toptions.fileInfo = file;\r\n\toptions.filename = file.filename;\r\n\t\r\n\tif (!file.url) {\r\n\t\toptions.onFileUploadError({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_NO_FILE,\r\n\t\t\tmsg : '未选择上传文件'\r\n\t\t});\r\n\t} else {\r\n\t\timage.src = file.url;\r\n\t}\r\n};\r\nconnection.prototype.sendPictureMessage = function(options) {\r\n\tvar appKey = this.context.appKey || '';\r\n\tvar toJid = appKey + \"_\" + options.to + \"@\"\t+ this.domain;\r\n\tif(options.type && options.type == 'groupchat'){\r\n\t\ttoJid = appKey + \"_\"+options.to+'@conference.' + this.domain;\r\n\t}\r\n\tif(options.resource){\r\n\t\ttoJid = toJid + \"/\" + options.resource;\r\n\t}\r\n\t\r\n\tvar json = {\r\n\t\t\t\tfrom : this.context.userId || '',\r\n\t\t\t\tto : \toptions.to,\r\n\t\t\t\tbodies :[{\r\n\t\t\t\t\t\ttype : \"img\",\r\n\t\t\t\t\t\turl : options.url + '/' + options.uuid,\r\n\t\t\t\t\t\tsecret : options.secret,\r\n\t\t\t\t\t\tfilename : options.filename,\r\n\t\t\t\t\t\tthumb : options.url + '/' + options.uuid,\r\n\t\t\t\t\t\tthumb_secret : '',\r\n\t\t\t\t\t\tsize : {\r\n\t\t\t\t\t\t\twidth : options.width,\r\n\t\t\t\t\t\t\theight : options.height\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"file_length\" : options.file_length,\r\n\t\t\t\t\t\tfiletype : options.filetype\r\n\t\t\t\t}],\r\n\t\t\t\text : options.ext || {}\r\n\t};\r\n\tvar jsonstr = JSON.stringify(json);\r\n\tvar date = new Date();\r\n\tvar dom = $msg({\r\n\t\t\t\ttype : options.type || 'chat',\r\n\t\t\t\tto : toJid,\r\n\t\t\t\tid : this.getUniqueId(),\r\n\t\t\t\txmlns : \"jabber:client\"\r\n\t}).c(\"body\").t(jsonstr);\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.sendAudio = function(options) {\r\n\tvar onerror =  options.onFileUploadError || this.onError || emptyFn;\r\n\tif(!isCanUploadFile){\r\n\t  onerror({\r\n\t\t\ttype : EASEMOB_IM_UPLOADFILE_BROWSER_ERROR,\r\n\t\t\tmsg : '当前浏览器不支持异步上传文件,请换用其他浏览器'\r\n\t\t});\r\n\t  return;\r\n\t}\r\n\tvar conn = this;\r\n\tvar onFileUploadComplete = options.onFileUploadComplete || emptyFn;\r\n\tvar myonComplete = function(data) {\r\n\t\tonFileUploadComplete(data);\r\n\t\toptions[\"url\"] = data.uri;\r\n\t\toptions[\"secret\"] = data.entities[0][\"share-secret\"];\r\n\t\tif(data.entities[0][\"file-metadata\"]){\r\n\t\t\toptions[\"file_length\"] = data.entities[0][\"file-metadata\"][\"content-length\"];\r\n\t\t\toptions[\"filetype\"] = data.entities[0][\"file-metadata\"][\"content-type\"];\r\n\t\t}\r\n\t\toptions[\"uuid\"] = data.entities[0].uuid;\r\n\t\toptions[\"length\"] = data.duration;\r\n\t\tconn.sendAudioMessage(options);\r\n\t};\r\n\toptions.appName = this.context.appName || '';\r\n\toptions.orgName = this.context.orgName || '';\r\n\toptions.accessToken = this.context.accessToken || '';\r\n\toptions.onFileUploadComplete = myonComplete;\r\n\t\t\t\r\n\tvar file = getFileUrlFn(options.fileInputId);\r\n\toptions.fileInfo = file;\r\n\toptions.filename = file.filename;\r\n\t\r\n\tuploadFn(options, this);\r\n};\r\nconnection.prototype.sendAudioMessage = function(options) {\r\n\tvar appKey = this.context.appKey || '';\r\n\tvar toJid = appKey + \"_\" + options.to + \"@\"\t+ this.domain;\r\n\tif(options.type && options.type == 'groupchat'){\r\n\t\ttoJid =appKey + \"_\"+options.to+'@conference.' + this.domain;\r\n\t}\r\n\tif(options.resource){\r\n\t\ttoJid = toJid + \"/\" + options.resource;\r\n\t}\r\n\t\r\n\tvar json = {\r\n\t\t\t\tfrom : this.context.userId || '',\r\n\t\t\t\tto : \toptions.to,\r\n\t\t\t\tbodies :[{\r\n\t\t\t\t\t\ttype : \"audio\",\r\n\t\t\t\t\t\turl : options.url + '/' + options.uuid,\r\n\t\t\t\t\t\tsecret : options.secret,\r\n\t\t\t\t\t\tfilename : options.filename,\r\n\t\t\t\t\t\t\"file_length\" : options.file_length,\r\n\t\t\t\t\t\tlength : options.length\r\n\t\t\t\t}],\r\n\t\t\t\text : options.ext || {}\r\n\t};\r\n\tvar jsonstr = JSON.stringify(json);\r\n\tvar dom = $msg({\r\n\t\t\t\ttype : options.type || 'chat',\r\n\t\t\t\tto : toJid,\r\n\t\t\t\tid : this.getUniqueId(),\r\n\t\t\t\txmlns : \"jabber:client\"\r\n\t}).c(\"body\").t(jsonstr);\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.sendFileMessage = function(options) {\r\n\tvar appKey = this.context.appKey || '';\r\n\tvar toJid = appKey + \"_\" + options.to + \"@\"\t+ this.domain;\r\n\tif(options.type && options.type == 'groupchat'){\r\n\t\ttoJid =appKey + \"_\"+options.to+'@conference.' + this.domain;\r\n\t}\r\n\t\r\n\tif(options.resource){\r\n\t\ttoJid = toJid + \"/\" + options.resource;\r\n\t}\r\n\tvar json = {\r\n\t\t\t\tfrom : this.context.userId || '',\r\n\t\t\t\tto : \toptions.to,\r\n\t\t\t\tbodies :[{\r\n\t\t\t\t\t\ttype : \"file\",\r\n\t\t\t\t\t\turl : options.url,\r\n\t\t\t\t\t\tsecret : options.secret,\r\n\t\t\t\t\t\tfilename : options.filename,\r\n\t\t\t\t\t\t\"file_length\" : options.file_length\r\n\t\t\t\t}],\r\n\t\t\t\text : options.ext || {}\r\n\t};\r\n\tvar jsonstr = JSON.stringify(json);\r\n\tvar dom = $msg({\r\n\t\t\t\ttype : 'chat',\r\n\t\t\t\tto : toJid,\r\n\t\t\t\tid : this.getUniqueId(),\r\n\t\t\t\txmlns : \"jabber:client\"\r\n\t}).c(\"body\").t(jsonstr);\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.sendLocationMessage = function(options) {\r\n\tvar appKey = this.context.appKey || '';\r\n\tvar toJid = appKey + \"_\" + options.to + \"@\"\t+ this.domain;\r\n\tif(options.type && options.type == 'groupchat'){\r\n\t\ttoJid =appKey + \"_\"+options.to+'@conference.' + this.domain;\r\n\t}\r\n\t\r\n\tif(options.resource){\r\n\t\ttoJid = toJid + \"/\" + options.resource;\r\n\t}\r\n\tvar json = {\r\n\t\t\t\tfrom : this.context.userId || '',\r\n\t\t\t\tto : \toptions.to,\r\n\t\t\t\tbodies :[{\r\n\t\t\t\t\t\ttype : \"loc\",\r\n\t\t\t\t\t\taddr : options.addr,\r\n\t\t\t\t\t\tlat : options.lat,\r\n\t\t\t\t\t\tlng : options.lng\r\n\t\t\t\t}],\r\n\t\t\t\text : options.ext || {}\r\n\t};\r\n\tvar jsonstr = JSON.stringify(json);\r\n\tvar dom = $msg({\r\n\t\t\t\ttype : 'chat',\r\n\t\t\t\tto : toJid,\r\n\t\t\t\tid : this.getUniqueId(),\r\n\t\t\t\txmlns : \"jabber:client\"\r\n\t}).c(\"body\").t(jsonstr);\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.sendReceiptsMessage = function(options){\r\n\tvar dom = $msg({\r\n\t\t\t\tfrom : this.context.jid || '',\r\n\t\t\t\tto : \"easemob.com\",\r\n\t\t\t\tid : options.id || ''\r\n\t}).c(\"received\",{\r\n\t\t\t\txmlns : \"urn:xmpp:receipts\",\r\n\t\t\t\tid : options.id || ''\r\n\t\t\t});\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.addRoster = function(options){\r\n\tvar jid = getJid(options,this);\r\n\tvar name = options.name || '';\r\n\tvar groups = options.groups || '';\r\n\r\n\tvar iq = $iq({type : 'set'});\r\n\tiq.c(\"query\",{xmlns:'jabber:iq:roster'});\r\n\tiq.c(\"item\",{jid: jid ,name : name});\r\n\t\r\n\tif(groups){\r\n\t\tfor (var i = 0; i < groups.length; i++){\r\n\t\t\tiq.c('group').t(groups[i]).up();\r\n\t\t}\r\n\t}\r\n\tvar suc = options.success || emptyFn;\r\n\tvar error = options.error || emptyFn;\r\n\tthis.context.stropheConn.sendIQ(iq.tree(),suc,error);\r\n};\r\nconnection.prototype.removeRoster = function(options){\r\n\tvar jid = getJid(options,this);\r\n\tvar iq = $iq({type: 'set'}).c('query', {xmlns : \"jabber:iq:roster\"}).c('item', {jid: jid,subscription: \"remove\"});\r\n\t\r\n\tvar suc = options.success || emptyFn;\r\n\tvar error = options.error || emptyFn;\r\n\tthis.context.stropheConn.sendIQ(iq,suc,error);\r\n};\r\nconnection.prototype.getRoster = function(options) {\r\n\tvar conn = this;\r\n\tvar dom  = $iq({\r\n      \ttype: 'get'\r\n  }).c('query', {xmlns: 'jabber:iq:roster'});\r\n\r\n\toptions = options || {};\r\n\tsuc = options.success || this.onRoster; \r\n  var completeFn = function(ele){\r\n  \tvar rouster = [];\r\n\t\tvar msgBodies = ele.getElementsByTagName(\"query\");\r\n\t\tif(msgBodies&&msgBodies.length>0){\r\n\t\t\tvar queryTag = msgBodies[0];\r\n\t\t\trouster = parseFriendFn(queryTag);\r\n\t\t}\r\n  \tsuc(rouster,ele);\r\n  };\r\n  error = options.error || this.onError;\r\n  var failFn = function(ele){\r\n\t\terror({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_GETROSTER_ERROR,\r\n\t\t\tmsg : '获取联系人信息失败',\r\n\t\t\tdata : ele\r\n\t\t});\r\n  };\r\n\tif(this.isOpened()){\r\n\t\tthis.context.stropheConn.sendIQ(dom.tree(),completeFn,failFn);\r\n\t} else {\r\n\t\terror({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_ERROR,\r\n\t\t\tmsg : '连接还未建立,请先登录或等待登录处理完毕'\r\n\t\t});\r\n\t}\r\n};\r\nconnection.prototype.subscribe = function(options) {\r\n\tvar jid = getJid(options,this);\r\n\tvar pres = $pres({to: jid, type: \"subscribe\"});\r\n\tif (options.message) {\r\n\t\tpres.c(\"status\").t(options.message).up();\r\n\t}\r\n\tif (options.nick) {\r\n\t\tpres.c('nick', {'xmlns': \"http://jabber.org/protocol/nick\"}).t(options.nick);\r\n\t}\r\n\tthis.sendCommand(pres.tree());\r\n};\r\nconnection.prototype.subscribed = function(options) {\r\n\tvar jid = getJid(options,this);\r\n\tvar pres = $pres({to : jid, type : \"subscribed\"});\r\n\tif (options.message) {\r\n\t\tpres.c(\"status\").t(options.message).up();\r\n\t}\r\n\tthis.sendCommand(pres.tree());\r\n};\r\nconnection.prototype.unsubscribe = function(options) {\r\n\tvar jid = getJid(options,this);\r\n\tvar pres = $pres({to : jid, type : \"unsubscribe\"});\r\n\tif (options.message) {\r\n\t\tpres.c(\"status\").t(options.message);\r\n\t}\r\n\tthis.sendCommand(pres.tree());\r\n};\r\nconnection.prototype.unsubscribed = function(options) {\r\n\tvar jid = getJid(options,this);\r\n\tvar pres = $pres({to : jid, type : \"unsubscribed\"});\r\n\tif (options.message) {\r\n\t\tpres.c(\"status\").t(options.message).up();\r\n\t}\r\n\tthis.sendCommand(pres.tree());\r\n };\r\n \r\nconnection.prototype.createRoom = function(options) {\r\n\tvar suc =options.success || emptyFn;\r\n\tvar err =  options.error || emptyFn;\r\n\tvar roomiq;\r\n\troomiq = $iq({\r\n\t\tto: options.rooomName,\r\n\t\ttype: \"set\"\r\n\t}).c(\"query\", {\r\n\t\txmlns: Strophe.NS.MUC_OWNER\r\n\t}).c(\"x\", {\r\n\t\t xmlns: \"jabber:x:data\",\r\n\t\t type: \"submit\"\r\n\t});\r\n\treturn this.context.stropheConn.sendIQ(roomiq.tree(), suc, err);\r\n};\r\n \r\nconnection.prototype.join = function(options){\r\n\tvar roomJid = this.context.appKey+\"_\"+options.roomId+'@conference.' + this.domain;\r\n\tvar room_nick = roomJid+\"/\"+this.context.userId;\r\n\tvar suc =options.success || emptyFn;\r\n\tvar err =  options.error || emptyFn;\r\n\tvar errorFn = function (ele){\r\n\t\terr({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_JOINROOM_ERROR,\r\n\t\t\tmsg : '加入房间失败',\r\n\t\t\tdata : ele\r\n\t\t});\r\n\t}\r\n\tvar iq = $pres({\r\n\t\tfrom: this.context.jid,\r\n\t\tto: room_nick\r\n\t}).c(\"x\", {\r\n\t\txmlns: Strophe.NS.MUC\r\n\t});\r\n\tthis.context.stropheConn.sendIQ(iq.tree(), suc, errorFn);\r\n};\r\nconnection.prototype.listRooms = function(options) {\r\n    var iq;\r\n    iq = $iq({\r\n      to: options.server||'conference.' + this.domain,\r\n      from: this.context.jid,\r\n      type: \"get\"\r\n    }).c(\"query\", {\r\n      xmlns: Strophe.NS.DISCO_ITEMS\r\n    });\r\n    var suc =options.success || emptyFn;\r\n\tvar completeFn = function(result){\r\n\t\tvar rooms = [];\r\n\t\trooms = parseRoomFn(result);\r\n\t\tsuc(rooms);\r\n\t}\r\n\tvar err =  options.error || emptyFn;\r\n\tvar errorFn = function (ele){\r\n\t\terr({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_GETROOM_ERROR,\r\n\t\t\tmsg : '获取群组列表失败',\r\n\t\t\tdata : ele\r\n\t\t});\r\n\t}\r\n    this.context.stropheConn.sendIQ(iq.tree(), completeFn, errorFn);\r\n};\r\n\r\nconnection.prototype.queryRoomMember = function(options){\r\n\tvar domain = this.domain;\r\n\tvar members = [];\r\n\t var iq= $iq({\r\n\t      to : this.context.appKey+\"_\"+options.roomId+'@conference.' + this.domain,\r\n\t      type : 'get'\r\n\t    }).c('query', {\r\n\t    \txmlns: Strophe.NS.MUC+'#admin'\r\n\t    }).c('item',{\r\n\t    \taffiliation:'member'\r\n\t    });\r\n    var suc =options.success || emptyFn;\r\n\tvar completeFn = function(result){\r\n\t\tvar items = result.getElementsByTagName('item');\r\n\t\tif(items){\r\n\t\t\tfor(var i=0;i<items.length;i++){\r\n\t\t\t\tvar item = items[i];\r\n\t\t\t\tvar mem = {\r\n\t\t\t\t\t\tjid : item.getAttribute('jid'),\r\n\t\t\t\t\t\taffiliation : 'member'\r\n\t\t\t\t\t};\r\n\t\t\t\tmembers.push(mem);\r\n\t\t\t}\r\n\t\t}\r\n\t\tsuc(members);\r\n\t}\r\n\tvar err =  options.error || emptyFn;\r\n\tvar errorFn = function (ele){\r\n\t\terr({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_GETROOMMEMBER_ERROR,\r\n\t\t\tmsg : '获取群组成员列表失败',\r\n\t\t\tdata : ele\r\n\t\t});\r\n\t}\r\n    this.context.stropheConn.sendIQ(iq.tree(), completeFn, errorFn);\r\n};\r\n\r\nconnection.prototype.queryRoomInfo = function(options){\r\n\tvar domain = this.domain;\r\n\tvar iq= $iq({\r\n\t      to:  this.context.appKey+\"_\"+options.roomId+'@conference.' + domain,\r\n\t      type: \"get\"\r\n\t    }).c(\"query\", {\r\n\t      xmlns: Strophe.NS.DISCO_INFO\r\n\t    });\r\n    var suc =options.success || emptyFn;\r\n    var members = [];\r\n\tvar completeFn = function(result){\r\n\t\tvar fields = result.getElementsByTagName('field');\r\n\t\tif(fields){\r\n\t\t\tfor(var i=0;i<fields.length;i++){\r\n\t\t\t\tvar field = fields[i];\r\n\t\t\t\tif(field.getAttribute('label') == 'owner'){\r\n\t\t\t\t\tvar mem = {\r\n\t\t\t\t\t\t\tjid : field.textContent + \"@\" + domain,\r\n\t\t\t\t\t\t\taffiliation : 'owner'\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\tmembers.push(mem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsuc(members);\r\n\t}\r\n\tvar err =  options.error || emptyFn;\r\n\tvar errorFn = function (ele){\r\n\t\terr({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_GETROOMINFO_ERROR,\r\n\t\t\tmsg : '获取群组信息失败',\r\n\t\t\tdata : ele\r\n\t\t});\r\n\t}\r\n    this.context.stropheConn.sendIQ(iq.tree(), completeFn, errorFn);\r\n};\r\n\r\nconnection.prototype.queryRoomOccupants = function(options) {\r\n\tvar suc =options.success || emptyFn;\r\n\tvar completeFn = function(result){\r\n\t\tvar occupants = [];\r\n\t\toccupants = parseRoomOccupantsFn(result);\r\n\t\tsuc(occupants);\r\n\t}\r\n\tvar err =  options.error || emptyFn;\r\n\tvar errorFn = function (ele){\r\n\t\terr({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_GETROOMOCCUPANTS_ERROR,\r\n\t\t\tmsg : '获取群组出席者列表失败',\r\n\t\t\tdata : ele\r\n\t\t});\r\n\t}\r\n    var attrs = {\r\n      xmlns: Strophe.NS.DISCO_ITEMS\r\n    };\r\n    var info = $iq({\r\n      from : this.context.jid,\r\n      to : this.context.appKey+\"_\"+options.roomId+'@conference.' + this.domain,\r\n      type : 'get'\r\n    }).c('query', attrs);\r\n    this.context.stropheConn.sendIQ(info.tree(), completeFn, errorFn);\r\n  };\r\n\r\nconnection.prototype.setUserSig = function(desc) {\r\n\tvar dom = $pres({xmlns : 'jabber:client'});\r\n\tdesc = desc || \"\";\r\n\tdom.c(\"status\").t(desc);\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.setPresence = function(type,status) {\r\n\tvar dom = $pres({xmlns : 'jabber:client'});\r\n\tif (type){\r\n\t\tif(status){\r\n\t\t\tdom.c(\"show\").t(type);\r\n\t\t\tdom.up().c(\"status\").t(status);\r\n\t\t} else {\r\n\t\t\tdom.c(\"show\").t(type);\r\n\t\t}\r\n\t}\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.getPresence = function() {\r\n\tvar dom = $pres({xmlns : 'jabber:client'});\r\n\tvar conn = this;\r\n\tthis.sendCommand(dom.tree());\r\n};\r\nconnection.prototype.ping = function(options) {\r\n\toptions = options || {};\r\n\tvar jid = getJid(options,this);\r\n\r\n\tvar dom = $iq({\r\n\t\tfrom : this.context.jid || '',\r\n\t\tto: jid,\r\n\t\ttype: \"get\"\r\n\t}).c(\"ping\", {xmlns: \"urn:xmpp:ping\"});\r\n\r\n\tsuc = options.success || emptyFn;\r\n\terror = options.error || this.onError;\r\n\tvar failFn = function(ele){\r\n\t\terror({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_PING_ERROR,\r\n\t\t\tmsg : 'ping失败',\r\n\t\t\tdata : ele\r\n\t\t});\r\n\t};\r\n\tif(this.isOpened()){\r\n\t\tthis.context.stropheConn.sendIQ(dom.tree(),suc,failFn);\r\n\t} else {\r\n\t\terror({\r\n\t\t\ttype : EASEMOB_IM_CONNCTION_OPEN_ERROR,\r\n\t\t\tmsg : '连接还未建立,请先登录或等待登录处理完毕'\r\n\t\t});\r\n\t}\r\n\treturn;\r\n};\r\nconnection.prototype.isOpened = function() {\r\n\tvar status = this.context.status;\r\n\treturn status==STATUS_OPENED;\r\n};\r\nconnection.prototype.isOpening = function() {\r\n\tvar status = this.context.status;\r\n\treturn (status==STATUS_DOLOGIN_USERGRID) || (status==STATUS_DOLOGIN_IM);\r\n};\r\nconnection.prototype.isClosing = function() {\r\n\tvar status = this.context.status;\r\n\treturn (status==STATUS_CLOSING);\r\n};\r\nconnection.prototype.isClosed = function() {\r\n\tvar status = this.context.status;\r\n\treturn status == STATUS_CLOSED;\r\n};\r\nconnection.prototype.clear = function() {\r\n\tthis.context = {\r\n\t\tstatus : STATUS_INIT\r\n\t};\r\n};\r\n\r\n\r\nEasemob.im.Connection = connection;\r\n\r\nif (typeof Easemob.im.Helper == 'undefined') {\r\n\tEasemob.im.Helper = {};\r\n\t\r\n\t// method\r\n\tEasemob.im.Helper.getFileUrl = getFileUrlFn;\r\n\tEasemob.im.Helper.upload = uploadFn;\r\n\tEasemob.im.Helper.download = downloadFn;\r\n\tEasemob.im.Helper.getFileSize = getFileSizeFn;\r\n\tEasemob.im.Helper.xhr = doAjaxRequest;\r\n\tEasemob.im.Helper.parseTextMessage = parseTextMessageFn;\r\n\tEasemob.im.Helper.login2UserGrid = login2UserGrid;\r\n\r\n\t// attritue\r\n\tEasemob.im.Helper.isCanUploadFile = isCanUploadFile;\r\n\tEasemob.im.Helper.isCanDownLoadFile = isCanDownLoadFile;\r\n\tEasemob.im.Helper.hasSetRequestHeader = hasSetRequestHeader;\r\n\tEasemob.im.Helper.hasOverrideMimeType = hasOverrideMimeType;\r\n\t\r\n\t// object\r\n\tEasemob.im.Helper.Base64 = innerBase64;\r\n\tEasemob.im.Helper.EmotionPicData = emotionPicData;\r\n\t\r\n\t//user\r\n\tEasemob.im.Helper.registerUser = registerUserFn;\r\n}\r\n})(jQuery)\r\n}\r\n"
  },
  {
    "path": "examples/login/libs/easymob-webim-sdk/jquery-1.11.1.js",
    "content": "/*!\r\n * jQuery JavaScript Library v1.11.1\r\n * http://jquery.com/\r\n *\r\n * Includes Sizzle.js\r\n * http://sizzlejs.com/\r\n *\r\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n *\r\n * Date: 2014-05-01T17:42Z\r\n */\r\n\r\n(function( global, factory ) {\r\n\r\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\r\n\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\r\n\t\t// execute the factory and get jQuery\r\n\t\t// For environments that do not inherently posses a window with a document\r\n\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\r\n\t\t// This accentuates the need for the creation of a real window\r\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\r\n\t\t// See ticket #14549 for more info\r\n\t\tmodule.exports = global.document ?\r\n\t\t\tfactory( global, true ) :\r\n\t\t\tfunction( w ) {\r\n\t\t\t\tif ( !w.document ) {\r\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\r\n\t\t\t\t}\r\n\t\t\t\treturn factory( w );\r\n\t\t\t};\r\n\t} else {\r\n\t\tfactory( global );\r\n\t}\r\n\r\n// Pass this if window is not defined yet\r\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\r\n\r\n// Can't do this because several apps including ASP.NET trace\r\n// the stack via arguments.caller.callee and Firefox dies if\r\n// you try to trace through \"use strict\" call chains. (#13335)\r\n// Support: Firefox 18+\r\n//\r\n\r\nvar deletedIds = [];\r\n\r\nvar slice = deletedIds.slice;\r\n\r\nvar concat = deletedIds.concat;\r\n\r\nvar push = deletedIds.push;\r\n\r\nvar indexOf = deletedIds.indexOf;\r\n\r\nvar class2type = {};\r\n\r\nvar toString = class2type.toString;\r\n\r\nvar hasOwn = class2type.hasOwnProperty;\r\n\r\nvar support = {};\r\n\r\n\r\n\r\nvar\r\n\tversion = \"1.11.1\",\r\n\r\n\t// Define a local copy of jQuery\r\n\tjQuery = function( selector, context ) {\r\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\r\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\r\n\t\treturn new jQuery.fn.init( selector, context );\r\n\t},\r\n\r\n\t// Support: Android<4.1, IE<9\r\n\t// Make sure we trim BOM and NBSP\r\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\r\n\r\n\t// Matches dashed string for camelizing\r\n\trmsPrefix = /^-ms-/,\r\n\trdashAlpha = /-([\\da-z])/gi,\r\n\r\n\t// Used by jQuery.camelCase as callback to replace()\r\n\tfcamelCase = function( all, letter ) {\r\n\t\treturn letter.toUpperCase();\r\n\t};\r\n\r\njQuery.fn = jQuery.prototype = {\r\n\t// The current version of jQuery being used\r\n\tjquery: version,\r\n\r\n\tconstructor: jQuery,\r\n\r\n\t// Start with an empty selector\r\n\tselector: \"\",\r\n\r\n\t// The default length of a jQuery object is 0\r\n\tlength: 0,\r\n\r\n\ttoArray: function() {\r\n\t\treturn slice.call( this );\r\n\t},\r\n\r\n\t// Get the Nth element in the matched element set OR\r\n\t// Get the whole matched element set as a clean array\r\n\tget: function( num ) {\r\n\t\treturn num != null ?\r\n\r\n\t\t\t// Return just the one element from the set\r\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\r\n\r\n\t\t\t// Return all the elements in a clean array\r\n\t\t\tslice.call( this );\r\n\t},\r\n\r\n\t// Take an array of elements and push it onto the stack\r\n\t// (returning the new matched element set)\r\n\tpushStack: function( elems ) {\r\n\r\n\t\t// Build a new jQuery matched element set\r\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\r\n\r\n\t\t// Add the old object onto the stack (as a reference)\r\n\t\tret.prevObject = this;\r\n\t\tret.context = this.context;\r\n\r\n\t\t// Return the newly-formed element set\r\n\t\treturn ret;\r\n\t},\r\n\r\n\t// Execute a callback for every element in the matched set.\r\n\t// (You can seed the arguments with an array of args, but this is\r\n\t// only used internally.)\r\n\teach: function( callback, args ) {\r\n\t\treturn jQuery.each( this, callback, args );\r\n\t},\r\n\r\n\tmap: function( callback ) {\r\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\r\n\t\t\treturn callback.call( elem, i, elem );\r\n\t\t}));\r\n\t},\r\n\r\n\tslice: function() {\r\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\r\n\t},\r\n\r\n\tfirst: function() {\r\n\t\treturn this.eq( 0 );\r\n\t},\r\n\r\n\tlast: function() {\r\n\t\treturn this.eq( -1 );\r\n\t},\r\n\r\n\teq: function( i ) {\r\n\t\tvar len = this.length,\r\n\t\t\tj = +i + ( i < 0 ? len : 0 );\r\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\r\n\t},\r\n\r\n\tend: function() {\r\n\t\treturn this.prevObject || this.constructor(null);\r\n\t},\r\n\r\n\t// For internal use only.\r\n\t// Behaves like an Array's method, not like a jQuery method.\r\n\tpush: push,\r\n\tsort: deletedIds.sort,\r\n\tsplice: deletedIds.splice\r\n};\r\n\r\njQuery.extend = jQuery.fn.extend = function() {\r\n\tvar src, copyIsArray, copy, name, options, clone,\r\n\t\ttarget = arguments[0] || {},\r\n\t\ti = 1,\r\n\t\tlength = arguments.length,\r\n\t\tdeep = false;\r\n\r\n\t// Handle a deep copy situation\r\n\tif ( typeof target === \"boolean\" ) {\r\n\t\tdeep = target;\r\n\r\n\t\t// skip the boolean and the target\r\n\t\ttarget = arguments[ i ] || {};\r\n\t\ti++;\r\n\t}\r\n\r\n\t// Handle case when target is a string or something (possible in deep copy)\r\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\r\n\t\ttarget = {};\r\n\t}\r\n\r\n\t// extend jQuery itself if only one argument is passed\r\n\tif ( i === length ) {\r\n\t\ttarget = this;\r\n\t\ti--;\r\n\t}\r\n\r\n\tfor ( ; i < length; i++ ) {\r\n\t\t// Only deal with non-null/undefined values\r\n\t\tif ( (options = arguments[ i ]) != null ) {\r\n\t\t\t// Extend the base object\r\n\t\t\tfor ( name in options ) {\r\n\t\t\t\tsrc = target[ name ];\r\n\t\t\t\tcopy = options[ name ];\r\n\r\n\t\t\t\t// Prevent never-ending loop\r\n\t\t\t\tif ( target === copy ) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Recurse if we're merging plain objects or arrays\r\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\r\n\t\t\t\t\tif ( copyIsArray ) {\r\n\t\t\t\t\t\tcopyIsArray = false;\r\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Never move original objects, clone them\r\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\r\n\r\n\t\t\t\t// Don't bring in undefined values\r\n\t\t\t\t} else if ( copy !== undefined ) {\r\n\t\t\t\t\ttarget[ name ] = copy;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the modified object\r\n\treturn target;\r\n};\r\n\r\njQuery.extend({\r\n\t// Unique for each copy of jQuery on the page\r\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\r\n\r\n\t// Assume jQuery is ready without the ready module\r\n\tisReady: true,\r\n\r\n\terror: function( msg ) {\r\n\t\tthrow new Error( msg );\r\n\t},\r\n\r\n\tnoop: function() {},\r\n\r\n\t// See test/unit/core.js for details concerning isFunction.\r\n\t// Since version 1.3, DOM methods and functions like alert\r\n\t// aren't supported. They return false on IE (#2968).\r\n\tisFunction: function( obj ) {\r\n\t\treturn jQuery.type(obj) === \"function\";\r\n\t},\r\n\r\n\tisArray: Array.isArray || function( obj ) {\r\n\t\treturn jQuery.type(obj) === \"array\";\r\n\t},\r\n\r\n\tisWindow: function( obj ) {\r\n\t\t/* jshint eqeqeq: false */\r\n\t\treturn obj != null && obj == obj.window;\r\n\t},\r\n\r\n\tisNumeric: function( obj ) {\r\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\r\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\r\n\t\t// subtraction forces infinities to NaN\r\n\t\treturn !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;\r\n\t},\r\n\r\n\tisEmptyObject: function( obj ) {\r\n\t\tvar name;\r\n\t\tfor ( name in obj ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\tisPlainObject: function( obj ) {\r\n\t\tvar key;\r\n\r\n\t\t// Must be an Object.\r\n\t\t// Because of IE, we also have to check the presence of the constructor property.\r\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\r\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// Not own constructor property must be Object\r\n\t\t\tif ( obj.constructor &&\r\n\t\t\t\t!hasOwn.call(obj, \"constructor\") &&\r\n\t\t\t\t!hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t} catch ( e ) {\r\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Handle iteration over inherited properties before own properties.\r\n\t\tif ( support.ownLast ) {\r\n\t\t\tfor ( key in obj ) {\r\n\t\t\t\treturn hasOwn.call( obj, key );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Own properties are enumerated firstly, so to speed up,\r\n\t\t// if last one is own, then all properties are own.\r\n\t\tfor ( key in obj ) {}\r\n\r\n\t\treturn key === undefined || hasOwn.call( obj, key );\r\n\t},\r\n\r\n\ttype: function( obj ) {\r\n\t\tif ( obj == null ) {\r\n\t\t\treturn obj + \"\";\r\n\t\t}\r\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\r\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\r\n\t\t\ttypeof obj;\r\n\t},\r\n\r\n\t// Evaluates a script in a global context\r\n\t// Workarounds based on findings by Jim Driscoll\r\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\r\n\tglobalEval: function( data ) {\r\n\t\tif ( data && jQuery.trim( data ) ) {\r\n\t\t\t// We use execScript on Internet Explorer\r\n\t\t\t// We use an anonymous function so that context is window\r\n\t\t\t// rather than jQuery in Firefox\r\n\t\t\t( window.execScript || function( data ) {\r\n\t\t\t\twindow[ \"eval\" ].call( window, data );\r\n\t\t\t} )( data );\r\n\t\t}\r\n\t},\r\n\r\n\t// Convert dashed to camelCase; used by the css and data modules\r\n\t// Microsoft forgot to hump their vendor prefix (#9572)\r\n\tcamelCase: function( string ) {\r\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\r\n\t},\r\n\r\n\tnodeName: function( elem, name ) {\r\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\r\n\t},\r\n\r\n\t// args is for internal usage only\r\n\teach: function( obj, callback, args ) {\r\n\t\tvar value,\r\n\t\t\ti = 0,\r\n\t\t\tlength = obj.length,\r\n\t\t\tisArray = isArraylike( obj );\r\n\r\n\t\tif ( args ) {\r\n\t\t\tif ( isArray ) {\r\n\t\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\r\n\r\n\t\t\t\t\tif ( value === false ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor ( i in obj ) {\r\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\r\n\r\n\t\t\t\t\tif ( value === false ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// A special, fast, case for the most common use of each\r\n\t\t} else {\r\n\t\t\tif ( isArray ) {\r\n\t\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\r\n\r\n\t\t\t\t\tif ( value === false ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor ( i in obj ) {\r\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\r\n\r\n\t\t\t\t\tif ( value === false ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn obj;\r\n\t},\r\n\r\n\t// Support: Android<4.1, IE<9\r\n\ttrim: function( text ) {\r\n\t\treturn text == null ?\r\n\t\t\t\"\" :\r\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\r\n\t},\r\n\r\n\t// results is for internal usage only\r\n\tmakeArray: function( arr, results ) {\r\n\t\tvar ret = results || [];\r\n\r\n\t\tif ( arr != null ) {\r\n\t\t\tif ( isArraylike( Object(arr) ) ) {\r\n\t\t\t\tjQuery.merge( ret,\r\n\t\t\t\t\ttypeof arr === \"string\" ?\r\n\t\t\t\t\t[ arr ] : arr\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tpush.call( ret, arr );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\tinArray: function( elem, arr, i ) {\r\n\t\tvar len;\r\n\r\n\t\tif ( arr ) {\r\n\t\t\tif ( indexOf ) {\r\n\t\t\t\treturn indexOf.call( arr, elem, i );\r\n\t\t\t}\r\n\r\n\t\t\tlen = arr.length;\r\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\r\n\r\n\t\t\tfor ( ; i < len; i++ ) {\r\n\t\t\t\t// Skip accessing in sparse arrays\r\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t},\r\n\r\n\tmerge: function( first, second ) {\r\n\t\tvar len = +second.length,\r\n\t\t\tj = 0,\r\n\t\t\ti = first.length;\r\n\r\n\t\twhile ( j < len ) {\r\n\t\t\tfirst[ i++ ] = second[ j++ ];\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\r\n\t\tif ( len !== len ) {\r\n\t\t\twhile ( second[j] !== undefined ) {\r\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfirst.length = i;\r\n\r\n\t\treturn first;\r\n\t},\r\n\r\n\tgrep: function( elems, callback, invert ) {\r\n\t\tvar callbackInverse,\r\n\t\t\tmatches = [],\r\n\t\t\ti = 0,\r\n\t\t\tlength = elems.length,\r\n\t\t\tcallbackExpect = !invert;\r\n\r\n\t\t// Go through the array, only saving the items\r\n\t\t// that pass the validator function\r\n\t\tfor ( ; i < length; i++ ) {\r\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\r\n\t\t\tif ( callbackInverse !== callbackExpect ) {\r\n\t\t\t\tmatches.push( elems[ i ] );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn matches;\r\n\t},\r\n\r\n\t// arg is for internal usage only\r\n\tmap: function( elems, callback, arg ) {\r\n\t\tvar value,\r\n\t\t\ti = 0,\r\n\t\t\tlength = elems.length,\r\n\t\t\tisArray = isArraylike( elems ),\r\n\t\t\tret = [];\r\n\r\n\t\t// Go through the array, translating each of the items to their new values\r\n\t\tif ( isArray ) {\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\r\n\r\n\t\t\t\tif ( value != null ) {\r\n\t\t\t\t\tret.push( value );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Go through every key on the object,\r\n\t\t} else {\r\n\t\t\tfor ( i in elems ) {\r\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\r\n\r\n\t\t\t\tif ( value != null ) {\r\n\t\t\t\t\tret.push( value );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Flatten any nested arrays\r\n\t\treturn concat.apply( [], ret );\r\n\t},\r\n\r\n\t// A global GUID counter for objects\r\n\tguid: 1,\r\n\r\n\t// Bind a function to a context, optionally partially applying any\r\n\t// arguments.\r\n\tproxy: function( fn, context ) {\r\n\t\tvar args, proxy, tmp;\r\n\r\n\t\tif ( typeof context === \"string\" ) {\r\n\t\t\ttmp = fn[ context ];\r\n\t\t\tcontext = fn;\r\n\t\t\tfn = tmp;\r\n\t\t}\r\n\r\n\t\t// Quick check to determine if target is callable, in the spec\r\n\t\t// this throws a TypeError, but we will just return undefined.\r\n\t\tif ( !jQuery.isFunction( fn ) ) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\t// Simulated bind\r\n\t\targs = slice.call( arguments, 2 );\r\n\t\tproxy = function() {\r\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\r\n\t\t};\r\n\r\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\r\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\r\n\r\n\t\treturn proxy;\r\n\t},\r\n\r\n\tnow: function() {\r\n\t\treturn +( new Date() );\r\n\t},\r\n\r\n\t// jQuery.support is not used in Core but other projects attach their\r\n\t// properties to it so it needs to exist.\r\n\tsupport: support\r\n});\r\n\r\n// Populate the class2type map\r\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\r\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\r\n});\r\n\r\nfunction isArraylike( obj ) {\r\n\tvar length = obj.length,\r\n\t\ttype = jQuery.type( obj );\r\n\r\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif ( obj.nodeType === 1 && length ) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\treturn type === \"array\" || length === 0 ||\r\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\r\n}\r\nvar Sizzle =\r\n/*!\r\n * Sizzle CSS Selector Engine v1.10.19\r\n * http://sizzlejs.com/\r\n *\r\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n *\r\n * Date: 2014-04-18\r\n */\r\n(function( window ) {\r\n\r\nvar i,\r\n\tsupport,\r\n\tExpr,\r\n\tgetText,\r\n\tisXML,\r\n\ttokenize,\r\n\tcompile,\r\n\tselect,\r\n\toutermostContext,\r\n\tsortInput,\r\n\thasDuplicate,\r\n\r\n\t// Local document vars\r\n\tsetDocument,\r\n\tdocument,\r\n\tdocElem,\r\n\tdocumentIsHTML,\r\n\trbuggyQSA,\r\n\trbuggyMatches,\r\n\tmatches,\r\n\tcontains,\r\n\r\n\t// Instance-specific data\r\n\texpando = \"sizzle\" + -(new Date()),\r\n\tpreferredDoc = window.document,\r\n\tdirruns = 0,\r\n\tdone = 0,\r\n\tclassCache = createCache(),\r\n\ttokenCache = createCache(),\r\n\tcompilerCache = createCache(),\r\n\tsortOrder = function( a, b ) {\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// General-purpose constants\r\n\tstrundefined = typeof undefined,\r\n\tMAX_NEGATIVE = 1 << 31,\r\n\r\n\t// Instance methods\r\n\thasOwn = ({}).hasOwnProperty,\r\n\tarr = [],\r\n\tpop = arr.pop,\r\n\tpush_native = arr.push,\r\n\tpush = arr.push,\r\n\tslice = arr.slice,\r\n\t// Use a stripped-down indexOf if we can't use a native one\r\n\tindexOf = arr.indexOf || function( elem ) {\r\n\t\tvar i = 0,\r\n\t\t\tlen = this.length;\r\n\t\tfor ( ; i < len; i++ ) {\r\n\t\t\tif ( this[i] === elem ) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t},\r\n\r\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\r\n\r\n\t// Regular expressions\r\n\r\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\r\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\r\n\t// http://www.w3.org/TR/css3-syntax/#characters\r\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\r\n\r\n\t// Loosely modeled on CSS identifier characters\r\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\r\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\r\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\r\n\r\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\r\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\r\n\t\t// Operator (capture 2)\r\n\t\t\"*([*^$|!~]?=)\" + whitespace +\r\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\r\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\r\n\t\t\"*\\\\]\",\r\n\r\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\r\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\r\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\r\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\r\n\t\t// 2. simple (capture 6)\r\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\r\n\t\t// 3. anything else (capture 2)\r\n\t\t\".*\" +\r\n\t\t\")\\\\)|)\",\r\n\r\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\r\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\r\n\r\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\r\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\r\n\r\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\r\n\r\n\trpseudo = new RegExp( pseudos ),\r\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\r\n\r\n\tmatchExpr = {\r\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\r\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\r\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\r\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\r\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\r\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\r\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\r\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\r\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\r\n\t\t// For use in libraries implementing .is()\r\n\t\t// We use this for POS matching in `select`\r\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\r\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\r\n\t},\r\n\r\n\trinputs = /^(?:input|select|textarea|button)$/i,\r\n\trheader = /^h\\d$/i,\r\n\r\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\r\n\r\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\r\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\r\n\r\n\trsibling = /[+~]/,\r\n\trescape = /'|\\\\/g,\r\n\r\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\r\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\r\n\tfunescape = function( _, escaped, escapedWhitespace ) {\r\n\t\tvar high = \"0x\" + escaped - 0x10000;\r\n\t\t// NaN means non-codepoint\r\n\t\t// Support: Firefox<24\r\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\r\n\t\treturn high !== high || escapedWhitespace ?\r\n\t\t\tescaped :\r\n\t\t\thigh < 0 ?\r\n\t\t\t\t// BMP codepoint\r\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\r\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\r\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\r\n\t};\r\n\r\n// Optimize for push.apply( _, NodeList )\r\ntry {\r\n\tpush.apply(\r\n\t\t(arr = slice.call( preferredDoc.childNodes )),\r\n\t\tpreferredDoc.childNodes\r\n\t);\r\n\t// Support: Android<4.0\r\n\t// Detect silently failing push.apply\r\n\tarr[ preferredDoc.childNodes.length ].nodeType;\r\n} catch ( e ) {\r\n\tpush = { apply: arr.length ?\r\n\r\n\t\t// Leverage slice if possible\r\n\t\tfunction( target, els ) {\r\n\t\t\tpush_native.apply( target, slice.call(els) );\r\n\t\t} :\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Otherwise append directly\r\n\t\tfunction( target, els ) {\r\n\t\t\tvar j = target.length,\r\n\t\t\t\ti = 0;\r\n\t\t\t// Can't trust NodeList.length\r\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\r\n\t\t\ttarget.length = j - 1;\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction Sizzle( selector, context, results, seed ) {\r\n\tvar match, elem, m, nodeType,\r\n\t\t// QSA vars\r\n\t\ti, groups, old, nid, newContext, newSelector;\r\n\r\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\r\n\t\tsetDocument( context );\r\n\t}\r\n\r\n\tcontext = context || document;\r\n\tresults = results || [];\r\n\r\n\tif ( !selector || typeof selector !== \"string\" ) {\r\n\t\treturn results;\r\n\t}\r\n\r\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tif ( documentIsHTML && !seed ) {\r\n\r\n\t\t// Shortcuts\r\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\r\n\t\t\t// Speed-up: Sizzle(\"#ID\")\r\n\t\t\tif ( (m = match[1]) ) {\r\n\t\t\t\tif ( nodeType === 9 ) {\r\n\t\t\t\t\telem = context.getElementById( m );\r\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\r\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\r\n\t\t\t\t\tif ( elem && elem.parentNode ) {\r\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\r\n\t\t\t\t\t\t// by name instead of ID\r\n\t\t\t\t\t\tif ( elem.id === m ) {\r\n\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Context is not a document\r\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\r\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\r\n\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t// Speed-up: Sizzle(\"TAG\")\r\n\t\t\t} else if ( match[2] ) {\r\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\r\n\t\t\t\treturn results;\r\n\r\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\r\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\r\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\r\n\t\t\t\treturn results;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// QSA path\r\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\r\n\t\t\tnid = old = expando;\r\n\t\t\tnewContext = context;\r\n\t\t\tnewSelector = nodeType === 9 && selector;\r\n\r\n\t\t\t// qSA works strangely on Element-rooted queries\r\n\t\t\t// We can work around this by specifying an extra ID on the root\r\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\r\n\t\t\t// IE 8 doesn't work on object elements\r\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\r\n\t\t\t\tgroups = tokenize( selector );\r\n\r\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\r\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\r\n\t\t\t\t}\r\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\r\n\r\n\t\t\t\ti = groups.length;\r\n\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\r\n\t\t\t\t}\r\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\r\n\t\t\t\tnewSelector = groups.join(\",\");\r\n\t\t\t}\r\n\r\n\t\t\tif ( newSelector ) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tpush.apply( results,\r\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn results;\r\n\t\t\t\t} catch(qsaError) {\r\n\t\t\t\t} finally {\r\n\t\t\t\t\tif ( !old ) {\r\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// All others\r\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\r\n}\r\n\r\n/**\r\n * Create key-value caches of limited size\r\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\r\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\r\n *\tdeleting the oldest entry\r\n */\r\nfunction createCache() {\r\n\tvar keys = [];\r\n\r\n\tfunction cache( key, value ) {\r\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\r\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\r\n\t\t\t// Only keep the most recent entries\r\n\t\t\tdelete cache[ keys.shift() ];\r\n\t\t}\r\n\t\treturn (cache[ key + \" \" ] = value);\r\n\t}\r\n\treturn cache;\r\n}\r\n\r\n/**\r\n * Mark a function for special use by Sizzle\r\n * @param {Function} fn The function to mark\r\n */\r\nfunction markFunction( fn ) {\r\n\tfn[ expando ] = true;\r\n\treturn fn;\r\n}\r\n\r\n/**\r\n * Support testing using an element\r\n * @param {Function} fn Passed the created div and expects a boolean result\r\n */\r\nfunction assert( fn ) {\r\n\tvar div = document.createElement(\"div\");\r\n\r\n\ttry {\r\n\t\treturn !!fn( div );\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t} finally {\r\n\t\t// Remove from its parent by default\r\n\t\tif ( div.parentNode ) {\r\n\t\t\tdiv.parentNode.removeChild( div );\r\n\t\t}\r\n\t\t// release memory in IE\r\n\t\tdiv = null;\r\n\t}\r\n}\r\n\r\n/**\r\n * Adds the same handler for all of the specified attrs\r\n * @param {String} attrs Pipe-separated list of attributes\r\n * @param {Function} handler The method that will be applied\r\n */\r\nfunction addHandle( attrs, handler ) {\r\n\tvar arr = attrs.split(\"|\"),\r\n\t\ti = attrs.length;\r\n\r\n\twhile ( i-- ) {\r\n\t\tExpr.attrHandle[ arr[i] ] = handler;\r\n\t}\r\n}\r\n\r\n/**\r\n * Checks document order of two siblings\r\n * @param {Element} a\r\n * @param {Element} b\r\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\r\n */\r\nfunction siblingCheck( a, b ) {\r\n\tvar cur = b && a,\r\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\r\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\r\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\r\n\r\n\t// Use IE sourceIndex if available on both nodes\r\n\tif ( diff ) {\r\n\t\treturn diff;\r\n\t}\r\n\r\n\t// Check if b follows a\r\n\tif ( cur ) {\r\n\t\twhile ( (cur = cur.nextSibling) ) {\r\n\t\t\tif ( cur === b ) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn a ? 1 : -1;\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for input types\r\n * @param {String} type\r\n */\r\nfunction createInputPseudo( type ) {\r\n\treturn function( elem ) {\r\n\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\treturn name === \"input\" && elem.type === type;\r\n\t};\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for buttons\r\n * @param {String} type\r\n */\r\nfunction createButtonPseudo( type ) {\r\n\treturn function( elem ) {\r\n\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\r\n\t};\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for positionals\r\n * @param {Function} fn\r\n */\r\nfunction createPositionalPseudo( fn ) {\r\n\treturn markFunction(function( argument ) {\r\n\t\targument = +argument;\r\n\t\treturn markFunction(function( seed, matches ) {\r\n\t\t\tvar j,\r\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\r\n\t\t\t\ti = matchIndexes.length;\r\n\r\n\t\t\t// Match elements found at the specified indexes\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\r\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Checks a node for validity as a Sizzle context\r\n * @param {Element|Object=} context\r\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\r\n */\r\nfunction testContext( context ) {\r\n\treturn context && typeof context.getElementsByTagName !== strundefined && context;\r\n}\r\n\r\n// Expose support vars for convenience\r\nsupport = Sizzle.support = {};\r\n\r\n/**\r\n * Detects XML nodes\r\n * @param {Element|Object} elem An element or a document\r\n * @returns {Boolean} True iff elem is a non-HTML XML node\r\n */\r\nisXML = Sizzle.isXML = function( elem ) {\r\n\t// documentElement is verified for cases where it doesn't yet exist\r\n\t// (such as loading iframes in IE - #4833)\r\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\r\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\r\n};\r\n\r\n/**\r\n * Sets document-related variables once based on the current document\r\n * @param {Element|Object} [doc] An element or document object to use to set the document\r\n * @returns {Object} Returns the current document\r\n */\r\nsetDocument = Sizzle.setDocument = function( node ) {\r\n\tvar hasCompare,\r\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc,\r\n\t\tparent = doc.defaultView;\r\n\r\n\t// If no document and documentElement is available, return\r\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\r\n\t\treturn document;\r\n\t}\r\n\r\n\t// Set our document\r\n\tdocument = doc;\r\n\tdocElem = doc.documentElement;\r\n\r\n\t// Support tests\r\n\tdocumentIsHTML = !isXML( doc );\r\n\r\n\t// Support: IE>8\r\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\r\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\r\n\t// IE6-8 do not support the defaultView property so parent will be undefined\r\n\tif ( parent && parent !== parent.top ) {\r\n\t\t// IE11 does not have attachEvent, so all must suffer\r\n\t\tif ( parent.addEventListener ) {\r\n\t\t\tparent.addEventListener( \"unload\", function() {\r\n\t\t\t\tsetDocument();\r\n\t\t\t}, false );\r\n\t\t} else if ( parent.attachEvent ) {\r\n\t\t\tparent.attachEvent( \"onunload\", function() {\r\n\t\t\t\tsetDocument();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/* Attributes\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Support: IE<8\r\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\r\n\tsupport.attributes = assert(function( div ) {\r\n\t\tdiv.className = \"i\";\r\n\t\treturn !div.getAttribute(\"className\");\r\n\t});\r\n\r\n\t/* getElement(s)By*\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Check if getElementsByTagName(\"*\") returns only elements\r\n\tsupport.getElementsByTagName = assert(function( div ) {\r\n\t\tdiv.appendChild( doc.createComment(\"\") );\r\n\t\treturn !div.getElementsByTagName(\"*\").length;\r\n\t});\r\n\r\n\t// Check if getElementsByClassName can be trusted\r\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {\r\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\r\n\r\n\t\t// Support: Safari<4\r\n\t\t// Catch class over-caching\r\n\t\tdiv.firstChild.className = \"i\";\r\n\t\t// Support: Opera<10\r\n\t\t// Catch gEBCN failure to find non-leading classes\r\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\r\n\t});\r\n\r\n\t// Support: IE<10\r\n\t// Check if getElementById returns elements by name\r\n\t// The broken getElementById methods don't pick up programatically-set names,\r\n\t// so use a roundabout getElementsByName test\r\n\tsupport.getById = assert(function( div ) {\r\n\t\tdocElem.appendChild( div ).id = expando;\r\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\r\n\t});\r\n\r\n\t// ID find and filter\r\n\tif ( support.getById ) {\r\n\t\tExpr.find[\"ID\"] = function( id, context ) {\r\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\r\n\t\t\t\tvar m = context.getElementById( id );\r\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\r\n\t\t\t\t// nodes that are no longer in the document #6963\r\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\r\n\t\t\t}\r\n\t\t};\r\n\t\tExpr.filter[\"ID\"] = function( id ) {\r\n\t\t\tvar attrId = id.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\r\n\t\t\t};\r\n\t\t};\r\n\t} else {\r\n\t\t// Support: IE6/7\r\n\t\t// getElementById is not reliable as a find shortcut\r\n\t\tdelete Expr.find[\"ID\"];\r\n\r\n\t\tExpr.filter[\"ID\"] =  function( id ) {\r\n\t\t\tvar attrId = id.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\r\n\t\t\t\treturn node && node.value === attrId;\r\n\t\t\t};\r\n\t\t};\r\n\t}\r\n\r\n\t// Tag\r\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\r\n\t\tfunction( tag, context ) {\r\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\r\n\t\t\t\treturn context.getElementsByTagName( tag );\r\n\t\t\t}\r\n\t\t} :\r\n\t\tfunction( tag, context ) {\r\n\t\t\tvar elem,\r\n\t\t\t\ttmp = [],\r\n\t\t\t\ti = 0,\r\n\t\t\t\tresults = context.getElementsByTagName( tag );\r\n\r\n\t\t\t// Filter out possible comments\r\n\t\t\tif ( tag === \"*\" ) {\r\n\t\t\t\twhile ( (elem = results[i++]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\t\t\ttmp.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn tmp;\r\n\t\t\t}\r\n\t\t\treturn results;\r\n\t\t};\r\n\r\n\t// Class\r\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\r\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\r\n\t\t\treturn context.getElementsByClassName( className );\r\n\t\t}\r\n\t};\r\n\r\n\t/* QSA/matchesSelector\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// QSA and matchesSelector support\r\n\r\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\r\n\trbuggyMatches = [];\r\n\r\n\t// qSa(:focus) reports false when true (Chrome 21)\r\n\t// We allow this because of a bug in IE8/9 that throws an error\r\n\t// whenever `document.activeElement` is accessed on an iframe\r\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\r\n\t// See http://bugs.jquery.com/ticket/13378\r\n\trbuggyQSA = [];\r\n\r\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\r\n\t\t// Build QSA regex\r\n\t\t// Regex strategy adopted from Diego Perini\r\n\t\tassert(function( div ) {\r\n\t\t\t// Select is set to empty string on purpose\r\n\t\t\t// This is to test IE's treatment of not explicitly\r\n\t\t\t// setting a boolean content attribute,\r\n\t\t\t// since its presence should be enough\r\n\t\t\t// http://bugs.jquery.com/ticket/12359\r\n\t\t\tdiv.innerHTML = \"<select msallowclip=''><option selected=''></option></select>\";\r\n\r\n\t\t\t// Support: IE8, Opera 11-12.16\r\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\r\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\r\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\r\n\t\t\tif ( div.querySelectorAll(\"[msallowclip^='']\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Support: IE8\r\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\r\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Webkit/Opera - :checked should return selected option elements\r\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r\n\t\t\t// IE8 throws error here and will not see later tests\r\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\r\n\t\t\t\trbuggyQSA.push(\":checked\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassert(function( div ) {\r\n\t\t\t// Support: Windows 8 Native Apps\r\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\r\n\t\t\tvar input = doc.createElement(\"input\");\r\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\r\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\r\n\r\n\t\t\t// Support: IE8\r\n\t\t\t// Enforce case-sensitivity of name attribute\r\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\r\n\t\t\t}\r\n\r\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\r\n\t\t\t// IE8 throws error here and will not see later tests\r\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\r\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\r\n\t\t\tdiv.querySelectorAll(\"*,:x\");\r\n\t\t\trbuggyQSA.push(\",.*:\");\r\n\t\t});\r\n\t}\r\n\r\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\r\n\t\tdocElem.webkitMatchesSelector ||\r\n\t\tdocElem.mozMatchesSelector ||\r\n\t\tdocElem.oMatchesSelector ||\r\n\t\tdocElem.msMatchesSelector) )) ) {\r\n\r\n\t\tassert(function( div ) {\r\n\t\t\t// Check to see if it's possible to do matchesSelector\r\n\t\t\t// on a disconnected node (IE 9)\r\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\r\n\r\n\t\t\t// This should fail with an exception\r\n\t\t\t// Gecko does not error, returns false instead\r\n\t\t\tmatches.call( div, \"[s!='']:x\" );\r\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\r\n\t\t});\r\n\t}\r\n\r\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\r\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\r\n\r\n\t/* Contains\r\n\t---------------------------------------------------------------------- */\r\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\r\n\r\n\t// Element contains another\r\n\t// Purposefully does not implement inclusive descendent\r\n\t// As in, an element does not contain itself\r\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\r\n\t\tfunction( a, b ) {\r\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\r\n\t\t\t\tbup = b && b.parentNode;\r\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\r\n\t\t\t\tadown.contains ?\r\n\t\t\t\t\tadown.contains( bup ) :\r\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\r\n\t\t\t));\r\n\t\t} :\r\n\t\tfunction( a, b ) {\r\n\t\t\tif ( b ) {\r\n\t\t\t\twhile ( (b = b.parentNode) ) {\r\n\t\t\t\t\tif ( b === a ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\t/* Sorting\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Document order sorting\r\n\tsortOrder = hasCompare ?\r\n\tfunction( a, b ) {\r\n\r\n\t\t// Flag for duplicate removal\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Sort on method existence if only one input has compareDocumentPosition\r\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\r\n\t\tif ( compare ) {\r\n\t\t\treturn compare;\r\n\t\t}\r\n\r\n\t\t// Calculate position if both inputs belong to the same document\r\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\r\n\t\t\ta.compareDocumentPosition( b ) :\r\n\r\n\t\t\t// Otherwise we know they are disconnected\r\n\t\t\t1;\r\n\r\n\t\t// Disconnected nodes\r\n\t\tif ( compare & 1 ||\r\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\r\n\r\n\t\t\t// Choose the first element that is related to our preferred document\r\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\r\n\t\t\t// Maintain original order\r\n\t\t\treturn sortInput ?\r\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\r\n\t\t\t\t0;\r\n\t\t}\r\n\r\n\t\treturn compare & 4 ? -1 : 1;\r\n\t} :\r\n\tfunction( a, b ) {\r\n\t\t// Exit early if the nodes are identical\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tvar cur,\r\n\t\t\ti = 0,\r\n\t\t\taup = a.parentNode,\r\n\t\t\tbup = b.parentNode,\r\n\t\t\tap = [ a ],\r\n\t\t\tbp = [ b ];\r\n\r\n\t\t// Parentless nodes are either documents or disconnected\r\n\t\tif ( !aup || !bup ) {\r\n\t\t\treturn a === doc ? -1 :\r\n\t\t\t\tb === doc ? 1 :\r\n\t\t\t\taup ? -1 :\r\n\t\t\t\tbup ? 1 :\r\n\t\t\t\tsortInput ?\r\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\r\n\t\t\t\t0;\r\n\r\n\t\t// If the nodes are siblings, we can do a quick check\r\n\t\t} else if ( aup === bup ) {\r\n\t\t\treturn siblingCheck( a, b );\r\n\t\t}\r\n\r\n\t\t// Otherwise we need full lists of their ancestors for comparison\r\n\t\tcur = a;\r\n\t\twhile ( (cur = cur.parentNode) ) {\r\n\t\t\tap.unshift( cur );\r\n\t\t}\r\n\t\tcur = b;\r\n\t\twhile ( (cur = cur.parentNode) ) {\r\n\t\t\tbp.unshift( cur );\r\n\t\t}\r\n\r\n\t\t// Walk down the tree looking for a discrepancy\r\n\t\twhile ( ap[i] === bp[i] ) {\r\n\t\t\ti++;\r\n\t\t}\r\n\r\n\t\treturn i ?\r\n\t\t\t// Do a sibling check if the nodes have a common ancestor\r\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\r\n\r\n\t\t\t// Otherwise nodes in our document sort first\r\n\t\t\tap[i] === preferredDoc ? -1 :\r\n\t\t\tbp[i] === preferredDoc ? 1 :\r\n\t\t\t0;\r\n\t};\r\n\r\n\treturn doc;\r\n};\r\n\r\nSizzle.matches = function( expr, elements ) {\r\n\treturn Sizzle( expr, null, null, elements );\r\n};\r\n\r\nSizzle.matchesSelector = function( elem, expr ) {\r\n\t// Set document vars if needed\r\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\r\n\t\tsetDocument( elem );\r\n\t}\r\n\r\n\t// Make sure that attribute selectors are quoted\r\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\r\n\r\n\tif ( support.matchesSelector && documentIsHTML &&\r\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\r\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\r\n\r\n\t\ttry {\r\n\t\t\tvar ret = matches.call( elem, expr );\r\n\r\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\r\n\t\t\tif ( ret || support.disconnectedMatch ||\r\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\r\n\t\t\t\t\t// fragment in IE 9\r\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t} catch(e) {}\r\n\t}\r\n\r\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\r\n};\r\n\r\nSizzle.contains = function( context, elem ) {\r\n\t// Set document vars if needed\r\n\tif ( ( context.ownerDocument || context ) !== document ) {\r\n\t\tsetDocument( context );\r\n\t}\r\n\treturn contains( context, elem );\r\n};\r\n\r\nSizzle.attr = function( elem, name ) {\r\n\t// Set document vars if needed\r\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\r\n\t\tsetDocument( elem );\r\n\t}\r\n\r\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\r\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\r\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\r\n\t\t\tfn( elem, name, !documentIsHTML ) :\r\n\t\t\tundefined;\r\n\r\n\treturn val !== undefined ?\r\n\t\tval :\r\n\t\tsupport.attributes || !documentIsHTML ?\r\n\t\t\telem.getAttribute( name ) :\r\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\r\n\t\t\t\tval.value :\r\n\t\t\t\tnull;\r\n};\r\n\r\nSizzle.error = function( msg ) {\r\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\r\n};\r\n\r\n/**\r\n * Document sorting and removing duplicates\r\n * @param {ArrayLike} results\r\n */\r\nSizzle.uniqueSort = function( results ) {\r\n\tvar elem,\r\n\t\tduplicates = [],\r\n\t\tj = 0,\r\n\t\ti = 0;\r\n\r\n\t// Unless we *know* we can detect duplicates, assume their presence\r\n\thasDuplicate = !support.detectDuplicates;\r\n\tsortInput = !support.sortStable && results.slice( 0 );\r\n\tresults.sort( sortOrder );\r\n\r\n\tif ( hasDuplicate ) {\r\n\t\twhile ( (elem = results[i++]) ) {\r\n\t\t\tif ( elem === results[ i ] ) {\r\n\t\t\t\tj = duplicates.push( i );\r\n\t\t\t}\r\n\t\t}\r\n\t\twhile ( j-- ) {\r\n\t\t\tresults.splice( duplicates[ j ], 1 );\r\n\t\t}\r\n\t}\r\n\r\n\t// Clear input after sorting to release objects\r\n\t// See https://github.com/jquery/sizzle/pull/225\r\n\tsortInput = null;\r\n\r\n\treturn results;\r\n};\r\n\r\n/**\r\n * Utility function for retrieving the text value of an array of DOM nodes\r\n * @param {Array|Element} elem\r\n */\r\ngetText = Sizzle.getText = function( elem ) {\r\n\tvar node,\r\n\t\tret = \"\",\r\n\t\ti = 0,\r\n\t\tnodeType = elem.nodeType;\r\n\r\n\tif ( !nodeType ) {\r\n\t\t// If no nodeType, this is expected to be an array\r\n\t\twhile ( (node = elem[i++]) ) {\r\n\t\t\t// Do not traverse comment nodes\r\n\t\t\tret += getText( node );\r\n\t\t}\r\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\r\n\t\t// Use textContent for elements\r\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\r\n\t\tif ( typeof elem.textContent === \"string\" ) {\r\n\t\t\treturn elem.textContent;\r\n\t\t} else {\r\n\t\t\t// Traverse its children\r\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r\n\t\t\t\tret += getText( elem );\r\n\t\t\t}\r\n\t\t}\r\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\r\n\t\treturn elem.nodeValue;\r\n\t}\r\n\t// Do not include comment or processing instruction nodes\r\n\r\n\treturn ret;\r\n};\r\n\r\nExpr = Sizzle.selectors = {\r\n\r\n\t// Can be adjusted by the user\r\n\tcacheLength: 50,\r\n\r\n\tcreatePseudo: markFunction,\r\n\r\n\tmatch: matchExpr,\r\n\r\n\tattrHandle: {},\r\n\r\n\tfind: {},\r\n\r\n\trelative: {\r\n\t\t\">\": { dir: \"parentNode\", first: true },\r\n\t\t\" \": { dir: \"parentNode\" },\r\n\t\t\"+\": { dir: \"previousSibling\", first: true },\r\n\t\t\"~\": { dir: \"previousSibling\" }\r\n\t},\r\n\r\n\tpreFilter: {\r\n\t\t\"ATTR\": function( match ) {\r\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\r\n\r\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\r\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\r\n\r\n\t\t\tif ( match[2] === \"~=\" ) {\r\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\r\n\t\t\t}\r\n\r\n\t\t\treturn match.slice( 0, 4 );\r\n\t\t},\r\n\r\n\t\t\"CHILD\": function( match ) {\r\n\t\t\t/* matches from matchExpr[\"CHILD\"]\r\n\t\t\t\t1 type (only|nth|...)\r\n\t\t\t\t2 what (child|of-type)\r\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\r\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\r\n\t\t\t\t5 sign of xn-component\r\n\t\t\t\t6 x of xn-component\r\n\t\t\t\t7 sign of y-component\r\n\t\t\t\t8 y of y-component\r\n\t\t\t*/\r\n\t\t\tmatch[1] = match[1].toLowerCase();\r\n\r\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\r\n\t\t\t\t// nth-* requires argument\r\n\t\t\t\tif ( !match[3] ) {\r\n\t\t\t\t\tSizzle.error( match[0] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\r\n\t\t\t\t// remember that false/true cast respectively to 0/1\r\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\r\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\r\n\r\n\t\t\t// other types prohibit arguments\r\n\t\t\t} else if ( match[3] ) {\r\n\t\t\t\tSizzle.error( match[0] );\r\n\t\t\t}\r\n\r\n\t\t\treturn match;\r\n\t\t},\r\n\r\n\t\t\"PSEUDO\": function( match ) {\r\n\t\t\tvar excess,\r\n\t\t\t\tunquoted = !match[6] && match[2];\r\n\r\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// Accept quoted arguments as-is\r\n\t\t\tif ( match[3] ) {\r\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\r\n\r\n\t\t\t// Strip excess characters from unquoted arguments\r\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\r\n\t\t\t\t// Get excess from tokenize (recursively)\r\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\r\n\t\t\t\t// advance to the next closing parenthesis\r\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\r\n\r\n\t\t\t\t// excess is a negative index\r\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\r\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\r\n\t\t\t}\r\n\r\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\r\n\t\t\treturn match.slice( 0, 3 );\r\n\t\t}\r\n\t},\r\n\r\n\tfilter: {\r\n\r\n\t\t\"TAG\": function( nodeNameSelector ) {\r\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\r\n\t\t\treturn nodeNameSelector === \"*\" ?\r\n\t\t\t\tfunction() { return true; } :\r\n\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\r\n\t\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"CLASS\": function( className ) {\r\n\t\t\tvar pattern = classCache[ className + \" \" ];\r\n\r\n\t\t\treturn pattern ||\r\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\r\n\t\t\t\tclassCache( className, function( elem ) {\r\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\r\n\t\t\t\t});\r\n\t\t},\r\n\r\n\t\t\"ATTR\": function( name, operator, check ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar result = Sizzle.attr( elem, name );\r\n\r\n\t\t\t\tif ( result == null ) {\r\n\t\t\t\t\treturn operator === \"!=\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( !operator ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult += \"\";\r\n\r\n\t\t\t\treturn operator === \"=\" ? result === check :\r\n\t\t\t\t\toperator === \"!=\" ? result !== check :\r\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\r\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\r\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\r\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\r\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\r\n\t\t\t\t\tfalse;\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\r\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\r\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\r\n\t\t\t\tofType = what === \"of-type\";\r\n\r\n\t\t\treturn first === 1 && last === 0 ?\r\n\r\n\t\t\t\t// Shortcut for :nth-*(n)\r\n\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\treturn !!elem.parentNode;\r\n\t\t\t\t} :\r\n\r\n\t\t\t\tfunction( elem, context, xml ) {\r\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\r\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\r\n\t\t\t\t\t\tparent = elem.parentNode,\r\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\r\n\t\t\t\t\t\tuseCache = !xml && !ofType;\r\n\r\n\t\t\t\t\tif ( parent ) {\r\n\r\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\r\n\t\t\t\t\t\tif ( simple ) {\r\n\t\t\t\t\t\t\twhile ( dir ) {\r\n\t\t\t\t\t\t\t\tnode = elem;\r\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\r\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\r\n\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\r\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\r\n\r\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\r\n\t\t\t\t\t\tif ( forward && useCache ) {\r\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\r\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\r\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\r\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\r\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\r\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\r\n\r\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\r\n\r\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\r\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\r\n\r\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\r\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\r\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Use previously-cached element index if available\r\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\r\n\t\t\t\t\t\t\tdiff = cache[1];\r\n\r\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\r\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\r\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\r\n\r\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\r\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\r\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\r\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\r\n\t\t\t\t\t\tdiff -= last;\r\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"PSEUDO\": function( pseudo, argument ) {\r\n\t\t\t// pseudo-class names are case-insensitive\r\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\r\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\r\n\t\t\t// Remember that setFilters inherits from pseudos\r\n\t\t\tvar args,\r\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\r\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\r\n\r\n\t\t\t// The user may use createPseudo to indicate that\r\n\t\t\t// arguments are needed to create the filter function\r\n\t\t\t// just as Sizzle does\r\n\t\t\tif ( fn[ expando ] ) {\r\n\t\t\t\treturn fn( argument );\r\n\t\t\t}\r\n\r\n\t\t\t// But maintain support for old signatures\r\n\t\t\tif ( fn.length > 1 ) {\r\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\r\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\r\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\r\n\t\t\t\t\t\tvar idx,\r\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\r\n\t\t\t\t\t\t\ti = matched.length;\r\n\t\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\r\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}) :\r\n\t\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\t\treturn fn( elem, 0, args );\r\n\t\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn fn;\r\n\t\t}\r\n\t},\r\n\r\n\tpseudos: {\r\n\t\t// Potentially complex pseudos\r\n\t\t\"not\": markFunction(function( selector ) {\r\n\t\t\t// Trim the selector passed to compile\r\n\t\t\t// to avoid treating leading and trailing\r\n\t\t\t// spaces as combinators\r\n\t\t\tvar input = [],\r\n\t\t\t\tresults = [],\r\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\r\n\r\n\t\t\treturn matcher[ expando ] ?\r\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\r\n\t\t\t\t\tvar elem,\r\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\r\n\t\t\t\t\t\ti = seed.length;\r\n\r\n\t\t\t\t\t// Match elements unmatched by `matcher`\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\r\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}) :\r\n\t\t\t\tfunction( elem, context, xml ) {\r\n\t\t\t\t\tinput[0] = elem;\r\n\t\t\t\t\tmatcher( input, null, xml, results );\r\n\t\t\t\t\treturn !results.pop();\r\n\t\t\t\t};\r\n\t\t}),\r\n\r\n\t\t\"has\": markFunction(function( selector ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t\"contains\": markFunction(function( text ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t// \"Whether an element is represented by a :lang() selector\r\n\t\t// is based solely on the element's language value\r\n\t\t// being equal to the identifier C,\r\n\t\t// or beginning with the identifier C immediately followed by \"-\".\r\n\t\t// The matching of C against the element's language value is performed case-insensitively.\r\n\t\t// The identifier C does not have to be a valid language name.\"\r\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\r\n\t\t\"lang\": markFunction( function( lang ) {\r\n\t\t\t// lang value must be a valid identifier\r\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\r\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\r\n\t\t\t}\r\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar elemLang;\r\n\t\t\t\tdo {\r\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\r\n\t\t\t\t\t\telem.lang :\r\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\r\n\r\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\r\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t// Miscellaneous\r\n\t\t\"target\": function( elem ) {\r\n\t\t\tvar hash = window.location && window.location.hash;\r\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\r\n\t\t},\r\n\r\n\t\t\"root\": function( elem ) {\r\n\t\t\treturn elem === docElem;\r\n\t\t},\r\n\r\n\t\t\"focus\": function( elem ) {\r\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\r\n\t\t},\r\n\r\n\t\t// Boolean properties\r\n\t\t\"enabled\": function( elem ) {\r\n\t\t\treturn elem.disabled === false;\r\n\t\t},\r\n\r\n\t\t\"disabled\": function( elem ) {\r\n\t\t\treturn elem.disabled === true;\r\n\t\t},\r\n\r\n\t\t\"checked\": function( elem ) {\r\n\t\t\t// In CSS3, :checked should return both checked and selected elements\r\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\r\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\r\n\t\t},\r\n\r\n\t\t\"selected\": function( elem ) {\r\n\t\t\t// Accessing this property makes selected-by-default\r\n\t\t\t// options in Safari work properly\r\n\t\t\tif ( elem.parentNode ) {\r\n\t\t\t\telem.parentNode.selectedIndex;\r\n\t\t\t}\r\n\r\n\t\t\treturn elem.selected === true;\r\n\t\t},\r\n\r\n\t\t// Contents\r\n\t\t\"empty\": function( elem ) {\r\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\r\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\r\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\r\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\r\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r\n\t\t\t\tif ( elem.nodeType < 6 ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t\"parent\": function( elem ) {\r\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\r\n\t\t},\r\n\r\n\t\t// Element/input types\r\n\t\t\"header\": function( elem ) {\r\n\t\t\treturn rheader.test( elem.nodeName );\r\n\t\t},\r\n\r\n\t\t\"input\": function( elem ) {\r\n\t\t\treturn rinputs.test( elem.nodeName );\r\n\t\t},\r\n\r\n\t\t\"button\": function( elem ) {\r\n\t\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\r\n\t\t},\r\n\r\n\t\t\"text\": function( elem ) {\r\n\t\t\tvar attr;\r\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\r\n\t\t\t\telem.type === \"text\" &&\r\n\r\n\t\t\t\t// Support: IE<8\r\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\r\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\r\n\t\t},\r\n\r\n\t\t// Position-in-collection\r\n\t\t\"first\": createPositionalPseudo(function() {\r\n\t\t\treturn [ 0 ];\r\n\t\t}),\r\n\r\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\treturn [ length - 1 ];\r\n\t\t}),\r\n\r\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\r\n\t\t}),\r\n\r\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\tvar i = 0;\r\n\t\t\tfor ( ; i < length; i += 2 ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\tvar i = 1;\r\n\t\t\tfor ( ; i < length; i += 2 ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\tvar i = argument < 0 ? argument + length : argument;\r\n\t\t\tfor ( ; --i >= 0; ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\tvar i = argument < 0 ? argument + length : argument;\r\n\t\t\tfor ( ; ++i < length; ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t})\r\n\t}\r\n};\r\n\r\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\r\n\r\n// Add button/input type pseudos\r\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\r\n\tExpr.pseudos[ i ] = createInputPseudo( i );\r\n}\r\nfor ( i in { submit: true, reset: true } ) {\r\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\r\n}\r\n\r\n// Easy API for creating new setFilters\r\nfunction setFilters() {}\r\nsetFilters.prototype = Expr.filters = Expr.pseudos;\r\nExpr.setFilters = new setFilters();\r\n\r\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\r\n\tvar matched, match, tokens, type,\r\n\t\tsoFar, groups, preFilters,\r\n\t\tcached = tokenCache[ selector + \" \" ];\r\n\r\n\tif ( cached ) {\r\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\r\n\t}\r\n\r\n\tsoFar = selector;\r\n\tgroups = [];\r\n\tpreFilters = Expr.preFilter;\r\n\r\n\twhile ( soFar ) {\r\n\r\n\t\t// Comma and first run\r\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\r\n\t\t\tif ( match ) {\r\n\t\t\t\t// Don't consume trailing commas as valid\r\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\r\n\t\t\t}\r\n\t\t\tgroups.push( (tokens = []) );\r\n\t\t}\r\n\r\n\t\tmatched = false;\r\n\r\n\t\t// Combinators\r\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\r\n\t\t\tmatched = match.shift();\r\n\t\t\ttokens.push({\r\n\t\t\t\tvalue: matched,\r\n\t\t\t\t// Cast descendant combinators to space\r\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\r\n\t\t\t});\r\n\t\t\tsoFar = soFar.slice( matched.length );\r\n\t\t}\r\n\r\n\t\t// Filters\r\n\t\tfor ( type in Expr.filter ) {\r\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\r\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\r\n\t\t\t\tmatched = match.shift();\r\n\t\t\t\ttokens.push({\r\n\t\t\t\t\tvalue: matched,\r\n\t\t\t\t\ttype: type,\r\n\t\t\t\t\tmatches: match\r\n\t\t\t\t});\r\n\t\t\t\tsoFar = soFar.slice( matched.length );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( !matched ) {\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the length of the invalid excess\r\n\t// if we're just parsing\r\n\t// Otherwise, throw an error or return tokens\r\n\treturn parseOnly ?\r\n\t\tsoFar.length :\r\n\t\tsoFar ?\r\n\t\t\tSizzle.error( selector ) :\r\n\t\t\t// Cache the tokens\r\n\t\t\ttokenCache( selector, groups ).slice( 0 );\r\n};\r\n\r\nfunction toSelector( tokens ) {\r\n\tvar i = 0,\r\n\t\tlen = tokens.length,\r\n\t\tselector = \"\";\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tselector += tokens[i].value;\r\n\t}\r\n\treturn selector;\r\n}\r\n\r\nfunction addCombinator( matcher, combinator, base ) {\r\n\tvar dir = combinator.dir,\r\n\t\tcheckNonElements = base && dir === \"parentNode\",\r\n\t\tdoneName = done++;\r\n\r\n\treturn combinator.first ?\r\n\t\t// Check against closest ancestor/preceding element\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\treturn matcher( elem, context, xml );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} :\r\n\r\n\t\t// Check against all ancestor/preceding elements\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\tvar oldCache, outerCache,\r\n\t\t\t\tnewCache = [ dirruns, doneName ];\r\n\r\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\r\n\t\t\tif ( xml ) {\r\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\r\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\r\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\r\n\r\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\r\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\r\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\r\n\r\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\r\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n}\r\n\r\nfunction elementMatcher( matchers ) {\r\n\treturn matchers.length > 1 ?\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\tvar i = matchers.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t} :\r\n\t\tmatchers[0];\r\n}\r\n\r\nfunction multipleContexts( selector, contexts, results ) {\r\n\tvar i = 0,\r\n\t\tlen = contexts.length;\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tSizzle( selector, contexts[i], results );\r\n\t}\r\n\treturn results;\r\n}\r\n\r\nfunction condense( unmatched, map, filter, context, xml ) {\r\n\tvar elem,\r\n\t\tnewUnmatched = [],\r\n\t\ti = 0,\r\n\t\tlen = unmatched.length,\r\n\t\tmapped = map != null;\r\n\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tif ( (elem = unmatched[i]) ) {\r\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\r\n\t\t\t\tnewUnmatched.push( elem );\r\n\t\t\t\tif ( mapped ) {\r\n\t\t\t\t\tmap.push( i );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn newUnmatched;\r\n}\r\n\r\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\r\n\tif ( postFilter && !postFilter[ expando ] ) {\r\n\t\tpostFilter = setMatcher( postFilter );\r\n\t}\r\n\tif ( postFinder && !postFinder[ expando ] ) {\r\n\t\tpostFinder = setMatcher( postFinder, postSelector );\r\n\t}\r\n\treturn markFunction(function( seed, results, context, xml ) {\r\n\t\tvar temp, i, elem,\r\n\t\t\tpreMap = [],\r\n\t\t\tpostMap = [],\r\n\t\t\tpreexisting = results.length,\r\n\r\n\t\t\t// Get initial elements from seed or context\r\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\r\n\r\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\r\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\r\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\r\n\t\t\t\telems,\r\n\r\n\t\t\tmatcherOut = matcher ?\r\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\r\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\r\n\r\n\t\t\t\t\t// ...intermediate processing is necessary\r\n\t\t\t\t\t[] :\r\n\r\n\t\t\t\t\t// ...otherwise use results directly\r\n\t\t\t\t\tresults :\r\n\t\t\t\tmatcherIn;\r\n\r\n\t\t// Find primary matches\r\n\t\tif ( matcher ) {\r\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\r\n\t\t}\r\n\r\n\t\t// Apply postFilter\r\n\t\tif ( postFilter ) {\r\n\t\t\ttemp = condense( matcherOut, postMap );\r\n\t\t\tpostFilter( temp, [], context, xml );\r\n\r\n\t\t\t// Un-match failing elements by moving them back to matcherIn\r\n\t\t\ti = temp.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( (elem = temp[i]) ) {\r\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( seed ) {\r\n\t\t\tif ( postFinder || preFilter ) {\r\n\t\t\t\tif ( postFinder ) {\r\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\r\n\t\t\t\t\ttemp = [];\r\n\t\t\t\t\ti = matcherOut.length;\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\r\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\r\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\r\n\t\t\t\ti = matcherOut.length;\r\n\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\r\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\r\n\r\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Add elements to results, through postFinder if defined\r\n\t\t} else {\r\n\t\t\tmatcherOut = condense(\r\n\t\t\t\tmatcherOut === results ?\r\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\r\n\t\t\t\t\tmatcherOut\r\n\t\t\t);\r\n\t\t\tif ( postFinder ) {\r\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\r\n\t\t\t} else {\r\n\t\t\t\tpush.apply( results, matcherOut );\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction matcherFromTokens( tokens ) {\r\n\tvar checkContext, matcher, j,\r\n\t\tlen = tokens.length,\r\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\r\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\r\n\t\ti = leadingRelative ? 1 : 0,\r\n\r\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\r\n\t\tmatchContext = addCombinator( function( elem ) {\r\n\t\t\treturn elem === checkContext;\r\n\t\t}, implicitRelative, true ),\r\n\t\tmatchAnyContext = addCombinator( function( elem ) {\r\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\r\n\t\t}, implicitRelative, true ),\r\n\t\tmatchers = [ function( elem, context, xml ) {\r\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\r\n\t\t\t\t(checkContext = context).nodeType ?\r\n\t\t\t\t\tmatchContext( elem, context, xml ) :\r\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\r\n\t\t} ];\r\n\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\r\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\r\n\t\t} else {\r\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\r\n\r\n\t\t\t// Return special upon seeing a positional matcher\r\n\t\t\tif ( matcher[ expando ] ) {\r\n\t\t\t\t// Find the next relative operator (if any) for proper handling\r\n\t\t\t\tj = ++i;\r\n\t\t\t\tfor ( ; j < len; j++ ) {\r\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn setMatcher(\r\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\r\n\t\t\t\t\ti > 1 && toSelector(\r\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\r\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\r\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\r\n\t\t\t\t\tmatcher,\r\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\r\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\r\n\t\t\t\t\tj < len && toSelector( tokens )\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tmatchers.push( matcher );\r\n\t\t}\r\n\t}\r\n\r\n\treturn elementMatcher( matchers );\r\n}\r\n\r\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\r\n\tvar bySet = setMatchers.length > 0,\r\n\t\tbyElement = elementMatchers.length > 0,\r\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\r\n\t\t\tvar elem, j, matcher,\r\n\t\t\t\tmatchedCount = 0,\r\n\t\t\t\ti = \"0\",\r\n\t\t\t\tunmatched = seed && [],\r\n\t\t\t\tsetMatched = [],\r\n\t\t\t\tcontextBackup = outermostContext,\r\n\t\t\t\t// We must always have either seed elements or outermost context\r\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\r\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\r\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\r\n\t\t\t\tlen = elems.length;\r\n\r\n\t\t\tif ( outermost ) {\r\n\t\t\t\toutermostContext = context !== document && context;\r\n\t\t\t}\r\n\r\n\t\t\t// Add elements passing elementMatchers directly to results\r\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\r\n\t\t\t// Support: IE<9, Safari\r\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\r\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\r\n\t\t\t\tif ( byElement && elem ) {\r\n\t\t\t\t\tj = 0;\r\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\r\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\r\n\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( outermost ) {\r\n\t\t\t\t\t\tdirruns = dirrunsUnique;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Track unmatched elements for set filters\r\n\t\t\t\tif ( bySet ) {\r\n\t\t\t\t\t// They will have gone through all possible matchers\r\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\r\n\t\t\t\t\t\tmatchedCount--;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Lengthen the array for every element, matched or not\r\n\t\t\t\t\tif ( seed ) {\r\n\t\t\t\t\t\tunmatched.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Apply set filters to unmatched elements\r\n\t\t\tmatchedCount += i;\r\n\t\t\tif ( bySet && i !== matchedCount ) {\r\n\t\t\t\tj = 0;\r\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\r\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( seed ) {\r\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\r\n\t\t\t\t\tif ( matchedCount > 0 ) {\r\n\t\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\r\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\r\n\t\t\t\t\tsetMatched = condense( setMatched );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add matches to results\r\n\t\t\t\tpush.apply( results, setMatched );\r\n\r\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\r\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\r\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\r\n\r\n\t\t\t\t\tSizzle.uniqueSort( results );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Override manipulation of globals by nested matchers\r\n\t\t\tif ( outermost ) {\r\n\t\t\t\tdirruns = dirrunsUnique;\r\n\t\t\t\toutermostContext = contextBackup;\r\n\t\t\t}\r\n\r\n\t\t\treturn unmatched;\r\n\t\t};\r\n\r\n\treturn bySet ?\r\n\t\tmarkFunction( superMatcher ) :\r\n\t\tsuperMatcher;\r\n}\r\n\r\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\r\n\tvar i,\r\n\t\tsetMatchers = [],\r\n\t\telementMatchers = [],\r\n\t\tcached = compilerCache[ selector + \" \" ];\r\n\r\n\tif ( !cached ) {\r\n\t\t// Generate a function of recursive functions that can be used to check each element\r\n\t\tif ( !match ) {\r\n\t\t\tmatch = tokenize( selector );\r\n\t\t}\r\n\t\ti = match.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\tcached = matcherFromTokens( match[i] );\r\n\t\t\tif ( cached[ expando ] ) {\r\n\t\t\t\tsetMatchers.push( cached );\r\n\t\t\t} else {\r\n\t\t\t\telementMatchers.push( cached );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Cache the compiled function\r\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\r\n\r\n\t\t// Save selector and tokenization\r\n\t\tcached.selector = selector;\r\n\t}\r\n\treturn cached;\r\n};\r\n\r\n/**\r\n * A low-level selection function that works with Sizzle's compiled\r\n *  selector functions\r\n * @param {String|Function} selector A selector or a pre-compiled\r\n *  selector function built with Sizzle.compile\r\n * @param {Element} context\r\n * @param {Array} [results]\r\n * @param {Array} [seed] A set of elements to match against\r\n */\r\nselect = Sizzle.select = function( selector, context, results, seed ) {\r\n\tvar i, tokens, token, type, find,\r\n\t\tcompiled = typeof selector === \"function\" && selector,\r\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\r\n\r\n\tresults = results || [];\r\n\r\n\t// Try to minimize operations if there is no seed and only one group\r\n\tif ( match.length === 1 ) {\r\n\r\n\t\t// Take a shortcut and set the context if the root selector is an ID\r\n\t\ttokens = match[0] = match[0].slice( 0 );\r\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\r\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\r\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\r\n\r\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\r\n\t\t\tif ( !context ) {\r\n\t\t\t\treturn results;\r\n\r\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\r\n\t\t\t} else if ( compiled ) {\r\n\t\t\t\tcontext = context.parentNode;\r\n\t\t\t}\r\n\r\n\t\t\tselector = selector.slice( tokens.shift().value.length );\r\n\t\t}\r\n\r\n\t\t// Fetch a seed set for right-to-left matching\r\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\ttoken = tokens[i];\r\n\r\n\t\t\t// Abort if we hit a combinator\r\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif ( (find = Expr.find[ type ]) ) {\r\n\t\t\t\t// Search, expanding context for leading sibling combinators\r\n\t\t\t\tif ( (seed = find(\r\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\r\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\r\n\t\t\t\t)) ) {\r\n\r\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\r\n\t\t\t\t\ttokens.splice( i, 1 );\r\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\r\n\t\t\t\t\tif ( !selector ) {\r\n\t\t\t\t\t\tpush.apply( results, seed );\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Compile and execute a filtering function if one is not provided\r\n\t// Provide `match` to avoid retokenization if we modified the selector above\r\n\t( compiled || compile( selector, match ) )(\r\n\t\tseed,\r\n\t\tcontext,\r\n\t\t!documentIsHTML,\r\n\t\tresults,\r\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\r\n\t);\r\n\treturn results;\r\n};\r\n\r\n// One-time assignments\r\n\r\n// Sort stability\r\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\r\n\r\n// Support: Chrome<14\r\n// Always assume duplicates if they aren't passed to the comparison function\r\nsupport.detectDuplicates = !!hasDuplicate;\r\n\r\n// Initialize against the default document\r\nsetDocument();\r\n\r\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\r\n// Detached nodes confoundingly follow *each other*\r\nsupport.sortDetached = assert(function( div1 ) {\r\n\t// Should return 1, but returns 4 (following)\r\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\r\n});\r\n\r\n// Support: IE<8\r\n// Prevent attribute/property \"interpolation\"\r\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\r\nif ( !assert(function( div ) {\r\n\tdiv.innerHTML = \"<a href='#'></a>\";\r\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\r\n}) ) {\r\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\r\n\t\tif ( !isXML ) {\r\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Support: IE<9\r\n// Use defaultValue in place of getAttribute(\"value\")\r\nif ( !support.attributes || !assert(function( div ) {\r\n\tdiv.innerHTML = \"<input/>\";\r\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\r\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\r\n}) ) {\r\n\taddHandle( \"value\", function( elem, name, isXML ) {\r\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\r\n\t\t\treturn elem.defaultValue;\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Support: IE<9\r\n// Use getAttributeNode to fetch booleans when getAttribute lies\r\nif ( !assert(function( div ) {\r\n\treturn div.getAttribute(\"disabled\") == null;\r\n}) ) {\r\n\taddHandle( booleans, function( elem, name, isXML ) {\r\n\t\tvar val;\r\n\t\tif ( !isXML ) {\r\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\r\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\r\n\t\t\t\t\tval.value :\r\n\t\t\t\tnull;\r\n\t\t}\r\n\t});\r\n}\r\n\r\nreturn Sizzle;\r\n\r\n})( window );\r\n\r\n\r\n\r\njQuery.find = Sizzle;\r\njQuery.expr = Sizzle.selectors;\r\njQuery.expr[\":\"] = jQuery.expr.pseudos;\r\njQuery.unique = Sizzle.uniqueSort;\r\njQuery.text = Sizzle.getText;\r\njQuery.isXMLDoc = Sizzle.isXML;\r\njQuery.contains = Sizzle.contains;\r\n\r\n\r\n\r\nvar rneedsContext = jQuery.expr.match.needsContext;\r\n\r\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\r\n\r\n\r\n\r\nvar risSimple = /^.[^:#\\[\\.,]*$/;\r\n\r\n// Implement the identical functionality for filter and not\r\nfunction winnow( elements, qualifier, not ) {\r\n\tif ( jQuery.isFunction( qualifier ) ) {\r\n\t\treturn jQuery.grep( elements, function( elem, i ) {\r\n\t\t\t/* jshint -W018 */\r\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tif ( qualifier.nodeType ) {\r\n\t\treturn jQuery.grep( elements, function( elem ) {\r\n\t\t\treturn ( elem === qualifier ) !== not;\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tif ( typeof qualifier === \"string\" ) {\r\n\t\tif ( risSimple.test( qualifier ) ) {\r\n\t\t\treturn jQuery.filter( qualifier, elements, not );\r\n\t\t}\r\n\r\n\t\tqualifier = jQuery.filter( qualifier, elements );\r\n\t}\r\n\r\n\treturn jQuery.grep( elements, function( elem ) {\r\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\r\n\t});\r\n}\r\n\r\njQuery.filter = function( expr, elems, not ) {\r\n\tvar elem = elems[ 0 ];\r\n\r\n\tif ( not ) {\r\n\t\texpr = \":not(\" + expr + \")\";\r\n\t}\r\n\r\n\treturn elems.length === 1 && elem.nodeType === 1 ?\r\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\r\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\r\n\t\t\treturn elem.nodeType === 1;\r\n\t\t}));\r\n};\r\n\r\njQuery.fn.extend({\r\n\tfind: function( selector ) {\r\n\t\tvar i,\r\n\t\t\tret = [],\r\n\t\t\tself = this,\r\n\t\t\tlen = self.length;\r\n\r\n\t\tif ( typeof selector !== \"string\" ) {\r\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\r\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}) );\r\n\t\t}\r\n\r\n\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\tjQuery.find( selector, self[ i ], ret );\r\n\t\t}\r\n\r\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\r\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\r\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\r\n\t\treturn ret;\r\n\t},\r\n\tfilter: function( selector ) {\r\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\r\n\t},\r\n\tnot: function( selector ) {\r\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\r\n\t},\r\n\tis: function( selector ) {\r\n\t\treturn !!winnow(\r\n\t\t\tthis,\r\n\r\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\r\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\r\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\r\n\t\t\t\tjQuery( selector ) :\r\n\t\t\t\tselector || [],\r\n\t\t\tfalse\r\n\t\t).length;\r\n\t}\r\n});\r\n\r\n\r\n// Initialize a jQuery object\r\n\r\n\r\n// A central reference to the root jQuery(document)\r\nvar rootjQuery,\r\n\r\n\t// Use the correct document accordingly with window argument (sandbox)\r\n\tdocument = window.document,\r\n\r\n\t// A simple way to check for HTML strings\r\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\r\n\t// Strict HTML recognition (#11290: must start with <)\r\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\r\n\r\n\tinit = jQuery.fn.init = function( selector, context ) {\r\n\t\tvar match, elem;\r\n\r\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\r\n\t\tif ( !selector ) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t// Handle HTML strings\r\n\t\tif ( typeof selector === \"string\" ) {\r\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\r\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\r\n\t\t\t\tmatch = [ null, selector, null ];\r\n\r\n\t\t\t} else {\r\n\t\t\t\tmatch = rquickExpr.exec( selector );\r\n\t\t\t}\r\n\r\n\t\t\t// Match html or make sure no context is specified for #id\r\n\t\t\tif ( match && (match[1] || !context) ) {\r\n\r\n\t\t\t\t// HANDLE: $(html) -> $(array)\r\n\t\t\t\tif ( match[1] ) {\r\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\r\n\r\n\t\t\t\t\t// scripts is true for back-compat\r\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\r\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\r\n\t\t\t\t\t\tmatch[1],\r\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t) );\r\n\r\n\t\t\t\t\t// HANDLE: $(html, props)\r\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\r\n\t\t\t\t\t\tfor ( match in context ) {\r\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\r\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\r\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\r\n\r\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn this;\r\n\r\n\t\t\t\t// HANDLE: $(#id)\r\n\t\t\t\t} else {\r\n\t\t\t\t\telem = document.getElementById( match[2] );\r\n\r\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\r\n\t\t\t\t\t// nodes that are no longer in the document #6963\r\n\t\t\t\t\tif ( elem && elem.parentNode ) {\r\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\r\n\t\t\t\t\t\t// by name instead of ID\r\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\r\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\r\n\t\t\t\t\t\tthis.length = 1;\r\n\t\t\t\t\t\tthis[0] = elem;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.context = document;\r\n\t\t\t\t\tthis.selector = selector;\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\r\n\t\t\t// HANDLE: $(expr, $(...))\r\n\t\t\t} else if ( !context || context.jquery ) {\r\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\r\n\r\n\t\t\t// HANDLE: $(expr, context)\r\n\t\t\t// (which is just equivalent to: $(context).find(expr)\r\n\t\t\t} else {\r\n\t\t\t\treturn this.constructor( context ).find( selector );\r\n\t\t\t}\r\n\r\n\t\t// HANDLE: $(DOMElement)\r\n\t\t} else if ( selector.nodeType ) {\r\n\t\t\tthis.context = this[0] = selector;\r\n\t\t\tthis.length = 1;\r\n\t\t\treturn this;\r\n\r\n\t\t// HANDLE: $(function)\r\n\t\t// Shortcut for document ready\r\n\t\t} else if ( jQuery.isFunction( selector ) ) {\r\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\r\n\t\t\t\trootjQuery.ready( selector ) :\r\n\t\t\t\t// Execute immediately if ready is not present\r\n\t\t\t\tselector( jQuery );\r\n\t\t}\r\n\r\n\t\tif ( selector.selector !== undefined ) {\r\n\t\t\tthis.selector = selector.selector;\r\n\t\t\tthis.context = selector.context;\r\n\t\t}\r\n\r\n\t\treturn jQuery.makeArray( selector, this );\r\n\t};\r\n\r\n// Give the init function the jQuery prototype for later instantiation\r\ninit.prototype = jQuery.fn;\r\n\r\n// Initialize central reference\r\nrootjQuery = jQuery( document );\r\n\r\n\r\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\r\n\t// methods guaranteed to produce a unique set when starting from a unique set\r\n\tguaranteedUnique = {\r\n\t\tchildren: true,\r\n\t\tcontents: true,\r\n\t\tnext: true,\r\n\t\tprev: true\r\n\t};\r\n\r\njQuery.extend({\r\n\tdir: function( elem, dir, until ) {\r\n\t\tvar matched = [],\r\n\t\t\tcur = elem[ dir ];\r\n\r\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\r\n\t\t\tif ( cur.nodeType === 1 ) {\r\n\t\t\t\tmatched.push( cur );\r\n\t\t\t}\r\n\t\t\tcur = cur[dir];\r\n\t\t}\r\n\t\treturn matched;\r\n\t},\r\n\r\n\tsibling: function( n, elem ) {\r\n\t\tvar r = [];\r\n\r\n\t\tfor ( ; n; n = n.nextSibling ) {\r\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\r\n\t\t\t\tr.push( n );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn r;\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\thas: function( target ) {\r\n\t\tvar i,\r\n\t\t\ttargets = jQuery( target, this ),\r\n\t\t\tlen = targets.length;\r\n\r\n\t\treturn this.filter(function() {\r\n\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tclosest: function( selectors, context ) {\r\n\t\tvar cur,\r\n\t\t\ti = 0,\r\n\t\t\tl = this.length,\r\n\t\t\tmatched = [],\r\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\r\n\t\t\t\tjQuery( selectors, context || this.context ) :\r\n\t\t\t\t0;\r\n\r\n\t\tfor ( ; i < l; i++ ) {\r\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\r\n\t\t\t\t// Always skip document fragments\r\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\r\n\t\t\t\t\tpos.index(cur) > -1 :\r\n\r\n\t\t\t\t\t// Don't pass non-elements to Sizzle\r\n\t\t\t\t\tcur.nodeType === 1 &&\r\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\r\n\r\n\t\t\t\t\tmatched.push( cur );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\r\n\t},\r\n\r\n\t// Determine the position of an element within\r\n\t// the matched set of elements\r\n\tindex: function( elem ) {\r\n\r\n\t\t// No argument, return index in parent\r\n\t\tif ( !elem ) {\r\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\r\n\t\t}\r\n\r\n\t\t// index in selector\r\n\t\tif ( typeof elem === \"string\" ) {\r\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\r\n\t\t}\r\n\r\n\t\t// Locate the position of the desired element\r\n\t\treturn jQuery.inArray(\r\n\t\t\t// If it receives a jQuery object, the first element is used\r\n\t\t\telem.jquery ? elem[0] : elem, this );\r\n\t},\r\n\r\n\tadd: function( selector, context ) {\r\n\t\treturn this.pushStack(\r\n\t\t\tjQuery.unique(\r\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\r\n\t\t\t)\r\n\t\t);\r\n\t},\r\n\r\n\taddBack: function( selector ) {\r\n\t\treturn this.add( selector == null ?\r\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\r\n\t\t);\r\n\t}\r\n});\r\n\r\nfunction sibling( cur, dir ) {\r\n\tdo {\r\n\t\tcur = cur[ dir ];\r\n\t} while ( cur && cur.nodeType !== 1 );\r\n\r\n\treturn cur;\r\n}\r\n\r\njQuery.each({\r\n\tparent: function( elem ) {\r\n\t\tvar parent = elem.parentNode;\r\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\r\n\t},\r\n\tparents: function( elem ) {\r\n\t\treturn jQuery.dir( elem, \"parentNode\" );\r\n\t},\r\n\tparentsUntil: function( elem, i, until ) {\r\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\r\n\t},\r\n\tnext: function( elem ) {\r\n\t\treturn sibling( elem, \"nextSibling\" );\r\n\t},\r\n\tprev: function( elem ) {\r\n\t\treturn sibling( elem, \"previousSibling\" );\r\n\t},\r\n\tnextAll: function( elem ) {\r\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\r\n\t},\r\n\tprevAll: function( elem ) {\r\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\r\n\t},\r\n\tnextUntil: function( elem, i, until ) {\r\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\r\n\t},\r\n\tprevUntil: function( elem, i, until ) {\r\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\r\n\t},\r\n\tsiblings: function( elem ) {\r\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\r\n\t},\r\n\tchildren: function( elem ) {\r\n\t\treturn jQuery.sibling( elem.firstChild );\r\n\t},\r\n\tcontents: function( elem ) {\r\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\r\n\t\t\telem.contentDocument || elem.contentWindow.document :\r\n\t\t\tjQuery.merge( [], elem.childNodes );\r\n\t}\r\n}, function( name, fn ) {\r\n\tjQuery.fn[ name ] = function( until, selector ) {\r\n\t\tvar ret = jQuery.map( this, fn, until );\r\n\r\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\r\n\t\t\tselector = until;\r\n\t\t}\r\n\r\n\t\tif ( selector && typeof selector === \"string\" ) {\r\n\t\t\tret = jQuery.filter( selector, ret );\r\n\t\t}\r\n\r\n\t\tif ( this.length > 1 ) {\r\n\t\t\t// Remove duplicates\r\n\t\t\tif ( !guaranteedUnique[ name ] ) {\r\n\t\t\t\tret = jQuery.unique( ret );\r\n\t\t\t}\r\n\r\n\t\t\t// Reverse order for parents* and prev-derivatives\r\n\t\t\tif ( rparentsprev.test( name ) ) {\r\n\t\t\t\tret = ret.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( ret );\r\n\t};\r\n});\r\nvar rnotwhite = (/\\S+/g);\r\n\r\n\r\n\r\n// String to Object options format cache\r\nvar optionsCache = {};\r\n\r\n// Convert String-formatted options into Object-formatted ones and store in cache\r\nfunction createOptions( options ) {\r\n\tvar object = optionsCache[ options ] = {};\r\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\r\n\t\tobject[ flag ] = true;\r\n\t});\r\n\treturn object;\r\n}\r\n\r\n/*\r\n * Create a callback list using the following parameters:\r\n *\r\n *\toptions: an optional list of space-separated options that will change how\r\n *\t\t\tthe callback list behaves or a more traditional option object\r\n *\r\n * By default a callback list will act like an event callback list and can be\r\n * \"fired\" multiple times.\r\n *\r\n * Possible options:\r\n *\r\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\r\n *\r\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\r\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\r\n *\t\t\t\t\tvalues (like a Deferred)\r\n *\r\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\r\n *\r\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\r\n *\r\n */\r\njQuery.Callbacks = function( options ) {\r\n\r\n\t// Convert options from String-formatted to Object-formatted if needed\r\n\t// (we check in cache first)\r\n\toptions = typeof options === \"string\" ?\r\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\r\n\t\tjQuery.extend( {}, options );\r\n\r\n\tvar // Flag to know if list is currently firing\r\n\t\tfiring,\r\n\t\t// Last fire value (for non-forgettable lists)\r\n\t\tmemory,\r\n\t\t// Flag to know if list was already fired\r\n\t\tfired,\r\n\t\t// End of the loop when firing\r\n\t\tfiringLength,\r\n\t\t// Index of currently firing callback (modified by remove if needed)\r\n\t\tfiringIndex,\r\n\t\t// First callback to fire (used internally by add and fireWith)\r\n\t\tfiringStart,\r\n\t\t// Actual callback list\r\n\t\tlist = [],\r\n\t\t// Stack of fire calls for repeatable lists\r\n\t\tstack = !options.once && [],\r\n\t\t// Fire callbacks\r\n\t\tfire = function( data ) {\r\n\t\t\tmemory = options.memory && data;\r\n\t\t\tfired = true;\r\n\t\t\tfiringIndex = firingStart || 0;\r\n\t\t\tfiringStart = 0;\r\n\t\t\tfiringLength = list.length;\r\n\t\t\tfiring = true;\r\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\r\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\r\n\t\t\t\t\tmemory = false; // To prevent further calls using add\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfiring = false;\r\n\t\t\tif ( list ) {\r\n\t\t\t\tif ( stack ) {\r\n\t\t\t\t\tif ( stack.length ) {\r\n\t\t\t\t\t\tfire( stack.shift() );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if ( memory ) {\r\n\t\t\t\t\tlist = [];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tself.disable();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t// Actual Callbacks object\r\n\t\tself = {\r\n\t\t\t// Add a callback or a collection of callbacks to the list\r\n\t\t\tadd: function() {\r\n\t\t\t\tif ( list ) {\r\n\t\t\t\t\t// First, we save the current length\r\n\t\t\t\t\tvar start = list.length;\r\n\t\t\t\t\t(function add( args ) {\r\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\r\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\r\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\r\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\r\n\t\t\t\t\t\t\t\t\tlist.push( arg );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\r\n\t\t\t\t\t\t\t\t// Inspect recursively\r\n\t\t\t\t\t\t\t\tadd( arg );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t})( arguments );\r\n\t\t\t\t\t// Do we need to add the callbacks to the\r\n\t\t\t\t\t// current firing batch?\r\n\t\t\t\t\tif ( firing ) {\r\n\t\t\t\t\t\tfiringLength = list.length;\r\n\t\t\t\t\t// With memory, if we're not firing then\r\n\t\t\t\t\t// we should call right away\r\n\t\t\t\t\t} else if ( memory ) {\r\n\t\t\t\t\t\tfiringStart = start;\r\n\t\t\t\t\t\tfire( memory );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Remove a callback from the list\r\n\t\t\tremove: function() {\r\n\t\t\t\tif ( list ) {\r\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\r\n\t\t\t\t\t\tvar index;\r\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\r\n\t\t\t\t\t\t\tlist.splice( index, 1 );\r\n\t\t\t\t\t\t\t// Handle firing indexes\r\n\t\t\t\t\t\t\tif ( firing ) {\r\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\r\n\t\t\t\t\t\t\t\t\tfiringLength--;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\r\n\t\t\t\t\t\t\t\t\tfiringIndex--;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Check if a given callback is in the list.\r\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\r\n\t\t\thas: function( fn ) {\r\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\r\n\t\t\t},\r\n\t\t\t// Remove all callbacks from the list\r\n\t\t\tempty: function() {\r\n\t\t\t\tlist = [];\r\n\t\t\t\tfiringLength = 0;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Have the list do nothing anymore\r\n\t\t\tdisable: function() {\r\n\t\t\t\tlist = stack = memory = undefined;\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Is it disabled?\r\n\t\t\tdisabled: function() {\r\n\t\t\t\treturn !list;\r\n\t\t\t},\r\n\t\t\t// Lock the list in its current state\r\n\t\t\tlock: function() {\r\n\t\t\t\tstack = undefined;\r\n\t\t\t\tif ( !memory ) {\r\n\t\t\t\t\tself.disable();\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Is it locked?\r\n\t\t\tlocked: function() {\r\n\t\t\t\treturn !stack;\r\n\t\t\t},\r\n\t\t\t// Call all callbacks with the given context and arguments\r\n\t\t\tfireWith: function( context, args ) {\r\n\t\t\t\tif ( list && ( !fired || stack ) ) {\r\n\t\t\t\t\targs = args || [];\r\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\r\n\t\t\t\t\tif ( firing ) {\r\n\t\t\t\t\t\tstack.push( args );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfire( args );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// Call all the callbacks with the given arguments\r\n\t\t\tfire: function() {\r\n\t\t\t\tself.fireWith( this, arguments );\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\t// To know if the callbacks have already been called at least once\r\n\t\t\tfired: function() {\r\n\t\t\t\treturn !!fired;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\treturn self;\r\n};\r\n\r\n\r\njQuery.extend({\r\n\r\n\tDeferred: function( func ) {\r\n\t\tvar tuples = [\r\n\t\t\t\t// action, add listener, listener list, final state\r\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\r\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\r\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\r\n\t\t\t],\r\n\t\t\tstate = \"pending\",\r\n\t\t\tpromise = {\r\n\t\t\t\tstate: function() {\r\n\t\t\t\t\treturn state;\r\n\t\t\t\t},\r\n\t\t\t\talways: function() {\r\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\r\n\t\t\t\t\tvar fns = arguments;\r\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\r\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\r\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\r\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\r\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\r\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\r\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\r\n\t\t\t\t\t\t\t\t\treturned.promise()\r\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\r\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\r\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tfns = null;\r\n\t\t\t\t\t}).promise();\r\n\t\t\t\t},\r\n\t\t\t\t// Get a promise for this deferred\r\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\r\n\t\t\t\tpromise: function( obj ) {\r\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdeferred = {};\r\n\r\n\t\t// Keep pipe for back-compat\r\n\t\tpromise.pipe = promise.then;\r\n\r\n\t\t// Add list-specific methods\r\n\t\tjQuery.each( tuples, function( i, tuple ) {\r\n\t\t\tvar list = tuple[ 2 ],\r\n\t\t\t\tstateString = tuple[ 3 ];\r\n\r\n\t\t\t// promise[ done | fail | progress ] = list.add\r\n\t\t\tpromise[ tuple[1] ] = list.add;\r\n\r\n\t\t\t// Handle state\r\n\t\t\tif ( stateString ) {\r\n\t\t\t\tlist.add(function() {\r\n\t\t\t\t\t// state = [ resolved | rejected ]\r\n\t\t\t\t\tstate = stateString;\r\n\r\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\r\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\r\n\t\t\t}\r\n\r\n\t\t\t// deferred[ resolve | reject | notify ]\r\n\t\t\tdeferred[ tuple[0] ] = function() {\r\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\r\n\t\t\t\treturn this;\r\n\t\t\t};\r\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\r\n\t\t});\r\n\r\n\t\t// Make the deferred a promise\r\n\t\tpromise.promise( deferred );\r\n\r\n\t\t// Call given func if any\r\n\t\tif ( func ) {\r\n\t\t\tfunc.call( deferred, deferred );\r\n\t\t}\r\n\r\n\t\t// All done!\r\n\t\treturn deferred;\r\n\t},\r\n\r\n\t// Deferred helper\r\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\r\n\t\tvar i = 0,\r\n\t\t\tresolveValues = slice.call( arguments ),\r\n\t\t\tlength = resolveValues.length,\r\n\r\n\t\t\t// the count of uncompleted subordinates\r\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\r\n\r\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\r\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\r\n\r\n\t\t\t// Update function for both resolve and progress values\r\n\t\t\tupdateFunc = function( i, contexts, values ) {\r\n\t\t\t\treturn function( value ) {\r\n\t\t\t\t\tcontexts[ i ] = this;\r\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\r\n\t\t\t\t\tif ( values === progressValues ) {\r\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\r\n\r\n\t\t\t\t\t} else if ( !(--remaining) ) {\r\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\tprogressValues, progressContexts, resolveContexts;\r\n\r\n\t\t// add listeners to Deferred subordinates; treat others as resolved\r\n\t\tif ( length > 1 ) {\r\n\t\t\tprogressValues = new Array( length );\r\n\t\t\tprogressContexts = new Array( length );\r\n\t\t\tresolveContexts = new Array( length );\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\r\n\t\t\t\t\tresolveValues[ i ].promise()\r\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\r\n\t\t\t\t\t\t.fail( deferred.reject )\r\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\t--remaining;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// if we're not waiting on anything, resolve the master\r\n\t\tif ( !remaining ) {\r\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\r\n\t\t}\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n});\r\n\r\n\r\n// The deferred used on DOM ready\r\nvar readyList;\r\n\r\njQuery.fn.ready = function( fn ) {\r\n\t// Add the callback\r\n\tjQuery.ready.promise().done( fn );\r\n\r\n\treturn this;\r\n};\r\n\r\njQuery.extend({\r\n\t// Is the DOM ready to be used? Set to true once it occurs.\r\n\tisReady: false,\r\n\r\n\t// A counter to track how many items to wait for before\r\n\t// the ready event fires. See #6781\r\n\treadyWait: 1,\r\n\r\n\t// Hold (or release) the ready event\r\n\tholdReady: function( hold ) {\r\n\t\tif ( hold ) {\r\n\t\t\tjQuery.readyWait++;\r\n\t\t} else {\r\n\t\t\tjQuery.ready( true );\r\n\t\t}\r\n\t},\r\n\r\n\t// Handle when the DOM is ready\r\n\tready: function( wait ) {\r\n\r\n\t\t// Abort if there are pending holds or we're already ready\r\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\r\n\t\tif ( !document.body ) {\r\n\t\t\treturn setTimeout( jQuery.ready );\r\n\t\t}\r\n\r\n\t\t// Remember that the DOM is ready\r\n\t\tjQuery.isReady = true;\r\n\r\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\r\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If there are functions bound, to execute\r\n\t\treadyList.resolveWith( document, [ jQuery ] );\r\n\r\n\t\t// Trigger any bound ready events\r\n\t\tif ( jQuery.fn.triggerHandler ) {\r\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\r\n\t\t\tjQuery( document ).off( \"ready\" );\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * Clean-up method for dom ready events\r\n */\r\nfunction detach() {\r\n\tif ( document.addEventListener ) {\r\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\r\n\t\twindow.removeEventListener( \"load\", completed, false );\r\n\r\n\t} else {\r\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\r\n\t\twindow.detachEvent( \"onload\", completed );\r\n\t}\r\n}\r\n\r\n/**\r\n * The ready event handler and self cleanup method\r\n */\r\nfunction completed() {\r\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\r\n\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\r\n\t\tdetach();\r\n\t\tjQuery.ready();\r\n\t}\r\n}\r\n\r\njQuery.ready.promise = function( obj ) {\r\n\tif ( !readyList ) {\r\n\r\n\t\treadyList = jQuery.Deferred();\r\n\r\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\r\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\r\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\r\n\t\tif ( document.readyState === \"complete\" ) {\r\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\r\n\t\t\tsetTimeout( jQuery.ready );\r\n\r\n\t\t// Standards-based browsers support DOMContentLoaded\r\n\t\t} else if ( document.addEventListener ) {\r\n\t\t\t// Use the handy event callback\r\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\r\n\r\n\t\t\t// A fallback to window.onload, that will always work\r\n\t\t\twindow.addEventListener( \"load\", completed, false );\r\n\r\n\t\t// If IE event model is used\r\n\t\t} else {\r\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\r\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\r\n\r\n\t\t\t// A fallback to window.onload, that will always work\r\n\t\t\twindow.attachEvent( \"onload\", completed );\r\n\r\n\t\t\t// If IE and not a frame\r\n\t\t\t// continually check to see if the document is ready\r\n\t\t\tvar top = false;\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\r\n\t\t\t} catch(e) {}\r\n\r\n\t\t\tif ( top && top.doScroll ) {\r\n\t\t\t\t(function doScrollCheck() {\r\n\t\t\t\t\tif ( !jQuery.isReady ) {\r\n\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\r\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\r\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\r\n\t\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// detach all dom ready events\r\n\t\t\t\t\t\tdetach();\r\n\r\n\t\t\t\t\t\t// and execute any waiting functions\r\n\t\t\t\t\t\tjQuery.ready();\r\n\t\t\t\t\t}\r\n\t\t\t\t})();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn readyList.promise( obj );\r\n};\r\n\r\n\r\nvar strundefined = typeof undefined;\r\n\r\n\r\n\r\n// Support: IE<9\r\n// Iteration over object's inherited properties before its own\r\nvar i;\r\nfor ( i in jQuery( support ) ) {\r\n\tbreak;\r\n}\r\nsupport.ownLast = i !== \"0\";\r\n\r\n// Note: most support tests are defined in their respective modules.\r\n// false until the test is run\r\nsupport.inlineBlockNeedsLayout = false;\r\n\r\n// Execute ASAP in case we need to set body.style.zoom\r\njQuery(function() {\r\n\t// Minified: var a,b,c,d\r\n\tvar val, div, body, container;\r\n\r\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\tif ( !body || !body.style ) {\r\n\t\t// Return for frameset docs that don't have a body\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Setup\r\n\tdiv = document.createElement( \"div\" );\r\n\tcontainer = document.createElement( \"div\" );\r\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\tbody.appendChild( container ).appendChild( div );\r\n\r\n\tif ( typeof div.style.zoom !== strundefined ) {\r\n\t\t// Support: IE<8\r\n\t\t// Check if natively block-level elements act like inline-block\r\n\t\t// elements when setting their display to 'inline' and giving\r\n\t\t// them layout\r\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\r\n\r\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\r\n\t\tif ( val ) {\r\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\r\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\r\n\t\t\t// Support: IE<8\r\n\t\t\tbody.style.zoom = 1;\r\n\t\t}\r\n\t}\r\n\r\n\tbody.removeChild( container );\r\n});\r\n\r\n\r\n\r\n\r\n(function() {\r\n\tvar div = document.createElement( \"div\" );\r\n\r\n\t// Execute the test only if not already executed in another module.\r\n\tif (support.deleteExpando == null) {\r\n\t\t// Support: IE<9\r\n\t\tsupport.deleteExpando = true;\r\n\t\ttry {\r\n\t\t\tdelete div.test;\r\n\t\t} catch( e ) {\r\n\t\t\tsupport.deleteExpando = false;\r\n\t\t}\r\n\t}\r\n\r\n\t// Null elements to avoid leaks in IE.\r\n\tdiv = null;\r\n})();\r\n\r\n\r\n/**\r\n * Determines whether an object can have data\r\n */\r\njQuery.acceptData = function( elem ) {\r\n\tvar noData = jQuery.noData[ (elem.nodeName + \" \").toLowerCase() ],\r\n\t\tnodeType = +elem.nodeType || 1;\r\n\r\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\r\n\treturn nodeType !== 1 && nodeType !== 9 ?\r\n\t\tfalse :\r\n\r\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\r\n\t\t!noData || noData !== true && elem.getAttribute(\"classid\") === noData;\r\n};\r\n\r\n\r\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\r\n\trmultiDash = /([A-Z])/g;\r\n\r\nfunction dataAttr( elem, key, data ) {\r\n\t// If nothing was found internally, try to fetch any\r\n\t// data from the HTML5 data-* attribute\r\n\tif ( data === undefined && elem.nodeType === 1 ) {\r\n\r\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\r\n\r\n\t\tdata = elem.getAttribute( name );\r\n\r\n\t\tif ( typeof data === \"string\" ) {\r\n\t\t\ttry {\r\n\t\t\t\tdata = data === \"true\" ? true :\r\n\t\t\t\t\tdata === \"false\" ? false :\r\n\t\t\t\t\tdata === \"null\" ? null :\r\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\r\n\t\t\t\t\t+data + \"\" === data ? +data :\r\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\r\n\t\t\t\t\tdata;\r\n\t\t\t} catch( e ) {}\r\n\r\n\t\t\t// Make sure we set the data so it isn't changed later\r\n\t\t\tjQuery.data( elem, key, data );\r\n\r\n\t\t} else {\r\n\t\t\tdata = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\treturn data;\r\n}\r\n\r\n// checks a cache object for emptiness\r\nfunction isEmptyDataObject( obj ) {\r\n\tvar name;\r\n\tfor ( name in obj ) {\r\n\r\n\t\t// if the public data object is empty, the private is still empty\r\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif ( name !== \"toJSON\" ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\r\n\tif ( !jQuery.acceptData( elem ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar ret, thisCache,\r\n\t\tinternalKey = jQuery.expando,\r\n\r\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\r\n\t\t// can't GC object references properly across the DOM-JS boundary\r\n\t\tisNode = elem.nodeType,\r\n\r\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\r\n\t\t// attached directly to the object so GC can occur automatically\r\n\t\tcache = isNode ? jQuery.cache : elem,\r\n\r\n\t\t// Only defining an ID for JS objects if its cache already exists allows\r\n\t\t// the code to shortcut on the same path as a DOM node with no cache\r\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\r\n\r\n\t// Avoid doing any more work than we need to when trying to get data on an\r\n\t// object that has no data at all\r\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( !id ) {\r\n\t\t// Only DOM nodes need a new unique ID for each element since their data\r\n\t\t// ends up in the global cache\r\n\t\tif ( isNode ) {\r\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\r\n\t\t} else {\r\n\t\t\tid = internalKey;\r\n\t\t}\r\n\t}\r\n\r\n\tif ( !cache[ id ] ) {\r\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\r\n\t\t// is serialized using JSON.stringify\r\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\r\n\t}\r\n\r\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\r\n\t// shallow copied over onto the existing cache\r\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\r\n\t\tif ( pvt ) {\r\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\r\n\t\t} else {\r\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\r\n\t\t}\r\n\t}\r\n\r\n\tthisCache = cache[ id ];\r\n\r\n\t// jQuery data() is stored in a separate object inside the object's internal data\r\n\t// cache in order to avoid key collisions between internal data and user-defined\r\n\t// data.\r\n\tif ( !pvt ) {\r\n\t\tif ( !thisCache.data ) {\r\n\t\t\tthisCache.data = {};\r\n\t\t}\r\n\r\n\t\tthisCache = thisCache.data;\r\n\t}\r\n\r\n\tif ( data !== undefined ) {\r\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\r\n\t}\r\n\r\n\t// Check for both converted-to-camel and non-converted data property names\r\n\t// If a data property was specified\r\n\tif ( typeof name === \"string\" ) {\r\n\r\n\t\t// First Try to find as-is property data\r\n\t\tret = thisCache[ name ];\r\n\r\n\t\t// Test for null|undefined property data\r\n\t\tif ( ret == null ) {\r\n\r\n\t\t\t// Try to find the camelCased property\r\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\r\n\t\t}\r\n\t} else {\r\n\t\tret = thisCache;\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\nfunction internalRemoveData( elem, name, pvt ) {\r\n\tif ( !jQuery.acceptData( elem ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar thisCache, i,\r\n\t\tisNode = elem.nodeType,\r\n\r\n\t\t// See jQuery.data for more information\r\n\t\tcache = isNode ? jQuery.cache : elem,\r\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\r\n\r\n\t// If there is already no cache entry for this object, there is no\r\n\t// purpose in continuing\r\n\tif ( !cache[ id ] ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( name ) {\r\n\r\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\r\n\r\n\t\tif ( thisCache ) {\r\n\r\n\t\t\t// Support array or space separated string names for data keys\r\n\t\t\tif ( !jQuery.isArray( name ) ) {\r\n\r\n\t\t\t\t// try the string as a key before any manipulation\r\n\t\t\t\tif ( name in thisCache ) {\r\n\t\t\t\t\tname = [ name ];\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\r\n\t\t\t\t\tname = jQuery.camelCase( name );\r\n\t\t\t\t\tif ( name in thisCache ) {\r\n\t\t\t\t\t\tname = [ name ];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tname = name.split(\" \");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// If \"name\" is an array of keys...\r\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\r\n\t\t\t\t// keys will be converted to camelCase.\r\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\r\n\t\t\t\t// both plain key and camelCase key. #12786\r\n\t\t\t\t// This will only penalize the array argument path.\r\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\r\n\t\t\t}\r\n\r\n\t\t\ti = name.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tdelete thisCache[ name[i] ];\r\n\t\t\t}\r\n\r\n\t\t\t// If there is no data left in the cache, we want to continue\r\n\t\t\t// and let the cache object itself get destroyed\r\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// See jQuery.data for more information\r\n\tif ( !pvt ) {\r\n\t\tdelete cache[ id ].data;\r\n\r\n\t\t// Don't destroy the parent cache unless the internal data object\r\n\t\t// had been the only thing left in it\r\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t// Destroy the cache\r\n\tif ( isNode ) {\r\n\t\tjQuery.cleanData( [ elem ], true );\r\n\r\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\r\n\t/* jshint eqeqeq: false */\r\n\t} else if ( support.deleteExpando || cache != cache.window ) {\r\n\t\t/* jshint eqeqeq: true */\r\n\t\tdelete cache[ id ];\r\n\r\n\t// When all else fails, null\r\n\t} else {\r\n\t\tcache[ id ] = null;\r\n\t}\r\n}\r\n\r\njQuery.extend({\r\n\tcache: {},\r\n\r\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\r\n\t// throw uncatchable exceptions if you attempt to set expando properties\r\n\tnoData: {\r\n\t\t\"applet \": true,\r\n\t\t\"embed \": true,\r\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\r\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\r\n\t},\r\n\r\n\thasData: function( elem ) {\r\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\r\n\t\treturn !!elem && !isEmptyDataObject( elem );\r\n\t},\r\n\r\n\tdata: function( elem, name, data ) {\r\n\t\treturn internalData( elem, name, data );\r\n\t},\r\n\r\n\tremoveData: function( elem, name ) {\r\n\t\treturn internalRemoveData( elem, name );\r\n\t},\r\n\r\n\t// For internal use only.\r\n\t_data: function( elem, name, data ) {\r\n\t\treturn internalData( elem, name, data, true );\r\n\t},\r\n\r\n\t_removeData: function( elem, name ) {\r\n\t\treturn internalRemoveData( elem, name, true );\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\tdata: function( key, value ) {\r\n\t\tvar i, name, data,\r\n\t\t\telem = this[0],\r\n\t\t\tattrs = elem && elem.attributes;\r\n\r\n\t\t// Special expections of .data basically thwart jQuery.access,\r\n\t\t// so implement the relevant behavior ourselves\r\n\r\n\t\t// Gets all values\r\n\t\tif ( key === undefined ) {\r\n\t\t\tif ( this.length ) {\r\n\t\t\t\tdata = jQuery.data( elem );\r\n\r\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\r\n\t\t\t\t\ti = attrs.length;\r\n\t\t\t\t\twhile ( i-- ) {\r\n\r\n\t\t\t\t\t\t// Support: IE11+\r\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\r\n\t\t\t\t\t\tif ( attrs[ i ] ) {\r\n\t\t\t\t\t\t\tname = attrs[ i ].name;\r\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\r\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\r\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\t// Sets multiple values\r\n\t\tif ( typeof key === \"object\" ) {\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\tjQuery.data( this, key );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn arguments.length > 1 ?\r\n\r\n\t\t\t// Sets one value\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tjQuery.data( this, key, value );\r\n\t\t\t}) :\r\n\r\n\t\t\t// Gets one value\r\n\t\t\t// Try to fetch any internally stored data first\r\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\r\n\t},\r\n\r\n\tremoveData: function( key ) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.removeData( this, key );\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\njQuery.extend({\r\n\tqueue: function( elem, type, data ) {\r\n\t\tvar queue;\r\n\r\n\t\tif ( elem ) {\r\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\r\n\t\t\tqueue = jQuery._data( elem, type );\r\n\r\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\r\n\t\t\tif ( data ) {\r\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\r\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tqueue.push( data );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn queue || [];\r\n\t\t}\r\n\t},\r\n\r\n\tdequeue: function( elem, type ) {\r\n\t\ttype = type || \"fx\";\r\n\r\n\t\tvar queue = jQuery.queue( elem, type ),\r\n\t\t\tstartLength = queue.length,\r\n\t\t\tfn = queue.shift(),\r\n\t\t\thooks = jQuery._queueHooks( elem, type ),\r\n\t\t\tnext = function() {\r\n\t\t\t\tjQuery.dequeue( elem, type );\r\n\t\t\t};\r\n\r\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\r\n\t\tif ( fn === \"inprogress\" ) {\r\n\t\t\tfn = queue.shift();\r\n\t\t\tstartLength--;\r\n\t\t}\r\n\r\n\t\tif ( fn ) {\r\n\r\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\r\n\t\t\t// automatically dequeued\r\n\t\t\tif ( type === \"fx\" ) {\r\n\t\t\t\tqueue.unshift( \"inprogress\" );\r\n\t\t\t}\r\n\r\n\t\t\t// clear up the last queue stop function\r\n\t\t\tdelete hooks.stop;\r\n\t\t\tfn.call( elem, next, hooks );\r\n\t\t}\r\n\r\n\t\tif ( !startLength && hooks ) {\r\n\t\t\thooks.empty.fire();\r\n\t\t}\r\n\t},\r\n\r\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\r\n\t_queueHooks: function( elem, type ) {\r\n\t\tvar key = type + \"queueHooks\";\r\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\r\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\r\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\r\n\t\t\t\tjQuery._removeData( elem, key );\r\n\t\t\t})\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\tqueue: function( type, data ) {\r\n\t\tvar setter = 2;\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tdata = type;\r\n\t\t\ttype = \"fx\";\r\n\t\t\tsetter--;\r\n\t\t}\r\n\r\n\t\tif ( arguments.length < setter ) {\r\n\t\t\treturn jQuery.queue( this[0], type );\r\n\t\t}\r\n\r\n\t\treturn data === undefined ?\r\n\t\t\tthis :\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\r\n\r\n\t\t\t\t// ensure a hooks for this queue\r\n\t\t\t\tjQuery._queueHooks( this, type );\r\n\r\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\r\n\t\t\t\t\tjQuery.dequeue( this, type );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t},\r\n\tdequeue: function( type ) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.dequeue( this, type );\r\n\t\t});\r\n\t},\r\n\tclearQueue: function( type ) {\r\n\t\treturn this.queue( type || \"fx\", [] );\r\n\t},\r\n\t// Get a promise resolved when queues of a certain type\r\n\t// are emptied (fx is the type by default)\r\n\tpromise: function( type, obj ) {\r\n\t\tvar tmp,\r\n\t\t\tcount = 1,\r\n\t\t\tdefer = jQuery.Deferred(),\r\n\t\t\telements = this,\r\n\t\t\ti = this.length,\r\n\t\t\tresolve = function() {\r\n\t\t\t\tif ( !( --count ) ) {\r\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tobj = type;\r\n\t\t\ttype = undefined;\r\n\t\t}\r\n\t\ttype = type || \"fx\";\r\n\r\n\t\twhile ( i-- ) {\r\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\r\n\t\t\tif ( tmp && tmp.empty ) {\r\n\t\t\t\tcount++;\r\n\t\t\t\ttmp.empty.add( resolve );\r\n\t\t\t}\r\n\t\t}\r\n\t\tresolve();\r\n\t\treturn defer.promise( obj );\r\n\t}\r\n});\r\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\r\n\r\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\r\n\r\nvar isHidden = function( elem, el ) {\r\n\t\t// isHidden might be called from jQuery#filter function;\r\n\t\t// in that case, element will be second argument\r\n\t\telem = el || elem;\r\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\r\n\t};\r\n\r\n\r\n\r\n// Multifunctional method to get and set values of a collection\r\n// The value/s can optionally be executed if it's a function\r\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\r\n\tvar i = 0,\r\n\t\tlength = elems.length,\r\n\t\tbulk = key == null;\r\n\r\n\t// Sets many values\r\n\tif ( jQuery.type( key ) === \"object\" ) {\r\n\t\tchainable = true;\r\n\t\tfor ( i in key ) {\r\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\r\n\t\t}\r\n\r\n\t// Sets one value\r\n\t} else if ( value !== undefined ) {\r\n\t\tchainable = true;\r\n\r\n\t\tif ( !jQuery.isFunction( value ) ) {\r\n\t\t\traw = true;\r\n\t\t}\r\n\r\n\t\tif ( bulk ) {\r\n\t\t\t// Bulk operations run against the entire set\r\n\t\t\tif ( raw ) {\r\n\t\t\t\tfn.call( elems, value );\r\n\t\t\t\tfn = null;\r\n\r\n\t\t\t// ...except when executing function values\r\n\t\t\t} else {\r\n\t\t\t\tbulk = fn;\r\n\t\t\t\tfn = function( elem, key, value ) {\r\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( fn ) {\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn chainable ?\r\n\t\telems :\r\n\r\n\t\t// Gets\r\n\t\tbulk ?\r\n\t\t\tfn.call( elems ) :\r\n\t\t\tlength ? fn( elems[0], key ) : emptyGet;\r\n};\r\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\r\n\r\n\r\n\r\n(function() {\r\n\t// Minified: var a,b,c\r\n\tvar input = document.createElement( \"input\" ),\r\n\t\tdiv = document.createElement( \"div\" ),\r\n\t\tfragment = document.createDocumentFragment();\r\n\r\n\t// Setup\r\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\r\n\r\n\t// IE strips leading whitespace when .innerHTML is used\r\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\r\n\r\n\t// Make sure that tbody elements aren't automatically inserted\r\n\t// IE will insert them into empty tables\r\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\r\n\r\n\t// Make sure that link elements get serialized correctly by innerHTML\r\n\t// This requires a wrapper element in IE\r\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\r\n\r\n\t// Makes sure cloning an html5 element does not cause problems\r\n\t// Where outerHTML is undefined, this still works\r\n\tsupport.html5Clone =\r\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\r\n\r\n\t// Check if a disconnected checkbox will retain its checked\r\n\t// value of true after appended to the DOM (IE6/7)\r\n\tinput.type = \"checkbox\";\r\n\tinput.checked = true;\r\n\tfragment.appendChild( input );\r\n\tsupport.appendChecked = input.checked;\r\n\r\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\r\n\t// Support: IE6-IE11+\r\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\r\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\r\n\r\n\t// #11217 - WebKit loses check when the name is after the checked attribute\r\n\tfragment.appendChild( div );\r\n\tdiv.innerHTML = \"<input type='radio' checked='checked' name='t'/>\";\r\n\r\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\r\n\t// old WebKit doesn't clone checked state correctly in fragments\r\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\r\n\r\n\t// Support: IE<9\r\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\r\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\r\n\tsupport.noCloneEvent = true;\r\n\tif ( div.attachEvent ) {\r\n\t\tdiv.attachEvent( \"onclick\", function() {\r\n\t\t\tsupport.noCloneEvent = false;\r\n\t\t});\r\n\r\n\t\tdiv.cloneNode( true ).click();\r\n\t}\r\n\r\n\t// Execute the test only if not already executed in another module.\r\n\tif (support.deleteExpando == null) {\r\n\t\t// Support: IE<9\r\n\t\tsupport.deleteExpando = true;\r\n\t\ttry {\r\n\t\t\tdelete div.test;\r\n\t\t} catch( e ) {\r\n\t\t\tsupport.deleteExpando = false;\r\n\t\t}\r\n\t}\r\n})();\r\n\r\n\r\n(function() {\r\n\tvar i, eventName,\r\n\t\tdiv = document.createElement( \"div\" );\r\n\r\n\t// Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)\r\n\tfor ( i in { submit: true, change: true, focusin: true }) {\r\n\t\teventName = \"on\" + i;\r\n\r\n\t\tif ( !(support[ i + \"Bubbles\" ] = eventName in window) ) {\r\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\r\n\t\t\tdiv.setAttribute( eventName, \"t\" );\r\n\t\t\tsupport[ i + \"Bubbles\" ] = div.attributes[ eventName ].expando === false;\r\n\t\t}\r\n\t}\r\n\r\n\t// Null elements to avoid leaks in IE.\r\n\tdiv = null;\r\n})();\r\n\r\n\r\nvar rformElems = /^(?:input|select|textarea)$/i,\r\n\trkeyEvent = /^key/,\r\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\r\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\r\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\r\n\r\nfunction returnTrue() {\r\n\treturn true;\r\n}\r\n\r\nfunction returnFalse() {\r\n\treturn false;\r\n}\r\n\r\nfunction safeActiveElement() {\r\n\ttry {\r\n\t\treturn document.activeElement;\r\n\t} catch ( err ) { }\r\n}\r\n\r\n/*\r\n * Helper functions for managing events -- not part of the public interface.\r\n * Props to Dean Edwards' addEvent library for many of the ideas.\r\n */\r\njQuery.event = {\r\n\r\n\tglobal: {},\r\n\r\n\tadd: function( elem, types, handler, data, selector ) {\r\n\t\tvar tmp, events, t, handleObjIn,\r\n\t\t\tspecial, eventHandle, handleObj,\r\n\t\t\thandlers, type, namespaces, origType,\r\n\t\t\telemData = jQuery._data( elem );\r\n\r\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\r\n\t\tif ( !elemData ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Caller can pass in an object of custom data in lieu of the handler\r\n\t\tif ( handler.handler ) {\r\n\t\t\thandleObjIn = handler;\r\n\t\t\thandler = handleObjIn.handler;\r\n\t\t\tselector = handleObjIn.selector;\r\n\t\t}\r\n\r\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\r\n\t\tif ( !handler.guid ) {\r\n\t\t\thandler.guid = jQuery.guid++;\r\n\t\t}\r\n\r\n\t\t// Init the element's event structure and main handler, if this is the first\r\n\t\tif ( !(events = elemData.events) ) {\r\n\t\t\tevents = elemData.events = {};\r\n\t\t}\r\n\t\tif ( !(eventHandle = elemData.handle) ) {\r\n\t\t\teventHandle = elemData.handle = function( e ) {\r\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\r\n\t\t\t\t// when an event is called after a page has unloaded\r\n\t\t\t\treturn typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?\r\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\r\n\t\t\t\t\tundefined;\r\n\t\t\t};\r\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\r\n\t\t\teventHandle.elem = elem;\r\n\t\t}\r\n\r\n\t\t// Handle multiple events separated by a space\r\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\r\n\t\tt = types.length;\r\n\t\twhile ( t-- ) {\r\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\r\n\t\t\ttype = origType = tmp[1];\r\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\r\n\r\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\r\n\t\t\tif ( !type ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// If event changes its type, use the special event handlers for the changed type\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\r\n\t\t\t// If selector defined, determine special event api type, otherwise given type\r\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\r\n\r\n\t\t\t// Update special based on newly reset type\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\r\n\t\t\t// handleObj is passed to all event handlers\r\n\t\t\thandleObj = jQuery.extend({\r\n\t\t\t\ttype: type,\r\n\t\t\t\torigType: origType,\r\n\t\t\t\tdata: data,\r\n\t\t\t\thandler: handler,\r\n\t\t\t\tguid: handler.guid,\r\n\t\t\t\tselector: selector,\r\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\r\n\t\t\t\tnamespace: namespaces.join(\".\")\r\n\t\t\t}, handleObjIn );\r\n\r\n\t\t\t// Init the event handler queue if we're the first\r\n\t\t\tif ( !(handlers = events[ type ]) ) {\r\n\t\t\t\thandlers = events[ type ] = [];\r\n\t\t\t\thandlers.delegateCount = 0;\r\n\r\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\r\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\r\n\t\t\t\t\t// Bind the global event handler to the element\r\n\t\t\t\t\tif ( elem.addEventListener ) {\r\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\r\n\r\n\t\t\t\t\t} else if ( elem.attachEvent ) {\r\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( special.add ) {\r\n\t\t\t\tspecial.add.call( elem, handleObj );\r\n\r\n\t\t\t\tif ( !handleObj.handler.guid ) {\r\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Add to the element's handler list, delegates in front\r\n\t\t\tif ( selector ) {\r\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\r\n\t\t\t} else {\r\n\t\t\t\thandlers.push( handleObj );\r\n\t\t\t}\r\n\r\n\t\t\t// Keep track of which events have ever been used, for event optimization\r\n\t\t\tjQuery.event.global[ type ] = true;\r\n\t\t}\r\n\r\n\t\t// Nullify elem to prevent memory leaks in IE\r\n\t\telem = null;\r\n\t},\r\n\r\n\t// Detach an event or set of events from an element\r\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\r\n\t\tvar j, handleObj, tmp,\r\n\t\t\torigCount, t, events,\r\n\t\t\tspecial, handlers, type,\r\n\t\t\tnamespaces, origType,\r\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\r\n\r\n\t\tif ( !elemData || !(events = elemData.events) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Once for each type.namespace in types; type may be omitted\r\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\r\n\t\tt = types.length;\r\n\t\twhile ( t-- ) {\r\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\r\n\t\t\ttype = origType = tmp[1];\r\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\r\n\r\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\r\n\t\t\tif ( !type ) {\r\n\t\t\t\tfor ( type in events ) {\r\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\r\n\t\t\t\t}\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\r\n\t\t\thandlers = events[ type ] || [];\r\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\r\n\r\n\t\t\t// Remove matching events\r\n\t\t\torigCount = j = handlers.length;\r\n\t\t\twhile ( j-- ) {\r\n\t\t\t\thandleObj = handlers[ j ];\r\n\r\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\r\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\r\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\r\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\r\n\t\t\t\t\thandlers.splice( j, 1 );\r\n\r\n\t\t\t\t\tif ( handleObj.selector ) {\r\n\t\t\t\t\t\thandlers.delegateCount--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( special.remove ) {\r\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\r\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\r\n\t\t\tif ( origCount && !handlers.length ) {\r\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\r\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelete events[ type ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remove the expando if it's no longer used\r\n\t\tif ( jQuery.isEmptyObject( events ) ) {\r\n\t\t\tdelete elemData.handle;\r\n\r\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\r\n\t\t\t// so use it instead of delete\r\n\t\t\tjQuery._removeData( elem, \"events\" );\r\n\t\t}\r\n\t},\r\n\r\n\ttrigger: function( event, data, elem, onlyHandlers ) {\r\n\t\tvar handle, ontype, cur,\r\n\t\t\tbubbleType, special, tmp, i,\r\n\t\t\teventPath = [ elem || document ],\r\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\r\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\r\n\r\n\t\tcur = tmp = elem = elem || document;\r\n\r\n\t\t// Don't do events on text and comment nodes\r\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\r\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( type.indexOf(\".\") >= 0 ) {\r\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\r\n\t\t\tnamespaces = type.split(\".\");\r\n\t\t\ttype = namespaces.shift();\r\n\t\t\tnamespaces.sort();\r\n\t\t}\r\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\r\n\r\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\r\n\t\tevent = event[ jQuery.expando ] ?\r\n\t\t\tevent :\r\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\r\n\r\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\r\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\r\n\t\tevent.namespace = namespaces.join(\".\");\r\n\t\tevent.namespace_re = event.namespace ?\r\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\r\n\t\t\tnull;\r\n\r\n\t\t// Clean up the event in case it is being reused\r\n\t\tevent.result = undefined;\r\n\t\tif ( !event.target ) {\r\n\t\t\tevent.target = elem;\r\n\t\t}\r\n\r\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\r\n\t\tdata = data == null ?\r\n\t\t\t[ event ] :\r\n\t\t\tjQuery.makeArray( data, [ event ] );\r\n\r\n\t\t// Allow special events to draw outside the lines\r\n\t\tspecial = jQuery.event.special[ type ] || {};\r\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\r\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\r\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\r\n\r\n\t\t\tbubbleType = special.delegateType || type;\r\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\r\n\t\t\t\tcur = cur.parentNode;\r\n\t\t\t}\r\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\r\n\t\t\t\teventPath.push( cur );\r\n\t\t\t\ttmp = cur;\r\n\t\t\t}\r\n\r\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\r\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\r\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Fire handlers on the event path\r\n\t\ti = 0;\r\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\r\n\r\n\t\t\tevent.type = i > 1 ?\r\n\t\t\t\tbubbleType :\r\n\t\t\t\tspecial.bindType || type;\r\n\r\n\t\t\t// jQuery handler\r\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\r\n\t\t\tif ( handle ) {\r\n\t\t\t\thandle.apply( cur, data );\r\n\t\t\t}\r\n\r\n\t\t\t// Native handler\r\n\t\t\thandle = ontype && cur[ ontype ];\r\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\r\n\t\t\t\tevent.result = handle.apply( cur, data );\r\n\t\t\t\tif ( event.result === false ) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tevent.type = type;\r\n\r\n\t\t// If nobody prevented the default action, do it now\r\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\r\n\r\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\r\n\t\t\t\tjQuery.acceptData( elem ) ) {\r\n\r\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\r\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\r\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\r\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\r\n\r\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\r\n\t\t\t\t\ttmp = elem[ ontype ];\r\n\r\n\t\t\t\t\tif ( tmp ) {\r\n\t\t\t\t\t\telem[ ontype ] = null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\r\n\t\t\t\t\tjQuery.event.triggered = type;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\telem[ type ]();\r\n\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\r\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjQuery.event.triggered = undefined;\r\n\r\n\t\t\t\t\tif ( tmp ) {\r\n\t\t\t\t\t\telem[ ontype ] = tmp;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn event.result;\r\n\t},\r\n\r\n\tdispatch: function( event ) {\r\n\r\n\t\t// Make a writable jQuery.Event from the native event object\r\n\t\tevent = jQuery.event.fix( event );\r\n\r\n\t\tvar i, ret, handleObj, matched, j,\r\n\t\t\thandlerQueue = [],\r\n\t\t\targs = slice.call( arguments ),\r\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\r\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\r\n\r\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\r\n\t\targs[0] = event;\r\n\t\tevent.delegateTarget = this;\r\n\r\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\r\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Determine handlers\r\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\r\n\r\n\t\t// Run delegates first; they may want to stop propagation beneath us\r\n\t\ti = 0;\r\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\r\n\t\t\tevent.currentTarget = matched.elem;\r\n\r\n\t\t\tj = 0;\r\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\r\n\r\n\t\t\t\t// Triggered event must either 1) have no namespace, or\r\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\r\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\r\n\r\n\t\t\t\t\tevent.handleObj = handleObj;\r\n\t\t\t\t\tevent.data = handleObj.data;\r\n\r\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\r\n\t\t\t\t\t\t\t.apply( matched.elem, args );\r\n\r\n\t\t\t\t\tif ( ret !== undefined ) {\r\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Call the postDispatch hook for the mapped type\r\n\t\tif ( special.postDispatch ) {\r\n\t\t\tspecial.postDispatch.call( this, event );\r\n\t\t}\r\n\r\n\t\treturn event.result;\r\n\t},\r\n\r\n\thandlers: function( event, handlers ) {\r\n\t\tvar sel, handleObj, matches, i,\r\n\t\t\thandlerQueue = [],\r\n\t\t\tdelegateCount = handlers.delegateCount,\r\n\t\t\tcur = event.target;\r\n\r\n\t\t// Find delegate handlers\r\n\t\t// Black-hole SVG <use> instance trees (#13180)\r\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\r\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\r\n\r\n\t\t\t/* jshint eqeqeq: false */\r\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\r\n\t\t\t\t/* jshint eqeqeq: true */\r\n\r\n\t\t\t\t// Don't check non-elements (#13208)\r\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\r\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\r\n\t\t\t\t\tmatches = [];\r\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\r\n\t\t\t\t\t\thandleObj = handlers[ i ];\r\n\r\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\r\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\r\n\r\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\r\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\r\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\r\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( matches[ sel ] ) {\r\n\t\t\t\t\t\t\tmatches.push( handleObj );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( matches.length ) {\r\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Add the remaining (directly-bound) handlers\r\n\t\tif ( delegateCount < handlers.length ) {\r\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\r\n\t\t}\r\n\r\n\t\treturn handlerQueue;\r\n\t},\r\n\r\n\tfix: function( event ) {\r\n\t\tif ( event[ jQuery.expando ] ) {\r\n\t\t\treturn event;\r\n\t\t}\r\n\r\n\t\t// Create a writable copy of the event object and normalize some properties\r\n\t\tvar i, prop, copy,\r\n\t\t\ttype = event.type,\r\n\t\t\toriginalEvent = event,\r\n\t\t\tfixHook = this.fixHooks[ type ];\r\n\r\n\t\tif ( !fixHook ) {\r\n\t\t\tthis.fixHooks[ type ] = fixHook =\r\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\r\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\r\n\t\t\t\t{};\r\n\t\t}\r\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\r\n\r\n\t\tevent = new jQuery.Event( originalEvent );\r\n\r\n\t\ti = copy.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\tprop = copy[ i ];\r\n\t\t\tevent[ prop ] = originalEvent[ prop ];\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Fix target property (#1925)\r\n\t\tif ( !event.target ) {\r\n\t\t\tevent.target = originalEvent.srcElement || document;\r\n\t\t}\r\n\r\n\t\t// Support: Chrome 23+, Safari?\r\n\t\t// Target should not be a text node (#504, #13143)\r\n\t\tif ( event.target.nodeType === 3 ) {\r\n\t\t\tevent.target = event.target.parentNode;\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\r\n\t\tevent.metaKey = !!event.metaKey;\r\n\r\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\r\n\t},\r\n\r\n\t// Includes some event props shared by KeyEvent and MouseEvent\r\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\r\n\r\n\tfixHooks: {},\r\n\r\n\tkeyHooks: {\r\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\r\n\t\tfilter: function( event, original ) {\r\n\r\n\t\t\t// Add which for key events\r\n\t\t\tif ( event.which == null ) {\r\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\r\n\t\t\t}\r\n\r\n\t\t\treturn event;\r\n\t\t}\r\n\t},\r\n\r\n\tmouseHooks: {\r\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\r\n\t\tfilter: function( event, original ) {\r\n\t\t\tvar body, eventDoc, doc,\r\n\t\t\t\tbutton = original.button,\r\n\t\t\t\tfromElement = original.fromElement;\r\n\r\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\r\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\r\n\t\t\t\teventDoc = event.target.ownerDocument || document;\r\n\t\t\t\tdoc = eventDoc.documentElement;\r\n\t\t\t\tbody = eventDoc.body;\r\n\r\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\r\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\r\n\t\t\t}\r\n\r\n\t\t\t// Add relatedTarget, if necessary\r\n\t\t\tif ( !event.relatedTarget && fromElement ) {\r\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\r\n\t\t\t}\r\n\r\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\r\n\t\t\t// Note: button is not normalized, so don't use it\r\n\t\t\tif ( !event.which && button !== undefined ) {\r\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\r\n\t\t\t}\r\n\r\n\t\t\treturn event;\r\n\t\t}\r\n\t},\r\n\r\n\tspecial: {\r\n\t\tload: {\r\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\r\n\t\t\tnoBubble: true\r\n\t\t},\r\n\t\tfocus: {\r\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\r\n\t\t\t\t\t\t// let .trigger() run the handlers\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdelegateType: \"focusin\"\r\n\t\t},\r\n\t\tblur: {\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\r\n\t\t\t\t\tthis.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdelegateType: \"focusout\"\r\n\t\t},\r\n\t\tclick: {\r\n\t\t\t// For checkbox, fire native event so checked state will be right\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\r\n\t\t\t\t\tthis.click();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\r\n\t\t\t_default: function( event ) {\r\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tbeforeunload: {\r\n\t\t\tpostDispatch: function( event ) {\r\n\r\n\t\t\t\t// Support: Firefox 20+\r\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\r\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\r\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tsimulate: function( type, elem, event, bubble ) {\r\n\t\t// Piggyback on a donor event to simulate a different one.\r\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\r\n\t\t// simulated event prevents default then we do the same on the donor.\r\n\t\tvar e = jQuery.extend(\r\n\t\t\tnew jQuery.Event(),\r\n\t\t\tevent,\r\n\t\t\t{\r\n\t\t\t\ttype: type,\r\n\t\t\t\tisSimulated: true,\r\n\t\t\t\toriginalEvent: {}\r\n\t\t\t}\r\n\t\t);\r\n\t\tif ( bubble ) {\r\n\t\t\tjQuery.event.trigger( e, null, elem );\r\n\t\t} else {\r\n\t\t\tjQuery.event.dispatch.call( elem, e );\r\n\t\t}\r\n\t\tif ( e.isDefaultPrevented() ) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n};\r\n\r\njQuery.removeEvent = document.removeEventListener ?\r\n\tfunction( elem, type, handle ) {\r\n\t\tif ( elem.removeEventListener ) {\r\n\t\t\telem.removeEventListener( type, handle, false );\r\n\t\t}\r\n\t} :\r\n\tfunction( elem, type, handle ) {\r\n\t\tvar name = \"on\" + type;\r\n\r\n\t\tif ( elem.detachEvent ) {\r\n\r\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\r\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\r\n\t\t\tif ( typeof elem[ name ] === strundefined ) {\r\n\t\t\t\telem[ name ] = null;\r\n\t\t\t}\r\n\r\n\t\t\telem.detachEvent( name, handle );\r\n\t\t}\r\n\t};\r\n\r\njQuery.Event = function( src, props ) {\r\n\t// Allow instantiation without the 'new' keyword\r\n\tif ( !(this instanceof jQuery.Event) ) {\r\n\t\treturn new jQuery.Event( src, props );\r\n\t}\r\n\r\n\t// Event object\r\n\tif ( src && src.type ) {\r\n\t\tthis.originalEvent = src;\r\n\t\tthis.type = src.type;\r\n\r\n\t\t// Events bubbling up the document may have been marked as prevented\r\n\t\t// by a handler lower down the tree; reflect the correct value.\r\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\r\n\t\t\t\tsrc.defaultPrevented === undefined &&\r\n\t\t\t\t// Support: IE < 9, Android < 4.0\r\n\t\t\t\tsrc.returnValue === false ?\r\n\t\t\treturnTrue :\r\n\t\t\treturnFalse;\r\n\r\n\t// Event type\r\n\t} else {\r\n\t\tthis.type = src;\r\n\t}\r\n\r\n\t// Put explicitly provided properties onto the event object\r\n\tif ( props ) {\r\n\t\tjQuery.extend( this, props );\r\n\t}\r\n\r\n\t// Create a timestamp if incoming event doesn't have one\r\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\r\n\r\n\t// Mark it as fixed\r\n\tthis[ jQuery.expando ] = true;\r\n};\r\n\r\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\r\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\r\njQuery.Event.prototype = {\r\n\tisDefaultPrevented: returnFalse,\r\n\tisPropagationStopped: returnFalse,\r\n\tisImmediatePropagationStopped: returnFalse,\r\n\r\n\tpreventDefault: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isDefaultPrevented = returnTrue;\r\n\t\tif ( !e ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If preventDefault exists, run it on the original event\r\n\t\tif ( e.preventDefault ) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t// Support: IE\r\n\t\t// Otherwise set the returnValue property of the original event to false\r\n\t\t} else {\r\n\t\t\te.returnValue = false;\r\n\t\t}\r\n\t},\r\n\tstopPropagation: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isPropagationStopped = returnTrue;\r\n\t\tif ( !e ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// If stopPropagation exists, run it on the original event\r\n\t\tif ( e.stopPropagation ) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\t// Support: IE\r\n\t\t// Set the cancelBubble property of the original event to true\r\n\t\te.cancelBubble = true;\r\n\t},\r\n\tstopImmediatePropagation: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isImmediatePropagationStopped = returnTrue;\r\n\r\n\t\tif ( e && e.stopImmediatePropagation ) {\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t}\r\n\r\n\t\tthis.stopPropagation();\r\n\t}\r\n};\r\n\r\n// Create mouseenter/leave events using mouseover/out and event-time checks\r\njQuery.each({\r\n\tmouseenter: \"mouseover\",\r\n\tmouseleave: \"mouseout\",\r\n\tpointerenter: \"pointerover\",\r\n\tpointerleave: \"pointerout\"\r\n}, function( orig, fix ) {\r\n\tjQuery.event.special[ orig ] = {\r\n\t\tdelegateType: fix,\r\n\t\tbindType: fix,\r\n\r\n\t\thandle: function( event ) {\r\n\t\t\tvar ret,\r\n\t\t\t\ttarget = this,\r\n\t\t\t\trelated = event.relatedTarget,\r\n\t\t\t\thandleObj = event.handleObj;\r\n\r\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\r\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\r\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\r\n\t\t\t\tevent.type = handleObj.origType;\r\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\r\n\t\t\t\tevent.type = fix;\r\n\t\t\t}\r\n\t\t\treturn ret;\r\n\t\t}\r\n\t};\r\n});\r\n\r\n// IE submit delegation\r\nif ( !support.submitBubbles ) {\r\n\r\n\tjQuery.event.special.submit = {\r\n\t\tsetup: function() {\r\n\t\t\t// Only need this for delegated form submit events\r\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\r\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\r\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\r\n\t\t\t\tvar elem = e.target,\r\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\r\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\r\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\r\n\t\t\t\t\t\tevent._submit_bubble = true;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// return undefined since we don't need an event listener\r\n\t\t},\r\n\r\n\t\tpostDispatch: function( event ) {\r\n\t\t\t// If form was submitted by the user, bubble the event up the tree\r\n\t\t\tif ( event._submit_bubble ) {\r\n\t\t\t\tdelete event._submit_bubble;\r\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\r\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\t// Only need this for delegated form submit events\r\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\r\n\t\t\tjQuery.event.remove( this, \"._submit\" );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// IE change delegation and checkbox/radio fix\r\nif ( !support.changeBubbles ) {\r\n\r\n\tjQuery.event.special.change = {\r\n\r\n\t\tsetup: function() {\r\n\r\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\r\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\r\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\r\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\r\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\r\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\r\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\r\n\t\t\t\t\t\t\tthis._just_changed = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\r\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\r\n\t\t\t\t\t\t\tthis._just_changed = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\r\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\r\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\r\n\t\t\t\tvar elem = e.target;\r\n\r\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\r\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\r\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\r\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\thandle: function( event ) {\r\n\t\t\tvar elem = event.target;\r\n\r\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\r\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\r\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\tjQuery.event.remove( this, \"._change\" );\r\n\r\n\t\t\treturn !rformElems.test( this.nodeName );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// Create \"bubbling\" focus and blur events\r\nif ( !support.focusinBubbles ) {\r\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\r\n\r\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\r\n\t\tvar handler = function( event ) {\r\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\r\n\t\t\t};\r\n\r\n\t\tjQuery.event.special[ fix ] = {\r\n\t\t\tsetup: function() {\r\n\t\t\t\tvar doc = this.ownerDocument || this,\r\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\r\n\r\n\t\t\t\tif ( !attaches ) {\r\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\r\n\t\t\t\t}\r\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\r\n\t\t\t},\r\n\t\t\tteardown: function() {\r\n\t\t\t\tvar doc = this.ownerDocument || this,\r\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\r\n\r\n\t\t\t\tif ( !attaches ) {\r\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\r\n\t\t\t\t\tjQuery._removeData( doc, fix );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n}\r\n\r\njQuery.fn.extend({\r\n\r\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\r\n\t\tvar type, origFn;\r\n\r\n\t\t// Types can be a map of types/handlers\r\n\t\tif ( typeof types === \"object\" ) {\r\n\t\t\t// ( types-Object, selector, data )\r\n\t\t\tif ( typeof selector !== \"string\" ) {\r\n\t\t\t\t// ( types-Object, data )\r\n\t\t\t\tdata = data || selector;\r\n\t\t\t\tselector = undefined;\r\n\t\t\t}\r\n\t\t\tfor ( type in types ) {\r\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif ( data == null && fn == null ) {\r\n\t\t\t// ( types, fn )\r\n\t\t\tfn = selector;\r\n\t\t\tdata = selector = undefined;\r\n\t\t} else if ( fn == null ) {\r\n\t\t\tif ( typeof selector === \"string\" ) {\r\n\t\t\t\t// ( types, selector, fn )\r\n\t\t\t\tfn = data;\r\n\t\t\t\tdata = undefined;\r\n\t\t\t} else {\r\n\t\t\t\t// ( types, data, fn )\r\n\t\t\t\tfn = data;\r\n\t\t\t\tdata = selector;\r\n\t\t\t\tselector = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif ( fn === false ) {\r\n\t\t\tfn = returnFalse;\r\n\t\t} else if ( !fn ) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif ( one === 1 ) {\r\n\t\t\torigFn = fn;\r\n\t\t\tfn = function( event ) {\r\n\t\t\t\t// Can use an empty set, since event contains the info\r\n\t\t\t\tjQuery().off( event );\r\n\t\t\t\treturn origFn.apply( this, arguments );\r\n\t\t\t};\r\n\t\t\t// Use same guid so caller can remove using origFn\r\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\r\n\t\t}\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\r\n\t\t});\r\n\t},\r\n\tone: function( types, selector, data, fn ) {\r\n\t\treturn this.on( types, selector, data, fn, 1 );\r\n\t},\r\n\toff: function( types, selector, fn ) {\r\n\t\tvar handleObj, type;\r\n\t\tif ( types && types.preventDefault && types.handleObj ) {\r\n\t\t\t// ( event )  dispatched jQuery.Event\r\n\t\t\thandleObj = types.handleObj;\r\n\t\t\tjQuery( types.delegateTarget ).off(\r\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\r\n\t\t\t\thandleObj.selector,\r\n\t\t\t\thandleObj.handler\r\n\t\t\t);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( typeof types === \"object\" ) {\r\n\t\t\t// ( types-object [, selector] )\r\n\t\t\tfor ( type in types ) {\r\n\t\t\t\tthis.off( type, selector, types[ type ] );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( selector === false || typeof selector === \"function\" ) {\r\n\t\t\t// ( types [, fn] )\r\n\t\t\tfn = selector;\r\n\t\t\tselector = undefined;\r\n\t\t}\r\n\t\tif ( fn === false ) {\r\n\t\t\tfn = returnFalse;\r\n\t\t}\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.event.remove( this, types, fn, selector );\r\n\t\t});\r\n\t},\r\n\r\n\ttrigger: function( type, data ) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.event.trigger( type, data, this );\r\n\t\t});\r\n\t},\r\n\ttriggerHandler: function( type, data ) {\r\n\t\tvar elem = this[0];\r\n\t\tif ( elem ) {\r\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\r\n\t\t}\r\n\t}\r\n});\r\n\r\n\r\nfunction createSafeFragment( document ) {\r\n\tvar list = nodeNames.split( \"|\" ),\r\n\t\tsafeFrag = document.createDocumentFragment();\r\n\r\n\tif ( safeFrag.createElement ) {\r\n\t\twhile ( list.length ) {\r\n\t\t\tsafeFrag.createElement(\r\n\t\t\t\tlist.pop()\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\treturn safeFrag;\r\n}\r\n\r\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\r\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\r\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\r\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\r\n\trleadingWhitespace = /^\\s+/,\r\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\r\n\trtagName = /<([\\w:]+)/,\r\n\trtbody = /<tbody/i,\r\n\trhtml = /<|&#?\\w+;/,\r\n\trnoInnerhtml = /<(?:script|style|link)/i,\r\n\t// checked=\"checked\" or checked\r\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\r\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\r\n\trscriptTypeMasked = /^true\\/(.*)/,\r\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\r\n\r\n\t// We have to close these tags to support XHTML (#13200)\r\n\twrapMap = {\r\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\r\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\r\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\r\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\r\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\r\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\r\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\r\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\r\n\r\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\r\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\r\n\t\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\"  ]\r\n\t},\r\n\tsafeFragment = createSafeFragment( document ),\r\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\r\n\r\nwrapMap.optgroup = wrapMap.option;\r\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\r\nwrapMap.th = wrapMap.td;\r\n\r\nfunction getAll( context, tag ) {\r\n\tvar elems, elem,\r\n\t\ti = 0,\r\n\t\tfound = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || \"*\" ) :\r\n\t\t\ttypeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || \"*\" ) :\r\n\t\t\tundefined;\r\n\r\n\tif ( !found ) {\r\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\r\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\r\n\t\t\t\tfound.push( elem );\r\n\t\t\t} else {\r\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\r\n\t\tjQuery.merge( [ context ], found ) :\r\n\t\tfound;\r\n}\r\n\r\n// Used in buildFragment, fixes the defaultChecked property\r\nfunction fixDefaultChecked( elem ) {\r\n\tif ( rcheckableType.test( elem.type ) ) {\r\n\t\telem.defaultChecked = elem.checked;\r\n\t}\r\n}\r\n\r\n// Support: IE<8\r\n// Manipulating tables requires a tbody\r\nfunction manipulationTarget( elem, content ) {\r\n\treturn jQuery.nodeName( elem, \"table\" ) &&\r\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\r\n\r\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\r\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\r\n\t\telem;\r\n}\r\n\r\n// Replace/restore the type attribute of script elements for safe DOM manipulation\r\nfunction disableScript( elem ) {\r\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\r\n\treturn elem;\r\n}\r\nfunction restoreScript( elem ) {\r\n\tvar match = rscriptTypeMasked.exec( elem.type );\r\n\tif ( match ) {\r\n\t\telem.type = match[1];\r\n\t} else {\r\n\t\telem.removeAttribute(\"type\");\r\n\t}\r\n\treturn elem;\r\n}\r\n\r\n// Mark scripts as having already been evaluated\r\nfunction setGlobalEval( elems, refElements ) {\r\n\tvar elem,\r\n\t\ti = 0;\r\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\r\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\r\n\t}\r\n}\r\n\r\nfunction cloneCopyEvent( src, dest ) {\r\n\r\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar type, i, l,\r\n\t\toldData = jQuery._data( src ),\r\n\t\tcurData = jQuery._data( dest, oldData ),\r\n\t\tevents = oldData.events;\r\n\r\n\tif ( events ) {\r\n\t\tdelete curData.handle;\r\n\t\tcurData.events = {};\r\n\r\n\t\tfor ( type in events ) {\r\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\r\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// make the cloned public data object a copy from the original\r\n\tif ( curData.data ) {\r\n\t\tcurData.data = jQuery.extend( {}, curData.data );\r\n\t}\r\n}\r\n\r\nfunction fixCloneNodeIssues( src, dest ) {\r\n\tvar nodeName, e, data;\r\n\r\n\t// We do not need to do anything for non-Elements\r\n\tif ( dest.nodeType !== 1 ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tnodeName = dest.nodeName.toLowerCase();\r\n\r\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\r\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\r\n\t\tdata = jQuery._data( dest );\r\n\r\n\t\tfor ( e in data.events ) {\r\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\r\n\t\t}\r\n\r\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\r\n\t\tdest.removeAttribute( jQuery.expando );\r\n\t}\r\n\r\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\r\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\r\n\t\tdisableScript( dest ).text = src.text;\r\n\t\trestoreScript( dest );\r\n\r\n\t// IE6-10 improperly clones children of object elements using classid.\r\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\r\n\t} else if ( nodeName === \"object\" ) {\r\n\t\tif ( dest.parentNode ) {\r\n\t\t\tdest.outerHTML = src.outerHTML;\r\n\t\t}\r\n\r\n\t\t// This path appears unavoidable for IE9. When cloning an object\r\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\r\n\t\t// If the src has innerHTML and the destination does not,\r\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\r\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\r\n\t\t\tdest.innerHTML = src.innerHTML;\r\n\t\t}\r\n\r\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\r\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\r\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\r\n\t\t// a checked appearance if the defaultChecked value isn't also set\r\n\r\n\t\tdest.defaultChecked = dest.checked = src.checked;\r\n\r\n\t\t// IE6-7 get confused and end up setting the value of a cloned\r\n\t\t// checkbox/radio button to an empty string instead of \"on\"\r\n\t\tif ( dest.value !== src.value ) {\r\n\t\t\tdest.value = src.value;\r\n\t\t}\r\n\r\n\t// IE6-8 fails to return the selected option to the default selected\r\n\t// state when cloning options\r\n\t} else if ( nodeName === \"option\" ) {\r\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\r\n\r\n\t// IE6-8 fails to set the defaultValue to the correct value when\r\n\t// cloning other types of input fields\r\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\r\n\t\tdest.defaultValue = src.defaultValue;\r\n\t}\r\n}\r\n\r\njQuery.extend({\r\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\r\n\t\tvar destElements, node, clone, i, srcElements,\r\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\r\n\r\n\t\tif ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\r\n\t\t\tclone = elem.cloneNode( true );\r\n\r\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\r\n\t\t} else {\r\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\r\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\r\n\t\t}\r\n\r\n\t\tif ( (!support.noCloneEvent || !support.noCloneChecked) &&\r\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\r\n\r\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\r\n\t\t\tdestElements = getAll( clone );\r\n\t\t\tsrcElements = getAll( elem );\r\n\r\n\t\t\t// Fix all IE cloning issues\r\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\r\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\r\n\t\t\t\tif ( destElements[i] ) {\r\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Copy the events from the original to the clone\r\n\t\tif ( dataAndEvents ) {\r\n\t\t\tif ( deepDataAndEvents ) {\r\n\t\t\t\tsrcElements = srcElements || getAll( elem );\r\n\t\t\t\tdestElements = destElements || getAll( clone );\r\n\r\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\r\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcloneCopyEvent( elem, clone );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Preserve script evaluation history\r\n\t\tdestElements = getAll( clone, \"script\" );\r\n\t\tif ( destElements.length > 0 ) {\r\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\r\n\t\t}\r\n\r\n\t\tdestElements = srcElements = node = null;\r\n\r\n\t\t// Return the cloned set\r\n\t\treturn clone;\r\n\t},\r\n\r\n\tbuildFragment: function( elems, context, scripts, selection ) {\r\n\t\tvar j, elem, contains,\r\n\t\t\ttmp, tag, tbody, wrap,\r\n\t\t\tl = elems.length,\r\n\r\n\t\t\t// Ensure a safe fragment\r\n\t\t\tsafe = createSafeFragment( context ),\r\n\r\n\t\t\tnodes = [],\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; i < l; i++ ) {\r\n\t\t\telem = elems[ i ];\r\n\r\n\t\t\tif ( elem || elem === 0 ) {\r\n\r\n\t\t\t\t// Add nodes directly\r\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\r\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\r\n\r\n\t\t\t\t// Convert non-html into a text node\r\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\r\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\r\n\r\n\t\t\t\t// Convert html into DOM nodes\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\r\n\r\n\t\t\t\t\t// Deserialize a standard representation\r\n\t\t\t\t\ttag = (rtagName.exec( elem ) || [ \"\", \"\" ])[ 1 ].toLowerCase();\r\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\r\n\r\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\r\n\r\n\t\t\t\t\t// Descend through wrappers to the right content\r\n\t\t\t\t\tj = wrap[0];\r\n\t\t\t\t\twhile ( j-- ) {\r\n\t\t\t\t\t\ttmp = tmp.lastChild;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Manually add leading whitespace removed by IE\r\n\t\t\t\t\tif ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\r\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\r\n\t\t\t\t\tif ( !support.tbody ) {\r\n\r\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\r\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\r\n\t\t\t\t\t\t\ttmp.firstChild :\r\n\r\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\r\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\r\n\t\t\t\t\t\t\t\ttmp :\r\n\t\t\t\t\t\t\t\t0;\r\n\r\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\r\n\t\t\t\t\t\twhile ( j-- ) {\r\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\r\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\r\n\r\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\r\n\t\t\t\t\ttmp.textContent = \"\";\r\n\r\n\t\t\t\t\t// Fix #12392 for oldIE\r\n\t\t\t\t\twhile ( tmp.firstChild ) {\r\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Remember the top-level container for proper cleanup\r\n\t\t\t\t\ttmp = safe.lastChild;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Fix #11356: Clear elements from fragment\r\n\t\tif ( tmp ) {\r\n\t\t\tsafe.removeChild( tmp );\r\n\t\t}\r\n\r\n\t\t// Reset defaultChecked for any radios and checkboxes\r\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\r\n\t\tif ( !support.appendChecked ) {\r\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\r\n\t\t}\r\n\r\n\t\ti = 0;\r\n\t\twhile ( (elem = nodes[ i++ ]) ) {\r\n\r\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\r\n\t\t\t// that element, do not do anything\r\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\r\n\r\n\t\t\t// Append to fragment\r\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\r\n\r\n\t\t\t// Preserve script evaluation history\r\n\t\t\tif ( contains ) {\r\n\t\t\t\tsetGlobalEval( tmp );\r\n\t\t\t}\r\n\r\n\t\t\t// Capture executables\r\n\t\t\tif ( scripts ) {\r\n\t\t\t\tj = 0;\r\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\r\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\r\n\t\t\t\t\t\tscripts.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttmp = null;\r\n\r\n\t\treturn safe;\r\n\t},\r\n\r\n\tcleanData: function( elems, /* internal */ acceptData ) {\r\n\t\tvar elem, type, id, data,\r\n\t\t\ti = 0,\r\n\t\t\tinternalKey = jQuery.expando,\r\n\t\t\tcache = jQuery.cache,\r\n\t\t\tdeleteExpando = support.deleteExpando,\r\n\t\t\tspecial = jQuery.event.special;\r\n\r\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\r\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\r\n\r\n\t\t\t\tid = elem[ internalKey ];\r\n\t\t\t\tdata = id && cache[ id ];\r\n\r\n\t\t\t\tif ( data ) {\r\n\t\t\t\t\tif ( data.events ) {\r\n\t\t\t\t\t\tfor ( type in data.events ) {\r\n\t\t\t\t\t\t\tif ( special[ type ] ) {\r\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\r\n\r\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\r\n\t\t\t\t\tif ( cache[ id ] ) {\r\n\r\n\t\t\t\t\t\tdelete cache[ id ];\r\n\r\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\r\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\r\n\t\t\t\t\t\t// we must handle all of these cases\r\n\t\t\t\t\t\tif ( deleteExpando ) {\r\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\r\n\r\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== strundefined ) {\r\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\telem[ internalKey ] = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdeletedIds.push( id );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\ttext: function( value ) {\r\n\t\treturn access( this, function( value ) {\r\n\t\t\treturn value === undefined ?\r\n\t\t\t\tjQuery.text( this ) :\r\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\r\n\t\t}, null, value, arguments.length );\r\n\t},\r\n\r\n\tappend: function() {\r\n\t\treturn this.domManip( arguments, function( elem ) {\r\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\r\n\t\t\t\tvar target = manipulationTarget( this, elem );\r\n\t\t\t\ttarget.appendChild( elem );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tprepend: function() {\r\n\t\treturn this.domManip( arguments, function( elem ) {\r\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\r\n\t\t\t\tvar target = manipulationTarget( this, elem );\r\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tbefore: function() {\r\n\t\treturn this.domManip( arguments, function( elem ) {\r\n\t\t\tif ( this.parentNode ) {\r\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tafter: function() {\r\n\t\treturn this.domManip( arguments, function( elem ) {\r\n\t\t\tif ( this.parentNode ) {\r\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\r\n\t\tvar elem,\r\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\r\n\r\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\r\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\r\n\t\t\t}\r\n\r\n\t\t\tif ( elem.parentNode ) {\r\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\r\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\r\n\t\t\t\t}\r\n\t\t\t\telem.parentNode.removeChild( elem );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tempty: function() {\r\n\t\tvar elem,\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\r\n\t\t\t// Remove element nodes and prevent memory leaks\r\n\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\r\n\t\t\t}\r\n\r\n\t\t\t// Remove any remaining nodes\r\n\t\t\twhile ( elem.firstChild ) {\r\n\t\t\t\telem.removeChild( elem.firstChild );\r\n\t\t\t}\r\n\r\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\r\n\t\t\t// Support: IE<9\r\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\r\n\t\t\t\telem.options.length = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\r\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\r\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\r\n\r\n\t\treturn this.map(function() {\r\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\r\n\t\t});\r\n\t},\r\n\r\n\thtml: function( value ) {\r\n\t\treturn access( this, function( value ) {\r\n\t\t\tvar elem = this[ 0 ] || {},\r\n\t\t\t\ti = 0,\r\n\t\t\t\tl = this.length;\r\n\r\n\t\t\tif ( value === undefined ) {\r\n\t\t\t\treturn elem.nodeType === 1 ?\r\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\r\n\t\t\t\t\tundefined;\r\n\t\t\t}\r\n\r\n\t\t\t// See if we can take a shortcut and just use innerHTML\r\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\r\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value )  ) &&\r\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\r\n\t\t\t\t!wrapMap[ (rtagName.exec( value ) || [ \"\", \"\" ])[ 1 ].toLowerCase() ] ) {\r\n\r\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tfor (; i < l; i++ ) {\r\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\r\n\t\t\t\t\t\telem = this[i] || {};\r\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\r\n\t\t\t\t\t\t\telem.innerHTML = value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\telem = 0;\r\n\r\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\r\n\t\t\t\t} catch(e) {}\r\n\t\t\t}\r\n\r\n\t\t\tif ( elem ) {\r\n\t\t\t\tthis.empty().append( value );\r\n\t\t\t}\r\n\t\t}, null, value, arguments.length );\r\n\t},\r\n\r\n\treplaceWith: function() {\r\n\t\tvar arg = arguments[ 0 ];\r\n\r\n\t\t// Make the changes, replacing each context element with the new content\r\n\t\tthis.domManip( arguments, function( elem ) {\r\n\t\t\targ = this.parentNode;\r\n\r\n\t\t\tjQuery.cleanData( getAll( this ) );\r\n\r\n\t\t\tif ( arg ) {\r\n\t\t\t\targ.replaceChild( elem, this );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\r\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\r\n\t},\r\n\r\n\tdetach: function( selector ) {\r\n\t\treturn this.remove( selector, true );\r\n\t},\r\n\r\n\tdomManip: function( args, callback ) {\r\n\r\n\t\t// Flatten any nested arrays\r\n\t\targs = concat.apply( [], args );\r\n\r\n\t\tvar first, node, hasScripts,\r\n\t\t\tscripts, doc, fragment,\r\n\t\t\ti = 0,\r\n\t\t\tl = this.length,\r\n\t\t\tset = this,\r\n\t\t\tiNoClone = l - 1,\r\n\t\t\tvalue = args[0],\r\n\t\t\tisFunction = jQuery.isFunction( value );\r\n\r\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\r\n\t\tif ( isFunction ||\r\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\r\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\r\n\t\t\treturn this.each(function( index ) {\r\n\t\t\t\tvar self = set.eq( index );\r\n\t\t\t\tif ( isFunction ) {\r\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\r\n\t\t\t\t}\r\n\t\t\t\tself.domManip( args, callback );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( l ) {\r\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\r\n\t\t\tfirst = fragment.firstChild;\r\n\r\n\t\t\tif ( fragment.childNodes.length === 1 ) {\r\n\t\t\t\tfragment = first;\r\n\t\t\t}\r\n\r\n\t\t\tif ( first ) {\r\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\r\n\t\t\t\thasScripts = scripts.length;\r\n\r\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\r\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\r\n\t\t\t\tfor ( ; i < l; i++ ) {\r\n\t\t\t\t\tnode = fragment;\r\n\r\n\t\t\t\t\tif ( i !== iNoClone ) {\r\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\r\n\r\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\r\n\t\t\t\t\t\tif ( hasScripts ) {\r\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcallback.call( this[i], node, i );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( hasScripts ) {\r\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\r\n\r\n\t\t\t\t\t// Reenable scripts\r\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\r\n\r\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\r\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\r\n\t\t\t\t\t\tnode = scripts[ i ];\r\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\r\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\r\n\r\n\t\t\t\t\t\t\tif ( node.src ) {\r\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\r\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\r\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Fix #11809: Avoid leaking memory\r\n\t\t\t\tfragment = first = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\njQuery.each({\r\n\tappendTo: \"append\",\r\n\tprependTo: \"prepend\",\r\n\tinsertBefore: \"before\",\r\n\tinsertAfter: \"after\",\r\n\treplaceAll: \"replaceWith\"\r\n}, function( name, original ) {\r\n\tjQuery.fn[ name ] = function( selector ) {\r\n\t\tvar elems,\r\n\t\t\ti = 0,\r\n\t\t\tret = [],\r\n\t\t\tinsert = jQuery( selector ),\r\n\t\t\tlast = insert.length - 1;\r\n\r\n\t\tfor ( ; i <= last; i++ ) {\r\n\t\t\telems = i === last ? this : this.clone(true);\r\n\t\t\tjQuery( insert[i] )[ original ]( elems );\r\n\r\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\r\n\t\t\tpush.apply( ret, elems.get() );\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( ret );\r\n\t};\r\n});\r\n\r\n\r\nvar iframe,\r\n\telemdisplay = {};\r\n\r\n/**\r\n * Retrieve the actual display of a element\r\n * @param {String} name nodeName of the element\r\n * @param {Object} doc Document object\r\n */\r\n// Called only from within defaultDisplay\r\nfunction actualDisplay( name, doc ) {\r\n\tvar style,\r\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\r\n\r\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\r\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\r\n\r\n\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\r\n\t\t\t// since it was removed from specification and supported only in FF\r\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\r\n\r\n\t// We don't have any data stored on the element,\r\n\t// so use \"detach\" method as fast way to get rid of the element\r\n\telem.detach();\r\n\r\n\treturn display;\r\n}\r\n\r\n/**\r\n * Try to determine the default display value of an element\r\n * @param {String} nodeName\r\n */\r\nfunction defaultDisplay( nodeName ) {\r\n\tvar doc = document,\r\n\t\tdisplay = elemdisplay[ nodeName ];\r\n\r\n\tif ( !display ) {\r\n\t\tdisplay = actualDisplay( nodeName, doc );\r\n\r\n\t\t// If the simple way fails, read from inside an iframe\r\n\t\tif ( display === \"none\" || !display ) {\r\n\r\n\t\t\t// Use the already-created iframe if possible\r\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\r\n\r\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\r\n\t\t\tdoc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;\r\n\r\n\t\t\t// Support: IE\r\n\t\t\tdoc.write();\r\n\t\t\tdoc.close();\r\n\r\n\t\t\tdisplay = actualDisplay( nodeName, doc );\r\n\t\t\tiframe.detach();\r\n\t\t}\r\n\r\n\t\t// Store the correct default display\r\n\t\telemdisplay[ nodeName ] = display;\r\n\t}\r\n\r\n\treturn display;\r\n}\r\n\r\n\r\n(function() {\r\n\tvar shrinkWrapBlocksVal;\r\n\r\n\tsupport.shrinkWrapBlocks = function() {\r\n\t\tif ( shrinkWrapBlocksVal != null ) {\r\n\t\t\treturn shrinkWrapBlocksVal;\r\n\t\t}\r\n\r\n\t\t// Will be changed later if needed.\r\n\t\tshrinkWrapBlocksVal = false;\r\n\r\n\t\t// Minified: var b,c,d\r\n\t\tvar div, body, container;\r\n\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\t\tif ( !body || !body.style ) {\r\n\t\t\t// Test fired too early or in an unsupported environment, exit.\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Setup\r\n\t\tdiv = document.createElement( \"div\" );\r\n\t\tcontainer = document.createElement( \"div\" );\r\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\t\tbody.appendChild( container ).appendChild( div );\r\n\r\n\t\t// Support: IE6\r\n\t\t// Check if elements with layout shrink-wrap their children\r\n\t\tif ( typeof div.style.zoom !== strundefined ) {\r\n\t\t\t// Reset CSS: box-sizing; display; margin; border\r\n\t\t\tdiv.style.cssText =\r\n\t\t\t\t// Support: Firefox<29, Android 2.3\r\n\t\t\t\t// Vendor-prefix box-sizing\r\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\r\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\r\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\r\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\r\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\r\n\t\t}\r\n\r\n\t\tbody.removeChild( container );\r\n\r\n\t\treturn shrinkWrapBlocksVal;\r\n\t};\r\n\r\n})();\r\nvar rmargin = (/^margin/);\r\n\r\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\r\n\r\n\r\n\r\nvar getStyles, curCSS,\r\n\trposition = /^(top|right|bottom|left)$/;\r\n\r\nif ( window.getComputedStyle ) {\r\n\tgetStyles = function( elem ) {\r\n\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\r\n\t};\r\n\r\n\tcurCSS = function( elem, name, computed ) {\r\n\t\tvar width, minWidth, maxWidth, ret,\r\n\t\t\tstyle = elem.style;\r\n\r\n\t\tcomputed = computed || getStyles( elem );\r\n\r\n\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\r\n\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\r\n\r\n\t\tif ( computed ) {\r\n\r\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\r\n\t\t\t\tret = jQuery.style( elem, name );\r\n\t\t\t}\r\n\r\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\r\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\r\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\r\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\r\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\r\n\r\n\t\t\t\t// Remember the original values\r\n\t\t\t\twidth = style.width;\r\n\t\t\t\tminWidth = style.minWidth;\r\n\t\t\t\tmaxWidth = style.maxWidth;\r\n\r\n\t\t\t\t// Put in the new values to get a computed value out\r\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\r\n\t\t\t\tret = computed.width;\r\n\r\n\t\t\t\t// Revert the changed values\r\n\t\t\t\tstyle.width = width;\r\n\t\t\t\tstyle.minWidth = minWidth;\r\n\t\t\t\tstyle.maxWidth = maxWidth;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Support: IE\r\n\t\t// IE returns zIndex value as an integer.\r\n\t\treturn ret === undefined ?\r\n\t\t\tret :\r\n\t\t\tret + \"\";\r\n\t};\r\n} else if ( document.documentElement.currentStyle ) {\r\n\tgetStyles = function( elem ) {\r\n\t\treturn elem.currentStyle;\r\n\t};\r\n\r\n\tcurCSS = function( elem, name, computed ) {\r\n\t\tvar left, rs, rsLeft, ret,\r\n\t\t\tstyle = elem.style;\r\n\r\n\t\tcomputed = computed || getStyles( elem );\r\n\t\tret = computed ? computed[ name ] : undefined;\r\n\r\n\t\t// Avoid setting ret to empty string here\r\n\t\t// so we don't default to auto\r\n\t\tif ( ret == null && style && style[ name ] ) {\r\n\t\t\tret = style[ name ];\r\n\t\t}\r\n\r\n\t\t// From the awesome hack by Dean Edwards\r\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\r\n\r\n\t\t// If we're not dealing with a regular pixel number\r\n\t\t// but a number that has a weird ending, we need to convert it to pixels\r\n\t\t// but not position css attributes, as those are proportional to the parent element instead\r\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\r\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\r\n\r\n\t\t\t// Remember the original values\r\n\t\t\tleft = style.left;\r\n\t\t\trs = elem.runtimeStyle;\r\n\t\t\trsLeft = rs && rs.left;\r\n\r\n\t\t\t// Put in the new values to get a computed value out\r\n\t\t\tif ( rsLeft ) {\r\n\t\t\t\trs.left = elem.currentStyle.left;\r\n\t\t\t}\r\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\r\n\t\t\tret = style.pixelLeft + \"px\";\r\n\r\n\t\t\t// Revert the changed values\r\n\t\t\tstyle.left = left;\r\n\t\t\tif ( rsLeft ) {\r\n\t\t\t\trs.left = rsLeft;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Support: IE\r\n\t\t// IE returns zIndex value as an integer.\r\n\t\treturn ret === undefined ?\r\n\t\t\tret :\r\n\t\t\tret + \"\" || \"auto\";\r\n\t};\r\n}\r\n\r\n\r\n\r\n\r\nfunction addGetHookIf( conditionFn, hookFn ) {\r\n\t// Define the hook, we'll check on the first run if it's really needed.\r\n\treturn {\r\n\t\tget: function() {\r\n\t\t\tvar condition = conditionFn();\r\n\r\n\t\t\tif ( condition == null ) {\r\n\t\t\t\t// The test was not ready at this point; screw the hook this time\r\n\t\t\t\t// but check again when needed next time.\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ( condition ) {\r\n\t\t\t\t// Hook not needed (or it's not possible to use it due to missing dependency),\r\n\t\t\t\t// remove it.\r\n\t\t\t\t// Since there are no other hooks for marginRight, remove the whole object.\r\n\t\t\t\tdelete this.get;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\r\n\r\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n\r\n(function() {\r\n\t// Minified: var b,c,d,e,f,g, h,i\r\n\tvar div, style, a, pixelPositionVal, boxSizingReliableVal,\r\n\t\treliableHiddenOffsetsVal, reliableMarginRightVal;\r\n\r\n\t// Setup\r\n\tdiv = document.createElement( \"div\" );\r\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\r\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\r\n\tstyle = a && a.style;\r\n\r\n\t// Finish early in limited (non-browser) environments\r\n\tif ( !style ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tstyle.cssText = \"float:left;opacity:.5\";\r\n\r\n\t// Support: IE<9\r\n\t// Make sure that element opacity exists (as opposed to filter)\r\n\tsupport.opacity = style.opacity === \"0.5\";\r\n\r\n\t// Verify style float existence\r\n\t// (IE uses styleFloat instead of cssFloat)\r\n\tsupport.cssFloat = !!style.cssFloat;\r\n\r\n\tdiv.style.backgroundClip = \"content-box\";\r\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\r\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\r\n\r\n\t// Support: Firefox<29, Android 2.3\r\n\t// Vendor-prefix box-sizing\r\n\tsupport.boxSizing = style.boxSizing === \"\" || style.MozBoxSizing === \"\" ||\r\n\t\tstyle.WebkitBoxSizing === \"\";\r\n\r\n\tjQuery.extend(support, {\r\n\t\treliableHiddenOffsets: function() {\r\n\t\t\tif ( reliableHiddenOffsetsVal == null ) {\r\n\t\t\t\tcomputeStyleTests();\r\n\t\t\t}\r\n\t\t\treturn reliableHiddenOffsetsVal;\r\n\t\t},\r\n\r\n\t\tboxSizingReliable: function() {\r\n\t\t\tif ( boxSizingReliableVal == null ) {\r\n\t\t\t\tcomputeStyleTests();\r\n\t\t\t}\r\n\t\t\treturn boxSizingReliableVal;\r\n\t\t},\r\n\r\n\t\tpixelPosition: function() {\r\n\t\t\tif ( pixelPositionVal == null ) {\r\n\t\t\t\tcomputeStyleTests();\r\n\t\t\t}\r\n\t\t\treturn pixelPositionVal;\r\n\t\t},\r\n\r\n\t\t// Support: Android 2.3\r\n\t\treliableMarginRight: function() {\r\n\t\t\tif ( reliableMarginRightVal == null ) {\r\n\t\t\t\tcomputeStyleTests();\r\n\t\t\t}\r\n\t\t\treturn reliableMarginRightVal;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction computeStyleTests() {\r\n\t\t// Minified: var b,c,d,j\r\n\t\tvar div, body, container, contents;\r\n\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\t\tif ( !body || !body.style ) {\r\n\t\t\t// Test fired too early or in an unsupported environment, exit.\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Setup\r\n\t\tdiv = document.createElement( \"div\" );\r\n\t\tcontainer = document.createElement( \"div\" );\r\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\t\tbody.appendChild( container ).appendChild( div );\r\n\r\n\t\tdiv.style.cssText =\r\n\t\t\t// Support: Firefox<29, Android 2.3\r\n\t\t\t// Vendor-prefix box-sizing\r\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\r\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\r\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Assume reasonable values in the absence of getComputedStyle\r\n\t\tpixelPositionVal = boxSizingReliableVal = false;\r\n\t\treliableMarginRightVal = true;\r\n\r\n\t\t// Check for getComputedStyle so that this code is not run in IE<9.\r\n\t\tif ( window.getComputedStyle ) {\r\n\t\t\tpixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\r\n\t\t\tboxSizingReliableVal =\r\n\t\t\t\t( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\r\n\r\n\t\t\t// Support: Android 2.3\r\n\t\t\t// Div with explicit width and no margin-right incorrectly\r\n\t\t\t// gets computed margin-right based on width of container (#3333)\r\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\r\n\t\t\tcontents = div.appendChild( document.createElement( \"div\" ) );\r\n\r\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\r\n\t\t\tcontents.style.cssText = div.style.cssText =\r\n\t\t\t\t// Support: Firefox<29, Android 2.3\r\n\t\t\t\t// Vendor-prefix box-sizing\r\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\r\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\r\n\t\t\tcontents.style.marginRight = contents.style.width = \"0\";\r\n\t\t\tdiv.style.width = \"1px\";\r\n\r\n\t\t\treliableMarginRightVal =\r\n\t\t\t\t!parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );\r\n\t\t}\r\n\r\n\t\t// Support: IE8\r\n\t\t// Check if table cells still have offsetWidth/Height when they are set\r\n\t\t// to display:none and there are still other visible table cells in a\r\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\r\n\t\t// determining if an element has been hidden directly using\r\n\t\t// display:none (it is still safe to use offsets if a parent element is\r\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\r\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\r\n\t\tcontents = div.getElementsByTagName( \"td\" );\r\n\t\tcontents[ 0 ].style.cssText = \"margin:0;border:0;padding:0;display:none\";\r\n\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\r\n\t\tif ( reliableHiddenOffsetsVal ) {\r\n\t\t\tcontents[ 0 ].style.display = \"\";\r\n\t\t\tcontents[ 1 ].style.display = \"none\";\r\n\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\r\n\t\t}\r\n\r\n\t\tbody.removeChild( container );\r\n\t}\r\n\r\n})();\r\n\r\n\r\n// A method for quickly swapping in/out CSS properties to get correct calculations.\r\njQuery.swap = function( elem, options, callback, args ) {\r\n\tvar ret, name,\r\n\t\told = {};\r\n\r\n\t// Remember the old values, and insert the new ones\r\n\tfor ( name in options ) {\r\n\t\told[ name ] = elem.style[ name ];\r\n\t\telem.style[ name ] = options[ name ];\r\n\t}\r\n\r\n\tret = callback.apply( elem, args || [] );\r\n\r\n\t// Revert the old values\r\n\tfor ( name in options ) {\r\n\t\telem.style[ name ] = old[ name ];\r\n\t}\r\n\r\n\treturn ret;\r\n};\r\n\r\n\r\nvar\r\n\t\tralpha = /alpha\\([^)]*\\)/i,\r\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\r\n\r\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\r\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\r\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\r\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\r\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\r\n\r\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\r\n\tcssNormalTransform = {\r\n\t\tletterSpacing: \"0\",\r\n\t\tfontWeight: \"400\"\r\n\t},\r\n\r\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\r\n\r\n\r\n// return a css property mapped to a potentially vendor prefixed property\r\nfunction vendorPropName( style, name ) {\r\n\r\n\t// shortcut for names that are not vendor prefixed\r\n\tif ( name in style ) {\r\n\t\treturn name;\r\n\t}\r\n\r\n\t// check for vendor prefixed names\r\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\r\n\t\torigName = name,\r\n\t\ti = cssPrefixes.length;\r\n\r\n\twhile ( i-- ) {\r\n\t\tname = cssPrefixes[ i ] + capName;\r\n\t\tif ( name in style ) {\r\n\t\t\treturn name;\r\n\t\t}\r\n\t}\r\n\r\n\treturn origName;\r\n}\r\n\r\nfunction showHide( elements, show ) {\r\n\tvar display, elem, hidden,\r\n\t\tvalues = [],\r\n\t\tindex = 0,\r\n\t\tlength = elements.length;\r\n\r\n\tfor ( ; index < length; index++ ) {\r\n\t\telem = elements[ index ];\r\n\t\tif ( !elem.style ) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\r\n\t\tdisplay = elem.style.display;\r\n\t\tif ( show ) {\r\n\t\t\t// Reset the inline display of this element to learn if it is\r\n\t\t\t// being hidden by cascaded rules or not\r\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\r\n\t\t\t\telem.style.display = \"\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set elements which have been overridden with display: none\r\n\t\t\t// in a stylesheet to whatever the default browser style is\r\n\t\t\t// for such an element\r\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\r\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\thidden = isHidden( elem );\r\n\r\n\t\t\tif ( display && display !== \"none\" || !hidden ) {\r\n\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Set the display of most of the elements in a second loop\r\n\t// to avoid the constant reflow\r\n\tfor ( index = 0; index < length; index++ ) {\r\n\t\telem = elements[ index ];\r\n\t\tif ( !elem.style ) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\r\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\r\n\t\t}\r\n\t}\r\n\r\n\treturn elements;\r\n}\r\n\r\nfunction setPositiveNumber( elem, value, subtract ) {\r\n\tvar matches = rnumsplit.exec( value );\r\n\treturn matches ?\r\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\r\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\r\n\t\tvalue;\r\n}\r\n\r\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\r\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\r\n\t\t// If we already have the right measurement, avoid augmentation\r\n\t\t4 :\r\n\t\t// Otherwise initialize for horizontal or vertical properties\r\n\t\tname === \"width\" ? 1 : 0,\r\n\r\n\t\tval = 0;\r\n\r\n\tfor ( ; i < 4; i += 2 ) {\r\n\t\t// both box models exclude margin, so add it if we want it\r\n\t\tif ( extra === \"margin\" ) {\r\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\r\n\t\t}\r\n\r\n\t\tif ( isBorderBox ) {\r\n\t\t\t// border-box includes padding, so remove it if we want content\r\n\t\t\tif ( extra === \"content\" ) {\r\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\r\n\t\t\t}\r\n\r\n\t\t\t// at this point, extra isn't border nor margin, so remove border\r\n\t\t\tif ( extra !== \"margin\" ) {\r\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// at this point, extra isn't content, so add padding\r\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\r\n\r\n\t\t\t// at this point, extra isn't content nor padding, so add border\r\n\t\t\tif ( extra !== \"padding\" ) {\r\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn val;\r\n}\r\n\r\nfunction getWidthOrHeight( elem, name, extra ) {\r\n\r\n\t// Start with offset property, which is equivalent to the border-box value\r\n\tvar valueIsBorderBox = true,\r\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\r\n\t\tstyles = getStyles( elem ),\r\n\t\tisBorderBox = support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\r\n\r\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\r\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\r\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\r\n\tif ( val <= 0 || val == null ) {\r\n\t\t// Fall back to computed then uncomputed css if necessary\r\n\t\tval = curCSS( elem, name, styles );\r\n\t\tif ( val < 0 || val == null ) {\r\n\t\t\tval = elem.style[ name ];\r\n\t\t}\r\n\r\n\t\t// Computed unit is not pixels. Stop here and return.\r\n\t\tif ( rnumnonpx.test(val) ) {\r\n\t\t\treturn val;\r\n\t\t}\r\n\r\n\t\t// we need the check for style in case a browser which returns unreliable values\r\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\r\n\t\tvalueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );\r\n\r\n\t\t// Normalize \"\", auto, and prepare for extra\r\n\t\tval = parseFloat( val ) || 0;\r\n\t}\r\n\r\n\t// use the active box-sizing model to add/subtract irrelevant styles\r\n\treturn ( val +\r\n\t\taugmentWidthOrHeight(\r\n\t\t\telem,\r\n\t\t\tname,\r\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\r\n\t\t\tvalueIsBorderBox,\r\n\t\t\tstyles\r\n\t\t)\r\n\t) + \"px\";\r\n}\r\n\r\njQuery.extend({\r\n\t// Add in style property hooks for overriding the default\r\n\t// behavior of getting and setting a style property\r\n\tcssHooks: {\r\n\t\topacity: {\r\n\t\t\tget: function( elem, computed ) {\r\n\t\t\t\tif ( computed ) {\r\n\t\t\t\t\t// We should always get a number back from opacity\r\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\r\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// Don't automatically add \"px\" to these possibly-unitless properties\r\n\tcssNumber: {\r\n\t\t\"columnCount\": true,\r\n\t\t\"fillOpacity\": true,\r\n\t\t\"flexGrow\": true,\r\n\t\t\"flexShrink\": true,\r\n\t\t\"fontWeight\": true,\r\n\t\t\"lineHeight\": true,\r\n\t\t\"opacity\": true,\r\n\t\t\"order\": true,\r\n\t\t\"orphans\": true,\r\n\t\t\"widows\": true,\r\n\t\t\"zIndex\": true,\r\n\t\t\"zoom\": true\r\n\t},\r\n\r\n\t// Add in properties whose names you wish to fix before\r\n\t// setting or getting the value\r\n\tcssProps: {\r\n\t\t// normalize float css property\r\n\t\t\"float\": support.cssFloat ? \"cssFloat\" : \"styleFloat\"\r\n\t},\r\n\r\n\t// Get and set the style property on a DOM Node\r\n\tstyle: function( elem, name, value, extra ) {\r\n\t\t// Don't set styles on text and comment nodes\r\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Make sure that we're working with the right name\r\n\t\tvar ret, type, hooks,\r\n\t\t\torigName = jQuery.camelCase( name ),\r\n\t\t\tstyle = elem.style;\r\n\r\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\r\n\r\n\t\t// gets hook for the prefixed version\r\n\t\t// followed by the unprefixed version\r\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\r\n\r\n\t\t// Check if we're setting a value\r\n\t\tif ( value !== undefined ) {\r\n\t\t\ttype = typeof value;\r\n\r\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\r\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\r\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\r\n\t\t\t\t// Fixes bug #9237\r\n\t\t\t\ttype = \"number\";\r\n\t\t\t}\r\n\r\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\r\n\t\t\tif ( value == null || value !== value ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\r\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\r\n\t\t\t\tvalue += \"px\";\r\n\t\t\t}\r\n\r\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\r\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\r\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\r\n\t\t\t\tstyle[ name ] = \"inherit\";\r\n\t\t\t}\r\n\r\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\r\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\r\n\r\n\t\t\t\t// Support: IE\r\n\t\t\t\t// Swallow errors from 'invalid' CSS values (#5509)\r\n\t\t\t\ttry {\r\n\t\t\t\t\tstyle[ name ] = value;\r\n\t\t\t\t} catch(e) {}\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// If a hook was provided get the non-computed value from there\r\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\r\n\t\t\t// Otherwise just get the value from the style object\r\n\t\t\treturn style[ name ];\r\n\t\t}\r\n\t},\r\n\r\n\tcss: function( elem, name, extra, styles ) {\r\n\t\tvar num, val, hooks,\r\n\t\t\torigName = jQuery.camelCase( name );\r\n\r\n\t\t// Make sure that we're working with the right name\r\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\r\n\r\n\t\t// gets hook for the prefixed version\r\n\t\t// followed by the unprefixed version\r\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\r\n\r\n\t\t// If a hook was provided get the computed value from there\r\n\t\tif ( hooks && \"get\" in hooks ) {\r\n\t\t\tval = hooks.get( elem, true, extra );\r\n\t\t}\r\n\r\n\t\t// Otherwise, if a way to get the computed value exists, use that\r\n\t\tif ( val === undefined ) {\r\n\t\t\tval = curCSS( elem, name, styles );\r\n\t\t}\r\n\r\n\t\t//convert \"normal\" to computed value\r\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\r\n\t\t\tval = cssNormalTransform[ name ];\r\n\t\t}\r\n\r\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\r\n\t\tif ( extra === \"\" || extra ) {\r\n\t\t\tnum = parseFloat( val );\r\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\r\n\t\t}\r\n\t\treturn val;\r\n\t}\r\n});\r\n\r\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\r\n\tjQuery.cssHooks[ name ] = {\r\n\t\tget: function( elem, computed, extra ) {\r\n\t\t\tif ( computed ) {\r\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\r\n\t\t\t\t// however, it must have a current display style that would benefit from this\r\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\r\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\r\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\r\n\t\t\t\t\t}) :\r\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tset: function( elem, value, extra ) {\r\n\t\t\tvar styles = extra && getStyles( elem );\r\n\t\t\treturn setPositiveNumber( elem, value, extra ?\r\n\t\t\t\taugmentWidthOrHeight(\r\n\t\t\t\t\telem,\r\n\t\t\t\t\tname,\r\n\t\t\t\t\textra,\r\n\t\t\t\t\tsupport.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\r\n\t\t\t\t\tstyles\r\n\t\t\t\t) : 0\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n});\r\n\r\nif ( !support.opacity ) {\r\n\tjQuery.cssHooks.opacity = {\r\n\t\tget: function( elem, computed ) {\r\n\t\t\t// IE uses filters for opacity\r\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\r\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\r\n\t\t\t\tcomputed ? \"1\" : \"\";\r\n\t\t},\r\n\r\n\t\tset: function( elem, value ) {\r\n\t\t\tvar style = elem.style,\r\n\t\t\t\tcurrentStyle = elem.currentStyle,\r\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\r\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\r\n\r\n\t\t\t// IE has trouble with opacity if it does not have layout\r\n\t\t\t// Force it by setting the zoom level\r\n\t\t\tstyle.zoom = 1;\r\n\r\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\r\n\t\t\t// if value === \"\", then remove inline opacity #12685\r\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\r\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\r\n\t\t\t\t\tstyle.removeAttribute ) {\r\n\r\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\r\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\r\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\r\n\t\t\t\tstyle.removeAttribute( \"filter\" );\r\n\r\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\r\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// otherwise, set new filter values\r\n\t\t\tstyle.filter = ralpha.test( filter ) ?\r\n\t\t\t\tfilter.replace( ralpha, opacity ) :\r\n\t\t\t\tfilter + \" \" + opacity;\r\n\t\t}\r\n\t};\r\n}\r\n\r\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\r\n\tfunction( elem, computed ) {\r\n\t\tif ( computed ) {\r\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\r\n\t\t\t// Work around by temporarily setting element display to inline-block\r\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\r\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\r\n\t\t}\r\n\t}\r\n);\r\n\r\n// These hooks are used by animate to expand properties\r\njQuery.each({\r\n\tmargin: \"\",\r\n\tpadding: \"\",\r\n\tborder: \"Width\"\r\n}, function( prefix, suffix ) {\r\n\tjQuery.cssHooks[ prefix + suffix ] = {\r\n\t\texpand: function( value ) {\r\n\t\t\tvar i = 0,\r\n\t\t\t\texpanded = {},\r\n\r\n\t\t\t\t// assumes a single number if not a string\r\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\r\n\r\n\t\t\tfor ( ; i < 4; i++ ) {\r\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\r\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\r\n\t\t\t}\r\n\r\n\t\t\treturn expanded;\r\n\t\t}\r\n\t};\r\n\r\n\tif ( !rmargin.test( prefix ) ) {\r\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\r\n\t}\r\n});\r\n\r\njQuery.fn.extend({\r\n\tcss: function( name, value ) {\r\n\t\treturn access( this, function( elem, name, value ) {\r\n\t\t\tvar styles, len,\r\n\t\t\t\tmap = {},\r\n\t\t\t\ti = 0;\r\n\r\n\t\t\tif ( jQuery.isArray( name ) ) {\r\n\t\t\t\tstyles = getStyles( elem );\r\n\t\t\t\tlen = name.length;\r\n\r\n\t\t\t\tfor ( ; i < len; i++ ) {\r\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn map;\r\n\t\t\t}\r\n\r\n\t\t\treturn value !== undefined ?\r\n\t\t\t\tjQuery.style( elem, name, value ) :\r\n\t\t\t\tjQuery.css( elem, name );\r\n\t\t}, name, value, arguments.length > 1 );\r\n\t},\r\n\tshow: function() {\r\n\t\treturn showHide( this, true );\r\n\t},\r\n\thide: function() {\r\n\t\treturn showHide( this );\r\n\t},\r\n\ttoggle: function( state ) {\r\n\t\tif ( typeof state === \"boolean\" ) {\r\n\t\t\treturn state ? this.show() : this.hide();\r\n\t\t}\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( isHidden( this ) ) {\r\n\t\t\t\tjQuery( this ).show();\r\n\t\t\t} else {\r\n\t\t\t\tjQuery( this ).hide();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\nfunction Tween( elem, options, prop, end, easing ) {\r\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\r\n}\r\njQuery.Tween = Tween;\r\n\r\nTween.prototype = {\r\n\tconstructor: Tween,\r\n\tinit: function( elem, options, prop, end, easing, unit ) {\r\n\t\tthis.elem = elem;\r\n\t\tthis.prop = prop;\r\n\t\tthis.easing = easing || \"swing\";\r\n\t\tthis.options = options;\r\n\t\tthis.start = this.now = this.cur();\r\n\t\tthis.end = end;\r\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\r\n\t},\r\n\tcur: function() {\r\n\t\tvar hooks = Tween.propHooks[ this.prop ];\r\n\r\n\t\treturn hooks && hooks.get ?\r\n\t\t\thooks.get( this ) :\r\n\t\t\tTween.propHooks._default.get( this );\r\n\t},\r\n\trun: function( percent ) {\r\n\t\tvar eased,\r\n\t\t\thooks = Tween.propHooks[ this.prop ];\r\n\r\n\t\tif ( this.options.duration ) {\r\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\r\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tthis.pos = eased = percent;\r\n\t\t}\r\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\r\n\r\n\t\tif ( this.options.step ) {\r\n\t\t\tthis.options.step.call( this.elem, this.now, this );\r\n\t\t}\r\n\r\n\t\tif ( hooks && hooks.set ) {\r\n\t\t\thooks.set( this );\r\n\t\t} else {\r\n\t\t\tTween.propHooks._default.set( this );\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n};\r\n\r\nTween.prototype.init.prototype = Tween.prototype;\r\n\r\nTween.propHooks = {\r\n\t_default: {\r\n\t\tget: function( tween ) {\r\n\t\t\tvar result;\r\n\r\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\r\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\r\n\t\t\t\treturn tween.elem[ tween.prop ];\r\n\t\t\t}\r\n\r\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\r\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\r\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\r\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\r\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\r\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\r\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\r\n\t\t},\r\n\t\tset: function( tween ) {\r\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\r\n\t\t\t// available and use plain properties where available\r\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\r\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\r\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\r\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\r\n\t\t\t} else {\r\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// Support: IE <=9\r\n// Panic based approach to setting things on disconnected nodes\r\n\r\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\r\n\tset: function( tween ) {\r\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\r\n\t\t\ttween.elem[ tween.prop ] = tween.now;\r\n\t\t}\r\n\t}\r\n};\r\n\r\njQuery.easing = {\r\n\tlinear: function( p ) {\r\n\t\treturn p;\r\n\t},\r\n\tswing: function( p ) {\r\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\r\n\t}\r\n};\r\n\r\njQuery.fx = Tween.prototype.init;\r\n\r\n// Back Compat <1.8 extension point\r\njQuery.fx.step = {};\r\n\r\n\r\n\r\n\r\nvar\r\n\tfxNow, timerId,\r\n\trfxtypes = /^(?:toggle|show|hide)$/,\r\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\r\n\trrun = /queueHooks$/,\r\n\tanimationPrefilters = [ defaultPrefilter ],\r\n\ttweeners = {\r\n\t\t\"*\": [ function( prop, value ) {\r\n\t\t\tvar tween = this.createTween( prop, value ),\r\n\t\t\t\ttarget = tween.cur(),\r\n\t\t\t\tparts = rfxnum.exec( value ),\r\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\r\n\r\n\t\t\t\t// Starting value computation is required for potential unit mismatches\r\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\r\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\r\n\t\t\t\tscale = 1,\r\n\t\t\t\tmaxIterations = 20;\r\n\r\n\t\t\tif ( start && start[ 3 ] !== unit ) {\r\n\t\t\t\t// Trust units reported by jQuery.css\r\n\t\t\t\tunit = unit || start[ 3 ];\r\n\r\n\t\t\t\t// Make sure we update the tween properties later on\r\n\t\t\t\tparts = parts || [];\r\n\r\n\t\t\t\t// Iteratively approximate from a nonzero starting point\r\n\t\t\t\tstart = +target || 1;\r\n\r\n\t\t\t\tdo {\r\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\r\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\r\n\t\t\t\t\tscale = scale || \".5\";\r\n\r\n\t\t\t\t\t// Adjust and apply\r\n\t\t\t\t\tstart = start / scale;\r\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\r\n\r\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\r\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\r\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\r\n\t\t\t}\r\n\r\n\t\t\t// Update tween properties\r\n\t\t\tif ( parts ) {\r\n\t\t\t\tstart = tween.start = +start || +target || 0;\r\n\t\t\t\ttween.unit = unit;\r\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\r\n\t\t\t\ttween.end = parts[ 1 ] ?\r\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\r\n\t\t\t\t\t+parts[ 2 ];\r\n\t\t\t}\r\n\r\n\t\t\treturn tween;\r\n\t\t} ]\r\n\t};\r\n\r\n// Animations created synchronously will run synchronously\r\nfunction createFxNow() {\r\n\tsetTimeout(function() {\r\n\t\tfxNow = undefined;\r\n\t});\r\n\treturn ( fxNow = jQuery.now() );\r\n}\r\n\r\n// Generate parameters to create a standard animation\r\nfunction genFx( type, includeWidth ) {\r\n\tvar which,\r\n\t\tattrs = { height: type },\r\n\t\ti = 0;\r\n\r\n\t// if we include width, step value is 1 to do all cssExpand values,\r\n\t// if we don't include width, step value is 2 to skip over Left and Right\r\n\tincludeWidth = includeWidth ? 1 : 0;\r\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\r\n\t\twhich = cssExpand[ i ];\r\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\r\n\t}\r\n\r\n\tif ( includeWidth ) {\r\n\t\tattrs.opacity = attrs.width = type;\r\n\t}\r\n\r\n\treturn attrs;\r\n}\r\n\r\nfunction createTween( value, prop, animation ) {\r\n\tvar tween,\r\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\r\n\t\tindex = 0,\r\n\t\tlength = collection.length;\r\n\tfor ( ; index < length; index++ ) {\r\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\r\n\r\n\t\t\t// we're done with this property\r\n\t\t\treturn tween;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction defaultPrefilter( elem, props, opts ) {\r\n\t/* jshint validthis: true */\r\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\r\n\t\tanim = this,\r\n\t\torig = {},\r\n\t\tstyle = elem.style,\r\n\t\thidden = elem.nodeType && isHidden( elem ),\r\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\r\n\r\n\t// handle queue: false promises\r\n\tif ( !opts.queue ) {\r\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\r\n\t\tif ( hooks.unqueued == null ) {\r\n\t\t\thooks.unqueued = 0;\r\n\t\t\toldfire = hooks.empty.fire;\r\n\t\t\thooks.empty.fire = function() {\r\n\t\t\t\tif ( !hooks.unqueued ) {\r\n\t\t\t\t\toldfire();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\thooks.unqueued++;\r\n\r\n\t\tanim.always(function() {\r\n\t\t\t// doing this makes sure that the complete handler will be called\r\n\t\t\t// before this completes\r\n\t\t\tanim.always(function() {\r\n\t\t\t\thooks.unqueued--;\r\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\r\n\t\t\t\t\thooks.empty.fire();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t// height/width overflow pass\r\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\r\n\t\t// Make sure that nothing sneaks out\r\n\t\t// Record all 3 overflow attributes because IE does not\r\n\t\t// change the overflow attribute when overflowX and\r\n\t\t// overflowY are set to the same value\r\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\r\n\r\n\t\t// Set display property to inline-block for height/width\r\n\t\t// animations on inline elements that are having width/height animated\r\n\t\tdisplay = jQuery.css( elem, \"display\" );\r\n\r\n\t\t// Test default display if display is currently \"none\"\r\n\t\tcheckDisplay = display === \"none\" ?\r\n\t\t\tjQuery._data( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\r\n\r\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\r\n\r\n\t\t\t// inline-level elements accept inline-block;\r\n\t\t\t// block-level elements need to be inline with layout\r\n\t\t\tif ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === \"inline\" ) {\r\n\t\t\t\tstyle.display = \"inline-block\";\r\n\t\t\t} else {\r\n\t\t\t\tstyle.zoom = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif ( opts.overflow ) {\r\n\t\tstyle.overflow = \"hidden\";\r\n\t\tif ( !support.shrinkWrapBlocks() ) {\r\n\t\t\tanim.always(function() {\r\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\r\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\r\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// show/hide pass\r\n\tfor ( prop in props ) {\r\n\t\tvalue = props[ prop ];\r\n\t\tif ( rfxtypes.exec( value ) ) {\r\n\t\t\tdelete props[ prop ];\r\n\t\t\ttoggle = toggle || value === \"toggle\";\r\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\r\n\r\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\r\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\r\n\t\t\t\t\thidden = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\r\n\r\n\t\t// Any non-fx value stops us from restoring the original display value\r\n\t\t} else {\r\n\t\t\tdisplay = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tif ( !jQuery.isEmptyObject( orig ) ) {\r\n\t\tif ( dataShow ) {\r\n\t\t\tif ( \"hidden\" in dataShow ) {\r\n\t\t\t\thidden = dataShow.hidden;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\r\n\t\t}\r\n\r\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\r\n\t\tif ( toggle ) {\r\n\t\t\tdataShow.hidden = !hidden;\r\n\t\t}\r\n\t\tif ( hidden ) {\r\n\t\t\tjQuery( elem ).show();\r\n\t\t} else {\r\n\t\t\tanim.done(function() {\r\n\t\t\t\tjQuery( elem ).hide();\r\n\t\t\t});\r\n\t\t}\r\n\t\tanim.done(function() {\r\n\t\t\tvar prop;\r\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\r\n\t\t\tfor ( prop in orig ) {\r\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\r\n\t\t\t}\r\n\t\t});\r\n\t\tfor ( prop in orig ) {\r\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\r\n\r\n\t\t\tif ( !( prop in dataShow ) ) {\r\n\t\t\t\tdataShow[ prop ] = tween.start;\r\n\t\t\t\tif ( hidden ) {\r\n\t\t\t\t\ttween.end = tween.start;\r\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\r\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\r\n\t\tstyle.display = display;\r\n\t}\r\n}\r\n\r\nfunction propFilter( props, specialEasing ) {\r\n\tvar index, name, easing, value, hooks;\r\n\r\n\t// camelCase, specialEasing and expand cssHook pass\r\n\tfor ( index in props ) {\r\n\t\tname = jQuery.camelCase( index );\r\n\t\teasing = specialEasing[ name ];\r\n\t\tvalue = props[ index ];\r\n\t\tif ( jQuery.isArray( value ) ) {\r\n\t\t\teasing = value[ 1 ];\r\n\t\t\tvalue = props[ index ] = value[ 0 ];\r\n\t\t}\r\n\r\n\t\tif ( index !== name ) {\r\n\t\t\tprops[ name ] = value;\r\n\t\t\tdelete props[ index ];\r\n\t\t}\r\n\r\n\t\thooks = jQuery.cssHooks[ name ];\r\n\t\tif ( hooks && \"expand\" in hooks ) {\r\n\t\t\tvalue = hooks.expand( value );\r\n\t\t\tdelete props[ name ];\r\n\r\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\r\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\r\n\t\t\tfor ( index in value ) {\r\n\t\t\t\tif ( !( index in props ) ) {\r\n\t\t\t\t\tprops[ index ] = value[ index ];\r\n\t\t\t\t\tspecialEasing[ index ] = easing;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tspecialEasing[ name ] = easing;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction Animation( elem, properties, options ) {\r\n\tvar result,\r\n\t\tstopped,\r\n\t\tindex = 0,\r\n\t\tlength = animationPrefilters.length,\r\n\t\tdeferred = jQuery.Deferred().always( function() {\r\n\t\t\t// don't match elem in the :animated selector\r\n\t\t\tdelete tick.elem;\r\n\t\t}),\r\n\t\ttick = function() {\r\n\t\t\tif ( stopped ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tvar currentTime = fxNow || createFxNow(),\r\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\r\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\r\n\t\t\t\ttemp = remaining / animation.duration || 0,\r\n\t\t\t\tpercent = 1 - temp,\r\n\t\t\t\tindex = 0,\r\n\t\t\t\tlength = animation.tweens.length;\r\n\r\n\t\t\tfor ( ; index < length ; index++ ) {\r\n\t\t\t\tanimation.tweens[ index ].run( percent );\r\n\t\t\t}\r\n\r\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\r\n\r\n\t\t\tif ( percent < 1 && length ) {\r\n\t\t\t\treturn remaining;\r\n\t\t\t} else {\r\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tanimation = deferred.promise({\r\n\t\t\telem: elem,\r\n\t\t\tprops: jQuery.extend( {}, properties ),\r\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\r\n\t\t\toriginalProperties: properties,\r\n\t\t\toriginalOptions: options,\r\n\t\t\tstartTime: fxNow || createFxNow(),\r\n\t\t\tduration: options.duration,\r\n\t\t\ttweens: [],\r\n\t\t\tcreateTween: function( prop, end ) {\r\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\r\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\r\n\t\t\t\tanimation.tweens.push( tween );\r\n\t\t\t\treturn tween;\r\n\t\t\t},\r\n\t\t\tstop: function( gotoEnd ) {\r\n\t\t\t\tvar index = 0,\r\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\r\n\t\t\t\t\t// otherwise we skip this part\r\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\r\n\t\t\t\tif ( stopped ) {\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\t\t\t\tstopped = true;\r\n\t\t\t\tfor ( ; index < length ; index++ ) {\r\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// resolve when we played the last frame\r\n\t\t\t\t// otherwise, reject\r\n\t\t\t\tif ( gotoEnd ) {\r\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}),\r\n\t\tprops = animation.props;\r\n\r\n\tpropFilter( props, animation.opts.specialEasing );\r\n\r\n\tfor ( ; index < length ; index++ ) {\r\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\r\n\t\tif ( result ) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\tjQuery.map( props, createTween, animation );\r\n\r\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\r\n\t\tanimation.opts.start.call( elem, animation );\r\n\t}\r\n\r\n\tjQuery.fx.timer(\r\n\t\tjQuery.extend( tick, {\r\n\t\t\telem: elem,\r\n\t\t\tanim: animation,\r\n\t\t\tqueue: animation.opts.queue\r\n\t\t})\r\n\t);\r\n\r\n\t// attach callbacks from options\r\n\treturn animation.progress( animation.opts.progress )\r\n\t\t.done( animation.opts.done, animation.opts.complete )\r\n\t\t.fail( animation.opts.fail )\r\n\t\t.always( animation.opts.always );\r\n}\r\n\r\njQuery.Animation = jQuery.extend( Animation, {\r\n\ttweener: function( props, callback ) {\r\n\t\tif ( jQuery.isFunction( props ) ) {\r\n\t\t\tcallback = props;\r\n\t\t\tprops = [ \"*\" ];\r\n\t\t} else {\r\n\t\t\tprops = props.split(\" \");\r\n\t\t}\r\n\r\n\t\tvar prop,\r\n\t\t\tindex = 0,\r\n\t\t\tlength = props.length;\r\n\r\n\t\tfor ( ; index < length ; index++ ) {\r\n\t\t\tprop = props[ index ];\r\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\r\n\t\t\ttweeners[ prop ].unshift( callback );\r\n\t\t}\r\n\t},\r\n\r\n\tprefilter: function( callback, prepend ) {\r\n\t\tif ( prepend ) {\r\n\t\t\tanimationPrefilters.unshift( callback );\r\n\t\t} else {\r\n\t\t\tanimationPrefilters.push( callback );\r\n\t\t}\r\n\t}\r\n});\r\n\r\njQuery.speed = function( speed, easing, fn ) {\r\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\r\n\t\tcomplete: fn || !fn && easing ||\r\n\t\t\tjQuery.isFunction( speed ) && speed,\r\n\t\tduration: speed,\r\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\r\n\t};\r\n\r\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\r\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\r\n\r\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\r\n\tif ( opt.queue == null || opt.queue === true ) {\r\n\t\topt.queue = \"fx\";\r\n\t}\r\n\r\n\t// Queueing\r\n\topt.old = opt.complete;\r\n\r\n\topt.complete = function() {\r\n\t\tif ( jQuery.isFunction( opt.old ) ) {\r\n\t\t\topt.old.call( this );\r\n\t\t}\r\n\r\n\t\tif ( opt.queue ) {\r\n\t\t\tjQuery.dequeue( this, opt.queue );\r\n\t\t}\r\n\t};\r\n\r\n\treturn opt;\r\n};\r\n\r\njQuery.fn.extend({\r\n\tfadeTo: function( speed, to, easing, callback ) {\r\n\r\n\t\t// show any hidden elements after setting opacity to 0\r\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\r\n\r\n\t\t\t// animate to the value specified\r\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\r\n\t},\r\n\tanimate: function( prop, speed, easing, callback ) {\r\n\t\tvar empty = jQuery.isEmptyObject( prop ),\r\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\r\n\t\t\tdoAnimation = function() {\r\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\r\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\r\n\r\n\t\t\t\t// Empty animations, or finishing resolves immediately\r\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\r\n\t\t\t\t\tanim.stop( true );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tdoAnimation.finish = doAnimation;\r\n\r\n\t\treturn empty || optall.queue === false ?\r\n\t\t\tthis.each( doAnimation ) :\r\n\t\t\tthis.queue( optall.queue, doAnimation );\r\n\t},\r\n\tstop: function( type, clearQueue, gotoEnd ) {\r\n\t\tvar stopQueue = function( hooks ) {\r\n\t\t\tvar stop = hooks.stop;\r\n\t\t\tdelete hooks.stop;\r\n\t\t\tstop( gotoEnd );\r\n\t\t};\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tgotoEnd = clearQueue;\r\n\t\t\tclearQueue = type;\r\n\t\t\ttype = undefined;\r\n\t\t}\r\n\t\tif ( clearQueue && type !== false ) {\r\n\t\t\tthis.queue( type || \"fx\", [] );\r\n\t\t}\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tvar dequeue = true,\r\n\t\t\t\tindex = type != null && type + \"queueHooks\",\r\n\t\t\t\ttimers = jQuery.timers,\r\n\t\t\t\tdata = jQuery._data( this );\r\n\r\n\t\t\tif ( index ) {\r\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\r\n\t\t\t\t\tstopQueue( data[ index ] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor ( index in data ) {\r\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\r\n\t\t\t\t\t\tstopQueue( data[ index ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor ( index = timers.length; index--; ) {\r\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\r\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\r\n\t\t\t\t\tdequeue = false;\r\n\t\t\t\t\ttimers.splice( index, 1 );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// start the next in the queue if the last step wasn't forced\r\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\r\n\t\t\t// but only if they were gotoEnd\r\n\t\t\tif ( dequeue || !gotoEnd ) {\r\n\t\t\t\tjQuery.dequeue( this, type );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\tfinish: function( type ) {\r\n\t\tif ( type !== false ) {\r\n\t\t\ttype = type || \"fx\";\r\n\t\t}\r\n\t\treturn this.each(function() {\r\n\t\t\tvar index,\r\n\t\t\t\tdata = jQuery._data( this ),\r\n\t\t\t\tqueue = data[ type + \"queue\" ],\r\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\r\n\t\t\t\ttimers = jQuery.timers,\r\n\t\t\t\tlength = queue ? queue.length : 0;\r\n\r\n\t\t\t// enable finishing flag on private data\r\n\t\t\tdata.finish = true;\r\n\r\n\t\t\t// empty the queue first\r\n\t\t\tjQuery.queue( this, type, [] );\r\n\r\n\t\t\tif ( hooks && hooks.stop ) {\r\n\t\t\t\thooks.stop.call( this, true );\r\n\t\t\t}\r\n\r\n\t\t\t// look for any active animations, and finish them\r\n\t\t\tfor ( index = timers.length; index--; ) {\r\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\r\n\t\t\t\t\ttimers[ index ].anim.stop( true );\r\n\t\t\t\t\ttimers.splice( index, 1 );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// look for any animations in the old queue and finish them\r\n\t\t\tfor ( index = 0; index < length; index++ ) {\r\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\r\n\t\t\t\t\tqueue[ index ].finish.call( this );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// turn off finishing flag\r\n\t\t\tdelete data.finish;\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\r\n\tvar cssFn = jQuery.fn[ name ];\r\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\r\n\t\treturn speed == null || typeof speed === \"boolean\" ?\r\n\t\t\tcssFn.apply( this, arguments ) :\r\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\r\n\t};\r\n});\r\n\r\n// Generate shortcuts for custom animations\r\njQuery.each({\r\n\tslideDown: genFx(\"show\"),\r\n\tslideUp: genFx(\"hide\"),\r\n\tslideToggle: genFx(\"toggle\"),\r\n\tfadeIn: { opacity: \"show\" },\r\n\tfadeOut: { opacity: \"hide\" },\r\n\tfadeToggle: { opacity: \"toggle\" }\r\n}, function( name, props ) {\r\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\r\n\t\treturn this.animate( props, speed, easing, callback );\r\n\t};\r\n});\r\n\r\njQuery.timers = [];\r\njQuery.fx.tick = function() {\r\n\tvar timer,\r\n\t\ttimers = jQuery.timers,\r\n\t\ti = 0;\r\n\r\n\tfxNow = jQuery.now();\r\n\r\n\tfor ( ; i < timers.length; i++ ) {\r\n\t\ttimer = timers[ i ];\r\n\t\t// Checks the timer has not already been removed\r\n\t\tif ( !timer() && timers[ i ] === timer ) {\r\n\t\t\ttimers.splice( i--, 1 );\r\n\t\t}\r\n\t}\r\n\r\n\tif ( !timers.length ) {\r\n\t\tjQuery.fx.stop();\r\n\t}\r\n\tfxNow = undefined;\r\n};\r\n\r\njQuery.fx.timer = function( timer ) {\r\n\tjQuery.timers.push( timer );\r\n\tif ( timer() ) {\r\n\t\tjQuery.fx.start();\r\n\t} else {\r\n\t\tjQuery.timers.pop();\r\n\t}\r\n};\r\n\r\njQuery.fx.interval = 13;\r\n\r\njQuery.fx.start = function() {\r\n\tif ( !timerId ) {\r\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\r\n\t}\r\n};\r\n\r\njQuery.fx.stop = function() {\r\n\tclearInterval( timerId );\r\n\ttimerId = null;\r\n};\r\n\r\njQuery.fx.speeds = {\r\n\tslow: 600,\r\n\tfast: 200,\r\n\t// Default speed\r\n\t_default: 400\r\n};\r\n\r\n\r\n// Based off of the plugin by Clint Helfers, with permission.\r\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\r\njQuery.fn.delay = function( time, type ) {\r\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\r\n\ttype = type || \"fx\";\r\n\r\n\treturn this.queue( type, function( next, hooks ) {\r\n\t\tvar timeout = setTimeout( next, time );\r\n\t\thooks.stop = function() {\r\n\t\t\tclearTimeout( timeout );\r\n\t\t};\r\n\t});\r\n};\r\n\r\n\r\n(function() {\r\n\t// Minified: var a,b,c,d,e\r\n\tvar input, div, select, a, opt;\r\n\r\n\t// Setup\r\n\tdiv = document.createElement( \"div\" );\r\n\tdiv.setAttribute( \"className\", \"t\" );\r\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\r\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\r\n\r\n\t// First batch of tests.\r\n\tselect = document.createElement(\"select\");\r\n\topt = select.appendChild( document.createElement(\"option\") );\r\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\r\n\r\n\ta.style.cssText = \"top:1px\";\r\n\r\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\r\n\tsupport.getSetAttribute = div.className !== \"t\";\r\n\r\n\t// Get the style information from getAttribute\r\n\t// (IE uses .cssText instead)\r\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\r\n\r\n\t// Make sure that URLs aren't manipulated\r\n\t// (IE normalizes it by default)\r\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\r\n\r\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\r\n\tsupport.checkOn = !!input.value;\r\n\r\n\t// Make sure that a selected-by-default option has a working selected property.\r\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\r\n\tsupport.optSelected = opt.selected;\r\n\r\n\t// Tests for enctype support on a form (#6743)\r\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\r\n\r\n\t// Make sure that the options inside disabled selects aren't marked as disabled\r\n\t// (WebKit marks them as disabled)\r\n\tselect.disabled = true;\r\n\tsupport.optDisabled = !opt.disabled;\r\n\r\n\t// Support: IE8 only\r\n\t// Check if we can trust getAttribute(\"value\")\r\n\tinput = document.createElement( \"input\" );\r\n\tinput.setAttribute( \"value\", \"\" );\r\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\r\n\r\n\t// Check if an input maintains its value after becoming a radio\r\n\tinput.value = \"t\";\r\n\tinput.setAttribute( \"type\", \"radio\" );\r\n\tsupport.radioValue = input.value === \"t\";\r\n})();\r\n\r\n\r\nvar rreturn = /\\r/g;\r\n\r\njQuery.fn.extend({\r\n\tval: function( value ) {\r\n\t\tvar hooks, ret, isFunction,\r\n\t\t\telem = this[0];\r\n\r\n\t\tif ( !arguments.length ) {\r\n\t\t\tif ( elem ) {\r\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\r\n\r\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\r\n\t\t\t\t\treturn ret;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tret = elem.value;\r\n\r\n\t\t\t\treturn typeof ret === \"string\" ?\r\n\t\t\t\t\t// handle most common string cases\r\n\t\t\t\t\tret.replace(rreturn, \"\") :\r\n\t\t\t\t\t// handle cases where value is null/undef or number\r\n\t\t\t\t\tret == null ? \"\" : ret;\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tisFunction = jQuery.isFunction( value );\r\n\r\n\t\treturn this.each(function( i ) {\r\n\t\t\tvar val;\r\n\r\n\t\t\tif ( this.nodeType !== 1 ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ( isFunction ) {\r\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\r\n\t\t\t} else {\r\n\t\t\t\tval = value;\r\n\t\t\t}\r\n\r\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\r\n\t\t\tif ( val == null ) {\r\n\t\t\t\tval = \"\";\r\n\t\t\t} else if ( typeof val === \"number\" ) {\r\n\t\t\t\tval += \"\";\r\n\t\t\t} else if ( jQuery.isArray( val ) ) {\r\n\t\t\t\tval = jQuery.map( val, function( value ) {\r\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\r\n\r\n\t\t\t// If set returns undefined, fall back to normal setting\r\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\r\n\t\t\t\tthis.value = val;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.extend({\r\n\tvalHooks: {\r\n\t\toption: {\r\n\t\t\tget: function( elem ) {\r\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\r\n\t\t\t\treturn val != null ?\r\n\t\t\t\t\tval :\r\n\t\t\t\t\t// Support: IE10-11+\r\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\r\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\r\n\t\t\t}\r\n\t\t},\r\n\t\tselect: {\r\n\t\t\tget: function( elem ) {\r\n\t\t\t\tvar value, option,\r\n\t\t\t\t\toptions = elem.options,\r\n\t\t\t\t\tindex = elem.selectedIndex,\r\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\r\n\t\t\t\t\tvalues = one ? null : [],\r\n\t\t\t\t\tmax = one ? index + 1 : options.length,\r\n\t\t\t\t\ti = index < 0 ?\r\n\t\t\t\t\t\tmax :\r\n\t\t\t\t\t\tone ? index : 0;\r\n\r\n\t\t\t\t// Loop through all the selected options\r\n\t\t\t\tfor ( ; i < max; i++ ) {\r\n\t\t\t\t\toption = options[ i ];\r\n\r\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\r\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\r\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\r\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\r\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\r\n\r\n\t\t\t\t\t\t// Get the specific value for the option\r\n\t\t\t\t\t\tvalue = jQuery( option ).val();\r\n\r\n\t\t\t\t\t\t// We don't need an array for one selects\r\n\t\t\t\t\t\tif ( one ) {\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Multi-Selects return an array\r\n\t\t\t\t\t\tvalues.push( value );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn values;\r\n\t\t\t},\r\n\r\n\t\t\tset: function( elem, value ) {\r\n\t\t\t\tvar optionSet, option,\r\n\t\t\t\t\toptions = elem.options,\r\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\r\n\t\t\t\t\ti = options.length;\r\n\r\n\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\toption = options[ i ];\r\n\r\n\t\t\t\t\tif ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {\r\n\r\n\t\t\t\t\t\t// Support: IE6\r\n\t\t\t\t\t\t// When new option element is added to select box we need to\r\n\t\t\t\t\t\t// force reflow of newly added node in order to workaround delay\r\n\t\t\t\t\t\t// of initialization properties\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\toption.selected = optionSet = true;\r\n\r\n\t\t\t\t\t\t} catch ( _ ) {\r\n\r\n\t\t\t\t\t\t\t// Will be executed only in IE6\r\n\t\t\t\t\t\t\toption.scrollHeight;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toption.selected = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\r\n\t\t\t\tif ( !optionSet ) {\r\n\t\t\t\t\telem.selectedIndex = -1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn options;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Radios and checkboxes getter/setter\r\njQuery.each([ \"radio\", \"checkbox\" ], function() {\r\n\tjQuery.valHooks[ this ] = {\r\n\t\tset: function( elem, value ) {\r\n\t\t\tif ( jQuery.isArray( value ) ) {\r\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tif ( !support.checkOn ) {\r\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\r\n\t\t\t// Support: Webkit\r\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\r\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\r\n\t\t};\r\n\t}\r\n});\r\n\r\n\r\n\r\n\r\nvar nodeHook, boolHook,\r\n\tattrHandle = jQuery.expr.attrHandle,\r\n\truseDefault = /^(?:checked|selected)$/i,\r\n\tgetSetAttribute = support.getSetAttribute,\r\n\tgetSetInput = support.input;\r\n\r\njQuery.fn.extend({\r\n\tattr: function( name, value ) {\r\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\r\n\t},\r\n\r\n\tremoveAttr: function( name ) {\r\n\t\treturn this.each(function() {\r\n\t\t\tjQuery.removeAttr( this, name );\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.extend({\r\n\tattr: function( elem, name, value ) {\r\n\t\tvar hooks, ret,\r\n\t\t\tnType = elem.nodeType;\r\n\r\n\t\t// don't get/set attributes on text, comment and attribute nodes\r\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Fallback to prop when attributes are not supported\r\n\t\tif ( typeof elem.getAttribute === strundefined ) {\r\n\t\t\treturn jQuery.prop( elem, name, value );\r\n\t\t}\r\n\r\n\t\t// All attributes are lowercase\r\n\t\t// Grab necessary hook if one is defined\r\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\r\n\t\t\tname = name.toLowerCase();\r\n\t\t\thooks = jQuery.attrHooks[ name ] ||\r\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\r\n\t\t}\r\n\r\n\t\tif ( value !== undefined ) {\r\n\r\n\t\t\tif ( value === null ) {\r\n\t\t\t\tjQuery.removeAttr( elem, name );\r\n\r\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\r\n\t\t\t\treturn ret;\r\n\r\n\t\t\t} else {\r\n\t\t\t\telem.setAttribute( name, value + \"\" );\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\r\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\r\n\t\t\treturn ret;\r\n\r\n\t\t} else {\r\n\t\t\tret = jQuery.find.attr( elem, name );\r\n\r\n\t\t\t// Non-existent attributes return null, we normalize to undefined\r\n\t\t\treturn ret == null ?\r\n\t\t\t\tundefined :\r\n\t\t\t\tret;\r\n\t\t}\r\n\t},\r\n\r\n\tremoveAttr: function( elem, value ) {\r\n\t\tvar name, propName,\r\n\t\t\ti = 0,\r\n\t\t\tattrNames = value && value.match( rnotwhite );\r\n\r\n\t\tif ( attrNames && elem.nodeType === 1 ) {\r\n\t\t\twhile ( (name = attrNames[i++]) ) {\r\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\r\n\r\n\t\t\t\t// Boolean attributes get special treatment (#10870)\r\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\r\n\t\t\t\t\t// Set corresponding property to false\r\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\r\n\t\t\t\t\t\telem[ propName ] = false;\r\n\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\r\n\t\t\t\t\t\t\telem[ propName ] = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\r\n\t\t\t\t}\r\n\r\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tattrHooks: {\r\n\t\ttype: {\r\n\t\t\tset: function( elem, value ) {\r\n\t\t\t\tif ( !support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\r\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\r\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\r\n\t\t\t\t\tvar val = elem.value;\r\n\t\t\t\t\telem.setAttribute( \"type\", value );\r\n\t\t\t\t\tif ( val ) {\r\n\t\t\t\t\t\telem.value = val;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Hook for boolean attributes\r\nboolHook = {\r\n\tset: function( elem, value, name ) {\r\n\t\tif ( value === false ) {\r\n\t\t\t// Remove boolean attributes when set to false\r\n\t\t\tjQuery.removeAttr( elem, name );\r\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\r\n\t\t\t// IE<8 needs the *property* name\r\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\r\n\r\n\t\t// Use defaultChecked and defaultSelected for oldIE\r\n\t\t} else {\r\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\r\n\t\t}\r\n\r\n\t\treturn name;\r\n\t}\r\n};\r\n\r\n// Retrieve booleans specially\r\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\r\n\r\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\r\n\r\n\tattrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\r\n\t\tfunction( elem, name, isXML ) {\r\n\t\t\tvar ret, handle;\r\n\t\t\tif ( !isXML ) {\r\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\r\n\t\t\t\thandle = attrHandle[ name ];\r\n\t\t\t\tattrHandle[ name ] = ret;\r\n\t\t\t\tret = getter( elem, name, isXML ) != null ?\r\n\t\t\t\t\tname.toLowerCase() :\r\n\t\t\t\t\tnull;\r\n\t\t\t\tattrHandle[ name ] = handle;\r\n\t\t\t}\r\n\t\t\treturn ret;\r\n\t\t} :\r\n\t\tfunction( elem, name, isXML ) {\r\n\t\t\tif ( !isXML ) {\r\n\t\t\t\treturn elem[ jQuery.camelCase( \"default-\" + name ) ] ?\r\n\t\t\t\t\tname.toLowerCase() :\r\n\t\t\t\t\tnull;\r\n\t\t\t}\r\n\t\t};\r\n});\r\n\r\n// fix oldIE attroperties\r\nif ( !getSetInput || !getSetAttribute ) {\r\n\tjQuery.attrHooks.value = {\r\n\t\tset: function( elem, value, name ) {\r\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\r\n\t\t\t\t// Does not return so that setAttribute is also used\r\n\t\t\t\telem.defaultValue = value;\r\n\t\t\t} else {\r\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\r\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\r\nif ( !getSetAttribute ) {\r\n\r\n\t// Use this for any attribute in IE6/7\r\n\t// This fixes almost every IE6/7 issue\r\n\tnodeHook = {\r\n\t\tset: function( elem, value, name ) {\r\n\t\t\t// Set the existing or create a new attribute node\r\n\t\t\tvar ret = elem.getAttributeNode( name );\r\n\t\t\tif ( !ret ) {\r\n\t\t\t\telem.setAttributeNode(\r\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tret.value = value += \"\";\r\n\r\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\r\n\t\t\tif ( name === \"value\" || value === elem.getAttribute( name ) ) {\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Some attributes are constructed with empty-string values when not defined\r\n\tattrHandle.id = attrHandle.name = attrHandle.coords =\r\n\t\tfunction( elem, name, isXML ) {\r\n\t\t\tvar ret;\r\n\t\t\tif ( !isXML ) {\r\n\t\t\t\treturn (ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\r\n\t\t\t\t\tret.value :\r\n\t\t\t\t\tnull;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t// Fixing value retrieval on a button requires this module\r\n\tjQuery.valHooks.button = {\r\n\t\tget: function( elem, name ) {\r\n\t\t\tvar ret = elem.getAttributeNode( name );\r\n\t\t\tif ( ret && ret.specified ) {\r\n\t\t\t\treturn ret.value;\r\n\t\t\t}\r\n\t\t},\r\n\t\tset: nodeHook.set\r\n\t};\r\n\r\n\t// Set contenteditable to false on removals(#10429)\r\n\t// Setting to empty string throws an error as an invalid value\r\n\tjQuery.attrHooks.contenteditable = {\r\n\t\tset: function( elem, value, name ) {\r\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\r\n\t\t}\r\n\t};\r\n\r\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\r\n\t// This is for removals\r\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\r\n\t\tjQuery.attrHooks[ name ] = {\r\n\t\t\tset: function( elem, value ) {\r\n\t\t\t\tif ( value === \"\" ) {\r\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n}\r\n\r\nif ( !support.style ) {\r\n\tjQuery.attrHooks.style = {\r\n\t\tget: function( elem ) {\r\n\t\t\t// Return undefined in the case of empty string\r\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\r\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\r\n\t\t\treturn elem.style.cssText || undefined;\r\n\t\t},\r\n\t\tset: function( elem, value ) {\r\n\t\t\treturn ( elem.style.cssText = value + \"\" );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n\r\n\r\n\r\nvar rfocusable = /^(?:input|select|textarea|button|object)$/i,\r\n\trclickable = /^(?:a|area)$/i;\r\n\r\njQuery.fn.extend({\r\n\tprop: function( name, value ) {\r\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\r\n\t},\r\n\r\n\tremoveProp: function( name ) {\r\n\t\tname = jQuery.propFix[ name ] || name;\r\n\t\treturn this.each(function() {\r\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\r\n\t\t\ttry {\r\n\t\t\t\tthis[ name ] = undefined;\r\n\t\t\t\tdelete this[ name ];\r\n\t\t\t} catch( e ) {}\r\n\t\t});\r\n\t}\r\n});\r\n\r\njQuery.extend({\r\n\tpropFix: {\r\n\t\t\"for\": \"htmlFor\",\r\n\t\t\"class\": \"className\"\r\n\t},\r\n\r\n\tprop: function( elem, name, value ) {\r\n\t\tvar ret, hooks, notxml,\r\n\t\t\tnType = elem.nodeType;\r\n\r\n\t\t// don't get/set properties on text, comment and attribute nodes\r\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\r\n\r\n\t\tif ( notxml ) {\r\n\t\t\t// Fix name and attach hooks\r\n\t\t\tname = jQuery.propFix[ name ] || name;\r\n\t\t\thooks = jQuery.propHooks[ name ];\r\n\t\t}\r\n\r\n\t\tif ( value !== undefined ) {\r\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\r\n\t\t\t\tret :\r\n\t\t\t\t( elem[ name ] = value );\r\n\r\n\t\t} else {\r\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\r\n\t\t\t\tret :\r\n\t\t\t\telem[ name ];\r\n\t\t}\r\n\t},\r\n\r\n\tpropHooks: {\r\n\t\ttabIndex: {\r\n\t\t\tget: function( elem ) {\r\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\r\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\r\n\t\t\t\t// Use proper attribute retrieval(#12072)\r\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\r\n\r\n\t\t\t\treturn tabindex ?\r\n\t\t\t\t\tparseInt( tabindex, 10 ) :\r\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\r\n\t\t\t\t\t\t0 :\r\n\t\t\t\t\t\t-1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Some attributes require a special call on IE\r\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\r\nif ( !support.hrefNormalized ) {\r\n\t// href/src property should get the full normalized URL (#10299/#12915)\r\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\r\n\t\tjQuery.propHooks[ name ] = {\r\n\t\t\tget: function( elem ) {\r\n\t\t\t\treturn elem.getAttribute( name, 4 );\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n}\r\n\r\n// Support: Safari, IE9+\r\n// mis-reports the default selected property of an option\r\n// Accessing the parent's selectedIndex property fixes it\r\nif ( !support.optSelected ) {\r\n\tjQuery.propHooks.selected = {\r\n\t\tget: function( elem ) {\r\n\t\t\tvar parent = elem.parentNode;\r\n\r\n\t\t\tif ( parent ) {\r\n\t\t\t\tparent.selectedIndex;\r\n\r\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\r\n\t\t\t\tif ( parent.parentNode ) {\r\n\t\t\t\t\tparent.parentNode.selectedIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n}\r\n\r\njQuery.each([\r\n\t\"tabIndex\",\r\n\t\"readOnly\",\r\n\t\"maxLength\",\r\n\t\"cellSpacing\",\r\n\t\"cellPadding\",\r\n\t\"rowSpan\",\r\n\t\"colSpan\",\r\n\t\"useMap\",\r\n\t\"frameBorder\",\r\n\t\"contentEditable\"\r\n], function() {\r\n\tjQuery.propFix[ this.toLowerCase() ] = this;\r\n});\r\n\r\n// IE6/7 call enctype encoding\r\nif ( !support.enctype ) {\r\n\tjQuery.propFix.enctype = \"encoding\";\r\n}\r\n\r\n\r\n\r\n\r\nvar rclass = /[\\t\\r\\n\\f]/g;\r\n\r\njQuery.fn.extend({\r\n\taddClass: function( value ) {\r\n\t\tvar classes, elem, cur, clazz, j, finalValue,\r\n\t\t\ti = 0,\r\n\t\t\tlen = this.length,\r\n\t\t\tproceed = typeof value === \"string\" && value;\r\n\r\n\t\tif ( jQuery.isFunction( value ) ) {\r\n\t\t\treturn this.each(function( j ) {\r\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( proceed ) {\r\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\r\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\r\n\r\n\t\t\tfor ( ; i < len; i++ ) {\r\n\t\t\t\telem = this[ i ];\r\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\r\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\r\n\t\t\t\t\t\" \"\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif ( cur ) {\r\n\t\t\t\t\tj = 0;\r\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\r\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\r\n\t\t\t\t\t\t\tcur += clazz + \" \";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\r\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\r\n\t\t\t\t\tif ( elem.className !== finalValue ) {\r\n\t\t\t\t\t\telem.className = finalValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tremoveClass: function( value ) {\r\n\t\tvar classes, elem, cur, clazz, j, finalValue,\r\n\t\t\ti = 0,\r\n\t\t\tlen = this.length,\r\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\r\n\r\n\t\tif ( jQuery.isFunction( value ) ) {\r\n\t\t\treturn this.each(function( j ) {\r\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\r\n\t\t\t});\r\n\t\t}\r\n\t\tif ( proceed ) {\r\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\r\n\r\n\t\t\tfor ( ; i < len; i++ ) {\r\n\t\t\t\telem = this[ i ];\r\n\t\t\t\t// This expression is here for better compressibility (see addClass)\r\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\r\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif ( cur ) {\r\n\t\t\t\t\tj = 0;\r\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\r\n\t\t\t\t\t\t// Remove *all* instances\r\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\r\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\r\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\r\n\t\t\t\t\tif ( elem.className !== finalValue ) {\r\n\t\t\t\t\t\telem.className = finalValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\ttoggleClass: function( value, stateVal ) {\r\n\t\tvar type = typeof value;\r\n\r\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\r\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\r\n\t\t}\r\n\r\n\t\tif ( jQuery.isFunction( value ) ) {\r\n\t\t\treturn this.each(function( i ) {\r\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( type === \"string\" ) {\r\n\t\t\t\t// toggle individual class names\r\n\t\t\t\tvar className,\r\n\t\t\t\t\ti = 0,\r\n\t\t\t\t\tself = jQuery( this ),\r\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\r\n\r\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\r\n\t\t\t\t\t// check each className given, space separated list\r\n\t\t\t\t\tif ( self.hasClass( className ) ) {\r\n\t\t\t\t\t\tself.removeClass( className );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tself.addClass( className );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t// Toggle whole class name\r\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\r\n\t\t\t\tif ( this.className ) {\r\n\t\t\t\t\t// store className if set\r\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\r\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\r\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\r\n\t\t\t\t// falling back to the empty string if nothing was stored.\r\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\thasClass: function( selector ) {\r\n\t\tvar className = \" \" + selector + \" \",\r\n\t\t\ti = 0,\r\n\t\t\tl = this.length;\r\n\t\tfor ( ; i < l; i++ ) {\r\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n});\r\n\r\n\r\n\r\n\r\n// Return jQuery for attributes-only inclusion\r\n\r\n\r\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\r\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\r\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\r\n\r\n\t// Handle event binding\r\n\tjQuery.fn[ name ] = function( data, fn ) {\r\n\t\treturn arguments.length > 0 ?\r\n\t\t\tthis.on( name, null, data, fn ) :\r\n\t\t\tthis.trigger( name );\r\n\t};\r\n});\r\n\r\njQuery.fn.extend({\r\n\thover: function( fnOver, fnOut ) {\r\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\r\n\t},\r\n\r\n\tbind: function( types, data, fn ) {\r\n\t\treturn this.on( types, null, data, fn );\r\n\t},\r\n\tunbind: function( types, fn ) {\r\n\t\treturn this.off( types, null, fn );\r\n\t},\r\n\r\n\tdelegate: function( selector, types, data, fn ) {\r\n\t\treturn this.on( types, selector, data, fn );\r\n\t},\r\n\tundelegate: function( selector, types, fn ) {\r\n\t\t// ( namespace ) or ( selector, types [, fn] )\r\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\r\n\t}\r\n});\r\n\r\n\r\nvar nonce = jQuery.now();\r\n\r\nvar rquery = (/\\?/);\r\n\r\n\r\n\r\nvar rvalidtokens = /(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;\r\n\r\njQuery.parseJSON = function( data ) {\r\n\t// Attempt to parse using the native JSON parser first\r\n\tif ( window.JSON && window.JSON.parse ) {\r\n\t\t// Support: Android 2.3\r\n\t\t// Workaround failure to string-cast null input\r\n\t\treturn window.JSON.parse( data + \"\" );\r\n\t}\r\n\r\n\tvar requireNonComma,\r\n\t\tdepth = null,\r\n\t\tstr = jQuery.trim( data + \"\" );\r\n\r\n\t// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains\r\n\t// after removing valid tokens\r\n\treturn str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {\r\n\r\n\t\t// Force termination if we see a misplaced comma\r\n\t\tif ( requireNonComma && comma ) {\r\n\t\t\tdepth = 0;\r\n\t\t}\r\n\r\n\t\t// Perform no more replacements after returning to outermost depth\r\n\t\tif ( depth === 0 ) {\r\n\t\t\treturn token;\r\n\t\t}\r\n\r\n\t\t// Commas must not follow \"[\", \"{\", or \",\"\r\n\t\trequireNonComma = open || comma;\r\n\r\n\t\t// Determine new depth\r\n\t\t// array/object open (\"[\" or \"{\"): depth += true - false (increment)\r\n\t\t// array/object close (\"]\" or \"}\"): depth += false - true (decrement)\r\n\t\t// other cases (\",\" or primitive): depth += true - true (numeric cast)\r\n\t\tdepth += !close - !open;\r\n\r\n\t\t// Remove this token\r\n\t\treturn \"\";\r\n\t}) ) ?\r\n\t\t( Function( \"return \" + str ) )() :\r\n\t\tjQuery.error( \"Invalid JSON: \" + data );\r\n};\r\n\r\n\r\n// Cross-browser xml parsing\r\njQuery.parseXML = function( data ) {\r\n\tvar xml, tmp;\r\n\tif ( !data || typeof data !== \"string\" ) {\r\n\t\treturn null;\r\n\t}\r\n\ttry {\r\n\t\tif ( window.DOMParser ) { // Standard\r\n\t\t\ttmp = new DOMParser();\r\n\t\t\txml = tmp.parseFromString( data, \"text/xml\" );\r\n\t\t} else { // IE\r\n\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\r\n\t\t\txml.async = \"false\";\r\n\t\t\txml.loadXML( data );\r\n\t\t}\r\n\t} catch( e ) {\r\n\t\txml = undefined;\r\n\t}\r\n\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\r\n\t\tjQuery.error( \"Invalid XML: \" + data );\r\n\t}\r\n\treturn xml;\r\n};\r\n\r\n\r\nvar\r\n\t// Document location\r\n\tajaxLocParts,\r\n\tajaxLocation,\r\n\r\n\trhash = /#.*$/,\r\n\trts = /([?&])_=[^&]*/,\r\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\r\n\t// #7653, #8125, #8152: local protocol detection\r\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\r\n\trnoContent = /^(?:GET|HEAD)$/,\r\n\trprotocol = /^\\/\\//,\r\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\r\n\r\n\t/* Prefilters\r\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\r\n\t * 2) These are called:\r\n\t *    - BEFORE asking for a transport\r\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\r\n\t * 3) key is the dataType\r\n\t * 4) the catchall symbol \"*\" can be used\r\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\r\n\t */\r\n\tprefilters = {},\r\n\r\n\t/* Transports bindings\r\n\t * 1) key is the dataType\r\n\t * 2) the catchall symbol \"*\" can be used\r\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\r\n\t */\r\n\ttransports = {},\r\n\r\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\r\n\tallTypes = \"*/\".concat(\"*\");\r\n\r\n// #8138, IE may throw an exception when accessing\r\n// a field from window.location if document.domain has been set\r\ntry {\r\n\tajaxLocation = location.href;\r\n} catch( e ) {\r\n\t// Use the href attribute of an A element\r\n\t// since IE will modify it given document.location\r\n\tajaxLocation = document.createElement( \"a\" );\r\n\tajaxLocation.href = \"\";\r\n\tajaxLocation = ajaxLocation.href;\r\n}\r\n\r\n// Segment location into parts\r\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\r\n\r\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\r\nfunction addToPrefiltersOrTransports( structure ) {\r\n\r\n\t// dataTypeExpression is optional and defaults to \"*\"\r\n\treturn function( dataTypeExpression, func ) {\r\n\r\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\r\n\t\t\tfunc = dataTypeExpression;\r\n\t\t\tdataTypeExpression = \"*\";\r\n\t\t}\r\n\r\n\t\tvar dataType,\r\n\t\t\ti = 0,\r\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\r\n\r\n\t\tif ( jQuery.isFunction( func ) ) {\r\n\t\t\t// For each dataType in the dataTypeExpression\r\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\r\n\t\t\t\t// Prepend if requested\r\n\t\t\t\tif ( dataType.charAt( 0 ) === \"+\" ) {\r\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\r\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\r\n\r\n\t\t\t\t// Otherwise append\r\n\t\t\t\t} else {\r\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// Base inspection function for prefilters and transports\r\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\r\n\r\n\tvar inspected = {},\r\n\t\tseekingTransport = ( structure === transports );\r\n\r\n\tfunction inspect( dataType ) {\r\n\t\tvar selected;\r\n\t\tinspected[ dataType ] = true;\r\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\r\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\r\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\r\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\r\n\t\t\t\tinspect( dataTypeOrTransport );\r\n\t\t\t\treturn false;\r\n\t\t\t} else if ( seekingTransport ) {\r\n\t\t\t\treturn !( selected = dataTypeOrTransport );\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn selected;\r\n\t}\r\n\r\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\r\n}\r\n\r\n// A special extend for ajax options\r\n// that takes \"flat\" options (not to be deep extended)\r\n// Fixes #9887\r\nfunction ajaxExtend( target, src ) {\r\n\tvar deep, key,\r\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\r\n\r\n\tfor ( key in src ) {\r\n\t\tif ( src[ key ] !== undefined ) {\r\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\r\n\t\t}\r\n\t}\r\n\tif ( deep ) {\r\n\t\tjQuery.extend( true, target, deep );\r\n\t}\r\n\r\n\treturn target;\r\n}\r\n\r\n/* Handles responses to an ajax request:\r\n * - finds the right dataType (mediates between content-type and expected dataType)\r\n * - returns the corresponding response\r\n */\r\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\r\n\tvar firstDataType, ct, finalDataType, type,\r\n\t\tcontents = s.contents,\r\n\t\tdataTypes = s.dataTypes;\r\n\r\n\t// Remove auto dataType and get content-type in the process\r\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\r\n\t\tdataTypes.shift();\r\n\t\tif ( ct === undefined ) {\r\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\r\n\t\t}\r\n\t}\r\n\r\n\t// Check if we're dealing with a known content-type\r\n\tif ( ct ) {\r\n\t\tfor ( type in contents ) {\r\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\r\n\t\t\t\tdataTypes.unshift( type );\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Check to see if we have a response for the expected dataType\r\n\tif ( dataTypes[ 0 ] in responses ) {\r\n\t\tfinalDataType = dataTypes[ 0 ];\r\n\t} else {\r\n\t\t// Try convertible dataTypes\r\n\t\tfor ( type in responses ) {\r\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\r\n\t\t\t\tfinalDataType = type;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif ( !firstDataType ) {\r\n\t\t\t\tfirstDataType = type;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Or just use first one\r\n\t\tfinalDataType = finalDataType || firstDataType;\r\n\t}\r\n\r\n\t// If we found a dataType\r\n\t// We add the dataType to the list if needed\r\n\t// and return the corresponding response\r\n\tif ( finalDataType ) {\r\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\r\n\t\t\tdataTypes.unshift( finalDataType );\r\n\t\t}\r\n\t\treturn responses[ finalDataType ];\r\n\t}\r\n}\r\n\r\n/* Chain conversions given the request and the original response\r\n * Also sets the responseXXX fields on the jqXHR instance\r\n */\r\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\r\n\tvar conv2, current, conv, tmp, prev,\r\n\t\tconverters = {},\r\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\r\n\t\tdataTypes = s.dataTypes.slice();\r\n\r\n\t// Create converters map with lowercased keys\r\n\tif ( dataTypes[ 1 ] ) {\r\n\t\tfor ( conv in s.converters ) {\r\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\r\n\t\t}\r\n\t}\r\n\r\n\tcurrent = dataTypes.shift();\r\n\r\n\t// Convert to each sequential dataType\r\n\twhile ( current ) {\r\n\r\n\t\tif ( s.responseFields[ current ] ) {\r\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\r\n\t\t}\r\n\r\n\t\t// Apply the dataFilter if provided\r\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\r\n\t\t\tresponse = s.dataFilter( response, s.dataType );\r\n\t\t}\r\n\r\n\t\tprev = current;\r\n\t\tcurrent = dataTypes.shift();\r\n\r\n\t\tif ( current ) {\r\n\r\n\t\t\t// There's only work to do if current dataType is non-auto\r\n\t\t\tif ( current === \"*\" ) {\r\n\r\n\t\t\t\tcurrent = prev;\r\n\r\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\r\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\r\n\r\n\t\t\t\t// Seek a direct converter\r\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\r\n\r\n\t\t\t\t// If none found, seek a pair\r\n\t\t\t\tif ( !conv ) {\r\n\t\t\t\t\tfor ( conv2 in converters ) {\r\n\r\n\t\t\t\t\t\t// If conv2 outputs current\r\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\r\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\r\n\r\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\r\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\r\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\r\n\t\t\t\t\t\t\tif ( conv ) {\r\n\t\t\t\t\t\t\t\t// Condense equivalence converters\r\n\t\t\t\t\t\t\t\tif ( conv === true ) {\r\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\r\n\r\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\r\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\r\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\r\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Apply converter (if not an equivalence)\r\n\t\t\t\tif ( conv !== true ) {\r\n\r\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\r\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\r\n\t\t\t\t\t\tresponse = conv( response );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tresponse = conv( response );\r\n\t\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn { state: \"success\", data: response };\r\n}\r\n\r\njQuery.extend({\r\n\r\n\t// Counter for holding the number of active queries\r\n\tactive: 0,\r\n\r\n\t// Last-Modified header cache for next request\r\n\tlastModified: {},\r\n\tetag: {},\r\n\r\n\tajaxSettings: {\r\n\t\turl: ajaxLocation,\r\n\t\ttype: \"GET\",\r\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\r\n\t\tglobal: true,\r\n\t\tprocessData: true,\r\n\t\tasync: true,\r\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\r\n\t\t/*\r\n\t\ttimeout: 0,\r\n\t\tdata: null,\r\n\t\tdataType: null,\r\n\t\tusername: null,\r\n\t\tpassword: null,\r\n\t\tcache: null,\r\n\t\tthrows: false,\r\n\t\ttraditional: false,\r\n\t\theaders: {},\r\n\t\t*/\r\n\r\n\t\taccepts: {\r\n\t\t\t\"*\": allTypes,\r\n\t\t\ttext: \"text/plain\",\r\n\t\t\thtml: \"text/html\",\r\n\t\t\txml: \"application/xml, text/xml\",\r\n\t\t\tjson: \"application/json, text/javascript\"\r\n\t\t},\r\n\r\n\t\tcontents: {\r\n\t\t\txml: /xml/,\r\n\t\t\thtml: /html/,\r\n\t\t\tjson: /json/\r\n\t\t},\r\n\r\n\t\tresponseFields: {\r\n\t\t\txml: \"responseXML\",\r\n\t\t\ttext: \"responseText\",\r\n\t\t\tjson: \"responseJSON\"\r\n\t\t},\r\n\r\n\t\t// Data converters\r\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\r\n\t\tconverters: {\r\n\r\n\t\t\t// Convert anything to text\r\n\t\t\t\"* text\": String,\r\n\r\n\t\t\t// Text to html (true = no transformation)\r\n\t\t\t\"text html\": true,\r\n\r\n\t\t\t// Evaluate text as a json expression\r\n\t\t\t\"text json\": jQuery.parseJSON,\r\n\r\n\t\t\t// Parse text as xml\r\n\t\t\t\"text xml\": jQuery.parseXML\r\n\t\t},\r\n\r\n\t\t// For options that shouldn't be deep extended:\r\n\t\t// you can add your own custom options here if\r\n\t\t// and when you create one that shouldn't be\r\n\t\t// deep extended (see ajaxExtend)\r\n\t\tflatOptions: {\r\n\t\t\turl: true,\r\n\t\t\tcontext: true\r\n\t\t}\r\n\t},\r\n\r\n\t// Creates a full fledged settings object into target\r\n\t// with both ajaxSettings and settings fields.\r\n\t// If target is omitted, writes into ajaxSettings.\r\n\tajaxSetup: function( target, settings ) {\r\n\t\treturn settings ?\r\n\r\n\t\t\t// Building a settings object\r\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\r\n\r\n\t\t\t// Extending ajaxSettings\r\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\r\n\t},\r\n\r\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\r\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\r\n\r\n\t// Main method\r\n\tajax: function( url, options ) {\r\n\r\n\t\t// If url is an object, simulate pre-1.5 signature\r\n\t\tif ( typeof url === \"object\" ) {\r\n\t\t\toptions = url;\r\n\t\t\turl = undefined;\r\n\t\t}\r\n\r\n\t\t// Force options to be an object\r\n\t\toptions = options || {};\r\n\r\n\t\tvar // Cross-domain detection vars\r\n\t\t\tparts,\r\n\t\t\t// Loop variable\r\n\t\t\ti,\r\n\t\t\t// URL without anti-cache param\r\n\t\t\tcacheURL,\r\n\t\t\t// Response headers as string\r\n\t\t\tresponseHeadersString,\r\n\t\t\t// timeout handle\r\n\t\t\ttimeoutTimer,\r\n\r\n\t\t\t// To know if global events are to be dispatched\r\n\t\t\tfireGlobals,\r\n\r\n\t\t\ttransport,\r\n\t\t\t// Response headers\r\n\t\t\tresponseHeaders,\r\n\t\t\t// Create the final options object\r\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\r\n\t\t\t// Callbacks context\r\n\t\t\tcallbackContext = s.context || s,\r\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\r\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\r\n\t\t\t\tjQuery( callbackContext ) :\r\n\t\t\t\tjQuery.event,\r\n\t\t\t// Deferreds\r\n\t\t\tdeferred = jQuery.Deferred(),\r\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\r\n\t\t\t// Status-dependent callbacks\r\n\t\t\tstatusCode = s.statusCode || {},\r\n\t\t\t// Headers (they are sent all at once)\r\n\t\t\trequestHeaders = {},\r\n\t\t\trequestHeadersNames = {},\r\n\t\t\t// The jqXHR state\r\n\t\t\tstate = 0,\r\n\t\t\t// Default abort message\r\n\t\t\tstrAbort = \"canceled\",\r\n\t\t\t// Fake xhr\r\n\t\t\tjqXHR = {\r\n\t\t\t\treadyState: 0,\r\n\r\n\t\t\t\t// Builds headers hashtable if needed\r\n\t\t\t\tgetResponseHeader: function( key ) {\r\n\t\t\t\t\tvar match;\r\n\t\t\t\t\tif ( state === 2 ) {\r\n\t\t\t\t\t\tif ( !responseHeaders ) {\r\n\t\t\t\t\t\t\tresponseHeaders = {};\r\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\r\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn match == null ? null : match;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Raw string\r\n\t\t\t\tgetAllResponseHeaders: function() {\r\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Caches the header\r\n\t\t\t\tsetRequestHeader: function( name, value ) {\r\n\t\t\t\t\tvar lname = name.toLowerCase();\r\n\t\t\t\t\tif ( !state ) {\r\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\r\n\t\t\t\t\t\trequestHeaders[ name ] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Overrides response content-type header\r\n\t\t\t\toverrideMimeType: function( type ) {\r\n\t\t\t\t\tif ( !state ) {\r\n\t\t\t\t\t\ts.mimeType = type;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Status-dependent callbacks\r\n\t\t\t\tstatusCode: function( map ) {\r\n\t\t\t\t\tvar code;\r\n\t\t\t\t\tif ( map ) {\r\n\t\t\t\t\t\tif ( state < 2 ) {\r\n\t\t\t\t\t\t\tfor ( code in map ) {\r\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\r\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\r\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Cancel the request\r\n\t\t\t\tabort: function( statusText ) {\r\n\t\t\t\t\tvar finalText = statusText || strAbort;\r\n\t\t\t\t\tif ( transport ) {\r\n\t\t\t\t\t\ttransport.abort( finalText );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdone( 0, finalText );\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t// Attach deferreds\r\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\r\n\t\tjqXHR.success = jqXHR.done;\r\n\t\tjqXHR.error = jqXHR.fail;\r\n\r\n\t\t// Remove hash character (#7531: and string promotion)\r\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\r\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\r\n\t\t// We also use the url parameter if available\r\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\r\n\r\n\t\t// Alias method option to type as per ticket #12004\r\n\t\ts.type = options.method || options.type || s.method || s.type;\r\n\r\n\t\t// Extract dataTypes list\r\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\r\n\r\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\r\n\t\tif ( s.crossDomain == null ) {\r\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\r\n\t\t\ts.crossDomain = !!( parts &&\r\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\r\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\r\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Convert data if not already a string\r\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\r\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\r\n\t\t}\r\n\r\n\t\t// Apply prefilters\r\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\r\n\r\n\t\t// If request was aborted inside a prefilter, stop there\r\n\t\tif ( state === 2 ) {\r\n\t\t\treturn jqXHR;\r\n\t\t}\r\n\r\n\t\t// We can fire global events as of now if asked to\r\n\t\tfireGlobals = s.global;\r\n\r\n\t\t// Watch for a new set of requests\r\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\r\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\r\n\t\t}\r\n\r\n\t\t// Uppercase the type\r\n\t\ts.type = s.type.toUpperCase();\r\n\r\n\t\t// Determine if request has content\r\n\t\ts.hasContent = !rnoContent.test( s.type );\r\n\r\n\t\t// Save the URL in case we're toying with the If-Modified-Since\r\n\t\t// and/or If-None-Match header later on\r\n\t\tcacheURL = s.url;\r\n\r\n\t\t// More options handling for requests with no content\r\n\t\tif ( !s.hasContent ) {\r\n\r\n\t\t\t// If data is available, append data to url\r\n\t\t\tif ( s.data ) {\r\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\r\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\r\n\t\t\t\tdelete s.data;\r\n\t\t\t}\r\n\r\n\t\t\t// Add anti-cache in url if needed\r\n\t\t\tif ( s.cache === false ) {\r\n\t\t\t\ts.url = rts.test( cacheURL ) ?\r\n\r\n\t\t\t\t\t// If there is already a '_' parameter, set its value\r\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\r\n\r\n\t\t\t\t\t// Otherwise add one to the end\r\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\r\n\t\tif ( s.ifModified ) {\r\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\r\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\r\n\t\t\t}\r\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\r\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Set the correct header, if data is being sent\r\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\r\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\r\n\t\t}\r\n\r\n\t\t// Set the Accepts header for the server, depending on the dataType\r\n\t\tjqXHR.setRequestHeader(\r\n\t\t\t\"Accept\",\r\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\r\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\r\n\t\t\t\ts.accepts[ \"*\" ]\r\n\t\t);\r\n\r\n\t\t// Check for headers option\r\n\t\tfor ( i in s.headers ) {\r\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\r\n\t\t}\r\n\r\n\t\t// Allow custom headers/mimetypes and early abort\r\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\r\n\t\t\t// Abort if not done already and return\r\n\t\t\treturn jqXHR.abort();\r\n\t\t}\r\n\r\n\t\t// aborting is no longer a cancellation\r\n\t\tstrAbort = \"abort\";\r\n\r\n\t\t// Install callbacks on deferreds\r\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\r\n\t\t\tjqXHR[ i ]( s[ i ] );\r\n\t\t}\r\n\r\n\t\t// Get transport\r\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\r\n\r\n\t\t// If no transport, we auto-abort\r\n\t\tif ( !transport ) {\r\n\t\t\tdone( -1, \"No Transport\" );\r\n\t\t} else {\r\n\t\t\tjqXHR.readyState = 1;\r\n\r\n\t\t\t// Send global event\r\n\t\t\tif ( fireGlobals ) {\r\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\r\n\t\t\t}\r\n\t\t\t// Timeout\r\n\t\t\tif ( s.async && s.timeout > 0 ) {\r\n\t\t\t\ttimeoutTimer = setTimeout(function() {\r\n\t\t\t\t\tjqXHR.abort(\"timeout\");\r\n\t\t\t\t}, s.timeout );\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tstate = 1;\r\n\t\t\t\ttransport.send( requestHeaders, done );\r\n\t\t\t} catch ( e ) {\r\n\t\t\t\t// Propagate exception as error if not done\r\n\t\t\t\tif ( state < 2 ) {\r\n\t\t\t\t\tdone( -1, e );\r\n\t\t\t\t// Simply rethrow otherwise\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow e;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Callback for when everything is done\r\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\r\n\t\t\tvar isSuccess, success, error, response, modified,\r\n\t\t\t\tstatusText = nativeStatusText;\r\n\r\n\t\t\t// Called once\r\n\t\t\tif ( state === 2 ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// State is \"done\" now\r\n\t\t\tstate = 2;\r\n\r\n\t\t\t// Clear timeout if it exists\r\n\t\t\tif ( timeoutTimer ) {\r\n\t\t\t\tclearTimeout( timeoutTimer );\r\n\t\t\t}\r\n\r\n\t\t\t// Dereference transport for early garbage collection\r\n\t\t\t// (no matter how long the jqXHR object will be used)\r\n\t\t\ttransport = undefined;\r\n\r\n\t\t\t// Cache response headers\r\n\t\t\tresponseHeadersString = headers || \"\";\r\n\r\n\t\t\t// Set readyState\r\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\r\n\r\n\t\t\t// Determine if successful\r\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\r\n\r\n\t\t\t// Get response data\r\n\t\t\tif ( responses ) {\r\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\r\n\t\t\t}\r\n\r\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\r\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\r\n\r\n\t\t\t// If successful, handle type chaining\r\n\t\t\tif ( isSuccess ) {\r\n\r\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\r\n\t\t\t\tif ( s.ifModified ) {\r\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\r\n\t\t\t\t\tif ( modified ) {\r\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\r\n\t\t\t\t\tif ( modified ) {\r\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if no content\r\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\r\n\t\t\t\t\tstatusText = \"nocontent\";\r\n\r\n\t\t\t\t// if not modified\r\n\t\t\t\t} else if ( status === 304 ) {\r\n\t\t\t\t\tstatusText = \"notmodified\";\r\n\r\n\t\t\t\t// If we have data, let's convert it\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstatusText = response.state;\r\n\t\t\t\t\tsuccess = response.data;\r\n\t\t\t\t\terror = response.error;\r\n\t\t\t\t\tisSuccess = !error;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// We extract error from statusText\r\n\t\t\t\t// then normalize statusText and status for non-aborts\r\n\t\t\t\terror = statusText;\r\n\t\t\t\tif ( status || !statusText ) {\r\n\t\t\t\t\tstatusText = \"error\";\r\n\t\t\t\t\tif ( status < 0 ) {\r\n\t\t\t\t\t\tstatus = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set data for the fake xhr object\r\n\t\t\tjqXHR.status = status;\r\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\r\n\r\n\t\t\t// Success/Error\r\n\t\t\tif ( isSuccess ) {\r\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\r\n\t\t\t} else {\r\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\r\n\t\t\t}\r\n\r\n\t\t\t// Status-dependent callbacks\r\n\t\t\tjqXHR.statusCode( statusCode );\r\n\t\t\tstatusCode = undefined;\r\n\r\n\t\t\tif ( fireGlobals ) {\r\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\r\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\r\n\t\t\t}\r\n\r\n\t\t\t// Complete\r\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\r\n\r\n\t\t\tif ( fireGlobals ) {\r\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\r\n\t\t\t\t// Handle the global AJAX counter\r\n\t\t\t\tif ( !( --jQuery.active ) ) {\r\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn jqXHR;\r\n\t},\r\n\r\n\tgetJSON: function( url, data, callback ) {\r\n\t\treturn jQuery.get( url, data, callback, \"json\" );\r\n\t},\r\n\r\n\tgetScript: function( url, callback ) {\r\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\r\n\t}\r\n});\r\n\r\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\r\n\tjQuery[ method ] = function( url, data, callback, type ) {\r\n\t\t// shift arguments if data argument was omitted\r\n\t\tif ( jQuery.isFunction( data ) ) {\r\n\t\t\ttype = type || callback;\r\n\t\t\tcallback = data;\r\n\t\t\tdata = undefined;\r\n\t\t}\r\n\r\n\t\treturn jQuery.ajax({\r\n\t\t\turl: url,\r\n\t\t\ttype: method,\r\n\t\t\tdataType: type,\r\n\t\t\tdata: data,\r\n\t\t\tsuccess: callback\r\n\t\t});\r\n\t};\r\n});\r\n\r\n// Attach a bunch of functions for handling common AJAX events\r\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\r\n\tjQuery.fn[ type ] = function( fn ) {\r\n\t\treturn this.on( type, fn );\r\n\t};\r\n});\r\n\r\n\r\njQuery._evalUrl = function( url ) {\r\n\treturn jQuery.ajax({\r\n\t\turl: url,\r\n\t\ttype: \"GET\",\r\n\t\tdataType: \"script\",\r\n\t\tasync: false,\r\n\t\tglobal: false,\r\n\t\t\"throws\": true\r\n\t});\r\n};\r\n\r\n\r\njQuery.fn.extend({\r\n\twrapAll: function( html ) {\r\n\t\tif ( jQuery.isFunction( html ) ) {\r\n\t\t\treturn this.each(function(i) {\r\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( this[0] ) {\r\n\t\t\t// The elements to wrap the target around\r\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\r\n\r\n\t\t\tif ( this[0].parentNode ) {\r\n\t\t\t\twrap.insertBefore( this[0] );\r\n\t\t\t}\r\n\r\n\t\t\twrap.map(function() {\r\n\t\t\t\tvar elem = this;\r\n\r\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\r\n\t\t\t\t\telem = elem.firstChild;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn elem;\r\n\t\t\t}).append( this );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\twrapInner: function( html ) {\r\n\t\tif ( jQuery.isFunction( html ) ) {\r\n\t\t\treturn this.each(function(i) {\r\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tvar self = jQuery( this ),\r\n\t\t\t\tcontents = self.contents();\r\n\r\n\t\t\tif ( contents.length ) {\r\n\t\t\t\tcontents.wrapAll( html );\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.append( html );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\twrap: function( html ) {\r\n\t\tvar isFunction = jQuery.isFunction( html );\r\n\r\n\t\treturn this.each(function(i) {\r\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\r\n\t\t});\r\n\t},\r\n\r\n\tunwrap: function() {\r\n\t\treturn this.parent().each(function() {\r\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\r\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\r\n\t\t\t}\r\n\t\t}).end();\r\n\t}\r\n});\r\n\r\n\r\njQuery.expr.filters.hidden = function( elem ) {\r\n\t// Support: Opera <= 12.12\r\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\r\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\r\n\t\t(!support.reliableHiddenOffsets() &&\r\n\t\t\t((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\r\n};\r\n\r\njQuery.expr.filters.visible = function( elem ) {\r\n\treturn !jQuery.expr.filters.hidden( elem );\r\n};\r\n\r\n\r\n\r\n\r\nvar r20 = /%20/g,\r\n\trbracket = /\\[\\]$/,\r\n\trCRLF = /\\r?\\n/g,\r\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\r\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\r\n\r\nfunction buildParams( prefix, obj, traditional, add ) {\r\n\tvar name;\r\n\r\n\tif ( jQuery.isArray( obj ) ) {\r\n\t\t// Serialize array item.\r\n\t\tjQuery.each( obj, function( i, v ) {\r\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\r\n\t\t\t\t// Treat each array item as a scalar.\r\n\t\t\t\tadd( prefix, v );\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\r\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\r\n\t\t// Serialize object item.\r\n\t\tfor ( name in obj ) {\r\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\r\n\t\t}\r\n\r\n\t} else {\r\n\t\t// Serialize scalar item.\r\n\t\tadd( prefix, obj );\r\n\t}\r\n}\r\n\r\n// Serialize an array of form elements or a set of\r\n// key/values into a query string\r\njQuery.param = function( a, traditional ) {\r\n\tvar prefix,\r\n\t\ts = [],\r\n\t\tadd = function( key, value ) {\r\n\t\t\t// If value is a function, invoke it and return its value\r\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\r\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\r\n\t\t};\r\n\r\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\r\n\tif ( traditional === undefined ) {\r\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\r\n\t}\r\n\r\n\t// If an array was passed in, assume that it is an array of form elements.\r\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\r\n\t\t// Serialize the form elements\r\n\t\tjQuery.each( a, function() {\r\n\t\t\tadd( this.name, this.value );\r\n\t\t});\r\n\r\n\t} else {\r\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\r\n\t\t// did it), otherwise encode params recursively.\r\n\t\tfor ( prefix in a ) {\r\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the resulting serialization\r\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\r\n};\r\n\r\njQuery.fn.extend({\r\n\tserialize: function() {\r\n\t\treturn jQuery.param( this.serializeArray() );\r\n\t},\r\n\tserializeArray: function() {\r\n\t\treturn this.map(function() {\r\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\r\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\r\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\r\n\t\t})\r\n\t\t.filter(function() {\r\n\t\t\tvar type = this.type;\r\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\r\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\r\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\r\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\r\n\t\t})\r\n\t\t.map(function( i, elem ) {\r\n\t\t\tvar val = jQuery( this ).val();\r\n\r\n\t\t\treturn val == null ?\r\n\t\t\t\tnull :\r\n\t\t\t\tjQuery.isArray( val ) ?\r\n\t\t\t\t\tjQuery.map( val, function( val ) {\r\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\r\n\t\t\t\t\t}) :\r\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\r\n\t\t}).get();\r\n\t}\r\n});\r\n\r\n\r\n// Create the request object\r\n// (This is still attached to ajaxSettings for backward compatibility)\r\njQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?\r\n\t// Support: IE6+\r\n\tfunction() {\r\n\r\n\t\t// XHR cannot access local files, always use ActiveX for that case\r\n\t\treturn !this.isLocal &&\r\n\r\n\t\t\t// Support: IE7-8\r\n\t\t\t// oldIE XHR does not support non-RFC2616 methods (#13240)\r\n\t\t\t// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx\r\n\t\t\t// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9\r\n\t\t\t// Although this check for six methods instead of eight\r\n\t\t\t// since IE also does not support \"trace\" and \"connect\"\r\n\t\t\t/^(get|post|head|put|delete|options)$/i.test( this.type ) &&\r\n\r\n\t\t\tcreateStandardXHR() || createActiveXHR();\r\n\t} :\r\n\t// For all other browsers, use the standard XMLHttpRequest object\r\n\tcreateStandardXHR;\r\n\r\nvar xhrId = 0,\r\n\txhrCallbacks = {},\r\n\txhrSupported = jQuery.ajaxSettings.xhr();\r\n\r\n// Support: IE<10\r\n// Open requests must be manually aborted on unload (#5280)\r\nif ( window.ActiveXObject ) {\r\n\tjQuery( window ).on( \"unload\", function() {\r\n\t\tfor ( var key in xhrCallbacks ) {\r\n\t\t\txhrCallbacks[ key ]( undefined, true );\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Determine support properties\r\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\r\nxhrSupported = support.ajax = !!xhrSupported;\r\n\r\n// Create transport if the browser can provide an xhr\r\nif ( xhrSupported ) {\r\n\r\n\tjQuery.ajaxTransport(function( options ) {\r\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\r\n\t\tif ( !options.crossDomain || support.cors ) {\r\n\r\n\t\t\tvar callback;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tsend: function( headers, complete ) {\r\n\t\t\t\t\tvar i,\r\n\t\t\t\t\t\txhr = options.xhr(),\r\n\t\t\t\t\t\tid = ++xhrId;\r\n\r\n\t\t\t\t\t// Open the socket\r\n\t\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\r\n\r\n\t\t\t\t\t// Apply custom fields if provided\r\n\t\t\t\t\tif ( options.xhrFields ) {\r\n\t\t\t\t\t\tfor ( i in options.xhrFields ) {\r\n\t\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Override mime type if needed\r\n\t\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\r\n\t\t\t\t\t\txhr.overrideMimeType( options.mimeType );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// X-Requested-With header\r\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\r\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\r\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\r\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\r\n\t\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\r\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Set headers\r\n\t\t\t\t\tfor ( i in headers ) {\r\n\t\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t\t// IE's ActiveXObject throws a 'Type Mismatch' exception when setting\r\n\t\t\t\t\t\t// request header to a null-value.\r\n\t\t\t\t\t\t//\r\n\t\t\t\t\t\t// To keep consistent with other XHR implementations, cast the value\r\n\t\t\t\t\t\t// to string and ignore `undefined`.\r\n\t\t\t\t\t\tif ( headers[ i ] !== undefined ) {\r\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] + \"\" );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Do send the request\r\n\t\t\t\t\t// This may raise an exception which is actually\r\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\r\n\t\t\t\t\txhr.send( ( options.hasContent && options.data ) || null );\r\n\r\n\t\t\t\t\t// Listener\r\n\t\t\t\t\tcallback = function( _, isAbort ) {\r\n\t\t\t\t\t\tvar status, statusText, responses;\r\n\r\n\t\t\t\t\t\t// Was never called and is aborted or complete\r\n\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\r\n\t\t\t\t\t\t\t// Clean up\r\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\r\n\t\t\t\t\t\t\tcallback = undefined;\r\n\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\r\n\r\n\t\t\t\t\t\t\t// Abort manually if needed\r\n\t\t\t\t\t\t\tif ( isAbort ) {\r\n\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\r\n\t\t\t\t\t\t\t\t\txhr.abort();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tresponses = {};\r\n\t\t\t\t\t\t\t\tstatus = xhr.status;\r\n\r\n\t\t\t\t\t\t\t\t// Support: IE<10\r\n\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\r\n\t\t\t\t\t\t\t\t// (#11426)\r\n\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\r\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\r\n\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\r\n\t\t\t\t\t\t\t\t} catch( e ) {\r\n\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\r\n\t\t\t\t\t\t\t\t\tstatusText = \"\";\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\r\n\r\n\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\r\n\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\r\n\t\t\t\t\t\t\t\t// can do given current implementations)\r\n\t\t\t\t\t\t\t\tif ( !status && options.isLocal && !options.crossDomain ) {\r\n\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\r\n\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\r\n\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\r\n\t\t\t\t\t\t\t\t\tstatus = 204;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Call complete if needed\r\n\t\t\t\t\t\tif ( responses ) {\r\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, xhr.getAllResponseHeaders() );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif ( !options.async ) {\r\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\r\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\r\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\r\n\t\t\t\t\t\tsetTimeout( callback );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Add to the list of active xhr callbacks\r\n\t\t\t\t\t\txhr.onreadystatechange = xhrCallbacks[ id ] = callback;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\tabort: function() {\r\n\t\t\t\t\tif ( callback ) {\r\n\t\t\t\t\t\tcallback( undefined, true );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Functions to create xhrs\r\nfunction createStandardXHR() {\r\n\ttry {\r\n\t\treturn new window.XMLHttpRequest();\r\n\t} catch( e ) {}\r\n}\r\n\r\nfunction createActiveXHR() {\r\n\ttry {\r\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\r\n\t} catch( e ) {}\r\n}\r\n\r\n\r\n\r\n\r\n// Install script dataType\r\njQuery.ajaxSetup({\r\n\taccepts: {\r\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\r\n\t},\r\n\tcontents: {\r\n\t\tscript: /(?:java|ecma)script/\r\n\t},\r\n\tconverters: {\r\n\t\t\"text script\": function( text ) {\r\n\t\t\tjQuery.globalEval( text );\r\n\t\t\treturn text;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Handle cache's special case and global\r\njQuery.ajaxPrefilter( \"script\", function( s ) {\r\n\tif ( s.cache === undefined ) {\r\n\t\ts.cache = false;\r\n\t}\r\n\tif ( s.crossDomain ) {\r\n\t\ts.type = \"GET\";\r\n\t\ts.global = false;\r\n\t}\r\n});\r\n\r\n// Bind script tag hack transport\r\njQuery.ajaxTransport( \"script\", function(s) {\r\n\r\n\t// This transport only deals with cross domain requests\r\n\tif ( s.crossDomain ) {\r\n\r\n\t\tvar script,\r\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\r\n\r\n\t\treturn {\r\n\r\n\t\t\tsend: function( _, callback ) {\r\n\r\n\t\t\t\tscript = document.createElement(\"script\");\r\n\r\n\t\t\t\tscript.async = true;\r\n\r\n\t\t\t\tif ( s.scriptCharset ) {\r\n\t\t\t\t\tscript.charset = s.scriptCharset;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tscript.src = s.url;\r\n\r\n\t\t\t\t// Attach handlers for all browsers\r\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\r\n\r\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\r\n\r\n\t\t\t\t\t\t// Handle memory leak in IE\r\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\r\n\r\n\t\t\t\t\t\t// Remove the script\r\n\t\t\t\t\t\tif ( script.parentNode ) {\r\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Dereference the script\r\n\t\t\t\t\t\tscript = null;\r\n\r\n\t\t\t\t\t\t// Callback if not abort\r\n\t\t\t\t\t\tif ( !isAbort ) {\r\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\r\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\r\n\t\t\t\thead.insertBefore( script, head.firstChild );\r\n\t\t\t},\r\n\r\n\t\t\tabort: function() {\r\n\t\t\t\tif ( script ) {\r\n\t\t\t\t\tscript.onload( undefined, true );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n});\r\n\r\n\r\n\r\n\r\nvar oldCallbacks = [],\r\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\r\n\r\n// Default jsonp settings\r\njQuery.ajaxSetup({\r\n\tjsonp: \"callback\",\r\n\tjsonpCallback: function() {\r\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\r\n\t\tthis[ callback ] = true;\r\n\t\treturn callback;\r\n\t}\r\n});\r\n\r\n// Detect, normalize options and install callbacks for jsonp requests\r\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\r\n\r\n\tvar callbackName, overwritten, responseContainer,\r\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\r\n\t\t\t\"url\" :\r\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\r\n\t\t);\r\n\r\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\r\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\r\n\r\n\t\t// Get callback name, remembering preexisting value associated with it\r\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\r\n\t\t\ts.jsonpCallback() :\r\n\t\t\ts.jsonpCallback;\r\n\r\n\t\t// Insert callback into url or form data\r\n\t\tif ( jsonProp ) {\r\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\r\n\t\t} else if ( s.jsonp !== false ) {\r\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\r\n\t\t}\r\n\r\n\t\t// Use data converter to retrieve json after script execution\r\n\t\ts.converters[\"script json\"] = function() {\r\n\t\t\tif ( !responseContainer ) {\r\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\r\n\t\t\t}\r\n\t\t\treturn responseContainer[ 0 ];\r\n\t\t};\r\n\r\n\t\t// force json dataType\r\n\t\ts.dataTypes[ 0 ] = \"json\";\r\n\r\n\t\t// Install callback\r\n\t\toverwritten = window[ callbackName ];\r\n\t\twindow[ callbackName ] = function() {\r\n\t\t\tresponseContainer = arguments;\r\n\t\t};\r\n\r\n\t\t// Clean-up function (fires after converters)\r\n\t\tjqXHR.always(function() {\r\n\t\t\t// Restore preexisting value\r\n\t\t\twindow[ callbackName ] = overwritten;\r\n\r\n\t\t\t// Save back as free\r\n\t\t\tif ( s[ callbackName ] ) {\r\n\t\t\t\t// make sure that re-using the options doesn't screw things around\r\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\r\n\r\n\t\t\t\t// save the callback name for future use\r\n\t\t\t\toldCallbacks.push( callbackName );\r\n\t\t\t}\r\n\r\n\t\t\t// Call if it was a function and we have a response\r\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\r\n\t\t\t\toverwritten( responseContainer[ 0 ] );\r\n\t\t\t}\r\n\r\n\t\t\tresponseContainer = overwritten = undefined;\r\n\t\t});\r\n\r\n\t\t// Delegate to script\r\n\t\treturn \"script\";\r\n\t}\r\n});\r\n\r\n\r\n\r\n\r\n// data: string of html\r\n// context (optional): If specified, the fragment will be created in this context, defaults to document\r\n// keepScripts (optional): If true, will include scripts passed in the html string\r\njQuery.parseHTML = function( data, context, keepScripts ) {\r\n\tif ( !data || typeof data !== \"string\" ) {\r\n\t\treturn null;\r\n\t}\r\n\tif ( typeof context === \"boolean\" ) {\r\n\t\tkeepScripts = context;\r\n\t\tcontext = false;\r\n\t}\r\n\tcontext = context || document;\r\n\r\n\tvar parsed = rsingleTag.exec( data ),\r\n\t\tscripts = !keepScripts && [];\r\n\r\n\t// Single tag\r\n\tif ( parsed ) {\r\n\t\treturn [ context.createElement( parsed[1] ) ];\r\n\t}\r\n\r\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\r\n\r\n\tif ( scripts && scripts.length ) {\r\n\t\tjQuery( scripts ).remove();\r\n\t}\r\n\r\n\treturn jQuery.merge( [], parsed.childNodes );\r\n};\r\n\r\n\r\n// Keep a copy of the old load method\r\nvar _load = jQuery.fn.load;\r\n\r\n/**\r\n * Load a url into a page\r\n */\r\njQuery.fn.load = function( url, params, callback ) {\r\n\tif ( typeof url !== \"string\" && _load ) {\r\n\t\treturn _load.apply( this, arguments );\r\n\t}\r\n\r\n\tvar selector, response, type,\r\n\t\tself = this,\r\n\t\toff = url.indexOf(\" \");\r\n\r\n\tif ( off >= 0 ) {\r\n\t\tselector = jQuery.trim( url.slice( off, url.length ) );\r\n\t\turl = url.slice( 0, off );\r\n\t}\r\n\r\n\t// If it's a function\r\n\tif ( jQuery.isFunction( params ) ) {\r\n\r\n\t\t// We assume that it's the callback\r\n\t\tcallback = params;\r\n\t\tparams = undefined;\r\n\r\n\t// Otherwise, build a param string\r\n\t} else if ( params && typeof params === \"object\" ) {\r\n\t\ttype = \"POST\";\r\n\t}\r\n\r\n\t// If we have elements to modify, make the request\r\n\tif ( self.length > 0 ) {\r\n\t\tjQuery.ajax({\r\n\t\t\turl: url,\r\n\r\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\r\n\t\t\ttype: type,\r\n\t\t\tdataType: \"html\",\r\n\t\t\tdata: params\r\n\t\t}).done(function( responseText ) {\r\n\r\n\t\t\t// Save response for use in complete callback\r\n\t\t\tresponse = arguments;\r\n\r\n\t\t\tself.html( selector ?\r\n\r\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\r\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\r\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\r\n\r\n\t\t\t\t// Otherwise use the full result\r\n\t\t\t\tresponseText );\r\n\r\n\t\t}).complete( callback && function( jqXHR, status ) {\r\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\r\n\t\t});\r\n\t}\r\n\r\n\treturn this;\r\n};\r\n\r\n\r\n\r\n\r\njQuery.expr.filters.animated = function( elem ) {\r\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\r\n\t\treturn elem === fn.elem;\r\n\t}).length;\r\n};\r\n\r\n\r\n\r\n\r\n\r\nvar docElem = window.document.documentElement;\r\n\r\n/**\r\n * Gets a window from an element\r\n */\r\nfunction getWindow( elem ) {\r\n\treturn jQuery.isWindow( elem ) ?\r\n\t\telem :\r\n\t\telem.nodeType === 9 ?\r\n\t\t\telem.defaultView || elem.parentWindow :\r\n\t\t\tfalse;\r\n}\r\n\r\njQuery.offset = {\r\n\tsetOffset: function( elem, options, i ) {\r\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\r\n\t\t\tposition = jQuery.css( elem, \"position\" ),\r\n\t\t\tcurElem = jQuery( elem ),\r\n\t\t\tprops = {};\r\n\r\n\t\t// set position first, in-case top/left are set even on static elem\r\n\t\tif ( position === \"static\" ) {\r\n\t\t\telem.style.position = \"relative\";\r\n\t\t}\r\n\r\n\t\tcurOffset = curElem.offset();\r\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\r\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\r\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\r\n\t\t\tjQuery.inArray(\"auto\", [ curCSSTop, curCSSLeft ] ) > -1;\r\n\r\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\r\n\t\tif ( calculatePosition ) {\r\n\t\t\tcurPosition = curElem.position();\r\n\t\t\tcurTop = curPosition.top;\r\n\t\t\tcurLeft = curPosition.left;\r\n\t\t} else {\r\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\r\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\r\n\t\t}\r\n\r\n\t\tif ( jQuery.isFunction( options ) ) {\r\n\t\t\toptions = options.call( elem, i, curOffset );\r\n\t\t}\r\n\r\n\t\tif ( options.top != null ) {\r\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\r\n\t\t}\r\n\t\tif ( options.left != null ) {\r\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\r\n\t\t}\r\n\r\n\t\tif ( \"using\" in options ) {\r\n\t\t\toptions.using.call( elem, props );\r\n\t\t} else {\r\n\t\t\tcurElem.css( props );\r\n\t\t}\r\n\t}\r\n};\r\n\r\njQuery.fn.extend({\r\n\toffset: function( options ) {\r\n\t\tif ( arguments.length ) {\r\n\t\t\treturn options === undefined ?\r\n\t\t\t\tthis :\r\n\t\t\t\tthis.each(function( i ) {\r\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar docElem, win,\r\n\t\t\tbox = { top: 0, left: 0 },\r\n\t\t\telem = this[ 0 ],\r\n\t\t\tdoc = elem && elem.ownerDocument;\r\n\r\n\t\tif ( !doc ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdocElem = doc.documentElement;\r\n\r\n\t\t// Make sure it's not a disconnected DOM node\r\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\r\n\t\t\treturn box;\r\n\t\t}\r\n\r\n\t\t// If we don't have gBCR, just use 0,0 rather than error\r\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\r\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\r\n\t\t\tbox = elem.getBoundingClientRect();\r\n\t\t}\r\n\t\twin = getWindow( doc );\r\n\t\treturn {\r\n\t\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\r\n\t\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\r\n\t\t};\r\n\t},\r\n\r\n\tposition: function() {\r\n\t\tif ( !this[ 0 ] ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar offsetParent, offset,\r\n\t\t\tparentOffset = { top: 0, left: 0 },\r\n\t\t\telem = this[ 0 ];\r\n\r\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\r\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\r\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\r\n\t\t\toffset = elem.getBoundingClientRect();\r\n\t\t} else {\r\n\t\t\t// Get *real* offsetParent\r\n\t\t\toffsetParent = this.offsetParent();\r\n\r\n\t\t\t// Get correct offsets\r\n\t\t\toffset = this.offset();\r\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\r\n\t\t\t\tparentOffset = offsetParent.offset();\r\n\t\t\t}\r\n\r\n\t\t\t// Add offsetParent borders\r\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\r\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\r\n\t\t}\r\n\r\n\t\t// Subtract parent offsets and element margins\r\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\r\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\r\n\t\treturn {\r\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\r\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\r\n\t\t};\r\n\t},\r\n\r\n\toffsetParent: function() {\r\n\t\treturn this.map(function() {\r\n\t\t\tvar offsetParent = this.offsetParent || docElem;\r\n\r\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\r\n\t\t\t\toffsetParent = offsetParent.offsetParent;\r\n\t\t\t}\r\n\t\t\treturn offsetParent || docElem;\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// Create scrollLeft and scrollTop methods\r\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\r\n\tvar top = /Y/.test( prop );\r\n\r\n\tjQuery.fn[ method ] = function( val ) {\r\n\t\treturn access( this, function( elem, method, val ) {\r\n\t\t\tvar win = getWindow( elem );\r\n\r\n\t\t\tif ( val === undefined ) {\r\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\r\n\t\t\t\t\twin.document.documentElement[ method ] :\r\n\t\t\t\t\telem[ method ];\r\n\t\t\t}\r\n\r\n\t\t\tif ( win ) {\r\n\t\t\t\twin.scrollTo(\r\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\r\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\r\n\t\t\t\t);\r\n\r\n\t\t\t} else {\r\n\t\t\t\telem[ method ] = val;\r\n\t\t\t}\r\n\t\t}, method, val, arguments.length, null );\r\n\t};\r\n});\r\n\r\n// Add the top/left cssHooks using jQuery.fn.position\r\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\r\n// getComputedStyle returns percent when specified for top/left/bottom/right\r\n// rather than make the css module depend on the offset module, we just check for it here\r\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\r\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\r\n\t\tfunction( elem, computed ) {\r\n\t\t\tif ( computed ) {\r\n\t\t\t\tcomputed = curCSS( elem, prop );\r\n\t\t\t\t// if curCSS returns percentage, fallback to offset\r\n\t\t\t\treturn rnumnonpx.test( computed ) ?\r\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\r\n\t\t\t\t\tcomputed;\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n});\r\n\r\n\r\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\r\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\r\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\r\n\t\t// margin is only for outerHeight, outerWidth\r\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\r\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\r\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\r\n\r\n\t\t\treturn access( this, function( elem, type, value ) {\r\n\t\t\t\tvar doc;\r\n\r\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\r\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\r\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\r\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\r\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Get document width or height\r\n\t\t\t\tif ( elem.nodeType === 9 ) {\r\n\t\t\t\t\tdoc = elem.documentElement;\r\n\r\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\r\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\r\n\t\t\t\t\treturn Math.max(\r\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\r\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\r\n\t\t\t\t\t\tdoc[ \"client\" + name ]\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value === undefined ?\r\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\r\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\r\n\r\n\t\t\t\t\t// Set width or height on the element\r\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\r\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\r\n\t\t};\r\n\t});\r\n});\r\n\r\n\r\n// The number of elements contained in the matched element set\r\njQuery.fn.size = function() {\r\n\treturn this.length;\r\n};\r\n\r\njQuery.fn.andSelf = jQuery.fn.addBack;\r\n\r\n\r\n\r\n\r\n// Register as a named AMD module, since jQuery can be concatenated with other\r\n// files that may use define, but not via a proper concatenation script that\r\n// understands anonymous AMD modules. A named AMD is safest and most robust\r\n// way to register. Lowercase jquery is used because AMD module names are\r\n// derived from file names, and jQuery is normally delivered in a lowercase\r\n// file name. Do this after creating the global so that if an AMD module wants\r\n// to call noConflict to hide this version of jQuery, it will work.\r\n\r\n// Note that for maximum portability, libraries that are not jQuery should\r\n// declare themselves as anonymous modules, and avoid setting a global if an\r\n// AMD loader is present. jQuery is a special case. For more information, see\r\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\r\n\r\nif ( typeof define === \"function\" && define.amd ) {\r\n\tdefine( \"jquery\", [], function() {\r\n\t\treturn jQuery;\r\n\t});\r\n}\r\n\r\n\r\n\r\n\r\nvar\r\n\t// Map over jQuery in case of overwrite\r\n\t_jQuery = window.jQuery,\r\n\r\n\t// Map over the $ in case of overwrite\r\n\t_$ = window.$;\r\n\r\njQuery.noConflict = function( deep ) {\r\n\tif ( window.$ === jQuery ) {\r\n\t\twindow.$ = _$;\r\n\t}\r\n\r\n\tif ( deep && window.jQuery === jQuery ) {\r\n\t\twindow.jQuery = _jQuery;\r\n\t}\r\n\r\n\treturn jQuery;\r\n};\r\n\r\n// Expose jQuery and $ identifiers, even in\r\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\r\n// and CommonJS for browser emulators (#13566)\r\nif ( typeof noGlobal === strundefined ) {\r\n\twindow.jQuery = window.$ = jQuery;\r\n}\r\n\r\n\r\n\r\n\r\nreturn jQuery;\r\n\r\n}));\r\n"
  },
  {
    "path": "examples/login/libs/easymob-webim-sdk/json2.js",
    "content": "/*\r\n    json2.js\r\n    2014-02-04\r\n\r\n    Public Domain.\r\n\r\n    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\r\n\r\n    See http://www.JSON.org/js.html\r\n\r\n\r\n    This code should be minified before deployment.\r\n    See http://javascript.crockford.com/jsmin.html\r\n\r\n    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\r\n    NOT CONTROL.\r\n\r\n\r\n    This file creates a global JSON object containing two methods: stringify\r\n    and parse.\r\n\r\n        JSON.stringify(value, replacer, space)\r\n            value       any JavaScript value, usually an object or array.\r\n\r\n            replacer    an optional parameter that determines how object\r\n                        values are stringified for objects. It can be a\r\n                        function or an array of strings.\r\n\r\n            space       an optional parameter that specifies the indentation\r\n                        of nested structures. If it is omitted, the text will\r\n                        be packed without extra whitespace. If it is a number,\r\n                        it will specify the number of spaces to indent at each\r\n                        level. If it is a string (such as '\\t' or '&nbsp;'),\r\n                        it contains the characters used to indent at each level.\r\n\r\n            This method produces a JSON text from a JavaScript value.\r\n\r\n            When an object value is found, if the object contains a toJSON\r\n            method, its toJSON method will be called and the result will be\r\n            stringified. A toJSON method does not serialize: it returns the\r\n            value represented by the name/value pair that should be serialized,\r\n            or undefined if nothing should be serialized. The toJSON method\r\n            will be passed the key associated with the value, and this will be\r\n            bound to the value\r\n\r\n            For example, this would serialize Dates as ISO strings.\r\n\r\n                Date.prototype.toJSON = function (key) {\r\n                    function f(n) {\r\n                        // Format integers to have at least two digits.\r\n                        return n < 10 ? '0' + n : n;\r\n                    }\r\n\r\n                    return this.getUTCFullYear()   + '-' +\r\n                         f(this.getUTCMonth() + 1) + '-' +\r\n                         f(this.getUTCDate())      + 'T' +\r\n                         f(this.getUTCHours())     + ':' +\r\n                         f(this.getUTCMinutes())   + ':' +\r\n                         f(this.getUTCSeconds())   + 'Z';\r\n                };\r\n\r\n            You can provide an optional replacer method. It will be passed the\r\n            key and value of each member, with this bound to the containing\r\n            object. The value that is returned from your method will be\r\n            serialized. If your method returns undefined, then the member will\r\n            be excluded from the serialization.\r\n\r\n            If the replacer parameter is an array of strings, then it will be\r\n            used to select the members to be serialized. It filters the results\r\n            such that only members with keys listed in the replacer array are\r\n            stringified.\r\n\r\n            Values that do not have JSON representations, such as undefined or\r\n            functions, will not be serialized. Such values in objects will be\r\n            dropped; in arrays they will be replaced with null. You can use\r\n            a replacer function to replace those with JSON values.\r\n            JSON.stringify(undefined) returns undefined.\r\n\r\n            The optional space parameter produces a stringification of the\r\n            value that is filled with line breaks and indentation to make it\r\n            easier to read.\r\n\r\n            If the space parameter is a non-empty string, then that string will\r\n            be used for indentation. If the space parameter is a number, then\r\n            the indentation will be that many spaces.\r\n\r\n            Example:\r\n\r\n            text = JSON.stringify(['e', {pluribus: 'unum'}]);\r\n            // text is '[\"e\",{\"pluribus\":\"unum\"}]'\r\n\r\n\r\n            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\\t');\r\n            // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\r\n\r\n            text = JSON.stringify([new Date()], function (key, value) {\r\n                return this[key] instanceof Date ?\r\n                    'Date(' + this[key] + ')' : value;\r\n            });\r\n            // text is '[\"Date(---current time---)\"]'\r\n\r\n\r\n        JSON.parse(text, reviver)\r\n            This method parses a JSON text to produce an object or array.\r\n            It can throw a SyntaxError exception.\r\n\r\n            The optional reviver parameter is a function that can filter and\r\n            transform the results. It receives each of the keys and values,\r\n            and its return value is used instead of the original value.\r\n            If it returns what it received, then the structure is not modified.\r\n            If it returns undefined then the member is deleted.\r\n\r\n            Example:\r\n\r\n            // Parse the text. Values that look like ISO date strings will\r\n            // be converted to Date objects.\r\n\r\n            myData = JSON.parse(text, function (key, value) {\r\n                var a;\r\n                if (typeof value === 'string') {\r\n                    a =\r\n/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\r\n                    if (a) {\r\n                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\r\n                            +a[5], +a[6]));\r\n                    }\r\n                }\r\n                return value;\r\n            });\r\n\r\n            myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\r\n                var d;\r\n                if (typeof value === 'string' &&\r\n                        value.slice(0, 5) === 'Date(' &&\r\n                        value.slice(-1) === ')') {\r\n                    d = new Date(value.slice(5, -1));\r\n                    if (d) {\r\n                        return d;\r\n                    }\r\n                }\r\n                return value;\r\n            });\r\n\r\n\r\n    This is a reference implementation. You are free to copy, modify, or\r\n    redistribute.\r\n*/\r\n\r\n/*jslint evil: true, regexp: true */\r\n\r\n/*members \"\", \"\\b\", \"\\t\", \"\\n\", \"\\f\", \"\\r\", \"\\\"\", JSON, \"\\\\\", apply,\r\n    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\r\n    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\r\n    lastIndex, length, parse, prototype, push, replace, slice, stringify,\r\n    test, toJSON, toString, valueOf\r\n*/\r\n\r\n\r\n// Create a JSON object only if one does not already exist. We create the\r\n// methods in a closure to avoid creating global variables.\r\n\r\nif (typeof JSON !== 'object') {\r\n    JSON = {};\r\n}\r\n\r\n(function () {\r\n    'use strict';\r\n\r\n    function f(n) {\r\n        // Format integers to have at least two digits.\r\n        return n < 10 ? '0' + n : n;\r\n    }\r\n\r\n    if (typeof Date.prototype.toJSON !== 'function') {\r\n\r\n        Date.prototype.toJSON = function () {\r\n\r\n            return isFinite(this.valueOf())\r\n                ? this.getUTCFullYear()     + '-' +\r\n                    f(this.getUTCMonth() + 1) + '-' +\r\n                    f(this.getUTCDate())      + 'T' +\r\n                    f(this.getUTCHours())     + ':' +\r\n                    f(this.getUTCMinutes())   + ':' +\r\n                    f(this.getUTCSeconds())   + 'Z'\r\n                : null;\r\n        };\r\n\r\n        String.prototype.toJSON      =\r\n            Number.prototype.toJSON  =\r\n            Boolean.prototype.toJSON = function () {\r\n                return this.valueOf();\r\n            };\r\n    }\r\n\r\n    var cx,\r\n        escapable,\r\n        gap,\r\n        indent,\r\n        meta,\r\n        rep;\r\n\r\n\r\n    function quote(string) {\r\n\r\n// If the string contains no control characters, no quote characters, and no\r\n// backslash characters, then we can safely slap some quotes around it.\r\n// Otherwise we must also replace the offending characters with safe escape\r\n// sequences.\r\n\r\n        escapable.lastIndex = 0;\r\n        return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\r\n            var c = meta[a];\r\n            return typeof c === 'string'\r\n                ? c\r\n                : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\r\n        }) + '\"' : '\"' + string + '\"';\r\n    }\r\n\r\n\r\n    function str(key, holder) {\r\n\r\n// Produce a string from holder[key].\r\n\r\n        var i,          // The loop counter.\r\n            k,          // The member key.\r\n            v,          // The member value.\r\n            length,\r\n            mind = gap,\r\n            partial,\r\n            value = holder[key];\r\n\r\n// If the value has a toJSON method, call it to obtain a replacement value.\r\n\r\n        if (value && typeof value === 'object' &&\r\n                typeof value.toJSON === 'function') {\r\n            value = value.toJSON(key);\r\n        }\r\n\r\n// If we were called with a replacer function, then call the replacer to\r\n// obtain a replacement value.\r\n\r\n        if (typeof rep === 'function') {\r\n            value = rep.call(holder, key, value);\r\n        }\r\n\r\n// What happens next depends on the value's type.\r\n\r\n        switch (typeof value) {\r\n        case 'string':\r\n            return quote(value);\r\n\r\n        case 'number':\r\n\r\n// JSON numbers must be finite. Encode non-finite numbers as null.\r\n\r\n            return isFinite(value) ? String(value) : 'null';\r\n\r\n        case 'boolean':\r\n        case 'null':\r\n\r\n// If the value is a boolean or null, convert it to a string. Note:\r\n// typeof null does not produce 'null'. The case is included here in\r\n// the remote chance that this gets fixed someday.\r\n\r\n            return String(value);\r\n\r\n// If the type is 'object', we might be dealing with an object or an array or\r\n// null.\r\n\r\n        case 'object':\r\n\r\n// Due to a specification blunder in ECMAScript, typeof null is 'object',\r\n// so watch out for that case.\r\n\r\n            if (!value) {\r\n                return 'null';\r\n            }\r\n\r\n// Make an array to hold the partial results of stringifying this object value.\r\n\r\n            gap += indent;\r\n            partial = [];\r\n\r\n// Is the value an array?\r\n\r\n            if (Object.prototype.toString.apply(value) === '[object Array]') {\r\n\r\n// The value is an array. Stringify every element. Use null as a placeholder\r\n// for non-JSON values.\r\n\r\n                length = value.length;\r\n                for (i = 0; i < length; i += 1) {\r\n                    partial[i] = str(i, value) || 'null';\r\n                }\r\n\r\n// Join all of the elements together, separated with commas, and wrap them in\r\n// brackets.\r\n\r\n                v = partial.length === 0\r\n                    ? '[]'\r\n                    : gap\r\n                    ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']'\r\n                    : '[' + partial.join(',') + ']';\r\n                gap = mind;\r\n                return v;\r\n            }\r\n\r\n// If the replacer is an array, use it to select the members to be stringified.\r\n\r\n            if (rep && typeof rep === 'object') {\r\n                length = rep.length;\r\n                for (i = 0; i < length; i += 1) {\r\n                    if (typeof rep[i] === 'string') {\r\n                        k = rep[i];\r\n                        v = str(k, value);\r\n                        if (v) {\r\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n\r\n// Otherwise, iterate through all of the keys in the object.\r\n\r\n                for (k in value) {\r\n                    if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n                        v = str(k, value);\r\n                        if (v) {\r\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n// Join all of the member texts together, separated with commas,\r\n// and wrap them in braces.\r\n\r\n            v = partial.length === 0\r\n                ? '{}'\r\n                : gap\r\n                ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}'\r\n                : '{' + partial.join(',') + '}';\r\n            gap = mind;\r\n            return v;\r\n        }\r\n    }\r\n\r\n// If the JSON object does not yet have a stringify method, give it one.\r\n\r\n    if (typeof JSON.stringify !== 'function') {\r\n        escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\r\n        meta = {    // table of character substitutions\r\n            '\\b': '\\\\b',\r\n            '\\t': '\\\\t',\r\n            '\\n': '\\\\n',\r\n            '\\f': '\\\\f',\r\n            '\\r': '\\\\r',\r\n            '\"' : '\\\\\"',\r\n            '\\\\': '\\\\\\\\'\r\n        };\r\n        JSON.stringify = function (value, replacer, space) {\r\n\r\n// The stringify method takes a value and an optional replacer, and an optional\r\n// space parameter, and returns a JSON text. The replacer can be a function\r\n// that can replace values, or an array of strings that will select the keys.\r\n// A default replacer method can be provided. Use of the space parameter can\r\n// produce text that is more easily readable.\r\n\r\n            var i;\r\n            gap = '';\r\n            indent = '';\r\n\r\n// If the space parameter is a number, make an indent string containing that\r\n// many spaces.\r\n\r\n            if (typeof space === 'number') {\r\n                for (i = 0; i < space; i += 1) {\r\n                    indent += ' ';\r\n                }\r\n\r\n// If the space parameter is a string, it will be used as the indent string.\r\n\r\n            } else if (typeof space === 'string') {\r\n                indent = space;\r\n            }\r\n\r\n// If there is a replacer, it must be a function or an array.\r\n// Otherwise, throw an error.\r\n\r\n            rep = replacer;\r\n            if (replacer && typeof replacer !== 'function' &&\r\n                    (typeof replacer !== 'object' ||\r\n                    typeof replacer.length !== 'number')) {\r\n                throw new Error('JSON.stringify');\r\n            }\r\n\r\n// Make a fake root object containing our value under the key of ''.\r\n// Return the result of stringifying the value.\r\n\r\n            return str('', {'': value});\r\n        };\r\n    }\r\n\r\n\r\n// If the JSON object does not yet have a parse method, give it one.\r\n\r\n    if (typeof JSON.parse !== 'function') {\r\n        cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\r\n        JSON.parse = function (text, reviver) {\r\n\r\n// The parse method takes a text and an optional reviver function, and returns\r\n// a JavaScript value if the text is a valid JSON text.\r\n\r\n            var j;\r\n\r\n            function walk(holder, key) {\r\n\r\n// The walk method is used to recursively walk the resulting structure so\r\n// that modifications can be made.\r\n\r\n                var k, v, value = holder[key];\r\n                if (value && typeof value === 'object') {\r\n                    for (k in value) {\r\n                        if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n                            v = walk(value, k);\r\n                            if (v !== undefined) {\r\n                                value[k] = v;\r\n                            } else {\r\n                                delete value[k];\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return reviver.call(holder, key, value);\r\n            }\r\n\r\n\r\n// Parsing happens in four stages. In the first stage, we replace certain\r\n// Unicode characters with escape sequences. JavaScript handles many characters\r\n// incorrectly, either silently deleting them, or treating them as line endings.\r\n\r\n            text = String(text);\r\n            cx.lastIndex = 0;\r\n            if (cx.test(text)) {\r\n                text = text.replace(cx, function (a) {\r\n                    return '\\\\u' +\r\n                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\r\n                });\r\n            }\r\n\r\n// In the second stage, we run the text against regular expressions that look\r\n// for non-JSON patterns. We are especially concerned with '()' and 'new'\r\n// because they can cause invocation, and '=' because it can cause mutation.\r\n// But just to be safe, we want to reject all unexpected forms.\r\n\r\n// We split the second stage into 4 regexp operations in order to work around\r\n// crippling inefficiencies in IE's and Safari's regexp engines. First we\r\n// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we\r\n// replace all simple value tokens with ']' characters. Third, we delete all\r\n// open brackets that follow a colon or comma or that begin the text. Finally,\r\n// we look to see that the remaining characters are only whitespace or ']' or\r\n// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.\r\n\r\n            if (/^[\\],:{}\\s]*$/\r\n                    .test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\r\n                        .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\r\n                        .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))) {\r\n\r\n// In the third stage we use the eval function to compile the text into a\r\n// JavaScript structure. The '{' operator is subject to a syntactic ambiguity\r\n// in JavaScript: it can begin a block or an object literal. We wrap the text\r\n// in parens to eliminate the ambiguity.\r\n\r\n                j = eval('(' + text + ')');\r\n\r\n// In the optional fourth stage, we recursively walk the new structure, passing\r\n// each name/value pair to a reviver function for possible transformation.\r\n\r\n                return typeof reviver === 'function'\r\n                    ? walk({'': j}, '')\r\n                    : j;\r\n            }\r\n\r\n// If the text is not JSON parseable, then a SyntaxError is thrown.\r\n\r\n            throw new SyntaxError('JSON.parse');\r\n        };\r\n    }\r\n}());\r\n"
  },
  {
    "path": "examples/login/libs/easymob-webim-sdk/quickstart.md",
    "content": "---\ntitle: WebIM 开发指南\nsidebar: webimsidebar\nsecondnavwebim: true\n---\n\n# 快速入门  \n\n## 初始化\n\n### 创建连接{#conn_new}\n<pre class=\"hll\"><code class=\"language-javascript\">\nvar conn = new Easemob.im.Connection();\n</code></pre>\n\n### 初始化连接{#conn_init}\n<pre class=\"hll\"><code class=\"language-javascript\">\nconn.init({\n    https : true,//非必填，url值未设置时有效，优先采用url配置的参数。默认采用http连接，地址为‘http://im-api.easemob.com/http-bind/’，启用https时传递此值，地址为：‘https://im-api.easemob.com/http-bind/’\n    url ： 'http://im-api.easemob.com/http-bind/',//非必填，默认聊天服务器地址，\n    domain : 'aa.com',//非必填，默认：‘easemob.com’\n    wait ： '60',//非必填，连接超时，默认：60，单位seconds\n    onOpened : function() {\n        curUserId = conn.context.userId;\n        //查询好友列表\n        conn.getRoster(....);\n    },\n    onClosed : function() {\n        //处理登出事件\n    },\n    onTextMessage : function(message) {\n        /**处理文本消息，消息格式为：\n            {\ttype :'chat',//群聊为“groupchat”\n                from : from,\n                to : too,\n                data : { \"type\":\"txt\",\n                    \"msg\":\"hello from test2\"\n                }\n            }\n        */\n        handleTextMessage(message);\n    },\n    onEmotionMessage : function(message) {\n        /*处理表情消息,消息格式为：\n            {\ttype :'chat',//群聊为“groupchat”\n                from : from,\n                to : too,\n                data : [{ \"type\":\"txt\",\n                    \"msg\":\"hello from test2\"\n                },\n                { \"type\":\"emotion\",\n                  \"msg\":\"data:image/png;base64, ……\"//图片的base64编码\n                }]\n            }\n        */\n        handleEmotion(message);\n    },\n    onPictureMessage : function(message) {\n        /**处理图片消息，消息格式为：\n            {\ttype :'chat',//群聊为“groupchat”\n                from : \"test1\",\n                to : \"test2\",\n                url : \"http://s1.easemob.com/weiquan2/a2/chatfiles/0c0f5f3a-e66b-11e3-8863-f1c202c2b3ae\",\n                secret : \"NSgGYPCxEeOou00jZasg9e-GqKUZGdph96EFxJ4WxW-qkxV4\",\n                filename : \"logo.png\",\n                thumb : \"http://s1.easemob.com/weiquan2/a2/chatfiles/0c0f5f3a-e66b-11e3-8863-f1c202c2b3ae\",\n                thumb_secret : \"0595b06a-ed8b-11e3-9b85-93fade9c198c\",\n                file_length : 42394,\n                width : 280,\n                height : 160,\n                filetype : \"image/png\",\n                accessToken :\"YWMtjPPoovCqEeOQs7myPqqaOwAAAUaqNH0a8rRj4PwJLQju6-S47ZO6wYs3Lwo\"\n            }\n        */\n\n        handlePictureMessage(message);\n    },\n    onAudioMessage : function(message) {\n        /**处理音频消息，消息格式为：\n           {\ttype :'chat',//群聊为“groupchat”\n                from : \"test1\",\n                to : \"test2\",\n                url : \"http://s1.easemob.com/weiquan2/a2/chatfiles/0c0f5f3a-e66b-11e3-8863-f1c202c2b3ae\",\n                secret :\"NSgGYPCxEeOou00jZasg9e-GqKUZGdph96EFxJ4WxW-qkxV4\",\n                filename : \"风雨无阻.mp3\",\n                length :45223,\n                file_length : 304,\n                filetype : \"mp3\",\n                accessToken :\"YWMtjPPoovCqEeOQs7myPqqaOwAAAUaqNH0a8rRj4PwJLQju6-S47ZO6wYs3Lwo\"\n            }\n        */\n        handleAudioMessage(message);\n    },\n    //收到联系人订阅请求的回调方法\n    onPresence : function (message){\n        /**\n            {\n                from: \"l2\",\n                fromJid: \"easemob-demo#chatdemoui_l2@easemob.com\",\n                status: \"下午11:44:47\",\n                to: \"test1\",\n                toJid: \"easemob-demo#chatdemoui_test1@easemob.com/13856640471403797405809685\",\n                type: \"subscribed\"\n            }\n        */\n        handlePresence(message);\n    },\n    //收到联系人信息的回调方法\n    onRoster : function (message){\n        /**\n            [{\n                groups: [{0: \"default\",\n                        length: 1}],\n                jid: \"easemob-demo#chatdemoui_l2@easemob.com\",\n                name: \"l2\",\n                subscription: \"to\"\n            }]\n        */\n        handleRoster(message);\n    },\n    onError : function(e) {\n        //异常处理\n        alert(e.msg);\n    }\n});\n</code></pre>\n\n### 打开连接{#conn_open}\n\n支持username/password和username/token登录两种方式，sdk中会根据传入的参数进行自动选择是否登录usergrid，获取登录成功的token后再进行登录聊天，如果使用token的打开连接将跳过登录usergird，直接登录IM服务器。\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//用户名\nvar user = $(\"#username\").val();\n//密码\nvar pass = $(\"#password\").val();\nif (user == '' || pass == '') {\n    alert(\"请输入用户名和密码\");\n    return;\n}\nconn.open({\n    user : user,\n    pwd : pass,\n    appKey : 'easemob-demo#chatdemoui'//开发者APPKey\n    //accessToken : 'YWMt8bfZfFk5EeSiAzsQ0OXu4QAAAUpoZFOMJ66ic5m2LOZRhYUsRKZWINA06HI'\n});\n</code></pre>\n\n## 单聊{#single_chat}\n\n### 查询好友列表{#getRoster}\n\n查询好友列表时，要注意susciption（both，to,from）为不同值得处理,此处默认both和to的为好友，开发者自定义处理，保持跟APP端处理一致即可。\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nconn.getRoster({\n    success : function(roster) {\n        //获取好友列表，并进行好友列表渲染，roster格式为：\n        /** [\n                {\n                    jid:\"asemoemo#chatdemoui_test1@easemob.com\",\n                    name:\"test1\",\n                    subscription: \"both\"\n                },\n                {\n                    jid:\"asemoemo#chatdemoui_test2@easemob.com\",\n                    name:\"test2\",\n                    subscription: \"from\"\n                }\n            ]\n        */\n        for(var i in roster){\n            var ros = roster[i];    \n            //ros.subscriptio值为both/to为要显示的联系人,此处与APP需保持一致，才能保证两个客户端登录后的好友列表一致\n            if(ros.subscription =='both' || ros.subscription=='to'){\n                newroster.push(ros);\n            }\n        }\n        if (newroster.length >=0) {\n            buildContactDiv(\"contractlist\", newroster);//页面处理\n            if (newroster.length > 0) {\n                setCurrentContact(newroster[0].name);//页面处理将第一个联系人作为当前聊天div\n            }\n        }\n        //conn.setPresence();\n    },    \n});\n</code></pre>\n\n### 添加好友{#subscribe}\n通过sdk的subscribe和unsubcribe进行添加或者删除好友操作，登录用户通过注册onPresence，监听对方的添加或者删除好友请求，并做相应的处理。\n<pre class=\"hll\"><code class=\"language-javascript\">   \n//easemobwebim-sdk中收到联系人订阅请求的处理方法，具体的type值所对应的值请参考xmpp协议规范\nvar handlePresence = function (e){\n\t//（发送者希望订阅接收者的出席信息），即别人申请加你为好友\n\tif (e.type == 'subscribe') {\n\t\t//若e.status中含有[resp:true],则表示为对方同意好友后反向添加自己为好友的消息，demo中发现此类消息，默认同意操作，完成双方互为好友；如果不含有[resp:true]，则表示为正常的对方请求添加自己为好友的申请消息。\n\t\t......\n\t}\n\t//(发送者允许接收者接收他们的出席信息)，即别人同意你加他为好友\n\tif (e.type == 'subscribed') {\n\t\t......\n\t}\n\t//（发送者取消订阅另一个实体的出席信息）,即删除现有好友\n\tif (e.type == 'unsubscribe') {\n\t\t.......\n\t}\n\t//（订阅者的请求被拒绝或以前的订阅被取消），即对方单向的删除了好友\n\tif (e.type == 'unsubscribed') {\n\t\t.......\n\t}\n};\n</code></pre>\n\n#### 申请添加对方为好友{#addFriend}\n<pre class=\"hll\"><code class=\"language-javascript\">   \n//主动申请添加对方为好友\nvar startAddFriend = function startAddFriend(){\n    //对方用户账号\n    var user = $(\"addfridentId\").val();\n    //请求添加对方为好友\n    conn.subscribe({\n\t\tto : user,\n\t\tmessage : \"加个好友呗-\" + getLoacalTimeString()\n\t});\n    return;\n};\nvar getLoacalTimeString = function getLoacalTimeString() {\n\t\tvar date = new Date();\n\t\tvar time = date.getHours() + \":\" + date.getMinutes() + \":\"\n\t\t\t\t+ date.getSeconds();\n\t\treturn time;\n\t}\n</code></pre>\n\n#### 对方收到请求，同意或者拒绝{#agreed_reject}\n\n<pre class=\"hll\"><code class=\"language-javascript\">  \n//对方收到请求加为好友，接受请求\n$('#confirm-block-footer-confirmButton').click(function() {\n\t//同意好友请求\n\tagreeAddFriend(e.from);//e.from用户名\n\t//反向添加对方好友\n\tconn.subscribe({\n\t\tto : e.from,\n\t\tmessage : \"[resp:true]\"\n\t});\n}\n//同意\nvar agreeAddFriend = function agreeAddFriend(connection,who,jid){\n   conn.subscribed({\n\t\t\tto : user,\n\t\t\tmessage : \"[resp:true]\"//同意后发送反加对方为好友的消息，反加消息标识[resp:true]\n\t\t});\n};\n\n//对方收到请求加为好友，拒绝请求\n$('#confirm-block-footer-cancelButton').click(function() {\n\trejectAddFriend(e.from);//拒绝加为好友\n});\n//拒绝\nvar rejectAddFriend = function(user) {\n\tconn.unsubscribed({\n\t\tto : user,\n\t\tmessage : getLoacalTimeString()\n\t});\n};\n</code></pre>\n\n对于好友的分组，添加好友时在addroster可以指定group属性（默认为：default组），添加好友成功后，好友列表渲染时，根据好友的group属性进行分组渲染，实现类似其他聊天工具的自定义好友分组管理的功能。\n\n#### 删除好友{#delfriend}\n\n取消订阅，同时将对方从自己的好友列表上删除掉。\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nvar delFriend = function(user) {\n\tconn.removeRoster({\n\t\tto : user,\n\t\tgroups : [ 'default' ],\n\t\tsuccess : function() {\n\t\t\tconn.**unsubscribed**({\n\t\t\t\tto : user\n\t\t\t});\n\t\t}\n\t});\n};\n</code></pre>\n\n### 发送文本（表情）聊天消息{#sendTextMessage}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//发送文本消息\nconn.sendTextMessage({\n    to : to,//用户登录名，sd根据appkey和domain组织jid，如easemob-demo#chatdemoui_**TEST**@easemob.com，中\"to:TEST\",下同\n    msg :'hello world！' //文本消息\n});\n\n//发送表情消息，调用接口同文本消息\nconn.sendTextMessage({\n    to : to,\n    msg :'hello world！[(*)][(#)]' //文本消息+表情\n});\n</code></pre>\n\n### 发送图片消息{#sendPic}\n\n发送图片消息sdk自动分两步完成：<br>\n1）上传图片文件到服务器，并得到服务返回的图片信息等<br>\n2）发送图片消息，消息体包含图片的基本信息、服务器路径、secret等，接收方初始化连接中的onPictureMessage的格式，根据图片消息内容到服务器下载图片，并进行显示\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nfunction sendPic() {\n    //图片接收者，如“test1”\n    var to = curChatUserId;\n    if (to == null) {\n        alert(\"请选择联系人\");\n        return;\n    }\n    //fileInputId：文件选择输入框的Id，sdk自动根据id自动获取文件对象（含图片，或者其他类型文件）\n    var fileObj = Easemob.im.Helper.getFileUrl(fileInputId);\n    if (fileObj.url == null || fileObj.url == '') {\n        alert(\"请选择发送图片\");\n        return;\n    }\n    var filetype = fileObj.filetype;\n    var filename = fileObj.filename;\n    if (filetype in  {\n                    \"jpg\" : true,\n                    \"gif\" : true,\n                    \"png\" : true,\n                    \"bmp\" : true\n                    }) {\n        var opt = {\n            fileInputId : fileInputId,\n            to : to,\n            onFileUploadError : function(error) {\n                //处理图片上传失败\n            },\n            onFileUploadComplete : function(data) {\n                //处理图片上传成功，如本地消息显示\n            }\n        };\n        conn.sendPicture(opt);\n        return;\n    }\n    alert(\"不支持此图片类型\" + filetype);\n};\n</code></pre>\n\n### 发送音频消息{#sendAudio}\n\nsdk处理同发送图片消息，分两步：\n\n1. 上传音频文件到服务器，得到音频文件的信息；\n2. 发送音频消息给接收方，消息体包含音频的基本信息、下载路径和secret信息等，接收方收到消息后，根据消息体内部的音频下载路径和secret路径，下载音频并进行显示。\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nfunction sendAudio () {\n    var to = curChatUserId;\n    if (to == null) {\n        alert(\"请选择联系人\");\n        return;\n    }\n    var fileObj = Easemob.im.Helper.getFileUrl(fileInputId);\n    if (fileObj.url == null || fileObj.url == '') {\n        alert(\"请选择发送音频\");\n        return;\n    }\n    var filetype = fileObj.filetype;\n    var filename = fileObj.filename;\n    if (filetype in {\n                \"mp3\" : true,\n                \"wma\" : true,\n                \"wav\" : true,\n                \"avi\" : true\n                })\n    {\n        var opt = {\n            fileInputId : fileInputId,\n            to : to,\n            onFileUploadError : function(error) {\n                //处理上传音频失败\n            },\n            onFileUploadComplete : function(data) {\n                //处理上传音频成功，如本地消息提示发送成功\n            }\n        };\n        conn.sendAudio(opt);\n        return;\n    }\n    alert(\"不支持此音频类型\" + filetype);\n};\n</code></pre>\n\n### 接收消息\n\n#### 注册接收消息 {#onmessage}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nconn.init({\n\tonTextMessage : function(message) {        },//收到文本消息处理动作\n    onEmotionMessage : function(message) {        },//收到表情消息处理动作\n    onPictureMessage : function(message) {         },//收到图片消息处理动作\n    onAudioMessage : function(message) {        }, //收到语音消息处理动作\n\t...\n});\n</code></pre>\n\n#### 处理消息{#options}\n\nconn.init()中注册不同消息接收handler之后，可自行解析消息体，定位聊天好友，并追加到与其聊天窗口。具体参考webim.easemob.com效果，消息体格式参见前章节：初始化连接。<br>\n注：对于图片、语音消息需要先进行下载，然后进行显示或者播放处理。如下(下载图片，音频同)：\n<pre class=\"hll\"><code class=\"language-javascript\">\nvar handlePictureMessage = function(message) {\nvar filename = message.filename;//文件名称，带文件扩展名\nvar from = message.from;//文件的发送者\nvar mestype = message.type;//消息发送的类型是群组消息还是个人消息\n......\n...\nvar options = message;\n// 图片消息下载成功后的处理逻辑\noptions.onFileDownloadComplete = function(response, xhr) {\n\tvar objectURL = window.URL.createObjectURL(response);\n\timg = document.createElement(\"img\");\n\timg.onload = function(e) {\n\t\timg.onload = null;\n\t\twindow.URL.revokeObjectURL(img.src);\n\t};\n\timg.onerror = function() {\n\t\timg.onerror = null;\n\t\tif (typeof FileReader == 'undefined') {\n\t\t\timg.alter = \"当前浏览器不支持blob方式\";\n\t\t\treturn;\n\t\t}\n\t\timg.onerror = function() {\n\t\t\timg.alter = \"当前浏览器不支持blob方式\";\n\t\t};\n\t\tvar reader = new FileReader();\n\t\treader.onload = function(event) {\n\t\t\timg.src = this.result;\n\t\t};\n\t\treader.readAsDataURL(response);\n\t}\n\timg.src = objectURL;\n\tvar pic_real_width = options.width;\n\t......\n\t...\n};\noptions.onFileDownloadError = function(e) {\n\tappendMsg(from, contactDivId, e.msg + \",下载图片\" + filename + \"失败\");\n};\nEasemob.im.Helper.download(options);\n\n</code></pre>\n\n#### 历史消息{#history_message}\n\nsdk暂不具有缓存历史消息功能，demo中聊天窗口只能显示，当前登录后会话实时在聊天信息，不能查看历史消息，可以对登录后的聊天信息进行清除操作。\n\n#### 新消息提示{#new_message}\n\nsdk在收到新消息是会直接转发给登录用户，接收到消息后，demo中会在好友或者群组的后面显示红色消息数，具体样式开发者可自行处理。\n\n## 群聊{#group_chat}\n\n### 查询群组成员{#queryOccupants}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//根据roomId查询room成员列表\nvar queryOccupants = function queryOccupants(roomId) {\n    var occupants = [];//存放成员容器\n    //查询获取room信息\n    conn.queryRoomInfo({\n        roomId : roomId,\n        success : function(occs) {\n            if (occs) {\n                for ( var i = 0; i < occs.length; i++) {\n                    occupants.push(occs[i]);\n                }\n            }\n            //查询获取room成员信息\n            conn.queryRoomMember({\n                roomId : roomId,\n                success : function(members) {\n                    if (members) {\n                        for ( var i = 0; i < members.length; i++) {\n                            occupants.push(members[i]);\n                        }\n                    }\n                }\n            });\n        }\n    });\n};\n</code></pre>\n\n### 发送文本（表情）聊天消息{#group_sendTextMessage}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//发送文本消息\nconn.sendTextMessage({\n    to : to,\n    type : 'groupchat',\n    msg :'hello world！' //文本消息\n});\n\n//发送表情消息，调用接口同文本消息\nconn.sendTextMessage({\n    to : to,\n    type : 'groupchat',\n    msg :'hello world！[(*)][(#)]' //文本消息+表情\n});\n</code></pre>\n\n### 发送图片消息{#group_sendPic}\n\n发送图片消息sdk自动分两步完成\n\n1. 上传图片文件\n2. 发送图片消息初始化连接中的onPictureMessage的格式\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//发送图片消息时调用方法\nvar sendPic = function() {\n    var to = curChatUserId;\n    if (to == null) {\n        return;\n    }\n    // Easemob.im.Helper.getFileUrl为easemobwebim-sdk获取发送文件对象的方法，fileInputId为 input 标签的id值\n    var fileObj = Easemob.im.Helper.getFileUrl(fileInputId);\n    if (fileObj.url == null || fileObj.url == '') {\n        alert(\"请选择发送图片\");\n        return;\n    }\n    var filetype = fileObj.filetype;\n    var filename = fileObj.filename;\n    if (filetype in pictype) {\n        document.getElementById(\"fileSend\").disabled = true;\n        document.getElementById(\"cancelfileSend\").disabled = true;\n        var opt = {\n            type:'chat',\n            fileInputId : fileInputId,\n            to : to,\n            onFileUploadError : function(error) {\n                //处理图片上传失败\n            },\n            onFileUploadComplete : function(data) {\n                //关闭文件选择窗口\n                $('#fileModal').modal('hide');\n                //本地缩略图\n                var file = document.getElementById(fileInputId);\n                if (file && file.files) {\n                    var objUrl = getObjectURL(file.files[0]);\n                    if (objUrl) {\n                        var img = document.createElement(\"img\");\n                        img.src = objUrl;\n                        img.width = maxWidth;\n                    }\n                }\n            \n            }\n        };\n        //判断是否为群组标识\n        if (curChatUserId.indexOf(groupFlagMark) >= 0) {\n            opt.type = 'groupchat';//群组标识符\n            opt.to = curRoomId;\n        }\n        conn.sendPicture(opt);\n        return;\n    }\n    alert(\"不支持此图片类型\" + filetype);\n};\n</code></pre>\n\n### 发送音频消息{#group_sendAudio}\n\nsdk处理同群发送图片消息，分两步\n\n1. 上传音频\n2. 发送消息\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//发送音频消息时调用的方法\nvar sendAudio = function() {\n    var to = curChatUserId;\n    if (to == null) {\n        alert(\"请选择联系人\");\n        return;\n    }\n    //利用easemobwebim-sdk提供的方法来构造一个file对象\n    var fileObj = Easemob.im.Helper.getFileUrl(fileInputId);\n    if (fileObj.url == null || fileObj.url == '') {\n            alert(\"请选择发送音频\");\n        return;\n    }\n    var filetype = fileObj.filetype;\n    var filename = fileObj.filename;\n    if (filetype in audtype) {\n        document.getElementById(\"fileSend\").disabled = true;\n        document.getElementById(\"cancelfileSend\").disabled = true;\n        var opt = {\n            type:\"chat\",\n            fileInputId : fileInputId,\n            to : to,//发给谁\n            onFileUploadError : function(error) {\n                //处理上传音频失败\n            },\n            onFileUploadComplete : function(data) {\n                //处理上传音频成功，如本地消息提示发送成功\n            }\n        };\n        //构造完opt对象后调用easemobwebim-sdk中发送音频的方法\n        if (curChatUserId.indexOf(groupFlagMark) >= 0) {\n            opt.type = 'groupchat';\n            opt.to = curRoomId;\n        }\n        conn.sendAudio(opt);\n        return;\n    }\n    alert(\"不支持此音频类型\" + filetype);\n};\n</code></pre>\n### 接收及处理消息{#messageType}\n群聊接收及处理消息同单聊，消息体与单聊消息根据message的type进行区分，单聊为：“chat”，群聊为：“groupchat”。根据消息的类型进行不同处理即可。\n\n## 退出{#quit}\n\n### 关闭连接{#conn_close}\n//sdk关闭连接并处理连接状态为CLOSED\n<pre class=\"hll\"><code class=\"language-javascript\">\nconn.close();\n</code></pre>\n\n## 工具类说明{#sdk_tools}\n\n### 表情工具类{#emotion}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//返回表情JSON object，格式为：\n    {\n        \"[):]\" : \"data:image/png;base64,iVBORw0K....==\",\n        \"[:D]\" : \"data:image/png;base64,iVBORw0KGgoAAAANSUh....==\"\n    }\n\nvar emotion_json = Easemob.im.Helper.EmotionPicData;\n</code></pre>\n\n### Base64工具类{#base64}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nvar base64  = Easemob.im.Helper.Base64;\nvar srcstr=\"ssss\";\nvar base64str = base64.encode(srcstr);\nvar orgstr = base64.decode(srcstr);\n</code></pre>\n\n### 文件上传工具类{#fileupload}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//是否能上传file\nvar canupload = Easemob.im.Helper.isCanUploadFile;\n//是否能下载file\nvar candownload = Easemob.im.Helper.isCanDownLoadFile ;\n//是否设置header\nvar hasheader = Easemob.im.Helper.hasSetRequestHeader;\n//是否设置mimetype\nvar hasmimetype = Easemob.im.Helper.hasOverrideMimeType;\n</code></pre>\n\n### 表情解析工具类{#handleMotion}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//返回表情JSON，格式为：\n{\n    isemotion:true;\n    body:[{\n        type:txt,\n        msg:ssss\n    },\n    {\n        type:emotion,\n        msg:imgdata\n    }]\n}\n\nvar emotionMsg = Easemob.im.Helper.parseTextMessage(message);\n</code></pre>\n\n### 文件上传工具类{#fileupdate}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\n//返回fileinfo对象，格式为：\n    {\n        url : '',\n        filename : '',\n        filetype : ''\n    }\nvar fileInfo = Easemob.im.Helper.getFileUrl(fileInputId);\n//上传\nvar options={\n    appName = 'chatdemoui',\n    orgName = 'easemob-demo',\n    accessToken = 'YWMtjPPoovCqEeOQs7myPqqaOwAAAUaqNH0a8rRj4PwJLQju6-S47ZO6wYs3Lwo',\n    onFileUploadComplete:function(data){//upload file success },\n    onFileUploadError:function(e){//upload file error },\n    width:100,//only for pic\n    heght:100//only for pic\n}\nEasemob.im.Helper.upload(options);\n//下载\nvar options = {\n    method:'GET',//default GET\n    responseType:'blob',//default blob\n    mimeType:'text/plain; charset=x-user-defined',//default\n    url:'http://s1.easemob.com/weiquan2/a2/chatfiles/0c0f5f3a-e66b-11e3-8863-f1c202c2b3ae',\n    secret = 'NSgGYPCxEeOou00jZasg9e-GqKUZGdph96EFxJ4WxW-qkxV4',\n    accessToken = 'YWMtjPPoovCqEeOQs7myPqqaOwAAAUaqNH0a8rRj4PwJLQju6-S47ZO6wYs3Lwo',\n    onFileUploadComplete:function(data){//upload file success },\n    onFileUploadError:function(e){//upload file error },\n}\nEasemob.im.Helper.download(options);\n//文件大小 \nvar options={\n    fileInputId:'uploadfileinput'//文件输入框id\n};\nvar fileSize = getFileSize(options.fileInputId);;\n</code></pre>\n\n### 发送Ajax请求{#ajaxresquest}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nvar options = {\n    dataType:'text',//default\n    success:function(){//handle request success},\n    error :function(){//handle request error},\n    type : 'post',//default 'post'\n    url : 'http://s1.easemob.com/weiquan2/a2/chatfiles/0c0f5f3a-e66b-11e3-8863-f1c202c2b3ae',\n    headers:'',//default {}\n    data : '';//default null\n};\nEasemob.im.Helper.xhr(options);\n</code></pre>\n\n### 登录{#sdk_login}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nvar options = {\n    appKey:'easemob-demo#chatdemoui',//default ''\n    success:function(data){ //login success },//default emptyFn\n    error : cunction(error){ //login error }, //default emptyFn\n    user : 'test1', //default ''\n    pwd : '123456'  //default ''\n};\nEasemob.im.Helper.login2UserGrid(options);\n</code></pre>\n\n### 注册{#sdk_regist}\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nvvar options = {\n\tusername : 'zjj8',\n\tpassword : '123456',\n\tappKey : 'easemob-demo#chatdemoui',\n\tsuccess : function(result) {\n\t\t//注册成功\n\t\t},\n\t\terror : function(e) {\n\t\t//注册失败\t\t\t\n\t\t}\n\t};\nEasemob.im.Helper.registerUser(options);\n</code></pre>\n\n### 内置空函数{#null_function}\n\n当所有需要回调的地方接受到函数时，默认采用此函数\n\n<pre class=\"hll\"><code class=\"language-javascript\">\nvar emptyFn = function() {};\n</code></pre>\n"
  },
  {
    "path": "examples/login/libs/easymob-webim-sdk/strophe-custom-2.0.0.js",
    "content": "/* All of the Strophe globals are defined in this special function below so\r\n * that references to the globals become closures.  This will ensure that\r\n * on page reload, these references will still be available to callbacks\r\n * that are still executing.\r\n */\r\n\r\n/* jshint ignore:start */\r\n(function (callback) {\r\n/* jshint ignore:end */\r\n\r\n// This code was written by Tyler Akins and has been placed in the\r\n// public domain.  It would be nice if you left this header intact.\r\n// Base64 code from Tyler Akins -- http://rumkin.com\r\n\r\nvar Base64 = (function () {\r\n    var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\r\n    var obj = {\r\n        /**\r\n         * Encodes a string in base64\r\n         * @param {String} input The string to encode in base64.\r\n         */\r\n        encode: function (input) {\r\n            var output = \"\";\r\n            var chr1, chr2, chr3;\r\n            var enc1, enc2, enc3, enc4;\r\n            var i = 0;\r\n\r\n            do {\r\n                chr1 = input.charCodeAt(i++);\r\n                chr2 = input.charCodeAt(i++);\r\n                chr3 = input.charCodeAt(i++);\r\n\r\n                enc1 = chr1 >> 2;\r\n                enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n                enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n                enc4 = chr3 & 63;\r\n\r\n                if (isNaN(chr2)) {\r\n                    enc2 = ((chr1 & 3) << 4);\r\n                    enc3 = enc4 = 64;\r\n                } else if (isNaN(chr3)) {\r\n                    enc4 = 64;\r\n                }\r\n\r\n                output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +\r\n                    keyStr.charAt(enc3) + keyStr.charAt(enc4);\r\n            } while (i < input.length);\r\n\r\n            return output;\r\n        },\r\n\r\n        /**\r\n         * Decodes a base64 string.\r\n         * @param {String} input The string to decode.\r\n         */\r\n        decode: function (input) {\r\n            var output = \"\";\r\n            var chr1, chr2, chr3;\r\n            var enc1, enc2, enc3, enc4;\r\n            var i = 0;\r\n\r\n            // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\r\n            input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n\r\n            do {\r\n                enc1 = keyStr.indexOf(input.charAt(i++));\r\n                enc2 = keyStr.indexOf(input.charAt(i++));\r\n                enc3 = keyStr.indexOf(input.charAt(i++));\r\n                enc4 = keyStr.indexOf(input.charAt(i++));\r\n\r\n                chr1 = (enc1 << 2) | (enc2 >> 4);\r\n                chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n                chr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n                output = output + String.fromCharCode(chr1);\r\n\r\n                if (enc3 != 64) {\r\n                    output = output + String.fromCharCode(chr2);\r\n                }\r\n                if (enc4 != 64) {\r\n                    output = output + String.fromCharCode(chr3);\r\n                }\r\n            } while (i < input.length);\r\n\r\n            return output;\r\n        }\r\n    };\r\n\r\n    return obj;\r\n})();\r\n\r\n/*\r\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\r\n * in FIPS PUB 180-1\r\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\r\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r\n * Distributed under the BSD License\r\n * See http://pajhome.org.uk/crypt/md5 for details.\r\n */\r\n\r\n/* Some functions and variables have been stripped for use with Strophe */\r\n\r\n/*\r\n * These are the functions you'll usually want to call\r\n * They take string arguments and return either hex or base-64 encoded strings\r\n */\r\nfunction b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * 8));}\r\nfunction str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * 8));}\r\nfunction b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}\r\nfunction str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}\r\n\r\n/*\r\n * Calculate the SHA-1 of an array of big-endian words, and a bit length\r\n */\r\nfunction core_sha1(x, len)\r\n{\r\n  /* append padding */\r\n  x[len >> 5] |= 0x80 << (24 - len % 32);\r\n  x[((len + 64 >> 9) << 4) + 15] = len;\r\n\r\n  var w = new Array(80);\r\n  var a =  1732584193;\r\n  var b = -271733879;\r\n  var c = -1732584194;\r\n  var d =  271733878;\r\n  var e = -1009589776;\r\n\r\n  var i, j, t, olda, oldb, oldc, oldd, olde;\r\n  for (i = 0; i < x.length; i += 16)\r\n  {\r\n    olda = a;\r\n    oldb = b;\r\n    oldc = c;\r\n    oldd = d;\r\n    olde = e;\r\n\r\n    for (j = 0; j < 80; j++)\r\n    {\r\n      if (j < 16) { w[j] = x[i + j]; }\r\n      else { w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); }\r\n      t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),\r\n                       safe_add(safe_add(e, w[j]), sha1_kt(j)));\r\n      e = d;\r\n      d = c;\r\n      c = rol(b, 30);\r\n      b = a;\r\n      a = t;\r\n    }\r\n\r\n    a = safe_add(a, olda);\r\n    b = safe_add(b, oldb);\r\n    c = safe_add(c, oldc);\r\n    d = safe_add(d, oldd);\r\n    e = safe_add(e, olde);\r\n  }\r\n  return [a, b, c, d, e];\r\n}\r\n\r\n/*\r\n * Perform the appropriate triplet combination function for the current\r\n * iteration\r\n */\r\nfunction sha1_ft(t, b, c, d)\r\n{\r\n  if (t < 20) { return (b & c) | ((~b) & d); }\r\n  if (t < 40) { return b ^ c ^ d; }\r\n  if (t < 60) { return (b & c) | (b & d) | (c & d); }\r\n  return b ^ c ^ d;\r\n}\r\n\r\n/*\r\n * Determine the appropriate additive constant for the current iteration\r\n */\r\nfunction sha1_kt(t)\r\n{\r\n  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :\r\n         (t < 60) ? -1894007588 : -899497514;\r\n}\r\n\r\n/*\r\n * Calculate the HMAC-SHA1 of a key and some data\r\n */\r\nfunction core_hmac_sha1(key, data)\r\n{\r\n  var bkey = str2binb(key);\r\n  if (bkey.length > 16) { bkey = core_sha1(bkey, key.length * 8); }\r\n\r\n  var ipad = new Array(16), opad = new Array(16);\r\n  for (var i = 0; i < 16; i++)\r\n  {\r\n    ipad[i] = bkey[i] ^ 0x36363636;\r\n    opad[i] = bkey[i] ^ 0x5C5C5C5C;\r\n  }\r\n\r\n  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * 8);\r\n  return core_sha1(opad.concat(hash), 512 + 160);\r\n}\r\n\r\n/*\r\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\r\n * to work around bugs in some JS interpreters.\r\n */\r\nfunction safe_add(x, y)\r\n{\r\n  var lsw = (x & 0xFFFF) + (y & 0xFFFF);\r\n  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\r\n  return (msw << 16) | (lsw & 0xFFFF);\r\n}\r\n\r\n/*\r\n * Bitwise rotate a 32-bit number to the left.\r\n */\r\nfunction rol(num, cnt)\r\n{\r\n  return (num << cnt) | (num >>> (32 - cnt));\r\n}\r\n\r\n/*\r\n * Convert an 8-bit or 16-bit string to an array of big-endian words\r\n * In 8-bit function, characters >255 have their hi-byte silently ignored.\r\n */\r\nfunction str2binb(str)\r\n{\r\n  var bin = [];\r\n  var mask = 255;\r\n  for (var i = 0; i < str.length * 8; i += 8)\r\n  {\r\n    bin[i>>5] |= (str.charCodeAt(i / 8) & mask) << (24 - i%32);\r\n  }\r\n  return bin;\r\n}\r\n\r\n/*\r\n * Convert an array of big-endian words to a string\r\n */\r\nfunction binb2str(bin)\r\n{\r\n  var str = \"\";\r\n  var mask = 255;\r\n  for (var i = 0; i < bin.length * 32; i += 8)\r\n  {\r\n    str += String.fromCharCode((bin[i>>5] >>> (24 - i%32)) & mask);\r\n  }\r\n  return str;\r\n}\r\n\r\n/*\r\n * Convert an array of big-endian words to a base-64 string\r\n */\r\nfunction binb2b64(binarray)\r\n{\r\n  var tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n  var str = \"\";\r\n  var triplet, j;\r\n  for (var i = 0; i < binarray.length * 4; i += 3)\r\n  {\r\n    triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16) |\r\n              (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) |\r\n               ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);\r\n    for (j = 0; j < 4; j++)\r\n    {\r\n      if (i * 8 + j * 6 > binarray.length * 32) { str += \"=\"; }\r\n      else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); }\r\n    }\r\n  }\r\n  return str;\r\n}\r\n\r\n/*\r\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\r\n * Digest Algorithm, as defined in RFC 1321.\r\n * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\r\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r\n * Distributed under the BSD License\r\n * See http://pajhome.org.uk/crypt/md5 for more info.\r\n */\r\n\r\n/*\r\n * Everything that isn't used by Strophe has been stripped here!\r\n */\r\n\r\nvar MD5 = (function () {\r\n    /*\r\n     * Add integers, wrapping at 2^32. This uses 16-bit operations internally\r\n     * to work around bugs in some JS interpreters.\r\n     */\r\n    var safe_add = function (x, y) {\r\n        var lsw = (x & 0xFFFF) + (y & 0xFFFF);\r\n        var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\r\n        return (msw << 16) | (lsw & 0xFFFF);\r\n    };\r\n\r\n    /*\r\n     * Bitwise rotate a 32-bit number to the left.\r\n     */\r\n    var bit_rol = function (num, cnt) {\r\n        return (num << cnt) | (num >>> (32 - cnt));\r\n    };\r\n\r\n    /*\r\n     * Convert a string to an array of little-endian words\r\n     */\r\n    var str2binl = function (str) {\r\n        var bin = [];\r\n        for(var i = 0; i < str.length * 8; i += 8)\r\n        {\r\n            bin[i>>5] |= (str.charCodeAt(i / 8) & 255) << (i%32);\r\n        }\r\n        return bin;\r\n    };\r\n\r\n    /*\r\n     * Convert an array of little-endian words to a string\r\n     */\r\n    var binl2str = function (bin) {\r\n        var str = \"\";\r\n        for(var i = 0; i < bin.length * 32; i += 8)\r\n        {\r\n            str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & 255);\r\n        }\r\n        return str;\r\n    };\r\n\r\n    /*\r\n     * Convert an array of little-endian words to a hex string.\r\n     */\r\n    var binl2hex = function (binarray) {\r\n        var hex_tab = \"0123456789abcdef\";\r\n        var str = \"\";\r\n        for(var i = 0; i < binarray.length * 4; i++)\r\n        {\r\n            str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +\r\n                hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);\r\n        }\r\n        return str;\r\n    };\r\n\r\n    /*\r\n     * These functions implement the four basic operations the algorithm uses.\r\n     */\r\n    var md5_cmn = function (q, a, b, x, s, t) {\r\n        return safe_add(bit_rol(safe_add(safe_add(a, q),safe_add(x, t)), s),b);\r\n    };\r\n\r\n    var md5_ff = function (a, b, c, d, x, s, t) {\r\n        return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);\r\n    };\r\n\r\n    var md5_gg = function (a, b, c, d, x, s, t) {\r\n        return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);\r\n    };\r\n\r\n    var md5_hh = function (a, b, c, d, x, s, t) {\r\n        return md5_cmn(b ^ c ^ d, a, b, x, s, t);\r\n    };\r\n\r\n    var md5_ii = function (a, b, c, d, x, s, t) {\r\n        return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);\r\n    };\r\n\r\n    /*\r\n     * Calculate the MD5 of an array of little-endian words, and a bit length\r\n     */\r\n    var core_md5 = function (x, len) {\r\n        /* append padding */\r\n        x[len >> 5] |= 0x80 << ((len) % 32);\r\n        x[(((len + 64) >>> 9) << 4) + 14] = len;\r\n\r\n        var a =  1732584193;\r\n        var b = -271733879;\r\n        var c = -1732584194;\r\n        var d =  271733878;\r\n\r\n        var olda, oldb, oldc, oldd;\r\n        for (var i = 0; i < x.length; i += 16)\r\n        {\r\n            olda = a;\r\n            oldb = b;\r\n            oldc = c;\r\n            oldd = d;\r\n\r\n            a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);\r\n            d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);\r\n            c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);\r\n            b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);\r\n            a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);\r\n            d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);\r\n            c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);\r\n            b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);\r\n            a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);\r\n            d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);\r\n            c = md5_ff(c, d, a, b, x[i+10], 17, -42063);\r\n            b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);\r\n            a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);\r\n            d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);\r\n            c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);\r\n            b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);\r\n\r\n            a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);\r\n            d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);\r\n            c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);\r\n            b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);\r\n            a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);\r\n            d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);\r\n            c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);\r\n            b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);\r\n            a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);\r\n            d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);\r\n            c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);\r\n            b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);\r\n            a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);\r\n            d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);\r\n            c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);\r\n            b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);\r\n\r\n            a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);\r\n            d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);\r\n            c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);\r\n            b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);\r\n            a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);\r\n            d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);\r\n            c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);\r\n            b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);\r\n            a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);\r\n            d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);\r\n            c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);\r\n            b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);\r\n            a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);\r\n            d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);\r\n            c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);\r\n            b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);\r\n\r\n            a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);\r\n            d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);\r\n            c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);\r\n            b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);\r\n            a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);\r\n            d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);\r\n            c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);\r\n            b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);\r\n            a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);\r\n            d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);\r\n            c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);\r\n            b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);\r\n            a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);\r\n            d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);\r\n            c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);\r\n            b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);\r\n\r\n            a = safe_add(a, olda);\r\n            b = safe_add(b, oldb);\r\n            c = safe_add(c, oldc);\r\n            d = safe_add(d, oldd);\r\n        }\r\n        return [a, b, c, d];\r\n    };\r\n\r\n\r\n    var obj = {\r\n        /*\r\n         * These are the functions you'll usually want to call.\r\n         * They take string arguments and return either hex or base-64 encoded\r\n         * strings.\r\n         */\r\n        hexdigest: function (s) {\r\n            return binl2hex(core_md5(str2binl(s), s.length * 8));\r\n        },\r\n\r\n        hash: function (s) {\r\n            return binl2str(core_md5(str2binl(s), s.length * 8));\r\n        }\r\n    };\r\n\r\n    return obj;\r\n})();\r\n\r\n/*\r\n    This program is distributed under the terms of the MIT license.\r\n    Please see the LICENSE file for details.\r\n\r\n    Copyright 2006-2008, OGG, LLC\r\n*/\r\n\r\n/* jshint undef: true, unused: true:, noarg: true, latedef: true */\r\n\r\n/** File: polyfills.js\r\n *  A JavaScript library for XMPP BOSH/XMPP over Websocket.\r\n *\r\n *  This file contains some polyfills used by strophe.js\r\n */\r\n\r\n/** PrivateFunction: Function.prototype.bind\r\n *  Bind a function to an instance.\r\n *\r\n *  This Function object extension method creates a bound method similar\r\n *  to those in Python.  This means that the 'this' object will point\r\n *  to the instance you want.  See\r\n *  <a href='https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind'>MDC's bind() documentation</a> and\r\n *  <a href='http://benjamin.smedbergs.us/blog/2007-01-03/bound-functions-and-function-imports-in-javascript/'>Bound Functions and Function Imports in JavaScript</a>\r\n *  for a complete explanation.\r\n *\r\n *  This extension already exists in some browsers (namely, Firefox 3), but\r\n *  we provide it to support those that don't.\r\n *\r\n *  Parameters:\r\n *    (Object) obj - The object that will become 'this' in the bound function.\r\n *    (Object) argN - An option argument that will be prepended to the\r\n *      arguments given for the function call\r\n *\r\n *  Returns:\r\n *    The bound function.\r\n */\r\nif (!Function.prototype.bind) {\r\n    Function.prototype.bind = function (obj /*, arg1, arg2, ... */)\r\n    {\r\n        var func = this;\r\n        var _slice = Array.prototype.slice;\r\n        var _concat = Array.prototype.concat;\r\n        var _args = _slice.call(arguments, 1);\r\n\r\n        return function () {\r\n            return func.apply(obj ? obj : this,\r\n                              _concat.call(_args,\r\n                                           _slice.call(arguments, 0)));\r\n        };\r\n    };\r\n}\r\n\r\n/** PrivateFunction: Array.isArray\r\n *  This is a polyfill for the ES5 Array.isArray method.\r\n */\r\nif (!Array.isArray) {\r\n    Array.isArray = function(arg) {\r\n        return Object.prototype.toString.call(arg) === '[object Array]';\r\n    };\r\n}\r\n\r\n/** PrivateFunction: Array.prototype.indexOf\r\n *  Return the index of an object in an array.\r\n *\r\n *  This function is not supplied by some JavaScript implementations, so\r\n *  we provide it if it is missing.  This code is from:\r\n *  http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Objects:Array:indexOf\r\n *\r\n *  Parameters:\r\n *    (Object) elt - The object to look for.\r\n *    (Integer) from - The index from which to start looking. (optional).\r\n *\r\n *  Returns:\r\n *    The index of elt in the array or -1 if not found.\r\n */\r\nif (!Array.prototype.indexOf)\r\n    {\r\n        Array.prototype.indexOf = function(elt /*, from*/)\r\n        {\r\n            var len = this.length;\r\n\r\n            var from = Number(arguments[1]) || 0;\r\n            from = (from < 0) ? Math.ceil(from) : Math.floor(from);\r\n            if (from < 0) {\r\n                from += len;\r\n            }\r\n\r\n            for (; from < len; from++) {\r\n                if (from in this && this[from] === elt) {\r\n                    return from;\r\n                }\r\n            }\r\n\r\n            return -1;\r\n        };\r\n    }\r\n\r\n/*\r\n    This program is distributed under the terms of the MIT license.\r\n    Please see the LICENSE file for details.\r\n\r\n    Copyright 2006-2008, OGG, LLC\r\n*/\r\n\r\n/* jshint undef: true, unused: true:, noarg: true, latedef: true */\r\n/*global document, window, setTimeout, clearTimeout, console,\r\n    ActiveXObject, Base64, MD5, DOMParser */\r\n// from sha1.js\r\n/*global core_hmac_sha1, binb2str, str_hmac_sha1, str_sha1, b64_hmac_sha1*/\r\n\r\n/** File: strophe.js\r\n *  A JavaScript library for XMPP BOSH/XMPP over Websocket.\r\n *\r\n *  This is the JavaScript version of the Strophe library.  Since JavaScript\r\n *  had no facilities for persistent TCP connections, this library uses\r\n *  Bidirectional-streams Over Synchronous HTTP (BOSH) to emulate\r\n *  a persistent, stateful, two-way connection to an XMPP server.  More\r\n *  information on BOSH can be found in XEP 124.\r\n *\r\n *  This version of Strophe also works with WebSockets.\r\n *  For more information on XMPP-over WebSocket see this RFC draft:\r\n *  http://tools.ietf.org/html/draft-ietf-xmpp-websocket-00\r\n */\r\n\r\n/* All of the Strophe globals are defined in this special function below so\r\n * that references to the globals become closures.  This will ensure that\r\n * on page reload, these references will still be available to callbacks\r\n * that are still executing.\r\n */\r\n\r\nvar Strophe;\r\n\r\n/** Function: $build\r\n *  Create a Strophe.Builder.\r\n *  This is an alias for 'new Strophe.Builder(name, attrs)'.\r\n *\r\n *  Parameters:\r\n *    (String) name - The root element name.\r\n *    (Object) attrs - The attributes for the root element in object notation.\r\n *\r\n *  Returns:\r\n *    A new Strophe.Builder object.\r\n */\r\nfunction $build(name, attrs) { return new Strophe.Builder(name, attrs); }\r\n/** Function: $msg\r\n *  Create a Strophe.Builder with a <message/> element as the root.\r\n *\r\n *  Parmaeters:\r\n *    (Object) attrs - The <message/> element attributes in object notation.\r\n *\r\n *  Returns:\r\n *    A new Strophe.Builder object.\r\n */\r\n/* jshint ignore:start */\r\nfunction $msg(attrs) { return new Strophe.Builder(\"message\", attrs); }\r\n/* jshint ignore:end */\r\n/** Function: $iq\r\n *  Create a Strophe.Builder with an <iq/> element as the root.\r\n *\r\n *  Parameters:\r\n *    (Object) attrs - The <iq/> element attributes in object notation.\r\n *\r\n *  Returns:\r\n *    A new Strophe.Builder object.\r\n */\r\nfunction $iq(attrs) { return new Strophe.Builder(\"iq\", attrs); }\r\n/** Function: $pres\r\n *  Create a Strophe.Builder with a <presence/> element as the root.\r\n *\r\n *  Parameters:\r\n *    (Object) attrs - The <presence/> element attributes in object notation.\r\n *\r\n *  Returns:\r\n *    A new Strophe.Builder object.\r\n */\r\nfunction $pres(attrs) { return new Strophe.Builder(\"presence\", attrs); }\r\n\r\n/** Class: Strophe\r\n *  An object container for all Strophe library functions.\r\n *\r\n *  This class is just a container for all the objects and constants\r\n *  used in the library.  It is not meant to be instantiated, but to\r\n *  provide a namespace for library objects, constants, and functions.\r\n */\r\nStrophe = {\r\n    /** Constant: VERSION\r\n     *  The version of the Strophe library. Unreleased builds will have\r\n     *  a version of head-HASH where HASH is a partial revision.\r\n     */\r\n    VERSION: \"1.1.4dev1\",\r\n\r\n    /** Constants: XMPP Namespace Constants\r\n     *  Common namespace constants from the XMPP RFCs and XEPs.\r\n     *\r\n     *  NS.HTTPBIND - HTTP BIND namespace from XEP 124.\r\n     *  NS.BOSH - BOSH namespace from XEP 206.\r\n     *  NS.CLIENT - Main XMPP client namespace.\r\n     *  NS.AUTH - Legacy authentication namespace.\r\n     *  NS.ROSTER - Roster operations namespace.\r\n     *  NS.PROFILE - Profile namespace.\r\n     *  NS.DISCO_INFO - Service discovery info namespace from XEP 30.\r\n     *  NS.DISCO_ITEMS - Service discovery items namespace from XEP 30.\r\n     *  NS.MUC - Multi-User Chat namespace from XEP 45.\r\n     *  NS.SASL - XMPP SASL namespace from RFC 3920.\r\n     *  NS.STREAM - XMPP Streams namespace from RFC 3920.\r\n     *  NS.BIND - XMPP Binding namespace from RFC 3920.\r\n     *  NS.SESSION - XMPP Session namespace from RFC 3920.\r\n     *  NS.XHTML_IM - XHTML-IM namespace from XEP 71.\r\n     *  NS.XHTML - XHTML body namespace from XEP 71.\r\n     */\r\n    NS: {\r\n        HTTPBIND: \"http://jabber.org/protocol/httpbind\",\r\n        BOSH: \"urn:xmpp:xbosh\",\r\n        CLIENT: \"jabber:client\",\r\n        AUTH: \"jabber:iq:auth\",\r\n        ROSTER: \"jabber:iq:roster\",\r\n        PROFILE: \"jabber:iq:profile\",\r\n        DISCO_INFO: \"http://jabber.org/protocol/disco#info\",\r\n        DISCO_ITEMS: \"http://jabber.org/protocol/disco#items\",\r\n        MUC: \"http://jabber.org/protocol/muc\",\r\n        SASL: \"urn:ietf:params:xml:ns:xmpp-sasl\",\r\n        STREAM: \"http://etherx.jabber.org/streams\",\r\n        FRAMING: \"urn:ietf:params:xml:ns:xmpp-framing\",\r\n        BIND: \"urn:ietf:params:xml:ns:xmpp-bind\",\r\n        SESSION: \"urn:ietf:params:xml:ns:xmpp-session\",\r\n        VERSION: \"jabber:iq:version\",\r\n        STANZAS: \"urn:ietf:params:xml:ns:xmpp-stanzas\",\r\n        XHTML_IM: \"http://jabber.org/protocol/xhtml-im\",\r\n        XHTML: \"http://www.w3.org/1999/xhtml\"\r\n    },\r\n\r\n\r\n    /** Constants: XHTML_IM Namespace\r\n     *  contains allowed tags, tag attributes, and css properties.\r\n     *  Used in the createHtml function to filter incoming html into the allowed XHTML-IM subset.\r\n     *  See http://xmpp.org/extensions/xep-0071.html#profile-summary for the list of recommended\r\n     *  allowed tags and their attributes.\r\n     */\r\n    XHTML: {\r\n                tags: ['a','blockquote','br','cite','em','img','li','ol','p','span','strong','ul','body'],\r\n                attributes: {\r\n                        'a':          ['href'],\r\n                        'blockquote': ['style'],\r\n                        'br':         [],\r\n                        'cite':       ['style'],\r\n                        'em':         [],\r\n                        'img':        ['src', 'alt', 'style', 'height', 'width'],\r\n                        'li':         ['style'],\r\n                        'ol':         ['style'],\r\n                        'p':          ['style'],\r\n                        'span':       ['style'],\r\n                        'strong':     [],\r\n                        'ul':         ['style'],\r\n                        'body':       []\r\n                },\r\n                css: ['background-color','color','font-family','font-size','font-style','font-weight','margin-left','margin-right','text-align','text-decoration'],\r\n                validTag: function(tag)\r\n                {\r\n                        for(var i = 0; i < Strophe.XHTML.tags.length; i++) {\r\n                                if(tag == Strophe.XHTML.tags[i]) {\r\n                                        return true;\r\n                                }\r\n                        }\r\n                        return false;\r\n                },\r\n                validAttribute: function(tag, attribute)\r\n                {\r\n                        if(typeof Strophe.XHTML.attributes[tag] !== 'undefined' && Strophe.XHTML.attributes[tag].length > 0) {\r\n                                for(var i = 0; i < Strophe.XHTML.attributes[tag].length; i++) {\r\n                                        if(attribute == Strophe.XHTML.attributes[tag][i]) {\r\n                                                return true;\r\n                                        }\r\n                                }\r\n                        }\r\n                        return false;\r\n                },\r\n                validCSS: function(style)\r\n                {\r\n                        for(var i = 0; i < Strophe.XHTML.css.length; i++) {\r\n                                if(style == Strophe.XHTML.css[i]) {\r\n                                        return true;\r\n                                }\r\n                        }\r\n                        return false;\r\n                }\r\n    },\r\n\r\n    /** Constants: Connection Status Constants\r\n     *  Connection status constants for use by the connection handler\r\n     *  callback.\r\n     *\r\n     *  Status.ERROR - An error has occurred\r\n     *  Status.CONNECTING - The connection is currently being made\r\n     *  Status.CONNFAIL - The connection attempt failed\r\n     *  Status.AUTHENTICATING - The connection is authenticating\r\n     *  Status.AUTHFAIL - The authentication attempt failed\r\n     *  Status.CONNECTED - The connection has succeeded\r\n     *  Status.DISCONNECTED - The connection has been terminated\r\n     *  Status.DISCONNECTING - The connection is currently being terminated\r\n     *  Status.ATTACHED - The connection has been attached\r\n     */\r\n    Status: {\r\n        ERROR: 0,\r\n        CONNECTING: 1,\r\n        CONNFAIL: 2,\r\n        AUTHENTICATING: 3,\r\n        AUTHFAIL: 4,\r\n        CONNECTED: 5,\r\n        DISCONNECTED: 6,\r\n        DISCONNECTING: 7,\r\n        ATTACHED: 8,\r\n        REDIRECT: 9\r\n    },\r\n\r\n    /** Constants: Log Level Constants\r\n     *  Logging level indicators.\r\n     *\r\n     *  LogLevel.DEBUG - Debug output\r\n     *  LogLevel.INFO - Informational output\r\n     *  LogLevel.WARN - Warnings\r\n     *  LogLevel.ERROR - Errors\r\n     *  LogLevel.FATAL - Fatal errors\r\n     */\r\n    LogLevel: {\r\n        DEBUG: 0,\r\n        INFO: 1,\r\n        WARN: 2,\r\n        ERROR: 3,\r\n        FATAL: 4\r\n    },\r\n\r\n    /** PrivateConstants: DOM Element Type Constants\r\n     *  DOM element types.\r\n     *\r\n     *  ElementType.NORMAL - Normal element.\r\n     *  ElementType.TEXT - Text data element.\r\n     *  ElementType.FRAGMENT - XHTML fragment element.\r\n     */\r\n    ElementType: {\r\n        NORMAL: 1,\r\n        TEXT: 3,\r\n        CDATA: 4,\r\n        FRAGMENT: 11\r\n    },\r\n\r\n    /** PrivateConstants: Timeout Values\r\n     *  Timeout values for error states.  These values are in seconds.\r\n     *  These should not be changed unless you know exactly what you are\r\n     *  doing.\r\n     *\r\n     *  TIMEOUT - Timeout multiplier. A waiting request will be considered\r\n     *      failed after Math.floor(TIMEOUT * wait) seconds have elapsed.\r\n     *      This defaults to 1.1, and with default wait, 66 seconds.\r\n     *  SECONDARY_TIMEOUT - Secondary timeout multiplier. In cases where\r\n     *      Strophe can detect early failure, it will consider the request\r\n     *      failed if it doesn't return after\r\n     *      Math.floor(SECONDARY_TIMEOUT * wait) seconds have elapsed.\r\n     *      This defaults to 0.1, and with default wait, 6 seconds.\r\n     */\r\n    TIMEOUT: 1.1,\r\n    SECONDARY_TIMEOUT: 0.1,\r\n\r\n    /** Function: addNamespace\r\n     *  This function is used to extend the current namespaces in\r\n     *  Strophe.NS.  It takes a key and a value with the key being the\r\n     *  name of the new namespace, with its actual value.\r\n     *  For example:\r\n     *  Strophe.addNamespace('PUBSUB', \"http://jabber.org/protocol/pubsub\");\r\n     *\r\n     *  Parameters:\r\n     *    (String) name - The name under which the namespace will be\r\n     *      referenced under Strophe.NS\r\n     *    (String) value - The actual namespace.\r\n     */\r\n    addNamespace: function (name, value)\r\n    {\r\n      Strophe.NS[name] = value;\r\n    },\r\n\r\n    /** Function: forEachChild\r\n     *  Map a function over some or all child elements of a given element.\r\n     *\r\n     *  This is a small convenience function for mapping a function over\r\n     *  some or all of the children of an element.  If elemName is null, all\r\n     *  children will be passed to the function, otherwise only children\r\n     *  whose tag names match elemName will be passed.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The element to operate on.\r\n     *    (String) elemName - The child element tag name filter.\r\n     *    (Function) func - The function to apply to each child.  This\r\n     *      function should take a single argument, a DOM element.\r\n     */\r\n    forEachChild: function (elem, elemName, func)\r\n    {\r\n        var i, childNode;\r\n\r\n        for (i = 0; i < elem.childNodes.length; i++) {\r\n            childNode = elem.childNodes[i];\r\n            if (childNode.nodeType == Strophe.ElementType.NORMAL &&\r\n                (!elemName || this.isTagEqual(childNode, elemName))) {\r\n                func(childNode);\r\n            }\r\n        }\r\n    },\r\n\r\n    /** Function: isTagEqual\r\n     *  Compare an element's tag name with a string.\r\n     *\r\n     *  This function is case sensitive.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) el - A DOM element.\r\n     *    (String) name - The element name.\r\n     *\r\n     *  Returns:\r\n     *    true if the element's tag name matches _el_, and false\r\n     *    otherwise.\r\n     */\r\n    isTagEqual: function (el, name)\r\n    {\r\n        return el.tagName == name;\r\n    },\r\n\r\n    /** PrivateVariable: _xmlGenerator\r\n     *  _Private_ variable that caches a DOM document to\r\n     *  generate elements.\r\n     */\r\n    _xmlGenerator: null,\r\n\r\n    /** PrivateFunction: _makeGenerator\r\n     *  _Private_ function that creates a dummy XML DOM document to serve as\r\n     *  an element and text node generator.\r\n     */\r\n    _makeGenerator: function () {\r\n        var doc;\r\n\r\n        // IE9 does implement createDocument(); however, using it will cause the browser to leak memory on page unload.\r\n        // Here, we test for presence of createDocument() plus IE's proprietary documentMode attribute, which would be\r\n                // less than 10 in the case of IE9 and below.\r\n        if (document.implementation.createDocument === undefined ||\r\n                        document.implementation.createDocument && document.documentMode && document.documentMode < 10) {\r\n            doc = this._getIEXmlDom();\r\n            doc.appendChild(doc.createElement('strophe'));\r\n        } else {\r\n            doc = document.implementation\r\n                .createDocument('jabber:client', 'strophe', null);\r\n        }\r\n\r\n        return doc;\r\n    },\r\n\r\n    /** Function: xmlGenerator\r\n     *  Get the DOM document to generate elements.\r\n     *\r\n     *  Returns:\r\n     *    The currently used DOM document.\r\n     */\r\n    xmlGenerator: function () {\r\n        if (!Strophe._xmlGenerator) {\r\n            Strophe._xmlGenerator = Strophe._makeGenerator();\r\n        }\r\n        return Strophe._xmlGenerator;\r\n    },\r\n\r\n    /** PrivateFunction: _getIEXmlDom\r\n     *  Gets IE xml doc object\r\n     *\r\n     *  Returns:\r\n     *    A Microsoft XML DOM Object\r\n     *  See Also:\r\n     *    http://msdn.microsoft.com/en-us/library/ms757837%28VS.85%29.aspx\r\n     */\r\n    _getIEXmlDom : function() {\r\n        var doc = null;\r\n        var docStrings = [\r\n            \"Msxml2.DOMDocument.6.0\",\r\n            \"Msxml2.DOMDocument.5.0\",\r\n            \"Msxml2.DOMDocument.4.0\",\r\n            \"MSXML2.DOMDocument.3.0\",\r\n            \"MSXML2.DOMDocument\",\r\n            \"MSXML.DOMDocument\",\r\n            \"Microsoft.XMLDOM\"\r\n        ];\r\n\r\n        for (var d = 0; d < docStrings.length; d++) {\r\n            if (doc === null) {\r\n                try {\r\n                    doc = new ActiveXObject(docStrings[d]);\r\n                } catch (e) {\r\n                    doc = null;\r\n                }\r\n            } else {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return doc;\r\n    },\r\n\r\n    /** Function: xmlElement\r\n     *  Create an XML DOM element.\r\n     *\r\n     *  This function creates an XML DOM element correctly across all\r\n     *  implementations. Note that these are not HTML DOM elements, which\r\n     *  aren't appropriate for XMPP stanzas.\r\n     *\r\n     *  Parameters:\r\n     *    (String) name - The name for the element.\r\n     *    (Array|Object) attrs - An optional array or object containing\r\n     *      key/value pairs to use as element attributes. The object should\r\n     *      be in the format {'key': 'value'} or {key: 'value'}. The array\r\n     *      should have the format [['key1', 'value1'], ['key2', 'value2']].\r\n     *    (String) text - The text child data for the element.\r\n     *\r\n     *  Returns:\r\n     *    A new XML DOM element.\r\n     */\r\n    xmlElement: function (name)\r\n    {\r\n        if (!name) { return null; }\r\n\r\n        var node = Strophe.xmlGenerator().createElement(name);\r\n\r\n        // FIXME: this should throw errors if args are the wrong type or\r\n        // there are more than two optional args\r\n        var a, i, k;\r\n        for (a = 1; a < arguments.length; a++) {\r\n            if (!arguments[a]) { continue; }\r\n            if (typeof(arguments[a]) == \"string\" ||\r\n                typeof(arguments[a]) == \"number\") {\r\n                node.appendChild(Strophe.xmlTextNode(arguments[a]));\r\n            } else if (typeof(arguments[a]) == \"object\" &&\r\n                       typeof(arguments[a].sort) == \"function\") {\r\n                for (i = 0; i < arguments[a].length; i++) {\r\n                    if (typeof(arguments[a][i]) == \"object\" &&\r\n                        typeof(arguments[a][i].sort) == \"function\") {\r\n                        node.setAttribute(arguments[a][i][0],\r\n                                          arguments[a][i][1]);\r\n                    }\r\n                }\r\n            } else if (typeof(arguments[a]) == \"object\") {\r\n                for (k in arguments[a]) {\r\n                    if (arguments[a].hasOwnProperty(k)) {\r\n                        node.setAttribute(k, arguments[a][k]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return node;\r\n    },\r\n\r\n    /*  Function: xmlescape\r\n     *  Excapes invalid xml characters.\r\n     *\r\n     *  Parameters:\r\n     *     (String) text - text to escape.\r\n     *\r\n     *  Returns:\r\n     *      Escaped text.\r\n     */\r\n    xmlescape: function(text)\r\n    {\r\n        text = text.replace(/\\&/g, \"&amp;\");\r\n        text = text.replace(/</g,  \"&lt;\");\r\n        text = text.replace(/>/g,  \"&gt;\");\r\n        text = text.replace(/'/g,  \"&apos;\");\r\n        text = text.replace(/\"/g,  \"&quot;\");\r\n        return text;\r\n    },\r\n\r\n    /*  Function: xmlunescape\r\n    *  Unexcapes invalid xml characters.\r\n    *\r\n    *  Parameters:\r\n    *     (String) text - text to unescape.\r\n    *\r\n    *  Returns:\r\n    *      Unescaped text.\r\n    */\r\n    xmlunescape: function(text)\r\n    {\r\n        text = text.replace(/\\&amp;/g, \"&\");\r\n        text = text.replace(/&lt;/g,  \"<\");\r\n        text = text.replace(/&gt;/g,  \">\");\r\n        text = text.replace(/&apos;/g,  \"'\");\r\n        text = text.replace(/&quot;/g,  \"\\\"\");\r\n        return text;\r\n    },\r\n\r\n    /** Function: xmlTextNode\r\n     *  Creates an XML DOM text node.\r\n     *\r\n     *  Provides a cross implementation version of document.createTextNode.\r\n     *\r\n     *  Parameters:\r\n     *    (String) text - The content of the text node.\r\n     *\r\n     *  Returns:\r\n     *    A new XML DOM text node.\r\n     */\r\n    xmlTextNode: function (text)\r\n    {\r\n        return Strophe.xmlGenerator().createTextNode(text);\r\n    },\r\n\r\n    /** Function: xmlHtmlNode\r\n     *  Creates an XML DOM html node.\r\n     *\r\n     *  Parameters:\r\n     *    (String) html - The content of the html node.\r\n     *\r\n     *  Returns:\r\n     *    A new XML DOM text node.\r\n     */\r\n    xmlHtmlNode: function (html)\r\n    {\r\n        var node;\r\n        //ensure text is escaped\r\n        if (window.DOMParser) {\r\n            var parser = new DOMParser();\r\n            node = parser.parseFromString(html, \"text/xml\");\r\n        } else {\r\n            node = new ActiveXObject(\"Microsoft.XMLDOM\");\r\n            node.async=\"false\";\r\n            node.loadXML(html);\r\n        }\r\n        return node;\r\n    },\r\n\r\n    /** Function: getText\r\n     *  Get the concatenation of all text children of an element.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - A DOM element.\r\n     *\r\n     *  Returns:\r\n     *    A String with the concatenated text of all text element children.\r\n     */\r\n    getText: function (elem)\r\n    {\r\n        if (!elem) { return null; }\r\n\r\n        var str = \"\";\r\n        if (elem.childNodes.length === 0 && elem.nodeType ==\r\n            Strophe.ElementType.TEXT) {\r\n            str += elem.nodeValue;\r\n        }\r\n\r\n        for (var i = 0; i < elem.childNodes.length; i++) {\r\n            if (elem.childNodes[i].nodeType == Strophe.ElementType.TEXT) {\r\n                str += elem.childNodes[i].nodeValue;\r\n            }\r\n        }\r\n\r\n        return Strophe.xmlescape(str);\r\n    },\r\n\r\n    /** Function: copyElement\r\n     *  Copy an XML DOM element.\r\n     *\r\n     *  This function copies a DOM element and all its descendants and returns\r\n     *  the new copy.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - A DOM element.\r\n     *\r\n     *  Returns:\r\n     *    A new, copied DOM element tree.\r\n     */\r\n    copyElement: function (elem)\r\n    {\r\n        var i, el;\r\n        if (elem.nodeType == Strophe.ElementType.NORMAL) {\r\n            el = Strophe.xmlElement(elem.tagName);\r\n\r\n            for (i = 0; i < elem.attributes.length; i++) {\r\n                el.setAttribute(elem.attributes[i].nodeName,\r\n                                elem.attributes[i].value);\r\n            }\r\n\r\n            for (i = 0; i < elem.childNodes.length; i++) {\r\n                el.appendChild(Strophe.copyElement(elem.childNodes[i]));\r\n            }\r\n        } else if (elem.nodeType == Strophe.ElementType.TEXT) {\r\n            el = Strophe.xmlGenerator().createTextNode(elem.nodeValue);\r\n        }\r\n\r\n        return el;\r\n    },\r\n\r\n\r\n    /** Function: createHtml\r\n     *  Copy an HTML DOM element into an XML DOM.\r\n     *\r\n     *  This function copies a DOM element and all its descendants and returns\r\n     *  the new copy.\r\n     *\r\n     *  Parameters:\r\n     *    (HTMLElement) elem - A DOM element.\r\n     *\r\n     *  Returns:\r\n     *    A new, copied DOM element tree.\r\n     */\r\n    createHtml: function (elem)\r\n    {\r\n        var i, el, j, tag, attribute, value, css, cssAttrs, attr, cssName, cssValue;\r\n        if (elem.nodeType == Strophe.ElementType.NORMAL) {\r\n            tag = elem.nodeName;\r\n            if(Strophe.XHTML.validTag(tag)) {\r\n                try {\r\n                    el = Strophe.xmlElement(tag);\r\n                    for(i = 0; i < Strophe.XHTML.attributes[tag].length; i++) {\r\n                        attribute = Strophe.XHTML.attributes[tag][i];\r\n                        value = elem.getAttribute(attribute);\r\n                        if(typeof value == 'undefined' || value === null || value === '' || value === false || value === 0) {\r\n                            continue;\r\n                        }\r\n                        if(attribute == 'style' && typeof value == 'object') {\r\n                            if(typeof value.cssText != 'undefined') {\r\n                                value = value.cssText; // we're dealing with IE, need to get CSS out\r\n                            }\r\n                        }\r\n                        // filter out invalid css styles\r\n                        if(attribute == 'style') {\r\n                            css = [];\r\n                            cssAttrs = value.split(';');\r\n                            for(j = 0; j < cssAttrs.length; j++) {\r\n                                attr = cssAttrs[j].split(':');\r\n                                cssName = attr[0].replace(/^\\s*/, \"\").replace(/\\s*$/, \"\").toLowerCase();\r\n                                if(Strophe.XHTML.validCSS(cssName)) {\r\n                                    cssValue = attr[1].replace(/^\\s*/, \"\").replace(/\\s*$/, \"\");\r\n                                    css.push(cssName + ': ' + cssValue);\r\n                                }\r\n                            }\r\n                            if(css.length > 0) {\r\n                                value = css.join('; ');\r\n                                el.setAttribute(attribute, value);\r\n                            }\r\n                        } else {\r\n                            el.setAttribute(attribute, value);\r\n                        }\r\n                    }\r\n\r\n                    for (i = 0; i < elem.childNodes.length; i++) {\r\n                        el.appendChild(Strophe.createHtml(elem.childNodes[i]));\r\n                    }\r\n                } catch(e) { // invalid elements\r\n                  el = Strophe.xmlTextNode('');\r\n                }\r\n            } else {\r\n                el = Strophe.xmlGenerator().createDocumentFragment();\r\n                for (i = 0; i < elem.childNodes.length; i++) {\r\n                    el.appendChild(Strophe.createHtml(elem.childNodes[i]));\r\n                }\r\n            }\r\n        } else if (elem.nodeType == Strophe.ElementType.FRAGMENT) {\r\n            el = Strophe.xmlGenerator().createDocumentFragment();\r\n            for (i = 0; i < elem.childNodes.length; i++) {\r\n                el.appendChild(Strophe.createHtml(elem.childNodes[i]));\r\n            }\r\n        } else if (elem.nodeType == Strophe.ElementType.TEXT) {\r\n            el = Strophe.xmlTextNode(elem.nodeValue);\r\n        }\r\n\r\n        return el;\r\n    },\r\n\r\n    /** Function: escapeNode\r\n     *  Escape the node part (also called local part) of a JID.\r\n     *\r\n     *  Parameters:\r\n     *    (String) node - A node (or local part).\r\n     *\r\n     *  Returns:\r\n     *    An escaped node (or local part).\r\n     */\r\n    escapeNode: function (node)\r\n    {\r\n        if (typeof node !== \"string\") { return node; }\r\n        return node.replace(/^\\s+|\\s+$/g, '')\r\n            .replace(/\\\\/g,  \"\\\\5c\")\r\n            .replace(/ /g,   \"\\\\20\")\r\n            .replace(/\\\"/g,  \"\\\\22\")\r\n            .replace(/\\&/g,  \"\\\\26\")\r\n            .replace(/\\'/g,  \"\\\\27\")\r\n            .replace(/\\//g,  \"\\\\2f\")\r\n            .replace(/:/g,   \"\\\\3a\")\r\n            .replace(/</g,   \"\\\\3c\")\r\n            .replace(/>/g,   \"\\\\3e\")\r\n            .replace(/@/g,   \"\\\\40\");\r\n    },\r\n\r\n    /** Function: unescapeNode\r\n     *  Unescape a node part (also called local part) of a JID.\r\n     *\r\n     *  Parameters:\r\n     *    (String) node - A node (or local part).\r\n     *\r\n     *  Returns:\r\n     *    An unescaped node (or local part).\r\n     */\r\n    unescapeNode: function (node)\r\n    {\r\n        if (typeof node !== \"string\") { return node; }\r\n        return node.replace(/\\\\20/g, \" \")\r\n            .replace(/\\\\22/g, '\"')\r\n            .replace(/\\\\26/g, \"&\")\r\n            .replace(/\\\\27/g, \"'\")\r\n            .replace(/\\\\2f/g, \"/\")\r\n            .replace(/\\\\3a/g, \":\")\r\n            .replace(/\\\\3c/g, \"<\")\r\n            .replace(/\\\\3e/g, \">\")\r\n            .replace(/\\\\40/g, \"@\")\r\n            .replace(/\\\\5c/g, \"\\\\\");\r\n    },\r\n\r\n    /** Function: getNodeFromJid\r\n     *  Get the node portion of a JID String.\r\n     *\r\n     *  Parameters:\r\n     *    (String) jid - A JID.\r\n     *\r\n     *  Returns:\r\n     *    A String containing the node.\r\n     */\r\n    getNodeFromJid: function (jid)\r\n    {\r\n        if (jid.indexOf(\"@\") < 0) { return null; }\r\n        return jid.split(\"@\")[0];\r\n    },\r\n\r\n    /** Function: getDomainFromJid\r\n     *  Get the domain portion of a JID String.\r\n     *\r\n     *  Parameters:\r\n     *    (String) jid - A JID.\r\n     *\r\n     *  Returns:\r\n     *    A String containing the domain.\r\n     */\r\n    getDomainFromJid: function (jid)\r\n    {\r\n        var bare = Strophe.getBareJidFromJid(jid);\r\n        if (bare.indexOf(\"@\") < 0) {\r\n            return bare;\r\n        } else {\r\n            var parts = bare.split(\"@\");\r\n            parts.splice(0, 1);\r\n            return parts.join('@');\r\n        }\r\n    },\r\n\r\n    /** Function: getResourceFromJid\r\n     *  Get the resource portion of a JID String.\r\n     *\r\n     *  Parameters:\r\n     *    (String) jid - A JID.\r\n     *\r\n     *  Returns:\r\n     *    A String containing the resource.\r\n     */\r\n    getResourceFromJid: function (jid)\r\n    {\r\n        var s = jid.split(\"/\");\r\n        if (s.length < 2) { return null; }\r\n        s.splice(0, 1);\r\n        return s.join('/');\r\n    },\r\n\r\n    /** Function: getBareJidFromJid\r\n     *  Get the bare JID from a JID String.\r\n     *\r\n     *  Parameters:\r\n     *    (String) jid - A JID.\r\n     *\r\n     *  Returns:\r\n     *    A String containing the bare JID.\r\n     */\r\n    getBareJidFromJid: function (jid)\r\n    {\r\n        return jid ? jid.split(\"/\")[0] : null;\r\n    },\r\n\r\n    /** Function: log\r\n     *  User overrideable logging function.\r\n     *\r\n     *  This function is called whenever the Strophe library calls any\r\n     *  of the logging functions.  The default implementation of this\r\n     *  function does nothing.  If client code wishes to handle the logging\r\n     *  messages, it should override this with\r\n     *  > Strophe.log = function (level, msg) {\r\n     *  >   (user code here)\r\n     *  > };\r\n     *\r\n     *  Please note that data sent and received over the wire is logged\r\n     *  via Strophe.Connection.rawInput() and Strophe.Connection.rawOutput().\r\n     *\r\n     *  The different levels and their meanings are\r\n     *\r\n     *    DEBUG - Messages useful for debugging purposes.\r\n     *    INFO - Informational messages.  This is mostly information like\r\n     *      'disconnect was called' or 'SASL auth succeeded'.\r\n     *    WARN - Warnings about potential problems.  This is mostly used\r\n     *      to report transient connection errors like request timeouts.\r\n     *    ERROR - Some error occurred.\r\n     *    FATAL - A non-recoverable fatal error occurred.\r\n     *\r\n     *  Parameters:\r\n     *    (Integer) level - The log level of the log message.  This will\r\n     *      be one of the values in Strophe.LogLevel.\r\n     *    (String) msg - The log message.\r\n     */\r\n    /* jshint ignore:start */\r\n    log: function (level, msg)\r\n    {\r\n        return;\r\n    },\r\n    /* jshint ignore:end */\r\n\r\n    /** Function: debug\r\n     *  Log a message at the Strophe.LogLevel.DEBUG level.\r\n     *\r\n     *  Parameters:\r\n     *    (String) msg - The log message.\r\n     */\r\n    debug: function(msg)\r\n    {\r\n        this.log(this.LogLevel.DEBUG, msg);\r\n    },\r\n\r\n    /** Function: info\r\n     *  Log a message at the Strophe.LogLevel.INFO level.\r\n     *\r\n     *  Parameters:\r\n     *    (String) msg - The log message.\r\n     */\r\n    info: function (msg)\r\n    {\r\n        this.log(this.LogLevel.INFO, msg);\r\n    },\r\n\r\n    /** Function: warn\r\n     *  Log a message at the Strophe.LogLevel.WARN level.\r\n     *\r\n     *  Parameters:\r\n     *    (String) msg - The log message.\r\n     */\r\n    warn: function (msg)\r\n    {\r\n        this.log(this.LogLevel.WARN, msg);\r\n    },\r\n\r\n    /** Function: error\r\n     *  Log a message at the Strophe.LogLevel.ERROR level.\r\n     *\r\n     *  Parameters:\r\n     *    (String) msg - The log message.\r\n     */\r\n    error: function (msg)\r\n    {\r\n        this.log(this.LogLevel.ERROR, msg);\r\n    },\r\n\r\n    /** Function: fatal\r\n     *  Log a message at the Strophe.LogLevel.FATAL level.\r\n     *\r\n     *  Parameters:\r\n     *    (String) msg - The log message.\r\n     */\r\n    fatal: function (msg)\r\n    {\r\n        this.log(this.LogLevel.FATAL, msg);\r\n    },\r\n\r\n    /** Function: serialize\r\n     *  Render a DOM element and all descendants to a String.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - A DOM element.\r\n     *\r\n     *  Returns:\r\n     *    The serialized element tree as a String.\r\n     */\r\n    serialize: function (elem)\r\n    {\r\n        var result;\r\n\r\n        if (!elem) { return null; }\r\n\r\n        if (typeof(elem.tree) === \"function\") {\r\n            elem = elem.tree();\r\n        }\r\n\r\n        var nodeName = elem.nodeName;\r\n        var i, child;\r\n\r\n        if (elem.getAttribute(\"_realname\")) {\r\n            nodeName = elem.getAttribute(\"_realname\");\r\n        }\r\n\r\n        result = \"<\" + nodeName;\r\n        for (i = 0; i < elem.attributes.length; i++) {\r\n               if(elem.attributes[i].nodeName != \"_realname\") {\r\n                 result += \" \" + elem.attributes[i].nodeName +\r\n                \"='\" + elem.attributes[i].value\r\n                    .replace(/&/g, \"&amp;\")\r\n                       .replace(/\\'/g, \"&apos;\")\r\n                       .replace(/>/g, \"&gt;\")\r\n                       .replace(/</g, \"&lt;\") + \"'\";\r\n               }\r\n        }\r\n\r\n        if (elem.childNodes.length > 0) {\r\n            result += \">\";\r\n            for (i = 0; i < elem.childNodes.length; i++) {\r\n                child = elem.childNodes[i];\r\n                switch( child.nodeType ){\r\n                  case Strophe.ElementType.NORMAL:\r\n                    // normal element, so recurse\r\n                    result += Strophe.serialize(child);\r\n                    break;\r\n                  case Strophe.ElementType.TEXT:\r\n                    // text element to escape values\r\n                    result += Strophe.xmlescape(child.nodeValue);\r\n                    break;\r\n                  case Strophe.ElementType.CDATA:\r\n                    // cdata section so don't escape values\r\n                    result += \"<![CDATA[\"+child.nodeValue+\"]]>\";\r\n                }\r\n            }\r\n            result += \"</\" + nodeName + \">\";\r\n        } else {\r\n            result += \"/>\";\r\n        }\r\n\r\n        return result;\r\n    },\r\n\r\n    /** PrivateVariable: _requestId\r\n     *  _Private_ variable that keeps track of the request ids for\r\n     *  connections.\r\n     */\r\n    _requestId: 0,\r\n\r\n    /** PrivateVariable: Strophe.connectionPlugins\r\n     *  _Private_ variable Used to store plugin names that need\r\n     *  initialization on Strophe.Connection construction.\r\n     */\r\n    _connectionPlugins: {},\r\n\r\n    /** Function: addConnectionPlugin\r\n     *  Extends the Strophe.Connection object with the given plugin.\r\n     *\r\n     *  Parameters:\r\n     *    (String) name - The name of the extension.\r\n     *    (Object) ptype - The plugin's prototype.\r\n     */\r\n    addConnectionPlugin: function (name, ptype)\r\n    {\r\n        Strophe._connectionPlugins[name] = ptype;\r\n    }\r\n};\r\n\r\n/** Class: Strophe.Builder\r\n *  XML DOM builder.\r\n *\r\n *  This object provides an interface similar to JQuery but for building\r\n *  DOM element easily and rapidly.  All the functions except for toString()\r\n *  and tree() return the object, so calls can be chained.  Here's an\r\n *  example using the $iq() builder helper.\r\n *  > $iq({to: 'you', from: 'me', type: 'get', id: '1'})\r\n *  >     .c('query', {xmlns: 'strophe:example'})\r\n *  >     .c('example')\r\n *  >     .toString()\r\n *  The above generates this XML fragment\r\n *  > <iq to='you' from='me' type='get' id='1'>\r\n *  >   <query xmlns='strophe:example'>\r\n *  >     <example/>\r\n *  >   </query>\r\n *  > </iq>\r\n *  The corresponding DOM manipulations to get a similar fragment would be\r\n *  a lot more tedious and probably involve several helper variables.\r\n *\r\n *  Since adding children makes new operations operate on the child, up()\r\n *  is provided to traverse up the tree.  To add two children, do\r\n *  > builder.c('child1', ...).up().c('child2', ...)\r\n *  The next operation on the Builder will be relative to the second child.\r\n */\r\n\r\n/** Constructor: Strophe.Builder\r\n *  Create a Strophe.Builder object.\r\n *\r\n *  The attributes should be passed in object notation.  For example\r\n *  > var b = new Builder('message', {to: 'you', from: 'me'});\r\n *  or\r\n *  > var b = new Builder('messsage', {'xml:lang': 'en'});\r\n *\r\n *  Parameters:\r\n *    (String) name - The name of the root element.\r\n *    (Object) attrs - The attributes for the root element in object notation.\r\n *\r\n *  Returns:\r\n *    A new Strophe.Builder.\r\n */\r\nStrophe.Builder = function (name, attrs)\r\n{\r\n    // Set correct namespace for jabber:client elements\r\n    if (name == \"presence\" || name == \"message\" || name == \"iq\") {\r\n        if (attrs && !attrs.xmlns) {\r\n            attrs.xmlns = Strophe.NS.CLIENT;\r\n        } else if (!attrs) {\r\n            attrs = {xmlns: Strophe.NS.CLIENT};\r\n        }\r\n    }\r\n\r\n    // Holds the tree being built.\r\n    this.nodeTree = Strophe.xmlElement(name, attrs);\r\n\r\n    // Points to the current operation node.\r\n    this.node = this.nodeTree;\r\n};\r\n\r\nStrophe.Builder.prototype = {\r\n    /** Function: tree\r\n     *  Return the DOM tree.\r\n     *\r\n     *  This function returns the current DOM tree as an element object.  This\r\n     *  is suitable for passing to functions like Strophe.Connection.send().\r\n     *\r\n     *  Returns:\r\n     *    The DOM tree as a element object.\r\n     */\r\n    tree: function ()\r\n    {\r\n        return this.nodeTree;\r\n    },\r\n\r\n    /** Function: toString\r\n     *  Serialize the DOM tree to a String.\r\n     *\r\n     *  This function returns a string serialization of the current DOM\r\n     *  tree.  It is often used internally to pass data to a\r\n     *  Strophe.Request object.\r\n     *\r\n     *  Returns:\r\n     *    The serialized DOM tree in a String.\r\n     */\r\n    toString: function ()\r\n    {\r\n        return Strophe.serialize(this.nodeTree);\r\n    },\r\n\r\n    /** Function: up\r\n     *  Make the current parent element the new current element.\r\n     *\r\n     *  This function is often used after c() to traverse back up the tree.\r\n     *  For example, to add two children to the same element\r\n     *  > builder.c('child1', {}).up().c('child2', {});\r\n     *\r\n     *  Returns:\r\n     *    The Stophe.Builder object.\r\n     */\r\n    up: function ()\r\n    {\r\n        this.node = this.node.parentNode;\r\n        return this;\r\n    },\r\n\r\n    /** Function: attrs\r\n     *  Add or modify attributes of the current element.\r\n     *\r\n     *  The attributes should be passed in object notation.  This function\r\n     *  does not move the current element pointer.\r\n     *\r\n     *  Parameters:\r\n     *    (Object) moreattrs - The attributes to add/modify in object notation.\r\n     *\r\n     *  Returns:\r\n     *    The Strophe.Builder object.\r\n     */\r\n    attrs: function (moreattrs)\r\n    {\r\n        for (var k in moreattrs) {\r\n            if (moreattrs.hasOwnProperty(k)) {\r\n                this.node.setAttribute(k, moreattrs[k]);\r\n            }\r\n        }\r\n        return this;\r\n    },\r\n\r\n    /** Function: c\r\n     *  Add a child to the current element and make it the new current\r\n     *  element.\r\n     *\r\n     *  This function moves the current element pointer to the child,\r\n     *  unless text is provided.  If you need to add another child, it\r\n     *  is necessary to use up() to go back to the parent in the tree.\r\n     *\r\n     *  Parameters:\r\n     *    (String) name - The name of the child.\r\n     *    (Object) attrs - The attributes of the child in object notation.\r\n     *    (String) text - The text to add to the child.\r\n     *\r\n     *  Returns:\r\n     *    The Strophe.Builder object.\r\n     */\r\n    c: function (name, attrs, text)\r\n    {\r\n        var child = Strophe.xmlElement(name, attrs, text);\r\n        this.node.appendChild(child);\r\n        if (!text) {\r\n            this.node = child;\r\n        }\r\n        return this;\r\n    },\r\n\r\n    /** Function: cnode\r\n     *  Add a child to the current element and make it the new current\r\n     *  element.\r\n     *\r\n     *  This function is the same as c() except that instead of using a\r\n     *  name and an attributes object to create the child it uses an\r\n     *  existing DOM element object.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - A DOM element.\r\n     *\r\n     *  Returns:\r\n     *    The Strophe.Builder object.\r\n     */\r\n    cnode: function (elem)\r\n    {\r\n        var impNode;\r\n        var xmlGen = Strophe.xmlGenerator();\r\n        try {\r\n            impNode = (xmlGen.importNode !== undefined);\r\n        }\r\n        catch (e) {\r\n            impNode = false;\r\n        }\r\n        var newElem = impNode ?\r\n                      xmlGen.importNode(elem, true) :\r\n                      Strophe.copyElement(elem);\r\n        this.node.appendChild(newElem);\r\n        this.node = newElem;\r\n        return this;\r\n    },\r\n\r\n    /** Function: t\r\n     *  Add a child text element.\r\n     *\r\n     *  This *does not* make the child the new current element since there\r\n     *  are no children of text elements.\r\n     *\r\n     *  Parameters:\r\n     *    (String) text - The text data to append to the current element.\r\n     *\r\n     *  Returns:\r\n     *    The Strophe.Builder object.\r\n     */\r\n    t: function (text)\r\n    {\r\n        var child = Strophe.xmlTextNode(text);\r\n        this.node.appendChild(child);\r\n        return this;\r\n    },\r\n\r\n    /** Function: h\r\n     *  Replace current element contents with the HTML passed in.\r\n     *\r\n     *  This *does not* make the child the new current element\r\n     *\r\n     *  Parameters:\r\n     *    (String) html - The html to insert as contents of current element.\r\n     *\r\n     *  Returns:\r\n     *    The Strophe.Builder object.\r\n     */\r\n    h: function (html)\r\n    {\r\n        var fragment = document.createElement('body');\r\n\r\n        // force the browser to try and fix any invalid HTML tags\r\n        fragment.innerHTML = html;\r\n\r\n        // copy cleaned html into an xml dom\r\n        var xhtml = Strophe.createHtml(fragment);\r\n\r\n        while(xhtml.childNodes.length > 0) {\r\n            this.node.appendChild(xhtml.childNodes[0]);\r\n        }\r\n        return this;\r\n    }\r\n};\r\n\r\n/** PrivateClass: Strophe.Handler\r\n *  _Private_ helper class for managing stanza handlers.\r\n *\r\n *  A Strophe.Handler encapsulates a user provided callback function to be\r\n *  executed when matching stanzas are received by the connection.\r\n *  Handlers can be either one-off or persistant depending on their\r\n *  return value. Returning true will cause a Handler to remain active, and\r\n *  returning false will remove the Handler.\r\n *\r\n *  Users will not use Strophe.Handler objects directly, but instead they\r\n *  will use Strophe.Connection.addHandler() and\r\n *  Strophe.Connection.deleteHandler().\r\n */\r\n\r\n/** PrivateConstructor: Strophe.Handler\r\n *  Create and initialize a new Strophe.Handler.\r\n *\r\n *  Parameters:\r\n *    (Function) handler - A function to be executed when the handler is run.\r\n *    (String) ns - The namespace to match.\r\n *    (String) name - The element name to match.\r\n *    (String) type - The element type to match.\r\n *    (String) id - The element id attribute to match.\r\n *    (String) from - The element from attribute to match.\r\n *    (Object) options - Handler options\r\n *\r\n *  Returns:\r\n *    A new Strophe.Handler object.\r\n */\r\nStrophe.Handler = function (handler, ns, name, type, id, from, options)\r\n{\r\n    this.handler = handler;\r\n    this.ns = ns;\r\n    this.name = name;\r\n    this.type = type;\r\n    this.id = id;\r\n    this.options = options || {matchBare: false};\r\n\r\n    // default matchBare to false if undefined\r\n    if (!this.options.matchBare) {\r\n        this.options.matchBare = false;\r\n    }\r\n\r\n    if (this.options.matchBare) {\r\n        this.from = from ? Strophe.getBareJidFromJid(from) : null;\r\n    } else {\r\n        this.from = from;\r\n    }\r\n\r\n    // whether the handler is a user handler or a system handler\r\n    this.user = true;\r\n};\r\n\r\nStrophe.Handler.prototype = {\r\n    /** PrivateFunction: isMatch\r\n     *  Tests if a stanza matches the Strophe.Handler.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The XML element to test.\r\n     *\r\n     *  Returns:\r\n     *    true if the stanza matches and false otherwise.\r\n     */\r\n    isMatch: function (elem)\r\n    {\r\n        var nsMatch;\r\n        var from = null;\r\n\r\n        if (this.options.matchBare) {\r\n            from = Strophe.getBareJidFromJid(elem.getAttribute('from'));\r\n        } else {\r\n            from = elem.getAttribute('from');\r\n        }\r\n\r\n        nsMatch = false;\r\n        if (!this.ns) {\r\n            nsMatch = true;\r\n        } else {\r\n            var that = this;\r\n            Strophe.forEachChild(elem, null, function (elem) {\r\n                if (elem.getAttribute(\"xmlns\") == that.ns) {\r\n                    nsMatch = true;\r\n                }\r\n            });\r\n\r\n            nsMatch = nsMatch || elem.getAttribute(\"xmlns\") == this.ns;\r\n        }\r\n\r\n        var elem_type = elem.getAttribute(\"type\");\r\n        if (nsMatch &&\r\n            (!this.name || Strophe.isTagEqual(elem, this.name)) &&\r\n            (!this.type || (Array.isArray(this.type) ? this.type.indexOf(elem_type) != -1 : elem_type == this.type)) &&\r\n            (!this.id || elem.getAttribute(\"id\") == this.id) &&\r\n            (!this.from || from == this.from)) {\r\n                return true;\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /** PrivateFunction: run\r\n     *  Run the callback on a matching stanza.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The DOM element that triggered the\r\n     *      Strophe.Handler.\r\n     *\r\n     *  Returns:\r\n     *    A boolean indicating if the handler should remain active.\r\n     */\r\n    run: function (elem)\r\n    {\r\n        var result = null;\r\n        try {\r\n            result = this.handler(elem);\r\n        } catch (e) {\r\n            if (e.sourceURL) {\r\n                Strophe.fatal(\"error: \" + this.handler +\r\n                              \" \" + e.sourceURL + \":\" +\r\n                              e.line + \" - \" + e.name + \": \" + e.message);\r\n            } else if (e.fileName) {\r\n                if (typeof(console) != \"undefined\") {\r\n                    console.trace();\r\n                    console.error(this.handler, \" - error - \", e, e.message);\r\n                }\r\n                Strophe.fatal(\"error: \" + this.handler + \" \" +\r\n                              e.fileName + \":\" + e.lineNumber + \" - \" +\r\n                              e.name + \": \" + e.message);\r\n            } else {\r\n                Strophe.fatal(\"error: \" + e.message + \"\\n\" + e.stack);\r\n            }\r\n\r\n            throw e;\r\n        }\r\n\r\n        return result;\r\n    },\r\n\r\n    /** PrivateFunction: toString\r\n     *  Get a String representation of the Strophe.Handler object.\r\n     *\r\n     *  Returns:\r\n     *    A String.\r\n     */\r\n    toString: function ()\r\n    {\r\n        return \"{Handler: \" + this.handler + \"(\" + this.name + \",\" +\r\n            this.id + \",\" + this.ns + \")}\";\r\n    }\r\n};\r\n\r\n/** PrivateClass: Strophe.TimedHandler\r\n *  _Private_ helper class for managing timed handlers.\r\n *\r\n *  A Strophe.TimedHandler encapsulates a user provided callback that\r\n *  should be called after a certain period of time or at regular\r\n *  intervals.  The return value of the callback determines whether the\r\n *  Strophe.TimedHandler will continue to fire.\r\n *\r\n *  Users will not use Strophe.TimedHandler objects directly, but instead\r\n *  they will use Strophe.Connection.addTimedHandler() and\r\n *  Strophe.Connection.deleteTimedHandler().\r\n */\r\n\r\n/** PrivateConstructor: Strophe.TimedHandler\r\n *  Create and initialize a new Strophe.TimedHandler object.\r\n *\r\n *  Parameters:\r\n *    (Integer) period - The number of milliseconds to wait before the\r\n *      handler is called.\r\n *    (Function) handler - The callback to run when the handler fires.  This\r\n *      function should take no arguments.\r\n *\r\n *  Returns:\r\n *    A new Strophe.TimedHandler object.\r\n */\r\nStrophe.TimedHandler = function (period, handler)\r\n{\r\n    this.period = period;\r\n    this.handler = handler;\r\n\r\n    this.lastCalled = new Date().getTime();\r\n    this.user = true;\r\n};\r\n\r\nStrophe.TimedHandler.prototype = {\r\n    /** PrivateFunction: run\r\n     *  Run the callback for the Strophe.TimedHandler.\r\n     *\r\n     *  Returns:\r\n     *    true if the Strophe.TimedHandler should be called again, and false\r\n     *      otherwise.\r\n     */\r\n    run: function ()\r\n    {\r\n        this.lastCalled = new Date().getTime();\r\n        return this.handler();\r\n    },\r\n\r\n    /** PrivateFunction: reset\r\n     *  Reset the last called time for the Strophe.TimedHandler.\r\n     */\r\n    reset: function ()\r\n    {\r\n        this.lastCalled = new Date().getTime();\r\n    },\r\n\r\n    /** PrivateFunction: toString\r\n     *  Get a string representation of the Strophe.TimedHandler object.\r\n     *\r\n     *  Returns:\r\n     *    The string representation.\r\n     */\r\n    toString: function ()\r\n    {\r\n        return \"{TimedHandler: \" + this.handler + \"(\" + this.period +\")}\";\r\n    }\r\n};\r\n\r\n/** Class: Strophe.Connection\r\n *  XMPP Connection manager.\r\n *\r\n *  This class is the main part of Strophe.  It manages a BOSH connection\r\n *  to an XMPP server and dispatches events to the user callbacks as\r\n *  data arrives.  It supports SASL PLAIN, SASL DIGEST-MD5, SASL SCRAM-SHA1\r\n *  and legacy authentication.\r\n *\r\n *  After creating a Strophe.Connection object, the user will typically\r\n *  call connect() with a user supplied callback to handle connection level\r\n *  events like authentication failure, disconnection, or connection\r\n *  complete.\r\n *\r\n *  The user will also have several event handlers defined by using\r\n *  addHandler() and addTimedHandler().  These will allow the user code to\r\n *  respond to interesting stanzas or do something periodically with the\r\n *  connection.  These handlers will be active once authentication is\r\n *  finished.\r\n *\r\n *  To send data to the connection, use send().\r\n */\r\n\r\n/** Constructor: Strophe.Connection\r\n *  Create and initialize a Strophe.Connection object.\r\n *\r\n *  The transport-protocol for this connection will be chosen automatically\r\n *  based on the given service parameter. URLs starting with \"ws://\" or\r\n *  \"wss://\" will use WebSockets, URLs starting with \"http://\", \"https://\"\r\n *  or without a protocol will use BOSH.\r\n *\r\n *  To make Strophe connect to the current host you can leave out the protocol\r\n *  and host part and just pass the path, e.g.\r\n *\r\n *  > var conn = new Strophe.Connection(\"/http-bind/\");\r\n *\r\n *  WebSocket options:\r\n *\r\n *  If you want to connect to the current host with a WebSocket connection you\r\n *  can tell Strophe to use WebSockets through a \"protocol\" attribute in the\r\n *  optional options parameter. Valid values are \"ws\" for WebSocket and \"wss\"\r\n *  for Secure WebSocket.\r\n *  So to connect to \"wss://CURRENT_HOSTNAME/xmpp-websocket\" you would call\r\n *\r\n *  > var conn = new Strophe.Connection(\"/xmpp-websocket/\", {protocol: \"wss\"});\r\n *\r\n *  Note that relative URLs _NOT_ starting with a \"/\" will also include the path\r\n *  of the current site.\r\n *\r\n *  Also because downgrading security is not permitted by browsers, when using\r\n *  relative URLs both BOSH and WebSocket connections will use their secure\r\n *  variants if the current connection to the site is also secure (https).\r\n *\r\n *  BOSH options:\r\n *\r\n *  by adding \"sync\" to the options, you can control if requests will\r\n *  be made synchronously or not. The default behaviour is asynchronous.\r\n *  If you want to make requests synchronous, make \"sync\" evaluate to true:\r\n *  > var conn = new Strophe.Connection(\"/http-bind/\", {sync: true});\r\n *  You can also toggle this on an already established connection:\r\n *  > conn.options.sync = true;\r\n *\r\n *\r\n *  Parameters:\r\n *    (String) service - The BOSH or WebSocket service URL.\r\n *    (Object) options - A hash of configuration options\r\n *\r\n *  Returns:\r\n *    A new Strophe.Connection object.\r\n */\r\nStrophe.Connection = function (service, options)\r\n{\r\n    // The service URL\r\n    this.service = service;\r\n\r\n    // Configuration options\r\n    this.options = options || {};\r\n    var proto = this.options.protocol || \"\";\r\n\r\n    // Select protocal based on service or options\r\n    if (service.indexOf(\"ws:\") === 0 || service.indexOf(\"wss:\") === 0 ||\r\n            proto.indexOf(\"ws\") === 0) {\r\n        this._proto = new Strophe.Websocket(this);\r\n    } else {\r\n        this._proto = new Strophe.Bosh(this);\r\n    }\r\n    /* The connected JID. */\r\n    this.jid = \"\";\r\n    /* the JIDs domain */\r\n    this.domain = null;\r\n    /* stream:features */\r\n    this.features = null;\r\n\r\n    // SASL\r\n    this._sasl_data = {};\r\n    this.do_session = false;\r\n    this.do_bind = false;\r\n\r\n    // handler lists\r\n    this.timedHandlers = [];\r\n    this.handlers = [];\r\n    this.removeTimeds = [];\r\n    this.removeHandlers = [];\r\n    this.addTimeds = [];\r\n    this.addHandlers = [];\r\n\r\n    this._authentication = {};\r\n    this._idleTimeout = null;\r\n    this._disconnectTimeout = null;\r\n\r\n    this.do_authentication = true;\r\n    this.authenticated = false;\r\n    this.disconnecting = false;\r\n    this.connected = false;\r\n\r\n    this.paused = false;\r\n\r\n    this._data = [];\r\n    this._uniqueId = 0;\r\n\r\n    this._sasl_success_handler = null;\r\n    this._sasl_failure_handler = null;\r\n    this._sasl_challenge_handler = null;\r\n\r\n    // Max retries before disconnecting\r\n    this.maxRetries = 5;\r\n\r\n    // setup onIdle callback every 1/10th of a second\r\n    this._idleTimeout = setTimeout(this._onIdle.bind(this), 100);\r\n\r\n    // initialize plugins\r\n    for (var k in Strophe._connectionPlugins) {\r\n        if (Strophe._connectionPlugins.hasOwnProperty(k)) {\r\n            var ptype = Strophe._connectionPlugins[k];\r\n            // jslint complaints about the below line, but this is fine\r\n            var F = function () {}; // jshint ignore:line\r\n            F.prototype = ptype;\r\n            this[k] = new F();\r\n            this[k].init(this);\r\n        }\r\n    }\r\n};\r\n\r\nStrophe.Connection.prototype = {\r\n    /** Function: reset\r\n     *  Reset the connection.\r\n     *\r\n     *  This function should be called after a connection is disconnected\r\n     *  before that connection is reused.\r\n     */\r\n    reset: function ()\r\n    {\r\n        this._proto._reset();\r\n\r\n        // SASL\r\n        this.do_session = false;\r\n        this.do_bind = false;\r\n\r\n        // handler lists\r\n        this.timedHandlers = [];\r\n        this.handlers = [];\r\n        this.removeTimeds = [];\r\n        this.removeHandlers = [];\r\n        this.addTimeds = [];\r\n        this.addHandlers = [];\r\n        this._authentication = {};\r\n\r\n        this.authenticated = false;\r\n        this.disconnecting = false;\r\n        this.connected = false;\r\n\r\n        this._data = [];\r\n        this._requests = [];\r\n        this._uniqueId = 0;\r\n    },\r\n\r\n    /** Function: pause\r\n     *  Pause the request manager.\r\n     *\r\n     *  This will prevent Strophe from sending any more requests to the\r\n     *  server.  This is very useful for temporarily pausing\r\n     *  BOSH-Connections while a lot of send() calls are happening quickly.\r\n     *  This causes Strophe to send the data in a single request, saving\r\n     *  many request trips.\r\n     */\r\n    pause: function ()\r\n    {\r\n        this.paused = true;\r\n    },\r\n\r\n    /** Function: resume\r\n     *  Resume the request manager.\r\n     *\r\n     *  This resumes after pause() has been called.\r\n     */\r\n    resume: function ()\r\n    {\r\n        this.paused = false;\r\n    },\r\n\r\n    /** Function: getUniqueId\r\n     *  Generate a unique ID for use in <iq/> elements.\r\n     *\r\n     *  All <iq/> stanzas are required to have unique id attributes.  This\r\n     *  function makes creating these easy.  Each connection instance has\r\n     *  a counter which starts from zero, and the value of this counter\r\n     *  plus a colon followed by the suffix becomes the unique id. If no\r\n     *  suffix is supplied, the counter is used as the unique id.\r\n     *\r\n     *  Suffixes are used to make debugging easier when reading the stream\r\n     *  data, and their use is recommended.  The counter resets to 0 for\r\n     *  every new connection for the same reason.  For connections to the\r\n     *  same server that authenticate the same way, all the ids should be\r\n     *  the same, which makes it easy to see changes.  This is useful for\r\n     *  automated testing as well.\r\n     *\r\n     *  Parameters:\r\n     *    (String) suffix - A optional suffix to append to the id.\r\n     *\r\n     *  Returns:\r\n     *    A unique string to be used for the id attribute.\r\n     */\r\n    getUniqueId: function (suffix)\r\n    {\r\n        if (typeof(suffix) == \"string\" || typeof(suffix) == \"number\") {\r\n            return ++this._uniqueId + \":\" + suffix;\r\n        } else {\r\n            return ++this._uniqueId + \"\";\r\n        }\r\n    },\r\n\r\n    /** Function: connect\r\n     *  Starts the connection process.\r\n     *\r\n     *  As the connection process proceeds, the user supplied callback will\r\n     *  be triggered multiple times with status updates.  The callback\r\n     *  should take two arguments - the status code and the error condition.\r\n     *\r\n     *  The status code will be one of the values in the Strophe.Status\r\n     *  constants.  The error condition will be one of the conditions\r\n     *  defined in RFC 3920 or the condition 'strophe-parsererror'.\r\n     *\r\n     *  The Parameters _wait_, _hold_ and _route_ are optional and only relevant\r\n     *  for BOSH connections. Please see XEP 124 for a more detailed explanation\r\n     *  of the optional parameters.\r\n     *\r\n     *  Parameters:\r\n     *    (String) jid - The user's JID.  This may be a bare JID,\r\n     *      or a full JID.  If a node is not supplied, SASL ANONYMOUS\r\n     *      authentication will be attempted.\r\n     *    (String) pass - The user's password.\r\n     *    (Function) callback - The connect callback function.\r\n     *    (Integer) wait - The optional HTTPBIND wait value.  This is the\r\n     *      time the server will wait before returning an empty result for\r\n     *      a request.  The default setting of 60 seconds is recommended.\r\n     *    (Integer) hold - The optional HTTPBIND hold value.  This is the\r\n     *      number of connections the server will hold at one time.  This\r\n     *      should almost always be set to 1 (the default).\r\n     *    (String) route - The optional route value.\r\n     */\r\n    connect: function (jid, pass, callback, wait, hold, route)\r\n    {\r\n        this.jid = jid;\r\n        /** Variable: authzid\r\n         *  Authorization identity.\r\n         */\r\n        this.authzid = Strophe.getBareJidFromJid(this.jid);\r\n        /** Variable: authcid\r\n         *  Authentication identity (User name).\r\n         */\r\n        this.authcid = Strophe.getNodeFromJid(this.jid);\r\n        /** Variable: pass\r\n         *  Authentication identity (User password).\r\n         */\r\n        this.pass = pass;\r\n        /** Variable: servtype\r\n         *  Digest MD5 compatibility.\r\n         */\r\n        this.servtype = \"xmpp\";\r\n        this.connect_callback = callback;\r\n        this.disconnecting = false;\r\n        this.connected = false;\r\n        this.authenticated = false;\r\n\r\n        // parse jid for domain\r\n        this.domain = Strophe.getDomainFromJid(this.jid);\r\n\r\n        this._changeConnectStatus(Strophe.Status.CONNECTING, null);\r\n\r\n        this._proto._connect(wait, hold, route);\r\n    },\r\n\r\n    /** Function: attach\r\n     *  Attach to an already created and authenticated BOSH session.\r\n     *\r\n     *  This function is provided to allow Strophe to attach to BOSH\r\n     *  sessions which have been created externally, perhaps by a Web\r\n     *  application.  This is often used to support auto-login type features\r\n     *  without putting user credentials into the page.\r\n     *\r\n     *  Parameters:\r\n     *    (String) jid - The full JID that is bound by the session.\r\n     *    (String) sid - The SID of the BOSH session.\r\n     *    (String) rid - The current RID of the BOSH session.  This RID\r\n     *      will be used by the next request.\r\n     *    (Function) callback The connect callback function.\r\n     *    (Integer) wait - The optional HTTPBIND wait value.  This is the\r\n     *      time the server will wait before returning an empty result for\r\n     *      a request.  The default setting of 60 seconds is recommended.\r\n     *      Other settings will require tweaks to the Strophe.TIMEOUT value.\r\n     *    (Integer) hold - The optional HTTPBIND hold value.  This is the\r\n     *      number of connections the server will hold at one time.  This\r\n     *      should almost always be set to 1 (the default).\r\n     *    (Integer) wind - The optional HTTBIND window value.  This is the\r\n     *      allowed range of request ids that are valid.  The default is 5.\r\n     */\r\n    attach: function (jid, sid, rid, callback, wait, hold, wind)\r\n    {\r\n        this._proto._attach(jid, sid, rid, callback, wait, hold, wind);\r\n    },\r\n\r\n    /** Function: xmlInput\r\n     *  User overrideable function that receives XML data coming into the\r\n     *  connection.\r\n     *\r\n     *  The default function does nothing.  User code can override this with\r\n     *  > Strophe.Connection.xmlInput = function (elem) {\r\n     *  >   (user code)\r\n     *  > };\r\n     *\r\n     *  Due to limitations of current Browsers' XML-Parsers the opening and closing\r\n     *  <stream> tag for WebSocket-Connoctions will be passed as selfclosing here.\r\n     *\r\n     *  BOSH-Connections will have all stanzas wrapped in a <body> tag. See\r\n     *  <Strophe.Bosh.strip> if you want to strip this tag.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The XML data received by the connection.\r\n     */\r\n    /* jshint unused:false */\r\n    xmlInput: function (elem)\r\n    {\r\n        return;\r\n    },\r\n    /* jshint unused:true */\r\n\r\n    /** Function: xmlOutput\r\n     *  User overrideable function that receives XML data sent to the\r\n     *  connection.\r\n     *\r\n     *  The default function does nothing.  User code can override this with\r\n     *  > Strophe.Connection.xmlOutput = function (elem) {\r\n     *  >   (user code)\r\n     *  > };\r\n     *\r\n     *  Due to limitations of current Browsers' XML-Parsers the opening and closing\r\n     *  <stream> tag for WebSocket-Connoctions will be passed as selfclosing here.\r\n     *\r\n     *  BOSH-Connections will have all stanzas wrapped in a <body> tag. See\r\n     *  <Strophe.Bosh.strip> if you want to strip this tag.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The XMLdata sent by the connection.\r\n     */\r\n    /* jshint unused:false */\r\n    xmlOutput: function (elem)\r\n    {\r\n        return;\r\n    },\r\n    /* jshint unused:true */\r\n\r\n    /** Function: rawInput\r\n     *  User overrideable function that receives raw data coming into the\r\n     *  connection.\r\n     *\r\n     *  The default function does nothing.  User code can override this with\r\n     *  > Strophe.Connection.rawInput = function (data) {\r\n     *  >   (user code)\r\n     *  > };\r\n     *\r\n     *  Parameters:\r\n     *    (String) data - The data received by the connection.\r\n     */\r\n    /* jshint unused:false */\r\n    rawInput: function (data)\r\n    {\r\n        return;\r\n    },\r\n    /* jshint unused:true */\r\n\r\n    /** Function: rawOutput\r\n     *  User overrideable function that receives raw data sent to the\r\n     *  connection.\r\n     *\r\n     *  The default function does nothing.  User code can override this with\r\n     *  > Strophe.Connection.rawOutput = function (data) {\r\n     *  >   (user code)\r\n     *  > };\r\n     *\r\n     *  Parameters:\r\n     *    (String) data - The data sent by the connection.\r\n     */\r\n    /* jshint unused:false */\r\n    rawOutput: function (data)\r\n    {\r\n        return;\r\n    },\r\n    /* jshint unused:true */\r\n\r\n    /** Function: send\r\n     *  Send a stanza.\r\n     *\r\n     *  This function is called to push data onto the send queue to\r\n     *  go out over the wire.  Whenever a request is sent to the BOSH\r\n     *  server, all pending data is sent and the queue is flushed.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement |\r\n     *     [XMLElement] |\r\n     *     Strophe.Builder) elem - The stanza to send.\r\n     */\r\n    send: function (elem)\r\n    {\r\n        if (elem === null) { return ; }\r\n        if (typeof(elem.sort) === \"function\") {\r\n            for (var i = 0; i < elem.length; i++) {\r\n                this._queueData(elem[i]);\r\n            }\r\n        } else if (typeof(elem.tree) === \"function\") {\r\n            this._queueData(elem.tree());\r\n        } else {\r\n            this._queueData(elem);\r\n        }\r\n\r\n        this._proto._send();\r\n    },\r\n\r\n    /** Function: flush\r\n     *  Immediately send any pending outgoing data.\r\n     *\r\n     *  Normally send() queues outgoing data until the next idle period\r\n     *  (100ms), which optimizes network use in the common cases when\r\n     *  several send()s are called in succession. flush() can be used to\r\n     *  immediately send all pending data.\r\n     */\r\n    flush: function ()\r\n    {\r\n        // cancel the pending idle period and run the idle function\r\n        // immediately\r\n        clearTimeout(this._idleTimeout);\r\n        this._onIdle();\r\n    },\r\n\r\n    /** Function: sendIQ\r\n     *  Helper function to send IQ stanzas.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The stanza to send.\r\n     *    (Function) callback - The callback function for a successful request.\r\n     *    (Function) errback - The callback function for a failed or timed\r\n     *      out request.  On timeout, the stanza will be null.\r\n     *    (Integer) timeout - The time specified in milliseconds for a\r\n     *      timeout to occur.\r\n     *\r\n     *  Returns:\r\n     *    The id used to send the IQ.\r\n    */\r\n    sendIQ: function(elem, callback, errback, timeout) {\r\n        var timeoutHandler = null;\r\n        var that = this;\r\n\r\n        if (typeof(elem.tree) === \"function\") {\r\n            elem = elem.tree();\r\n        }\r\n        var id = elem.getAttribute('id');\r\n\r\n        // inject id if not found\r\n        if (!id) {\r\n            id = this.getUniqueId(\"sendIQ\");\r\n            elem.setAttribute(\"id\", id);\r\n        }\r\n\r\n        var expectedFrom = elem.getAttribute(\"to\");\r\n        var fulljid = this.jid;\r\n\r\n        var handler = this.addHandler(function (stanza) {\r\n            // remove timeout handler if there is one\r\n            if (timeoutHandler) {\r\n                that.deleteTimedHandler(timeoutHandler);\r\n            }\r\n\r\n            var acceptable = false;\r\n            var from = stanza.getAttribute(\"from\");\r\n            if (from === expectedFrom ||\r\n               (expectedFrom === null &&\r\n                   (from === Strophe.getBareJidFromJid(fulljid) ||\r\n                    from === Strophe.getDomainFromJid(fulljid) ||\r\n                    from === fulljid))) {\r\n                acceptable = true;\r\n            }\r\n\r\n            if (!acceptable) {\r\n                throw {\r\n                    name: \"StropheError\",\r\n                    message: \"Got answer to IQ from wrong jid:\" + from +\r\n                             \"\\nExpected jid: \" + expectedFrom\r\n                };\r\n            }\r\n\r\n            var iqtype = stanza.getAttribute('type');\r\n            if (iqtype == 'result') {\r\n                if (callback) {\r\n                    callback(stanza);\r\n                }\r\n            } else if (iqtype == 'error') {\r\n                if (errback) {\r\n                    errback(stanza);\r\n                }\r\n            } else {\r\n                throw {\r\n                    name: \"StropheError\",\r\n                    message: \"Got bad IQ type of \" + iqtype\r\n                };\r\n            }\r\n        }, null, 'iq', ['error', 'result'], id);\r\n\r\n        // if timeout specified, setup timeout handler.\r\n        if (timeout) {\r\n            timeoutHandler = this.addTimedHandler(timeout, function () {\r\n                // get rid of normal handler\r\n                that.deleteHandler(handler);\r\n                // call errback on timeout with null stanza\r\n                if (errback) {\r\n                    errback(null);\r\n                }\r\n                return false;\r\n            });\r\n        }\r\n        this.send(elem);\r\n        return id;\r\n    },\r\n\r\n    /** PrivateFunction: _queueData\r\n     *  Queue outgoing data for later sending.  Also ensures that the data\r\n     *  is a DOMElement.\r\n     */\r\n    _queueData: function (element) {\r\n        if (element === null ||\r\n            !element.tagName ||\r\n            !element.childNodes) {\r\n            throw {\r\n                name: \"StropheError\",\r\n                message: \"Cannot queue non-DOMElement.\"\r\n            };\r\n        }\r\n\r\n        this._data.push(element);\r\n    },\r\n\r\n    /** PrivateFunction: _sendRestart\r\n     *  Send an xmpp:restart stanza.\r\n     */\r\n    _sendRestart: function ()\r\n    {\r\n        this._data.push(\"restart\");\r\n\r\n        this._proto._sendRestart();\r\n\r\n        this._idleTimeout = setTimeout(this._onIdle.bind(this), 100);\r\n    },\r\n\r\n    /** Function: addTimedHandler\r\n     *  Add a timed handler to the connection.\r\n     *\r\n     *  This function adds a timed handler.  The provided handler will\r\n     *  be called every period milliseconds until it returns false,\r\n     *  the connection is terminated, or the handler is removed.  Handlers\r\n     *  that wish to continue being invoked should return true.\r\n     *\r\n     *  Because of method binding it is necessary to save the result of\r\n     *  this function if you wish to remove a handler with\r\n     *  deleteTimedHandler().\r\n     *\r\n     *  Note that user handlers are not active until authentication is\r\n     *  successful.\r\n     *\r\n     *  Parameters:\r\n     *    (Integer) period - The period of the handler.\r\n     *    (Function) handler - The callback function.\r\n     *\r\n     *  Returns:\r\n     *    A reference to the handler that can be used to remove it.\r\n     */\r\n    addTimedHandler: function (period, handler)\r\n    {\r\n        var thand = new Strophe.TimedHandler(period, handler);\r\n        this.addTimeds.push(thand);\r\n        return thand;\r\n    },\r\n\r\n    /** Function: deleteTimedHandler\r\n     *  Delete a timed handler for a connection.\r\n     *\r\n     *  This function removes a timed handler from the connection.  The\r\n     *  handRef parameter is *not* the function passed to addTimedHandler(),\r\n     *  but is the reference returned from addTimedHandler().\r\n     *\r\n     *  Parameters:\r\n     *    (Strophe.TimedHandler) handRef - The handler reference.\r\n     */\r\n    deleteTimedHandler: function (handRef)\r\n    {\r\n        // this must be done in the Idle loop so that we don't change\r\n        // the handlers during iteration\r\n        this.removeTimeds.push(handRef);\r\n    },\r\n\r\n    /** Function: addHandler\r\n     *  Add a stanza handler for the connection.\r\n     *\r\n     *  This function adds a stanza handler to the connection.  The\r\n     *  handler callback will be called for any stanza that matches\r\n     *  the parameters.  Note that if multiple parameters are supplied,\r\n     *  they must all match for the handler to be invoked.\r\n     *\r\n     *  The handler will receive the stanza that triggered it as its argument.\r\n     *  *The handler should return true if it is to be invoked again;\r\n     *  returning false will remove the handler after it returns.*\r\n     *\r\n     *  As a convenience, the ns parameters applies to the top level element\r\n     *  and also any of its immediate children.  This is primarily to make\r\n     *  matching /iq/query elements easy.\r\n     *\r\n     *  The options argument contains handler matching flags that affect how\r\n     *  matches are determined. Currently the only flag is matchBare (a\r\n     *  boolean). When matchBare is true, the from parameter and the from\r\n     *  attribute on the stanza will be matched as bare JIDs instead of\r\n     *  full JIDs. To use this, pass {matchBare: true} as the value of\r\n     *  options. The default value for matchBare is false.\r\n     *\r\n     *  The return value should be saved if you wish to remove the handler\r\n     *  with deleteHandler().\r\n     *\r\n     *  Parameters:\r\n     *    (Function) handler - The user callback.\r\n     *    (String) ns - The namespace to match.\r\n     *    (String) name - The stanza name to match.\r\n     *    (String) type - The stanza type attribute to match.\r\n     *    (String) id - The stanza id attribute to match.\r\n     *    (String) from - The stanza from attribute to match.\r\n     *    (String) options - The handler options\r\n     *\r\n     *  Returns:\r\n     *    A reference to the handler that can be used to remove it.\r\n     */\r\n    addHandler: function (handler, ns, name, type, id, from, options)\r\n    {\r\n        var hand = new Strophe.Handler(handler, ns, name, type, id, from, options);\r\n        this.addHandlers.push(hand);\r\n        return hand;\r\n    },\r\n\r\n    /** Function: deleteHandler\r\n     *  Delete a stanza handler for a connection.\r\n     *\r\n     *  This function removes a stanza handler from the connection.  The\r\n     *  handRef parameter is *not* the function passed to addHandler(),\r\n     *  but is the reference returned from addHandler().\r\n     *\r\n     *  Parameters:\r\n     *    (Strophe.Handler) handRef - The handler reference.\r\n     */\r\n    deleteHandler: function (handRef)\r\n    {\r\n        // this must be done in the Idle loop so that we don't change\r\n        // the handlers during iteration\r\n        this.removeHandlers.push(handRef);\r\n        // If a handler is being deleted while it is being added,\r\n        // prevent it from getting added\r\n        var i = this.addHandlers.indexOf(handRef);\r\n        if (i >= 0) {\r\n            this.addHandlers.splice(i, 1);\r\n        }\r\n    },\r\n\r\n    /** Function: disconnect\r\n     *  Start the graceful disconnection process.\r\n     *\r\n     *  This function starts the disconnection process.  This process starts\r\n     *  by sending unavailable presence and sending BOSH body of type\r\n     *  terminate.  A timeout handler makes sure that disconnection happens\r\n     *  even if the BOSH server does not respond.\r\n     *  If the Connection object isn't connected, at least tries to abort all pending requests\r\n     *  so the connection object won't generate successful requests (which were already opened).\r\n     *\r\n     *  The user supplied connection callback will be notified of the\r\n     *  progress as this process happens.\r\n     *\r\n     *  Parameters:\r\n     *    (String) reason - The reason the disconnect is occuring.\r\n     */\r\n    disconnect: function (reason)\r\n    {\r\n        this._changeConnectStatus(Strophe.Status.DISCONNECTING, reason);\r\n\r\n        Strophe.info(\"Disconnect was called because: \" + reason);\r\n        if (this.connected) {\r\n            var pres = false;\r\n            this.disconnecting = true;\r\n            if (this.authenticated) {\r\n                pres = $pres({\r\n                    xmlns: Strophe.NS.CLIENT,\r\n                    type: 'unavailable'\r\n                });\r\n            }\r\n            // setup timeout handler\r\n            this._disconnectTimeout = this._addSysTimedHandler(\r\n                3000, this._onDisconnectTimeout.bind(this));\r\n            this._proto._disconnect(pres);\r\n        } else {\r\n            Strophe.info(\"Disconnect was called before Strophe connected to the server\");\r\n            this._proto._abortAllRequests();\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _changeConnectStatus\r\n     *  _Private_ helper function that makes sure plugins and the user's\r\n     *  callback are notified of connection status changes.\r\n     *\r\n     *  Parameters:\r\n     *    (Integer) status - the new connection status, one of the values\r\n     *      in Strophe.Status\r\n     *    (String) condition - the error condition or null\r\n     */\r\n    _changeConnectStatus: function (status, condition)\r\n    {\r\n        // notify all plugins listening for status changes\r\n        for (var k in Strophe._connectionPlugins) {\r\n            if (Strophe._connectionPlugins.hasOwnProperty(k)) {\r\n                var plugin = this[k];\r\n                if (plugin.statusChanged) {\r\n                    try {\r\n                        plugin.statusChanged(status, condition);\r\n                    } catch (err) {\r\n                        Strophe.error(\"\" + k + \" plugin caused an exception \" +\r\n                                      \"changing status: \" + err);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        // notify the user's callback\r\n        if (this.connect_callback) {\r\n            try {\r\n                this.connect_callback(status, condition);\r\n            } catch (e) {\r\n                Strophe.error(\"User connection callback caused an \" +\r\n                              \"exception: \" + e);\r\n            }\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _doDisconnect\r\n     *  _Private_ function to disconnect.\r\n     *\r\n     *  This is the last piece of the disconnection logic.  This resets the\r\n     *  connection and alerts the user's connection callback.\r\n     */\r\n    _doDisconnect: function ()\r\n    {\r\n        if (typeof this._idleTimeout == \"number\") {\r\n            clearTimeout(this._idleTimeout);\r\n        }\r\n\r\n        // Cancel Disconnect Timeout\r\n        if (this._disconnectTimeout !== null) {\r\n            this.deleteTimedHandler(this._disconnectTimeout);\r\n            this._disconnectTimeout = null;\r\n        }\r\n\r\n        Strophe.info(\"_doDisconnect was called\");\r\n        this._proto._doDisconnect();\r\n\r\n        this.authenticated = false;\r\n        this.disconnecting = false;\r\n\r\n        // delete handlers\r\n        this.handlers = [];\r\n        this.timedHandlers = [];\r\n        this.removeTimeds = [];\r\n        this.removeHandlers = [];\r\n        this.addTimeds = [];\r\n        this.addHandlers = [];\r\n\r\n        // tell the parent we disconnected\r\n        this._changeConnectStatus(Strophe.Status.DISCONNECTED, null);\r\n        this.connected = false;\r\n    },\r\n\r\n    /** PrivateFunction: _dataRecv\r\n     *  _Private_ handler to processes incoming data from the the connection.\r\n     *\r\n     *  Except for _connect_cb handling the initial connection request,\r\n     *  this function handles the incoming data for all requests.  This\r\n     *  function also fires stanza handlers that match each incoming\r\n     *  stanza.\r\n     *\r\n     *  Parameters:\r\n     *    (Strophe.Request) req - The request that has data ready.\r\n     *    (string) req - The stanza a raw string (optiona).\r\n     */\r\n    _dataRecv: function (req, raw)\r\n    {\r\n        Strophe.info(\"_dataRecv called\");\r\n        var elem = this._proto._reqToData(req);\r\n        if (elem === null) { return; }\r\n\r\n        if (this.xmlInput !== Strophe.Connection.prototype.xmlInput) {\r\n            if (elem.nodeName === this._proto.strip && elem.childNodes.length) {\r\n                this.xmlInput(elem.childNodes[0]);\r\n            } else {\r\n                this.xmlInput(elem);\r\n            }\r\n        }\r\n        if (this.rawInput !== Strophe.Connection.prototype.rawInput) {\r\n            if (raw) {\r\n                this.rawInput(raw);\r\n            } else {\r\n                this.rawInput(Strophe.serialize(elem));\r\n            }\r\n        }\r\n\r\n        // remove handlers scheduled for deletion\r\n        var i, hand;\r\n        while (this.removeHandlers.length > 0) {\r\n            hand = this.removeHandlers.pop();\r\n            i = this.handlers.indexOf(hand);\r\n            if (i >= 0) {\r\n                this.handlers.splice(i, 1);\r\n            }\r\n        }\r\n\r\n        // add handlers scheduled for addition\r\n        while (this.addHandlers.length > 0) {\r\n            this.handlers.push(this.addHandlers.pop());\r\n        }\r\n\r\n        // handle graceful disconnect\r\n        if (this.disconnecting && this._proto._emptyQueue()) {\r\n            this._doDisconnect();\r\n            return;\r\n        }\r\n\r\n        var type = elem.getAttribute(\"type\");\r\n        var cond, conflict;\r\n        if (type !== null && type == \"terminate\") {\r\n            // Don't process stanzas that come in after disconnect\r\n            if (this.disconnecting) {\r\n                return;\r\n            }\r\n\r\n            // an error occurred\r\n            cond = elem.getAttribute(\"condition\");\r\n            conflict = elem.getElementsByTagName(\"conflict\");\r\n            if (cond !== null) {\r\n                if (cond == \"remote-stream-error\" && conflict.length > 0) {\r\n                    cond = \"conflict\";\r\n                }\r\n                this._changeConnectStatus(Strophe.Status.CONNFAIL, cond);\r\n            } else {\r\n                this._changeConnectStatus(Strophe.Status.CONNFAIL, \"unknown\");\r\n            }\r\n            this._doDisconnect();\r\n            return;\r\n        }\r\n\r\n        // send each incoming stanza through the handler chain\r\n        var that = this;\r\n        Strophe.forEachChild(elem, null, function (child) {\r\n            var i, newList;\r\n            // process handlers\r\n            newList = that.handlers;\r\n            that.handlers = [];\r\n            for (i = 0; i < newList.length; i++) {\r\n                var hand = newList[i];\r\n                // encapsulate 'handler.run' not to lose the whole handler list if\r\n                // one of the handlers throws an exception\r\n                try {\r\n                    if (hand.isMatch(child) &&\r\n                        (that.authenticated || !hand.user)) {\r\n                        if (hand.run(child)) {\r\n                            that.handlers.push(hand);\r\n                        }\r\n                    } else {\r\n                        that.handlers.push(hand);\r\n                    }\r\n                } catch(e) {\r\n                    // if the handler throws an exception, we consider it as false\r\n                    Strophe.warn('Removing Strophe handlers due to uncaught exception: ' + e.message);\r\n                }\r\n            }\r\n        });\r\n    },\r\n\r\n\r\n    /** Attribute: mechanisms\r\n     *  SASL Mechanisms available for Conncection.\r\n     */\r\n    mechanisms: {},\r\n\r\n    /** PrivateFunction: _connect_cb\r\n     *  _Private_ handler for initial connection request.\r\n     *\r\n     *  This handler is used to process the initial connection request\r\n     *  response from the BOSH server. It is used to set up authentication\r\n     *  handlers and start the authentication process.\r\n     *\r\n     *  SASL authentication will be attempted if available, otherwise\r\n     *  the code will fall back to legacy authentication.\r\n     *\r\n     *  Parameters:\r\n     *    (Strophe.Request) req - The current request.\r\n     *    (Function) _callback - low level (xmpp) connect callback function.\r\n     *      Useful for plugins with their own xmpp connect callback (when their)\r\n     *      want to do something special).\r\n     */\r\n    _connect_cb: function (req, _callback, raw)\r\n    {\r\n        Strophe.info(\"_connect_cb was called\");\r\n\r\n        this.connected = true;\r\n\r\n        var bodyWrap = this._proto._reqToData(req);\r\n        if (!bodyWrap) { return; }\r\n\r\n        if (this.xmlInput !== Strophe.Connection.prototype.xmlInput) {\r\n            if (bodyWrap.nodeName === this._proto.strip && bodyWrap.childNodes.length) {\r\n                this.xmlInput(bodyWrap.childNodes[0]);\r\n            } else {\r\n                this.xmlInput(bodyWrap);\r\n            }\r\n        }\r\n        if (this.rawInput !== Strophe.Connection.prototype.rawInput) {\r\n            if (raw) {\r\n                this.rawInput(raw);\r\n            } else {\r\n                this.rawInput(Strophe.serialize(bodyWrap));\r\n            }\r\n        }\r\n\r\n        var conncheck = this._proto._connect_cb(bodyWrap);\r\n        if (conncheck === Strophe.Status.CONNFAIL) {\r\n            return;\r\n        }\r\n\r\n        this._authentication.sasl_scram_sha1 = false;\r\n        this._authentication.sasl_plain = false;\r\n        this._authentication.sasl_digest_md5 = false;\r\n        this._authentication.sasl_anonymous = false;\r\n\r\n        this._authentication.legacy_auth = false;\r\n\r\n        // Check for the stream:features tag\r\n        var hasFeatures = bodyWrap.getElementsByTagNameNS(Strophe.NS.STREAM, \"features\").length > 0;\r\n        var mechanisms = bodyWrap.getElementsByTagName(\"mechanism\");\r\n        var matched = [];\r\n        var i, mech, found_authentication = false;\r\n        if (!hasFeatures) {\r\n            this._proto._no_auth_received(_callback);\r\n            return;\r\n        }\r\n        if (mechanisms.length > 0) {\r\n            for (i = 0; i < mechanisms.length; i++) {\r\n                mech = Strophe.getText(mechanisms[i]);\r\n                if (this.mechanisms[mech]) matched.push(this.mechanisms[mech]);\r\n            }\r\n        }\r\n        this._authentication.legacy_auth =\r\n            bodyWrap.getElementsByTagName(\"auth\").length > 0;\r\n        found_authentication = this._authentication.legacy_auth ||\r\n            matched.length > 0;\r\n        if (!found_authentication) {\r\n            this._proto._no_auth_received(_callback);\r\n            return;\r\n        }\r\n        if (this.do_authentication !== false)\r\n            this.authenticate(matched);\r\n    },\r\n\r\n    /** Function: authenticate\r\n     * Set up authentication\r\n     *\r\n     *  Contiunues the initial connection request by setting up authentication\r\n     *  handlers and start the authentication process.\r\n     *\r\n     *  SASL authentication will be attempted if available, otherwise\r\n     *  the code will fall back to legacy authentication.\r\n     *\r\n     */\r\n    authenticate: function (matched)\r\n    {\r\n      var i;\r\n      // Sorting matched mechanisms according to priority.\r\n      for (i = 0; i < matched.length - 1; ++i) {\r\n        var higher = i;\r\n        for (var j = i + 1; j < matched.length; ++j) {\r\n          if (matched[j].prototype.priority > matched[higher].prototype.priority) {\r\n            higher = j;\r\n          }\r\n        }\r\n        if (higher != i) {\r\n          var swap = matched[i];\r\n          matched[i] = matched[higher];\r\n          matched[higher] = swap;\r\n        }\r\n      }\r\n\r\n      // run each mechanism\r\n      var mechanism_found = false;\r\n      for (i = 0; i < matched.length; ++i) {\r\n        if (!matched[i].test(this)) continue;\r\n\r\n        this._sasl_success_handler = this._addSysHandler(\r\n          this._sasl_success_cb.bind(this), null,\r\n          \"success\", null, null);\r\n        this._sasl_failure_handler = this._addSysHandler(\r\n          this._sasl_failure_cb.bind(this), null,\r\n          \"failure\", null, null);\r\n        this._sasl_challenge_handler = this._addSysHandler(\r\n          this._sasl_challenge_cb.bind(this), null,\r\n          \"challenge\", null, null);\r\n\r\n        this._sasl_mechanism = new matched[i]();\r\n        this._sasl_mechanism.onStart(this);\r\n\r\n        var request_auth_exchange = $build(\"auth\", {\r\n          xmlns: Strophe.NS.SASL,\r\n          mechanism: this._sasl_mechanism.name\r\n        });\r\n\r\n        if (this._sasl_mechanism.isClientFirst) {\r\n          var response = this._sasl_mechanism.onChallenge(this, null);\r\n          request_auth_exchange.t(Base64.encode(response));\r\n        }\r\n\r\n        this.send(request_auth_exchange.tree());\r\n\r\n        mechanism_found = true;\r\n        break;\r\n      }\r\n\r\n      if (!mechanism_found) {\r\n        // if none of the mechanism worked\r\n        if (Strophe.getNodeFromJid(this.jid) === null) {\r\n            // we don't have a node, which is required for non-anonymous\r\n            // client connections\r\n            this._changeConnectStatus(Strophe.Status.CONNFAIL,\r\n                                      'x-strophe-bad-non-anon-jid');\r\n            this.disconnect('x-strophe-bad-non-anon-jid');\r\n        } else {\r\n          // fall back to legacy authentication\r\n          this._changeConnectStatus(Strophe.Status.AUTHENTICATING, null);\r\n          this._addSysHandler(this._auth1_cb.bind(this), null, null,\r\n                              null, \"_auth_1\");\r\n\r\n          this.send($iq({\r\n            type: \"get\",\r\n            to: this.domain,\r\n            id: \"_auth_1\"\r\n          }).c(\"query\", {\r\n            xmlns: Strophe.NS.AUTH\r\n          }).c(\"username\", {}).t(Strophe.getNodeFromJid(this.jid)).tree());\r\n        }\r\n      }\r\n\r\n    },\r\n\r\n    _sasl_challenge_cb: function(elem) {\r\n      var challenge = Base64.decode(Strophe.getText(elem));\r\n      var response = this._sasl_mechanism.onChallenge(this, challenge);\r\n\r\n      var stanza = $build('response', {\r\n          xmlns: Strophe.NS.SASL\r\n      });\r\n      if (response !== \"\") {\r\n        stanza.t(Base64.encode(response));\r\n      }\r\n      this.send(stanza.tree());\r\n\r\n      return true;\r\n    },\r\n\r\n    /** PrivateFunction: _auth1_cb\r\n     *  _Private_ handler for legacy authentication.\r\n     *\r\n     *  This handler is called in response to the initial <iq type='get'/>\r\n     *  for legacy authentication.  It builds an authentication <iq/> and\r\n     *  sends it, creating a handler (calling back to _auth2_cb()) to\r\n     *  handle the result\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The stanza that triggered the callback.\r\n     *\r\n     *  Returns:\r\n     *    false to remove the handler.\r\n     */\r\n    /* jshint unused:false */\r\n    _auth1_cb: function (elem)\r\n    {\r\n        // build plaintext auth iq\r\n        var iq = $iq({type: \"set\", id: \"_auth_2\"})\r\n            .c('query', {xmlns: Strophe.NS.AUTH})\r\n            .c('username', {}).t(Strophe.getNodeFromJid(this.jid))\r\n            .up()\r\n            .c('password').t(this.pass);\r\n\r\n        if (!Strophe.getResourceFromJid(this.jid)) {\r\n            // since the user has not supplied a resource, we pick\r\n            // a default one here.  unlike other auth methods, the server\r\n            // cannot do this for us.\r\n            this.jid = Strophe.getBareJidFromJid(this.jid) + '/strophe';\r\n        }\r\n        iq.up().c('resource', {}).t(Strophe.getResourceFromJid(this.jid));\r\n\r\n        this._addSysHandler(this._auth2_cb.bind(this), null,\r\n                            null, null, \"_auth_2\");\r\n\r\n        this.send(iq.tree());\r\n\r\n        return false;\r\n    },\r\n    /* jshint unused:true */\r\n\r\n    /** PrivateFunction: _sasl_success_cb\r\n     *  _Private_ handler for succesful SASL authentication.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The matching stanza.\r\n     *\r\n     *  Returns:\r\n     *    false to remove the handler.\r\n     */\r\n    _sasl_success_cb: function (elem)\r\n    {\r\n        if (this._sasl_data[\"server-signature\"]) {\r\n            var serverSignature;\r\n            var success = Base64.decode(Strophe.getText(elem));\r\n            var attribMatch = /([a-z]+)=([^,]+)(,|$)/;\r\n            var matches = success.match(attribMatch);\r\n            if (matches[1] == \"v\") {\r\n                serverSignature = matches[2];\r\n            }\r\n\r\n            if (serverSignature != this._sasl_data[\"server-signature\"]) {\r\n              // remove old handlers\r\n              this.deleteHandler(this._sasl_failure_handler);\r\n              this._sasl_failure_handler = null;\r\n              if (this._sasl_challenge_handler) {\r\n                this.deleteHandler(this._sasl_challenge_handler);\r\n                this._sasl_challenge_handler = null;\r\n              }\r\n\r\n              this._sasl_data = {};\r\n              return this._sasl_failure_cb(null);\r\n            }\r\n        }\r\n\r\n        Strophe.info(\"SASL authentication succeeded.\");\r\n\r\n        if(this._sasl_mechanism)\r\n          this._sasl_mechanism.onSuccess();\r\n\r\n        // remove old handlers\r\n        this.deleteHandler(this._sasl_failure_handler);\r\n        this._sasl_failure_handler = null;\r\n        if (this._sasl_challenge_handler) {\r\n            this.deleteHandler(this._sasl_challenge_handler);\r\n            this._sasl_challenge_handler = null;\r\n        }\r\n\r\n        var streamfeature_handlers = [];\r\n        var wrapper = function(handlers, elem) {\r\n            while (handlers.length) {\r\n                this.deleteHandler(handlers.pop());\r\n            }\r\n            this._sasl_auth1_cb.bind(this)(elem);\r\n            return false;\r\n        };\r\n        streamfeature_handlers.push(this._addSysHandler(function(elem) {\r\n            wrapper.bind(this)(streamfeature_handlers, elem);\r\n        }.bind(this), null, \"stream:features\", null, null));\r\n        streamfeature_handlers.push(this._addSysHandler(function(elem) {\r\n            wrapper.bind(this)(streamfeature_handlers, elem);\r\n        }.bind(this), Strophe.NS.STREAM, \"features\", null, null));\r\n\r\n        // we must send an xmpp:restart now\r\n        this._sendRestart();\r\n\r\n        return false;\r\n    },\r\n\r\n    /** PrivateFunction: _sasl_auth1_cb\r\n     *  _Private_ handler to start stream binding.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The matching stanza.\r\n     *\r\n     *  Returns:\r\n     *    false to remove the handler.\r\n     */\r\n    _sasl_auth1_cb: function (elem)\r\n    {\r\n        // save stream:features for future usage\r\n        this.features = elem;\r\n\r\n        var i, child;\r\n\r\n        for (i = 0; i < elem.childNodes.length; i++) {\r\n            child = elem.childNodes[i];\r\n            if (child.nodeName == 'bind') {\r\n                this.do_bind = true;\r\n            }\r\n\r\n            if (child.nodeName == 'session') {\r\n                this.do_session = true;\r\n            }\r\n        }\r\n\r\n        if (!this.do_bind) {\r\n            this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);\r\n            return false;\r\n        } else {\r\n            this._addSysHandler(this._sasl_bind_cb.bind(this), null, null,\r\n                                null, \"_bind_auth_2\");\r\n\r\n            var resource = Strophe.getResourceFromJid(this.jid);\r\n            if (resource) {\r\n                this.send($iq({type: \"set\", id: \"_bind_auth_2\"})\r\n                          .c('bind', {xmlns: Strophe.NS.BIND})\r\n                          .c('resource', {}).t(resource).tree());\r\n            } else {\r\n                this.send($iq({type: \"set\", id: \"_bind_auth_2\"})\r\n                          .c('bind', {xmlns: Strophe.NS.BIND})\r\n                          .tree());\r\n            }\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /** PrivateFunction: _sasl_bind_cb\r\n     *  _Private_ handler for binding result and session start.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The matching stanza.\r\n     *\r\n     *  Returns:\r\n     *    false to remove the handler.\r\n     */\r\n    _sasl_bind_cb: function (elem)\r\n    {\r\n        if (elem.getAttribute(\"type\") == \"error\") {\r\n            Strophe.info(\"SASL binding failed.\");\r\n            var conflict = elem.getElementsByTagName(\"conflict\"), condition;\r\n            if (conflict.length > 0) {\r\n                condition = 'conflict';\r\n            }\r\n            this._changeConnectStatus(Strophe.Status.AUTHFAIL, condition);\r\n            return false;\r\n        }\r\n\r\n        // TODO - need to grab errors\r\n        var bind = elem.getElementsByTagName(\"bind\");\r\n        var jidNode;\r\n        if (bind.length > 0) {\r\n            // Grab jid\r\n            jidNode = bind[0].getElementsByTagName(\"jid\");\r\n            if (jidNode.length > 0) {\r\n                this.jid = Strophe.getText(jidNode[0]);\r\n\r\n                if (this.do_session) {\r\n                    this._addSysHandler(this._sasl_session_cb.bind(this),\r\n                                        null, null, null, \"_session_auth_2\");\r\n\r\n                    this.send($iq({type: \"set\", id: \"_session_auth_2\"})\r\n                                  .c('session', {xmlns: Strophe.NS.SESSION})\r\n                                  .tree());\r\n                } else {\r\n                    this.authenticated = true;\r\n                    this._changeConnectStatus(Strophe.Status.CONNECTED, null);\r\n                }\r\n            }\r\n        } else {\r\n            Strophe.info(\"SASL binding failed.\");\r\n            this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);\r\n            return false;\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _sasl_session_cb\r\n     *  _Private_ handler to finish successful SASL connection.\r\n     *\r\n     *  This sets Connection.authenticated to true on success, which\r\n     *  starts the processing of user handlers.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The matching stanza.\r\n     *\r\n     *  Returns:\r\n     *    false to remove the handler.\r\n     */\r\n    _sasl_session_cb: function (elem)\r\n    {\r\n        if (elem.getAttribute(\"type\") == \"result\") {\r\n            this.authenticated = true;\r\n            this._changeConnectStatus(Strophe.Status.CONNECTED, null);\r\n        } else if (elem.getAttribute(\"type\") == \"error\") {\r\n            Strophe.info(\"Session creation failed.\");\r\n            this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);\r\n            return false;\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /** PrivateFunction: _sasl_failure_cb\r\n     *  _Private_ handler for SASL authentication failure.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The matching stanza.\r\n     *\r\n     *  Returns:\r\n     *    false to remove the handler.\r\n     */\r\n    /* jshint unused:false */\r\n    _sasl_failure_cb: function (elem)\r\n    {\r\n        // delete unneeded handlers\r\n        if (this._sasl_success_handler) {\r\n            this.deleteHandler(this._sasl_success_handler);\r\n            this._sasl_success_handler = null;\r\n        }\r\n        if (this._sasl_challenge_handler) {\r\n            this.deleteHandler(this._sasl_challenge_handler);\r\n            this._sasl_challenge_handler = null;\r\n        }\r\n\r\n        if(this._sasl_mechanism)\r\n          this._sasl_mechanism.onFailure();\r\n        this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);\r\n        return false;\r\n    },\r\n    /* jshint unused:true */\r\n\r\n    /** PrivateFunction: _auth2_cb\r\n     *  _Private_ handler to finish legacy authentication.\r\n     *\r\n     *  This handler is called when the result from the jabber:iq:auth\r\n     *  <iq/> stanza is returned.\r\n     *\r\n     *  Parameters:\r\n     *    (XMLElement) elem - The stanza that triggered the callback.\r\n     *\r\n     *  Returns:\r\n     *    false to remove the handler.\r\n     */\r\n    _auth2_cb: function (elem)\r\n    {\r\n        if (elem.getAttribute(\"type\") == \"result\") {\r\n            this.authenticated = true;\r\n            this._changeConnectStatus(Strophe.Status.CONNECTED, null);\r\n        } else if (elem.getAttribute(\"type\") == \"error\") {\r\n            this._changeConnectStatus(Strophe.Status.AUTHFAIL, null);\r\n            this.disconnect('authentication failed');\r\n        }\r\n\r\n        return false;\r\n    },\r\n\r\n    /** PrivateFunction: _addSysTimedHandler\r\n     *  _Private_ function to add a system level timed handler.\r\n     *\r\n     *  This function is used to add a Strophe.TimedHandler for the\r\n     *  library code.  System timed handlers are allowed to run before\r\n     *  authentication is complete.\r\n     *\r\n     *  Parameters:\r\n     *    (Integer) period - The period of the handler.\r\n     *    (Function) handler - The callback function.\r\n     */\r\n    _addSysTimedHandler: function (period, handler)\r\n    {\r\n        var thand = new Strophe.TimedHandler(period, handler);\r\n        thand.user = false;\r\n        this.addTimeds.push(thand);\r\n        return thand;\r\n    },\r\n\r\n    /** PrivateFunction: _addSysHandler\r\n     *  _Private_ function to add a system level stanza handler.\r\n     *\r\n     *  This function is used to add a Strophe.Handler for the\r\n     *  library code.  System stanza handlers are allowed to run before\r\n     *  authentication is complete.\r\n     *\r\n     *  Parameters:\r\n     *    (Function) handler - The callback function.\r\n     *    (String) ns - The namespace to match.\r\n     *    (String) name - The stanza name to match.\r\n     *    (String) type - The stanza type attribute to match.\r\n     *    (String) id - The stanza id attribute to match.\r\n     */\r\n    _addSysHandler: function (handler, ns, name, type, id)\r\n    {\r\n        var hand = new Strophe.Handler(handler, ns, name, type, id);\r\n        hand.user = false;\r\n        this.addHandlers.push(hand);\r\n        return hand;\r\n    },\r\n\r\n    /** PrivateFunction: _onDisconnectTimeout\r\n     *  _Private_ timeout handler for handling non-graceful disconnection.\r\n     *\r\n     *  If the graceful disconnect process does not complete within the\r\n     *  time allotted, this handler finishes the disconnect anyway.\r\n     *\r\n     *  Returns:\r\n     *    false to remove the handler.\r\n     */\r\n    _onDisconnectTimeout: function ()\r\n    {\r\n        Strophe.info(\"_onDisconnectTimeout was called\");\r\n\r\n        this._proto._onDisconnectTimeout();\r\n\r\n        // actually disconnect\r\n        this._doDisconnect();\r\n\r\n        return false;\r\n    },\r\n\r\n    /** PrivateFunction: _onIdle\r\n     *  _Private_ handler to process events during idle cycle.\r\n     *\r\n     *  This handler is called every 100ms to fire timed handlers that\r\n     *  are ready and keep poll requests going.\r\n     */\r\n    _onIdle: function ()\r\n    {\r\n        var i, thand, since, newList;\r\n\r\n        // add timed handlers scheduled for addition\r\n        // NOTE: we add before remove in the case a timed handler is\r\n        // added and then deleted before the next _onIdle() call.\r\n        while (this.addTimeds.length > 0) {\r\n            this.timedHandlers.push(this.addTimeds.pop());\r\n        }\r\n\r\n        // remove timed handlers that have been scheduled for deletion\r\n        while (this.removeTimeds.length > 0) {\r\n            thand = this.removeTimeds.pop();\r\n            i = this.timedHandlers.indexOf(thand);\r\n            if (i >= 0) {\r\n                this.timedHandlers.splice(i, 1);\r\n            }\r\n        }\r\n\r\n        // call ready timed handlers\r\n        var now = new Date().getTime();\r\n        newList = [];\r\n        for (i = 0; i < this.timedHandlers.length; i++) {\r\n            thand = this.timedHandlers[i];\r\n            if (this.authenticated || !thand.user) {\r\n                since = thand.lastCalled + thand.period;\r\n                if (since - now <= 0) {\r\n                    if (thand.run()) {\r\n                        newList.push(thand);\r\n                    }\r\n                } else {\r\n                    newList.push(thand);\r\n                }\r\n            }\r\n        }\r\n        this.timedHandlers = newList;\r\n\r\n        clearTimeout(this._idleTimeout);\r\n\r\n        this._proto._onIdle();\r\n\r\n        // reactivate the timer only if connected\r\n        if (this.connected) {\r\n            this._idleTimeout = setTimeout(this._onIdle.bind(this), 100);\r\n        }\r\n    }\r\n};\r\n\r\n/** Class: Strophe.SASLMechanism\r\n *\r\n *  encapsulates SASL authentication mechanisms.\r\n *\r\n *  User code may override the priority for each mechanism or disable it completely.\r\n *  See <priority> for information about changing priority and <test> for informatian on\r\n *  how to disable a mechanism.\r\n *\r\n *  By default, all mechanisms are enabled and the priorities are\r\n *\r\n *  SCRAM-SHA1 - 40\r\n *  DIGEST-MD5 - 30\r\n *  Plain - 20\r\n */\r\n\r\n/**\r\n * PrivateConstructor: Strophe.SASLMechanism\r\n * SASL auth mechanism abstraction.\r\n *\r\n *  Parameters:\r\n *    (String) name - SASL Mechanism name.\r\n *    (Boolean) isClientFirst - If client should send response first without challenge.\r\n *    (Number) priority - Priority.\r\n *\r\n *  Returns:\r\n *    A new Strophe.SASLMechanism object.\r\n */\r\nStrophe.SASLMechanism = function(name, isClientFirst, priority) {\r\n  /** PrivateVariable: name\r\n   *  Mechanism name.\r\n   */\r\n  this.name = name;\r\n  /** PrivateVariable: isClientFirst\r\n   *  If client sends response without initial server challenge.\r\n   */\r\n  this.isClientFirst = isClientFirst;\r\n  /** Variable: priority\r\n   *  Determines which <SASLMechanism> is chosen for authentication (Higher is better).\r\n   *  Users may override this to prioritize mechanisms differently.\r\n   *\r\n   *  In the default configuration the priorities are\r\n   *\r\n   *  SCRAM-SHA1 - 40\r\n   *  DIGEST-MD5 - 30\r\n   *  Plain - 20\r\n   *\r\n   *  Example: (This will cause Strophe to choose the mechanism that the server sent first)\r\n   *\r\n   *  > Strophe.SASLMD5.priority = Strophe.SASLSHA1.priority;\r\n   *\r\n   *  See <SASL mechanisms> for a list of available mechanisms.\r\n   *\r\n   */\r\n  this.priority = priority;\r\n};\r\n\r\nStrophe.SASLMechanism.prototype = {\r\n  /**\r\n   *  Function: test\r\n   *  Checks if mechanism able to run.\r\n   *  To disable a mechanism, make this return false;\r\n   *\r\n   *  To disable plain authentication run\r\n   *  > Strophe.SASLPlain.test = function() {\r\n   *  >   return false;\r\n   *  > }\r\n   *\r\n   *  See <SASL mechanisms> for a list of available mechanisms.\r\n   *\r\n   *  Parameters:\r\n   *    (Strophe.Connection) connection - Target Connection.\r\n   *\r\n   *  Returns:\r\n   *    (Boolean) If mechanism was able to run.\r\n   */\r\n  /* jshint unused:false */\r\n  test: function(connection) {\r\n    return true;\r\n  },\r\n  /* jshint unused:true */\r\n\r\n  /** PrivateFunction: onStart\r\n   *  Called before starting mechanism on some connection.\r\n   *\r\n   *  Parameters:\r\n   *    (Strophe.Connection) connection - Target Connection.\r\n   */\r\n  onStart: function(connection)\r\n  {\r\n    this._connection = connection;\r\n  },\r\n\r\n  /** PrivateFunction: onChallenge\r\n   *  Called by protocol implementation on incoming challenge. If client is\r\n   *  first (isClientFirst == true) challenge will be null on the first call.\r\n   *\r\n   *  Parameters:\r\n   *    (Strophe.Connection) connection - Target Connection.\r\n   *    (String) challenge - current challenge to handle.\r\n   *\r\n   *  Returns:\r\n   *    (String) Mechanism response.\r\n   */\r\n  /* jshint unused:false */\r\n  onChallenge: function(connection, challenge) {\r\n    throw new Error(\"You should implement challenge handling!\");\r\n  },\r\n  /* jshint unused:true */\r\n\r\n  /** PrivateFunction: onFailure\r\n   *  Protocol informs mechanism implementation about SASL failure.\r\n   */\r\n  onFailure: function() {\r\n    this._connection = null;\r\n  },\r\n\r\n  /** PrivateFunction: onSuccess\r\n   *  Protocol informs mechanism implementation about SASL success.\r\n   */\r\n  onSuccess: function() {\r\n    this._connection = null;\r\n  }\r\n};\r\n\r\n  /** Constants: SASL mechanisms\r\n   *  Available authentication mechanisms\r\n   *\r\n   *  Strophe.SASLAnonymous - SASL Anonymous authentication.\r\n   *  Strophe.SASLPlain - SASL Plain authentication.\r\n   *  Strophe.SASLMD5 - SASL Digest-MD5 authentication\r\n   *  Strophe.SASLSHA1 - SASL SCRAM-SHA1 authentication\r\n   */\r\n\r\n// Building SASL callbacks\r\n\r\n/** PrivateConstructor: SASLAnonymous\r\n *  SASL Anonymous authentication.\r\n */\r\nStrophe.SASLAnonymous = function() {};\r\n\r\nStrophe.SASLAnonymous.prototype = new Strophe.SASLMechanism(\"ANONYMOUS\", false, 10);\r\n\r\nStrophe.SASLAnonymous.test = function(connection) {\r\n  return connection.authcid === null;\r\n};\r\n\r\nStrophe.Connection.prototype.mechanisms[Strophe.SASLAnonymous.prototype.name] = Strophe.SASLAnonymous;\r\n\r\n/** PrivateConstructor: SASLPlain\r\n *  SASL Plain authentication.\r\n */\r\nStrophe.SASLPlain = function() {};\r\n\r\nStrophe.SASLPlain.prototype = new Strophe.SASLMechanism(\"PLAIN\", true, 20);\r\n\r\nStrophe.SASLPlain.test = function(connection) {\r\n  return connection.authcid !== null;\r\n};\r\n\r\nStrophe.SASLPlain.prototype.onChallenge = function(connection) {\r\n  var auth_str = connection.authzid;\r\n  auth_str = auth_str + \"\\u0000\";\r\n  auth_str = auth_str + connection.authcid;\r\n  auth_str = auth_str + \"\\u0000\";\r\n  auth_str = auth_str + connection.pass;\r\n  return auth_str;\r\n};\r\n\r\nStrophe.Connection.prototype.mechanisms[Strophe.SASLPlain.prototype.name] = Strophe.SASLPlain;\r\n\r\n/** PrivateConstructor: SASLSHA1\r\n *  SASL SCRAM SHA 1 authentication.\r\n */\r\nStrophe.SASLSHA1 = function() {};\r\n\r\n/* TEST:\r\n * This is a simple example of a SCRAM-SHA-1 authentication exchange\r\n * when the client doesn't support channel bindings (username 'user' and\r\n * password 'pencil' are used):\r\n *\r\n * C: n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL\r\n * S: r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,\r\n * i=4096\r\n * C: c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,\r\n * p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=\r\n * S: v=rmF9pqV8S7suAoZWja4dJRkFsKQ=\r\n *\r\n */\r\n\r\nStrophe.SASLSHA1.prototype = new Strophe.SASLMechanism(\"SCRAM-SHA-1\", true, 40);\r\n\r\nStrophe.SASLSHA1.test = function(connection) {\r\n  return connection.authcid !== null;\r\n};\r\n\r\nStrophe.SASLSHA1.prototype.onChallenge = function(connection, challenge, test_cnonce) {\r\n  var cnonce = test_cnonce || MD5.hexdigest(Math.random() * 1234567890);\r\n\r\n  var auth_str = \"n=\" + connection.authcid;\r\n  auth_str += \",r=\";\r\n  auth_str += cnonce;\r\n\r\n  connection._sasl_data.cnonce = cnonce;\r\n  connection._sasl_data[\"client-first-message-bare\"] = auth_str;\r\n\r\n  auth_str = \"n,,\" + auth_str;\r\n\r\n  this.onChallenge = function (connection, challenge)\r\n  {\r\n    var nonce, salt, iter, Hi, U, U_old, i, k;\r\n    var clientKey, serverKey, clientSignature;\r\n    var responseText = \"c=biws,\";\r\n    var authMessage = connection._sasl_data[\"client-first-message-bare\"] + \",\" +\r\n      challenge + \",\";\r\n    var cnonce = connection._sasl_data.cnonce;\r\n    var attribMatch = /([a-z]+)=([^,]+)(,|$)/;\r\n\r\n    while (challenge.match(attribMatch)) {\r\n      var matches = challenge.match(attribMatch);\r\n      challenge = challenge.replace(matches[0], \"\");\r\n      switch (matches[1]) {\r\n      case \"r\":\r\n        nonce = matches[2];\r\n        break;\r\n      case \"s\":\r\n        salt = matches[2];\r\n        break;\r\n      case \"i\":\r\n        iter = matches[2];\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (nonce.substr(0, cnonce.length) !== cnonce) {\r\n      connection._sasl_data = {};\r\n      return connection._sasl_failure_cb();\r\n    }\r\n\r\n    responseText += \"r=\" + nonce;\r\n    authMessage += responseText;\r\n\r\n    salt = Base64.decode(salt);\r\n    salt += \"\\x00\\x00\\x00\\x01\";\r\n\r\n    Hi = U_old = core_hmac_sha1(connection.pass, salt);\r\n    for (i = 1; i < iter; i++) {\r\n      U = core_hmac_sha1(connection.pass, binb2str(U_old));\r\n      for (k = 0; k < 5; k++) {\r\n        Hi[k] ^= U[k];\r\n      }\r\n      U_old = U;\r\n    }\r\n    Hi = binb2str(Hi);\r\n\r\n    clientKey = core_hmac_sha1(Hi, \"Client Key\");\r\n    serverKey = str_hmac_sha1(Hi, \"Server Key\");\r\n    clientSignature = core_hmac_sha1(str_sha1(binb2str(clientKey)), authMessage);\r\n    connection._sasl_data[\"server-signature\"] = b64_hmac_sha1(serverKey, authMessage);\r\n\r\n    for (k = 0; k < 5; k++) {\r\n      clientKey[k] ^= clientSignature[k];\r\n    }\r\n\r\n    responseText += \",p=\" + Base64.encode(binb2str(clientKey));\r\n\r\n    return responseText;\r\n  }.bind(this);\r\n\r\n  return auth_str;\r\n};\r\n\r\nStrophe.Connection.prototype.mechanisms[Strophe.SASLSHA1.prototype.name] = Strophe.SASLSHA1;\r\n\r\n/** PrivateConstructor: SASLMD5\r\n *  SASL DIGEST MD5 authentication.\r\n */\r\nStrophe.SASLMD5 = function() {};\r\n\r\nStrophe.SASLMD5.prototype = new Strophe.SASLMechanism(\"DIGEST-MD5\", false, 30);\r\n\r\nStrophe.SASLMD5.test = function(connection) {\r\n  return connection.authcid !== null;\r\n};\r\n\r\n/** PrivateFunction: _quote\r\n *  _Private_ utility function to backslash escape and quote strings.\r\n *\r\n *  Parameters:\r\n *    (String) str - The string to be quoted.\r\n *\r\n *  Returns:\r\n *    quoted string\r\n */\r\nStrophe.SASLMD5.prototype._quote = function (str)\r\n  {\r\n    return '\"' + str.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"') + '\"';\r\n    //\" end string workaround for emacs\r\n  };\r\n\r\n\r\nStrophe.SASLMD5.prototype.onChallenge = function(connection, challenge, test_cnonce) {\r\n  var attribMatch = /([a-z]+)=(\"[^\"]+\"|[^,\"]+)(?:,|$)/;\r\n  var cnonce = test_cnonce || MD5.hexdigest(\"\" + (Math.random() * 1234567890));\r\n  var realm = \"\";\r\n  var host = null;\r\n  var nonce = \"\";\r\n  var qop = \"\";\r\n  var matches;\r\n\r\n  while (challenge.match(attribMatch)) {\r\n    matches = challenge.match(attribMatch);\r\n    challenge = challenge.replace(matches[0], \"\");\r\n    matches[2] = matches[2].replace(/^\"(.+)\"$/, \"$1\");\r\n    switch (matches[1]) {\r\n    case \"realm\":\r\n      realm = matches[2];\r\n      break;\r\n    case \"nonce\":\r\n      nonce = matches[2];\r\n      break;\r\n    case \"qop\":\r\n      qop = matches[2];\r\n      break;\r\n    case \"host\":\r\n      host = matches[2];\r\n      break;\r\n    }\r\n  }\r\n\r\n  var digest_uri = connection.servtype + \"/\" + connection.domain;\r\n  if (host !== null) {\r\n    digest_uri = digest_uri + \"/\" + host;\r\n  }\r\n\r\n  var A1 = MD5.hash(connection.authcid +\r\n                    \":\" + realm + \":\" + this._connection.pass) +\r\n    \":\" + nonce + \":\" + cnonce;\r\n  var A2 = 'AUTHENTICATE:' + digest_uri;\r\n\r\n  var responseText = \"\";\r\n  responseText += 'charset=utf-8,';\r\n  responseText += 'username=' +\r\n    this._quote(connection.authcid) + ',';\r\n  responseText += 'realm=' + this._quote(realm) + ',';\r\n  responseText += 'nonce=' + this._quote(nonce) + ',';\r\n  responseText += 'nc=00000001,';\r\n  responseText += 'cnonce=' + this._quote(cnonce) + ',';\r\n  responseText += 'digest-uri=' + this._quote(digest_uri) + ',';\r\n  responseText += 'response=' + MD5.hexdigest(MD5.hexdigest(A1) + \":\" +\r\n                                              nonce + \":00000001:\" +\r\n                                              cnonce + \":auth:\" +\r\n                                              MD5.hexdigest(A2)) + \",\";\r\n  responseText += 'qop=auth';\r\n\r\n  this.onChallenge = function ()\r\n  {\r\n    return \"\";\r\n  }.bind(this);\r\n\r\n  return responseText;\r\n};\r\n\r\nStrophe.Connection.prototype.mechanisms[Strophe.SASLMD5.prototype.name] = Strophe.SASLMD5;\r\n\r\n\r\n/*\r\n    This program is distributed under the terms of the MIT license.\r\n    Please see the LICENSE file for details.\r\n\r\n    Copyright 2006-2008, OGG, LLC\r\n*/\r\n\r\n/* jshint undef: true, unused: true:, noarg: true, latedef: true */\r\n/*global window, setTimeout, clearTimeout,\r\n    XMLHttpRequest, ActiveXObject,\r\n    Strophe, $build */\r\n\r\n\r\n/** PrivateClass: Strophe.Request\r\n *  _Private_ helper class that provides a cross implementation abstraction\r\n *  for a BOSH related XMLHttpRequest.\r\n *\r\n *  The Strophe.Request class is used internally to encapsulate BOSH request\r\n *  information.  It is not meant to be used from user's code.\r\n */\r\n\r\n/** PrivateConstructor: Strophe.Request\r\n *  Create and initialize a new Strophe.Request object.\r\n *\r\n *  Parameters:\r\n *    (XMLElement) elem - The XML data to be sent in the request.\r\n *    (Function) func - The function that will be called when the\r\n *      XMLHttpRequest readyState changes.\r\n *    (Integer) rid - The BOSH rid attribute associated with this request.\r\n *    (Integer) sends - The number of times this same request has been\r\n *      sent.\r\n */\r\nStrophe.Request = function (elem, func, rid, sends)\r\n{\r\n    this.id = ++Strophe._requestId;\r\n    this.xmlData = elem;\r\n    this.data = Strophe.serialize(elem);\r\n    // save original function in case we need to make a new request\r\n    // from this one.\r\n    this.origFunc = func;\r\n    this.func = func;\r\n    this.rid = rid;\r\n    this.date = NaN;\r\n    this.sends = sends || 0;\r\n    this.abort = false;\r\n    this.dead = null;\r\n\r\n    this.age = function () {\r\n        if (!this.date) { return 0; }\r\n        var now = new Date();\r\n        return (now - this.date) / 1000;\r\n    };\r\n    this.timeDead = function () {\r\n        if (!this.dead) { return 0; }\r\n        var now = new Date();\r\n        return (now - this.dead) / 1000;\r\n    };\r\n    this.xhr = this._newXHR();\r\n};\r\n\r\nStrophe.Request.prototype = {\r\n    /** PrivateFunction: getResponse\r\n     *  Get a response from the underlying XMLHttpRequest.\r\n     *\r\n     *  This function attempts to get a response from the request and checks\r\n     *  for errors.\r\n     *\r\n     *  Throws:\r\n     *    \"parsererror\" - A parser error occured.\r\n     *\r\n     *  Returns:\r\n     *    The DOM element tree of the response.\r\n     */\r\n    getResponse: function ()\r\n    {\r\n        var node = null;\r\n        if (this.xhr.responseXML && this.xhr.responseXML.documentElement) {\r\n            node = this.xhr.responseXML.documentElement;\r\n            if (node.tagName == \"parsererror\") {\r\n                Strophe.error(\"invalid response received\");\r\n                Strophe.error(\"responseText: \" + this.xhr.responseText);\r\n                Strophe.error(\"responseXML: \" +\r\n                              Strophe.serialize(this.xhr.responseXML));\r\n                throw \"parsererror\";\r\n            }\r\n        } else if (this.xhr.responseText) {\r\n            Strophe.error(\"invalid response received\");\r\n            Strophe.error(\"responseText: \" + this.xhr.responseText);\r\n            Strophe.error(\"responseXML: \" +\r\n                          Strophe.serialize(this.xhr.responseXML));\r\n        }\r\n\r\n        return node;\r\n    },\r\n\r\n    /** PrivateFunction: _newXHR\r\n     *  _Private_ helper function to create XMLHttpRequests.\r\n     *\r\n     *  This function creates XMLHttpRequests across all implementations.\r\n     *\r\n     *  Returns:\r\n     *    A new XMLHttpRequest.\r\n     */\r\n    _newXHR: function ()\r\n    {\r\n        var xhr = null;\r\n        if (window.XMLHttpRequest) {\r\n            xhr = new XMLHttpRequest();\r\n            if (xhr.overrideMimeType) {\r\n                xhr.overrideMimeType(\"text/xml; charset=utf-8\");\r\n            }\r\n        } else if (window.ActiveXObject) {\r\n            xhr = new ActiveXObject(\"Microsoft.XMLHTTP\");\r\n        }\r\n\r\n        // use Function.bind() to prepend ourselves as an argument\r\n        xhr.onreadystatechange = this.func.bind(null, this);\r\n\r\n        return xhr;\r\n    }\r\n};\r\n\r\n/** Class: Strophe.Bosh\r\n *  _Private_ helper class that handles BOSH Connections\r\n *\r\n *  The Strophe.Bosh class is used internally by Strophe.Connection\r\n *  to encapsulate BOSH sessions. It is not meant to be used from user's code.\r\n */\r\n\r\n/** File: bosh.js\r\n *  A JavaScript library to enable BOSH in Strophejs.\r\n *\r\n *  this library uses Bidirectional-streams Over Synchronous HTTP (BOSH)\r\n *  to emulate a persistent, stateful, two-way connection to an XMPP server.\r\n *  More information on BOSH can be found in XEP 124.\r\n */\r\n\r\n/** PrivateConstructor: Strophe.Bosh\r\n *  Create and initialize a Strophe.Bosh object.\r\n *\r\n *  Parameters:\r\n *    (Strophe.Connection) connection - The Strophe.Connection that will use BOSH.\r\n *\r\n *  Returns:\r\n *    A new Strophe.Bosh object.\r\n */\r\nStrophe.Bosh = function(connection) {\r\n    this._conn = connection;\r\n    /* request id for body tags */\r\n    this.rid = Math.floor(Math.random() * 4294967295);\r\n    /* The current session ID. */\r\n    this.sid = null;\r\n\r\n    // default BOSH values\r\n    this.hold = 1;\r\n    this.wait = 60;\r\n    this.window = 5;\r\n    this.errors = 0;\r\n\r\n    this._requests = [];\r\n};\r\n\r\nStrophe.Bosh.prototype = {\r\n    /** Variable: strip\r\n     *\r\n     *  BOSH-Connections will have all stanzas wrapped in a <body> tag when\r\n     *  passed to <Strophe.Connection.xmlInput> or <Strophe.Connection.xmlOutput>.\r\n     *  To strip this tag, User code can set <Strophe.Bosh.strip> to \"body\":\r\n     *\r\n     *  > Strophe.Bosh.prototype.strip = \"body\";\r\n     *\r\n     *  This will enable stripping of the body tag in both\r\n     *  <Strophe.Connection.xmlInput> and <Strophe.Connection.xmlOutput>.\r\n     */\r\n    strip: null,\r\n\r\n    /** PrivateFunction: _buildBody\r\n     *  _Private_ helper function to generate the <body/> wrapper for BOSH.\r\n     *\r\n     *  Returns:\r\n     *    A Strophe.Builder with a <body/> element.\r\n     */\r\n    _buildBody: function ()\r\n    {\r\n        var bodyWrap = $build('body', {\r\n            rid: this.rid++,\r\n            xmlns: Strophe.NS.HTTPBIND\r\n        });\r\n\r\n        if (this.sid !== null) {\r\n            bodyWrap.attrs({sid: this.sid});\r\n        }\r\n\r\n        return bodyWrap;\r\n    },\r\n\r\n    /** PrivateFunction: _reset\r\n     *  Reset the connection.\r\n     *\r\n     *  This function is called by the reset function of the Strophe Connection\r\n     */\r\n    _reset: function ()\r\n    {\r\n        this.rid = Math.floor(Math.random() * 4294967295);\r\n        this.sid = null;\r\n        this.errors = 0;\r\n    },\r\n\r\n    /** PrivateFunction: _connect\r\n     *  _Private_ function that initializes the BOSH connection.\r\n     *\r\n     *  Creates and sends the Request that initializes the BOSH connection.\r\n     */\r\n    _connect: function (wait, hold, route)\r\n    {\r\n        this.wait = wait || this.wait;\r\n        this.hold = hold || this.hold;\r\n        this.errors = 0;\r\n\r\n        // build the body tag\r\n        var body = this._buildBody().attrs({\r\n            to: this._conn.domain,\r\n            \"xml:lang\": \"en\",\r\n            wait: this.wait,\r\n            hold: this.hold,\r\n            content: \"text/xml; charset=utf-8\",\r\n            ver: \"1.6\",\r\n            \"xmpp:version\": \"1.0\",\r\n            \"xmlns:xmpp\": Strophe.NS.BOSH\r\n        });\r\n\r\n        if(route){\r\n            body.attrs({\r\n                route: route\r\n            });\r\n        }\r\n\r\n        var _connect_cb = this._conn._connect_cb;\r\n\r\n        this._requests.push(\r\n            new Strophe.Request(body.tree(),\r\n                                this._onRequestStateChange.bind(\r\n                                    this, _connect_cb.bind(this._conn)),\r\n                                body.tree().getAttribute(\"rid\")));\r\n        this._throttledRequestHandler();\r\n    },\r\n\r\n    /** PrivateFunction: _attach\r\n     *  Attach to an already created and authenticated BOSH session.\r\n     *\r\n     *  This function is provided to allow Strophe to attach to BOSH\r\n     *  sessions which have been created externally, perhaps by a Web\r\n     *  application.  This is often used to support auto-login type features\r\n     *  without putting user credentials into the page.\r\n     *\r\n     *  Parameters:\r\n     *    (String) jid - The full JID that is bound by the session.\r\n     *    (String) sid - The SID of the BOSH session.\r\n     *    (String) rid - The current RID of the BOSH session.  This RID\r\n     *      will be used by the next request.\r\n     *    (Function) callback The connect callback function.\r\n     *    (Integer) wait - The optional HTTPBIND wait value.  This is the\r\n     *      time the server will wait before returning an empty result for\r\n     *      a request.  The default setting of 60 seconds is recommended.\r\n     *      Other settings will require tweaks to the Strophe.TIMEOUT value.\r\n     *    (Integer) hold - The optional HTTPBIND hold value.  This is the\r\n     *      number of connections the server will hold at one time.  This\r\n     *      should almost always be set to 1 (the default).\r\n     *    (Integer) wind - The optional HTTBIND window value.  This is the\r\n     *      allowed range of request ids that are valid.  The default is 5.\r\n     */\r\n    _attach: function (jid, sid, rid, callback, wait, hold, wind)\r\n    {\r\n        this._conn.jid = jid;\r\n        this.sid = sid;\r\n        this.rid = rid;\r\n\r\n        this._conn.connect_callback = callback;\r\n\r\n        this._conn.domain = Strophe.getDomainFromJid(this._conn.jid);\r\n\r\n        this._conn.authenticated = true;\r\n        this._conn.connected = true;\r\n\r\n        this.wait = wait || this.wait;\r\n        this.hold = hold || this.hold;\r\n        this.window = wind || this.window;\r\n\r\n        this._conn._changeConnectStatus(Strophe.Status.ATTACHED, null);\r\n    },\r\n\r\n    /** PrivateFunction: _connect_cb\r\n     *  _Private_ handler for initial connection request.\r\n     *\r\n     *  This handler is used to process the Bosh-part of the initial request.\r\n     *  Parameters:\r\n     *    (Strophe.Request) bodyWrap - The received stanza.\r\n     */\r\n    _connect_cb: function (bodyWrap)\r\n    {\r\n        var typ = bodyWrap.getAttribute(\"type\");\r\n        var cond, conflict;\r\n        if (typ !== null && typ == \"terminate\") {\r\n            // an error occurred\r\n            Strophe.error(\"BOSH-Connection failed: \" + cond);\r\n            cond = bodyWrap.getAttribute(\"condition\");\r\n            conflict = bodyWrap.getElementsByTagName(\"conflict\");\r\n            if (cond !== null) {\r\n                if (cond == \"remote-stream-error\" && conflict.length > 0) {\r\n                    cond = \"conflict\";\r\n                }\r\n                this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, cond);\r\n            } else {\r\n                this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, \"unknown\");\r\n            }\r\n            this._conn._doDisconnect();\r\n            return Strophe.Status.CONNFAIL;\r\n        }\r\n\r\n        // check to make sure we don't overwrite these if _connect_cb is\r\n        // called multiple times in the case of missing stream:features\r\n        if (!this.sid) {\r\n            this.sid = bodyWrap.getAttribute(\"sid\");\r\n        }\r\n        var wind = bodyWrap.getAttribute('requests');\r\n        if (wind) { this.window = parseInt(wind, 10); }\r\n        var hold = bodyWrap.getAttribute('hold');\r\n        if (hold) { this.hold = parseInt(hold, 10); }\r\n        var wait = bodyWrap.getAttribute('wait');\r\n        if (wait) { this.wait = parseInt(wait, 10); }\r\n    },\r\n\r\n    /** PrivateFunction: _disconnect\r\n     *  _Private_ part of Connection.disconnect for Bosh\r\n     *\r\n     *  Parameters:\r\n     *    (Request) pres - This stanza will be sent before disconnecting.\r\n     */\r\n    _disconnect: function (pres)\r\n    {\r\n        this._sendTerminate(pres);\r\n    },\r\n\r\n    /** PrivateFunction: _doDisconnect\r\n     *  _Private_ function to disconnect.\r\n     *\r\n     *  Resets the SID and RID.\r\n     */\r\n    _doDisconnect: function ()\r\n    {\r\n        this.sid = null;\r\n        this.rid = Math.floor(Math.random() * 4294967295);\r\n    },\r\n\r\n    /** PrivateFunction: _emptyQueue\r\n     * _Private_ function to check if the Request queue is empty.\r\n     *\r\n     *  Returns:\r\n     *    True, if there are no Requests queued, False otherwise.\r\n     */\r\n    _emptyQueue: function ()\r\n    {\r\n        return this._requests.length === 0;\r\n    },\r\n\r\n    /** PrivateFunction: _hitError\r\n     *  _Private_ function to handle the error count.\r\n     *\r\n     *  Requests are resent automatically until their error count reaches\r\n     *  5.  Each time an error is encountered, this function is called to\r\n     *  increment the count and disconnect if the count is too high.\r\n     *\r\n     *  Parameters:\r\n     *    (Integer) reqStatus - The request status.\r\n     */\r\n    _hitError: function (reqStatus)\r\n    {\r\n        this.errors++;\r\n        Strophe.warn(\"request errored, status: \" + reqStatus +\r\n                     \", number of errors: \" + this.errors);\r\n        if (this.errors > 4) {\r\n            this._conn._onDisconnectTimeout();\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _no_auth_received\r\n     *\r\n     * Called on stream start/restart when no stream:features\r\n     * has been received and sends a blank poll request.\r\n     */\r\n    _no_auth_received: function (_callback)\r\n    {\r\n        if (_callback) {\r\n            _callback = _callback.bind(this._conn);\r\n        } else {\r\n            _callback = this._conn._connect_cb.bind(this._conn);\r\n        }\r\n        var body = this._buildBody();\r\n        this._requests.push(\r\n                new Strophe.Request(body.tree(),\r\n                    this._onRequestStateChange.bind(\r\n                        this, _callback.bind(this._conn)),\r\n                    body.tree().getAttribute(\"rid\")));\r\n        this._throttledRequestHandler();\r\n    },\r\n\r\n    /** PrivateFunction: _onDisconnectTimeout\r\n     *  _Private_ timeout handler for handling non-graceful disconnection.\r\n     *\r\n     *  Cancels all remaining Requests and clears the queue.\r\n     */\r\n    _onDisconnectTimeout: function () {\r\n        this._abortAllRequests();\r\n    },\r\n\r\n    /** PrivateFunction: _abortAllRequests\r\n     *  _Private_ helper function that makes sure all pending requests are aborted.\r\n     */\r\n    _abortAllRequests: function _abortAllRequests() {\r\n        var req;\r\n        while (this._requests.length > 0) {\r\n            req = this._requests.pop();\r\n            req.abort = true;\r\n            req.xhr.abort();\r\n            // jslint complains, but this is fine. setting to empty func\r\n            // is necessary for IE6\r\n            req.xhr.onreadystatechange = function () {}; // jshint ignore:line\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _onIdle\r\n     *  _Private_ handler called by Strophe.Connection._onIdle\r\n     *\r\n     *  Sends all queued Requests or polls with empty Request if there are none.\r\n     */\r\n    _onIdle: function () {\r\n        var data = this._conn._data;\r\n\r\n        // if no requests are in progress, poll\r\n        if (this._conn.authenticated && this._requests.length === 0 &&\r\n            data.length === 0 && !this._conn.disconnecting) {\r\n            Strophe.info(\"no requests during idle cycle, sending \" +\r\n                         \"blank request\");\r\n            data.push(null);\r\n        }\r\n\r\n        if (this._conn.paused) {\r\n            return;\r\n        }\r\n\r\n        if (this._requests.length < 2 && data.length > 0) {\r\n            var body = this._buildBody();\r\n            for (var i = 0; i < data.length; i++) {\r\n                if (data[i] !== null) {\r\n                    if (data[i] === \"restart\") {\r\n                        body.attrs({\r\n                            to: this._conn.domain,\r\n                            \"xml:lang\": \"en\",\r\n                            \"xmpp:restart\": \"true\",\r\n                            \"xmlns:xmpp\": Strophe.NS.BOSH\r\n                        });\r\n                    } else {\r\n                        body.cnode(data[i]).up();\r\n                    }\r\n                }\r\n            }\r\n            delete this._conn._data;\r\n            this._conn._data = [];\r\n            this._requests.push(\r\n                new Strophe.Request(body.tree(),\r\n                                    this._onRequestStateChange.bind(\r\n                                        this, this._conn._dataRecv.bind(this._conn)),\r\n                                    body.tree().getAttribute(\"rid\")));\r\n            this._throttledRequestHandler();\r\n        }\r\n\r\n        if (this._requests.length > 0) {\r\n            var time_elapsed = this._requests[0].age();\r\n            if (this._requests[0].dead !== null) {\r\n                if (this._requests[0].timeDead() >\r\n                    Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait)) {\r\n                    this._throttledRequestHandler();\r\n                }\r\n            }\r\n\r\n            if (time_elapsed > Math.floor(Strophe.TIMEOUT * this.wait)) {\r\n                Strophe.warn(\"Request \" +\r\n                             this._requests[0].id +\r\n                             \" timed out, over \" + Math.floor(Strophe.TIMEOUT * this.wait) +\r\n                             \" seconds since last activity\");\r\n                this._throttledRequestHandler();\r\n            }\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _onRequestStateChange\r\n     *  _Private_ handler for Strophe.Request state changes.\r\n     *\r\n     *  This function is called when the XMLHttpRequest readyState changes.\r\n     *  It contains a lot of error handling logic for the many ways that\r\n     *  requests can fail, and calls the request callback when requests\r\n     *  succeed.\r\n     *\r\n     *  Parameters:\r\n     *    (Function) func - The handler for the request.\r\n     *    (Strophe.Request) req - The request that is changing readyState.\r\n     */\r\n    _onRequestStateChange: function (func, req)\r\n    {\r\n        Strophe.debug(\"request id \" + req.id +\r\n                      \".\" + req.sends + \" state changed to \" +\r\n                      req.xhr.readyState);\r\n\r\n        if (req.abort) {\r\n            req.abort = false;\r\n            return;\r\n        }\r\n\r\n        // request complete\r\n        var reqStatus;\r\n        if (req.xhr.readyState == 4) {\r\n            reqStatus = 0;\r\n            try {\r\n                reqStatus = req.xhr.status;\r\n            } catch (e) {\r\n                // ignore errors from undefined status attribute.  works\r\n                // around a browser bug\r\n            }\r\n\r\n            if (typeof(reqStatus) == \"undefined\") {\r\n                reqStatus = 0;\r\n            }\r\n\r\n            if (this.disconnecting) {\r\n                if (reqStatus >= 400) {\r\n                    this._hitError(reqStatus);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            var reqIs0 = (this._requests[0] == req);\r\n            var reqIs1 = (this._requests[1] == req);\r\n\r\n            if ((reqStatus > 0 && reqStatus < 500) || req.sends > 5) {\r\n                // remove from internal queue\r\n                this._removeRequest(req);\r\n                Strophe.debug(\"request id \" +\r\n                              req.id +\r\n                              \" should now be removed\");\r\n            }\r\n\r\n            // request succeeded\r\n            if (reqStatus == 200) {\r\n                // if request 1 finished, or request 0 finished and request\r\n                // 1 is over Strophe.SECONDARY_TIMEOUT seconds old, we need to\r\n                // restart the other - both will be in the first spot, as the\r\n                // completed request has been removed from the queue already\r\n                if (reqIs1 ||\r\n                    (reqIs0 && this._requests.length > 0 &&\r\n                     this._requests[0].age() > Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait))) {\r\n                    this._restartRequest(0);\r\n                }\r\n                // call handler\r\n                Strophe.debug(\"request id \" +\r\n                              req.id + \".\" +\r\n                              req.sends + \" got 200\");\r\n                func(req);\r\n                this.errors = 0;\r\n            } else {\r\n                Strophe.error(\"request id \" +\r\n                              req.id + \".\" +\r\n                              req.sends + \" error \" + reqStatus +\r\n                              \" happened\");\r\n                if (reqStatus === 0 ||\r\n                    (reqStatus >= 400 && reqStatus < 600) ||\r\n                    reqStatus >= 12000) {\r\n                    this._hitError(reqStatus);\r\n                    if (reqStatus >= 400 && reqStatus < 500) {\r\n                        this._conn._changeConnectStatus(Strophe.Status.DISCONNECTING,\r\n                                                  null);\r\n                        this._conn._doDisconnect();\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (!((reqStatus > 0 && reqStatus < 500) ||\r\n                  req.sends > 5)) {\r\n                this._throttledRequestHandler();\r\n            }\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _processRequest\r\n     *  _Private_ function to process a request in the queue.\r\n     *\r\n     *  This function takes requests off the queue and sends them and\r\n     *  restarts dead requests.\r\n     *\r\n     *  Parameters:\r\n     *    (Integer) i - The index of the request in the queue.\r\n     */\r\n    _processRequest: function (i)\r\n    {\r\n        var self = this;\r\n        var req = this._requests[i];\r\n        var reqStatus = -1;\r\n\r\n        try {\r\n            if (req.xhr.readyState == 4) {\r\n                reqStatus = req.xhr.status;\r\n            }\r\n        } catch (e) {\r\n            Strophe.error(\"caught an error in _requests[\" + i +\r\n                          \"], reqStatus: \" + reqStatus);\r\n        }\r\n\r\n        if (typeof(reqStatus) == \"undefined\") {\r\n            reqStatus = -1;\r\n        }\r\n\r\n        // make sure we limit the number of retries\r\n        if (req.sends > this._conn.maxRetries) {\r\n            this._conn._onDisconnectTimeout();\r\n            return;\r\n        }\r\n\r\n        var time_elapsed = req.age();\r\n        var primaryTimeout = (!isNaN(time_elapsed) &&\r\n                              time_elapsed > Math.floor(Strophe.TIMEOUT * this.wait));\r\n        var secondaryTimeout = (req.dead !== null &&\r\n                                req.timeDead() > Math.floor(Strophe.SECONDARY_TIMEOUT * this.wait));\r\n        var requestCompletedWithServerError = (req.xhr.readyState == 4 &&\r\n                                               (reqStatus < 1 ||\r\n                                                reqStatus >= 500));\r\n        if (primaryTimeout || secondaryTimeout ||\r\n            requestCompletedWithServerError) {\r\n            if (secondaryTimeout) {\r\n                Strophe.error(\"Request \" +\r\n                              this._requests[i].id +\r\n                              \" timed out (secondary), restarting\");\r\n            }\r\n            req.abort = true;\r\n            req.xhr.abort();\r\n            // setting to null fails on IE6, so set to empty function\r\n            req.xhr.onreadystatechange = function () {};\r\n            this._requests[i] = new Strophe.Request(req.xmlData,\r\n                                                    req.origFunc,\r\n                                                    req.rid,\r\n                                                    req.sends);\r\n            req = this._requests[i];\r\n        }\r\n\r\n        if (req.xhr.readyState === 0) {\r\n            Strophe.debug(\"request id \" + req.id +\r\n                          \".\" + req.sends + \" posting\");\r\n\r\n            try {\r\n                req.xhr.open(\"POST\", this._conn.service, this._conn.options.sync ? false : true);\r\n                req.xhr.setRequestHeader(\"Content-Type\", \"text/xml; charset=utf-8\");\r\n            } catch (e2) {\r\n                Strophe.error(\"XHR open failed.\");\r\n                if (!this._conn.connected) {\r\n                    this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,\r\n                                              \"bad-service\");\r\n                }\r\n                this._conn.disconnect();\r\n                return;\r\n            }\r\n\r\n            // Fires the XHR request -- may be invoked immediately\r\n            // or on a gradually expanding retry window for reconnects\r\n            var sendFunc = function () {\r\n                req.date = new Date();\r\n                if (self._conn.options.customHeaders){\r\n                    var headers = self._conn.options.customHeaders;\r\n                    for (var header in headers) {\r\n                        if (headers.hasOwnProperty(header)) {\r\n                            req.xhr.setRequestHeader(header, headers[header]);\r\n                        }\r\n                    }\r\n                }\r\n                req.xhr.send(req.data);\r\n            };\r\n\r\n            // Implement progressive backoff for reconnects --\r\n            // First retry (send == 1) should also be instantaneous\r\n            if (req.sends > 1) {\r\n                // Using a cube of the retry number creates a nicely\r\n                // expanding retry window\r\n                var backoff = Math.min(Math.floor(Strophe.TIMEOUT * this.wait),\r\n                                       Math.pow(req.sends, 3)) * 1000;\r\n                setTimeout(sendFunc, backoff);\r\n            } else {\r\n                sendFunc();\r\n            }\r\n\r\n            req.sends++;\r\n\r\n            if (this._conn.xmlOutput !== Strophe.Connection.prototype.xmlOutput) {\r\n                if (req.xmlData.nodeName === this.strip && req.xmlData.childNodes.length) {\r\n                    this._conn.xmlOutput(req.xmlData.childNodes[0]);\r\n                } else {\r\n                    this._conn.xmlOutput(req.xmlData);\r\n                }\r\n            }\r\n            if (this._conn.rawOutput !== Strophe.Connection.prototype.rawOutput) {\r\n                this._conn.rawOutput(req.data);\r\n            }\r\n        } else {\r\n            Strophe.debug(\"_processRequest: \" +\r\n                          (i === 0 ? \"first\" : \"second\") +\r\n                          \" request has readyState of \" +\r\n                          req.xhr.readyState);\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _removeRequest\r\n     *  _Private_ function to remove a request from the queue.\r\n     *\r\n     *  Parameters:\r\n     *    (Strophe.Request) req - The request to remove.\r\n     */\r\n    _removeRequest: function (req)\r\n    {\r\n        Strophe.debug(\"removing request\");\r\n\r\n        var i;\r\n        for (i = this._requests.length - 1; i >= 0; i--) {\r\n            if (req == this._requests[i]) {\r\n                this._requests.splice(i, 1);\r\n            }\r\n        }\r\n\r\n        // IE6 fails on setting to null, so set to empty function\r\n        req.xhr.onreadystatechange = function () {};\r\n\r\n        this._throttledRequestHandler();\r\n    },\r\n\r\n    /** PrivateFunction: _restartRequest\r\n     *  _Private_ function to restart a request that is presumed dead.\r\n     *\r\n     *  Parameters:\r\n     *    (Integer) i - The index of the request in the queue.\r\n     */\r\n    _restartRequest: function (i)\r\n    {\r\n        var req = this._requests[i];\r\n        if (req.dead === null) {\r\n            req.dead = new Date();\r\n        }\r\n\r\n        this._processRequest(i);\r\n    },\r\n\r\n    /** PrivateFunction: _reqToData\r\n     * _Private_ function to get a stanza out of a request.\r\n     *\r\n     * Tries to extract a stanza out of a Request Object.\r\n     * When this fails the current connection will be disconnected.\r\n     *\r\n     *  Parameters:\r\n     *    (Object) req - The Request.\r\n     *\r\n     *  Returns:\r\n     *    The stanza that was passed.\r\n     */\r\n    _reqToData: function (req)\r\n    {\r\n        try {\r\n            return req.getResponse();\r\n        } catch (e) {\r\n            if (e != \"parsererror\") { throw e; }\r\n            this._conn.disconnect(\"strophe-parsererror\");\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _sendTerminate\r\n     *  _Private_ function to send initial disconnect sequence.\r\n     *\r\n     *  This is the first step in a graceful disconnect.  It sends\r\n     *  the BOSH server a terminate body and includes an unavailable\r\n     *  presence if authentication has completed.\r\n     */\r\n    _sendTerminate: function (pres)\r\n    {\r\n        Strophe.info(\"_sendTerminate was called\");\r\n        var body = this._buildBody().attrs({type: \"terminate\"});\r\n\r\n        if (pres) {\r\n            body.cnode(pres.tree());\r\n        }\r\n\r\n        var req = new Strophe.Request(body.tree(),\r\n                                      this._onRequestStateChange.bind(\r\n                                          this, this._conn._dataRecv.bind(this._conn)),\r\n                                      body.tree().getAttribute(\"rid\"));\r\n\r\n        this._requests.push(req);\r\n        this._throttledRequestHandler();\r\n    },\r\n\r\n    /** PrivateFunction: _send\r\n     *  _Private_ part of the Connection.send function for BOSH\r\n     *\r\n     * Just triggers the RequestHandler to send the messages that are in the queue\r\n     */\r\n    _send: function () {\r\n        clearTimeout(this._conn._idleTimeout);\r\n        this._throttledRequestHandler();\r\n        this._conn._idleTimeout = setTimeout(this._conn._onIdle.bind(this._conn), 100);\r\n    },\r\n\r\n    /** PrivateFunction: _sendRestart\r\n     *\r\n     *  Send an xmpp:restart stanza.\r\n     */\r\n    _sendRestart: function ()\r\n    {\r\n        this._throttledRequestHandler();\r\n        clearTimeout(this._conn._idleTimeout);\r\n    },\r\n\r\n    /** PrivateFunction: _throttledRequestHandler\r\n     *  _Private_ function to throttle requests to the connection window.\r\n     *\r\n     *  This function makes sure we don't send requests so fast that the\r\n     *  request ids overflow the connection window in the case that one\r\n     *  request died.\r\n     */\r\n    _throttledRequestHandler: function ()\r\n    {\r\n        if (!this._requests) {\r\n            Strophe.debug(\"_throttledRequestHandler called with \" +\r\n                          \"undefined requests\");\r\n        } else {\r\n            Strophe.debug(\"_throttledRequestHandler called with \" +\r\n                          this._requests.length + \" requests\");\r\n        }\r\n\r\n        if (!this._requests || this._requests.length === 0) {\r\n            return;\r\n        }\r\n\r\n        if (this._requests.length > 0) {\r\n            this._processRequest(0);\r\n        }\r\n\r\n        if (this._requests.length > 1 &&\r\n            Math.abs(this._requests[0].rid -\r\n                     this._requests[1].rid) < this.window) {\r\n            this._processRequest(1);\r\n        }\r\n    }\r\n};\r\n\r\n/*\r\n    This program is distributed under the terms of the MIT license.\r\n    Please see the LICENSE file for details.\r\n\r\n    Copyright 2006-2008, OGG, LLC\r\n*/\r\n\r\n/* jshint undef: true, unused: true:, noarg: true, latedef: true */\r\n/*global window, clearTimeout, WebSocket,\r\n    DOMParser, Strophe, $build */\r\n\r\n/** Class: Strophe.WebSocket\r\n *  _Private_ helper class that handles WebSocket Connections\r\n *\r\n *  The Strophe.WebSocket class is used internally by Strophe.Connection\r\n *  to encapsulate WebSocket sessions. It is not meant to be used from user's code.\r\n */\r\n\r\n/** File: websocket.js\r\n *  A JavaScript library to enable XMPP over Websocket in Strophejs.\r\n *\r\n *  This file implements XMPP over WebSockets for Strophejs.\r\n *  If a Connection is established with a Websocket url (ws://...)\r\n *  Strophe will use WebSockets.\r\n *  For more information on XMPP-over WebSocket see this RFC draft:\r\n *  http://tools.ietf.org/html/draft-ietf-xmpp-websocket-00\r\n *\r\n *  WebSocket support implemented by Andreas Guth (andreas.guth@rwth-aachen.de)\r\n */\r\n\r\n/** PrivateConstructor: Strophe.Websocket\r\n *  Create and initialize a Strophe.WebSocket object.\r\n *  Currently only sets the connection Object.\r\n *\r\n *  Parameters:\r\n *    (Strophe.Connection) connection - The Strophe.Connection that will use WebSockets.\r\n *\r\n *  Returns:\r\n *    A new Strophe.WebSocket object.\r\n */\r\nStrophe.Websocket = function(connection) {\r\n    this._conn = connection;\r\n    this.strip = \"wrapper\";\r\n\r\n    var service = connection.service;\r\n    if (service.indexOf(\"ws:\") !== 0 && service.indexOf(\"wss:\") !== 0) {\r\n        // If the service is not an absolute URL, assume it is a path and put the absolute\r\n        // URL together from options, current URL and the path.\r\n        var new_service = \"\";\r\n\r\n        if (connection.options.protocol === \"ws\" && window.location.protocol !== \"https:\") {\r\n            new_service += \"ws\";\r\n        } else {\r\n            new_service += \"wss\";\r\n        }\r\n\r\n        new_service += \"://\" + window.location.host;\r\n\r\n        if (service.indexOf(\"/\") !== 0) {\r\n            new_service += window.location.pathname + service;\r\n        } else {\r\n            new_service += service;\r\n        }\r\n\r\n        connection.service = new_service;\r\n    }\r\n};\r\n\r\nStrophe.Websocket.prototype = {\r\n    /** PrivateFunction: _buildStream\r\n     *  _Private_ helper function to generate the <stream> start tag for WebSockets\r\n     *\r\n     *  Returns:\r\n     *    A Strophe.Builder with a <stream> element.\r\n     */\r\n    _buildStream: function ()\r\n    {\r\n        return $build(\"open\", {\r\n            \"xmlns\": Strophe.NS.FRAMING,\r\n            \"to\": this._conn.domain,\r\n            \"version\": '1.0'\r\n        });\r\n    },\r\n\r\n    /** PrivateFunction: _check_streamerror\r\n     * _Private_ checks a message for stream:error\r\n     *\r\n     *  Parameters:\r\n     *    (Strophe.Request) bodyWrap - The received stanza.\r\n     *    connectstatus - The ConnectStatus that will be set on error.\r\n     *  Returns:\r\n     *     true if there was a streamerror, false otherwise.\r\n     */\r\n    _check_streamerror: function (bodyWrap, connectstatus) {\r\n        var errors = bodyWrap.getElementsByTagNameNS(Strophe.NS.STREAM, \"error\");\r\n        if (errors.length === 0) {\r\n            return false;\r\n        }\r\n        var error = errors[0];\r\n\r\n        var condition = \"\";\r\n        var text = \"\";\r\n\r\n        var ns = \"urn:ietf:params:xml:ns:xmpp-streams\";\r\n        for (var i = 0; i < error.childNodes.length; i++) {\r\n            var e = error.childNodes[i];\r\n            if (e.getAttribute(\"xmlns\") !== ns) {\r\n                break;\r\n            } if (e.nodeName === \"text\") {\r\n                text = e.textContent;\r\n            } else {\r\n                condition = e.nodeName;\r\n            }\r\n        }\r\n\r\n        var errorString = \"WebSocket stream error: \";\r\n\r\n        if (condition) {\r\n            errorString += condition;\r\n        } else {\r\n            errorString += \"unknown\";\r\n        }\r\n\r\n        if (text) {\r\n            errorString += \" - \" + condition;\r\n        }\r\n\r\n        Strophe.error(errorString);\r\n\r\n        // close the connection on stream_error\r\n        this._conn._changeConnectStatus(connectstatus, condition);\r\n        this._conn._doDisconnect();\r\n        return true;\r\n    },\r\n\r\n    /** PrivateFunction: _reset\r\n     *  Reset the connection.\r\n     *\r\n     *  This function is called by the reset function of the Strophe Connection.\r\n     *  Is not needed by WebSockets.\r\n     */\r\n    _reset: function ()\r\n    {\r\n        return;\r\n    },\r\n\r\n    /** PrivateFunction: _connect\r\n     *  _Private_ function called by Strophe.Connection.connect\r\n     *\r\n     *  Creates a WebSocket for a connection and assigns Callbacks to it.\r\n     *  Does nothing if there already is a WebSocket.\r\n     */\r\n    _connect: function () {\r\n        // Ensure that there is no open WebSocket from a previous Connection.\r\n        this._closeSocket();\r\n\r\n        // Create the new WobSocket\r\n        this.socket = new WebSocket(this._conn.service, \"xmpp\");\r\n        this.socket.onopen = this._onOpen.bind(this);\r\n        this.socket.onerror = this._onError.bind(this);\r\n        this.socket.onclose = this._onClose.bind(this);\r\n        this.socket.onmessage = this._connect_cb_wrapper.bind(this);\r\n    },\r\n\r\n    /** PrivateFunction: _connect_cb\r\n     *  _Private_ function called by Strophe.Connection._connect_cb\r\n     *\r\n     * checks for stream:error\r\n     *\r\n     *  Parameters:\r\n     *    (Strophe.Request) bodyWrap - The received stanza.\r\n     */\r\n    _connect_cb: function(bodyWrap) {\r\n        var error = this._check_streamerror(bodyWrap, Strophe.Status.CONNFAIL);\r\n        if (error) {\r\n            return Strophe.Status.CONNFAIL;\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _handleStreamStart\r\n     * _Private_ function that checks the opening <open /> tag for errors.\r\n     *\r\n     * Disconnects if there is an error and returns false, true otherwise.\r\n     *\r\n     *  Parameters:\r\n     *    (Node) message - Stanza containing the <open /> tag.\r\n     */\r\n    _handleStreamStart: function(message) {\r\n        var error = false;\r\n\r\n        // Check for errors in the <open /> tag\r\n        var ns = message.getAttribute(\"xmlns\");\r\n        if (typeof ns !== \"string\") {\r\n            error = \"Missing xmlns in <open />\";\r\n        } else if (ns !== Strophe.NS.FRAMING) {\r\n            error = \"Wrong xmlns in <open />: \" + ns;\r\n        }\r\n\r\n        var ver = message.getAttribute(\"version\");\r\n        if (typeof ver !== \"string\") {\r\n            error = \"Missing version in <open />\";\r\n        } else if (ver !== \"1.0\") {\r\n            error = \"Wrong version in <open />: \" + ver;\r\n        }\r\n\r\n        if (error) {\r\n            this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, error);\r\n            this._conn._doDisconnect();\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    },\r\n\r\n    /** PrivateFunction: _connect_cb_wrapper\r\n     * _Private_ function that handles the first connection messages.\r\n     *\r\n     * On receiving an opening stream tag this callback replaces itself with the real\r\n     * message handler. On receiving a stream error the connection is terminated.\r\n     */\r\n    _connect_cb_wrapper: function(message) {\r\n        if (message.data.indexOf(\"<open \") === 0 || message.data.indexOf(\"<?xml\") === 0) {\r\n            // Strip the XML Declaration, if there is one\r\n            var data = message.data.replace(/^(<\\?.*?\\?>\\s*)*/, \"\");\r\n            if (data === '') return;\r\n\r\n            var streamStart = new DOMParser().parseFromString(data, \"text/xml\").documentElement;\r\n            this._conn.xmlInput(streamStart);\r\n            this._conn.rawInput(message.data);\r\n\r\n            //_handleStreamSteart will check for XML errors and disconnect on error\r\n            if (this._handleStreamStart(streamStart)) {\r\n                //_connect_cb will check for stream:error and disconnect on error\r\n                this._connect_cb(streamStart);\r\n            }\r\n        } else if (message.data.indexOf(\"<close \") === 0) { //'<close xmlns=\"urn:ietf:params:xml:ns:xmpp-framing />') {\r\n            this._conn.rawInput(message.data);\r\n            this._conn.xmlInput(message);\r\n            var see_uri = message.getAttribute(\"see-other-uri\");\r\n            if (see_uri) {\r\n                this._conn._changeConnectStatus(Strophe.Status.REDIRECT, \"Received see-other-uri, resetting connection\");\r\n                this._conn.reset();\r\n                this._conn.service = see_uri;\r\n                this._connect();\r\n            } else {\r\n                this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, \"Received closing stream\");\r\n                this._conn._doDisconnect();\r\n            }\r\n        } else {\r\n            var string = this._streamWrap(message.data);\r\n            var elem = new DOMParser().parseFromString(string, \"text/xml\").documentElement;\r\n            this.socket.onmessage = this._onMessage.bind(this);\r\n            this._conn._connect_cb(elem, null, message.data);\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _disconnect\r\n     *  _Private_ function called by Strophe.Connection.disconnect\r\n     *\r\n     *  Disconnects and sends a last stanza if one is given\r\n     *\r\n     *  Parameters:\r\n     *    (Request) pres - This stanza will be sent before disconnecting.\r\n     */\r\n    _disconnect: function (pres)\r\n    {\r\n        if (this.socket && this.socket.readyState !== WebSocket.CLOSED) {\r\n            if (pres) {\r\n                this._conn.send(pres);\r\n            }\r\n            var close = $build(\"close\", { \"xmlns\": Strophe.NS.FRAMING, });\r\n            this._conn.xmlOutput(close);\r\n            var closeString = Strophe.serialize(close);\r\n            this._conn.rawOutput(closeString);\r\n            try {\r\n                this.socket.send(closeString);\r\n            } catch (e) {\r\n                Strophe.info(\"Couldn't send <close /> tag.\");\r\n            }\r\n        }\r\n        this._conn._doDisconnect();\r\n    },\r\n\r\n    /** PrivateFunction: _doDisconnect\r\n     *  _Private_ function to disconnect.\r\n     *\r\n     *  Just closes the Socket for WebSockets\r\n     */\r\n    _doDisconnect: function ()\r\n    {\r\n        Strophe.info(\"WebSockets _doDisconnect was called\");\r\n        this._closeSocket();\r\n    },\r\n\r\n    /** PrivateFunction _streamWrap\r\n     *  _Private_ helper function to wrap a stanza in a <stream> tag.\r\n     *  This is used so Strophe can process stanzas from WebSockets like BOSH\r\n     */\r\n    _streamWrap: function (stanza)\r\n    {\r\n        return \"<wrapper>\" + stanza + '</wrapper>';\r\n    },\r\n\r\n\r\n    /** PrivateFunction: _closeSocket\r\n     *  _Private_ function to close the WebSocket.\r\n     *\r\n     *  Closes the socket if it is still open and deletes it\r\n     */\r\n    _closeSocket: function ()\r\n    {\r\n        if (this.socket) { try {\r\n            this.socket.close();\r\n        } catch (e) {} }\r\n        this.socket = null;\r\n    },\r\n\r\n    /** PrivateFunction: _emptyQueue\r\n     * _Private_ function to check if the message queue is empty.\r\n     *\r\n     *  Returns:\r\n     *    True, because WebSocket messages are send immediately after queueing.\r\n     */\r\n    _emptyQueue: function ()\r\n    {\r\n        return true;\r\n    },\r\n\r\n    /** PrivateFunction: _onClose\r\n     * _Private_ function to handle websockets closing.\r\n     *\r\n     * Nothing to do here for WebSockets\r\n     */\r\n    _onClose: function() {\r\n        if(this._conn.connected && !this._conn.disconnecting) {\r\n            Strophe.error(\"Websocket closed unexcectedly\");\r\n            this._conn._doDisconnect();\r\n        } else {\r\n            Strophe.info(\"Websocket closed\");\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _no_auth_received\r\n     *\r\n     * Called on stream start/restart when no stream:features\r\n     * has been received.\r\n     */\r\n    _no_auth_received: function (_callback)\r\n    {\r\n        Strophe.error(\"Server did not send any auth methods\");\r\n        this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, \"Server did not send any auth methods\");\r\n        if (_callback) {\r\n            _callback = _callback.bind(this._conn);\r\n            _callback();\r\n        }\r\n        this._conn._doDisconnect();\r\n    },\r\n\r\n    /** PrivateFunction: _onDisconnectTimeout\r\n     *  _Private_ timeout handler for handling non-graceful disconnection.\r\n     *\r\n     *  This does nothing for WebSockets\r\n     */\r\n    _onDisconnectTimeout: function () {},\r\n\r\n    /** PrivateFunction: _abortAllRequests\r\n     *  _Private_ helper function that makes sure all pending requests are aborted.\r\n     */\r\n    _abortAllRequests: function () {},\r\n\r\n    /** PrivateFunction: _onError\r\n     * _Private_ function to handle websockets errors.\r\n     *\r\n     * Parameters:\r\n     * (Object) error - The websocket error.\r\n     */\r\n    _onError: function(error) {\r\n        Strophe.error(\"Websocket error \" + error);\r\n        this._conn._changeConnectStatus(Strophe.Status.CONNFAIL, \"The WebSocket connection could not be established was disconnected.\");\r\n        this._disconnect();\r\n    },\r\n\r\n    /** PrivateFunction: _onIdle\r\n     *  _Private_ function called by Strophe.Connection._onIdle\r\n     *\r\n     *  sends all queued stanzas\r\n     */\r\n    _onIdle: function () {\r\n        var data = this._conn._data;\r\n        if (data.length > 0 && !this._conn.paused) {\r\n            for (var i = 0; i < data.length; i++) {\r\n                if (data[i] !== null) {\r\n                    var stanza, rawStanza;\r\n                    if (data[i] === \"restart\") {\r\n                        stanza = this._buildStream().tree();\r\n                    } else {\r\n                        stanza = data[i];\r\n                    }\r\n                    rawStanza = Strophe.serialize(stanza);\r\n                    this._conn.xmlOutput(stanza);\r\n                    this._conn.rawOutput(rawStanza);\r\n                    this.socket.send(rawStanza);\r\n                }\r\n            }\r\n            this._conn._data = [];\r\n        }\r\n    },\r\n\r\n    /** PrivateFunction: _onMessage\r\n     * _Private_ function to handle websockets messages.\r\n     *\r\n     * This function parses each of the messages as if they are full documents. [TODO : We may actually want to use a SAX Push parser].\r\n     *\r\n     * Since all XMPP traffic starts with \"<stream:stream version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='3697395463' from='SERVER'>\"\r\n     * The first stanza will always fail to be parsed...\r\n     * Addtionnaly, the seconds stanza will always be a <stream:features> with the stream NS defined in the previous stanza... so we need to 'force' the inclusion of the NS in this stanza!\r\n     *\r\n     * Parameters:\r\n     * (string) message - The websocket message.\r\n     */\r\n    _onMessage: function(message) {\r\n        var elem, data;\r\n        // check for closing stream\r\n        var close = '<close xmlns=\"urn:ietf:params:xml:ns:xmpp-framing\" />';\r\n        if (message.data === close) {\r\n            this._conn.rawInput(close);\r\n            this._conn.xmlInput(message);\r\n            if (!this._conn.disconnecting) {\r\n                this._conn._doDisconnect();\r\n            }\r\n            return;\r\n        } else if (message.data.search(\"<open \") === 0) {\r\n            // This handles stream restarts\r\n            elem = new DOMParser().parseFromString(message.data, \"text/xml\").documentElement;\r\n\r\n            if (!this._handleStreamStart(elem)) {\r\n                return;\r\n            }\r\n        } else {\r\n            data = this._streamWrap(message.data);\r\n            elem = new DOMParser().parseFromString(data, \"text/xml\").documentElement;\r\n        }\r\n\r\n        if (this._check_streamerror(elem, Strophe.Status.ERROR)) {\r\n            return;\r\n        }\r\n\r\n        //handle unavailable presence stanza before disconnecting\r\n        if (this._conn.disconnecting &&\r\n                elem.firstChild.nodeName === \"presence\" &&\r\n                elem.firstChild.getAttribute(\"type\") === \"unavailable\") {\r\n            this._conn.xmlInput(elem);\r\n            this._conn.rawInput(Strophe.serialize(elem));\r\n            // if we are already disconnecting we will ignore the unavailable stanza and\r\n            // wait for the </stream:stream> tag before we close the connection\r\n            return;\r\n        }\r\n        this._conn._dataRecv(elem, message.data);\r\n    },\r\n\r\n    /** PrivateFunction: _onOpen\r\n     * _Private_ function to handle websockets connection setup.\r\n     *\r\n     * The opening stream tag is sent here.\r\n     */\r\n    _onOpen: function() {\r\n        Strophe.info(\"Websocket open\");\r\n        var start = this._buildStream();\r\n        this._conn.xmlOutput(start.tree());\r\n\r\n        var startString = Strophe.serialize(start);\r\n        this._conn.rawOutput(startString);\r\n        this.socket.send(startString);\r\n    },\r\n\r\n    /** PrivateFunction: _reqToData\r\n     * _Private_ function to get a stanza out of a request.\r\n     *\r\n     * WebSockets don't use requests, so the passed argument is just returned.\r\n     *\r\n     *  Parameters:\r\n     *    (Object) stanza - The stanza.\r\n     *\r\n     *  Returns:\r\n     *    The stanza that was passed.\r\n     */\r\n    _reqToData: function (stanza)\r\n    {\r\n        return stanza;\r\n    },\r\n\r\n    /** PrivateFunction: _send\r\n     *  _Private_ part of the Connection.send function for WebSocket\r\n     *\r\n     * Just flushes the messages that are in the queue\r\n     */\r\n    _send: function () {\r\n        this._conn.flush();\r\n    },\r\n\r\n    /** PrivateFunction: _sendRestart\r\n     *\r\n     *  Send an xmpp:restart stanza.\r\n     */\r\n    _sendRestart: function ()\r\n    {\r\n        clearTimeout(this._conn._idleTimeout);\r\n        this._conn._onIdle.bind(this._conn)();\r\n    }\r\n};\r\n\r\n/* jshint ignore:start */\r\nif (callback) {\r\n    return callback(Strophe, $build, $msg, $iq, $pres);\r\n}\r\n\r\n\r\n})(function (Strophe, build, msg, iq, pres) {\r\n    window.Strophe = Strophe;\r\n    window.$build = build;\r\n    window.$msg = msg;\r\n    window.$iq = iq;\r\n    window.$pres = pres;\r\n});\r\n/* jshint ignore:end */\r\n"
  },
  {
    "path": "examples/login/login.html",
    "content": "<!DOCTYPE html>\n<html class=\"ui-page-login\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<link href=\"css/style.css\" rel=\"stylesheet\" />\n\t\t<style>\n\t\t\t.area {\n\t\t\t\tmargin: 20px auto 0px auto;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-input-group {\n\t\t\t\tmargin-top: 10px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-input-group:first-child {\n\t\t\t\tmargin-top: 20px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-input-group label {\n\t\t\t\twidth: 22%;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-input-row label~input,\n\t\t\t.mui-input-row label~select,\n\t\t\t.mui-input-row label~textarea {\n\t\t\t\twidth: 78%;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-checkbox input[type=checkbox],\n\t\t\t.mui-radio input[type=radio] {\n\t\t\t\ttop: 6px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-content-padded {\n\t\t\t\tmargin-top: 25px;\n\t\t\t}\n\t\t\t\n\t\t\t.mui-btn {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t\t\n\t\t\t.link-area {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-top: 25px;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t\n\t\t\t.spliter {\n\t\t\t\tcolor: #bbb;\n\t\t\t\tpadding: 0px 8px;\n\t\t\t}\n\t\t\t\n\t\t\t.oauth-area {\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 20px;\n\t\t\t\tleft: 0px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 100%;\n\t\t\t\tpadding: 0px;\n\t\t\t\tmargin: 0px;\n\t\t\t}\n\t\t\t\n\t\t\t.oauth-area .oauth-btn {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\twidth: 50px;\n\t\t\t\theight: 50px;\n\t\t\t\tbackground-size: 30px 30px;\n\t\t\t\tbackground-position: center center;\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\tmargin: 0px 20px;\n\t\t\t\t/*-webkit-filter: grayscale(100%); */\n\t\t\t\tborder: solid 1px #ddd;\n\t\t\t\tborder-radius: 25px;\n\t\t\t}\n\t\t\t\n\t\t\t.oauth-area .oauth-btn:active {\n\t\t\t\tborder: solid 1px #aaa;\n\t\t\t}\n\t\t\t\n\t\t\t.oauth-area .oauth-btn.disabled {\n\t\t\t\tbackground-color: #ddd;\n\t\t\t}\n\t\t</style>\n\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<h1 class=\"mui-title\">登录</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<form id='login-form' class=\"mui-input-group\">\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<label>账号</label>\n\t\t\t\t\t<input id='account' type=\"text\" class=\"mui-input-clear mui-input\" placeholder=\"请输入账号\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<label>密码</label>\n\t\t\t\t\t<input id='password' type=\"password\" class=\"mui-input-clear mui-input\" placeholder=\"请输入密码\">\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t自动登录\n\t\t\t\t\t\t<div id=\"autoLogin\" class=\"mui-switch\">\n\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</form>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<button id='login' type=\"button\" class=\"mui-btn mui-btn-block mui-btn-primary\">登录</button>\n\t\t\t\t<div class=\"link-area\"><a id='reg'>注册账号</a> <span class=\"spliter\">|</span> <a id='forgetPassword'>忘记密码</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"mui-content-padded oauth-area\">\n\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"js/mui.min.js\"></script>\n\t\t<script src=\"js/mui.enterfocus.js\"></script>\n\t\t<script src=\"js/app.js\"></script>\n\t\t<script>\n\t\t\t(function($, doc) {\n\t\t\t\t$.init({\n\t\t\t\t\tstatusBarBackground: '#f7f7f7'\n\t\t\t\t});\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.screen.lockOrientation(\"portrait-primary\");\n\t\t\t\t\tvar settings = app.getSettings();\n\t\t\t\t\tvar state = app.getState();\n\t\t\t\t\tvar mainPage = plus.webview.getWebviewById(\"main\");\n\t\t\t\t\tvar main_loaded_flag = false;\n\t\t\t\t\tif(!mainPage){\n\t\t\t\t\t\tmainPage = $.preload({\n\t\t\t\t\t\t\t\"id\": 'main',\n\t\t\t\t\t\t\t\"url\": 'main.html'\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tmain_loaded_flag = true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tmainPage.addEventListener(\"loaded\",function () {\n\t\t\t\t\t\tmain_loaded_flag = true;\n\t\t\t\t\t});\n\t\t\t\t\tvar toMain = function() {\n\t\t\t\t\t\t//使用定时器的原因：\n\t\t\t\t\t\t//可能执行太快，main页面loaded事件尚未触发就执行自定义事件，此时必然会失败\n\t\t\t\t\t\tvar id = setInterval(function () {\n\t\t\t\t\t\t\tif(main_loaded_flag){\n\t\t\t\t\t\t\t\tclearInterval(id);\n\t\t\t\t\t\t\t\t$.fire(mainPage, 'show', null);\n\t\t\t\t\t\t\t\tmainPage.show(\"pop-in\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},20);\n\t\t\t\t\t};\n\t\t\t\t\t//检查 \"登录状态/锁屏状态\" 开始\n\t\t\t\t\tif (settings.autoLogin && state.token && settings.gestures) {\n\t\t\t\t\t\t$.openWindow({\n\t\t\t\t\t\t\turl: 'unlock.html',\n\t\t\t\t\t\t\tid: 'unlock',\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\taniShow: 'pop-in'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\twaiting: {\n\t\t\t\t\t\t\t\tautoShow: false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (settings.autoLogin && state.token) {\n\t\t\t\t\t\ttoMain();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tapp.setState(null);\n\t\t\t\t\t\t//第三方登录\n\t\t\t\t\t\tvar authBtns = ['qihoo', 'weixin', 'sinaweibo', 'qq']; //配置业务支持的第三方登录\n\t\t\t\t\t\tvar auths = {};\n\t\t\t\t\t\tvar oauthArea = doc.querySelector('.oauth-area');\n\t\t\t\t\t\tplus.oauth.getServices(function(services) {\n\t\t\t\t\t\t\tfor (var i in services) {\n\t\t\t\t\t\t\t\tvar service = services[i];\n\t\t\t\t\t\t\t\tauths[service.id] = service;\n\t\t\t\t\t\t\t\tif (~authBtns.indexOf(service.id)) {\n\t\t\t\t\t\t\t\t\tvar isInstalled = app.isInstalled(service.id);\n\t\t\t\t\t\t\t\t\tvar btn = document.createElement('div');\n\t\t\t\t\t\t\t\t\t//如果微信未安装，则为不启用状态\n\t\t\t\t\t\t\t\t\tbtn.setAttribute('class', 'oauth-btn' + (!isInstalled && service.id === 'weixin' ? (' disabled') : ''));\n\t\t\t\t\t\t\t\t\tbtn.authId = service.id;\n\t\t\t\t\t\t\t\t\tbtn.style.backgroundImage = 'url(\"images/' + service.id + '.png\")'\n\t\t\t\t\t\t\t\t\toauthArea.appendChild(btn);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(oauthArea).on('tap', '.oauth-btn', function() {\n\t\t\t\t\t\t\t\tif (this.classList.contains('disabled')) {\n\t\t\t\t\t\t\t\t\tplus.nativeUI.toast('您尚未安装微信客户端');\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar auth = auths[this.authId];\n\t\t\t\t\t\t\t\tvar waiting = plus.nativeUI.showWaiting();\n\t\t\t\t\t\t\t\tauth.login(function() {\n\t\t\t\t\t\t\t\t\twaiting.close();\n\t\t\t\t\t\t\t\t\tplus.nativeUI.toast(\"登录认证成功\");\n\t\t\t\t\t\t\t\t\tauth.getUserInfo(function() {\n\t\t\t\t\t\t\t\t\t\tplus.nativeUI.toast(\"获取用户信息成功\");\n\t\t\t\t\t\t\t\t\t\tvar name = auth.userInfo.nickname || auth.userInfo.name;\n\t\t\t\t\t\t\t\t\t\tapp.createState(name, function() {\n\t\t\t\t\t\t\t\t\t\t\ttoMain();\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\t\t\t\t\tplus.nativeUI.toast(\"获取用户信息失败：\" + e.message);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\t\t\t\twaiting.close();\n\t\t\t\t\t\t\t\t\tplus.nativeUI.toast(\"登录认证失败：\" + e.message);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\t\toauthArea.style.display = 'none';\n\t\t\t\t\t\t\tplus.nativeUI.toast(\"获取登录认证失败：\" + e.message);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// close splash\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t//关闭 splash\n\t\t\t\t\t\tplus.navigator.closeSplashscreen();\n\t\t\t\t\t}, 600);\n\t\t\t\t\t//检查 \"登录状态/锁屏状态\" 结束\n\t\t\t\t\tvar loginButton = doc.getElementById('login');\n\t\t\t\t\tvar accountBox = doc.getElementById('account');\n\t\t\t\t\tvar passwordBox = doc.getElementById('password');\n\t\t\t\t\tvar autoLoginButton = doc.getElementById(\"autoLogin\");\n\t\t\t\t\tvar regButton = doc.getElementById('reg');\n\t\t\t\t\tvar forgetButton = doc.getElementById('forgetPassword');\n\t\t\t\t\tloginButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\tvar loginInfo = {\n\t\t\t\t\t\t\taccount: accountBox.value,\n\t\t\t\t\t\t\tpassword: passwordBox.value\n\t\t\t\t\t\t};\n\t\t\t\t\t\tapp.login(loginInfo, function(err) {\n\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\tplus.nativeUI.toast(err);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttoMain();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t$.enterfocus('#login-form input', function() {\n\t\t\t\t\t\t$.trigger(loginButton, 'tap');\n\t\t\t\t\t});\n\t\t\t\t\tautoLoginButton.classList[settings.autoLogin ? 'add' : 'remove']('mui-active')\n\t\t\t\t\tautoLoginButton.addEventListener('toggle', function(event) {\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\tvar isActive = event.detail.isActive;\n\t\t\t\t\t\t\tsettings.autoLogin = isActive;\n\t\t\t\t\t\t\tapp.setSettings(settings);\n\t\t\t\t\t\t}, 50);\n\t\t\t\t\t}, false);\n\t\t\t\t\tregButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\t$.openWindow({\n\t\t\t\t\t\t\turl: 'reg.html',\n\t\t\t\t\t\t\tid: 'reg',\n\t\t\t\t\t\t\tpreload: true,\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\taniShow: 'pop-in'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\t\tpopGesture: 'hide'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\twaiting: {\n\t\t\t\t\t\t\t\tautoShow: false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, false);\n\t\t\t\t\tforgetButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\t$.openWindow({\n\t\t\t\t\t\t\turl: 'forget_password.html',\n\t\t\t\t\t\t\tid: 'forget_password',\n\t\t\t\t\t\t\tpreload: true,\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\taniShow: 'pop-in'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\t\tpopGesture: 'hide'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\twaiting: {\n\t\t\t\t\t\t\t\tautoShow: false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, false);\n\t\t\t\t\t//\n\t\t\t\t\twindow.addEventListener('resize', function() {\n\t\t\t\t\t\toauthArea.style.display = document.body.clientHeight > 400 ? 'block' : 'none';\n\t\t\t\t\t}, false);\n\t\t\t\t\t//\n\t\t\t\t\tvar backButtonPress = 0;\n\t\t\t\t\t$.back = function(event) {\n\t\t\t\t\t\tbackButtonPress++;\n\t\t\t\t\t\tif (backButtonPress > 1) {\n\t\t\t\t\t\t\tplus.runtime.quit();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplus.nativeUI.toast('再按一次退出应用');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\tbackButtonPress = 0;\n\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}(mui, document));\n\t\t</script>\n\t</body>\n\n</html>\n"
  },
  {
    "path": "examples/login/main.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"css/mui.min.css\" rel=\"stylesheet\" />\n\n\t\t<style>\n\t\t\tul {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tcolor: #8f8f94;\n\t\t\t}\n\t\t\t.mui-btn {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\" style=\"padding-right: 15px;\">\n\t\t\t<h1 class=\"mui-title\">登录模板</h1>\n\t\t\t<button id='setting' class=\" mui-pull-right mui-btn-link\">设置</button>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>\n\t\t\t\t\t您好 <span id='account'></span>，您已成功登录。\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>这是mui带登录和设置模板的示例App首页。</li>\n\t\t\t\t\t\t<li>您可以点击右上角的 “设置” 按钮，进入设置模板，体验div窗体切换示例。</li>\n\t\t\t\t\t\t<li>在 “设置” 中点击 “退出” 可以 “注销当前账户” 或 “直接关闭应用”。</li>\n\t\t\t\t\t\t<li>你可以设置 “锁屏图案”，这样可通过手势密码代替输入账号、密码；</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</p>\n\t\t\t\t<!--<button  class=\"mui-btn mui-btn-block mui-btn-primary\">设置</button>-->\n\t\t\t\t<!--\n\t\t\t\t<button id='exit' class=\"mui-btn mui-btn-block mui-btn-green\">关闭</button>\n                <button id='logout' class=\"mui-btn mui-btn-red mui-btn-block\">注销登录</button>\n                -->\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"js/mui.min.js\"></script>\n\t\t<script src=\"js/app.js\"></script>\n\t\t<script>\n\t\t\t(function($, doc) {\n\t\t\t\t$.init();\n\t\t\t\tvar settings = app.getSettings();\n\t\t\t\tvar account = doc.getElementById('account');\n\t\t\t\t//\n\t\t\t\twindow.addEventListener('show', function() {\n\t\t\t\t\tvar state = app.getState();\n\t\t\t\t\taccount.innerText = state.account;\n\t\t\t\t}, false);\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tvar settingPage = $.preload({\n\t\t\t\t\t\t\"id\": 'setting',\n\t\t\t\t\t\t\"url\": 'setting.html'\n\t\t\t\t\t});\n\t\t\t\t\t//设置\n\t\t\t\t\tvar settingButton = doc.getElementById('setting');\n\t\t\t\t\t//settingButton.style.display = settings.autoLogin ? 'block' : 'none';\n\t\t\t\t\tsettingButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\t$.openWindow({\n\t\t\t\t\t\t\tid: 'setting',\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\taniShow: 'pop-in'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\t\tpopGesture: 'hide'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\twaiting: {\n\t\t\t\t\t\t\t\tautoShow: false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t//--\n\t\t\t\t\t$.oldBack = mui.back;\n\t\t\t\t\tvar backButtonPress = 0;\n\t\t\t\t\t$.back = function(event) {\n\t\t\t\t\t\tbackButtonPress++;\n\t\t\t\t\t\tif (backButtonPress > 1) {\n\t\t\t\t\t\t\tplus.runtime.quit();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplus.nativeUI.toast('再按一次退出应用');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\tbackButtonPress = 0;\n\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}(mui, document));\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/login/manifest.json",
    "content": "{\n\t\"@platforms\": [\n\t\t\"android\",\n\t\t\"iPhone\",\n\t\t\"iPad\"\n\t],\n\t\"id\": \"mui_template_login\",/*应用的标识，创建应用时自动生成，勿手动修改*/\n\t\"name\": \"mui登录模板\",/*应用名称，程序桌面图标名称*/\n\t\"version\": {\n\t\t\"name\": \"1.0.0\",/*应用版本名称*/\n\t\t\"code\": \"83\"\n\t},\n\t\"description\": \"\",/*应用描述信息*/\n\t\"icons\": {\n\t\t\"72\": \"icon.png\"\n\t},\n\t\"launch_path\": \"login.html\",/*应用的入口页面，默认为根目录下的index.html；支持网络地址，必须以http://或https://开头*/\n\t\"developer\": {\n\t\t\"name\": \"\",/*开发者名称*/\n\t\t\"email\": \"\",/*开发者邮箱地址*/\n\t\t\"url\": \"http://www.dcloud.io\"\n\t},\n\t\"permissions\": {\n\t\t\"Cache\": {\n\t\t\t\"description\": \"管理应用缓存\"\n\t\t},\n\t\t\"Console\": {\n\t\t\t\"description\": \"跟踪调试输出日志\"\n\t\t},\n\n\t\t\"Events\": {\n\t\t\t\"description\": \"应用扩展事件\"\n\t\t},\n\t\t\"UI\": {},\n\t\t\"Share\": {},\n\t\t\"OAuth\": {},\n\t\t\"Push\": {},\n\t\t\"Maps\": {},\n\t\t\"Speech\": {},\n\t\t\"Payment\": {},\n\t\t\"Contacts\": {},\n\t\t\"Statistic\": {},\n\t\t\"Messaging\": {}\n\t},\n\t\"plus\": {\n\t\t\"splashscreen\": {\n\t\t\t\"autoclose\": false,/*是否自动关闭程序启动界面，true表示应用加载应用入口页面后自动关闭；false则需调plus.navigator.closeSplashscreen()关闭*/\n\t\t\t\"waiting\": true\n\t\t},\n\t\t\"runmode\": \"liberate\",/*应用的首次启动运行模式，可取liberate或normal，liberate模式在第一次启动时将解压应用资源（Android平台File API才可正常访问_www目录）*/\n\t\t\"signature\": \"Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==\",/*可选，保留给应用签名，暂不使用*/\n\t\t\"distribute\": {\n\t\t\t\"apple\": {\n\t\t\t\t\"appid\": \"\",/*iOS应用标识，苹果开发网站申请的appid，如io.dcloud.HelloH5*/\n\t\t\t\t\"mobileprovision\": \"\",/*iOS应用打包配置文件*/\n\t\t\t\t\"password\": \"\",/*iOS应用打包个人证书导入密码*/\n\t\t\t\t\"p12\": \"\",/*iOS应用打包个人证书，打包配置文件关联的个人证书*/\n\t\t\t\t\"devices\": \"universal\",/*iOS应用支持的设备类型，可取值iphone/ipad/universal*/\n\t\t\t\t\"frameworks\": []\n\t\t\t},\n\t\t\t\"google\": {\n\t\t\t\t\"packagename\": \"\",/*Android应用包名，如io.dcloud.HelloH5*/\n\t\t\t\t\"keystore\": \"\",/*Android应用打包使用的密钥库文件*/\n\t\t\t\t\"password\": \"\",/*Android应用打包使用密钥库中证书的密码*/\n\t\t\t\t\"aliasname\": \"\",/*Android应用打包使用密钥库中证书的别名*/\n\t\t\t\t\"permissions\": [\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.CHANGE_NETWORK_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.READ_CONTACTS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.VIBRATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.READ_LOGS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.ACCESS_WIFI_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-feature android:name=\\\"android.hardware.camera.autofocus\\\"/>\",\n\t\t\t\t\t\"<uses-permission  android:name=\\\"android.permission.WRITE_EXTERNAL_STORAGE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.WRITE_CONTACTS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.ACCESS_NETWORK_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.RECEIVE_BOOT_COMPLETED\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.CAMERA\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.GET_ACCOUNTS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.RECORD_AUDIO\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.MODIFY_AUDIO_SETTINGS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.SEND_SMS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.INTERNET\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.READ_PHONE_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.CHANGE_WIFI_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.WAKE_LOCK\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.FLASHLIGHT\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.CALL_PHONE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.ACCESS_COARSE_LOCATION\\\"/>\",\n\t\t\t\t\t\"<uses-feature android:name=\\\"android.hardware.camera\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.ACCESS_FINE_LOCATION\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.WRITE_EXTERNAL_STORAGE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.RECEIVE_USER_PRESENT\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.WRITE_SETTINGS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.WRITE_SMS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.READ_SMS\\\"/>\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"orientation\": [\n\t\t\t\t\"portrait-primary\",\n\t\t\t\t\"portrait-secondary\"\n\t\t\t],/*应用支持的方向，portrait-primary：竖屏正方向；portrait-secondary：竖屏反方向；landscape-primary：横屏正方向；landscape-secondary：横屏反方向*/\n\t\t\t\"icons\": {\n\t\t\t\t\"ios\": {\n\t\t\t\t\t\"prerendered\": true, /*应用图标是否已经高亮处理，在iOS6及以下设备上有效*/\n\t\t\t\t\t\"auto\": \"\", /*应用图标，分辨率：512x512，用于自动生成各种尺寸程序图标*/\n\t\t\t\t\t\"iphone\": {\n\t\t\t\t\t\t\"normal\": \"unpackage/res/icons/57x57.png\",/*iPhone普通屏幕程序图标，分辨率：57x57*/\n\t\t\t\t\t\t\"retina\": \"unpackage/res/icons/114x114.png\",/*iPhone高分屏程序图标，分辨率：114x114*/\n\t\t\t\t\t\t\"retina7\": \"unpackage/res/icons/120x120.png\",/*iPhone iOS7高分屏程序图标，分辨率：120x120*/\n\t\t\t\t\t\t\"spotlight-normal\": \"unpackage/res/icons/29x29.png\", /*iPhone Spotlight搜索程序图标，分辨率：29x29*/\n\t\t\t\t\t\t\"spotlight-retina\": \"unpackage/res/icons/58x58.png\", /*iPhone高分屏Spotlight搜索程序图标，分辨率：58x58*/\n\t\t\t\t\t\t\"spotlight-retina7\": \"unpackage/res/icons/80x80.png\",/*iPhone iOS7高分屏Spotlight搜索程序图标，分辨率：80x80*/\n\t\t\t\t\t\t\"settings-normal\": \"unpackage/res/icons/29x29.png\", /*iPhone设置页面程序图标，分辨率：29x29*/\n\t\t\t\t\t\t\"settings-retina\": \"unpackage/res/icons/58x58.png\",\n\t\t\t\t\t\t\"retina8\": \"unpackage/res/icons/180x180.png\",\n\t\t\t\t\t\t\"settings-retina8\": \"unpackage/res/icons/87x87.png\"\n\t\t\t\t\t},\n\t\t\t\t\t\"ipad\": {\n\t\t\t\t\t\t\"normal\": \"unpackage/res/icons/72x72.png\", /*iPad普通屏幕程序图标，分辨率：72x72*/\n\t\t\t\t\t\t\"retina\": \"unpackage/res/icons/144x144.png\", /*iPad高分屏程序图标，分辨率：144x144*/\n\t\t\t\t\t\t\"normal7\": \"unpackage/res/icons/76x76.png\", /*iPad iOS7程序图标，分辨率：76x76*/\n\t\t\t\t\t\t\"retina7\": \"unpackage/res/icons/152x152.png\", /*iPad iOS7高分屏程序图标，分辨率：152x152*/\n\t\t\t\t\t\t\"spotlight-normal\": \"unpackage/res/icons/50x50.png\", /*iPad Spotlight搜索程序图标，分辨率：50x50*/\n\t\t\t\t\t\t\"spotlight-retina\": \"unpackage/res/icons/100x100.png\", /*iPad高分屏Spotlight搜索程序图标，分辨率：100x100*/\n\t\t\t\t\t\t\"spotlight-normal7\": \"unpackage/res/icons/40x40.png\",/*iPad iOS7 Spotlight搜索程序图标，分辨率：40x40*/\n\t\t\t\t\t\t\"spotlight-retina7\": \"unpackage/res/icons/80x80.png\",/*iPad iOS7高分屏Spotlight搜索程序图标，分辨率：80x80*/\n\t\t\t\t\t\t\"settings-normal\": \"unpackage/res/icons/29x29.png\",/*iPad设置页面程序图标，分辨率：29x29*/\n\t\t\t\t\t\t\"settings-retina\": \"unpackage/res/icons/58x58.png\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"android\": {\n\t\t\t\t\t\"mdpi\": \"unpackage/res/icons/48x48.png\", /*普通屏程序图标，分辨率：48x48*/\n\t\t\t\t\t\"ldpi\": \"unpackage/res/icons/48x48.png\", /*大屏程序图标，分辨率：48x48*/\n\t\t\t\t\t\"hdpi\": \"unpackage/res/icons/72x72.png\", /*高分屏程序图标，分辨率：72x72*/\n\t\t\t\t\t\"xhdpi\": \"unpackage/res/icons/96x96.png\",/*720P高分屏程序图标，分辨率：96x96*/\n\t\t\t\t\t\"xxhdpi\": \"unpackage/res/icons/144x144.png\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"splashscreen\": {\n\t\t\t\t\"ios\": {\n\t\t\t\t\t\"iphone\": {\n\t\t\t\t\t\t\"default\": \"\", /*iPhone3启动图片选，分辨率：320x480*/\n\t\t\t\t\t\t\"retina35\": \"\",/*3.5英寸设备(iPhone4)启动图片，分辨率：640x960*/\n\t\t\t\t\t\t\"retina40\": \"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"ipad\": {\n\t\t\t\t\t\t\"portrait\": \"\", /*iPad竖屏启动图片，分辨率：768x1004*/\n\t\t\t\t\t\t\"portrait-retina\": \"\",/*iPad高分屏竖屏图片，分辨率：1536x2008*/\n\t\t\t\t\t\t\"landscape\": \"\", /*iPad横屏启动图片，分辨率：1024x748*/\n\t\t\t\t\t\t\"landscape-retina\": \"\", /*iPad高分屏横屏启动图片，分辨率：2048x1496*/\n\t\t\t\t\t\t\"portrait7\": \"\", /*iPad iOS7竖屏启动图片，分辨率：768x1024*/\n\t\t\t\t\t\t\"portrait-retina7\": \"\",/*iPad iOS7高分屏竖屏图片，分辨率：1536x2048*/\n\t\t\t\t\t\t\"landscape7\": \"\", /*iPad iOS7横屏启动图片，分辨率：1024x768*/\n\t\t\t\t\t\t\"landscape-retina7\": \"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"android\": {\n\t\t\t\t\t\"mdpi\": \"\", /*普通屏启动图片，分辨率：240x282*/\n\t\t\t\t\t\"ldpi\": \"\", /*大屏启动图片，分辨率：320x442*/\n\t\t\t\t\t\"hdpi\": \"\", /*高分屏启动图片，分辨率：480x762*/\n\t\t\t\t\t\"xhdpi\": \"\", /*720P高分屏启动图片，分辨率：720x1242*/\n\t\t\t\t\t\"xxhdpi\": \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"dependencies\": {\n\t\t\"pages\": {\n\t\t\t\"setting.html\": {\n\t\t\t\t\"href\": \"setting.html\",\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/mui.view.js\",\n\t\t\t\t\t\"libs/easymob-webim-sdk/jquery-1.11.1.js\",\n\t\t\t\t\t\"libs/easymob-webim-sdk/strophe-custom-2.0.0.js\",\n\t\t\t\t\t\"libs/easymob-webim-sdk/json2.js\",\n\t\t\t\t\t\"libs/easymob-webim-sdk/easemob.im-1.0.5.js\",\n\t\t\t\t\t\"js/feedback.js\",\n\t\t\t\t\t\"js/feedback-page.js\",\n\t\t\t\t\t\"js/mui.locker.js\",\n\t\t\t\t\t\"js/app.js\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/feedback-page.css\",\n\t\t\t\t\t\"images/iconfont-tianjia.png\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"login.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 1\n\t\t\t},\n\t\t\t\"main.html\": {\n\t\t\t\t\"href\": \"main.html\",\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/app.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"setting.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 1\n\t\t\t},\n\t\t\t\"unlock.html\": {\n\t\t\t\t\"href\": \"unlock.html\",\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/mui.locker.js\",\n\t\t\t\t\t\"js/app.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"login.html\",\n\t\t\t\t\t\"main.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"forget_password.html\": {\n\t\t\t\t\"href\": \"forget_password.html\",\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/style.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/app.js\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 1\n\t\t\t},\n\t\t\t\"reg.html\": {\n\t\t\t\t\"href\": \"reg.html\",\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/style.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/app.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"login.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 3\n\t\t\t},\n\t\t\t\"login.html\": {\n\t\t\t\t\"href\": \"login.html\",\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/style.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/mui.enterfocus.js\",\n\t\t\t\t\t\"js/app.js\",\n\t\t\t\t\t\"images/qihoo.png\",\n\t\t\t\t\t\"images/qq.png\",\n\t\t\t\t\t\"images/sinaweibo.png\",\n\t\t\t\t\t\"images/weixin.png\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"unlock.html\",\n\t\t\t\t\t\"forget_password.html\",\n\t\t\t\t\t\"main.html\",\n\t\t\t\t\t\"reg.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t}\n\t\t},\n\t\t\"idle\": {\n\t\t\t\"resources\": [\n\t\t\t\t\"js/service.js\",\n\t\t\t\t\"libs/easymob-webim-sdk/quickstart.md\",\n\t\t\t\t\"images/user-photo.png\",\n\t\t\t\t\"README.md\"\n\t\t\t]\n\t\t}\n\t},\n\t\"unpackage\": [\n\t\t\"README.md\"\n\t]\n}"
  },
  {
    "path": "examples/login/reg.html",
    "content": "<!DOCTYPE html>\n<html class=\"ui-page-login\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<link href=\"css/style.css\" rel=\"stylesheet\" />\n\t\t<style>\n\t\t\t.area {\n\t\t\t\tmargin: 20px auto 0px auto;\n\t\t\t}\n\t\t\t.mui-input-group:first-child {\n\t\t\t\tmargin-top: 20px;\n\t\t\t}\n\t\t\t.mui-input-group label {\n\t\t\t\twidth: 22%;\n\t\t\t}\n\t\t\t.mui-input-row label~input,\n\t\t\t.mui-input-row label~select,\n\t\t\t.mui-input-row label~textarea {\n\t\t\t\twidth: 78%;\n\t\t\t}\n\t\t\t.mui-checkbox input[type=checkbox],\n\t\t\t.mui-radio input[type=radio] {\n\t\t\t\ttop: 6px;\n\t\t\t}\n\t\t\t.mui-content-padded {\n\t\t\t\tmargin-top: 25px;\n\t\t\t}\n\t\t\t.mui-btn {\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\t\t\t\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<h1 class=\"mui-title\">注册</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<form class=\"mui-input-group\">\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<label>账号</label>\n\t\t\t\t\t<input id='account' type=\"text\" class=\"mui-input-clear mui-input\" placeholder=\"请输入账号\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<label>密码</label>\n\t\t\t\t\t<input id='password' type=\"password\" class=\"mui-input-clear mui-input\" placeholder=\"请输入密码\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<label>确认</label>\n\t\t\t\t\t<input id='password_confirm' type=\"password\" class=\"mui-input-clear mui-input\" placeholder=\"请确认密码\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<label>邮箱</label>\n\t\t\t\t\t<input id='email' type=\"email\" class=\"mui-input-clear mui-input\" placeholder=\"请输入邮箱\">\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<button id='reg' class=\"mui-btn mui-btn-block mui-btn-primary\">注册</button>\n\t\t\t</div>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<p>注册真实可用，注册成功后的用户可用于登录，但是示例程序并未和服务端交互，用户相关数据仅存储于本地。</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"js/mui.min.js\"></script>\n\t\t<script src=\"js/app.js\"></script>\n\t\t<script>\n\t\t\t(function($, doc) {\n\t\t\t\t$.init();\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tvar settings = app.getSettings();\n\t\t\t\t\tvar regButton = doc.getElementById('reg');\n\t\t\t\t\tvar accountBox = doc.getElementById('account');\n\t\t\t\t\tvar passwordBox = doc.getElementById('password');\n\t\t\t\t\tvar passwordConfirmBox = doc.getElementById('password_confirm');\n\t\t\t\t\tvar emailBox = doc.getElementById('email');\n\t\t\t\t\tregButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\tvar regInfo = {\n\t\t\t\t\t\t\taccount: accountBox.value,\n\t\t\t\t\t\t\tpassword: passwordBox.value,\n\t\t\t\t\t\t\temail: emailBox.value\n\t\t\t\t\t\t};\n\t\t\t\t\t\tvar passwordConfirm = passwordConfirmBox.value;\n\t\t\t\t\t\tif (passwordConfirm != regInfo.password) {\n\t\t\t\t\t\t\tplus.nativeUI.toast('密码两次输入不一致');\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.reg(regInfo, function(err) {\n\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\tplus.nativeUI.toast(err);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tplus.nativeUI.toast('注册成功');\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t * 注意：\n\t\t\t\t\t\t\t * 1、因本示例应用启动页就是登录页面，因此注册成功后，直接显示登录页即可；\n\t\t\t\t\t\t\t * 2、如果真实案例中，启动页不是登录页，则需修改，使用mui.openWindow打开真实的登录页面\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tplus.webview.getLaunchWebview().show(\"pop-in\",200,function () {\n\t\t\t\t\t\t\t\tplus.webview.currentWebview().close(\"none\");\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t//若启动页不是登录页，则需通过如下方式打开登录页\n//\t\t\t\t\t\t\t$.openWindow({\r\n//\t\t\t\t\t\t\t\turl: 'login.html',\r\n//\t\t\t\t\t\t\t\tid: 'login',\r\n//\t\t\t\t\t\t\t\tshow: {\r\n//\t\t\t\t\t\t\t\t\taniShow: 'pop-in'\r\n//\t\t\t\t\t\t\t\t}\r\n//\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}(mui, document));\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/login/setting.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"./css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.mui-views,\n\t\t\t.mui-view,\n\t\t\t.mui-pages,\n\t\t\t.mui-page,\n\t\t\t.mui-page-content {\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\ttop: 0;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.mui-pages {\n\t\t\t\ttop: 46px;\n\t\t\t\theight: auto;\n\t\t\t}\n\t\t\t.mui-scroll-wrapper,\n\t\t\t.mui-scroll {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.mui-page.mui-transitioning {\n\t\t\t\t-webkit-transition: -webkit-transform 200ms ease;\n\t\t\t\ttransition: transform 200ms ease;\n\t\t\t}\n\t\t\t.mui-page-left {\n\t\t\t\t-webkit-transform: translate3d(0, 0, 0);\n\t\t\t\ttransform: translate3d(0, 0, 0);\n\t\t\t}\n\t\t\t.mui-ios .mui-page-left {\n\t\t\t\t-webkit-transform: translate3d(-20%, 0, 0);\n\t\t\t\ttransform: translate3d(-20%, 0, 0);\n\t\t\t}\n\t\t\t.mui-navbar {\n\t\t\t\tposition: fixed;\n\t\t\t\tright: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 10;\n\t\t\t\theight: 44px;\n\t\t\t\tbackground-color: #f7f7f8;\n\t\t\t}\n\t\t\t.mui-navbar .mui-bar {\n\t\t\t\tposition: absolute;\n\t\t\t\tbackground: transparent;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t\t.mui-android .mui-navbar-inner.mui-navbar-left {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t.mui-ios .mui-navbar-left .mui-left,\n\t\t\t.mui-ios .mui-navbar-left .mui-center,\n\t\t\t.mui-ios .mui-navbar-left .mui-right {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t.mui-navbar .mui-btn-nav {\n\t\t\t\t-webkit-transition: none;\n\t\t\t\ttransition: none;\n\t\t\t\t-webkit-transition-duration: .0s;\n\t\t\t\ttransition-duration: .0s;\n\t\t\t}\n\t\t\t.mui-navbar .mui-bar .mui-title {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: static;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t\t.mui-page-shadow {\n\t\t\t\tposition: absolute;\n\t\t\t\tright: 100%;\n\t\t\t\ttop: 0;\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 100%;\n\t\t\t\tz-index: -1;\n\t\t\t\tcontent: '';\n\t\t\t}\n\t\t\t.mui-page-shadow {\n\t\t\t\tbackground: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 10%, rgba(0, 0, 0, .01) 50%, rgba(0, 0, 0, .2) 100%);\n\t\t\t\tbackground: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 10%, rgba(0, 0, 0, .01) 50%, rgba(0, 0, 0, .2) 100%);\n\t\t\t}\n\t\t\t.mui-navbar-inner.mui-transitioning,\n\t\t\t.mui-navbar-inner .mui-transitioning {\n\t\t\t\t-webkit-transition: opacity 200ms ease, -webkit-transform 200ms ease;\n\t\t\t\ttransition: opacity 200ms ease, transform 200ms ease;\n\t\t\t}\n\t\t\t.mui-page {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.mui-pages .mui-page {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t\t.mui-page .mui-table-view:first-child {\n\t\t\t\tmargin-top: 15px;\n\t\t\t}\n\t\t\t.mui-page .mui-table-view:last-child {\n\t\t\t\tmargin-bottom: 30px;\n\t\t\t}\n\t\t\t.mui-table-view {\n\t\t\t\tmargin-top: 20px;\n\t\t\t}\n\t\t\t.mui-table-view:after {\n\t\t\t\theight: 0;\n\t\t\t}\n\t\t\t.mui-table-view span.mui-pull-right {\n\t\t\t\tcolor: #999;\n\t\t\t}\n\t\t\t.mui-table-view-divider {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\t\t\t.mui-table-view-divider:before,\n\t\t\t.mui-table-view-divider:after {\n\t\t\t\theight: 0;\n\t\t\t}\n\t\t\t.mui-content-padded {\n\t\t\t\tmargin: 10px 0px;\n\t\t\t}\n\t\t\t.mui-locker {\n\t\t\t\tmargin: 35px auto;\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t</style>\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"./css/feedback-page.css\" />\n\t</head>\n\n\t<body>\n\t\t<!--页面主结构开始-->\n\t\t<div id=\"app\" class=\"mui-views\">\n\t\t\t<div class=\"mui-view\">\n\t\t\t\t<div class=\"mui-navbar\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mui-pages\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!--页面主结构结束-->\n\t\t<!--单页面开始-->\n\t\t<div id=\"setting\" class=\"mui-page\">\n\t\t\t<!--页面标题栏开始-->\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">设置</h1>\n\t\t\t</div>\n\t\t\t<!--页面标题栏结束-->\n\t\t\t<!--页面主内容区开始-->\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a id=\"rate\" class=\"mui-navigate-right\">评分鼓励</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a id=\"share\" class=\"mui-navigate-right\">分享推荐</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a id=\"tel\" class=\"mui-navigate-right\">客服电话</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a id=\"feedback-btn\" href=\"#feedback\" class=\"mui-navigate-right\">问题反馈</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a href=\"#lock\" class=\"mui-navigate-right\">设置锁屏图案</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\" style=\"text-align: center;\">\n\t\t\t\t\t\t\t\t<a id='exit'>退出</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<!--页面主内容区结束-->\n\t\t</div>\n\t\t<div id=\"notifications_disturb\" class=\"mui-page\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>新消息通知\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">功能消息免打扰</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-radio\">\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">开启</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">只在夜间开启</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t\t<a class=\"mui-navigate-right\">关闭</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"lock\" class=\"mui-page\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>设置\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">锁屏图案</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t\t使用手势解锁\n\t\t\t\t\t\t\t<div id=\"lockState\" class=\"mui-switch\">\n\t\t\t\t\t\t\t\t<div class=\"mui-switch-handle\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<div class=\"mui-locker\" data-locker-width='320' data-locker-height='320' data-locker-options='{\"ringColor\":\"rgba(221,221,221,1)\",\"fillColor\":\"#ffffff\",\"pointColor\":\"rgba(0,136,204,1)\",\"lineColor\":\"rgba(0,136,204,1)\"}'>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"feedback\" class=\"mui-page feedback\">\n\t\t\t<div class=\"mui-navbar-inner mui-bar mui-bar-nav\">\n\t\t\t\t<button type=\"button\" class=\"mui-left mui-action-back mui-btn  mui-btn-link mui-btn-nav mui-pull-left\">\n\t\t\t\t\t<span class=\"mui-icon mui-icon-left-nav\"></span>设置\n\t\t\t\t</button>\n\t\t\t\t<h1 class=\"mui-center mui-title\">问题反馈</h1>\n\t\t\t</div>\n\t\t\t<div class=\"mui-page-content\">\n\t\t\t\t<p>问题和意见</p>\n\t\t\t\t<div class=\"row mui-input-row\">\n\t\t\t\t\t<textarea id='question' class=\"mui-input-clear question\" placeholder=\"请详细描述你的问题和意见...\"></textarea>\n\t\t\t\t</div>\n\t\t\t\t<p>图片(选填,提供问题截图)</p>\n\t\t\t\t<div id='image-list' class=\"row image-list\">\n\t\t\t\t</div>\n\t\t\t\t<p>QQ/邮箱</p>\n\t\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t\t<input id='contact' type=\"text\" class=\"mui-input-clear  contact\" placeholder=\"(选填,方便我们联系你 )\" />\n\t\t\t\t</div>\n\t\t\t\t<button id='submit' type=\"button\" class=\"mui-btn mui-btn-green\">提交</button>\n\t\t\t</div>\n\t\t\t<p>此示例基于环信 “WebIM SDK” + 环信 “移动客服” 实现，在环信 “移动客服面板” 能够查阅反馈信息。</p>\n\t\t</div>\n\n\t</body>\n\t<script src=\"./js/mui.min.js \"></script>\n\t<script src=\"./js/mui.view.js \"></script>\n\t<script src='./libs/easymob-webim-sdk/jquery-1.11.1.js'></script>\n\t<script src='./libs/easymob-webim-sdk/strophe-custom-2.0.0.js'></script>\n\t<script src='./libs/easymob-webim-sdk/json2.js'></script>\n\t<script src=\"./libs/easymob-webim-sdk/easemob.im-1.0.5.js\"></script>\n\t<script src='./js/feedback.js'></script>\n\t<script src=\"./js/feedback-page.js\"></script>\n\t<script src=\"./js/mui.locker.js\"></script>\n\t<script src=\"./js/app.js\"></script>\n\t<script>\n\t\tmui.init();\n\t\t //初始化单页view\n\t\tvar viewApi = mui('#app').view({\n\t\t\tdefaultPage: '#setting'\n\t\t});\n\t\t //初始化单页的区域滚动\n\t\tmui('.mui-scroll-wrapper').scroll();\n\t\t //分享操作 \n\t\tvar shares = {};\n\t\tmui.plusReady(function() {\n\t\t\tplus.share.getServices(function(s) {\n\t\t\t\tif (s && s.length > 0) {\n\t\t\t\t\tfor (var i = 0; i < s.length; i++) {\n\t\t\t\t\t\tvar t = s[i];\n\t\t\t\t\t\tshares[t.id] = t;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, function() {\n\t\t\t\tconsole.log(\"获取分享服务列表失败\");\n\t\t\t});\n\t\t});\n\t\t //分享链接点击事件\n\t\tdocument.getElementById(\"share\").addEventListener('tap', function() {\n\t\t\tvar ids = [{\n\t\t\t\t\tid: \"weixin\",\n\t\t\t\t\tex: \"WXSceneSession\"\n\t\t\t\t}, {\n\t\t\t\t\tid: \"weixin\",\n\t\t\t\t\tex: \"WXSceneTimeline\"\n\t\t\t\t}, {\n\t\t\t\t\tid: \"sinaweibo\"\n\t\t\t\t}, {\n\t\t\t\t\tid: \"tencentweibo\"\n\t\t\t\t}, {\n\t\t\t\t\tid: \"qq\"\n\t\t\t\t}],\n\t\t\t\tbts = [{\n\t\t\t\t\ttitle: \"发送给微信好友\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"分享到微信朋友圈\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"分享到新浪微博\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"分享到腾讯微博\"\n\t\t\t\t}, {\n\t\t\t\t\ttitle: \"分享到QQ\"\n\t\t\t\t}];\n\t\t\tplus.nativeUI.actionSheet({\n\t\t\t\tcancel: \"取消\",\n\t\t\t\tbuttons: bts\n\t\t\t}, function(e) {\n\t\t\t\tvar i = e.index;\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tvar s_id = ids[i - 1].id;\n\t\t\t\t\tvar share = shares[s_id];\n\t\t\t\t\tif (share.authenticated) {\n\t\t\t\t\t\tshareMessage(share, ids[i - 1].ex);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshare.authorize(function() {\n\t\t\t\t\t\t\tshareMessage(share, ids[i - 1].ex);\n\t\t\t\t\t\t}, function(e) {\n\t\t\t\t\t\t\tconsole.log(\"认证授权失败：\" + e.code + \" - \" + e.message);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tfunction shareMessage(share, ex) {\n\t\t\t\tvar msg = {\n\t\t\t\t\textra: {\n\t\t\t\t\t\tscene: ex\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tmsg.href = \"http://www.dcloud.io/hellomui/\";\n\t\t\t\tmsg.title = \"最接近原生APP体验的高性能前端框架\";\n\t\t\t\tmsg.content = \"我正在体验HelloMUI，果然很流畅，基本看不出和原生App的差距\";\n\t\t\t\tif (~share.id.indexOf('weibo')) {\n\t\t\t\t\tmsg.content += \"；体验地址：http://www.dcloud.io/hellomui/\";\n\t\t\t\t}\n\t\t\t\tmsg.thumbs = [\"_www/images/logo.png\"];\n\t\t\t\tshare.send(msg, function() {\n\t\t\t\t\tconsole.log(\"分享到\\\"\" + share.description + \"\\\"成功！ \");\n\t\t\t\t}, function(e) {\n\t\t\t\t\tconsole.log(\"分享到\\\"\" + share.description + \"\\\"失败: \" + e.code + \" - \" + e.message);\n\t\t\t\t});\n\t\t\t}\n\t\t\t//去评分\n\t\tdocument.getElementById(\"rate\").addEventListener('tap', function() {\n\t\t\tif (mui.os.ios) {\n\t\t\t\tlocation.href = 'https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=682211190&pageNumber=0&sortOrdering=2&type=&mt=8';\n\t\t\t} else if (mui.os.android) {\n\t\t\t\tplus.runtime.openURL(\"market://details?id=io.dcloud.HelloMUI\", function(e) {\n\t\t\t\t\tplus.runtime.openURL(\"market://details?id=io.dcloud.HelloMUI\", function(e) {\n\t\t\t\t\t\tmui.alert(\"360手机助手和应用宝，你一个都没装，暂时无法评分，感谢支持\");\n\t\t\t\t\t}, \"com.qihoo.appstore\");\n\t\t\t\t}, \"com.tencent.android.qqdownloader\");\n\t\t\t}\n\t\t});\n\t\t //客服电话\n\t\tdocument.getElementById(\"tel\").addEventListener('tap', function() {\n\t\t\tplus.device.dial(\"114\");\n\t\t});\n\t\t //退出操作******************\n\t\tdocument.getElementById('exit').addEventListener('tap', function() {\n\t\t\tif (mui.os.ios) {\n\t\t\t\tapp.setState({});\n\t\t\t\tmui.openWindow({\n\t\t\t\t\turl: 'login.html',\n\t\t\t\t\tid: 'login',\n\t\t\t\t\tshow: {\n\t\t\t\t\t\taniShow: 'pop-in'\n\t\t\t\t\t},\n\t\t\t\t\twaiting: {\n\t\t\t\t\t\tautoShow: false\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar btnArray = [{\n\t\t\t\ttitle: \"注销当前账号\"\n\t\t\t}, {\n\t\t\t\ttitle: \"直接关闭应用\"\n\t\t\t}];\n\t\t\tplus.nativeUI.actionSheet({\n\t\t\t\tcancel: \"取消\",\n\t\t\t\tbuttons: btnArray\n\t\t\t}, function(event) {\n\t\t\t\tvar index = event.index;\n\t\t\t\tswitch (index) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\t//注销账号\n\t\t\t\t\t\tapp.setState({});\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * 注意：\n\t\t\t\t\t\t * 1、因本示例应用启动页就是登录页面，因此注册成功后，直接显示登录页即可；\n\t\t\t\t\t\t * 2、如果真实案例中，启动页不是登录页，则需修改，使用mui.openWindow打开真实的登录页面\n\t\t\t\t\t\t */\n\t\t\t\t\t\tplus.webview.getLaunchWebview().show(\"pop-in\");\n\t\t\t\t\t\t//若启动页不是登录页，则需通过如下方式打开登录页\n//\t\t\t\t\t\tmui.openWindow({\r\n//\t\t\t\t\t\t\turl: 'login.html',\r\n//\t\t\t\t\t\t\tid: 'login',\r\n//\t\t\t\t\t\t\tshow: {\r\n//\t\t\t\t\t\t\t\taniShow: 'pop-in'\r\n//\t\t\t\t\t\t\t}\r\n//\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tplus.runtime.quit();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}, false);\n\t\t //************************\n\t\t //锁屏设置\n\t\t(function($, doc) {\n\t\t\t//$.init();\n\t\t\t$.plusReady(function() {\n\t\t\t\tvar settings = app.getSettings();\n\t\t\t\tvar lockStateButton = doc.getElementById(\"lockState\");\n\t\t\t\tvar locker = doc.querySelector('.mui-locker');\n\t\t\t\tlockStateButton.classList[settings.gestures ? 'add' : 'remove']('mui-active')\n\t\t\t\tlocker.style.display = settings.gestures ? 'block' : 'none';\n\t\t\t\tlockStateButton.addEventListener('toggle', function(event) {\n\t\t\t\t\tvar isActive = event.detail.isActive;\n\t\t\t\t\tlocker.style.display = isActive ? 'block' : 'none';\n\t\t\t\t\tif (!isActive) {\n\t\t\t\t\t\t//\t\t\t\t\t\talert(0);\n\t\t\t\t\t\tsettings.gestures = '';\n\t\t\t\t\t\tapp.setSettings(settings);\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t\tvar record = [];\n\t\t\t\tlocker.addEventListener('done', function(event) {\n\t\t\t\t\tvar rs = event.detail;\n\t\t\t\t\tif (rs.points.length < 4) {\n\t\t\t\t\t\tplus.nativeUI.toast('设定的手势太简单了');\n\t\t\t\t\t\trecord = [];\n\t\t\t\t\t\trs.sender.clear();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\trecord.push(rs.points.join(''));\n\t\t\t\t\tif (record.length >= 2) {\n\t\t\t\t\t\tif (record[0] == record[1]) {\n\t\t\t\t\t\t\tplus.nativeUI.toast('解锁手势设定成功，以后用户只需使用手势解锁而无需输入密码登录。');\n\t\t\t\t\t\t\tsettings.gestures = record[0];\n\t\t\t\t\t\t\tsettings.autoLogin = true;\n\t\t\t\t\t\t\tapp.setSettings(settings);\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t$.back();\n\t\t\t\t\t\t\t}, 200);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplus.nativeUI.toast('两次手势不一致,请重新设定');\n\t\t\t\t\t\t}\n\t\t\t\t\t\trs.sender.clear();\n\t\t\t\t\t\trecord = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tplus.nativeUI.toast('请确认手势设定');\n\t\t\t\t\t\trs.sender.clear();\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t});\n\t\t}(mui, document));\n\t\t //********************\n\t\tvar view = viewApi.view;\n\t\t(function($) {\n\t\t\t//处理view的后退与webview后退\n\t\t\tvar oldBack = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tif (viewApi.canBack()) { //如果view可以后退，则执行view的后退\n\t\t\t\t\tviewApi.back();\n\t\t\t\t} else { //执行webview后退\n\t\t\t\t\toldBack();\n\t\t\t\t}\n\t\t\t};\n\t\t\t//监听页面切换事件方案1,通过view元素监听所有页面切换事件，目前提供pageBeforeShow|pageShow|pageBeforeBack|pageBack四种事件(before事件为动画开始前触发)\n\t\t\t//第一个参数为事件名称，第二个参数为事件回调，其中e.detail.page为当前页面的html对象\n\t\t\tview.addEventListener('pageBeforeShow', function(e) {\n\t\t\t\t//\t\t\t\tconsole.log(e.detail.page.id + ' beforeShow');\n\t\t\t});\n\t\t\tview.addEventListener('pageShow', function(e) {\n\t\t\t\t//进入手执设定界面时\n\t\t\t\tif (e.detail.page.id == 'lock') {\n\t\t\t\t\tvar settings = app.getSettings();\n\t\t\t\t\t/*if (!settings.autoLogin) {\n\t\t\t\t\t\tplus.nativeUI.toast('当前没有启用 “自动登录”，需要在登录时启用 \"自动登录\"，设定的手势锁屏才会升效。');\n\t\t\t\t\t}*/\n\t\t\t\t\tvar lockStateButton = document.getElementById(\"lockState\");\n\t\t\t\t\tvar locker = document.querySelector('.mui-locker');\n\t\t\t\t\tlockStateButton.classList[settings.gestures ? 'add' : 'remove']('mui-active')\n\t\t\t\t\tlocker.style.display = settings.gestures ? 'block' : 'none';\n\t\t\t\t}\n\t\t\t\t//\t\t\t\tconsole.log(e.detail.page.id + ' show');\n\t\t\t});\n\t\t\tview.addEventListener('pageBeforeBack', function(e) {\n\t\t\t\t//\t\t\t\tconsole.log(e.detail.page.id + ' beforeBack');\n\t\t\t});\n\t\t\tview.addEventListener('pageBack', function(e) {\n\t\t\t\t//\t\t\t\tconsole.log(e.detail.page.id + ' back');\n\t\t\t});\n\t\t})(mui);\n\t</script>\n\n</html>"
  },
  {
    "path": "examples/login/unlock.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title></title>\n\t\t<link href=\"css/mui.min.css\" rel=\"stylesheet\" />\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t\t.mui-locker {\n\t\t\t\tmargin: 35px auto;\n\t\t\t}\n\t\t\t#forget {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<h1 class=\"mui-title\">解锁</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\" style=\"margin: 10px 0px;\">\n\t\t\t\t<div class=\"mui-locker\" data-locker-options='{\"ringColor\":\"rgba(221,221,221,1)\",\"fillColor\":\"#ffffff\",\"pointColor\":\"rgba(0,136,204,1)\",\"lineColor\":\"rgba(0,136,204,1)\"}' data-locker-width='320' data-locker-height='320'>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<a id='forget'>忘记手势密码？</a>\n\t\t</div>\n\t\t<script src=\"js/mui.min.js\"></script>\n\t\t<script src=\"js/mui.locker.js\"></script>\n\t\t<script src=\"js/app.js\"></script>\n\n\t\t<script>\n\t\t\t(function($, doc) {\n\t\t\t\t$.init();\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tvar mainPage = $.preload({\n\t\t\t\t\t\t\"id\": 'main',\n\t\t\t\t\t\t\"url\": 'main.html'\n\t\t\t\t\t});\n\t\t\t\t\tvar toMain = function() {\n\t\t\t\t\t\t$.fire(mainPage, 'show', null);\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t$.openWindow({\n\t\t\t\t\t\t\t\tid: 'main',\n\t\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\t\taniShow: 'pop-in'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\twaiting: {\n\t\t\t\t\t\t\t\t\tautoShow: false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t};\n\t\t\t\t\tvar settings = app.getSettings();\n\t\t\t\t\tvar forgetButton = doc.getElementById(\"forget\");\n\t\t\t\t\tvar locker = doc.querySelector('.mui-locker');\n\t\t\t\t\tvar clearStateAndToLogin = function() {\n\t\t\t\t\t\tsettings.gestures = '';\n\t\t\t\t\t\tsettings.autoLogin = false;\n\t\t\t\t\t\tapp.setSettings(settings);\n\t\t\t\t\t\tvar state = app.getState();\n\t\t\t\t\t\tstate.token = '';\n\t\t\t\t\t\tapp.setState(state);\n\t\t\t\t\t\t$.openWindow({\n\t\t\t\t\t\t\turl: 'login.html',\n\t\t\t\t\t\t\tid: 'login',\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\taniShow: 'pop-in'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\twaiting: {\n\t\t\t\t\t\t\t\tautoShow: false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t\tforgetButton.addEventListener('tap', function(event) {\n\t\t\t\t\t\tclearStateAndToLogin();\n\t\t\t\t\t});\n\t\t\t\t\tvar tryNumber = 5;\n\t\t\t\t\tlocker.addEventListener('done', function(event) {\n\t\t\t\t\t\tvar rs = event.detail;\n\t\t\t\t\t\tif (settings.gestures == rs.points.join('')) {\n\t\t\t\t\t\t\ttoMain()\n\t\t\t\t\t\t\trs.sender.clear();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttryNumber--;\n\t\t\t\t\t\t\trs.sender.clear();\n\t\t\t\t\t\t\tif (tryNumber > 0) {\n\t\t\t\t\t\t\t\tplus.nativeUI.toast('解锁手势错误，还能尝试 ' + tryNumber + ' 次。');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclearStateAndToLogin();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false);\n\t\t\t\t\tvar backButtonPress = 0;\n\t\t\t\t\t$.back = function(event) {\n\t\t\t\t\t\tbackButtonPress++;\n\t\t\t\t\t\tif (backButtonPress > 1) {\n\t\t\t\t\t\t\tplus.runtime.quit();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplus.nativeUI.toast('再按一次退出应用');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\tbackButtonPress = 0;\n\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}(mui, document));\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/nativeTab/README.md",
    "content": "## tab选项卡示例教程-nativeObj原生模式tab（含底部凸起大图标）\n## 概述\n\n这是一个利用原生view控件绘制底部选项卡的示例，有以下几个特点：\n1.首页显示第一个tab项内容，其余tab项内容为首页的子窗口，相比创建四个子窗口，显示速度更快，占用内存更少，消耗性能更小。\n2.操作简单：选项卡常用于App首页，为加快渲染，首页的原生底部选项卡是在manifest.json中通过plus -> launchwebview -> subNViews 节点配置的；\n3.绘制内容支持字体，图片，矩形区域\n4.开发者自定义选项卡点击事件\n5.同样支持页内绘制原生 view 控件，也就是说在非首页也可以使用此方法，参考示例：底部选项卡中央凸起悬浮大图标的绘制\n\n#### 说明：中央凸起悬浮大图标，因涉及屏幕分辨率动态计算和为给出开发者页内手动绘制的示例的原因，放在首页plusReady事件中实现绘制的。该悬浮大图标支持点击事件，开发者可定制实现对应的点击逻辑。\n\n## 应用截图\n\n![截图](http://img-cdn-qiniu.dcloud.net.cn/uploads/article/20170623/04c03ba9ad4afa7d11735e52c771cf94.png)\n\n## 快速体验\n\n[流应用app下载](http://liuyingyong.cn/) --> 扫描下方二维码快速体验\n\n![二维码](images/ma.png)\n\n\n## 使用教程\n\n[教程参考](http://ask.dcloud.net.cn/article/12602)\n"
  },
  {
    "path": "examples/nativeTab/css/mui.css",
    "content": "/*!\n * =====================================================\n * Mui v3.6.1 (http://dev.dcloud.net.cn/mui)\n * =====================================================\n */\n\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\nhtml\n{\n    font-family: sans-serif;\n\n    -webkit-text-size-adjust: 100%;\n}\n\nbody\n{\n    margin: 0;\n}\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary\n{\n    display: block;\n}\n\naudio,\ncanvas,\nprogress,\nvideo\n{\n    display: inline-block;\n\n    vertical-align: baseline;\n}\n\naudio:not([controls])\n{\n    display: none;\n\n    height: 0;\n}\n\n[hidden],\ntemplate\n{\n    display: none;\n}\n\na\n{\n    background: transparent;\n}\n\na:active,\na:hover\n{\n    outline: 0;\n}\n\nabbr[title]\n{\n    border-bottom: 1px dotted;\n}\n\nb,\nstrong\n{\n    font-weight: bold;\n}\n\ndfn\n{\n    font-style: italic;\n}\n\nh1\n{\n    font-size: 2em;\n\n    margin: .67em 0;\n}\n\nmark\n{\n    color: #000;\n    background: #ff0;\n}\n\nsmall\n{\n    font-size: 80%;\n}\n\nsub,\nsup\n{\n    font-size: 75%;\n    line-height: 0;\n\n    position: relative;\n\n    vertical-align: baseline;\n}\n\nsup\n{\n    top: -.5em;\n}\n\nsub\n{\n    bottom: -.25em;\n}\n\nimg\n{\n    border: 0;\n}\n\nsvg:not(:root)\n{\n    overflow: hidden;\n}\n\nfigure\n{\n    margin: 1em 40px;\n}\n\nhr\n{\n    box-sizing: content-box;\n    height: 0;\n}\n\npre\n{\n    overflow: auto;\n}\n\ncode,\nkbd,\npre,\nsamp\n{\n    font-family: monospace, monospace;\n    font-size: 1em;\n}\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea\n{\n    font: inherit;\n\n    margin: 0;\n\n    color: inherit;\n}\n\nbutton\n{\n    overflow: visible;\n}\n\nbutton,\nselect\n{\n    text-transform: none;\n}\n\nbutton,\nhtml input[type='button'],\ninput[type='reset'],\ninput[type='submit']\n{\n    cursor: pointer;\n\n    -webkit-appearance: button;\n}\n\nbutton[disabled],\nhtml input[disabled]\n{\n    cursor: default;\n}\n\ninput\n{\n    line-height: normal;\n}\n\ninput[type='checkbox'],\ninput[type='radio']\n{\n    box-sizing: border-box;\n    padding: 0;\n}\n\ninput[type='number']::-webkit-inner-spin-button,\ninput[type='number']::-webkit-outer-spin-button\n{\n    height: auto;\n}\n\ninput[type='search']\n{\n    -webkit-box-sizing: content-box;\n            box-sizing: content-box;\n\n    -webkit-appearance: textfield;\n}\n\ninput[type='search']::-webkit-search-cancel-button,\ninput[type='search']::-webkit-search-decoration\n{\n    -webkit-appearance: none;\n}\n\nfieldset\n{\n    margin: 0 2px;\n    padding: .35em .625em .75em;\n\n    border: 1px solid #c0c0c0;\n}\n\nlegend\n{\n    padding: 0;\n\n    border: 0;\n}\n\ntextarea\n{\n    overflow: auto;\n}\n\noptgroup\n{\n    font-weight: bold;\n}\n\ntable\n{\n    border-spacing: 0;\n    border-collapse: collapse;\n}\n\ntd,\nth\n{\n    padding: 0;\n}\n\n*\n{\n    -webkit-box-sizing: border-box;\n            box-sizing: border-box;\n\n    -webkit-user-select: none;\n\n    outline: none;\n\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent;\n}\n\nbody\n{\n    font-family: 'Helvetica Neue', Helvetica, sans-serif;\n    font-size: 17px;\n    line-height: 21px;\n\n    color: #000;\n    background-color: #efeff4;\n\n    -webkit-overflow-scrolling: touch;\n}\n\na\n{\n    text-decoration: none;\n\n    color: #007aff;\n}\na:active\n{\n    color: #0062cc;\n}\n\n.mui-content\n{\n    background-color: #efeff4;\n\n    -webkit-overflow-scrolling: touch;\n}\n\n.mui-bar-nav ~ .mui-content\n{\n    padding-top: 44px;\n}\n.mui-bar-nav ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    top: 44px;\n}\n\n.mui-bar-header-secondary ~ .mui-content\n{\n    padding-top: 88px;\n}\n.mui-bar-header-secondary ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    top: 88px;\n}\n\n.mui-bar-footer ~ .mui-content\n{\n    padding-bottom: 44px;\n}\n.mui-bar-footer ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    bottom: 44px;\n}\n\n.mui-bar-footer-secondary ~ .mui-content\n{\n    padding-bottom: 88px;\n}\n.mui-bar-footer-secondary ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    bottom: 88px;\n}\n\n.mui-bar-tab ~ .mui-content\n{\n    padding-bottom: 50px;\n}\n.mui-bar-tab ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    bottom: 50px;\n}\n\n.mui-bar-footer-secondary-tab ~ .mui-content\n{\n    padding-bottom: 94px;\n}\n.mui-bar-footer-secondary-tab ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical\n{\n    bottom: 94px;\n}\n\n.mui-content-padded\n{\n    margin: 10px;\n}\n\n.mui-inline\n{\n    display: inline-block;\n\n    vertical-align: top;\n}\n\n.mui-block\n{\n    display: block !important;\n}\n\n.mui-visibility\n{\n    visibility: visible !important;\n}\n\n.mui-hidden\n{\n    display: none !important;\n}\n\n.mui-ellipsis\n{\n    overflow: hidden;\n\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n.mui-ellipsis-2\n{\n    display: -webkit-box;\n    overflow: hidden;\n\n    white-space: normal !important;\n    text-overflow: ellipsis;\n    word-wrap: break-word;\n\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n}\n\n.mui-table\n{\n    display: table;\n\n    width: 100%;\n\n    table-layout: fixed;\n}\n\n.mui-table-cell\n{\n    position: relative;\n\n    display: table-cell;\n}\n\n.mui-text-left\n{\n    text-align: left !important;\n}\n\n.mui-text-center\n{\n    text-align: center !important;\n}\n\n.mui-text-justify\n{\n    text-align: justify !important;\n}\n\n.mui-text-right\n{\n    text-align: right !important;\n}\n\n.mui-pull-left\n{\n    float: left;\n}\n\n.mui-pull-right\n{\n    float: right;\n}\n\n.mui-list-unstyled\n{\n    padding-left: 0;\n\n    list-style: none;\n}\n\n.mui-list-inline\n{\n    margin-left: -5px;\n    padding-left: 0;\n\n    list-style: none;\n}\n\n.mui-list-inline > li\n{\n    display: inline-block;\n\n    padding-right: 5px;\n    padding-left: 5px;\n}\n\n.mui-clearfix:before, .mui-clearfix:after\n{\n    display: table;\n\n    content: ' ';\n}\n.mui-clearfix:after\n{\n    clear: both;\n}\n\n.mui-bg-primary\n{\n    background-color: #007aff;\n}\n\n.mui-bg-positive\n{\n    background-color: #4cd964;\n}\n\n.mui-bg-negative\n{\n    background-color: #dd524d;\n}\n\n.mui-error\n{\n    margin: 88px 35px;\n    padding: 10px;\n\n    border-radius: 6px;\n    background-color: #bbb;\n}\n\n.mui-subtitle\n{\n    font-size: 15px;\n}\n\nh1, h2, h3, h4, h5, h6\n{\n    line-height: 1;\n\n    margin-top: 5px;\n    margin-bottom: 5px;\n}\n\nh1, .mui-h1\n{\n    font-size: 36px;\n}\n\nh2, .mui-h2\n{\n    font-size: 30px;\n}\n\nh3, .mui-h3\n{\n    font-size: 24px;\n}\n\nh4, .mui-h4\n{\n    font-size: 18px;\n}\n\nh5, .mui-h5\n{\n    font-size: 14px;\n    font-weight: normal;\n\n    color: #8f8f94;\n}\n\nh6, .mui-h6\n{\n    font-size: 12px;\n    font-weight: normal;\n\n    color: #8f8f94;\n}\n\np\n{\n    font-size: 14px;\n\n    margin-top: 0;\n    margin-bottom: 10px;\n\n    color: #8f8f94;\n}\n\n.mui-row:before, .mui-row:after\n{\n    display: table;\n\n    content: ' ';\n}\n.mui-row:after\n{\n    clear: both;\n}\n\n.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\n{\n    position: relative;\n\n    min-height: 1px;\n}\n\n.mui-row > [class*='mui-col-']\n{\n    float: left;\n}\n\n.mui-col-xs-12\n{\n    width: 100%;\n}\n\n.mui-col-xs-11\n{\n    width: 91.66666667%;\n}\n\n.mui-col-xs-10\n{\n    width: 83.33333333%;\n}\n\n.mui-col-xs-9\n{\n    width: 75%;\n}\n\n.mui-col-xs-8\n{\n    width: 66.66666667%;\n}\n\n.mui-col-xs-7\n{\n    width: 58.33333333%;\n}\n\n.mui-col-xs-6\n{\n    width: 50%;\n}\n\n.mui-col-xs-5\n{\n    width: 41.66666667%;\n}\n\n.mui-col-xs-4\n{\n    width: 33.33333333%;\n}\n\n.mui-col-xs-3\n{\n    width: 25%;\n}\n\n.mui-col-xs-2\n{\n    width: 16.66666667%;\n}\n\n.mui-col-xs-1\n{\n    width: 8.33333333%;\n}\n\n@media (min-width: 400px)\n{\n    .mui-col-sm-12\n    {\n        width: 100%;\n    }\n\n    .mui-col-sm-11\n    {\n        width: 91.66666667%;\n    }\n\n    .mui-col-sm-10\n    {\n        width: 83.33333333%;\n    }\n\n    .mui-col-sm-9\n    {\n        width: 75%;\n    }\n\n    .mui-col-sm-8\n    {\n        width: 66.66666667%;\n    }\n\n    .mui-col-sm-7\n    {\n        width: 58.33333333%;\n    }\n\n    .mui-col-sm-6\n    {\n        width: 50%;\n    }\n\n    .mui-col-sm-5\n    {\n        width: 41.66666667%;\n    }\n\n    .mui-col-sm-4\n    {\n        width: 33.33333333%;\n    }\n\n    .mui-col-sm-3\n    {\n        width: 25%;\n    }\n\n    .mui-col-sm-2\n    {\n        width: 16.66666667%;\n    }\n\n    .mui-col-sm-1\n    {\n        width: 8.33333333%;\n    }\n}\n.mui-scroll-wrapper\n{\n    position: absolute;\n    z-index: 2;\n    top: 0;\n    bottom: 0;\n    left: 0;\n\n    overflow: hidden;\n\n    width: 100%;\n}\n\n.mui-scroll\n{\n    position: absolute;\n    z-index: 1;\n\n    width: 100%;\n\n    -webkit-transform: translateZ(0);\n            transform: translateZ(0);\n}\n\n.mui-scrollbar\n{\n    position: absolute;\n    z-index: 9998;\n\n    overflow: hidden;\n\n    -webkit-transition: 500ms;\n            transition: 500ms;\n    transform: translateZ(0px);\n    pointer-events: none;\n\n    opacity: 0;\n}\n\n.mui-scrollbar-vertical\n{\n    top: 0;\n    right: 1px;\n    bottom: 2px;\n\n    width: 4px;\n}\n.mui-scrollbar-vertical .mui-scrollbar-indicator\n{\n    width: 100%;\n}\n\n.mui-scrollbar-horizontal\n{\n    right: 2px;\n    bottom: 0;\n    left: 2px;\n\n    height: 4px;\n}\n.mui-scrollbar-horizontal .mui-scrollbar-indicator\n{\n    height: 100%;\n}\n\n.mui-scrollbar-indicator\n{\n    position: absolute;\n\n    display: block;\n\n    box-sizing: border-box;\n\n    -webkit-transition: .01s cubic-bezier(.1, .57, .1, 1);\n            transition: .01s cubic-bezier(.1, .57, .1, 1);\n    transform: translate(0px, 0px) translateZ(0px);\n\n    border: 1px solid rgba(255, 255, 255, .80196);\n    border-radius: 2px;\n    background: rgba(0, 0, 0, .39804);\n}\n\n.mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll-wrapper, .mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll-wrapper\n{\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n\n    overflow: hidden;\n\n    width: 100%;\n}\n.mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll, .mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll\n{\n    position: absolute;\n\n    width: 100%;\n}\n.mui-plus-pullrefresh .mui-scroll-wrapper, .mui-plus-pullrefresh .mui-slider-group\n{\n    position: static;\n    top: auto;\n    bottom: auto;\n    left: auto;\n\n    overflow: auto;\n\n    width: auto;\n}\n.mui-plus-pullrefresh .mui-slider-group\n{\n    overflow: visible;\n}\n.mui-plus-pullrefresh .mui-scroll\n{\n    position: static;\n\n    width: auto;\n}\n\n.mui-off-canvas-wrap .mui-bar\n{\n    position: absolute !important;\n\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-off-canvas-wrap\n{\n    position: relative;\n    z-index: 1;\n\n    overflow: hidden;\n\n    width: 100%;\n    height: 100%;\n}\n.mui-off-canvas-wrap .mui-inner-wrap\n{\n    position: relative;\n    z-index: 1;\n\n    width: 100%;\n    height: 100%;\n}\n.mui-off-canvas-wrap .mui-inner-wrap.mui-transitioning\n{\n    -webkit-transition: -webkit-transform 350ms;\n            transition:         transform 350ms cubic-bezier(.165, .84, .44, 1);\n}\n.mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-left\n{\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n}\n.mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-right\n{\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n}\n.mui-off-canvas-wrap.mui-active\n{\n    overflow: hidden;\n\n    height: 100%;\n}\n.mui-off-canvas-wrap.mui-active .mui-off-canvas-backdrop\n{\n    position: absolute;\n    z-index: 998;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    display: block;\n\n    transition: background 350ms cubic-bezier(.165, .84, .44, 1);\n\n    background: rgba(0, 0, 0, .4);\n    box-shadow: -4px 0 4px rgba(0, 0, 0, .5), 4px 0 4px rgba(0, 0, 0, .5);\n\n    -webkit-tap-highlight-color: transparent;\n}\n.mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-right\n{\n    z-index: 10000 !important;\n\n    -webkit-transform: translate3d(100%, 0px, 0px);\n}\n.mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-left\n{\n    z-index: 10000 !important;\n\n    -webkit-transform: translate3d(-100%, 0px, 0px);\n}\n\n.mui-off-canvas-left, .mui-off-canvas-right\n{\n    position: absolute;\n    z-index: -1;\n    top: 0;\n    bottom: 0;\n\n    visibility: hidden;\n\n    box-sizing: content-box;\n    width: 70%;\n    min-height: 100%;\n\n    background: #333;\n\n    -webkit-overflow-scrolling: touch;\n}\n.mui-off-canvas-left.mui-transitioning, .mui-off-canvas-right.mui-transitioning\n{\n    -webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1);\n            transition:         transform 350ms cubic-bezier(.165, .84, .44, 1);\n}\n\n.mui-off-canvas-left\n{\n    left: 0;\n}\n\n.mui-off-canvas-right\n{\n    right: 0;\n}\n\n.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable\n{\n    background-color: #333;\n}\n.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\n{\n    width: 80%;\n\n    -webkit-transform: scale(.8);\n            transform: scale(.8);\n\n    opacity: .1;\n}\n.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\n{\n    -webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1);\n            transition:         transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1);\n}\n.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-left\n{\n    -webkit-transform-origin: -100%;\n            transform-origin: -100%;\n}\n.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-right\n{\n    -webkit-transform-origin: 200%;\n            transform-origin: 200%;\n}\n.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active > .mui-inner-wrap\n{\n    -webkit-transform: scale(.8);\n            transform: scale(.8);\n}\n.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\n{\n    -webkit-transform: scale(1);\n            transform: scale(1);\n\n    opacity: 1;\n}\n\n.mui-loading .mui-spinner\n{\n    display: block;\n\n    margin: 0 auto;\n}\n\n.mui-spinner\n{\n    display: inline-block;\n\n    width: 24px;\n    height: 24px;\n\n    -webkit-transform-origin: 50%;\n            transform-origin: 50%;\n    -webkit-animation: spinner-spin 1s step-end infinite;\n            animation: spinner-spin 1s step-end infinite;\n}\n\n.mui-spinner:after\n{\n    display: block;\n\n    width: 100%;\n    height: 100%;\n\n    content: '';\n\n    background-image: url('data:image/svg+xml;charset=utf-8,<svg viewBox=\\'0 0 120 120\\' xmlns=\\'http://www.w3.org/2000/svg\\' xmlns:xlink=\\'http://www.w3.org/1999/xlink\\'><defs><line id=\\'l\\' x1=\\'60\\' x2=\\'60\\' y1=\\'7\\' y2=\\'27\\' stroke=\\'%236c6c6c\\' stroke-width=\\'11\\' stroke-linecap=\\'round\\'/></defs><g><use xlink:href=\\'%23l\\' opacity=\\'.27\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(30 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(60 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(90 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(120 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(150 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.37\\' transform=\\'rotate(180 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.46\\' transform=\\'rotate(210 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.56\\' transform=\\'rotate(240 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.66\\' transform=\\'rotate(270 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.75\\' transform=\\'rotate(300 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.85\\' transform=\\'rotate(330 60,60)\\'/></g></svg>');\n    background-repeat: no-repeat;\n    background-position: 50%;\n    background-size: 100%;\n}\n\n.mui-spinner-white:after\n{\n    background-image: url('data:image/svg+xml;charset=utf-8,<svg viewBox=\\'0 0 120 120\\' xmlns=\\'http://www.w3.org/2000/svg\\' xmlns:xlink=\\'http://www.w3.org/1999/xlink\\'><defs><line id=\\'l\\' x1=\\'60\\' x2=\\'60\\' y1=\\'7\\' y2=\\'27\\' stroke=\\'%23fff\\' stroke-width=\\'11\\' stroke-linecap=\\'round\\'/></defs><g><use xlink:href=\\'%23l\\' opacity=\\'.27\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(30 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(60 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(90 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(120 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.27\\' transform=\\'rotate(150 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.37\\' transform=\\'rotate(180 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.46\\' transform=\\'rotate(210 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.56\\' transform=\\'rotate(240 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.66\\' transform=\\'rotate(270 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.75\\' transform=\\'rotate(300 60,60)\\'/><use xlink:href=\\'%23l\\' opacity=\\'.85\\' transform=\\'rotate(330 60,60)\\'/></g></svg>');\n}\n\n@-webkit-keyframes spinner-spin\n{\n    0%\n    {\n        -webkit-transform: rotate(0deg);\n    }\n\n    8.33333333%\n    {\n        -webkit-transform: rotate(30deg);\n    }\n\n    16.66666667%\n    {\n        -webkit-transform: rotate(60deg);\n    }\n\n    25%\n    {\n        -webkit-transform: rotate(90deg);\n    }\n\n    33.33333333%\n    {\n        -webkit-transform: rotate(120deg);\n    }\n\n    41.66666667%\n    {\n        -webkit-transform: rotate(150deg);\n    }\n\n    50%\n    {\n        -webkit-transform: rotate(180deg);\n    }\n\n    58.33333333%\n    {\n        -webkit-transform: rotate(210deg);\n    }\n\n    66.66666667%\n    {\n        -webkit-transform: rotate(240deg);\n    }\n\n    75%\n    {\n        -webkit-transform: rotate(270deg);\n    }\n\n    83.33333333%\n    {\n        -webkit-transform: rotate(300deg);\n    }\n\n    91.66666667%\n    {\n        -webkit-transform: rotate(330deg);\n    }\n\n    100%\n    {\n        -webkit-transform: rotate(360deg);\n    }\n}\n@keyframes spinner-spin\n{\n    0%\n    {\n        transform: rotate(0deg);\n    }\n\n    8.33333333%\n    {\n        transform: rotate(30deg);\n    }\n\n    16.66666667%\n    {\n        transform: rotate(60deg);\n    }\n\n    25%\n    {\n        transform: rotate(90deg);\n    }\n\n    33.33333333%\n    {\n        transform: rotate(120deg);\n    }\n\n    41.66666667%\n    {\n        transform: rotate(150deg);\n    }\n\n    50%\n    {\n        transform: rotate(180deg);\n    }\n\n    58.33333333%\n    {\n        transform: rotate(210deg);\n    }\n\n    66.66666667%\n    {\n        transform: rotate(240deg);\n    }\n\n    75%\n    {\n        transform: rotate(270deg);\n    }\n\n    83.33333333%\n    {\n        transform: rotate(300deg);\n    }\n\n    91.66666667%\n    {\n        transform: rotate(330deg);\n    }\n\n    100%\n    {\n        transform: rotate(360deg);\n    }\n}\ninput[type='button'],\ninput[type='submit'],\ninput[type='reset'],\nbutton,\n.mui-btn\n{\n    font-size: 14px;\n    font-weight: 400;\n    line-height: 1.42;\n\n    position: relative;\n\n    display: inline-block;\n\n    margin-bottom: 0;\n    padding: 6px 12px;\n\n    cursor: pointer;\n    -webkit-transition: all;\n            transition: all;\n    -webkit-transition-timing-function: linear;\n            transition-timing-function: linear;\n    -webkit-transition-duration: .2s;\n            transition-duration: .2s;\n    text-align: center;\n    vertical-align: top;\n    white-space: nowrap;\n\n    color: #333;\n    border: 1px solid #ccc;\n    border-radius: 3px;\n    border-top-left-radius: 3px;\n    border-top-right-radius: 3px;\n    border-bottom-right-radius: 3px;\n    border-bottom-left-radius: 3px;\n    background-color: #fff;\n    background-clip: padding-box;\n}\ninput[type='button']:enabled:active, input[type='button'].mui-active:enabled,\ninput[type='submit']:enabled:active,\ninput[type='submit'].mui-active:enabled,\ninput[type='reset']:enabled:active,\ninput[type='reset'].mui-active:enabled,\nbutton:enabled:active,\nbutton.mui-active:enabled,\n.mui-btn:enabled:active,\n.mui-btn.mui-active:enabled\n{\n    color: #fff;\n    background-color: #929292;\n}\ninput[type='button']:disabled, input[type='button'].mui-disabled,\ninput[type='submit']:disabled,\ninput[type='submit'].mui-disabled,\ninput[type='reset']:disabled,\ninput[type='reset'].mui-disabled,\nbutton:disabled,\nbutton.mui-disabled,\n.mui-btn:disabled,\n.mui-btn.mui-disabled\n{\n    opacity: .6;\n}\n\ninput[type='submit'],\n.mui-btn-primary,\n.mui-btn-blue\n{\n    color: #fff;\n    border: 1px solid #007aff;\n    background-color: #007aff;\n}\ninput[type='submit']:enabled:active, input[type='submit'].mui-active:enabled,\n.mui-btn-primary:enabled:active,\n.mui-btn-primary.mui-active:enabled,\n.mui-btn-blue:enabled:active,\n.mui-btn-blue.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #0062cc;\n    background-color: #0062cc;\n}\n\n.mui-btn-positive,\n.mui-btn-success,\n.mui-btn-green\n{\n    color: #fff;\n    border: 1px solid #4cd964;\n    background-color: #4cd964;\n}\n.mui-btn-positive:enabled:active, .mui-btn-positive.mui-active:enabled,\n.mui-btn-success:enabled:active,\n.mui-btn-success.mui-active:enabled,\n.mui-btn-green:enabled:active,\n.mui-btn-green.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #2ac845;\n    background-color: #2ac845;\n}\n\n.mui-btn-warning,\n.mui-btn-yellow\n{\n    color: #fff;\n    border: 1px solid #f0ad4e;\n    background-color: #f0ad4e;\n}\n.mui-btn-warning:enabled:active, .mui-btn-warning.mui-active:enabled,\n.mui-btn-yellow:enabled:active,\n.mui-btn-yellow.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #ec971f;\n    background-color: #ec971f;\n}\n\n.mui-btn-negative,\n.mui-btn-danger,\n.mui-btn-red\n{\n    color: #fff;\n    border: 1px solid #dd524d;\n    background-color: #dd524d;\n}\n.mui-btn-negative:enabled:active, .mui-btn-negative.mui-active:enabled,\n.mui-btn-danger:enabled:active,\n.mui-btn-danger.mui-active:enabled,\n.mui-btn-red:enabled:active,\n.mui-btn-red.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #cf2d28;\n    background-color: #cf2d28;\n}\n\n.mui-btn-royal,\n.mui-btn-purple\n{\n    color: #fff;\n    border: 1px solid #8a6de9;\n    background-color: #8a6de9;\n}\n.mui-btn-royal:enabled:active, .mui-btn-royal.mui-active:enabled,\n.mui-btn-purple:enabled:active,\n.mui-btn-purple.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #6641e2;\n    background-color: #6641e2;\n}\n\n.mui-btn-grey\n{\n    color: #fff;\n    border: 1px solid #c7c7cc;\n    background-color: #c7c7cc;\n}\n.mui-btn-grey:enabled:active, .mui-btn-grey.mui-active:enabled\n{\n    color: #fff;\n    border: 1px solid #acacb4;\n    background-color: #acacb4;\n}\n\n.mui-btn-outlined\n{\n    background-color: transparent;\n}\n.mui-btn-outlined.mui-btn-primary, .mui-btn-outlined.mui-btn-blue\n{\n    color: #007aff;\n}\n.mui-btn-outlined.mui-btn-positive, .mui-btn-outlined.mui-btn-success, .mui-btn-outlined.mui-btn-green\n{\n    color: #4cd964;\n}\n.mui-btn-outlined.mui-btn-warning, .mui-btn-outlined.mui-btn-yellow\n{\n    color: #f0ad4e;\n}\n.mui-btn-outlined.mui-btn-negative, .mui-btn-outlined.mui-btn-danger, .mui-btn-outlined.mui-btn-red\n{\n    color: #dd524d;\n}\n.mui-btn-outlined.mui-btn-royal, .mui-btn-outlined.mui-btn-purple\n{\n    color: #8a6de9;\n}\n.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\n{\n    color: #fff;\n}\n\n.mui-btn-link\n{\n    padding-top: 6px;\n    padding-bottom: 6px;\n\n    color: #007aff;\n    border: 0;\n    background-color: transparent;\n}\n.mui-btn-link:enabled:active, .mui-btn-link.mui-active:enabled\n{\n    color: #0062cc;\n    background-color: transparent;\n}\n\n.mui-btn-block\n{\n    font-size: 18px;\n\n    display: block;\n\n    width: 100%;\n    margin-bottom: 10px;\n    padding: 15px 0;\n}\n\n.mui-btn .mui-badge\n{\n    font-size: 14px;\n\n    margin: -2px -4px -2px 4px;\n\n    background-color: rgba(0, 0, 0, .15);\n}\n\n.mui-btn .mui-badge-inverted,\n.mui-btn:enabled:active .mui-badge-inverted\n{\n    background-color: transparent;\n}\n\n.mui-btn-primary:enabled:active .mui-badge-inverted,\n.mui-btn-positive:enabled:active .mui-badge-inverted,\n.mui-btn-negative:enabled:active .mui-badge-inverted\n{\n    color: #fff;\n}\n\n.mui-btn-block .mui-badge\n{\n    position: absolute;\n    right: 0;\n\n    margin-right: 10px;\n}\n\n.mui-btn .mui-icon\n{\n    font-size: inherit;\n}\n\n.mui-btn.mui-icon\n{\n    font-size: 14px;\n    line-height: 1.42;\n}\n\n.mui-btn.mui-fab\n{\n    width: 56px;\n    height: 56px;\n    padding: 16px;\n\n    border-radius: 50%;\n    outline: none;\n}\n.mui-btn.mui-fab.mui-btn-mini\n{\n    width: 40px;\n    height: 40px;\n    padding: 8px;\n}\n.mui-btn.mui-fab .mui-icon\n{\n    font-size: 24px;\n    line-height: 24px;\n\n    width: 24px;\n    height: 24px;\n}\n\n.mui-btn .mui-spinner\n{\n    width: 14px;\n    height: 14px;\n\n    vertical-align: text-bottom;\n}\n\n.mui-btn-block .mui-spinner\n{\n    width: 22px;\n    height: 22px;\n}\n\n.mui-bar\n{\n    position: fixed;\n    z-index: 10;\n    right: 0;\n    left: 0;\n\n    height: 44px;\n    padding-right: 10px;\n    padding-left: 10px;\n\n    border-bottom: 0;\n    background-color: #f7f7f7;\n    -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, .85);\n            box-shadow: 0 0 1px rgba(0, 0, 0, .85);\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n}\n\n.mui-bar .mui-title\n{\n    right: 40px;\n    left: 40px;\n\n    display: inline-block;\n    overflow: hidden;\n\n    width: auto;\n    margin: 0;\n\n    text-overflow: ellipsis;\n}\n.mui-bar .mui-backdrop\n{\n    background: none;\n}\n\n.mui-bar-header-secondary\n{\n    top: 44px;\n}\n\n.mui-bar-footer\n{\n    bottom: 0;\n}\n\n.mui-bar-footer-secondary\n{\n    bottom: 44px;\n}\n\n.mui-bar-footer-secondary-tab\n{\n    bottom: 50px;\n}\n\n.mui-bar-footer,\n.mui-bar-footer-secondary,\n.mui-bar-footer-secondary-tab\n{\n    border-top: 0;\n}\n\n.mui-bar-transparent\n{\n    top: 0;\n\n    background-color: rgba(247, 247, 247, 0);\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-bar-nav\n{\n    top: 0;\n\n    -webkit-box-shadow: 0 1px 6px #ccc;\n            box-shadow: 0 1px 6px #ccc;\n}\n.mui-bar-nav ~ .mui-content .mui-anchor\n{\n    display: block;\n    visibility: hidden;\n\n    height: 45px;\n    margin-top: -45px;\n}\n.mui-bar-nav.mui-bar .mui-icon\n{\n    margin-right: -10px;\n    margin-left: -10px;\n    padding-right: 10px;\n    padding-left: 10px;\n}\n\n.mui-title\n{\n    font-size: 17px;\n    font-weight: 500;\n    line-height: 44px;\n\n    position: absolute;\n\n    display: block;\n\n    width: 100%;\n    margin: 0 -10px;\n    padding: 0;\n\n    text-align: center;\n    white-space: nowrap;\n\n    color: #000;\n}\n\n.mui-title a\n{\n    color: inherit;\n}\n\n.mui-bar-tab\n{\n    bottom: 0;\n\n    display: table;\n\n    width: 100%;\n    height: 50px;\n    padding: 0;\n\n    table-layout: fixed;\n\n    border-top: 0;\n    border-bottom: 0;\n\n    -webkit-touch-callout: none;\n}\n.mui-bar-tab .mui-tab-item\n{\n    display: table-cell;\n    overflow: hidden;\n\n    width: 1%;\n    height: 50px;\n\n    text-align: center;\n    vertical-align: middle;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    color: #929292;\n}\n.mui-bar-tab .mui-tab-item.mui-active\n{\n    color: #007aff;\n}\n.mui-bar-tab .mui-tab-item .mui-icon\n{\n    top: 3px;\n\n    width: 24px;\n    height: 24px;\n    padding-top: 0;\n    padding-bottom: 0;\n}\n.mui-bar-tab .mui-tab-item .mui-icon ~ .mui-tab-label\n{\n    font-size: 11px;\n\n    display: block;\n    overflow: hidden;\n\n    text-overflow: ellipsis;\n}\n.mui-bar-tab .mui-tab-item .mui-icon:active\n{\n    background: none;\n}\n\n.mui-focusin > .mui-bar-nav,\n.mui-focusin > .mui-bar-header-secondary\n{\n    position: absolute;\n}\n\n.mui-focusin > .mui-bar ~ .mui-content\n{\n    padding-bottom: 0;\n}\n\n.mui-bar .mui-btn\n{\n    font-weight: 400;\n\n    position: relative;\n    z-index: 20;\n    top: 7px;\n\n    margin-top: 0;\n    padding: 6px 12px 7px;\n}\n.mui-bar .mui-btn.mui-pull-right\n{\n    margin-left: 10px;\n}\n.mui-bar .mui-btn.mui-pull-left\n{\n    margin-right: 10px;\n}\n\n.mui-bar .mui-btn-link\n{\n    font-size: 16px;\n    line-height: 44px;\n\n    top: 0;\n\n    padding: 0;\n\n    color: #007aff;\n    border: 0;\n}\n.mui-bar .mui-btn-link:active, .mui-bar .mui-btn-link.mui-active\n{\n    color: #0062cc;\n}\n\n.mui-bar .mui-btn-block\n{\n    font-size: 16px;\n\n    top: 6px;\n\n    margin-bottom: 0;\n    padding: 5px 0;\n}\n\n.mui-bar .mui-btn-nav.mui-pull-left\n{\n    margin-left: -5px;\n}\n.mui-bar .mui-btn-nav.mui-pull-left .mui-icon-left-nav\n{\n    margin-right: -3px;\n}\n.mui-bar .mui-btn-nav.mui-pull-right\n{\n    margin-right: -5px;\n}\n.mui-bar .mui-btn-nav.mui-pull-right .mui-icon-right-nav\n{\n    margin-left: -3px;\n}\n.mui-bar .mui-btn-nav:active\n{\n    opacity: .3;\n}\n\n.mui-bar .mui-icon\n{\n    font-size: 24px;\n\n    position: relative;\n    z-index: 20;\n\n    padding-top: 10px;\n    padding-bottom: 10px;\n}\n.mui-bar .mui-icon:active\n{\n    opacity: .3;\n}\n.mui-bar .mui-btn .mui-icon\n{\n    top: 1px;\n\n    margin: 0;\n    padding: 0;\n}\n.mui-bar .mui-title .mui-icon\n{\n    margin: 0;\n    padding: 0;\n}\n.mui-bar .mui-title .mui-icon.mui-icon-caret\n{\n    top: 4px;\n\n    margin-left: -5px;\n}\n\n.mui-bar input[type='search']\n{\n    height: 29px;\n    margin: 6px 0;\n}\n\n.mui-bar .mui-input-row .mui-btn\n{\n    padding: 12px 10px;\n}\n\n.mui-bar .mui-search:before\n{\n    margin-top: -10px;\n}\n\n.mui-bar .mui-input-row .mui-input-clear ~ .mui-icon-clear,\n.mui-bar .mui-input-row .mui-input-speech ~ .mui-icon-speech\n{\n    top: 0;\n    right: 12px;\n}\n\n.mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-clear ~ .mui-icon-clear,\n.mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-speech ~ .mui-icon-speech\n{\n    top: 0;\n    right: 0;\n}\n\n.mui-bar .mui-segmented-control\n{\n    top: 7px;\n\n    width: auto;\n    margin: 0 auto;\n}\n\n.mui-bar.mui-bar-header-secondary .mui-segmented-control\n{\n    top: 0;\n}\n\n.mui-badge\n{\n    font-size: 12px;\n    line-height: 1;\n\n    display: inline-block;\n\n    padding: 3px 6px;\n\n    color: #333;\n    border-radius: 100px;\n    background-color: rgba(0, 0, 0, .15);\n}\n.mui-badge.mui-badge-inverted\n{\n    padding: 0 5px 0 0;\n\n    color: #929292;\n    background-color: transparent;\n}\n\n.mui-badge-primary, .mui-badge-blue\n{\n    color: #fff;\n    background-color: #007aff;\n}\n.mui-badge-primary.mui-badge-inverted, .mui-badge-blue.mui-badge-inverted\n{\n    color: #007aff;\n    background-color: transparent;\n}\n\n.mui-badge-success, .mui-badge-green\n{\n    color: #fff;\n    background-color: #4cd964;\n}\n.mui-badge-success.mui-badge-inverted, .mui-badge-green.mui-badge-inverted\n{\n    color: #4cd964;\n    background-color: transparent;\n}\n\n.mui-badge-warning, .mui-badge-yellow\n{\n    color: #fff;\n    background-color: #f0ad4e;\n}\n.mui-badge-warning.mui-badge-inverted, .mui-badge-yellow.mui-badge-inverted\n{\n    color: #f0ad4e;\n    background-color: transparent;\n}\n\n.mui-badge-danger, .mui-badge-red\n{\n    color: #fff;\n    background-color: #dd524d;\n}\n.mui-badge-danger.mui-badge-inverted, .mui-badge-red.mui-badge-inverted\n{\n    color: #dd524d;\n    background-color: transparent;\n}\n\n.mui-badge-royal, .mui-badge-purple\n{\n    color: #fff;\n    background-color: #8a6de9;\n}\n.mui-badge-royal.mui-badge-inverted, .mui-badge-purple.mui-badge-inverted\n{\n    color: #8a6de9;\n    background-color: transparent;\n}\n\n.mui-icon .mui-badge\n{\n    font-size: 10px;\n    line-height: 1.4;\n\n    position: absolute;\n    top: -2px;\n    left: 100%;\n\n    margin-left: -10px;\n    padding: 1px 5px;\n\n    color: white;\n    background: red;\n}\n\n.mui-card\n{\n    font-size: 14px;\n\n    position: relative;\n\n    overflow: hidden;\n\n    margin: 10px;\n\n    border-radius: 2px;\n    background-color: white;\n    background-clip: padding-box;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, .3);\n}\n\n.mui-content > .mui-card:first-child\n{\n    margin-top: 15px;\n}\n\n.mui-card .mui-input-group:before, .mui-card .mui-input-group:after\n{\n    height: 0;\n}\n.mui-card .mui-input-group .mui-input-row:last-child:before, .mui-card .mui-input-group .mui-input-row:last-child:after\n{\n    height: 0;\n}\n\n.mui-card .mui-table-view\n{\n    margin-bottom: 0;\n\n    border-top: 0;\n    border-bottom: 0;\n    border-radius: 6px;\n}\n.mui-card .mui-table-view .mui-table-view-divider:first-child, .mui-card .mui-table-view .mui-table-view-cell:first-child\n{\n    top: 0;\n\n    border-top-left-radius: 6px;\n    border-top-right-radius: 6px;\n}\n.mui-card .mui-table-view .mui-table-view-divider:last-child, .mui-card .mui-table-view .mui-table-view-cell:last-child\n{\n    border-bottom-right-radius: 6px;\n    border-bottom-left-radius: 6px;\n}\n.mui-card .mui-table-view:before, .mui-card .mui-table-view:after\n{\n    height: 0;\n}\n\n.mui-card > .mui-table-view > .mui-table-view-cell:last-child:before, .mui-card > .mui-table-view > .mui-table-view-cell:last-child:after\n{\n    height: 0;\n}\n\n.mui-card-header,\n.mui-card-footer\n{\n    position: relative;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    min-height: 44px;\n    padding: 10px 15px;\n\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n            justify-content: space-between;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n            align-items: center;\n}\n.mui-card-header .mui-card-link,\n.mui-card-footer .mui-card-link\n{\n    line-height: 44px;\n\n    position: relative;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    height: 44px;\n    margin-top: -10px;\n    margin-bottom: -10px;\n\n    -webkit-transition-duration: .3s;\n            transition-duration: .3s;\n    text-decoration: none;\n\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n            justify-content: flex-start;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n            align-items: center;\n}\n\n.mui-card-header:after,\n.mui-card-footer:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-card-header\n{\n    font-size: 17px;\n\n    border-radius: 2px 2px 0 0;\n}\n.mui-card-header:after\n{\n    top: auto;\n    bottom: 0;\n}\n.mui-card-header > img:first-child\n{\n    font-size: 0;\n    line-height: 0;\n\n    float: left;\n\n    width: 34px;\n    height: 34px;\n}\n\n.mui-card-footer\n{\n    color: #6d6d72;\n    border-radius: 0 0 2px 2px;\n}\n\n.mui-card-content\n{\n    font-size: 14px;\n\n    position: relative;\n}\n\n.mui-card-content-inner\n{\n    position: relative;\n\n    padding: 15px;\n}\n\n.mui-card-media\n{\n    vertical-align: bottom;\n\n    color: #fff;\n    background-position: center;\n    background-size: cover;\n}\n\n.mui-card-header.mui-card-media\n{\n    display: block;\n\n    padding: 10px;\n}\n.mui-card-header.mui-card-media .mui-media-body\n{\n    font-size: 14px;\n    font-weight: 500;\n    line-height: 17px;\n\n    margin-bottom: 0;\n    margin-left: 44px;\n\n    color: #333;\n}\n.mui-card-header.mui-card-media .mui-media-body p\n{\n    font-size: 13px;\n\n    margin-bottom: 0;\n}\n\n.mui-table-view\n{\n    position: relative;\n\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 0;\n\n    list-style: none;\n\n    background-color: #fff;\n}\n.mui-table-view:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view:before\n{\n    top: -1px;\n}\n\n.mui-table-view-icon .mui-table-view-cell .mui-navigate-right .mui-icon\n{\n    font-size: 20px;\n\n    margin-top: -1px;\n    margin-right: 5px;\n    margin-left: -5px;\n}\n.mui-table-view-icon .mui-table-view-cell:after\n{\n    left: 40px;\n}\n\n.mui-table-view-chevron .mui-table-view-cell\n{\n    padding-right: 65px;\n}\n.mui-table-view-chevron .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin-right: -65px;\n}\n\n.mui-table-view-radio .mui-table-view-cell\n{\n    padding-right: 65px;\n}\n.mui-table-view-radio .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin-right: -65px;\n}\n.mui-table-view-radio .mui-table-view-cell .mui-navigate-right:after\n{\n    font-size: 30px;\n    font-weight: 600;\n\n    right: 9px;\n\n    content: '';\n\n    color: #007aff;\n}\n.mui-table-view-radio .mui-table-view-cell.mui-selected .mui-navigate-right:after\n{\n    content: '\\e472';\n}\n\n.mui-table-view-inverted\n{\n    color: #fff;\n    background: #333;\n}\n.mui-table-view-inverted:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #222;\n}\n.mui-table-view-inverted:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #222;\n}\n.mui-table-view-inverted .mui-table-view-cell:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 15px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #222;\n}\n.mui-table-view-inverted .mui-table-view-cell.mui-active\n{\n    background-color: #242424;\n}\n.mui-table-view-inverted .mui-table-view-cell > a:not(.mui-btn).mui-active\n{\n    background-color: #242424;\n}\n\n.mui-table-view-cell\n{\n    position: relative;\n\n    overflow: hidden;\n\n    padding: 11px 15px;\n\n    -webkit-touch-callout: none;\n}\n.mui-table-view-cell:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 15px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view-cell.mui-radio input[type=radio], .mui-table-view-cell.mui-checkbox input[type=checkbox]\n{\n    top: 8px;\n}\n.mui-table-view-cell.mui-radio.mui-left, .mui-table-view-cell.mui-checkbox.mui-left\n{\n    padding-left: 58px;\n}\n.mui-table-view-cell.mui-active\n{\n    background-color: #eee;\n}\n.mui-table-view-cell:last-child:before, .mui-table-view-cell:last-child:after\n{\n    height: 0;\n}\n.mui-table-view-cell > a:not(.mui-btn)\n{\n    position: relative;\n\n    display: block;\n    overflow: hidden;\n\n    margin: -11px -15px;\n    padding: inherit;\n\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    color: inherit;\n  /*&:active {\n      background-color: #eee;\n  }*/\n}\n.mui-table-view-cell > a:not(.mui-btn).mui-active\n{\n    background-color: #eee;\n}\n.mui-table-view-cell p\n{\n    margin-bottom: 0;\n}\n\n.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\n{\n    -webkit-transition: -webkit-transform 300ms ease;\n            transition:         transform 300ms ease;\n}\n.mui-table-view-cell.mui-active > .mui-slider-handle\n{\n    background-color: #eee;\n}\n.mui-table-view-cell > .mui-slider-handle\n{\n    position: relative;\n\n    background-color: #fff;\n}\n.mui-table-view-cell > .mui-slider-handle.mui-navigate-right:after, .mui-table-view-cell > .mui-slider-handle .mui-navigate-right:after\n{\n    right: 0;\n}\n.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\n{\n    -webkit-transition: -webkit-transform 0ms ease;\n            transition:         transform 0ms ease;\n}\n.mui-table-view-cell > .mui-slider-left, .mui-table-view-cell > .mui-slider-right\n{\n    position: absolute;\n    top: 0;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    height: 100%;\n}\n.mui-table-view-cell > .mui-slider-left > .mui-btn, .mui-table-view-cell > .mui-slider-right > .mui-btn\n{\n    position: relative;\n    left: 0;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    padding: 0 30px;\n\n    color: #fff;\n    border: 0;\n    border-radius: 0;\n\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n            align-items: center;\n}\n.mui-table-view-cell > .mui-slider-left > .mui-btn:after, .mui-table-view-cell > .mui-slider-right > .mui-btn:after\n{\n    position: absolute;\n    z-index: -1;\n    top: 0;\n\n    width: 600%;\n    height: 100%;\n\n    content: '';\n\n    background: inherit;\n}\n.mui-table-view-cell > .mui-slider-left > .mui-btn.mui-icon, .mui-table-view-cell > .mui-slider-right > .mui-btn.mui-icon\n{\n    font-size: 30px;\n}\n.mui-table-view-cell > .mui-slider-right\n{\n    right: 0;\n\n    -webkit-transition: -webkit-transform 0ms ease;\n            transition:         transform 0ms ease;\n    -webkit-transform: translateX(100%);\n            transform: translateX(100%);\n}\n.mui-table-view-cell > .mui-slider-left\n{\n    left: 0;\n\n    -webkit-transition: -webkit-transform 0ms ease;\n            transition:         transform 0ms ease;\n    -webkit-transform: translateX(-100%);\n            transform: translateX(-100%);\n}\n.mui-table-view-cell > .mui-slider-left > .mui-btn:after\n{\n    right: 100%;\n\n    margin-right: -1px;\n}\n\n.mui-table-view-divider\n{\n    font-weight: 500;\n\n    position: relative;\n\n    margin-top: -1px;\n    margin-left: 0;\n    padding-top: 6px;\n    padding-bottom: 6px;\n    padding-left: 15px;\n\n    color: #999;\n    background-color: #fafafa;\n}\n.mui-table-view-divider:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view-divider:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-table-view .mui-media,\n.mui-table-view .mui-media-body\n{\n    overflow: hidden;\n}\n\n.mui-table-view .mui-media-large .mui-media-object\n{\n    line-height: 80px;\n\n    max-width: 80px;\n    height: 80px;\n}\n.mui-table-view .mui-media .mui-subtitle\n{\n    color: #000;\n}\n.mui-table-view .mui-media-object\n{\n    line-height: 42px;\n\n    max-width: 42px;\n    height: 42px;\n}\n.mui-table-view .mui-media-object.mui-pull-left\n{\n    margin-right: 10px;\n}\n.mui-table-view .mui-media-object.mui-pull-right\n{\n    margin-left: 10px;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object\n{\n    line-height: 29px;\n\n    max-width: 29px;\n    height: 29px;\n    margin: -4px 0;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object img\n{\n    line-height: 29px;\n\n    max-width: 29px;\n    height: 29px;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object.mui-pull-left\n{\n    margin-right: 10px;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object .mui-icon\n{\n    font-size: 29px;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-body:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 55px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-table-view .mui-table-view-cell.mui-media-icon:after\n{\n    height: 0 !important;\n}\n\n.mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view\n{\n    display: block;\n}\n.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\n{\n    height: 0 !important;\n}\n.mui-table-view.mui-unfold .mui-table-view-cell.mui-media-icon.mui-collapse .mui-media-body:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 70px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-table-view-cell > .mui-btn,\n.mui-table-view-cell > .mui-badge,\n.mui-table-view-cell > .mui-switch,\n.mui-table-view-cell > a > .mui-btn,\n.mui-table-view-cell > a > .mui-badge,\n.mui-table-view-cell > a > .mui-switch\n{\n    position: absolute;\n    top: 50%;\n    right: 15px;\n\n    -webkit-transform: translateY(-50%);\n            transform: translateY(-50%);\n}\n.mui-table-view-cell .mui-navigate-right > .mui-btn,\n.mui-table-view-cell .mui-navigate-right > .mui-badge,\n.mui-table-view-cell .mui-navigate-right > .mui-switch,\n.mui-table-view-cell .mui-push-left > .mui-btn,\n.mui-table-view-cell .mui-push-left > .mui-badge,\n.mui-table-view-cell .mui-push-left > .mui-switch,\n.mui-table-view-cell .mui-push-right > .mui-btn,\n.mui-table-view-cell .mui-push-right > .mui-badge,\n.mui-table-view-cell .mui-push-right > .mui-switch,\n.mui-table-view-cell > a .mui-navigate-right > .mui-btn,\n.mui-table-view-cell > a .mui-navigate-right > .mui-badge,\n.mui-table-view-cell > a .mui-navigate-right > .mui-switch,\n.mui-table-view-cell > a .mui-push-left > .mui-btn,\n.mui-table-view-cell > a .mui-push-left > .mui-badge,\n.mui-table-view-cell > a .mui-push-left > .mui-switch,\n.mui-table-view-cell > a .mui-push-right > .mui-btn,\n.mui-table-view-cell > a .mui-push-right > .mui-badge,\n.mui-table-view-cell > a .mui-push-right > .mui-switch\n{\n    right: 35px;\n}\n\n.mui-content > .mui-table-view:first-child\n{\n    margin-top: 15px;\n}\n\n.mui-table-view-cell.mui-collapse .mui-table-view:before, .mui-table-view-cell.mui-collapse .mui-table-view:after\n{\n    height: 0;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:last-child:after\n{\n    height: 0;\n}\n.mui-table-view-cell.mui-collapse > .mui-navigate-right:after, .mui-table-view-cell.mui-collapse > .mui-push-right:after\n{\n    content: '\\e581';\n}\n.mui-table-view-cell.mui-collapse.mui-active\n{\n    margin-top: -1px;\n}\n.mui-table-view-cell.mui-collapse.mui-active .mui-table-view, .mui-table-view-cell.mui-collapse.mui-active .mui-collapse-content\n{\n    display: block;\n}\n.mui-table-view-cell.mui-collapse.mui-active > .mui-navigate-right:after, .mui-table-view-cell.mui-collapse.mui-active > .mui-push-right:after\n{\n    content: '\\e580';\n}\n.mui-table-view-cell.mui-collapse.mui-active .mui-table-view-cell > a:not(.mui-btn).mui-active\n{\n    margin-left: -31px;\n    padding-left: 47px;\n}\n.mui-table-view-cell.mui-collapse .mui-collapse-content\n{\n    position: relative;\n\n    display: none;\n    overflow: hidden;\n\n    margin: 11px -15px -11px;\n    padding: 8px 15px;\n\n    -webkit-transition: height .35s ease;\n         -o-transition: height .35s ease;\n            transition: height .35s ease;\n\n    background: white;\n}\n.mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-input-group, .mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-slider\n{\n    width: auto;\n    height: auto;\n    margin: -8px -15px;\n}\n.mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-slider\n{\n    margin: -8px -16px;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view\n{\n    display: none;\n\n    margin-top: 11px;\n    margin-right: -15px;\n    margin-bottom: -11px;\n    margin-left: -15px;\n\n    border: 0;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view.mui-table-view-chevron\n{\n    margin-right: -65px;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell\n{\n    padding-left: 31px;\n\n    background-position: 31px 100%;\n}\n.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 30px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-table-view.mui-grid-view\n{\n    font-size: 0;\n\n    display: block;\n\n    width: 100%;\n    padding: 0 10px 10px 0;\n\n    white-space: normal;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell\n{\n    font-size: 17px;\n\n    display: inline-block;\n\n    margin-right: -4px;\n    padding: 10px 0 0 14px;\n\n    text-align: center;\n    vertical-align: middle;\n\n    background: none;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-object\n{\n    width: 100%;\n    max-width: 100%;\n    height: auto;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin: -10px 0 0 -14px;\n}\n.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\n{\n    background: none;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-body\n{\n    font-size: 15px;\n    line-height: 15px;\n\n    display: block;\n\n    width: 100%;\n    height: 15px;\n    margin-top: 8px;\n\n    text-overflow: ellipsis;\n\n    color: #333;\n}\n.mui-table-view.mui-grid-view .mui-table-view-cell:before, .mui-table-view.mui-grid-view .mui-table-view-cell:after\n{\n    height: 0;\n}\n\n.mui-grid-view.mui-grid-9\n{\n    margin: 0;\n    padding: 0;\n\n    border-top: 1px solid #eee;\n    border-left: 1px solid #eee;\n    background-color: #f2f2f2;\n}\n.mui-grid-view.mui-grid-9:before, .mui-grid-view.mui-grid-9:after\n{\n    display: table;\n\n    content: ' ';\n}\n.mui-grid-view.mui-grid-9:after\n{\n    clear: both;\n}\n.mui-grid-view.mui-grid-9:after\n{\n    position: static;\n}\n.mui-grid-view.mui-grid-9 .mui-table-view-cell\n{\n    margin: 0;\n    padding: 11px 15px;\n\n    vertical-align: top;\n\n    border-right: 1px solid #eee;\n    border-bottom: 1px solid #eee;\n}\n.mui-grid-view.mui-grid-9 .mui-table-view-cell.mui-active\n{\n    background-color: #eee;\n}\n.mui-grid-view.mui-grid-9 .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin: 0;\n    padding: 10px 0;\n}\n.mui-grid-view.mui-grid-9:before\n{\n    height: 0;\n}\n.mui-grid-view.mui-grid-9 .mui-media\n{\n    color: #797979;\n}\n.mui-grid-view.mui-grid-9 .mui-media .mui-icon\n{\n    font-size: 2.4em;\n\n    position: relative;\n}\n\n.mui-slider-cell\n{\n    position: relative;\n}\n.mui-slider-cell > .mui-slider-handle\n{\n    z-index: 1;\n}\n.mui-slider-cell > .mui-slider-left, .mui-slider-cell > .mui-slider-right\n{\n    position: absolute;\n    z-index: 0;\n    top: 0;\n    bottom: 0;\n}\n.mui-slider-cell > .mui-slider-left\n{\n    left: 0;\n}\n.mui-slider-cell > .mui-slider-right\n{\n    right: 0;\n}\n\ninput,\ntextarea,\nselect\n{\n    font-family: 'Helvetica Neue', Helvetica, sans-serif;\n    font-size: 17px;\n\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent;\n}\ninput:focus,\ntextarea:focus,\nselect:focus\n{\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-user-modify: read-write-plaintext-only;\n}\n\nselect,\ntextarea,\ninput[type='text'],\ninput[type='search'],\ninput[type='password'],\ninput[type='datetime'],\ninput[type='datetime-local'],\ninput[type='date'],\ninput[type='month'],\ninput[type='time'],\ninput[type='week'],\ninput[type='number'],\ninput[type='email'],\ninput[type='url'],\ninput[type='tel'],\ninput[type='color']\n{\n    line-height: 21px;\n\n    width: 100%;\n    height: 40px;\n    margin-bottom: 15px;\n    padding: 10px 15px;\n\n    -webkit-user-select: text;\n\n    border: 1px solid rgba(0, 0, 0, .2);\n    border-radius: 3px;\n    outline: none;\n    background-color: #fff;\n\n    -webkit-appearance: none;\n}\n\ninput[type=number]::-webkit-inner-spin-button,\ninput[type=number]::-webkit-outer-spin-button\n{\n    margin: 0;\n\n    -webkit-appearance: none;\n}\n\ninput[type='search']\n{\n    font-size: 16px;\n\n    -webkit-box-sizing: border-box;\n            box-sizing: border-box;\n    height: 34px;\n\n    text-align: center;\n\n    border: 0;\n    border-radius: 6px;\n    background-color: rgba(0, 0, 0, .1);\n}\n\ninput[type='search']:focus\n{\n    text-align: left;\n}\n\ntextarea\n{\n    height: auto;\n\n    resize: none;\n}\n\nselect\n{\n    font-size: 14px;\n\n    height: auto;\n    margin-top: 1px;\n\n    border: 0 !important;\n    background-color: #fff;\n}\nselect:focus\n{\n    -webkit-user-modify: read-only;\n}\n\n.mui-input-group\n{\n    position: relative;\n\n    padding: 0;\n\n    border: 0;\n    background-color: #fff;\n}\n.mui-input-group:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-input-group:before\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-input-group input,\n.mui-input-group textarea\n{\n    margin-bottom: 0;\n\n    border: 0;\n    border-radius: 0;\n    background-color: transparent;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-input-group input[type='search']\n{\n    background: none;\n}\n\n.mui-input-group input:last-child\n{\n    background-image: none;\n}\n\n.mui-input-row\n{\n    clear: left;\n    overflow: hidden;\n}\n.mui-input-row select\n{\n    font-size: 17px;\n\n    height: 37px;\n    padding: 0;\n}\n\n.mui-input-row:last-child,\n.mui-input-row label + input, .mui-input-row .mui-btn + input\n{\n    background: none;\n}\n\n.mui-input-group .mui-input-row\n{\n    height: 40px;\n}\n.mui-input-group .mui-input-row:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 15px;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n\n.mui-input-row label\n{\n    font-family: 'Helvetica Neue', Helvetica, sans-serif;\n    line-height: 1.1;\n\n    float: left;\n\n    width: 35%;\n    padding: 11px 15px;\n}\n\n.mui-input-row label ~ input, .mui-input-row label ~ select, .mui-input-row label ~ textarea\n{\n    float: right;\n\n    width: 65%;\n    margin-bottom: 0;\n    padding-left: 0;\n\n    border: 0;\n}\n\n.mui-input-row .mui-btn\n{\n    line-height: 1.1;\n\n    float: right;\n\n    width: 15%;\n    padding: 10px 15px;\n}\n\n.mui-input-row .mui-btn ~ input, .mui-input-row .mui-btn ~ select, .mui-input-row .mui-btn ~ textarea\n{\n    float: left;\n\n    width: 85%;\n    margin-bottom: 0;\n    padding-left: 0;\n\n    border: 0;\n}\n\n.mui-button-row\n{\n    position: relative;\n\n    padding-top: 5px;\n\n    text-align: center;\n}\n\n.mui-input-group .mui-button-row\n{\n    height: 45px;\n}\n\n.mui-input-row\n{\n    position: relative;\n}\n.mui-input-row.mui-input-range\n{\n    overflow: visible;\n\n    padding-right: 20px;\n}\n.mui-input-row .mui-inline\n{\n    padding: 8px 0;\n}\n.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\n{\n    font-size: 20px;\n\n    position: absolute;\n    z-index: 1;\n    top: 10px;\n    right: 0;\n\n    width: 38px;\n    height: 38px;\n\n    text-align: center;\n\n    color: #999;\n}\n.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\n{\n    color: #007aff;\n}\n.mui-input-row .mui-input-speech ~ .mui-icon-speech\n{\n    font-size: 24px;\n\n    top: 8px;\n}\n.mui-input-row .mui-input-clear ~ .mui-icon-clear ~ .mui-icon-speech\n{\n    display: none;\n}\n.mui-input-row .mui-input-clear ~ .mui-icon-clear.mui-hidden ~ .mui-icon-speech\n{\n    display: inline-block;\n}\n.mui-input-row .mui-icon-speech ~ .mui-placeholder\n{\n    right: 38px;\n}\n.mui-input-row.mui-search .mui-icon-clear\n{\n    top: 7px;\n}\n.mui-input-row.mui-search .mui-icon-speech\n{\n    top: 5px;\n}\n\n.mui-radio, .mui-checkbox\n{\n    position: relative;\n}\n.mui-radio label, .mui-checkbox label\n{\n    display: inline-block;\n    float: none;\n\n    width: 100%;\n    padding-right: 58px;\n}\n\n.mui-radio.mui-left input[type='radio'], .mui-checkbox.mui-left input[type='checkbox']\n{\n    left: 20px;\n}\n\n.mui-radio.mui-left label, .mui-checkbox.mui-left label\n{\n    padding-right: 15px;\n    padding-left: 58px;\n}\n\n.mui-radio input[type='radio'], .mui-checkbox input[type='checkbox']\n{\n    position: absolute;\n    top: 4px;\n    right: 20px;\n\n    display: inline-block;\n\n    width: 28px;\n    height: 26px;\n\n    border: 0;\n    outline: 0 !important;\n    background-color: transparent;\n\n    -webkit-appearance: none;\n}\n.mui-radio input[type='radio'][disabled]:before, .mui-checkbox input[type='checkbox'][disabled]:before\n{\n    opacity: .3;\n}\n.mui-radio input[type='radio']:before, .mui-checkbox input[type='checkbox']:before\n{\n    font-family: Muiicons;\n    font-size: 28px;\n    font-weight: normal;\n    line-height: 1;\n\n    text-decoration: none;\n\n    color: #aaa;\n    border-radius: 0;\n    background: none;\n\n    -webkit-font-smoothing: antialiased;\n}\n.mui-radio input[type='radio']:checked:before, .mui-checkbox input[type='checkbox']:checked:before\n{\n    color: #007aff;\n}\n\n.mui-radio.mui-disabled label, .mui-radio label.mui-disabled, .mui-checkbox.mui-disabled label, .mui-checkbox label.mui-disabled\n{\n    opacity: .4;\n}\n\n.mui-radio input[type='radio']:before\n{\n    content: '\\e411';\n}\n\n.mui-radio input[type='radio']:checked:before\n{\n    content: '\\e441';\n}\n\n.mui-checkbox input[type='checkbox']:before\n{\n    content: '\\e411';\n}\n\n.mui-checkbox input[type='checkbox']:checked:before\n{\n    content: '\\e442';\n}\n\n.mui-select\n{\n    position: relative;\n}\n\n.mui-select:before\n{\n    font-family: Muiicons;\n\n    position: absolute;\n    top: 8px;\n    right: 21px;\n\n    content: '\\e581';\n\n    color: rgba(170, 170, 170, .6);\n}\n\n.mui-input-row .mui-switch\n{\n    float: right;\n\n    margin-top: 5px;\n    margin-right: 20px;\n}\n\n.mui-input-range\n{\n  /*input[type=\"range\"] {\n      -webkit-appearance: none;\n      background: #999;\n      height: 36px;\n      border-radius: 1px;\n      overflow: hidden;\n      margin-top: 2px;\n      margin-bottom: 2px;\n      outline:none;\n      position:relative;\n      width:100%;\n  }*/\n  /*input[type='range']::-webkit-slider-thumb {\n      -webkit-appearance: none!important;\n      opacity: 0.5;\n      height:28px;\n      width:28px;\n      border-radius: 50%;\n      background:#00b7fb;\n      position: relative;\n      pointer-events: none;\n      -webkit-box-sizing: border-box;\n      box-sizing: border-box;\n      &:before{\n          position: absolute;\n          top: 13px;\n          left: -2000px;\n          width: 2000px;\n          height: 2px;\n          background: #00b7fb;\n          content:' ';\n      }\n  }*/\n}\n.mui-input-range input[type='range']\n{\n    position: relative;\n\n    width: 100%;\n    height: 2px;\n    margin: 17px 0;\n    padding: 0;\n\n    cursor: pointer;\n\n    border: 0;\n    border-radius: 3px;\n    outline: none;\n    background-color: #999;\n\n    -webkit-appearance: none !important;\n}\n.mui-input-range input[type='range']::-webkit-slider-thumb\n{\n    width: 28px;\n    height: 28px;\n\n    border-color: #0062cc;\n    border-radius: 50%;\n    background-color: #007aff;\n    background-clip: padding-box;\n\n    -webkit-appearance: none !important;\n}\n.mui-input-range label ~ input[type='range']\n{\n    width: 65%;\n}\n.mui-input-range .mui-tooltip\n{\n    font-size: 36px;\n    line-height: 64px;\n\n    position: absolute;\n    z-index: 1;\n    top: -70px;\n\n    width: 64px;\n    height: 64px;\n\n    text-align: center;\n\n    opacity: .8;\n    color: #333;\n    border: 1px solid #ddd;\n    border-radius: 6px;\n    background-color: #fff;\n    text-shadow: 0 1px 0 #f3f3f3;\n}\n\n.mui-search\n{\n    position: relative;\n}\n.mui-search input[type='search']\n{\n    padding-left: 30px;\n}\n.mui-search .mui-placeholder\n{\n    font-size: 16px;\n    line-height: 34px;\n\n    position: absolute;\n    z-index: 1;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    display: inline-block;\n\n    height: 34px;\n\n    text-align: center;\n\n    color: #999;\n    border: 0;\n    border-radius: 6px;\n    background: none;\n}\n.mui-search .mui-placeholder .mui-icon\n{\n    font-size: 20px;\n\n    color: #333;\n}\n.mui-search:before\n{\n    font-family: Muiicons;\n    font-size: 20px;\n    font-weight: normal;\n\n    position: absolute;\n    top: 50%;\n    right: 50%;\n\n    display: none;\n\n    margin-top: -18px;\n    margin-right: 31px;\n\n    content: '\\e466';\n}\n.mui-search.mui-active:before\n{\n    font-size: 20px;\n\n    right: auto;\n    left: 5px;\n\n    display: block;\n\n    margin-right: 0;\n}\n.mui-search.mui-active input[type='search']\n{\n    text-align: left;\n}\n.mui-search.mui-active .mui-placeholder\n{\n    display: none;\n}\n\n.mui-segmented-control\n{\n    font-size: 15px;\n    font-weight: 400;\n\n    position: relative;\n\n    display: table;\n    overflow: hidden;\n\n    width: 100%;\n\n    table-layout: fixed;\n\n    border: 1px solid #007aff;\n    border-radius: 3px;\n    background-color: transparent;\n\n    -webkit-touch-callout: none;\n}\n.mui-segmented-control.mui-segmented-control-vertical\n{\n    border-collapse: collapse;\n\n    border-width: 0;\n    border-radius: 0;\n}\n.mui-segmented-control.mui-segmented-control-vertical .mui-control-item\n{\n    display: block;\n\n    border-bottom: 1px solid #c8c7cc;\n    border-left-width: 0;\n}\n.mui-segmented-control.mui-scroll-wrapper\n{\n    height: 38px;\n}\n.mui-segmented-control.mui-scroll-wrapper .mui-scroll\n{\n    width: auto;\n    height: 40px;\n\n    white-space: nowrap;\n}\n.mui-segmented-control.mui-scroll-wrapper .mui-control-item\n{\n    display: inline-block;\n\n    width: auto;\n    padding: 0 20px;\n\n    border: 0;\n}\n.mui-segmented-control .mui-control-item\n{\n    line-height: 38px;\n\n    display: table-cell;\n    overflow: hidden;\n\n    width: 1%;\n\n    -webkit-transition: background-color .1s linear;\n            transition: background-color .1s linear;\n    text-align: center;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    color: #007aff;\n    border-color: #007aff;\n    border-left: 1px solid #007aff;\n}\n.mui-segmented-control .mui-control-item:first-child\n{\n    border-left-width: 0;\n}\n.mui-segmented-control .mui-control-item.mui-active\n{\n    color: #fff;\n    background-color: #007aff;\n}\n.mui-segmented-control.mui-segmented-control-inverted\n{\n    width: 100%;\n\n    border: 0;\n    border-radius: 0;\n}\n.mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item\n{\n    border-bottom: 1px solid #c8c7cc;\n}\n.mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item.mui-active\n{\n    border-bottom: 1px solid #c8c7cc;\n}\n.mui-segmented-control.mui-segmented-control-inverted .mui-control-item\n{\n    color: inherit;\n    border: 0;\n}\n.mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active\n{\n    color: #007aff;\n    border-bottom: 2px solid #007aff;\n    background: none;\n}\n.mui-segmented-control.mui-segmented-control-inverted ~ .mui-slider-progress-bar\n{\n    background-color: #007aff;\n}\n\n.mui-segmented-control-positive\n{\n    border: 1px solid #4cd964;\n}\n.mui-segmented-control-positive .mui-control-item\n{\n    color: #4cd964;\n    border-color: inherit;\n}\n.mui-segmented-control-positive .mui-control-item.mui-active\n{\n    color: #fff;\n    background-color: #4cd964;\n}\n.mui-segmented-control-positive.mui-segmented-control-inverted .mui-control-item.mui-active\n{\n    color: #4cd964;\n    border-bottom: 2px solid #4cd964;\n    background: none;\n}\n.mui-segmented-control-positive.mui-segmented-control-inverted ~ .mui-slider-progress-bar\n{\n    background-color: #4cd964;\n}\n\n.mui-segmented-control-negative\n{\n    border: 1px solid #dd524d;\n}\n.mui-segmented-control-negative .mui-control-item\n{\n    color: #dd524d;\n    border-color: inherit;\n}\n.mui-segmented-control-negative .mui-control-item.mui-active\n{\n    color: #fff;\n    background-color: #dd524d;\n}\n.mui-segmented-control-negative.mui-segmented-control-inverted .mui-control-item.mui-active\n{\n    color: #dd524d;\n    border-bottom: 2px solid #dd524d;\n    background: none;\n}\n.mui-segmented-control-negative.mui-segmented-control-inverted ~ .mui-slider-progress-bar\n{\n    background-color: #dd524d;\n}\n\n.mui-control-content\n{\n    position: relative;\n\n    display: none;\n}\n.mui-control-content.mui-active\n{\n    display: block;\n}\n\n.mui-popover\n{\n    position: absolute;\n    z-index: 999;\n\n    display: none;\n\n    width: 280px;\n\n    -webkit-transition: opacity .3s;\n            transition: opacity .3s;\n    -webkit-transition-property: opacity;\n            transition-property: opacity;\n    -webkit-transform: none;\n            transform: none;\n\n    opacity: 0;\n    border-radius: 7px;\n    background-color: #f7f7f7;\n    -webkit-box-shadow: 0 0 15px rgba(0, 0, 0, .1);\n            box-shadow: 0 0 15px rgba(0, 0, 0, .1);\n}\n.mui-popover .mui-popover-arrow\n{\n    position: absolute;\n    z-index: 1000;\n    top: -25px;\n    left: 0;\n\n    overflow: hidden;\n\n    width: 26px;\n    height: 26px;\n}\n.mui-popover .mui-popover-arrow:after\n{\n    position: absolute;\n    top: 19px;\n    left: 0;\n\n    width: 26px;\n    height: 26px;\n\n    content: ' ';\n    -webkit-transform: rotate(45deg);\n            transform: rotate(45deg);\n\n    border-radius: 3px;\n    background: #f7f7f7;\n}\n.mui-popover .mui-popover-arrow.mui-bottom\n{\n    top: 100%;\n    left: -26px;\n\n    margin-top: -1px;\n}\n.mui-popover .mui-popover-arrow.mui-bottom:after\n{\n    top: -19px;\n    left: 0;\n}\n.mui-popover.mui-popover-action\n{\n    bottom: 0;\n\n    width: 100%;\n\n    -webkit-transition: -webkit-transform .3s, opacity .3s;\n            transition:         transform .3s, opacity .3s;\n    -webkit-transform: translate3d(0, 100%, 0);\n            transform: translate3d(0, 100%, 0);\n\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n.mui-popover.mui-popover-action .mui-popover-arrow\n{\n    display: none;\n}\n.mui-popover.mui-popover-action.mui-popover-bottom\n{\n    position: fixed;\n}\n.mui-popover.mui-popover-action.mui-active\n{\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n}\n.mui-popover.mui-popover-action .mui-table-view\n{\n    margin: 8px;\n\n    text-align: center;\n\n    color: #007aff;\n    border-radius: 4px;\n}\n.mui-popover.mui-popover-action .mui-table-view .mui-table-view-cell:after\n{\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n\n    background-color: #c8c7cc;\n}\n.mui-popover.mui-popover-action .mui-table-view small\n{\n    font-weight: 400;\n    line-height: 1.3;\n\n    display: block;\n}\n.mui-popover.mui-active\n{\n    display: block;\n\n    opacity: 1;\n}\n.mui-popover .mui-bar ~ .mui-table-view\n{\n    padding-top: 44px;\n}\n\n.mui-backdrop\n{\n    position: fixed;\n    z-index: 998;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    background-color: rgba(0, 0, 0, .3);\n}\n\n.mui-bar-backdrop.mui-backdrop\n{\n    bottom: 50px;\n\n    background: none;\n}\n\n.mui-backdrop-action.mui-backdrop\n{\n    background-color: rgba(0, 0, 0, .3);\n}\n\n.mui-bar-backdrop.mui-backdrop, .mui-backdrop-action.mui-backdrop\n{\n    opacity: 0;\n}\n.mui-bar-backdrop.mui-backdrop.mui-active, .mui-backdrop-action.mui-backdrop.mui-active\n{\n    -webkit-transition: all .4s ease;\n            transition: all .4s ease;\n\n    opacity: 1;\n}\n\n.mui-popover .mui-btn-block\n{\n    margin-bottom: 5px;\n}\n.mui-popover .mui-btn-block:last-child\n{\n    margin-bottom: 0;\n}\n\n.mui-popover .mui-bar\n{\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-popover .mui-bar-nav\n{\n    border-bottom: 1px solid rgba(0, 0, 0, .15);\n    border-top-left-radius: 12px;\n    border-top-right-radius: 12px;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n}\n\n.mui-popover .mui-scroll-wrapper\n{\n    margin: 7px 0;\n\n    border-radius: 7px;\n    background-clip: padding-box;\n}\n\n.mui-popover .mui-scroll .mui-table-view\n{\n    max-height: none;\n}\n\n.mui-popover .mui-table-view\n{\n    overflow: auto;\n\n    max-height: 300px;\n    margin-bottom: 0;\n\n    border-radius: 7px;\n    background-color: #f7f7f7;\n    background-image: none;\n\n    -webkit-overflow-scrolling: touch;\n}\n.mui-popover .mui-table-view:before, .mui-popover .mui-table-view:after\n{\n    height: 0;\n}\n.mui-popover .mui-table-view .mui-table-view-cell:first-child,\n.mui-popover .mui-table-view .mui-table-view-cell:first-child > a:not(.mui-btn)\n{\n    border-top-left-radius: 12px;\n    border-top-right-radius: 12px;\n}\n.mui-popover .mui-table-view .mui-table-view-cell:last-child,\n.mui-popover .mui-table-view .mui-table-view-cell:last-child > a:not(.mui-btn)\n{\n    border-bottom-right-radius: 12px;\n    border-bottom-left-radius: 12px;\n}\n\n.mui-popover.mui-bar-popover .mui-table-view\n{\n    width: 106px;\n}\n.mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell\n{\n    padding: 11px 15px 11px 15px;\n\n    background-position: 0 100%;\n}\n.mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell > a:not(.mui-btn)\n{\n    margin: -11px -15px -11px -15px;\n}\n\n.mui-popup-backdrop\n{\n    position: fixed;\n    z-index: 998;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n\n    -webkit-transition-duration: 400ms;\n            transition-duration: 400ms;\n\n    opacity: 0;\n    background: rgba(0, 0, 0, .4);\n}\n.mui-popup-backdrop.mui-active\n{\n    opacity: 1;\n}\n\n.mui-popup\n{\n    position: fixed;\n    z-index: 10000;\n    top: 50%;\n    left: 50%;\n\n    display: none;\n    overflow: hidden;\n\n    width: 270px;\n\n    -webkit-transition-property: -webkit-transform,opacity;\n            transition-property:         transform,opacity;\n    -webkit-transform: translate3d(-50%, -50%, 0) scale(1.185);\n            transform: translate3d(-50%, -50%, 0) scale(1.185);\n    text-align: center;\n\n    opacity: 0;\n    color: #000;\n    border-radius: 13px;\n}\n.mui-popup.mui-popup-in\n{\n    display: block;\n\n    -webkit-transition-duration: 400ms;\n            transition-duration: 400ms;\n    -webkit-transform: translate3d(-50%, -50%, 0) scale(1);\n            transform: translate3d(-50%, -50%, 0) scale(1);\n\n    opacity: 1;\n}\n.mui-popup.mui-popup-out\n{\n    -webkit-transition-duration: 400ms;\n            transition-duration: 400ms;\n    -webkit-transform: translate3d(-50%, -50%, 0) scale(1);\n            transform: translate3d(-50%, -50%, 0) scale(1);\n\n    opacity: 0;\n}\n\n.mui-popup-inner\n{\n    position: relative;\n\n    padding: 15px;\n\n    border-radius: 13px 13px 0 0;\n    background: rgba(255, 255, 255, .95);\n}\n.mui-popup-inner:after\n{\n    position: absolute;\n    z-index: 15;\n    top: auto;\n    right: auto;\n    bottom: 0;\n    left: 0;\n\n    display: block;\n\n    width: 100%;\n    height: 1px;\n\n    content: '';\n    -webkit-transform: scaleY(.5);\n            transform: scaleY(.5);\n    -webkit-transform-origin: 50% 100%;\n            transform-origin: 50% 100%;\n\n    background-color: rgba(0, 0, 0, .2);\n}\n\n.mui-popup-title\n{\n    font-size: 18px;\n    font-weight: 500;\n\n    text-align: center;\n}\n\n.mui-popup-title + .mui-popup-text\n{\n    font-family: inherit;\n    font-size: 14px;\n\n    margin: 5px 0 0;\n}\n\n.mui-popup-buttons\n{\n    position: relative;\n\n    display: -webkit-box;\n    display: -webkit-flex;\n    display:         flex;\n\n    height: 44px;\n\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n            justify-content: center;\n}\n\n.mui-popup-button\n{\n    font-size: 17px;\n    line-height: 44px;\n\n    position: relative;\n\n    display: block;\n    overflow: hidden;\n\n    box-sizing: border-box;\n    width: 100%;\n    height: 44px;\n    padding: 0 5px;\n\n    cursor: pointer;\n    text-align: center;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    color: #007aff;\n    background: rgba(255, 255, 255, .95);\n\n    -webkit-box-flex: 1;\n}\n.mui-popup-button:after\n{\n    position: absolute;\n    z-index: 15;\n    top: 0;\n    right: 0;\n    bottom: auto;\n    left: auto;\n\n    display: block;\n\n    width: 1px;\n    height: 100%;\n\n    content: '';\n    -webkit-transform: scaleX(.5);\n            transform: scaleX(.5);\n    -webkit-transform-origin: 100% 50%;\n            transform-origin: 100% 50%;\n\n    background-color: rgba(0, 0, 0, .2);\n}\n.mui-popup-button:first-child\n{\n    border-radius: 0 0 0 13px;\n}\n.mui-popup-button:first-child:last-child\n{\n    border-radius: 0 0 13px 13px;\n}\n.mui-popup-button:last-child\n{\n    border-radius: 0 0 13px 0;\n}\n.mui-popup-button:last-child:after\n{\n    display: none;\n}\n.mui-popup-button.mui-popup-button-bold\n{\n    font-weight: 600;\n}\n\n.mui-popup-input input\n{\n    font-size: 14px;\n\n    width: 100%;\n    height: 26px;\n    margin: 15px 0 0;\n    padding: 0 5px;\n\n    border: 1px solid rgba(0, 0, 0, .3);\n    border-radius: 0;\n    background: #fff;\n}\n\n.mui-plus.mui-android .mui-popup-backdrop\n{\n    -webkit-transition-duration: 1ms;\n            transition-duration: 1ms;\n}\n\n.mui-plus.mui-android .mui-popup\n{\n    -webkit-transition-duration: 1ms;\n            transition-duration: 1ms;\n    -webkit-transform: translate3d(-50%, -50%, 0) scale(1);\n            transform: translate3d(-50%, -50%, 0) scale(1);\n}\n\n/* === Progress Bar === */\n.mui-progressbar\n{\n    position: relative;\n\n    display: block;\n    overflow: hidden;\n\n    width: 100%;\n    height: 2px;\n\n    -webkit-transform-origin: center top;\n            transform-origin: center top;\n    vertical-align: middle;\n\n    border-radius: 2px;\n    background: #b6b6b6;\n\n    -webkit-transform-style: preserve-3d;\n            transform-style: preserve-3d;\n}\n.mui-progressbar span\n{\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    width: 100%;\n    height: 100%;\n\n    -webkit-transition: 150ms;\n            transition: 150ms;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n\n    background: #007aff;\n}\n.mui-progressbar.mui-progressbar-infinite:before\n{\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    width: 100%;\n    height: 100%;\n\n    content: '';\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n    -webkit-transform-origin: left center;\n            transform-origin: left center;\n    -webkit-animation: mui-progressbar-infinite 1s linear infinite;\n            animation: mui-progressbar-infinite 1s linear infinite;\n\n    background: #007aff;\n}\n\nbody > .mui-progressbar\n{\n    position: absolute;\n    z-index: 10000;\n    top: 44px;\n    left: 0;\n\n    border-radius: 0;\n}\n\n.mui-progressbar-in\n{\n    -webkit-animation: mui-progressbar-in 300ms forwards;\n            animation: mui-progressbar-in 300ms forwards;\n}\n\n.mui-progressbar-out\n{\n    -webkit-animation: mui-progressbar-out 300ms forwards;\n            animation: mui-progressbar-out 300ms forwards;\n}\n\n@-webkit-keyframes mui-progressbar-in\n{\n    from\n    {\n        -webkit-transform: scaleY(0);\n\n        opacity: 0;\n    }\n\n    to\n    {\n        -webkit-transform: scaleY(1);\n\n        opacity: 1;\n    }\n}\n@keyframes mui-progressbar-in\n{\n    from\n    {\n        transform: scaleY(0);\n\n        opacity: 0;\n    }\n\n    to\n    {\n        transform: scaleY(1);\n\n        opacity: 1;\n    }\n}\n@-webkit-keyframes mui-progressbar-out\n{\n    from\n    {\n        -webkit-transform: scaleY(1);\n\n        opacity: 1;\n    }\n\n    to\n    {\n        -webkit-transform: scaleY(0);\n\n        opacity: 0;\n    }\n}\n@keyframes mui-progressbar-out\n{\n    from\n    {\n        transform: scaleY(1);\n\n        opacity: 1;\n    }\n\n    to\n    {\n        transform: scaleY(0);\n\n        opacity: 0;\n    }\n}\n@-webkit-keyframes mui-progressbar-infinite\n{\n    0%\n    {\n        -webkit-transform: translate3d(-50%, 0, 0) scaleX(.5);\n    }\n\n    100%\n    {\n        -webkit-transform: translate3d(100%, 0, 0) scaleX(.5);\n    }\n}\n@keyframes mui-progressbar-infinite\n{\n    0%\n    {\n        transform: translate3d(-50%, 0, 0) scaleX(.5);\n    }\n\n    100%\n    {\n        transform: translate3d(100%, 0, 0) scaleX(.5);\n    }\n}\n.mui-pagination\n{\n    display: inline-block;\n\n    margin: 0 auto;\n    padding-left: 0;\n\n    border-radius: 6px;\n}\n.mui-pagination > li\n{\n    display: inline;\n}\n.mui-pagination > li > a,\n.mui-pagination > li > span\n{\n    line-height: 1.428571429;\n\n    position: relative;\n\n    float: left;\n\n    margin-left: -1px;\n    padding: 6px 12px;\n\n    text-decoration: none;\n\n    color: #007aff;\n    border: 1px solid #ddd;\n    background-color: #fff;\n}\n.mui-pagination > li:first-child > a,\n.mui-pagination > li:first-child > span\n{\n    margin-left: 0;\n\n    border-top-left-radius: 6px;\n    border-bottom-left-radius: 6px;\n    background-clip: padding-box;\n}\n.mui-pagination > li:last-child > a,\n.mui-pagination > li:last-child > span\n{\n    border-top-right-radius: 6px;\n    border-bottom-right-radius: 6px;\n    background-clip: padding-box;\n}\n.mui-pagination > li:active > a, .mui-pagination > li:active > a:active,\n.mui-pagination > li:active > span,\n.mui-pagination > li:active > span:active,\n.mui-pagination > li.mui-active > a,\n.mui-pagination > li.mui-active > a:active,\n.mui-pagination > li.mui-active > span,\n.mui-pagination > li.mui-active > span:active\n{\n    z-index: 2;\n\n    cursor: default;\n\n    color: #fff;\n    border-color: #007aff;\n    background-color: #007aff;\n}\n.mui-pagination > li.mui-disabled > span,\n.mui-pagination > li.mui-disabled > span:active,\n.mui-pagination > li.mui-disabled > a,\n.mui-pagination > li.mui-disabled > a:active\n{\n    opacity: .6;\n    color: #777;\n    border: 1px solid #ddd;\n    background-color: #fff;\n}\n\n.mui-pagination-lg > li > a,\n.mui-pagination-lg > li > span\n{\n    font-size: 18px;\n\n    padding: 10px 16px;\n}\n\n.mui-pagination-sm > li > a,\n.mui-pagination-sm > li > span\n{\n    font-size: 12px;\n\n    padding: 5px 10px;\n}\n\n.mui-pager\n{\n    padding-left: 0;\n\n    list-style: none;\n\n    text-align: center;\n}\n.mui-pager:before, .mui-pager:after\n{\n    display: table;\n\n    content: ' ';\n}\n.mui-pager:after\n{\n    clear: both;\n}\n.mui-pager li\n{\n    display: inline;\n}\n.mui-pager li > a,\n.mui-pager li > span\n{\n    display: inline-block;\n\n    padding: 5px 14px;\n\n    border: 1px solid #ddd;\n    border-radius: 6px;\n    background-color: #fff;\n    background-clip: padding-box;\n}\n.mui-pager li:active > a, .mui-pager li:active > span, .mui-pager li.mui-active > a, .mui-pager li.mui-active > span\n{\n    cursor: default;\n    text-decoration: none;\n\n    color: #fff;\n    border-color: #007aff;\n    background-color: #007aff;\n}\n.mui-pager .mui-next > a,\n.mui-pager .mui-next > span\n{\n    float: right;\n}\n.mui-pager .mui-previous > a,\n.mui-pager .mui-previous > span\n{\n    float: left;\n}\n.mui-pager .mui-disabled > a,\n.mui-pager .mui-disabled > a:active,\n.mui-pager .mui-disabled > span,\n.mui-pager .mui-disabled > span:active\n{\n    opacity: .6;\n    color: #777;\n    border: 1px solid #ddd;\n    background-color: #fff;\n}\n\n.mui-modal\n{\n    position: fixed;\n    z-index: 999;\n    top: 0;\n\n    overflow: hidden;\n\n    width: 100%;\n    min-height: 100%;\n\n    -webkit-transition: -webkit-transform .25s, opacity 1ms .25s;\n            transition:         transform .25s, opacity 1ms .25s;\n    -webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1);\n            transition-timing-function: cubic-bezier(.1, .5, .1, 1);\n    -webkit-transform: translate3d(0, 100%, 0);\n            transform: translate3d(0, 100%, 0);\n\n    opacity: 0;\n    background-color: #fff;\n}\n.mui-modal.mui-active\n{\n    height: 100%;\n\n    -webkit-transition: -webkit-transform .25s;\n            transition:         transform .25s;\n    -webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1);\n            transition-timing-function: cubic-bezier(.1, .5, .1, 1);\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n\n    opacity: 1;\n}\n\n.mui-android .mui-modal .mui-bar\n{\n    position: static;\n}\n\n.mui-android .mui-modal .mui-bar-nav ~ .mui-content\n{\n    padding-top: 0;\n}\n\n.mui-slider\n{\n    position: relative;\n    z-index: 1;\n\n    overflow: hidden;\n\n    width: 100%;\n}\n.mui-slider .mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active\n{\n    border-bottom: 0;\n}\n.mui-slider .mui-segmented-control.mui-segmented-control-inverted ~ .mui-slider-group .mui-slider-item\n{\n    border-top: 1px solid #c8c7cc;\n    border-bottom: 1px solid #c8c7cc;\n}\n.mui-slider .mui-slider-group\n{\n    font-size: 0;\n\n    position: relative;\n\n    -webkit-transition: all 0s linear;\n            transition: all 0s linear;\n    white-space: nowrap;\n}\n.mui-slider .mui-slider-group .mui-slider-item\n{\n    font-size: 14px;\n\n    position: relative;\n\n    display: inline-block;\n\n    width: 100%;\n    height: 100%;\n\n    vertical-align: top;\n    white-space: normal;\n}\n.mui-slider .mui-slider-group .mui-slider-item > a:not(.mui-control-item)\n{\n    line-height: 0;\n\n    position: relative;\n\n    display: block;\n}\n.mui-slider .mui-slider-group .mui-slider-item img\n{\n    width: 100%;\n}\n.mui-slider .mui-slider-group .mui-slider-item .mui-table-view:before, .mui-slider .mui-slider-group .mui-slider-item .mui-table-view:after\n{\n    height: 0;\n}\n.mui-slider .mui-slider-group.mui-slider-loop\n{\n    -webkit-transform: translate(-100%, 0px);\n            transform: translate(-100%, 0px);\n}\n\n.mui-slider-title\n{\n    line-height: 30px;\n\n    position: absolute;\n    bottom: 0;\n    left: 0;\n\n    width: 100%;\n    height: 30px;\n    margin: 0;\n\n    text-align: left;\n    text-indent: 12px;\n\n    opacity: .8;\n    background-color: #000;\n}\n\n.mui-slider-indicator\n{\n    position: absolute;\n    bottom: 8px;\n\n    width: 100%;\n\n    text-align: center;\n\n    background: none;\n}\n.mui-slider-indicator.mui-segmented-control\n{\n    position: relative;\n    bottom: auto;\n}\n.mui-slider-indicator .mui-indicator\n{\n    display: inline-block;\n\n    width: 6px;\n    height: 6px;\n    margin: 1px 6px;\n\n    cursor: pointer;\n\n    border-radius: 50%;\n    background: #aaa;\n    -webkit-box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7);\n            box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7);\n}\n.mui-slider-indicator .mui-active.mui-indicator\n{\n    background: #fff;\n}\n.mui-slider-indicator .mui-icon\n{\n    font-size: 20px;\n    line-height: 30px;\n\n    width: 40px;\n    height: 30px;\n    margin: 3px;\n\n    text-align: center;\n\n    border: 1px solid #ddd;\n}\n.mui-slider-indicator .mui-number\n{\n    line-height: 32px;\n\n    display: inline-block;\n\n    width: 58px;\n}\n.mui-slider-indicator .mui-number span\n{\n    color: #ff5053;\n}\n\n.mui-slider-progress-bar\n{\n    z-index: 1;\n\n    height: 2px;\n\n    -webkit-transform: translateZ(0);\n            transform: translateZ(0);\n}\n\n.mui-switch\n{\n    position: relative;\n\n    display: block;\n\n    width: 74px;\n    height: 30px;\n\n    -webkit-transition-timing-function: ease-in-out;\n            transition-timing-function: ease-in-out;\n    -webkit-transition-duration: .2s;\n            transition-duration: .2s;\n    -webkit-transition-property: background-color, border;\n            transition-property: background-color, border;\n\n    border: 2px solid #ddd;\n    border-radius: 20px;\n    background-color: #fff;\n    background-clip: padding-box;\n}\n.mui-switch.mui-disabled\n{\n    opacity: .3;\n}\n.mui-switch .mui-switch-handle\n{\n    position: absolute;\n    z-index: 1;\n    top: -1px;\n    left: -1px;\n\n    width: 28px;\n    height: 28px;\n\n    -webkit-transition: .2s ease-in-out;\n            transition: .2s ease-in-out;\n    -webkit-transition-property: -webkit-transform, width,left;\n            transition-property:         transform, width,left;\n\n    border-radius: 16px;\n    background-color: #fff;\n    background-clip: padding-box;\n    -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .4);\n            box-shadow: 0 2px 5px rgba(0, 0, 0, .4);\n}\n.mui-switch:before\n{\n    font-size: 13px;\n\n    position: absolute;\n    top: 3px;\n    right: 11px;\n\n    content: 'Off';\n    text-transform: uppercase;\n\n    color: #999;\n}\n.mui-switch.mui-dragging\n{\n    border-color: #f7f7f7;\n    background-color: #f7f7f7;\n}\n.mui-switch.mui-dragging .mui-switch-handle\n{\n    width: 38px;\n}\n.mui-switch.mui-dragging.mui-active .mui-switch-handle\n{\n    left: -11px;\n\n    width: 38px;\n}\n.mui-switch.mui-active\n{\n    border-color: #4cd964;\n    background-color: #4cd964;\n}\n.mui-switch.mui-active .mui-switch-handle\n{\n    -webkit-transform: translate(43px, 0);\n            transform: translate(43px, 0);\n}\n.mui-switch.mui-active:before\n{\n    right: auto;\n    left: 15px;\n\n    content: 'On';\n\n    color: #fff;\n}\n.mui-switch input[type='checkbox']\n{\n    display: none;\n}\n\n.mui-switch-mini\n{\n    width: 47px;\n}\n.mui-switch-mini:before\n{\n    display: none;\n}\n.mui-switch-mini.mui-active .mui-switch-handle\n{\n    -webkit-transform: translate(16px, 0);\n            transform: translate(16px, 0);\n}\n\n.mui-switch-blue.mui-active\n{\n    border: 2px solid #007aff;\n    background-color: #007aff;\n}\n\n.mui-content.mui-fade\n{\n    left: 0;\n\n    opacity: 0;\n}\n.mui-content.mui-fade.mui-in\n{\n    opacity: 1;\n}\n.mui-content.mui-sliding\n{\n    z-index: 2;\n\n    -webkit-transition: -webkit-transform .4s;\n            transition:         transform .4s;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n}\n.mui-content.mui-sliding.mui-left\n{\n    z-index: 1;\n\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n}\n.mui-content.mui-sliding.mui-right\n{\n    z-index: 3;\n\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n}\n\n.mui-navigate-right:after,\n.mui-push-left:after,\n.mui-push-right:after\n{\n    font-family: Muiicons;\n    font-size: inherit;\n    line-height: 1;\n\n    position: absolute;\n    top: 50%;\n\n    display: inline-block;\n\n    -webkit-transform: translateY(-50%);\n            transform: translateY(-50%);\n    text-decoration: none;\n\n    color: #bbb;\n\n    -webkit-font-smoothing: antialiased;\n}\n\n.mui-push-left:after\n{\n    left: 15px;\n\n    content: '\\e582';\n}\n\n.mui-navigate-right:after,\n.mui-push-right:after\n{\n    right: 15px;\n\n    content: '\\e583';\n}\n\n.mui-pull-top-pocket, .mui-pull-bottom-pocket\n{\n    position: absolute;\n    left: 0;\n\n    display: block;\n    visibility: hidden;\n    overflow: hidden;\n\n    width: 100%;\n    height: 50px;\n}\n\n.mui-plus-pullrefresh .mui-pull-top-pocket, .mui-plus-pullrefresh .mui-pull-bottom-pocket\n{\n    display: none;\n    visibility: visible;\n}\n\n.mui-pull-top-pocket\n{\n    top: 0;\n}\n\n.mui-bar-nav ~ .mui-content .mui-pull-top-pocket\n{\n    top: 44px;\n}\n\n.mui-bar-nav ~ .mui-bar-header-secondary ~ .mui-content .mui-pull-top-pocket\n{\n    top: 88px;\n}\n\n.mui-pull-bottom-pocket\n{\n    position: relative;\n    bottom: 0;\n\n    height: 40px;\n}\n.mui-pull-bottom-pocket .mui-pull-loading\n{\n    visibility: hidden;\n}\n.mui-pull-bottom-pocket .mui-pull-loading.mui-in\n{\n    display: inline-block;\n}\n\n.mui-pull\n{\n    font-weight: bold;\n\n    position: absolute;\n    right: 0;\n    bottom: 10px;\n    left: 0;\n\n    text-align: center;\n\n    color: #777;\n}\n\n.mui-pull-loading\n{\n    margin-right: 10px;\n\n    -webkit-transition: -webkit-transform .4s;\n            transition:         transform .4s;\n    -webkit-transition-duration: 400ms;\n            transition-duration: 400ms;\n    vertical-align: middle;\n}\n\n.mui-pull-loading.mui-reverse\n{\n    -webkit-transform: rotate(180deg) translateZ(0);\n            transform: rotate(180deg) translateZ(0);\n}\n\n.mui-pull-caption\n{\n    font-size: 15px;\n    line-height: 24px;\n\n    position: relative;\n\n    display: inline-block;\n    overflow: visible;\n\n    margin-top: 0;\n\n    vertical-align: middle;\n}\n.mui-pull-caption span\n{\n    display: none;\n}\n.mui-pull-caption span.mui-in\n{\n    display: inline;\n}\n\n.mui-toast-container\n{\n    line-height: 17px;\n\n    position: fixed;\n    z-index: 9999;\n    bottom: 50px;\n    left: 50%;\n\n    -webkit-transition: opacity .3s;\n            transition: opacity .3s;\n    -webkit-transform: translate(-50%, 0);\n            transform: translate(-50%, 0);\n\n    opacity: 0;\n}\n.mui-toast-container.mui-active\n{\n    opacity: .9;\n}\n\n.mui-toast-message\n{\n    font-size: 14px;\n\n    padding: 10px 25px;\n\n    text-align: center;\n\n    color: #fff;\n    border-radius: 6px;\n    background-color: #323232;\n}\n\n.mui-numbox\n{\n    position: relative;\n\n    display: inline-block;\n    overflow: hidden;\n\n    width: 120px;\n    height: 35px;\n    padding: 0 40px 0 40px;\n\n    vertical-align: top;\n    vertical-align: middle;\n\n    border: solid 1px #bbb;\n    border-radius: 3px;\n    background-color: #efeff4;\n}\n.mui-numbox [class*=numbox-btn], .mui-numbox [class*=btn-numbox]\n{\n    font-size: 18px;\n    font-weight: normal;\n    line-height: 100%;\n\n    position: absolute;\n    top: 0;\n\n    overflow: hidden;\n\n    width: 40px;\n    height: 100%;\n    padding: 0;\n\n    color: #555;\n    border: none;\n    border-radius: 0;\n    background-color: #f9f9f9;\n}\n.mui-numbox [class*=numbox-btn]:active, .mui-numbox [class*=btn-numbox]:active\n{\n    background-color: #ccc;\n}\n.mui-numbox [class*=numbox-btn][disabled], .mui-numbox [class*=btn-numbox][disabled]\n{\n    color: #c0c0c0;\n}\n.mui-numbox .mui-numbox-btn-plus, .mui-numbox .mui-btn-numbox-plus\n{\n    right: 0;\n\n    border-top-right-radius: 3px;\n    border-bottom-right-radius: 3px;\n}\n.mui-numbox .mui-numbox-btn-minus, .mui-numbox .mui-btn-numbox-minus\n{\n    left: 0;\n\n    border-top-left-radius: 3px;\n    border-bottom-left-radius: 3px;\n}\n.mui-numbox .mui-numbox-input, .mui-numbox .mui-input-numbox\n{\n    display: inline-block;\n    overflow: hidden;\n\n    width: 100% !important;\n    height: 100%;\n    margin: 0;\n    padding: 0 3px !important;\n\n    text-align: center;\n    text-overflow: ellipsis;\n    word-break: normal;\n\n    border: none !important;\n    border-right: solid 1px #ccc !important;\n    border-left: solid 1px #ccc !important;\n    border-radius: 0 !important;\n}\n\n.mui-input-row .mui-numbox\n{\n    float: right;\n\n    margin: 2px 8px;\n}\n\n@font-face {\n    font-family: Muiicons;\n    font-weight: normal;\n    font-style: normal;\n\n    src: url('../fonts/mui.ttf') format('truetype');\n}\n.mui-icon\n{\n    font-family: Muiicons;\n    font-size: 24px;\n    font-weight: normal;\n    font-style: normal;\n    line-height: 1;\n\n    display: inline-block;\n\n    text-decoration: none;\n\n    -webkit-font-smoothing: antialiased;\n}\n.mui-icon.mui-active\n{\n    color: #007aff;\n}\n.mui-icon.mui-right:before\n{\n    float: right;\n\n    padding-left: .2em;\n}\n\n.mui-icon-contact:before\n{\n    content: '\\e100';\n}\n\n.mui-icon-person:before\n{\n    content: '\\e101';\n}\n\n.mui-icon-personadd:before\n{\n    content: '\\e102';\n}\n\n.mui-icon-contact-filled:before\n{\n    content: '\\e130';\n}\n\n.mui-icon-person-filled:before\n{\n    content: '\\e131';\n}\n\n.mui-icon-personadd-filled:before\n{\n    content: '\\e132';\n}\n\n.mui-icon-phone:before\n{\n    content: '\\e200';\n}\n\n.mui-icon-email:before\n{\n    content: '\\e201';\n}\n\n.mui-icon-chatbubble:before\n{\n    content: '\\e202';\n}\n\n.mui-icon-chatboxes:before\n{\n    content: '\\e203';\n}\n\n.mui-icon-phone-filled:before\n{\n    content: '\\e230';\n}\n\n.mui-icon-email-filled:before\n{\n    content: '\\e231';\n}\n\n.mui-icon-chatbubble-filled:before\n{\n    content: '\\e232';\n}\n\n.mui-icon-chatboxes-filled:before\n{\n    content: '\\e233';\n}\n\n.mui-icon-weibo:before\n{\n    content: '\\e260';\n}\n\n.mui-icon-weixin:before\n{\n    content: '\\e261';\n}\n\n.mui-icon-pengyouquan:before\n{\n    content: '\\e262';\n}\n\n.mui-icon-chat:before\n{\n    content: '\\e263';\n}\n\n.mui-icon-qq:before\n{\n    content: '\\e264';\n}\n\n.mui-icon-videocam:before\n{\n    content: '\\e300';\n}\n\n.mui-icon-camera:before\n{\n    content: '\\e301';\n}\n\n.mui-icon-mic:before\n{\n    content: '\\e302';\n}\n\n.mui-icon-location:before\n{\n    content: '\\e303';\n}\n\n.mui-icon-mic-filled:before, .mui-icon-speech:before\n{\n    content: '\\e332';\n}\n\n.mui-icon-location-filled:before\n{\n    content: '\\e333';\n}\n\n.mui-icon-micoff:before\n{\n    content: '\\e360';\n}\n\n.mui-icon-image:before\n{\n    content: '\\e363';\n}\n\n.mui-icon-map:before\n{\n    content: '\\e364';\n}\n\n.mui-icon-compose:before\n{\n    content: '\\e400';\n}\n\n.mui-icon-trash:before\n{\n    content: '\\e401';\n}\n\n.mui-icon-upload:before\n{\n    content: '\\e402';\n}\n\n.mui-icon-download:before\n{\n    content: '\\e403';\n}\n\n.mui-icon-close:before\n{\n    content: '\\e404';\n}\n\n.mui-icon-redo:before\n{\n    content: '\\e405';\n}\n\n.mui-icon-undo:before\n{\n    content: '\\e406';\n}\n\n.mui-icon-refresh:before\n{\n    content: '\\e407';\n}\n\n.mui-icon-star:before\n{\n    content: '\\e408';\n}\n\n.mui-icon-plus:before\n{\n    content: '\\e409';\n}\n\n.mui-icon-minus:before\n{\n    content: '\\e410';\n}\n\n.mui-icon-circle:before, .mui-icon-checkbox:before\n{\n    content: '\\e411';\n}\n\n.mui-icon-close-filled:before, .mui-icon-clear:before\n{\n    content: '\\e434';\n}\n\n.mui-icon-refresh-filled:before\n{\n    content: '\\e437';\n}\n\n.mui-icon-star-filled:before\n{\n    content: '\\e438';\n}\n\n.mui-icon-plus-filled:before\n{\n    content: '\\e439';\n}\n\n.mui-icon-minus-filled:before\n{\n    content: '\\e440';\n}\n\n.mui-icon-circle-filled:before\n{\n    content: '\\e441';\n}\n\n.mui-icon-checkbox-filled:before\n{\n    content: '\\e442';\n}\n\n.mui-icon-closeempty:before\n{\n    content: '\\e460';\n}\n\n.mui-icon-refreshempty:before\n{\n    content: '\\e461';\n}\n\n.mui-icon-reload:before\n{\n    content: '\\e462';\n}\n\n.mui-icon-starhalf:before\n{\n    content: '\\e463';\n}\n\n.mui-icon-spinner:before\n{\n    content: '\\e464';\n}\n\n.mui-icon-spinner-cycle:before\n{\n    content: '\\e465';\n}\n\n.mui-icon-search:before\n{\n    content: '\\e466';\n}\n\n.mui-icon-plusempty:before\n{\n    content: '\\e468';\n}\n\n.mui-icon-forward:before\n{\n    content: '\\e470';\n}\n\n.mui-icon-back:before, .mui-icon-left-nav:before\n{\n    content: '\\e471';\n}\n\n.mui-icon-checkmarkempty:before\n{\n    content: '\\e472';\n}\n\n.mui-icon-home:before\n{\n    content: '\\e500';\n}\n\n.mui-icon-navigate:before\n{\n    content: '\\e501';\n}\n\n.mui-icon-gear:before\n{\n    content: '\\e502';\n}\n\n.mui-icon-paperplane:before\n{\n    content: '\\e503';\n}\n\n.mui-icon-info:before\n{\n    content: '\\e504';\n}\n\n.mui-icon-help:before\n{\n    content: '\\e505';\n}\n\n.mui-icon-locked:before\n{\n    content: '\\e506';\n}\n\n.mui-icon-more:before\n{\n    content: '\\e507';\n}\n\n.mui-icon-flag:before\n{\n    content: '\\e508';\n}\n\n.mui-icon-home-filled:before\n{\n    content: '\\e530';\n}\n\n.mui-icon-gear-filled:before\n{\n    content: '\\e532';\n}\n\n.mui-icon-info-filled:before\n{\n    content: '\\e534';\n}\n\n.mui-icon-help-filled:before\n{\n    content: '\\e535';\n}\n\n.mui-icon-more-filled:before\n{\n    content: '\\e537';\n}\n\n.mui-icon-settings:before\n{\n    content: '\\e560';\n}\n\n.mui-icon-list:before\n{\n    content: '\\e562';\n}\n\n.mui-icon-bars:before\n{\n    content: '\\e563';\n}\n\n.mui-icon-loop:before\n{\n    content: '\\e565';\n}\n\n.mui-icon-paperclip:before\n{\n    content: '\\e567';\n}\n\n.mui-icon-eye:before\n{\n    content: '\\e568';\n}\n\n.mui-icon-arrowup:before\n{\n    content: '\\e580';\n}\n\n.mui-icon-arrowdown:before\n{\n    content: '\\e581';\n}\n\n.mui-icon-arrowleft:before\n{\n    content: '\\e582';\n}\n\n.mui-icon-arrowright:before\n{\n    content: '\\e583';\n}\n\n.mui-icon-arrowthinup:before\n{\n    content: '\\e584';\n}\n\n.mui-icon-arrowthindown:before\n{\n    content: '\\e585';\n}\n\n.mui-icon-arrowthinleft:before\n{\n    content: '\\e586';\n}\n\n.mui-icon-arrowthinright:before\n{\n    content: '\\e587';\n}\n\n.mui-icon-pulldown:before\n{\n    content: '\\e588';\n}\n\n.mui-fullscreen\n{\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n}\n.mui-fullscreen.mui-slider .mui-slider-group\n{\n    height: 100%;\n}\n.mui-fullscreen .mui-segmented-control ~ .mui-slider-group\n{\n    position: absolute;\n    top: 40px;\n    bottom: 0;\n\n    width: 100%;\n    height: auto;\n}\n.mui-fullscreen.mui-slider .mui-slider-item > a\n{\n    top: 50%;\n\n    -webkit-transform: translateY(-50%);\n            transform: translateY(-50%);\n}\n.mui-fullscreen .mui-off-canvas-wrap .mui-slider-item > a\n{\n    top: auto;\n\n    -webkit-transform: none;\n            transform: none;\n}\n\n.mui-bar-nav ~ .mui-content .mui-slider.mui-fullscreen\n{\n    top: 44px;\n}\n\n.mui-bar-tab ~ .mui-content .mui-slider.mui-fullscreen .mui-segmented-control ~ .mui-slider-group\n{\n    bottom: 50px;\n}\n\n.mui-android.mui-android-4-0 input:focus,\n.mui-android.mui-android-4-0 textarea:focus\n{\n    -webkit-user-modify: inherit;\n}\n\n.mui-android.mui-android-4-2 input,\n.mui-android.mui-android-4-2 textarea, .mui-android.mui-android-4-3 input,\n.mui-android.mui-android-4-3 textarea\n{\n    -webkit-user-select: text;\n}\n\n.mui-ios .mui-table-view-cell\n{\n    -webkit-transform-style: preserve-3d;\n            transform-style: preserve-3d;\n}\n\n.mui-plus-visible, .mui-wechat-visible\n{\n    display: none !important;\n}\n\n.mui-plus-hidden, .mui-wechat-hidden\n{\n    display: block !important;\n}\n\n.mui-tab-item.mui-plus-hidden, .mui-tab-item.mui-wechat-hidden\n{\n    display: table-cell !important;\n}\n\n.mui-plus .mui-plus-visible, .mui-wechat .mui-wechat-visible\n{\n    display: block !important;\n}\n\n.mui-plus .mui-tab-item.mui-plus-visible, .mui-wechat .mui-tab-item.mui-wechat-visible\n{\n    display: table-cell !important;\n}\n\n.mui-plus .mui-plus-hidden, .mui-wechat .mui-wechat-hidden\n{\n    display: none !important;\n}\n\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav\n{\n    height: 64px;\n    padding-top: 20px;\n}\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav ~ .mui-content\n{\n    padding-top: 64px;\n}\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav ~ .mui-content .mui-pull-top-pocket\n{\n    top: 64px;\n}\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary\n{\n    top: 64px;\n}\n.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary ~ .mui-content\n{\n    padding-top: 94px;\n}\n\n.mui-iframe-wrapper\n{\n    position: absolute;\n    right: 0;\n    left: 0;\n\n    -webkit-overflow-scrolling: touch;\n}\n.mui-iframe-wrapper iframe\n{\n    width: 100%;\n    height: 100%;\n\n    border: 0;\n}\n"
  },
  {
    "path": "examples/nativeTab/html/new-webview.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\t<head>\r\n\t\t<meta charset=\"UTF-8\">\r\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\r\n\t\t<title>new webview</title>\r\n\t\t<script src=\"../js/mui.min.js\"></script>\r\n\t\t<link href=\"../css/mui.min.css\" rel=\"stylesheet\" />\r\n\t</head>\r\n\t<body>\r\n\t\t<header class=\"mui-bar mui-bar-nav\">\r\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\r\n\t\t\t<h1 class=\"mui-title\">新窗口</h1>\r\n\t\t</header>\r\n\t\t<div class=\"mui-content\">\r\n\t\t\t<p style=\"margin-top:20px;margin-left: 20px;\">这是subNView模式下打开的新窗口。</p>\r\n\t\t</div>\r\n\t\t\r\n\t\t<script>\r\n\t\t\tmui.init();\r\n\t\t</script>\r\n\t</body>\r\n</html>\r\n"
  },
  {
    "path": "examples/nativeTab/html/tab-webview-subpage-chat.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,\n\t\t\tbody {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t\n\t\t\t.title {\n\t\t\t\tpadding: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div id=\"pullrefresh\" class=\"mui-content mui-scroll-wrapper\">\n\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t<div class=\"title\">\n\t\t\t\t\t这是subNView模式选项卡中的第1个子页面，该页面展示一个支持单webview模式的下拉刷新、上拉加载的消息列表\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"mui-table-view mui-table-view-chevron\">\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 1</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 2</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 3</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 4</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 5</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 6</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 7</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 8</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 9</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 10</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 11</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 12</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 13</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 14</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 15</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 16</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 17</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 18</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 19</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t\t<a href=\"\" class=\"mui-navigate-right\">Item 20</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<script src=\"../js/mui.min.js\"></script>\n\t\t<script>\n\t\t\tmui.init({\n\t\t\t\tswipeBack: false,\n\t\t\t\tpullRefresh: {\n\t\t\t\t\tcontainer: '#pullrefresh',\n\t\t\t\t\tdown: {\n\t\t\t\t\t\tstyle:'circle',\n\t\t\t\t\t\tcallback: pulldownRefresh\n\t\t\t\t\t},\n\t\t\t\t\tup: {\n\t\t\t\t\t\tcontentrefresh: '正在加载...',\n\t\t\t\t\t\tcallback: pullupRefresh\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t/**\n\t\t\t * 下拉刷新具体业务实现\n\t\t\t */\n\t\t\tfunction pulldownRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor(var i = cells.length, len = i + 3; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\t//下拉刷新，新纪录插到最前面；\n\t\t\t\t\t\ttable.insertBefore(li, table.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPulldownToRefresh(); //refresh completed\n\t\t\t\t\tmui.toast('下拉刷新成功');\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t\tvar count = 0;\n\t\t\t/**\n\t\t\t * 上拉加载具体业务实现\n\t\t\t */\n\t\t\tfunction pullupRefresh() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tmui('#pullrefresh').pullRefresh().endPullupToRefresh((++count > 2)); //参数为true代表没有更多数据了。\n\t\t\t\t\tvar table = document.body.querySelector('.mui-table-view');\n\t\t\t\t\tvar cells = document.body.querySelectorAll('.mui-table-view-cell');\n\t\t\t\t\tfor(var i = cells.length, len = i + 20; i < len; i++) {\n\t\t\t\t\t\tvar li = document.createElement('li');\n\t\t\t\t\t\tli.className = 'mui-table-view-cell';\n\t\t\t\t\t\tli.innerHTML = '<a class=\"mui-navigate-right\">Item ' + (i + 1) + '</a>';\n\t\t\t\t\t\ttable.appendChild(li);\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "examples/nativeTab/html/tab-webview-subpage-contact.html",
    "content": "<!DOCTYPE html>\n<html>\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>Hello MUI</title>\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n\t\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n\t\t<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n\t\t<link rel=\"stylesheet\" href=\"../css/mui.min.css\">\n\t\t<style>\n\t\t\thtml,body {\n\t\t\t\tbackground-color: #efeff4;\n\t\t\t}\n\t\t\t.title{\n\t\t\t\tmargin: 20px 15px 10px;\n\t\t\t\tcolor: #6d6d72;\n\t\t\t\tfont-size: 15px;\n\t\t\t}\n\t\t\t .oa-contact-cell.mui-table .mui-table-cell {\n\t\t\t\tpadding: 11px 0;\n\t\t\t\tvertical-align: middle;\n\t\t\t}\n\t\t\t\n\t\t\t.oa-contact-cell {\n\t\t\t\tposition: relative;\n\t\t\t\tmargin: -11px 0;\n\t\t\t}\n\t\n\t\t\t.oa-contact-avatar {\n\t\t\t\twidth: 75px;\n\t\t\t}\n\t\t\t.oa-contact-avatar img {\n\t\t\t\tborder-radius: 50%;\n\t\t\t}\n\t\t\t.oa-contact-content {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.oa-contact-name {\n\t\t\t\tmargin-right: 20px;\n\t\t\t}\n\t\t\t.oa-contact-name, oa-contact-position {\n\t\t\t\tfloat: left;\n\t\t\t}\n\t\t</style>\n\t</head>\n\n\t<body>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"title\">\n\t\t\t\t这是subNView模式选项卡中的第2个子页面，该页面展示一个通讯录示例\n\t\t\t</div>\n\n\t\t\t<ul class=\"mui-table-view mui-table-view-striped mui-table-view-condensed\">\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">叶文洁</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">董事长</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tyewenjie@sina.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">艾AA</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">总经理</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\taaa@163.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">罗辑</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tluoji@126.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">云天明</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tytm@163.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"mui-table-view-cell\">\n\t\t\t\t\t<div class=\"mui-slider-cell\">\n\t\t\t\t\t\t<div class=\"oa-contact-cell mui-table\">\n\t\t\t\t\t\t\t<div class=\"oa-contact-avatar mui-table-cell\">\n\t\t\t\t\t\t\t\t<img src=\"../images/60x60.gif\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"oa-contact-content mui-table-cell\">\n\t\t\t\t\t\t\t\t<div class=\"mui-clearfix\">\n\t\t\t\t\t\t\t\t\t<h4 class=\"oa-contact-name\">史强</h4>\n\t\t\t\t\t\t\t\t\t<span class=\"oa-contact-position mui-h6\">员工</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p class=\"oa-contact-email mui-h6\">\n\t\t\t\t\t\t\t\t\tshiqiang@gmail.com\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t</body>\n\t<script src=\"../js/mui.min.js\"></script>\n\t<script>\n\t\tmui.init({\n\t\t\tswipeBack:true //启用右滑关闭功能\n\t\t});\n\t</script>\n</html>"
  },
  {
    "path": "examples/nativeTab/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n\t<head>\r\n\t\t<meta charset=\"UTF-8\">\r\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\r\n\t\t<title>首页</title>\r\n\t\t<script src=\"js/mui.min.js\"></script>\r\n\t\t<link href=\"css/mui.min.css\" rel=\"stylesheet\" />\r\n\t\t<style>\r\n\t\t\thtml,\r\n\t\t\tbody {\r\n\t\t\t\tbackground-color: #efeff4;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t.title {\r\n\t\t\t\tmargin: 20px 15px 10px;\r\n\t\t\t\tcolor: #6d6d72;\r\n\t\t\t\tfont-size: 15px;\r\n\t\t\t\tpadding-bottom: 51px;\r\n\t\t\t}\r\n\t\t</style>\r\n\t</head>\r\n\r\n\t<body>\r\n\t\t<div class=\"mui-content\">\r\n\t\t\t<div class=\"title\">\r\n\t\t\t\t<p>这是使用nativeObj 原生控件绘制的底部选项卡示例，当前为父页面，显示第一个tab项内容；</p>\r\n\t\t\t\t<p>这里采用将第一个tab项内容放在父页面显示，因为是入口页面，会在启动中进行渲染，使首页显示速度更快</p>\r\n\t\t\t\t<p>选项卡常用于App首页，为加快渲染，原生底部选项卡是在manifest.json中通过plus -> launchwebview -> subNViews 节点配置的；</p>\r\n\t\t\t\t<p>选项卡图标使用字体绘制，点击可切换对应选项卡的高亮状态，开发者可自定义相应的点击事件；</p>\r\n\t\t\t\t<p>本示例中，点击第二个选项卡打开一个支持下拉刷新的webview；点击第四个选项卡，打开一个新窗口。</p>\r\n\r\n\t\t\t\t<p>中间悬浮大球图标，因涉及屏幕分辨率动态计算，目前是在首页plusReady事件中实现绘制的。该悬浮大球支持点击事件，开发者可定制实现对应的点击逻辑。</P>\r\n\t\t\t\t<p>为提高性能，本示例选项卡图标全部使用字体文件绘制（推荐），实际使用中也可以使用图片绘制。</p>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<script src=\"js/util.js\"></script>\r\n\t\t<script type=\"text/javascript\">\r\n\t\t\t(function() {\r\n\t\t\t\tmui.init({\r\n\t\t\t\t\tswipeBack: true //启用右滑关闭功能\r\n\t\t\t\t});\r\n\t\t\t\tmui.plusReady(function() {\r\n\t\t\t\t\tvar self = plus.webview.currentWebview(),\r\n\t\t\t\t\t\tleftPos = Math.ceil((window.innerWidth - 60) / 2); // 设置凸起大图标为水平居中\r\n\r\n\t\t\t\t\t/**\t\r\n\t\t\t\t\t * drawNativeIcon 绘制带边框的半圆，\r\n\t\t\t\t\t * 实现原理：\r\n\t\t\t\t\t *   id为bg的tag 创建带边框的圆\r\n\t\t\t\t\t *   id为bg2的tag 创建白色矩形遮住圆下半部分，只显示凸起带边框部分\r\n\t\t\t\t\t * \t id为iconBg的红色背景图\r\n\t\t\t\t\t *   id为icon的字体图标\r\n\t\t\t\t\t *   注意创建先后顺序，创建越晚的层级越高\r\n\t\t\t\t\t */\r\n\t\t\t\t\tvar drawNativeIcon = util.drawNative('icon', {\r\n\t\t\t\t\t\tbottom: '5px',\r\n\t\t\t\t\t\tleft: leftPos + 'px',\r\n\t\t\t\t\t\twidth: '60px',\r\n\t\t\t\t\t\theight: '60px'\r\n\t\t\t\t\t}, [{\r\n\t\t\t\t\t\ttag: 'rect',\r\n\t\t\t\t\t\tid: 'bg',\r\n\t\t\t\t\t\tposition: {\r\n\t\t\t\t\t\t\ttop: '1px',\r\n\t\t\t\t\t\t\tleft: '0px',\r\n\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\theight: '100%'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\trectStyles: {\r\n\t\t\t\t\t\t\tcolor: '#fff',\r\n\t\t\t\t\t\t\tradius: '50%',\r\n\t\t\t\t\t\t\tborderColor: '#ccc',\r\n\t\t\t\t\t\t\tborderWidth: '1px'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\ttag: 'rect',\r\n\t\t\t\t\t\tid: 'bg2',\r\n\t\t\t\t\t\tposition: {\r\n\t\t\t\t\t\t\tbottom: '-0.5px',\r\n\t\t\t\t\t\t\tleft: '0px',\r\n\t\t\t\t\t\t\twidth: '100%',\r\n\t\t\t\t\t\t\theight: '45px'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\trectStyles: {\r\n\t\t\t\t\t\t\tcolor: '#fff'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\ttag: 'rect',\r\n\t\t\t\t\t\tid: 'iconBg',\r\n\t\t\t\t\t\tposition: {\r\n\t\t\t\t\t\t\ttop: '5px',\r\n\t\t\t\t\t\t\tleft: '5px',\r\n\t\t\t\t\t\t\twidth: '50px',\r\n\t\t\t\t\t\t\theight: '50px'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\trectStyles: {\r\n\t\t\t\t\t\t\tcolor: '#d74b28',\r\n\t\t\t\t\t\t\tradius: '50%'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, {\r\n\t\t\t\t\t\ttag: 'font',\r\n\t\t\t\t\t\tid: 'icon',\r\n\t\t\t\t\t\ttext: '\\ue600', //此为字体图标Unicode码'\\e600'转换为'\\ue600'\r\n\t\t\t\t\t\tposition: {\r\n\t\t\t\t\t\t\ttop: '0px',\r\n\t\t\t\t\t\t\tleft: '5px',\r\n\t\t\t\t\t\t\twidth: '50px',\r\n\t\t\t\t\t\t\theight: '100%'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttextStyles: {\r\n\t\t\t\t\t\t\tfontSrc: '_www/fonts/iconfont.ttf',\r\n\t\t\t\t\t\t\talign: 'center',\r\n\t\t\t\t\t\t\tcolor: '#fff',\r\n\t\t\t\t\t\t\tsize: '30px'\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}]);\r\n\t\t\t\t\t// append 到父webview中\r\n\t\t\t\t\tself.append(drawNativeIcon);\r\n\r\n\t\t\t\t\t//自定义监听图标点击事件\r\n\t\t\t\t\tvar active_color = '#fff';\r\n\t\t\t\t\tdrawNativeIcon.addEventListener('click', function(e) {\r\n\t\t\t\t\t\tmui.alert('你点击了图标，你在此可以打开摄像头或者新窗口等自定义点击事件。', '悬浮球点击事件');\r\n\t\t\t\t\t\t// 重绘字体颜色\r\n\t\t\t\t\t\tif(active_color == '#fff') {\r\n\t\t\t\t\t\t\tdrawNativeIcon.drawText('\\ue600', {}, {\r\n\t\t\t\t\t\t\t\tfontSrc: '_www/fonts/iconfont.ttf',\r\n\t\t\t\t\t\t\t\talign: 'center',\r\n\t\t\t\t\t\t\t\tcolor: '#000',\r\n\t\t\t\t\t\t\t\tsize: '30px'\r\n\t\t\t\t\t\t\t}, 'icon');\r\n\t\t\t\t\t\t\tactive_color = '#000';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tdrawNativeIcon.drawText('\\ue600', {}, {\r\n\t\t\t\t\t\t\t\tfontSrc: '_www/fonts/iconfont.ttf',\r\n\t\t\t\t\t\t\t\talign: 'center',\r\n\t\t\t\t\t\t\t\tcolor: '#fff',\r\n\t\t\t\t\t\t\t\tsize: '30px'\r\n\t\t\t\t\t\t\t}, 'icon');\r\n\t\t\t\t\t\t\tactive_color = '#fff';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// 中间凸起图标绘制及监听点击完毕\r\n\r\n\t\t\t\t\t// 创建子webview窗口 并初始化\r\n\t\t\t\t\tvar aniShow = {};\r\n\t\t\t\t\tutil.initSubpage(aniShow);\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar \tnview = plus.nativeObj.View.getViewById('tabBar'),\r\n\t\t\t\t\t\tactivePage = plus.webview.currentWebview(),\r\n\t\t\t\t\t\ttargetPage,\r\n\t\t\t\t\t\tsubpages = util.options.subpages,\r\n\t\t\t\t\t\tpageW = window.innerWidth,\r\n\t\t\t\t\t\tcurrIndex = 0;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * 根据判断view控件点击位置判断切换的tab\r\n\t\t\t\t\t */\r\n\t\t\t\t\tnview.addEventListener('click', function(e) {\r\n\t\t\t\t\t\tvar clientX = e.clientX;\r\n\t\t\t\t\t\tif(clientX > 0 && clientX <= parseInt(pageW * 0.25)) {\r\n\t\t\t\t\t\t\tcurrIndex = 0;\r\n\t\t\t\t\t\t} else if(clientX > parseInt(pageW * 0.25) && clientX <= parseInt(pageW * 0.45)) {\r\n\t\t\t\t\t\t\tcurrIndex = 1;\r\n\t\t\t\t\t\t} else if(clientX > parseInt(pageW * 0.45) && clientX <= parseInt(pageW * 0.8)) {\r\n\t\t\t\t\t\t\tcurrIndex = 2;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcurrIndex = 3;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// 匹配对应tab窗口\t\r\n\t\t\t\t\t\tif(currIndex > 0) {\r\n\t\t\t\t\t\t\ttargetPage = plus.webview.getWebviewById(subpages[currIndex - 1]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttargetPage = plus.webview.currentWebview();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(targetPage == activePage) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(currIndex !== 3) { \r\n\t\t\t\t\t\t\t//底部选项卡切换\r\n\t\t\t\t\t\t\tutil.toggleNview(currIndex);\r\n\t\t\t\t\t\t\t// 子页面切换\r\n\t\t\t\t\t\t\tutil.changeSubpage(targetPage, activePage, aniShow);\r\n\t\t\t\t\t\t\t//更新当前活跃的页面\r\n\t\t\t\t\t\t\tactivePage = targetPage;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t//第四个tab 打开新窗口\r\n\t\t\t\t\t\t\tplus.webview.open('html/new-webview.html', 'new', {}, 'slide-in-right', 200);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t})();\r\n\t\t</script>\r\n\t</body>\r\n\r\n</html>"
  },
  {
    "path": "examples/nativeTab/js/mui.js",
    "content": "/*!\n * =====================================================\n * Mui v3.7.0 (http://dev.dcloud.net.cn/mui)\n * =====================================================\n */\n/**\n * MUI核心JS\n * @type _L4.$|Function\n */\nvar mui = (function(document, undefined) {\n\tvar readyRE = /complete|loaded|interactive/;\n\tvar idSelectorRE = /^#([\\w-]+)$/;\n\tvar classSelectorRE = /^\\.([\\w-]+)$/;\n\tvar tagSelectorRE = /^[\\w-]+$/;\n\tvar translateRE = /translate(?:3d)?\\((.+?)\\)/;\n\tvar translateMatrixRE = /matrix(3d)?\\((.+?)\\)/;\n\n\tvar $ = function(selector, context) {\n\t\tcontext = context || document;\n\t\tif (!selector)\n\t\t\treturn wrap();\n\t\tif (typeof selector === 'object')\n\t\t\tif ($.isArrayLike(selector)) {\n\t\t\t\treturn wrap($.slice.call(selector), null);\n\t\t\t} else {\n\t\t\t\treturn wrap([selector], null);\n\t\t\t}\n\t\tif (typeof selector === 'function')\n\t\t\treturn $.ready(selector);\n\t\tif (typeof selector === 'string') {\n\t\t\ttry {\n\t\t\t\tselector = selector.trim();\n\t\t\t\tif (idSelectorRE.test(selector)) {\n\t\t\t\t\tvar found = document.getElementById(RegExp.$1);\n\t\t\t\t\treturn wrap(found ? [found] : []);\n\t\t\t\t}\n\t\t\t\treturn wrap($.qsa(selector, context), selector);\n\t\t\t} catch (e) {}\n\t\t}\n\t\treturn wrap();\n\t};\n\n\tvar wrap = function(dom, selector) {\n\t\tdom = dom || [];\n\t\tObject.setPrototypeOf(dom, $.fn);\n\t\tdom.selector = selector || '';\n\t\treturn dom;\n\t};\n\n\t$.uuid = 0;\n\n\t$.data = {};\n\t/**\n\t * extend(simple)\n\t * @param {type} target\n\t * @param {type} source\n\t * @param {type} deep\n\t * @returns {unresolved}\n\t */\n\t$.extend = function() { //from jquery2\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\tif (typeof target !== \"object\" && !$.isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\t\t\tif ((options = arguments[i]) != null) {\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\tif (target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && $.isArray(src) ? src : [];\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && $.isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttarget[name] = $.extend(deep, clone, copy);\n\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t};\n\t/**\n\t * mui noop(function)\n\t */\n\t$.noop = function() {};\n\t/**\n\t * mui slice(array)\n\t */\n\t$.slice = [].slice;\n\t/**\n\t * mui filter(array)\n\t */\n\t$.filter = [].filter;\n\n\t$.type = function(obj) {\n\t\treturn obj == null ? String(obj) : class2type[{}.toString.call(obj)] || \"object\";\n\t};\n\t/**\n\t * mui isArray\n\t */\n\t$.isArray = Array.isArray ||\n\t\tfunction(object) {\n\t\t\treturn object instanceof Array;\n\t\t};\n\t/**\n\t * mui isArrayLike \n\t * @param {Object} obj\n\t */\n\t$.isArrayLike = function(obj) {\n\t\tvar length = !!obj && \"length\" in obj && obj.length;\n\t\tvar type = $.type(obj);\n\t\tif (type === \"function\" || $.isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t};\n\t/**\n\t * mui isWindow(需考虑obj为undefined的情况)\n\t */\n\t$.isWindow = function(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\t/**\n\t * mui isObject\n\t */\n\t$.isObject = function(obj) {\n\t\treturn $.type(obj) === \"object\";\n\t};\n\t/**\n\t * mui isPlainObject\n\t */\n\t$.isPlainObject = function(obj) {\n\t\treturn $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype;\n\t};\n\t/**\n\t * mui isEmptyObject\n\t * @param {Object} o\n\t */\n\t$.isEmptyObject = function(o) {\n\t\tfor (var p in o) {\n\t\t\tif (p !== undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t/**\n\t * mui isFunction\n\t */\n\t$.isFunction = function(value) {\n\t\treturn $.type(value) === \"function\";\n\t};\n\t/**\n\t * mui querySelectorAll\n\t * @param {type} selector\n\t * @param {type} context\n\t * @returns {Array}\n\t */\n\t$.qsa = function(selector, context) {\n\t\tcontext = context || document;\n\t\treturn $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector));\n\t};\n\t/**\n\t * ready(DOMContentLoaded)\n\t * @param {type} callback\n\t * @returns {_L6.$}\n\t */\n\t$.ready = function(callback) {\n\t\tif (readyRE.test(document.readyState)) {\n\t\t\tcallback($);\n\t\t} else {\n\t\t\tdocument.addEventListener('DOMContentLoaded', function() {\n\t\t\t\tcallback($);\n\t\t\t}, false);\n\t\t}\n\t\treturn this;\n\t};\n\t/**\n\t * 将 fn 缓存一段时间后, 再被调用执行\n\t * 此方法为了避免在 ms 段时间内, 执行 fn 多次. 常用于 resize , scroll , mousemove 等连续性事件中;\n\t * 当 ms 设置为 -1, 表示立即执行 fn, 即和直接调用 fn 一样;\n\t * 调用返回函数的 stop 停止最后一次的 buffer 效果\n\t * @param {Object} fn\n\t * @param {Object} ms\n\t * @param {Object} context\n\t */\n\t$.buffer = function(fn, ms, context) {\n\t\tvar timer;\n\t\tvar lastStart = 0;\n\t\tvar lastEnd = 0;\n\t\tvar ms = ms || 150;\n\n\t\tfunction run() {\n\t\t\tif (timer) {\n\t\t\t\ttimer.cancel();\n\t\t\t\ttimer = 0;\n\t\t\t}\n\t\t\tlastStart = $.now();\n\t\t\tfn.apply(context || this, arguments);\n\t\t\tlastEnd = $.now();\n\t\t}\n\n\t\treturn $.extend(function() {\n\t\t\tif (\n\t\t\t\t(!lastStart) || // 从未运行过\n\t\t\t\t(lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒\n\t\t\t\t(lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成，后8*ms毫秒\n\t\t\t) {\n\t\t\t\trun.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tif (timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t}\n\t\t\t\ttimer = $.later(run, ms, null, $.slice.call(arguments));\n\t\t\t}\n\t\t}, {\n\t\t\tstop: function() {\n\t\t\t\tif (timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t\ttimer = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t * each\n\t * @param {type} elements\n\t * @param {type} callback\n\t * @returns {_L8.$}\n\t */\n\t$.each = function(elements, callback, hasOwnProperty) {\n\t\tif (!elements) {\n\t\t\treturn this;\n\t\t}\n\t\tif (typeof elements.length === 'number') {\n\t\t\t[].every.call(elements, function(el, idx) {\n\t\t\t\treturn callback.call(el, idx, el) !== false;\n\t\t\t});\n\t\t} else {\n\t\t\tfor (var key in elements) {\n\t\t\t\tif (hasOwnProperty) {\n\t\t\t\t\tif (elements.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t$.focus = function(element) {\n\t\tif ($.os.ios) {\n\t\t\tsetTimeout(function() {\n\t\t\t\telement.focus();\n\t\t\t}, 10);\n\t\t} else {\n\t\t\telement.focus();\n\t\t}\n\t};\n\t/**\n\t * trigger event\n\t * @param {type} element\n\t * @param {type} eventType\n\t * @param {type} eventData\n\t * @returns {_L8.$}\n\t */\n\t$.trigger = function(element, eventType, eventData) {\n\t\telement.dispatchEvent(new CustomEvent(eventType, {\n\t\t\tdetail: eventData,\n\t\t\tbubbles: true,\n\t\t\tcancelable: true\n\t\t}));\n\t\treturn this;\n\t};\n\t/**\n\t * getStyles\n\t * @param {type} element\n\t * @param {type} property\n\t * @returns {styles}\n\t */\n\t$.getStyles = function(element, property) {\n\t\tvar styles = element.ownerDocument.defaultView.getComputedStyle(element, null);\n\t\tif (property) {\n\t\t\treturn styles.getPropertyValue(property) || styles[property];\n\t\t}\n\t\treturn styles;\n\t};\n\t/**\n\t * parseTranslate\n\t * @param {type} translateString\n\t * @param {type} position\n\t * @returns {Object}\n\t */\n\t$.parseTranslate = function(translateString, position) {\n\t\tvar result = translateString.match(translateRE || '');\n\t\tif (!result || !result[1]) {\n\t\t\tresult = ['', '0,0,0'];\n\t\t}\n\t\tresult = result[1].split(\",\");\n\t\tresult = {\n\t\t\tx: parseFloat(result[0]),\n\t\t\ty: parseFloat(result[1]),\n\t\t\tz: parseFloat(result[2])\n\t\t};\n\t\tif (position && result.hasOwnProperty(position)) {\n\t\t\treturn result[position];\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * parseTranslateMatrix\n\t * @param {type} translateString\n\t * @param {type} position\n\t * @returns {Object}\n\t */\n\t$.parseTranslateMatrix = function(translateString, position) {\n\t\tvar matrix = translateString.match(translateMatrixRE);\n\t\tvar is3D = matrix && matrix[1];\n\t\tif (matrix) {\n\t\t\tmatrix = matrix[2].split(\",\");\n\t\t\tif (is3D === \"3d\")\n\t\t\t\tmatrix = matrix.slice(12, 15);\n\t\t\telse {\n\t\t\t\tmatrix.push(0);\n\t\t\t\tmatrix = matrix.slice(4, 7);\n\t\t\t}\n\t\t} else {\n\t\t\tmatrix = [0, 0, 0];\n\t\t}\n\t\tvar result = {\n\t\t\tx: parseFloat(matrix[0]),\n\t\t\ty: parseFloat(matrix[1]),\n\t\t\tz: parseFloat(matrix[2])\n\t\t};\n\t\tif (position && result.hasOwnProperty(position)) {\n\t\t\treturn result[position];\n\t\t}\n\t\treturn result;\n\t};\n\t$.hooks = {};\n\t$.addAction = function(type, hook) {\n\t\tvar hooks = $.hooks[type];\n\t\tif (!hooks) {\n\t\t\thooks = [];\n\t\t}\n\t\thook.index = hook.index || 1000;\n\t\thooks.push(hook);\n\t\thooks.sort(function(a, b) {\n\t\t\treturn a.index - b.index;\n\t\t});\n\t\t$.hooks[type] = hooks;\n\t\treturn $.hooks[type];\n\t};\n\t$.doAction = function(type, callback) {\n\t\tif ($.isFunction(callback)) { //指定了callback\n\t\t\t$.each($.hooks[type], callback);\n\t\t} else { //未指定callback，直接执行\n\t\t\t$.each($.hooks[type], function(index, hook) {\n\t\t\t\treturn !hook.handle();\n\t\t\t});\n\t\t}\n\t};\n\t/**\n\t * setTimeout封装\n\t * @param {Object} fn\n\t * @param {Object} when\n\t * @param {Object} context\n\t * @param {Object} data\n\t */\n\t$.later = function(fn, when, context, data) {\n\t\twhen = when || 0;\n\t\tvar m = fn;\n\t\tvar d = data;\n\t\tvar f;\n\t\tvar r;\n\n\t\tif (typeof fn === 'string') {\n\t\t\tm = context[fn];\n\t\t}\n\n\t\tf = function() {\n\t\t\tm.apply(context, $.isArray(d) ? d : [d]);\n\t\t};\n\n\t\tr = setTimeout(f, when);\n\n\t\treturn {\n\t\t\tid: r,\n\t\t\tcancel: function() {\n\t\t\t\tclearTimeout(r);\n\t\t\t}\n\t\t};\n\t};\n\t$.now = Date.now || function() {\n\t\treturn +new Date();\n\t};\n\tvar class2type = {};\n\t$.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) {\n\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t});\n\tif (window.JSON) {\n\t\t$.parseJSON = JSON.parse;\n\t}\n\t/**\n\t * $.fn\n\t */\n\t$.fn = {\n\t\teach: function(callback) {\n\t\t\t[].every.call(this, function(el, idx) {\n\t\t\t\treturn callback.call(el, idx, el) !== false;\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t};\n\n\t/**\n\t * 兼容 AMD 模块\n\t **/\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine('mui', [], function() {\n\t\t\treturn $;\n\t\t});\n\t}\n\n\treturn $;\n})(document);\n//window.mui = mui;\n//'$' in window || (window.$ = mui);\n/**\n * $.os\n * @param {type} $\n * @returns {undefined}\n */\n(function($, window) {\n\tfunction detect(ua) {\n\t\tthis.os = {};\n\t\tvar funcs = [\n\n\t\t\tfunction() { //wechat\n\t\t\t\tvar wechat = ua.match(/(MicroMessenger)\\/([\\d\\.]+)/i);\n\t\t\t\tif (wechat) { //wechat\n\t\t\t\t\tthis.os.wechat = {\n\t\t\t\t\t\tversion: wechat[2].replace(/_/g, '.')\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tfunction() { //android\n\t\t\t\tvar android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n\t\t\t\tif (android) {\n\t\t\t\t\tthis.os.android = true;\n\t\t\t\t\tthis.os.version = android[2];\n\n\t\t\t\t\tthis.os.isBadAndroid = !(/Chrome\\/\\d/.test(window.navigator.appVersion));\n\t\t\t\t}\n\t\t\t\treturn this.os.android === true;\n\t\t\t},\n\t\t\tfunction() { //ios\n\t\t\t\tvar iphone = ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n\t\t\t\tif (iphone) { //iphone\n\t\t\t\t\tthis.os.ios = this.os.iphone = true;\n\t\t\t\t\tthis.os.version = iphone[2].replace(/_/g, '.');\n\t\t\t\t} else {\n\t\t\t\t\tvar ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n\t\t\t\t\tif (ipad) { //ipad\n\t\t\t\t\t\tthis.os.ios = this.os.ipad = true;\n\t\t\t\t\t\tthis.os.version = ipad[2].replace(/_/g, '.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.os.ios === true;\n\t\t\t}\n\t\t];\n\t\t[].every.call(funcs, function(func) {\n\t\t\treturn !func.call($);\n\t\t});\n\t}\n\tdetect.call($, navigator.userAgent);\n})(mui, window);\n/**\n * $.os.plus\n * @param {type} $\n * @returns {undefined}\n */\n(function($, document) {\n\tfunction detect(ua) {\n\t\tthis.os = this.os || {};\n\t\tvar plus = ua.match(/Html5Plus/i); //TODO 5\\+Browser?\n\t\tif (plus) {\n\t\t\tthis.os.plus = true;\n\t\t\t$(function() {\n\t\t\t\tdocument.body.classList.add('mui-plus');\n\t\t\t});\n\t\t\tif (ua.match(/StreamApp/i)) { //TODO 最好有流应用自己的标识\n\t\t\t\tthis.os.stream = true;\n\t\t\t\t$(function() {\n\t\t\t\t\tdocument.body.classList.add('mui-plus-stream');\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tdetect.call($, navigator.userAgent);\n})(mui, document);\n/**\n * 仅提供简单的on，off(仅支持事件委托，不支持当前元素绑定，当前元素绑定请直接使用addEventListener,removeEventListener)\n * @param {Object} $\n */\n(function($) {\n\tif ('ontouchstart' in window) {\n\t\t$.isTouchable = true;\n\t\t$.EVENT_START = 'touchstart';\n\t\t$.EVENT_MOVE = 'touchmove';\n\t\t$.EVENT_END = 'touchend';\n\t} else {\n\t\t$.isTouchable = false;\n\t\t$.EVENT_START = 'mousedown';\n\t\t$.EVENT_MOVE = 'mousemove';\n\t\t$.EVENT_END = 'mouseup';\n\t}\n\t$.EVENT_CANCEL = 'touchcancel';\n\t$.EVENT_CLICK = 'click';\n\n\tvar _mid = 1;\n\tvar delegates = {};\n\t//需要wrap的函数\n\tvar eventMethods = {\n\t\tpreventDefault: 'isDefaultPrevented',\n\t\tstopImmediatePropagation: 'isImmediatePropagationStopped',\n\t\tstopPropagation: 'isPropagationStopped'\n\t};\n\t//默认true返回函数\n\tvar returnTrue = function() {\n\t\treturn true\n\t};\n\t//默认false返回函数\n\tvar returnFalse = function() {\n\t\treturn false\n\t};\n\t//wrap浏览器事件\n\tvar compatible = function(event, target) {\n\t\tif (!event.detail) {\n\t\t\tevent.detail = {\n\t\t\t\tcurrentTarget: target\n\t\t\t};\n\t\t} else {\n\t\t\tevent.detail.currentTarget = target;\n\t\t}\n\t\t$.each(eventMethods, function(name, predicate) {\n\t\t\tvar sourceMethod = event[name];\n\t\t\tevent[name] = function() {\n\t\t\t\tthis[predicate] = returnTrue;\n\t\t\t\treturn sourceMethod && sourceMethod.apply(event, arguments)\n\t\t\t}\n\t\t\tevent[predicate] = returnFalse;\n\t\t}, true);\n\t\treturn event;\n\t};\n\t//简单的wrap对象_mid\n\tvar mid = function(obj) {\n\t\treturn obj && (obj._mid || (obj._mid = _mid++));\n\t};\n\t//事件委托对象绑定的事件回调列表\n\tvar delegateFns = {};\n\t//返回事件委托的wrap事件回调\n\tvar delegateFn = function(element, event, selector, callback) {\n\t\treturn function(e) {\n\t\t\t//same event\n\t\t\tvar callbackObjs = delegates[element._mid][event];\n\t\t\tvar handlerQueue = [];\n\t\t\tvar target = e.target;\n\t\t\tvar selectorAlls = {};\n\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\tif (target === element) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar matches = {};\n\t\t\t\t$.each(callbackObjs, function(selector, callbacks) { //same selector\n\t\t\t\t\tselectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element));\n\t\t\t\t\tif (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) {\n\t\t\t\t\t\tif (!matches[selector]) {\n\t\t\t\t\t\t\tmatches[selector] = callbacks;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t\tif (!$.isEmptyObject(matches)) {\n\t\t\t\t\thandlerQueue.push({\n\t\t\t\t\t\telement: target,\n\t\t\t\t\t\thandlers: matches\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tselectorAlls = null;\n\t\t\te = compatible(e); //compatible event\n\t\t\t$.each(handlerQueue, function(index, handler) {\n\t\t\t\ttarget = handler.element;\n\t\t\t\tvar tagName = target.tagName;\n\t\t\t\tif (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.detail && e.detail.gesture && e.detail.gesture.preventDefault();\n\t\t\t\t}\n\t\t\t\t$.each(handler.handlers, function(index, handler) {\n\t\t\t\t\t$.each(handler, function(index, callback) {\n\t\t\t\t\t\tif (callback.call(target, e) === false) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, true);\n\t\t\t\t}, true)\n\t\t\t\tif (e.isPropagationStopped()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t};\n\t};\n\tvar findDelegateFn = function(element, event) {\n\t\tvar delegateCallbacks = delegateFns[mid(element)];\n\t\tvar result = [];\n\t\tif (delegateCallbacks) {\n\t\t\tresult = [];\n\t\t\tif (event) {\n\t\t\t\tvar filterFn = function(fn) {\n\t\t\t\t\treturn fn.type === event;\n\t\t\t\t}\n\t\t\t\treturn delegateCallbacks.filter(filterFn);\n\t\t\t} else {\n\t\t\t\tresult = delegateCallbacks;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\tvar preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;\n\t/**\n\t * mui delegate events\n\t * @param {type} event\n\t * @param {type} selector\n\t * @param {type} callback\n\t * @returns {undefined}\n\t */\n\t$.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用，类似mouse,focus之类暂不封装支持\n\t\treturn this.each(function() {\n\t\t\tvar element = this;\n\t\t\tmid(element);\n\t\t\tmid(callback);\n\t\t\tvar isAddEventListener = false;\n\t\t\tvar delegateEvents = delegates[element._mid] || (delegates[element._mid] = {});\n\t\t\tvar delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {}));\n\t\t\tif ($.isEmptyObject(delegateCallbackObjs)) {\n\t\t\t\tisAddEventListener = true;\n\t\t\t}\n\t\t\tvar delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []);\n\t\t\tdelegateCallbacks.push(callback);\n\t\t\tif (isAddEventListener) {\n\t\t\t\tvar delegateFnArray = delegateFns[mid(element)];\n\t\t\t\tif (!delegateFnArray) {\n\t\t\t\t\tdelegateFnArray = [];\n\t\t\t\t}\n\t\t\t\tvar delegateCallback = delegateFn(element, event, selector, callback);\n\t\t\t\tdelegateFnArray.push(delegateCallback);\n\t\t\t\tdelegateCallback.i = delegateFnArray.length - 1;\n\t\t\t\tdelegateCallback.type = event;\n\t\t\t\tdelegateFns[mid(element)] = delegateFnArray;\n\t\t\t\telement.addEventListener(event, delegateCallback);\n\t\t\t\tif (event === 'tap') { //TODO 需要找个更好的解决方案\n\t\t\t\t\telement.addEventListener('click', function(e) {\n\t\t\t\t\t\tif (e.target) {\n\t\t\t\t\t\t\tvar tagName = e.target.tagName;\n\t\t\t\t\t\t\tif (!preventDefaultException.test(tagName)) {\n\t\t\t\t\t\t\t\tif (tagName === 'A') {\n\t\t\t\t\t\t\t\t\tvar href = e.target.href;\n\t\t\t\t\t\t\t\t\tif (!(href && ~href.indexOf('tel:'))) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t$.fn.off = function(event, selector, callback) {\n\t\treturn this.each(function() {\n\t\t\tvar _mid = mid(this);\n\t\t\tif (!event) { //mui(selector).off();\n\t\t\t\tdelegates[_mid] && delete delegates[_mid];\n\t\t\t} else if (!selector) { //mui(selector).off(event);\n\t\t\t\tdelegates[_mid] && delete delegates[_mid][event];\n\t\t\t} else if (!callback) { //mui(selector).off(event,selector);\n\t\t\t\tdelegates[_mid] && delegates[_mid][event] && delete delegates[_mid][event][selector];\n\t\t\t} else { //mui(selector).off(event,selector,callback);\n\t\t\t\tvar delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector];\n\t\t\t\t$.each(delegateCallbacks, function(index, delegateCallback) {\n\t\t\t\t\tif (mid(delegateCallback) === mid(callback)) {\n\t\t\t\t\t\tdelegateCallbacks.splice(index, 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\tif (delegates[_mid]) {\n\t\t\t\t//如果off掉了所有当前element的指定的event事件，则remove掉当前element的delegate回调\n\t\t\t\tif ((!delegates[_mid][event] || $.isEmptyObject(delegates[_mid][event]))) {\n\t\t\t\t\tfindDelegateFn(this, event).forEach(function(fn) {\n\t\t\t\t\t\tthis.removeEventListener(fn.type, fn);\n\t\t\t\t\t\tdelete delegateFns[_mid][fn.i];\n\t\t\t\t\t}.bind(this));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//如果delegates[_mid]已不存在，删除所有\n\t\t\t\tfindDelegateFn(this).forEach(function(fn) {\n\t\t\t\t\tthis.removeEventListener(fn.type, fn);\n\t\t\t\t\tdelete delegateFns[_mid][fn.i];\n\t\t\t\t}.bind(this));\n\t\t\t}\n\t\t});\n\n\t};\n})(mui);\n/**\n * mui target(action>popover>modal>tab>toggle)\n */\n(function($, window, document) {\n\t/**\n\t * targets\n\t */\n\t$.targets = {};\n\t/**\n\t * target handles\n\t */\n\t$.targetHandles = [];\n\t/**\n\t * register target\n\t * @param {type} target\n\t * @returns {$.targets}\n\t */\n\t$.registerTarget = function(target) {\n\n\t\ttarget.index = target.index || 1000;\n\n\t\t$.targetHandles.push(target);\n\n\t\t$.targetHandles.sort(function(a, b) {\n\t\t\treturn a.index - b.index;\n\t\t});\n\n\t\treturn $.targetHandles;\n\t};\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tvar target = event.target;\n\t\tvar founds = {};\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tvar isFound = false;\n\t\t\t$.each($.targetHandles, function(index, targetHandle) {\n\t\t\t\tvar name = targetHandle.name;\n\t\t\t\tif (!isFound && !founds[name] && targetHandle.hasOwnProperty('handle')) {\n\t\t\t\t\t$.targets[name] = targetHandle.handle(event, target);\n\t\t\t\t\tif ($.targets[name]) {\n\t\t\t\t\t\tfounds[name] = true;\n\t\t\t\t\t\tif (targetHandle.isContinue !== true) {\n\t\t\t\t\t\t\tisFound = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!founds[name]) {\n\t\t\t\t\t\tif (targetHandle.isReset !== false)\n\t\t\t\t\t\t\t$.targets[name] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (isFound) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\twindow.addEventListener('click', function(event) { //解决touch与click的target不一致的问题(比如链接边缘点击时，touch的target为html，而click的target为A)\n\t\tvar target = event.target;\n\t\tvar isFound = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.tagName === 'A') {\n\t\t\t\t$.each($.targetHandles, function(index, targetHandle) {\n\t\t\t\t\tvar name = targetHandle.name;\n\t\t\t\t\tif (targetHandle.hasOwnProperty('handle')) {\n\t\t\t\t\t\tif (targetHandle.handle(event, target)) {\n\t\t\t\t\t\t\tisFound = true;\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (isFound) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(mui, window, document);\n/**\n * fixed trim\n * @param {type} undefined\n * @returns {undefined}\n */\n(function(undefined) {\n\tif (String.prototype.trim === undefined) { // fix for iOS 3.2\n\t\tString.prototype.trim = function() {\n\t\t\treturn this.replace(/^\\s+|\\s+$/g, '');\n\t\t};\n\t}\n\tObject.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {\n\t\tobj['__proto__'] = proto;\n\t\treturn obj;\n\t};\n\n})();\n/**\n * fixed CustomEvent\n */\n(function() {\n\tif (typeof window.CustomEvent === 'undefined') {\n\t\tfunction CustomEvent(event, params) {\n\t\t\tparams = params || {\n\t\t\t\tbubbles: false,\n\t\t\t\tcancelable: false,\n\t\t\t\tdetail: undefined\n\t\t\t};\n\t\t\tvar evt = document.createEvent('Events');\n\t\t\tvar bubbles = true;\n\t\t\tfor (var name in params) {\n\t\t\t\t(name === 'bubbles') ? (bubbles = !!params[name]) : (evt[name] = params[name]);\n\t\t\t}\n\t\t\tevt.initEvent(event, bubbles, true);\n\t\t\treturn evt;\n\t\t};\n\t\tCustomEvent.prototype = window.Event.prototype;\n\t\twindow.CustomEvent = CustomEvent;\n\t}\n})();\n/*\n\tA shim for non ES5 supporting browsers.\n\tAdds function bind to Function prototype, so that you can do partial application.\n\tWorks 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.\n*/\n\nFunction.prototype.bind = Function.prototype.bind || function(to) {\n\t// Make an array of our arguments, starting from second argument\n\tvar partial = Array.prototype.splice.call(arguments, 1),\n\t\t// We'll need the original function.\n\t\tfn = this;\n\tvar bound = function() {\n\t\t\t// Join the already applied arguments to the now called ones (after converting to an array again).\n\t\t\tvar args = partial.concat(Array.prototype.splice.call(arguments, 0));\n\t\t\t// If not being called as a constructor\n\t\t\tif (!(this instanceof bound)) {\n\t\t\t\t// return the result of the function called bound to target and partially applied.\n\t\t\t\treturn fn.apply(to, args);\n\t\t\t}\n\t\t\t// If being called as a constructor, apply the function bound to self.\n\t\t\tfn.apply(this, args);\n\t\t}\n\t\t// Attach the prototype of the function to our newly created function.\n\tbound.prototype = fn.prototype;\n\treturn bound;\n};\n/**\n * mui fixed classList\n * @param {type} document\n * @returns {undefined}\n */\n(function(document) {\n    if (!(\"classList\" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {\n\n        Object.defineProperty(HTMLElement.prototype, 'classList', {\n            get: function() {\n                var self = this;\n                function update(fn) {\n                    return function(value) {\n                        var classes = self.className.split(/\\s+/),\n                                index = classes.indexOf(value);\n\n                        fn(classes, index, value);\n                        self.className = classes.join(\" \");\n                    };\n                }\n\n                var ret = {\n                    add: update(function(classes, index, value) {\n                        ~index || classes.push(value);\n                    }),\n                    remove: update(function(classes, index) {\n                        ~index && classes.splice(index, 1);\n                    }),\n                    toggle: update(function(classes, index, value) {\n                        ~index ? classes.splice(index, 1) : classes.push(value);\n                    }),\n                    contains: function(value) {\n                        return !!~self.className.split(/\\s+/).indexOf(value);\n                    },\n                    item: function(i) {\n                        return self.className.split(/\\s+/)[i] || null;\n                    }\n                };\n\n                Object.defineProperty(ret, 'length', {\n                    get: function() {\n                        return self.className.split(/\\s+/).length;\n                    }\n                });\n\n                return ret;\n            }\n        });\n    }\n})(document);\n\n/**\n * mui fixed requestAnimationFrame\n * @param {type} window\n * @returns {undefined}\n */\n(function(window) {\n\tif (!window.requestAnimationFrame) {\n\t\tvar lastTime = 0;\n\t\twindow.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) {\n\t\t\tvar currTime = new Date().getTime();\n\t\t\tvar timeToCall = Math.max(0, 16.7 - (currTime - lastTime));\n\t\t\tvar id = window.setTimeout(function() {\n\t\t\t\tcallback(currTime + timeToCall);\n\t\t\t}, timeToCall);\n\t\t\tlastTime = currTime + timeToCall;\n\t\t\treturn id;\n\t\t};\n\t\twindow.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) {\n\t\t\tclearTimeout(id);\n\t\t};\n\t};\n}(window));\n/**\n * fastclick(only for radio,checkbox)\n */\n(function($, window, name) {\n\tif (!$.os.android && !$.os.ios) { //目前仅识别android和ios\n\t\treturn;\n\t}\n\tif (window.FastClick) {\n\t\treturn;\n\t}\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'LABEL') {\n\t\t\tif (target.parentNode) {\n\t\t\t\ttarget = target.parentNode.querySelector('input');\n\t\t\t}\n\t\t}\n\t\tif (target && (target.type === 'radio' || target.type === 'checkbox')) {\n\t\t\tif (!target.disabled) { //disabled\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 40,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\tvar dispatchEvent = function(event) {\n\t\tvar targetElement = $.targets.click;\n\t\tif (targetElement) {\n\t\t\tvar clickEvent, touch;\n\t\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect\n\t\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\t\ttouch = event.detail.gesture.changedTouches[0];\n\t\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\t\tclickEvent = document.createEvent('MouseEvents');\n\t\t\tclickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\t\tclickEvent.forwardedTouchEvent = true;\n\t\t\ttargetElement.dispatchEvent(clickEvent);\n\t\t\tevent.detail && event.detail.gesture.preventDefault();\n\t\t}\n\t};\n\twindow.addEventListener('tap', dispatchEvent);\n\twindow.addEventListener('doubletap', dispatchEvent);\n\t//捕获\n\twindow.addEventListener('click', function(event) {\n\t\tif ($.targets.click) {\n\t\t\tif (!event.forwardedTouchEvent) { //stop click\n\t\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t} else {\n\t\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation\n\t\t\t\t\tevent.propagationStopped = true;\n\t\t\t\t}\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, true);\n\n})(mui, window, 'click');\n(function($, document) {\n\t$(function() {\n\t\tif (!$.os.ios) {\n\t\t\treturn;\n\t\t}\n\t\tvar CLASS_FOCUSIN = 'mui-focusin';\n\t\tvar CLASS_BAR_TAB = 'mui-bar-tab';\n\t\tvar CLASS_BAR_FOOTER = 'mui-bar-footer';\n\t\tvar CLASS_BAR_FOOTER_SECONDARY = 'mui-bar-footer-secondary';\n\t\tvar CLASS_BAR_FOOTER_SECONDARY_TAB = 'mui-bar-footer-secondary-tab';\n\t\t// var content = document.querySelector('.' + CLASS_CONTENT);\n\t\t// if (content) {\n\t\t// \tdocument.body.insertBefore(content, document.body.firstElementChild);\n\t\t// }\n\t\tdocument.addEventListener('focusin', function(e) {\n\t\t\tif ($.os.plus) { //在父webview里边不fix\n\t\t\t\tif (window.plus) {\n\t\t\t\t\tif (plus.webview.currentWebview().children().length > 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar target = e.target;\n\t\t\t//TODO 需考虑所有键盘弹起的情况\n\t\t\tif (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) {\n\t\t\t\tif (target.disabled || target.readOnly) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdocument.body.classList.add(CLASS_FOCUSIN);\n\t\t\t\tvar isFooter = false;\n\t\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\t\tvar classList = target.classList;\n\t\t\t\t\tif (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) {\n\t\t\t\t\t\tisFooter = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isFooter) {\n\t\t\t\t\tvar scrollTop = document.body.scrollHeight;\n\t\t\t\t\tvar scrollLeft = document.body.scrollLeft;\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\twindow.scrollTo(scrollLeft, scrollTop);\n\t\t\t\t\t}, 20);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tdocument.addEventListener('focusout', function(e) {\n\t\t\tvar classList = document.body.classList;\n\t\t\tif (classList.contains(CLASS_FOCUSIN)) {\n\t\t\t\tclassList.remove(CLASS_FOCUSIN);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twindow.scrollTo(document.body.scrollLeft, document.body.scrollTop);\n\t\t\t\t}, 20);\n\t\t\t}\n\t\t});\n\t});\n})(mui, document);\n/**\n * mui namespace(optimization)\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.namespace = 'mui';\n\t$.classNamePrefix = $.namespace + '-';\n\t$.classSelectorPrefix = '.' + $.classNamePrefix;\n\t/**\n\t * 返回正确的className\n\t * @param {type} className\n\t * @returns {String}\n\t */\n\t$.className = function(className) {\n\t\treturn $.classNamePrefix + className;\n\t};\n\t/**\n\t * 返回正确的classSelector\n\t * @param {type} classSelector\n\t * @returns {String}\n\t */\n\t$.classSelector = function(classSelector) {\n\t\treturn classSelector.replace(/\\./g, $.classSelectorPrefix);\n\t};\n\t/**\n         * 返回正确的eventName\n         * @param {type} event\n         * @param {type} module\n         * @returns {String}\n         */\n\t$.eventName = function(event, module) {\n\t\treturn event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : '');\n\t};\n})(mui);\n\n/**\n * mui gestures\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\t$.gestures = {\n\t\tsession: {}\n\t};\n\t/**\n\t * Gesture preventDefault\n\t * @param {type} e\n\t * @returns {undefined}\n\t */\n\t$.preventDefault = function(e) {\n\t\te.preventDefault();\n\t};\n\t/**\n\t * Gesture stopPropagation\n\t * @param {type} e\n\t * @returns {undefined}\n\t */\n\t$.stopPropagation = function(e) {\n\t\te.stopPropagation();\n\t};\n\n\t/**\n\t * register gesture\n\t * @param {type} gesture\n\t * @returns {$.gestures}\n\t */\n\t$.addGesture = function(gesture) {\n\t\treturn $.addAction('gestures', gesture);\n\n\t};\n\n\tvar round = Math.round;\n\tvar abs = Math.abs;\n\tvar sqrt = Math.sqrt;\n\tvar atan = Math.atan;\n\tvar atan2 = Math.atan2;\n\t/**\n\t * distance\n\t * @param {type} p1\n\t * @param {type} p2\n\t * @returns {Number}\n\t */\n\tvar getDistance = function(p1, p2, props) {\n\t\tif (!props) {\n\t\t\tprops = ['x', 'y'];\n\t\t}\n\t\tvar x = p2[props[0]] - p1[props[0]];\n\t\tvar y = p2[props[1]] - p1[props[1]];\n\t\treturn sqrt((x * x) + (y * y));\n\t};\n\t/**\n\t * scale\n\t * @param {Object} starts\n\t * @param {Object} moves\n\t */\n\tvar getScale = function(starts, moves) {\n\t\tif (starts.length >= 2 && moves.length >= 2) {\n\t\t\tvar props = ['pageX', 'pageY'];\n\t\t\treturn getDistance(moves[1], moves[0], props) / getDistance(starts[1], starts[0], props);\n\t\t}\n\t\treturn 1;\n\t};\n\t/**\n\t * angle\n\t * @param {type} p1\n\t * @param {type} p2\n\t * @returns {Number}\n\t */\n\tvar getAngle = function(p1, p2, props) {\n\t\tif (!props) {\n\t\t\tprops = ['x', 'y'];\n\t\t}\n\t\tvar x = p2[props[0]] - p1[props[0]];\n\t\tvar y = p2[props[1]] - p1[props[1]];\n\t\treturn atan2(y, x) * 180 / Math.PI;\n\t};\n\t/**\n\t * direction\n\t * @param {Object} x\n\t * @param {Object} y\n\t */\n\tvar getDirection = function(x, y) {\n\t\tif (x === y) {\n\t\t\treturn '';\n\t\t}\n\t\tif (abs(x) >= abs(y)) {\n\t\t\treturn x > 0 ? 'left' : 'right';\n\t\t}\n\t\treturn y > 0 ? 'up' : 'down';\n\t};\n\t/**\n\t * rotation\n\t * @param {Object} start\n\t * @param {Object} end\n\t */\n\tvar getRotation = function(start, end) {\n\t\tvar props = ['pageX', 'pageY'];\n\t\treturn getAngle(end[1], end[0], props) - getAngle(start[1], start[0], props);\n\t};\n\t/**\n\t * px per ms\n\t * @param {Object} deltaTime\n\t * @param {Object} x\n\t * @param {Object} y\n\t */\n\tvar getVelocity = function(deltaTime, x, y) {\n\t\treturn {\n\t\t\tx: x / deltaTime || 0,\n\t\t\ty: y / deltaTime || 0\n\t\t};\n\t};\n\t/**\n\t * detect gestures\n\t * @param {type} event\n\t * @param {type} touch\n\t * @returns {undefined}\n\t */\n\tvar detect = function(event, touch) {\n\t\tif ($.gestures.stoped) {\n\t\t\treturn;\n\t\t}\n\t\t$.doAction('gestures', function(index, gesture) {\n\t\t\tif (!$.gestures.stoped) {\n\t\t\t\tif ($.options.gestureConfig[gesture.name] !== false) {\n\t\t\t\t\tgesture.handle(event, touch);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t * 暂时无用\n\t * @param {Object} node\n\t * @param {Object} parent\n\t */\n\tvar hasParent = function(node, parent) {\n\t\twhile (node) {\n\t\t\tif (node == parent) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar uniqueArray = function(src, key, sort) {\n\t\tvar results = [];\n\t\tvar values = [];\n\t\tvar i = 0;\n\n\t\twhile (i < src.length) {\n\t\t\tvar val = key ? src[i][key] : src[i];\n\t\t\tif (values.indexOf(val) < 0) {\n\t\t\t\tresults.push(src[i]);\n\t\t\t}\n\t\t\tvalues[i] = val;\n\t\t\ti++;\n\t\t}\n\n\t\tif (sort) {\n\t\t\tif (!key) {\n\t\t\t\tresults = results.sort();\n\t\t\t} else {\n\t\t\t\tresults = results.sort(function sortUniqueArray(a, b) {\n\t\t\t\t\treturn a[key] > b[key];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t};\n\tvar getMultiCenter = function(touches) {\n\t\tvar touchesLength = touches.length;\n\t\tif (touchesLength === 1) {\n\t\t\treturn {\n\t\t\t\tx: round(touches[0].pageX),\n\t\t\t\ty: round(touches[0].pageY)\n\t\t\t};\n\t\t}\n\n\t\tvar x = 0;\n\t\tvar y = 0;\n\t\tvar i = 0;\n\t\twhile (i < touchesLength) {\n\t\t\tx += touches[i].pageX;\n\t\t\ty += touches[i].pageY;\n\t\t\ti++;\n\t\t}\n\n\t\treturn {\n\t\t\tx: round(x / touchesLength),\n\t\t\ty: round(y / touchesLength)\n\t\t};\n\t};\n\tvar multiTouch = function() {\n\t\treturn $.options.gestureConfig.pinch;\n\t};\n\tvar copySimpleTouchData = function(touch) {\n\t\tvar touches = [];\n\t\tvar i = 0;\n\t\twhile (i < touch.touches.length) {\n\t\t\ttouches[i] = {\n\t\t\t\tpageX: round(touch.touches[i].pageX),\n\t\t\t\tpageY: round(touch.touches[i].pageY)\n\t\t\t};\n\t\t\ti++;\n\t\t}\n\t\treturn {\n\t\t\ttimestamp: $.now(),\n\t\t\tgesture: touch.gesture,\n\t\t\ttouches: touches,\n\t\t\tcenter: getMultiCenter(touch.touches),\n\t\t\tdeltaX: touch.deltaX,\n\t\t\tdeltaY: touch.deltaY\n\t\t};\n\t};\n\n\tvar calDelta = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar center = touch.center;\n\t\tvar offset = session.offsetDelta || {};\n\t\tvar prevDelta = session.prevDelta || {};\n\t\tvar prevTouch = session.prevTouch || {};\n\n\t\tif (touch.gesture.type === $.EVENT_START || touch.gesture.type === $.EVENT_END) {\n\t\t\tprevDelta = session.prevDelta = {\n\t\t\t\tx: prevTouch.deltaX || 0,\n\t\t\t\ty: prevTouch.deltaY || 0\n\t\t\t};\n\n\t\t\toffset = session.offsetDelta = {\n\t\t\t\tx: center.x,\n\t\t\t\ty: center.y\n\t\t\t};\n\t\t}\n\t\ttouch.deltaX = prevDelta.x + (center.x - offset.x);\n\t\ttouch.deltaY = prevDelta.y + (center.y - offset.y);\n\t};\n\tvar calTouchData = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar touches = touch.touches;\n\t\tvar touchesLength = touches.length;\n\n\t\tif (!session.firstTouch) {\n\t\t\tsession.firstTouch = copySimpleTouchData(touch);\n\t\t}\n\n\t\tif (multiTouch() && touchesLength > 1 && !session.firstMultiTouch) {\n\t\t\tsession.firstMultiTouch = copySimpleTouchData(touch);\n\t\t} else if (touchesLength === 1) {\n\t\t\tsession.firstMultiTouch = false;\n\t\t}\n\n\t\tvar firstTouch = session.firstTouch;\n\t\tvar firstMultiTouch = session.firstMultiTouch;\n\t\tvar offsetCenter = firstMultiTouch ? firstMultiTouch.center : firstTouch.center;\n\n\t\tvar center = touch.center = getMultiCenter(touches);\n\t\ttouch.timestamp = $.now();\n\t\ttouch.deltaTime = touch.timestamp - firstTouch.timestamp;\n\n\t\ttouch.angle = getAngle(offsetCenter, center);\n\t\ttouch.distance = getDistance(offsetCenter, center);\n\n\t\tcalDelta(touch);\n\n\t\ttouch.offsetDirection = getDirection(touch.deltaX, touch.deltaY);\n\n\t\ttouch.scale = firstMultiTouch ? getScale(firstMultiTouch.touches, touches) : 1;\n\t\ttouch.rotation = firstMultiTouch ? getRotation(firstMultiTouch.touches, touches) : 0;\n\n\t\tcalIntervalTouchData(touch);\n\n\t};\n\tvar CAL_INTERVAL = 25;\n\tvar calIntervalTouchData = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar last = session.lastInterval || touch;\n\t\tvar deltaTime = touch.timestamp - last.timestamp;\n\t\tvar velocity;\n\t\tvar velocityX;\n\t\tvar velocityY;\n\t\tvar direction;\n\n\t\tif (touch.gesture.type != $.EVENT_CANCEL && (deltaTime > CAL_INTERVAL || last.velocity === undefined)) {\n\t\t\tvar deltaX = last.deltaX - touch.deltaX;\n\t\t\tvar deltaY = last.deltaY - touch.deltaY;\n\n\t\t\tvar v = getVelocity(deltaTime, deltaX, deltaY);\n\t\t\tvelocityX = v.x;\n\t\t\tvelocityY = v.y;\n\t\t\tvelocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n\t\t\tdirection = getDirection(deltaX, deltaY) || last.direction;\n\n\t\t\tsession.lastInterval = touch;\n\t\t} else {\n\t\t\tvelocity = last.velocity;\n\t\t\tvelocityX = last.velocityX;\n\t\t\tvelocityY = last.velocityY;\n\t\t\tdirection = last.direction;\n\t\t}\n\n\t\ttouch.velocity = velocity;\n\t\ttouch.velocityX = velocityX;\n\t\ttouch.velocityY = velocityY;\n\t\ttouch.direction = direction;\n\t};\n\tvar targetIds = {};\n\tvar convertTouches = function(touches) {\n\t\tfor (var i = 0; i < touches.length; i++) {\n\t\t\t!touches['identifier'] && (touches['identifier'] = 0);\n\t\t}\n\t\treturn touches;\n\t};\n\tvar getTouches = function(event, touch) {\n\t\tvar allTouches = convertTouches($.slice.call(event.touches || [event]));\n\n\t\tvar type = event.type;\n\n\t\tvar targetTouches = [];\n\t\tvar changedTargetTouches = [];\n\n\t\t//当touchstart或touchmove且touches长度为1，直接获得all和changed\n\t\tif ((type === $.EVENT_START || type === $.EVENT_MOVE) && allTouches.length === 1) {\n\t\t\ttargetIds[allTouches[0].identifier] = true;\n\t\t\ttargetTouches = allTouches;\n\t\t\tchangedTargetTouches = allTouches;\n\t\t\ttouch.target = event.target;\n\t\t} else {\n\t\t\tvar i = 0;\n\t\t\tvar targetTouches = [];\n\t\t\tvar changedTargetTouches = [];\n\t\t\tvar changedTouches = convertTouches($.slice.call(event.changedTouches || [event]));\n\n\t\t\ttouch.target = event.target;\n\t\t\tvar sessionTarget = $.gestures.session.target || event.target;\n\t\t\ttargetTouches = allTouches.filter(function(touch) {\n\t\t\t\treturn hasParent(touch.target, sessionTarget);\n\t\t\t});\n\n\t\t\tif (type === $.EVENT_START) {\n\t\t\t\ti = 0;\n\t\t\t\twhile (i < targetTouches.length) {\n\t\t\t\t\ttargetIds[targetTouches[i].identifier] = true;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = 0;\n\t\t\twhile (i < changedTouches.length) {\n\t\t\t\tif (targetIds[changedTouches[i].identifier]) {\n\t\t\t\t\tchangedTargetTouches.push(changedTouches[i]);\n\t\t\t\t}\n\t\t\t\tif (type === $.EVENT_END || type === $.EVENT_CANCEL) {\n\t\t\t\t\tdelete targetIds[changedTouches[i].identifier];\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif (!changedTargetTouches.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\ttargetTouches = uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true);\n\t\tvar touchesLength = targetTouches.length;\n\t\tvar changedTouchesLength = changedTargetTouches.length;\n\t\tif (type === $.EVENT_START && touchesLength - changedTouchesLength === 0) { //first\n\t\t\ttouch.isFirst = true;\n\t\t\t$.gestures.touch = $.gestures.session = {\n\t\t\t\ttarget: event.target\n\t\t\t};\n\t\t}\n\t\ttouch.isFinal = ((type === $.EVENT_END || type === $.EVENT_CANCEL) && (touchesLength - changedTouchesLength === 0));\n\n\t\ttouch.touches = targetTouches;\n\t\ttouch.changedTouches = changedTargetTouches;\n\t\treturn true;\n\n\t};\n\tvar handleTouchEvent = function(event) {\n\t\tvar touch = {\n\t\t\tgesture: event\n\t\t};\n\t\tvar touches = getTouches(event, touch);\n\t\tif (!touches) {\n\t\t\treturn;\n\t\t}\n\t\tcalTouchData(touch);\n\t\tdetect(event, touch);\n\t\t$.gestures.session.prevTouch = touch;\n\t\tif (event.type === $.EVENT_END && !$.isTouchable) {\n\t\t\t$.gestures.touch = $.gestures.session = {};\n\t\t}\n\t};\n\twindow.addEventListener($.EVENT_START, handleTouchEvent);\n\twindow.addEventListener($.EVENT_MOVE, handleTouchEvent);\n\twindow.addEventListener($.EVENT_END, handleTouchEvent);\n\twindow.addEventListener($.EVENT_CANCEL, handleTouchEvent);\n\t//fixed hashchange(android)\n\twindow.addEventListener($.EVENT_CLICK, function(e) {\n\t\t//TODO 应该判断当前target是不是在targets.popover内部，而不是非要相等\n\t\tif (($.os.android || $.os.ios) && (($.targets.popover && e.target === $.targets.popover) || ($.targets.tab) || $.targets.offcanvas || $.targets.modal)) {\n\t\t\te.preventDefault();\n\t\t}\n\t}, true);\n\n\n\t//增加原生滚动识别\n\t$.isScrolling = false;\n\tvar scrollingTimeout = null;\n\twindow.addEventListener('scroll', function() {\n\t\t$.isScrolling = true;\n\t\tscrollingTimeout && clearTimeout(scrollingTimeout);\n\t\tscrollingTimeout = setTimeout(function() {\n\t\t\t$.isScrolling = false;\n\t\t}, 250);\n\t});\n})(mui, window);\n/**\n * mui gesture flick[left|right|up|down]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar flickStartTime = 0;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tvar now = $.now();\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (now - flickStartTime > 300) {\n\t\t\t\t\tflickStartTime = now;\n\t\t\t\t\tsession.flickStart = touch.center;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\ttouch.flick = false;\n\t\t\t\tif (session.flickStart && options.flickMaxTime > (now - flickStartTime) && touch.distance > options.flickMinDistince) {\n\t\t\t\t\ttouch.flick = true;\n\t\t\t\t\ttouch.flickTime = now - flickStartTime;\n\t\t\t\t\ttouch.flickDistanceX = touch.center.x - session.flickStart.x;\n\t\t\t\t\ttouch.flickDistanceY = touch.center.y - session.flickStart.y;\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t};\n\t/**\n\t * mui gesture flick\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 5,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tflickMaxTime: 200,\n\t\t\tflickMinDistince: 10\n\t\t}\n\t});\n})(mui, 'flick');\n/**\n * mui gesture swipe[left|right|up|down]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tif (event.type === $.EVENT_END || event.type === $.EVENT_CANCEL) {\n\t\t\tvar options = this.options;\n\t\t\ttouch.swipe = false;\n\t\t\t//TODO 后续根据velocity计算\n\t\t\tif (touch.direction && options.swipeMaxTime > touch.deltaTime && touch.distance > options.swipeMinDistince) {\n\t\t\t\ttouch.swipe = true;\n\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * mui gesture swipe\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tswipeMaxTime: 300,\n\t\t\tswipeMinDistince: 18\n\t\t}\n\t});\n})(mui, 'swipe');\n/**\n * mui gesture drag[start|left|right|up|down|end]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (!touch.direction || !session.target) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//修正direction,可在session期间自行锁定拖拽方向，方便开发scroll类不同方向拖拽插件嵌套\n\t\t\t\tif (session.lockDirection && session.startDirection) {\n\t\t\t\t\tif (session.startDirection && session.startDirection !== touch.direction) {\n\t\t\t\t\t\tif (session.startDirection === 'up' || session.startDirection === 'down') {\n\t\t\t\t\t\t\ttouch.direction = touch.deltaY < 0 ? 'up' : 'down';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttouch.direction = touch.deltaX < 0 ? 'left' : 'right';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!session.drag) {\n\t\t\t\t\tsession.drag = true;\n\t\t\t\t\t$.trigger(session.target, name + 'start', touch);\n\t\t\t\t}\n\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif (session.drag && touch.isFinal) {\n\t\t\t\t\t$.trigger(session.target, name + 'end', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture drag\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 20,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1\n\t\t}\n\t});\n})(mui, 'drag');\n/**\n * mui gesture tap and doubleTap\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar lastTarget;\n\tvar lastTapTime;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_END:\n\t\t\t\tif (!touch.isFinal) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar target = session.target;\n\t\t\t\tif (!target || (target.disabled || (target.classList && target.classList.contains('mui-disabled')))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (touch.distance < options.tapMaxDistance && touch.deltaTime < options.tapMaxTime) {\n\t\t\t\t\tif ($.options.gestureConfig.doubletap && lastTarget && (lastTarget === target)) { //same target\n\t\t\t\t\t\tif (lastTapTime && (touch.timestamp - lastTapTime) < options.tapMaxInterval) {\n\t\t\t\t\t\t\t$.trigger(target, 'doubletap', touch);\n\t\t\t\t\t\t\tlastTapTime = $.now();\n\t\t\t\t\t\t\tlastTarget = target;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$.trigger(target, name, touch);\n\t\t\t\t\tlastTapTime = $.now();\n\t\t\t\t\tlastTarget = target;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture tap\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 30,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\ttapMaxInterval: 300,\n\t\t\ttapMaxDistance: 5,\n\t\t\ttapMaxTime: 250\n\t\t}\n\t});\n})(mui, 'tap');\n/**\n * mui gesture longtap\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar timer;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t}, options.holdTimeout);\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (touch.distance > options.holdThreshold) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture longtap\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\tholdTimeout: 500,\n\t\t\tholdThreshold: 2\n\t\t}\n\t});\n})(mui, 'longtap');\n/**\n * mui gesture hold\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar timer;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tif ($.options.gestureConfig.hold) {\n\t\t\t\t\ttimer && clearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t\ttouch.hold = true;\n\t\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\t}, options.holdTimeout);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer) && (timer = null);\n\t\t\t\t\t$.trigger(session.target, 'release', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture hold\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\tholdTimeout: 0\n\t\t}\n\t});\n})(mui, 'hold');\n/**\n * mui gesture pinch\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar options = this.options;\n\t\tvar session = $.gestures.session;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif ($.options.gestureConfig.pinch) {\n\t\t\t\t\tif (touch.touches.length < 2) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!session.pinch) { //start\n\t\t\t\t\t\tsession.pinch = true;\n\t\t\t\t\t\t$.trigger(session.target, name + 'start', touch);\n\t\t\t\t\t}\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\tvar scale = touch.scale;\n\t\t\t\t\tvar rotation = touch.rotation;\n\t\t\t\t\tvar lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale;\n\t\t\t\t\tvar scaleDiff = 0.000000000001; //防止scale与lastScale相等，不触发事件的情况。\n\t\t\t\t\tif (scale > lastScale) { //out\n\t\t\t\t\t\tlastScale = scale - scaleDiff;\n\t\t\t\t\t\t$.trigger(session.target, name + 'out', touch);\n\t\t\t\t\t} //in\n\t\t\t\t\telse if (scale < lastScale) {\n\t\t\t\t\t\tlastScale = scale + scaleDiff;\n\t\t\t\t\t\t$.trigger(session.target, name + 'in', touch);\n\t\t\t\t\t}\n\t\t\t\t\tif (Math.abs(rotation) > options.minRotationAngle) {\n\t\t\t\t\t\t$.trigger(session.target, 'rotate', touch);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) {\n\t\t\t\t\tsession.pinch = false;\n\t\t\t\t\t$.trigger(session.target, name + 'end', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture pinch\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tminRotationAngle: 0\n\t\t}\n\t});\n})(mui, 'pinch');\n/**\n * mui.init\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.global = $.options = {\n\t\tgestureConfig: {\n\t\t\ttap: true,\n\t\t\tdoubletap: false,\n\t\t\tlongtap: false,\n\t\t\thold: false,\n\t\t\tflick: true,\n\t\t\tswipe: true,\n\t\t\tdrag: true,\n\t\t\tpinch: false\n\t\t}\n\t};\n\t/**\n\t *\n\t * @param {type} options\n\t * @returns {undefined}\n\t */\n\t$.initGlobal = function(options) {\n\t\t$.options = $.extend(true, $.global, options);\n\t\treturn this;\n\t};\n\tvar inits = {};\n\n\t/**\n\t * 单页配置 初始化\n\t * @param {object} options\n\t */\n\t$.init = function(options) {\n\t\t$.options = $.extend(true, $.global, options || {});\n\t\t$.ready(function() {\n\t\t\t$.doAction('inits', function(index, init) {\n\t\t\t\tvar isInit = !!(!inits[init.name] || init.repeat);\n\t\t\t\tif (isInit) {\n\t\t\t\t\tinit.handle.call($);\n\t\t\t\t\tinits[init.name] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn this;\n\t};\n\n\t/**\n\t * 增加初始化执行流程\n\t * @param {function} init\n\t */\n\t$.addInit = function(init) {\n\t\treturn $.addAction('inits', init);\n\t};\n\t/**\n\t * 处理html5版本subpages \n\t */\n\t$.addInit({\n\t\tname: 'iframe',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar subpages = options.subpages || [];\n\t\t\tif (!$.os.plus && subpages.length) {\n\t\t\t\t//暂时只处理单个subpage。后续可以考虑支持多个subpage\n\t\t\t\tcreateIframe(subpages[0]);\n\t\t\t}\n\t\t}\n\t});\n\tvar createIframe = function(options) {\n\t\tvar wrapper = document.createElement('div');\n\t\twrapper.className = 'mui-iframe-wrapper';\n\t\tvar styles = options.styles || {};\n\t\tif (typeof styles.top !== 'string') {\n\t\t\tstyles.top = '0px';\n\t\t}\n\t\tif (typeof styles.bottom !== 'string') {\n\t\t\tstyles.bottom = '0px';\n\t\t}\n\t\twrapper.style.top = styles.top;\n\t\twrapper.style.bottom = styles.bottom;\n\t\tvar iframe = document.createElement('iframe');\n\t\tiframe.src = options.url;\n\t\tiframe.id = options.id || options.url;\n\t\tiframe.name = iframe.id;\n\t\twrapper.appendChild(iframe);\n\t\tdocument.body.appendChild(wrapper);\n\t\t//目前仅处理微信\n\t\t$.os.wechat && handleScroll(wrapper, iframe);\n\t};\n\n\tfunction handleScroll(wrapper, iframe) {\n\t\tvar key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src;\n\t\tvar scrollTop = (parseFloat(localStorage.getItem(key)) || 0);\n\t\tif (scrollTop) {\n\t\t\t(function(y) {\n\t\t\t\tiframe.onload = function() {\n\t\t\t\t\twindow.scrollTo(0, y);\n\t\t\t\t};\n\t\t\t})(scrollTop);\n\t\t}\n\t\tsetInterval(function() {\n\t\t\tvar _scrollTop = window.scrollY;\n\t\t\tif (scrollTop !== _scrollTop) {\n\t\t\t\tlocalStorage.setItem(key, _scrollTop + '');\n\t\t\t\tscrollTop = _scrollTop;\n\t\t\t}\n\t\t}, 100);\n\t};\n\t$(function() {\n\t\tvar classList = document.body.classList;\n\t\tvar os = [];\n\t\tif ($.os.ios) {\n\t\t\tos.push({\n\t\t\t\tos: 'ios',\n\t\t\t\tversion: $.os.version\n\t\t\t});\n\t\t\tclassList.add('mui-ios');\n\t\t} else if ($.os.android) {\n\t\t\tos.push({\n\t\t\t\tos: 'android',\n\t\t\t\tversion: $.os.version\n\t\t\t});\n\t\t\tclassList.add('mui-android');\n\t\t}\n\t\tif ($.os.wechat) {\n\t\t\tos.push({\n\t\t\t\tos: 'wechat',\n\t\t\t\tversion: $.os.wechat.version\n\t\t\t});\n\t\t\tclassList.add('mui-wechat');\n\t\t}\n\t\tif (os.length) {\n\t\t\t$.each(os, function(index, osObj) {\n\t\t\t\tvar version = '';\n\t\t\t\tvar classArray = [];\n\t\t\t\tif (osObj.version) {\n\t\t\t\t\t$.each(osObj.version.split('.'), function(i, v) {\n\t\t\t\t\t\tversion = version + (version ? '-' : '') + v;\n\t\t\t\t\t\tclassList.add($.className(osObj.os + '-' + version));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(mui);\n/**\n * mui.init 5+\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\tvar defaultOptions = {\n\t\tswipeBack: false,\n\t\tpreloadPages: [], //5+ lazyLoad webview\n\t\tpreloadLimit: 10, //预加载窗口的数量限制(一旦超出，先进先出)\n\t\tkeyEventBind: {\n\t\t\tbackbutton: true,\n\t\t\tmenubutton: true\n\t\t},\n\t\ttitleConfig: {\n\t\t\theight: \"44px\",\n\t\t\tbackgroundColor: \"#f7f7f7\", //导航栏背景色\n\t\t\tbottomBorderColor: \"#cccccc\", //底部边线颜色\n\t\t\ttitle: { //标题配置\n\t\t\t\ttext: \"\", //标题文字\n\t\t\t\tposition: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\"\n\t\t\t\t},\n\t\t\t\tstyles: {\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talign: \"center\",\n\t\t\t\t\tfamily: \"'Helvetica Neue',Helvetica,sans-serif\",\n\t\t\t\t\tsize: \"17px\",\n\t\t\t\t\tstyle: \"normal\",\n\t\t\t\t\tweight: \"normal\",\n\t\t\t\t\tfontSrc: \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tback: {\n\t\t\t\timage: {\n\t\t\t\t\tbase64Data: '',\n\t\t\t\t\timgSrc: '',\n\t\t\t\t\tsprite: {\n\t\t\t\t\t\ttop: '0px',\n\t\t\t\t\t\tleft: '0px',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\theight: '100%'\n\t\t\t\t\t},\n\t\t\t\t\tposition: {\n\t\t\t\t\t\ttop: \"10px\",\n\t\t\t\t\t\tleft: \"10px\",\n\t\t\t\t\t\twidth: \"24px\",\n\t\t\t\t\t\theight: \"24px\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//默认页面动画\n\tvar defaultShow = {\n\t\tevent:\"titleUpdate\",\n\t\tautoShow: true,\n\t\tduration: 300,\n\t\taniShow: 'slide-in-right',\n\t\textras:{}\n\t};\n\t//若执行了显示动画初始化操作，则要覆盖默认配置\n\tif($.options.show) {\n\t\tdefaultShow = $.extend(true, defaultShow, $.options.show);\n\t}\n\n\t$.currentWebview = null;\n\n\t$.extend(true, $.global, defaultOptions);\n\t$.extend(true, $.options, defaultOptions);\n\t/**\n\t * 等待动画配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.waitingOptions = function(options) {\n\t\treturn $.extend(true, {}, {\n\t\t\tautoShow: true,\n\t\t\ttitle: '',\n\t\t\tmodal: false\n\t\t}, options);\n\t};\n\t/**\n\t * 窗口显示配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.showOptions = function(options) {\n\t\treturn $.extend(true, {}, defaultShow, options);\n\t};\n\t/**\n\t * 窗口默认配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.windowOptions = function(options) {\n\t\treturn $.extend({\n\t\t\tscalable: false,\n\t\t\tbounce: \"\" //vertical\n\t\t}, options);\n\t};\n\t/**\n\t * plusReady\n\t * @param {type} callback\n\t * @returns {_L6.$}\n\t */\n\t$.plusReady = function(callback) {\n\t\tif(window.plus) {\n\t\t\tsetTimeout(function() { //解决callback与plusready事件的执行时机问题(典型案例:showWaiting,closeWaiting)\n\t\t\t\tcallback();\n\t\t\t}, 0);\n\t\t} else {\n\t\t\tdocument.addEventListener(\"plusready\", function() {\n\t\t\t\tcallback();\n\t\t\t}, false);\n\t\t}\n\t\treturn this;\n\t};\n\t/**\n\t * 5+ event(5+没提供之前我自己实现)\n\t * @param {type} webview\n\t * @param {type} eventType\n\t * @param {type} data\n\t * @returns {undefined}\n\t */\n\t$.fire = function(webview, eventType, data) {\n\t\tif(webview) {\n\t\t\tif(typeof data === 'undefined') {\n\t\t\t\tdata = '';\n\t\t\t} else if(typeof data === 'boolean' || typeof data === 'number') {\n\t\t\t\twebview.evalJS(\"typeof mui!=='undefined'&&mui.receive('\" + eventType + \"',\" + data + \")\");\n\t\t\t\treturn;\n\t\t\t} else if($.isPlainObject(data) || $.isArray(data)) {\n\t\t\t\tdata = JSON.stringify(data || {}).replace(/\\'/g, \"\\\\u0027\").replace(/\\\\/g, \"\\\\u005c\");\n\t\t\t}\n\t\t\twebview.evalJS(\"typeof mui!=='undefined'&&mui.receive('\" + eventType + \"','\" + data + \"')\");\n\t\t}\n\t};\n\t/**\n\t * 5+ event(5+没提供之前我自己实现)\n\t * @param {type} eventType\n\t * @param {type} data\n\t * @returns {undefined}\n\t */\n\t$.receive = function(eventType, data) {\n\t\tif(eventType) {\n\t\t\ttry {\n\t\t\t\tif(data && typeof data === 'string') {\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\t}\n\t\t\t} catch(e) {}\n\t\t\t$.trigger(document, eventType, data);\n\t\t}\n\t};\n\tvar triggerPreload = function(webview) {\n\t\tif(!webview.preloaded) { //保证仅触发一次\n\t\t\t$.fire(webview, 'preload');\n\t\t\tvar list = webview.children();\n\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t$.fire(list[i], 'preload');\n\t\t\t}\n\t\t\twebview.preloaded = true;\n\t\t}\n\t};\n\tvar trigger = function(webview, eventType, timeChecked) {\n\t\tif(timeChecked) {\n\t\t\tif(!webview[eventType + 'ed']) {\n\t\t\t\t$.fire(webview, eventType);\n\t\t\t\tvar list = webview.children();\n\t\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t\t$.fire(list[i], eventType);\n\t\t\t\t}\n\t\t\t\twebview[eventType + 'ed'] = true;\n\t\t\t}\n\t\t} else {\n\t\t\t$.fire(webview, eventType);\n\t\t\tvar list = webview.children();\n\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t$.fire(list[i], eventType);\n\t\t\t}\n\t\t}\n\n\t};\n\t/**\n\t * 打开新窗口\n\t * @param {string} url 要打开的页面地址\n\t * @param {string} id 指定页面ID\n\t * @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}}\n\t */\n\t$.openWindow = function(url, id, options) {\n\t\tif(typeof url === 'object') {\n\t\t\toptions = url;\n\t\t\turl = options.url;\n\t\t\tid = options.id || url;\n\t\t} else {\n\t\t\tif(typeof id === 'object') {\n\t\t\t\toptions = id;\n\t\t\t\tid = options.id || url;\n\t\t\t} else {\n\t\t\t\tid = id || url;\n\t\t\t}\n\t\t}\n\t\tif(!$.os.plus) {\n\t\t\t//TODO 先临时这么处理：手机上顶层跳，PC上parent跳\n\t\t\tif($.os.ios || $.os.android) {\n\t\t\t\twindow.top.location.href = url;\n\t\t\t} else {\n\t\t\t\twindow.parent.location.href = url;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions = options || {};\n\t\tvar params = options.params || {};\n\t\tvar webview = null,\n\t\t\twebviewCache = null,\n\t\t\tnShow, nWaiting;\n\n\t\tif($.webviews[id]) {\n\t\t\twebviewCache = $.webviews[id];\n\t\t\t//webview真实存在，才能获取\n\t\t\tif(plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = webviewCache.webview;\n\t\t\t}\n\t\t} else if(options.createNew !== true) {\n\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t}\n\n\t\tif(webview) { //已缓存\n\t\t\t//每次show都需要传递动画参数；\n\t\t\t//预加载的动画参数优先级：openWindow配置>preloadPages配置>mui默认配置；\n\t\t\tnShow = webviewCache ? webviewCache.show : defaultShow;\n\t\t\tnShow = options.show ? $.extend(nShow, options.show) : nShow;\n\t\t\tnShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {\n\t\t\t\ttriggerPreload(webview);\n\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t});\n\t\t\tif(webviewCache) {\n\t\t\t\twebviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t}\n\t\t\treturn webview;\n\t\t} else { //新窗口\n\t\t\tif(!url) {\n\t\t\t\tthrow new Error('webview[' + id + '] does not exist');\n\t\t\t}\n\n\t\t\t//显示waiting\n\t\t\tvar waitingConfig = $.waitingOptions(options.waiting);\n\t\t\tif(waitingConfig.autoShow) {\n\t\t\t\tnWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);\n\t\t\t}\n\n\t\t\t//创建页面\n\t\t\toptions = $.extend(options, {\n\t\t\t\tid: id,\n\t\t\t\turl: url\n\t\t\t});\n\n\t\t\twebview = $.createWindow(options);\n\n\t\t\t//显示\n\t\t\tnShow = $.showOptions(options.show);\n\t\t\tif(nShow.autoShow) {\n\t\t\t\tvar showWebview = function() {\n\t\t\t\t\t//关闭等待框\n\t\t\t\t\tif(nWaiting) {\n\t\t\t\t\t\tnWaiting.close();\n\t\t\t\t\t}\n\t\t\t\t\t//显示页面\n\t\t\t\t\twebview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);\n\t\t\t\t\toptions.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t\t};\n\t\t\t\t//titleUpdate触发时机早于loaded，更换为titleUpdate后，可以更早的显示webview\n\t\t\t\twebview.addEventListener(nShow.event, showWebview, false);\n\t\t\t\t//loaded事件发生后，触发预加载和pagebeforeshow事件\n\t\t\t\twebview.addEventListener(\"loaded\", function() {\n\t\t\t\t\ttriggerPreload(webview);\n\t\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t$.openWindowWithTitle = function(options, titleConfig) {\n\t\toptions = options || {};\n\t\tvar url = options.url;\n\t\tvar id = options.id || url;\n\n\t\tif(!$.os.plus) {\n\t\t\t//TODO 先临时这么处理：手机上顶层跳，PC上parent跳\n\t\t\tif($.os.ios || $.os.android) {\n\t\t\t\twindow.top.location.href = url;\n\t\t\t} else {\n\t\t\t\twindow.parent.location.href = url;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar params = options.params || {};\n\t\tvar webview = null,\n\t\t\twebviewCache = null,\n\t\t\tnShow, nWaiting;\n\n\t\tif($.webviews[id]) {\n\t\t\twebviewCache = $.webviews[id];\n\t\t\t//webview真实存在，才能获取\n\t\t\tif(plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = webviewCache.webview;\n\t\t\t}\n\t\t} else if(options.createNew !== true) {\n\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t}\n\n\t\tif(webview) { //已缓存\n\t\t\t//每次show都需要传递动画参数；\n\t\t\t//预加载的动画参数优先级：openWindow配置>preloadPages配置>mui默认配置；\n\t\t\tnShow = webviewCache ? webviewCache.show : defaultShow;\n\t\t\tnShow = options.show ? $.extend(nShow, options.show) : nShow;\n\t\t\tnShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {\n\t\t\t\ttriggerPreload(webview);\n\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t});\n\t\t\tif(webviewCache) {\n\t\t\t\twebviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t}\n\t\t\treturn webview;\n\t\t} else { //新窗口\n\t\t\tif(!url) {\n\t\t\t\tthrow new Error('webview[' + id + '] does not exist');\n\t\t\t}\n\n\t\t\t//显示waiting\n\t\t\tvar waitingConfig = $.waitingOptions(options.waiting);\n\t\t\tif(waitingConfig.autoShow) {\n\t\t\t\tnWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);\n\t\t\t}\n\n\t\t\t//创建页面\n\t\t\toptions = $.extend(options, {\n\t\t\t\tid: id,\n\t\t\t\turl: url\n\t\t\t});\n\n\t\t\twebview = $.createWindow(options);\n\n\t\t\tif(titleConfig) { //处理原生头\n\t\t\t\t$.extend(true, $.options.titleConfig, titleConfig);\n\t\t\t\tvar tid = $.options.titleConfig.id ? $.options.titleConfig.id : id + \"_title\";\n\t\t\t\tvar view = new plus.nativeObj.View(tid, {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\theight: $.options.titleConfig.height,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tdock: \"top\",\n\t\t\t\t\tposition: \"dock\"\n\t\t\t\t});\n\t\t\t\tview.drawRect($.options.titleConfig.backgroundColor); //绘制背景色\n\t\t\t\tvar _b = parseInt($.options.titleConfig.height) - 1;\n\t\t\t\tview.drawRect($.options.titleConfig.bottomBorderColor, {\n\t\t\t\t\ttop: _b + \"px\",\n\t\t\t\t\tleft: \"0px\"\n\t\t\t\t}); //绘制底部边线\n\n\t\t\t\t//绘制文字\n\t\t\t\tif($.options.titleConfig.title.text){\n\t\t\t\t\tvar _title = $.options.titleConfig.title;\n\t\t\t\t\tview.drawText(_title.text,_title.position , _title.styles);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//返回图标绘制\n\t\t\t\tvar _back = $.options.titleConfig.back;\n\t\t\t\tvar backClick = null;\n\t\t\t\t//优先字体\n\n\t\t\t\t//其次是图片\n\t\t\t\tvar _backImage = _back.image;\n\t\t\t\tif(_backImage.base64Data || _backImage.imgSrc) {\n\t\t\t\t\t//TODO 此处需要处理百分比的情况\n\t\t\t\t\tbackClick = {\n\t\t\t\t\t\tleft:parseInt(_backImage.position.left),\n\t\t\t\t\t\tright:parseInt(_backImage.position.left) + parseInt(_backImage.position.width)\n\t\t\t\t\t};\n\t\t\t\t\tvar bitmap = new plus.nativeObj.Bitmap(id + \"_back\");\n\t\t\t\t\tif(_backImage.base64Data) { //优先base64编码字符串\n\t\t\t\t\t\tbitmap.loadBase64Data(_backImage.base64Data);\n\t\t\t\t\t} else { //其次加载图片文件\n\t\t\t\t\t\tbitmap.load(_backImage.imgSrc);\n\t\t\t\t\t}\n\t\t\t\t\tview.drawBitmap(bitmap,_backImage.sprite , _backImage.position);\n\t\t\t\t}\n\n\t\t\t\t//处理点击事件\n\t\t\t\tview.setTouchEventRect({\n\t\t\t\t\ttop: \"0px\",\n\t\t\t\t\tleft: \"0px\",\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\"\n\t\t\t\t});\n\t\t\t\tview.interceptTouchEvent(true);\n\t\t\t\tview.addEventListener(\"click\", function(e) {\n\t\t\t\t\tvar x = e.clientX;\n\t\t\t\t\t\n\t\t\t\t\t//返回按钮点击\n\t\t\t\t\tif(backClick&& x > backClick.left && x < backClick.right){\n\t\t\t\t\t\tif( _back.click && $.isFunction(_back.click)){\n\t\t\t\t\t\t\t_back.click();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\twebview.evalJS(\"window.mui&&mui.back();\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t\twebview.append(view);\n\n\t\t\t}\n\n\t\t\t//显示\n\t\t\tnShow = $.showOptions(options.show);\n\t\t\tif(nShow.autoShow) {\n\t\t\t\t//titleUpdate触发时机早于loaded，更换为titleUpdate后，可以更早的显示webview\n\t\t\t\twebview.addEventListener(nShow.event, function () {\n\t\t\t\t\t//关闭等待框\n\t\t\t\t\tif(nWaiting) {\n\t\t\t\t\t\tnWaiting.close();\n\t\t\t\t\t}\n\t\t\t\t\t//显示页面\n\t\t\t\t\twebview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t/**\n\t * 根据配置信息创建一个webview\n\t * @param {type} options\n\t * @param {type} isCreate\n\t * @returns {webview}\n\t */\n\t$.createWindow = function(options, isCreate) {\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\t\tvar id = options.id || options.url;\n\t\tvar webview;\n\t\tif(options.preload) {\n\t\t\tif($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache\n\t\t\t\twebview = $.webviews[id].webview;\n\t\t\t} else { //新增预加载窗口\n\t\t\t\t//判断是否携带createNew参数，默认为false\n\t\t\t\tif(options.createNew !== true) {\n\t\t\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t\t\t}\n\n\t\t\t\t//之前没有，那就新创建\t\n\t\t\t\tif(!webview) {\n\t\t\t\t\twebview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({\n\t\t\t\t\t\tpreload: true\n\t\t\t\t\t}, options.extras));\n\t\t\t\t\tif(options.subpages) {\n\t\t\t\t\t\t$.each(options.subpages, function(index, subpage) {\n\t\t\t\t\t\t\tvar subpageId = subpage.id || subpage.url;\n\t\t\t\t\t\t\tif(subpageId) { //过滤空对象\n\t\t\t\t\t\t\t\tvar subWebview = plus.webview.getWebviewById(subpageId);\n\t\t\t\t\t\t\t\tif(!subWebview) { //如果该webview不存在，则创建\n\t\t\t\t\t\t\t\t\tsubWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), $.extend({\n\t\t\t\t\t\t\t\t\t\tpreload: true\n\t\t\t\t\t\t\t\t\t}, subpage.extras));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twebview.append(subWebview);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//TODO 理论上，子webview也应该计算到预加载队列中，但这样就麻烦了，要退必须退整体，否则可能出现问题；\n\t\t\t$.webviews[id] = {\n\t\t\t\twebview: webview, //目前仅preload的缓存webview\n\t\t\t\tpreload: true,\n\t\t\t\tshow: $.showOptions(options.show),\n\t\t\t\tafterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯\n\t\t\t};\n\t\t\t//索引该预加载窗口\n\t\t\tvar preloads = $.data.preloads;\n\t\t\tvar index = preloads.indexOf(id);\n\t\t\tif(~index) { //删除已存在的(变相调整插入位置)\n\t\t\t\tpreloads.splice(index, 1);\n\t\t\t}\n\t\t\tpreloads.push(id);\n\t\t\tif(preloads.length > $.options.preloadLimit) {\n\t\t\t\t//先进先出\n\t\t\t\tvar first = $.data.preloads.shift();\n\t\t\t\tvar webviewCache = $.webviews[first];\n\t\t\t\tif(webviewCache && webviewCache.webview) {\n\t\t\t\t\t//需要将自己打开的所有页面，全部close；\n\t\t\t\t\t//关闭该预加载webview\t\n\t\t\t\t\t$.closeAll(webviewCache.webview);\n\t\t\t\t}\n\t\t\t\t//删除缓存\n\t\t\t\tdelete $.webviews[first];\n\t\t\t}\n\t\t} else {\n\t\t\tif(isCreate !== false) { //直接创建非预加载窗口\n\t\t\t\twebview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras);\n\t\t\t\tif(options.subpages) {\n\t\t\t\t\t$.each(options.subpages, function(index, subpage) {\n\t\t\t\t\t\tvar subpageId = subpage.id || subpage.url;\n\t\t\t\t\t\tvar subWebview = plus.webview.getWebviewById(subpageId);\n\t\t\t\t\t\tif(!subWebview) {\n\t\t\t\t\t\t\tsubWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), subpage.extras);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twebview.append(subWebview);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t/**\n\t * 预加载\n\t */\n\t$.preload = function(options) {\n\t\t//调用预加载函数，不管是否传递preload参数，强制变为true\n\t\tif(!options.preload) {\n\t\t\toptions.preload = true;\n\t\t}\n\t\treturn $.createWindow(options);\n\t};\n\n\t/**\n\t *关闭当前webview打开的所有webview；\n\t */\n\t$.closeOpened = function(webview) {\n\t\tvar opened = webview.opened();\n\t\tif(opened) {\n\t\t\tfor(var i = 0, len = opened.length; i < len; i++) {\n\t\t\t\tvar openedWebview = opened[i];\n\t\t\t\tvar open_open = openedWebview.opened();\n\t\t\t\tif(open_open && open_open.length > 0) {\n\t\t\t\t\t//关闭打开的webview\n\t\t\t\t\t$.closeOpened(openedWebview);\n\t\t\t\t\t//关闭自己\n\t\t\t\t\topenedWebview.close(\"none\");\n\t\t\t\t} else {\n\t\t\t\t\t//如果直接孩子节点，就不用关闭了，因为父关闭的时候，会自动关闭子；\n\t\t\t\t\tif(openedWebview.parent() !== webview) {\n\t\t\t\t\t\topenedWebview.close('none');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t$.closeAll = function(webview, aniShow) {\n\t\t$.closeOpened(webview);\n\t\tif(aniShow) {\n\t\t\twebview.close(aniShow);\n\t\t} else {\n\t\t\twebview.close();\n\t\t}\n\t};\n\n\t/**\n\t * 批量创建webview\n\t * @param {type} options\n\t * @returns {undefined}\n\t */\n\t$.createWindows = function(options) {\n\t\t$.each(options, function(index, option) {\n\t\t\t//初始化预加载窗口(创建)和非预加载窗口(仅配置，不创建)\n\t\t\t$.createWindow(option, false);\n\t\t});\n\t};\n\t/**\n\t * 创建当前页面的子webview\n\t * @param {type} options\n\t * @returns {webview}\n\t */\n\t$.appendWebview = function(options) {\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\t\tvar id = options.id || options.url;\n\t\tvar webview;\n\t\tif(!$.webviews[id]) { //保证执行一遍\n\t\t\t//TODO 这里也有隐患，比如某个webview不是作为subpage创建的，而是作为target webview的话；\n\t\t\tif(!plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = plus.webview.create(options.url, id, options.styles, options.extras);\n\t\t\t}\n\t\t\t//之前的实现方案：子窗口loaded之后再append到父窗口中；\n\t\t\t//问题：部分子窗口loaded事件发生较晚，此时执行父窗口的children方法会返回空，导致父子通讯失败；\n\t\t\t//     比如父页面执行完preload事件后，需触发子页面的preload事件，此时未append的话，就无法触发；\n\t\t\t//修改方式：不再监控loaded事件，直接append\n\t\t\t//by chb@20150521\n\t\t\t// webview.addEventListener('loaded', function() {\n\t\t\tplus.webview.currentWebview().append(webview);\n\t\t\t// });\n\t\t\t$.webviews[id] = options;\n\n\t\t}\n\t\treturn webview;\n\t};\n\n\t//全局webviews\n\t$.webviews = {};\n\t//预加载窗口索引\n\t$.data.preloads = [];\n\t//$.currentWebview\n\t$.plusReady(function() {\n\t\t$.currentWebview = plus.webview.currentWebview();\n\t});\n\t$.addInit({\n\t\tname: '5+',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar subpages = options.subpages || [];\n\t\t\tif($.os.plus) {\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t//TODO  这里需要判断一下，最好等子窗口加载完毕后，再调用主窗口的show方法；\n\t\t\t\t\t//或者：在openwindow方法中，监听实现；\n\t\t\t\t\t$.each(subpages, function(index, subpage) {\n\t\t\t\t\t\t$.appendWebview(subpage);\n\t\t\t\t\t});\n\t\t\t\t\t//判断是否首页\n\t\t\t\t\tif(plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) {\n\t\t\t\t\t\t//首页需要自己激活预加载；\n\t\t\t\t\t\t//timeout因为子页面loaded之后才append的，防止子页面尚未append、从而导致其preload未触发的问题；\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\ttriggerPreload(plus.webview.currentWebview());\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t}\n\t\t\t\t\t//设置ios顶部状态栏颜色；\n\t\t\t\t\tif($.os.ios && $.options.statusBarBackground) {\n\t\t\t\t\t\tplus.navigator.setStatusBarBackground($.options.statusBarBackground);\n\t\t\t\t\t}\n\t\t\t\t\tif($.os.android && parseFloat($.os.version) < 4.4) {\n\t\t\t\t\t\t//解决Android平台4.4版本以下，resume后，父窗体标题延迟渲染的问题；\n\t\t\t\t\t\tif(plus.webview.currentWebview().parent() == null) {\n\t\t\t\t\t\t\tdocument.addEventListener(\"resume\", function() {\n\t\t\t\t\t\t\t\tvar body = document.body;\n\t\t\t\t\t\t\t\tbody.style.display = 'none';\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tbody.style.display = '';\n\t\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t//已支持iframe嵌入\n\t\t\t\t//\t\t\t\tif (subpages.length > 0) {\n\t\t\t\t//\t\t\t\t\tvar err = document.createElement('div');\n\t\t\t\t//\t\t\t\t\terr.className = 'mui-error';\n\t\t\t\t//\t\t\t\t\t//文字描述\n\t\t\t\t//\t\t\t\t\tvar span = document.createElement('span');\n\t\t\t\t//\t\t\t\t\tspan.innerHTML = '在该浏览器下，不支持创建子页面，具体参考';\n\t\t\t\t//\t\t\t\t\terr.appendChild(span);\n\t\t\t\t//\t\t\t\t\tvar a = document.createElement('a');\n\t\t\t\t//\t\t\t\t\ta.innerHTML = '\"mui框架适用场景\"';\n\t\t\t\t//\t\t\t\t\ta.href = 'http://ask.dcloud.net.cn/article/113';\n\t\t\t\t//\t\t\t\t\terr.appendChild(a);\n\t\t\t\t//\t\t\t\t\tdocument.body.appendChild(err);\n\t\t\t\t//\t\t\t\t\tconsole.log('在该浏览器下，不支持创建子页面');\n\t\t\t\t//\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t});\n\twindow.addEventListener('preload', function() {\n\t\t//处理预加载部分\n\t\tvar webviews = $.options.preloadPages || [];\n\t\t$.plusReady(function() {\n\t\t\t$.each(webviews, function(index, webview) {\n\t\t\t\t$.createWindow($.extend(webview, {\n\t\t\t\t\tpreload: true\n\t\t\t\t}));\n\t\t\t});\n\n\t\t});\n\t});\n\t$.supportStatusbarOffset = function() {\n\t\treturn $.os.plus && $.os.ios && parseFloat($.os.version) >= 7;\n\t};\n\t$.ready(function() {\n\t\t//标识当前环境支持statusbar\n\t\tif($.supportStatusbarOffset()) {\n\t\t\tdocument.body.classList.add('mui-statusbar');\n\t\t}\n\t});\n})(mui);\n\n/**\n * mui back\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\t/**\n\t * register back\n\t * @param {type} back\n\t * @returns {$.gestures}\n\t */\n\t$.addBack = function(back) {\n\t\treturn $.addAction('backs', back);\n\t};\n\t/**\n\t * default\n\t */\n\t$.addBack({\n\t\tname: 'browser',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tif (window.history.length > 1) {\n\t\t\t\twindow.history.back();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t});\n\t/**\n\t * 后退\n\t */\n\t$.back = function() {\n\t\tif (typeof $.options.beforeback === 'function') {\n\t\t\tif ($.options.beforeback() === false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$.doAction('backs');\n\t};\n\twindow.addEventListener('tap', function(e) {\n\t\tvar action = $.targets.action;\n\t\tif (action && action.classList.contains('mui-action-back')) {\n\t\t\t$.back();\n\t\t\t$.targets.action = false;\n\t\t}\n\t});\n\twindow.addEventListener('swiperight', function(e) {\n\t\tvar detail = e.detail;\n\t\tif ($.options.swipeBack === true && Math.abs(detail.angle) < 3) {\n\t\t\t$.back();\n\t\t}\n\t});\n\n})(mui, window);\n/**\n * mui back 5+\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\tif ($.os.plus && $.os.android) {\n\t\t$.addBack({\n\t\t\tname: 'mui',\n\t\t\tindex: 5,\n\t\t\thandle: function() {\n\t\t\t\t//后续重新设计此处，将back放到各个空间内部实现\n\t\t\t\t//popover\n\t\t\t\tif ($.targets._popover && $.targets._popover.classList.contains('mui-active')) {\n\t\t\t\t\t$($.targets._popover).popover('hide');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//offcanvas\n\t\t\t\tvar offCanvas = document.querySelector('.mui-off-canvas-wrap.mui-active');\n\t\t\t\tif (offCanvas) {\n\t\t\t\t\t$(offCanvas).offCanvas('close');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage();\n\t\t\t\tif (previewImage && previewImage.isShown()) {\n\t\t\t\t\tpreviewImage.close();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//popup\n\t\t\t\treturn $.closePopup();\n\t\t\t}\n\t\t});\n\t}\n\t//首次按下back按键的时间\n\t$.__back__first = null;\n\t/**\n\t * 5+ back\n\t */\n\t$.addBack({\n\t\tname: '5+',\n\t\tindex: 10,\n\t\thandle: function() {\n\t\t\tif (!window.plus) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar wobj = plus.webview.currentWebview();\n\t\t\tvar parent = wobj.parent();\n\t\t\tif (parent) {\n\t\t\t\tparent.evalJS('mui&&mui.back();');\n\t\t\t} else {\n\t\t\t\twobj.canBack(function(e) {\n\t\t\t\t\t//by chb 暂时注释，在碰到类似popover之类的锚点的时候，需多次点击才能返回；\n\t\t\t\t\tif (e.canBack) { //webview history back\n\t\t\t\t\t\twindow.history.back();\n\t\t\t\t\t} else { //webview close or hide\n\t\t\t\t\t\t//fixed by fxy 此处不应该用opener判断，因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了，导致不能执行close\n\t\t\t\t\t\tif (wobj.id === plus.runtime.appid) { //首页\n\t\t\t\t\t\t\t//首页不存在opener的情况下，后退实际上应该是退出应用；\n\t\t\t\t\t\t\t//首次按键，提示‘再按一次退出应用’\n\t\t\t\t\t\t\tif (!$.__back__first) {\n\t\t\t\t\t\t\t\t$.__back__first = new Date().getTime();\n\t\t\t\t\t\t\t\tmui.toast('再按一次退出应用');\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t$.__back__first = null;\n\t\t\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (new Date().getTime() - $.__back__first < 2000) {\n\t\t\t\t\t\t\t\t\tplus.runtime.quit();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else { //其他页面，\n\t\t\t\t\t\t\tif (wobj.preload) {\n\t\t\t\t\t\t\t\twobj.hide(\"auto\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//关闭页面时，需要将其打开的所有子页面全部关闭；\n\t\t\t\t\t\t\t\t$.closeAll(wobj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t});\n\n\n\t$.menu = function() {\n\t\tvar menu = document.querySelector('.mui-action-menu');\n\t\tif (menu) {\n\t\t\t$.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话，找不到当前targets的问题\n\t\t\t$.trigger(menu, 'tap');\n\t\t} else { //执行父窗口的menu\n\t\t\tif (window.plus) {\n\t\t\t\tvar wobj = $.currentWebview;\n\t\t\t\tvar parent = wobj.parent();\n\t\t\t\tif (parent) { //又得evalJS\n\t\t\t\t\tparent.evalJS('mui&&mui.menu();');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar __back = function() {\n\t\t$.back();\n\t};\n\tvar __menu = function() {\n\t\t$.menu();\n\t};\n\t//默认监听\n\t$.plusReady(function() {\n\t\tif ($.options.keyEventBind.backbutton) {\n\t\t\tplus.key.addEventListener('backbutton', __back, false);\n\t\t}\n\t\tif ($.options.keyEventBind.menubutton) {\n\t\t\tplus.key.addEventListener('menubutton', __menu, false);\n\t\t}\n\t});\n\t//处理按键监听事件\n\t$.addInit({\n\t\tname: 'keyEventBind',\n\t\tindex: 1000,\n\t\thandle: function() {\n\t\t\t$.plusReady(function() {\n\t\t\t\t//如果不为true，则移除默认监听\n\t\t\t\tif (!$.options.keyEventBind.backbutton) {\n\t\t\t\t\tplus.key.removeEventListener('backbutton', __back);\n\t\t\t\t}\n\t\t\t\tif (!$.options.keyEventBind.menubutton) {\n\t\t\t\t\tplus.key.removeEventListener('menubutton', __menu);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(mui, window);\n/**\n * mui.init pulldownRefresh\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.addInit({\n\t\tname: 'pullrefresh',\n\t\tindex: 1000,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar pullRefreshOptions = options.pullRefresh || {};\n\t\t\tvar hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback');\n\t\t\tvar hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback');\n\t\t\tif(hasPulldown || hasPullup) {\n\t\t\t\tvar container = pullRefreshOptions.container;\n\t\t\t\tif(container) {\n\t\t\t\t\tvar $container = $(container);\n\t\t\t\t\tif($container.length === 1) {\n\t\t\t\t\t\tif($.os.plus) { //5+环境\n\t\t\t\t\t\t\tif(hasPulldown && pullRefreshOptions.down.style == \"circle\") { //原生转圈\n\t\t\t\t\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t\t\t\t\t//这里改写$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t$.fn.pullRefresh = $.fn.pullRefresh_native;\n\t\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t} else if($.os.android) { //非原生转圈，但是Android环境\n\t\t\t\t\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t\t\t\t\t//这里改写$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t$.fn.pullRefresh = $.fn.pullRefresh_native\n\t\t\t\t\t\t\t\t\tvar webview = plus.webview.currentWebview();\n\t\t\t\t\t\t\t\t\tif(window.__NWin_Enable__ === false) { //不支持多webview\n\t\t\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif(hasPullup) {\n\t\t\t\t\t\t\t\t\t\t\t//当前页面初始化pullup\n\t\t\t\t\t\t\t\t\t\t\tvar upOptions = {};\n\t\t\t\t\t\t\t\t\t\t\tupOptions.up = pullRefreshOptions.up;\n\t\t\t\t\t\t\t\t\t\t\tupOptions.webviewId = webview.id || webview.getURL();\n\t\t\t\t\t\t\t\t\t\t\t$container.pullRefresh(upOptions);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif(hasPulldown) {\n\t\t\t\t\t\t\t\t\t\t\tvar parent = webview.parent();\n\t\t\t\t\t\t\t\t\t\t\tvar id = webview.id || webview.getURL();\n\t\t\t\t\t\t\t\t\t\t\tif(parent) {\n\t\t\t\t\t\t\t\t\t\t\t\tif(!hasPullup) { //如果没有上拉加载，需要手动初始化一个默认的pullRefresh，以便当前页面容器可以调用endPulldownToRefresh等方法\n\t\t\t\t\t\t\t\t\t\t\t\t\t$container.pullRefresh({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebviewId: id\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tvar downOptions = {\n\t\t\t\t\t\t\t\t\t\t\t\t\twebviewId: id//子页面id\n\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\tdownOptions.down = $.extend({}, pullRefreshOptions.down);\n\t\t\t\t\t\t\t\t\t\t\t\tdownOptions.down.callback = '_CALLBACK';\n\t\t\t\t\t\t\t\t\t\t\t\t//改写父页面的$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t\t\t\tparent.evalJS(\"mui.fn.pullRefresh=mui.fn.pullRefresh_native\");\n\t\t\t\t\t\t\t\t\t\t\t\t//父页面初始化pulldown\n\t\t\t\t\t\t\t\t\t\t\t\tparent.evalJS(\"mui&&mui(document.querySelector('.mui-content')).pullRefresh('\" + JSON.stringify(downOptions) + \"')\");\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else { //非原生转圈，iOS环境\n\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(mui);\n/**\n * mui ajax\n * @param {type} $\n * @returns {undefined}\n */\n(function($, window, undefined) {\n\n\tvar jsonType = 'application/json';\n\tvar htmlType = 'text/html';\n\tvar rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi;\n\tvar scriptTypeRE = /^(?:text|application)\\/javascript/i;\n\tvar xmlTypeRE = /^(?:text|application)\\/xml/i;\n\tvar blankRE = /^\\s*$/;\n\n\t$.ajaxSettings = {\n\t\ttype: 'GET',\n\t\tbeforeSend: $.noop,\n\t\tsuccess: $.noop,\n\t\terror: $.noop,\n\t\tcomplete: $.noop,\n\t\tcontext: null,\n\t\txhr: function(protocol) {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t},\n\t\taccepts: {\n\t\t\tscript: 'text/javascript, application/javascript, application/x-javascript',\n\t\t\tjson: jsonType,\n\t\t\txml: 'application/xml, text/xml',\n\t\t\thtml: htmlType,\n\t\t\ttext: 'text/plain'\n\t\t},\n\t\ttimeout: 0,\n\t\tprocessData: true,\n\t\tcache: true\n\t};\n\tvar ajaxBeforeSend = function(xhr, settings) {\n\t\tvar context = settings.context\n\t\tif(settings.beforeSend.call(context, xhr, settings) === false) {\n\t\t\treturn false;\n\t\t}\n\t};\n\tvar ajaxSuccess = function(data, xhr, settings) {\n\t\tsettings.success.call(settings.context, data, 'success', xhr);\n\t\tajaxComplete('success', xhr, settings);\n\t};\n\t// type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n\tvar ajaxError = function(error, type, xhr, settings) {\n\t\tsettings.error.call(settings.context, xhr, type, error);\n\t\tajaxComplete(type, xhr, settings);\n\t};\n\t// status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n\tvar ajaxComplete = function(status, xhr, settings) {\n\t\tsettings.complete.call(settings.context, xhr, status);\n\t};\n\n\tvar serialize = function(params, obj, traditional, scope) {\n\t\tvar type, array = $.isArray(obj),\n\t\t\thash = $.isPlainObject(obj);\n\t\t$.each(obj, function(key, value) {\n\t\t\ttype = $.type(value);\n\t\t\tif(scope) {\n\t\t\t\tkey = traditional ? scope :\n\t\t\t\t\tscope + '[' + (hash || type === 'object' || type === 'array' ? key : '') + ']';\n\t\t\t}\n\t\t\t// handle data in serializeArray() format\n\t\t\tif(!scope && array) {\n\t\t\t\tparams.add(value.name, value.value);\n\t\t\t}\n\t\t\t// recurse into nested objects\n\t\t\telse if(type === \"array\" || (!traditional && type === \"object\")) {\n\t\t\t\tserialize(params, value, traditional, key);\n\t\t\t} else {\n\t\t\t\tparams.add(key, value);\n\t\t\t}\n\t\t});\n\t};\n\tvar serializeData = function(options) {\n\t\tif(options.processData && options.data && typeof options.data !== \"string\") {\n\t\t\tvar contentType = options.contentType;\n\t\t\tif(!contentType && options.headers) {\n\t\t\t\tcontentType = options.headers['Content-Type'];\n\t\t\t}\n\t\t\tif(contentType && ~contentType.indexOf(jsonType)) { //application/json\n\t\t\t\toptions.data = JSON.stringify(options.data);\n\t\t\t} else {\n\t\t\t\toptions.data = $.param(options.data, options.traditional);\n\t\t\t}\n\t\t}\n\t\tif(options.data && (!options.type || options.type.toUpperCase() === 'GET')) {\n\t\t\toptions.url = appendQuery(options.url, options.data);\n\t\t\toptions.data = undefined;\n\t\t}\n\t};\n\tvar appendQuery = function(url, query) {\n\t\tif(query === '') {\n\t\t\treturn url;\n\t\t}\n\t\treturn(url + '&' + query).replace(/[&?]{1,2}/, '?');\n\t};\n\tvar mimeToDataType = function(mime) {\n\t\tif(mime) {\n\t\t\tmime = mime.split(';', 2)[0];\n\t\t}\n\t\treturn mime && (mime === htmlType ? 'html' :\n\t\t\tmime === jsonType ? 'json' :\n\t\t\tscriptTypeRE.test(mime) ? 'script' :\n\t\t\txmlTypeRE.test(mime) && 'xml') || 'text';\n\t};\n\tvar parseArguments = function(url, data, success, dataType) {\n\t\tif($.isFunction(data)) {\n\t\t\tdataType = success, success = data, data = undefined;\n\t\t}\n\t\tif(!$.isFunction(success)) {\n\t\t\tdataType = success, success = undefined;\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: success,\n\t\t\tdataType: dataType\n\t\t};\n\t};\n\t$.ajax = function(url, options) {\n\t\tif(typeof url === \"object\") {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\t\tvar settings = options || {};\n\t\tsettings.url = url || settings.url;\n\t\tfor(var key in $.ajaxSettings) {\n\t\t\tif(settings[key] === undefined) {\n\t\t\t\tsettings[key] = $.ajaxSettings[key];\n\t\t\t}\n\t\t}\n\t\tserializeData(settings);\n\t\tvar dataType = settings.dataType;\n\n\t\tif(settings.cache === false || ((!options || options.cache !== true) && ('script' === dataType))) {\n\t\t\tsettings.url = appendQuery(settings.url, '_=' + $.now());\n\t\t}\n\t\tvar mime = settings.accepts[dataType && dataType.toLowerCase()];\n\t\tvar headers = {};\n\t\tvar setHeader = function(name, value) {\n\t\t\theaders[name.toLowerCase()] = [name, value];\n\t\t};\n\t\tvar protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol;\n\t\tvar xhr = settings.xhr(settings);\n\t\tvar nativeSetHeader = xhr.setRequestHeader;\n\t\tvar abortTimeout;\n\n\t\tsetHeader('X-Requested-With', 'XMLHttpRequest');\n\t\tsetHeader('Accept', mime || '*/*');\n\t\tif(!!(mime = settings.mimeType || mime)) {\n\t\t\tif(mime.indexOf(',') > -1) {\n\t\t\t\tmime = mime.split(',', 2)[0];\n\t\t\t}\n\t\t\txhr.overrideMimeType && xhr.overrideMimeType(mime);\n\t\t}\n\t\tif(settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() !== 'GET')) {\n\t\t\tsetHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');\n\t\t}\n\t\tif(settings.headers) {\n\t\t\tfor(var name in settings.headers)\n\t\t\t\tsetHeader(name, settings.headers[name]);\n\t\t}\n\t\txhr.setRequestHeader = setHeader;\n\n\t\txhr.onreadystatechange = function() {\n\t\t\tif(xhr.readyState === 4) {\n\t\t\t\txhr.onreadystatechange = $.noop;\n\t\t\t\tclearTimeout(abortTimeout);\n\t\t\t\tvar result, error = false;\n\t\t\t\tvar isLocal = protocol === 'file:';\n\t\t\t\tif((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || (xhr.status === 0 && isLocal && xhr.responseText)) {\n\t\t\t\t\tdataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));\n\t\t\t\t\tresult = xhr.responseText;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// http://perfectionkills.com/global-eval-what-are-the-options/\n\t\t\t\t\t\tif(dataType === 'script') {\n\t\t\t\t\t\t\t(1, eval)(result);\n\t\t\t\t\t\t} else if(dataType === 'xml') {\n\t\t\t\t\t\t\tresult = xhr.responseXML;\n\t\t\t\t\t\t} else if(dataType === 'json') {\n\t\t\t\t\t\t\tresult = blankRE.test(result) ? null : $.parseJSON(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\terror = e;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(error) {\n\t\t\t\t\t\tajaxError(error, 'parsererror', xhr, settings);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tajaxSuccess(result, xhr, settings);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar status = xhr.status ? 'error' : 'abort';\n\t\t\t\t\tvar statusText = xhr.statusText || null;\n\t\t\t\t\tif(isLocal) {\n\t\t\t\t\t\tstatus = 'error';\n\t\t\t\t\t\tstatusText = '404';\n\t\t\t\t\t}\n\t\t\t\t\tajaxError(statusText, status, xhr, settings);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif(ajaxBeforeSend(xhr, settings) === false) {\n\t\t\txhr.abort();\n\t\t\tajaxError(null, 'abort', xhr, settings);\n\t\t\treturn xhr;\n\t\t}\n\n\t\tif(settings.xhrFields) {\n\t\t\tfor(var name in settings.xhrFields) {\n\t\t\t\txhr[name] = settings.xhrFields[name];\n\t\t\t}\n\t\t}\n\n\t\tvar async = 'async' in settings ? settings.async : true;\n\n\t\txhr.open(settings.type.toUpperCase(), settings.url, async, settings.username, settings.password);\n\n\t\tfor(var name in headers) {\n\t\t\tif(headers.hasOwnProperty(name)) {\n\t\t\t\tnativeSetHeader.apply(xhr, headers[name]);\n\t\t\t}\n\t\t}\n\t\tif(settings.timeout > 0) {\n\t\t\tabortTimeout = setTimeout(function() {\n\t\t\t\txhr.onreadystatechange = $.noop;\n\t\t\t\txhr.abort();\n\t\t\t\tajaxError(null, 'timeout', xhr, settings);\n\t\t\t}, settings.timeout);\n\t\t}\n\t\txhr.send(settings.data ? settings.data : null);\n\t\treturn xhr;\n\t};\n\n\t$.param = function(obj, traditional) {\n\t\tvar params = [];\n\t\tparams.add = function(k, v) {\n\t\t\tthis.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n\t\t};\n\t\tserialize(params, obj, traditional);\n\t\treturn params.join('&').replace(/%20/g, '+');\n\t};\n\t$.get = function( /* url, data, success, dataType */ ) {\n\t\treturn $.ajax(parseArguments.apply(null, arguments));\n\t};\n\n\t$.post = function( /* url, data, success, dataType */ ) {\n\t\tvar options = parseArguments.apply(null, arguments);\n\t\toptions.type = 'POST';\n\t\treturn $.ajax(options);\n\t};\n\n\t$.getJSON = function( /* url, data, success */ ) {\n\t\tvar options = parseArguments.apply(null, arguments);\n\t\toptions.dataType = 'json';\n\t\treturn $.ajax(options);\n\t};\n\n\t$.fn.load = function(url, data, success) {\n\t\tif(!this.length)\n\t\t\treturn this;\n\t\tvar self = this,\n\t\t\tparts = url.split(/\\s/),\n\t\t\tselector,\n\t\t\toptions = parseArguments(url, data, success),\n\t\t\tcallback = options.success;\n\t\tif(parts.length > 1)\n\t\t\toptions.url = parts[0], selector = parts[1];\n\t\toptions.success = function(response) {\n\t\t\tif(selector) {\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tdiv.innerHTML = response.replace(rscript, \"\");\n\t\t\t\tvar selectorDiv = document.createElement('div');\n\t\t\t\tvar childs = div.querySelectorAll(selector);\n\t\t\t\tif(childs && childs.length > 0) {\n\t\t\t\t\tfor(var i = 0, len = childs.length; i < len; i++) {\n\t\t\t\t\t\tselectorDiv.appendChild(childs[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself[0].innerHTML = selectorDiv.innerHTML;\n\t\t\t} else {\n\t\t\t\tself[0].innerHTML = response;\n\t\t\t}\n\t\t\tcallback && callback.apply(self, arguments);\n\t\t};\n\t\t$.ajax(options);\n\t\treturn this;\n\t};\n\n})(mui, window);\n/**\n * 5+ ajax\n */\n(function($) {\n\tvar originAnchor = document.createElement('a');\n\toriginAnchor.href = window.location.href;\n\t$.plusReady(function() {\n\t\t$.ajaxSettings = $.extend($.ajaxSettings, {\n\t\t\txhr: function(settings) {\n\t\t\t\tif (settings.crossDomain) { //强制使用plus跨域\n\t\t\t\t\treturn new plus.net.XMLHttpRequest();\n\t\t\t\t}\n\t\t\t\t//仅在webview的url为远程文件，且ajax请求的资源不同源下使用plus.net.XMLHttpRequest\n\t\t\t\tif (originAnchor.protocol !== 'file:') {\n\t\t\t\t\tvar urlAnchor = document.createElement('a');\n\t\t\t\t\turlAnchor.href = settings.url;\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\tsettings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host);\n\t\t\t\t\tif (settings.crossDomain) {\n\t\t\t\t\t\treturn new plus.net.XMLHttpRequest();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ($.os.ios && window.webkit && window.webkit.messageHandlers) { //wkwebview下同样使用5+ xhr\n                    return new plus.net.XMLHttpRequest();\n                }\n\t\t\t\treturn new window.XMLHttpRequest();\n\t\t\t}\n\t\t});\n\t});\n})(mui);\n/**\n * mui layout(offset[,position,width,height...])\n * @param {type} $\n * @param {type} window\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, undefined) {\n\t$.offset = function(element) {\n\t\tvar box = {\n\t\t\ttop : 0,\n\t\t\tleft : 0\n\t\t};\n\t\tif ( typeof element.getBoundingClientRect !== undefined) {\n\t\t\tbox = element.getBoundingClientRect();\n\t\t}\n\t\treturn {\n\t\t\ttop : box.top + window.pageYOffset - element.clientTop,\n\t\t\tleft : box.left + window.pageXOffset - element.clientLeft\n\t\t};\n\t};\n})(mui, window); \n/**\n * mui animation\n */\n(function($, window) {\n\t/**\n\t * scrollTo\n\t */\n\t$.scrollTo = function(scrollTop, duration, callback) {\n\t\tduration = duration || 1000;\n\t\tvar scroll = function(duration) {\n\t\t\tif (duration <= 0) {\n\t\t\t\twindow.scrollTo(0, scrollTop);\n\t\t\t\tcallback && callback();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar distaince = scrollTop - window.scrollY;\n\t\t\tsetTimeout(function() {\n\t\t\t\twindow.scrollTo(0, window.scrollY + distaince / duration * 10);\n\t\t\t\tscroll(duration - 10);\n\t\t\t}, 16.7);\n\t\t};\n\t\tscroll(duration);\n\t};\n\t$.animationFrame = function(cb) {\n\t\tvar args, isQueued, context;\n\t\treturn function() {\n\t\t\targs = arguments;\n\t\t\tcontext = this;\n\t\t\tif (!isQueued) {\n\t\t\t\tisQueued = true;\n\t\t\t\trequestAnimationFrame(function() {\n\t\t\t\t\tcb.apply(context, args);\n\t\t\t\t\tisQueued = false;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t};\n\n})(mui, window);\n(function($) {\n\tvar initializing = false,\n\t\tfnTest = /xyz/.test(function() {\n\t\t\txyz;\n\t\t}) ? /\\b_super\\b/ : /.*/;\n\n\tvar Class = function() {};\n\tClass.extend = function(prop) {\n\t\tvar _super = this.prototype;\n\t\tinitializing = true;\n\t\tvar prototype = new this();\n\t\tinitializing = false;\n\t\tfor (var name in prop) {\n\t\t\tprototype[name] = typeof prop[name] == \"function\" &&\n\t\t\t\ttypeof _super[name] == \"function\" && fnTest.test(prop[name]) ?\n\t\t\t\t(function(name, fn) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tvar tmp = this._super;\n\n\t\t\t\t\t\tthis._super = _super[name];\n\n\t\t\t\t\t\tvar ret = fn.apply(this, arguments);\n\t\t\t\t\t\tthis._super = tmp;\n\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t};\n\t\t\t\t})(name, prop[name]) :\n\t\t\t\tprop[name];\n\t\t}\n\t\tfunction Class() {\n\t\t\tif (!initializing && this.init)\n\t\t\t\tthis.init.apply(this, arguments);\n\t\t}\n\t\tClass.prototype = prototype;\n\t\tClass.prototype.constructor = Class;\n\t\tClass.extend = arguments.callee;\n\t\treturn Class;\n\t};\n\t$.Class = Class;\n})(mui);\n(function($, document, undefined) {\n    var CLASS_PULL_TOP_POCKET = 'mui-pull-top-pocket';\n    var CLASS_PULL_BOTTOM_POCKET = 'mui-pull-bottom-pocket';\n    var CLASS_PULL = 'mui-pull';\n    var CLASS_PULL_LOADING = 'mui-pull-loading';\n    var CLASS_PULL_CAPTION = 'mui-pull-caption';\n    var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down';\n    var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh';\n    var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore';\n\n    var CLASS_ICON = 'mui-icon';\n    var CLASS_SPINNER = 'mui-spinner';\n    var CLASS_ICON_PULLDOWN = 'mui-icon-pulldown';\n\n    var CLASS_BLOCK = 'mui-block';\n    var CLASS_HIDDEN = 'mui-hidden';\n    var CLASS_VISIBILITY = 'mui-visibility';\n\n    var CLASS_LOADING_UP = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;\n    var CLASS_LOADING_DOWN = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;\n    var CLASS_LOADING = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_SPINNER;\n\n    var pocketHtml = ['<div class=\"' + CLASS_PULL + '\">', '<div class=\"{icon}\"></div>', '<div class=\"' + CLASS_PULL_CAPTION + '\">{contentrefresh}</div>', '</div>'].join('');\n\n    var PullRefresh = {\n        init: function(element, options) {\n            this._super(element, $.extend(true, {\n                scrollY: true,\n                scrollX: false,\n                indicators: true,\n                deceleration: 0.003,\n                down: {\n                    height: 50,\n                    contentinit: '下拉可以刷新',\n                    contentdown: '下拉可以刷新',\n                    contentover: '释放立即刷新',\n                    contentrefresh: '正在刷新...'\n                },\n                up: {\n                    height: 50,\n                    auto: false,\n                    contentinit: '上拉显示更多',\n                    contentdown: '上拉显示更多',\n                    contentrefresh: '正在加载...',\n                    contentnomore: '没有更多数据了',\n                    duration: 300\n                }\n            }, options));\n        },\n        _init: function() {\n            this._super();\n            this._initPocket();\n        },\n        _initPulldownRefresh: function() {\n            this.pulldown = true;\n            if (this.topPocket) {\n                this.pullPocket = this.topPocket;\n                this.pullPocket.classList.add(CLASS_BLOCK);\n                this.pullPocket.classList.add(CLASS_VISIBILITY);\n                this.pullCaption = this.topCaption;\n                this.pullLoading = this.topLoading;\n            }\n        },\n        _initPullupRefresh: function() {\n            this.pulldown = false;\n            if (this.bottomPocket) {\n                this.pullPocket = this.bottomPocket;\n                this.pullPocket.classList.add(CLASS_BLOCK);\n                this.pullPocket.classList.add(CLASS_VISIBILITY);\n                this.pullCaption = this.bottomCaption;\n                this.pullLoading = this.bottomLoading;\n            }\n        },\n        _initPocket: function() {\n            var options = this.options;\n            if (options.down && options.down.hasOwnProperty('callback')) {\n                this.topPocket = this.scroller.querySelector('.' + CLASS_PULL_TOP_POCKET);\n                if (!this.topPocket) {\n                    this.topPocket = this._createPocket(CLASS_PULL_TOP_POCKET, options.down, CLASS_LOADING_DOWN);\n                    this.wrapper.insertBefore(this.topPocket, this.wrapper.firstChild);\n                }\n                this.topLoading = this.topPocket.querySelector('.' + CLASS_PULL_LOADING);\n                this.topCaption = this.topPocket.querySelector('.' + CLASS_PULL_CAPTION);\n            }\n            if (options.up && options.up.hasOwnProperty('callback')) {\n                this.bottomPocket = this.scroller.querySelector('.' + CLASS_PULL_BOTTOM_POCKET);\n                if (!this.bottomPocket) {\n                    this.bottomPocket = this._createPocket(CLASS_PULL_BOTTOM_POCKET, options.up, CLASS_LOADING);\n                    this.scroller.appendChild(this.bottomPocket);\n                }\n                this.bottomLoading = this.bottomPocket.querySelector('.' + CLASS_PULL_LOADING);\n                this.bottomCaption = this.bottomPocket.querySelector('.' + CLASS_PULL_CAPTION);\n                //TODO only for h5\n                this.wrapper.addEventListener('scrollbottom', this);\n            }\n        },\n        _createPocket: function(clazz, options, iconClass) {\n            var pocket = document.createElement('div');\n            pocket.className = clazz;\n            pocket.innerHTML = pocketHtml.replace('{contentrefresh}', options.contentinit).replace('{icon}', iconClass);\n            return pocket;\n        },\n        _resetPullDownLoading: function() {\n            var loading = this.pullLoading;\n            if (loading) {\n                this.pullCaption.innerHTML = this.options.down.contentdown;\n                loading.style.webkitTransition = \"\";\n                loading.style.webkitTransform = \"\";\n                loading.style.webkitAnimation = \"\";\n                loading.className = CLASS_LOADING_DOWN;\n            }\n        },\n        _setCaptionClass: function(isPulldown, caption, title) {\n            if (!isPulldown) {\n                switch (title) {\n                    case this.options.up.contentdown:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                        break;\n                    case this.options.up.contentrefresh:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH\n                        break;\n                    case this.options.up.contentnomore:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;\n                        break;\n                }\n            }\n        },\n        _setCaption: function(title, reset) {\n            if (this.loading) {\n                return;\n            }\n            var options = this.options;\n            var pocket = this.pullPocket;\n            var caption = this.pullCaption;\n            var loading = this.pullLoading;\n            var isPulldown = this.pulldown;\n            var self = this;\n            if (pocket) {\n                if (reset) {\n                    setTimeout(function() {\n                        caption.innerHTML = self.lastTitle = title;\n                        if (isPulldown) {\n                            loading.className = CLASS_LOADING_DOWN;\n                        } else {\n                            self._setCaptionClass(false, caption, title);\n                            loading.className = CLASS_LOADING;\n                        }\n                        loading.style.webkitAnimation = \"\";\n                        loading.style.webkitTransition = \"\";\n                        loading.style.webkitTransform = \"\";\n                    }, 100);\n                } else {\n                    if (title !== this.lastTitle) {\n                        caption.innerHTML = title;\n                        if (isPulldown) {\n                            if (title === options.down.contentrefresh) {\n                                loading.className = CLASS_LOADING;\n                                loading.style.webkitAnimation = \"spinner-spin 1s step-end infinite\";\n                            } else if (title === options.down.contentover) {\n                                loading.className = CLASS_LOADING_UP;\n                                loading.style.webkitTransition = \"-webkit-transform 0.3s ease-in\";\n                                loading.style.webkitTransform = \"rotate(180deg)\";\n                            } else if (title === options.down.contentdown) {\n                                loading.className = CLASS_LOADING_DOWN;\n                                loading.style.webkitTransition = \"-webkit-transform 0.3s ease-in\";\n                                loading.style.webkitTransform = \"rotate(0deg)\";\n                            }\n                        } else {\n                            if (title === options.up.contentrefresh) {\n                                loading.className = CLASS_LOADING + ' ' + CLASS_VISIBILITY;\n                            } else {\n                                loading.className = CLASS_LOADING + ' ' + CLASS_HIDDEN;\n                            }\n                            self._setCaptionClass(false, caption, title);\n                        }\n                        this.lastTitle = title;\n                    }\n                }\n\n            }\n        }\n    };\n    $.PullRefresh = PullRefresh;\n})(mui, document);\n(function($, window, document, undefined) {\n\tvar CLASS_SCROLL = 'mui-scroll';\n\tvar CLASS_SCROLLBAR = 'mui-scrollbar';\n\tvar CLASS_INDICATOR = 'mui-scrollbar-indicator';\n\tvar CLASS_SCROLLBAR_VERTICAL = CLASS_SCROLLBAR + '-vertical';\n\tvar CLASS_SCROLLBAR_HORIZONTAL = CLASS_SCROLLBAR + '-horizontal';\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\tvar ease = {\n\t\tquadratic: {\n\t\t\tstyle: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n\t\t\tfn: function(k) {\n\t\t\t\treturn k * (2 - k);\n\t\t\t}\n\t\t},\n\t\tcircular: {\n\t\t\tstyle: 'cubic-bezier(0.1, 0.57, 0.1, 1)',\n\t\t\tfn: function(k) {\n\t\t\t\treturn Math.sqrt(1 - (--k * k));\n\t\t\t}\n\t\t},\n\t\toutCirc: {\n\t\t\tstyle: 'cubic-bezier(0.075, 0.82, 0.165, 1)'\n\t\t},\n\t\toutCubic: {\n\t\t\tstyle: 'cubic-bezier(0.165, 0.84, 0.44, 1)'\n\t\t}\n\t}\n\tvar Scroll = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.wrapper = this.element = element;\n\t\t\tthis.scroller = this.wrapper.children[0];\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t\tthis.stopped = false;\n\n\t\t\tthis.options = $.extend(true, {\n\t\t\t\tscrollY: true, //是否竖向滚动\n\t\t\t\tscrollX: false, //是否横向滚动\n\t\t\t\tstartX: 0, //初始化时滚动至x\n\t\t\t\tstartY: 0, //初始化时滚动至y\n\n\t\t\t\tindicators: true, //是否显示滚动条\n\t\t\t\tstopPropagation: false,\n\t\t\t\thardwareAccelerated: true,\n\t\t\t\tfixedBadAndorid: false,\n\t\t\t\tpreventDefaultException: {\n\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/\n\t\t\t\t},\n\t\t\t\tmomentum: true,\n\n\t\t\t\tsnapX: 0.5, //横向切换距离(以当前容器宽度为基准)\n\t\t\t\tsnap: false, //图片轮播，拖拽式选项卡\n\n\t\t\t\tbounce: true, //是否启用回弹\n\t\t\t\tbounceTime: 500, //回弹动画时间\n\t\t\t\tbounceEasing: ease.outCirc, //回弹动画曲线\n\n\t\t\t\tscrollTime: 500,\n\t\t\t\tscrollEasing: ease.outCubic, //轮播动画曲线\n\n\t\t\t\tdirectionLockThreshold: 5,\n\n\t\t\t\tparallaxElement: false, //视差元素\n\t\t\t\tparallaxRatio: 0.5\n\t\t\t}, options);\n\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tthis.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : '';\n\n\t\t\tthis._init();\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.refresh();\n\t\t\t\t//\t\t\t\tif (this.options.startX !== 0 || this.options.startY !== 0) { //需要判断吗？后续根据实际情况再看看\n\t\t\t\tthis.scrollTo(this.options.startX, this.options.startY);\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._initParallax();\n\t\t\tthis._initIndicators();\n\t\t\tthis._initEvent();\n\t\t},\n\t\t_initParallax: function() {\n\t\t\tif (this.options.parallaxElement) {\n\t\t\t\tthis.parallaxElement = document.querySelector(this.options.parallaxElement);\n\t\t\t\tthis.parallaxStyle = this.parallaxElement.style;\n\t\t\t\tthis.parallaxHeight = this.parallaxElement.offsetHeight;\n\t\t\t\tthis.parallaxImgStyle = this.parallaxElement.querySelector('img').style;\n\t\t\t}\n\t\t},\n\t\t_initIndicators: function() {\n\t\t\tvar self = this;\n\t\t\tself.indicators = [];\n\t\t\tif (!this.options.indicators) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar indicators = [],\n\t\t\t\tindicator;\n\n\t\t\t// Vertical scrollbar\n\t\t\tif (self.options.scrollY) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: this._createScrollBar(CLASS_SCROLLBAR_VERTICAL),\n\t\t\t\t\tlistenX: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\t// Horizontal scrollbar\n\t\t\tif (this.options.scrollX) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: this._createScrollBar(CLASS_SCROLLBAR_HORIZONTAL),\n\t\t\t\t\tlistenY: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\tfor (var i = indicators.length; i--;) {\n\t\t\t\tthis.indicators.push(new Indicator(this, indicators[i]));\n\t\t\t}\n\n\t\t},\n\t\t_initSnap: function() {\n\t\t\tthis.currentPage = {};\n\t\t\tthis.pages = [];\n\t\t\tvar snaps = this.snaps;\n\t\t\tvar length = snaps.length;\n\t\t\tvar m = 0;\n\t\t\tvar n = -1;\n\t\t\tvar x = 0;\n\t\t\tvar leftX = 0;\n\t\t\tvar rightX = 0;\n\t\t\tvar snapX = 0;\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar snap = snaps[i];\n\t\t\t\tvar offsetLeft = snap.offsetLeft;\n\t\t\t\tvar offsetWidth = snap.offsetWidth;\n\t\t\t\tif (i === 0 || offsetLeft <= snaps[i - 1].offsetLeft) {\n\t\t\t\t\tm = 0;\n\t\t\t\t\tn++;\n\t\t\t\t}\n\t\t\t\tif (!this.pages[m]) {\n\t\t\t\t\tthis.pages[m] = [];\n\t\t\t\t}\n\t\t\t\tx = this._getSnapX(offsetLeft);\n\t\t\t\tsnapX = Math.round((offsetWidth) * this.options.snapX);\n\t\t\t\tleftX = x - snapX;\n\t\t\t\trightX = x - offsetWidth + snapX;\n\t\t\t\tthis.pages[m][n] = {\n\t\t\t\t\tx: x,\n\t\t\t\t\tleftX: leftX,\n\t\t\t\t\trightX: rightX,\n\t\t\t\t\tpageX: m,\n\t\t\t\t\telement: snap\n\t\t\t\t}\n\t\t\t\tif (snap.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\tthis.currentPage = this.pages[m][0];\n\t\t\t\t}\n\t\t\t\tif (x >= this.maxScrollX) {\n\t\t\t\t\tm++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.options.startX = this.currentPage.x || 0;\n\t\t},\n\t\t_getSnapX: function(offsetLeft) {\n\t\t\treturn Math.max(Math.min(0, -offsetLeft + (this.wrapperWidth / 2)), this.maxScrollX);\n\t\t},\n\t\t_gotoPage: function(index) {\n\t\t\tthis.currentPage = this.pages[Math.min(index, this.pages.length - 1)][0];\n\t\t\tfor (var i = 0, len = this.snaps.length; i < len; i++) {\n\t\t\t\tif (i === index) {\n\t\t\t\t\tthis.snaps[i].classList.add(CLASS_ACTIVE);\n\t\t\t\t} else {\n\t\t\t\t\tthis.snaps[i].classList.remove(CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollTo(this.currentPage.x, 0, this.options.scrollTime);\n\t\t},\n\t\t_nearestSnap: function(x) {\n\t\t\tif (!this.pages.length) {\n\t\t\t\treturn {\n\t\t\t\t\tx: 0,\n\t\t\t\t\tpageX: 0\n\t\t\t\t};\n\t\t\t}\n\t\t\tvar i = 0;\n\t\t\tvar length = this.pages.length;\n\t\t\tif (x > 0) {\n\t\t\t\tx = 0;\n\t\t\t} else if (x < this.maxScrollX) {\n\t\t\t\tx = this.maxScrollX;\n\t\t\t}\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tvar nearestX = this.direction === 'left' ? this.pages[i][0].leftX : this.pages[i][0].rightX;\n\t\t\t\tif (x >= nearestX) {\n\t\t\t\t\treturn this.pages[i][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tx: 0,\n\t\t\t\tpageX: 0\n\t\t\t};\n\t\t},\n\t\t_initEvent: function(detach) {\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\twindow[action]('orientationchange', this);\n\t\t\twindow[action]('resize', this);\n\n\t\t\tthis.scroller[action]('webkitTransitionEnd', this);\n\n\t\t\tthis.wrapper[action]($.EVENT_START, this);\n\t\t\tthis.wrapper[action]($.EVENT_CANCEL, this);\n\t\t\tthis.wrapper[action]($.EVENT_END, this);\n\t\t\tthis.wrapper[action]('drag', this);\n\t\t\tthis.wrapper[action]('dragend', this);\n\t\t\tthis.wrapper[action]('flick', this);\n\t\t\tthis.wrapper[action]('scrollend', this);\n\t\t\tif (this.options.scrollX) {\n\t\t\t\tthis.wrapper[action]('swiperight', this);\n\t\t\t}\n\t\t\tvar segmentedControl = this.wrapper.querySelector('.mui-segmented-control');\n\t\t\tif (segmentedControl) { //靠，这个bug排查了一下午，阻止hash跳转，一旦hash跳转会导致可拖拽选项卡的tab不见\n\t\t\t\tmui(segmentedControl)[detach ? 'off' : 'on']('click', 'a', $.preventDefault);\n\t\t\t}\n\n\t\t\tthis.wrapper[action]('scrollstart', this);\n\t\t\tthis.wrapper[action]('refresh', this);\n\t\t},\n\t\t_handleIndicatorScrollend: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade();\n\t\t\t});\n\t\t},\n\t\t_handleIndicatorScrollstart: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade(1);\n\t\t\t});\n\t\t},\n\t\t_handleIndicatorRefresh: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.refresh();\n\t\t\t});\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tif (this.stopped) {\n\t\t\t\tthis.resetPosition();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\tthis._start(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis.options.stopPropagation && e.stopPropagation();\n\t\t\t\t\tthis._drag(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\tcase 'flick':\n\t\t\t\t\tthis.options.stopPropagation && e.stopPropagation();\n\t\t\t\t\tthis._flick(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tcase $.EVENT_END:\n\t\t\t\t\tthis._end(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd':\n\t\t\t\t\tthis.transitionTimer && this.transitionTimer.cancel();\n\t\t\t\t\tthis._transitionEnd(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollstart':\n\t\t\t\t\tthis._handleIndicatorScrollstart(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollend':\n\t\t\t\t\tthis._handleIndicatorScrollend(e);\n\t\t\t\t\tthis._scrollend(e);\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'orientationchange':\n\t\t\t\tcase 'resize':\n\t\t\t\t\tthis._resize();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swiperight':\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'refresh':\n\t\t\t\t\tthis._handleIndicatorRefresh(e);\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t},\n\t\t_start: function(e) {\n\t\t\tthis.moved = this.needReset = false;\n\t\t\tthis._transitionTime();\n\t\t\tif (this.isInTransition) {\n\t\t\t\tthis.needReset = true;\n\t\t\t\tthis.isInTransition = false;\n\t\t\t\tvar pos = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));\n\t\t\t\tthis.setTranslate(Math.round(pos.x), Math.round(pos.y));\n\t\t\t\t//\t\t\t\tthis.resetPosition(); //reset\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t\t//\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tthis.reLayout();\n\t\t\t$.trigger(this.scroller, 'beforescrollstart', this);\n\t\t},\n\t\t_getDirectionByAngle: function(angle) {\n\t\t\tif (angle < -80 && angle > -100) {\n\t\t\t\treturn 'up';\n\t\t\t} else if (angle >= 80 && angle < 100) {\n\t\t\t\treturn 'down';\n\t\t\t} else if (angle >= 170 || angle <= -170) {\n\t\t\t\treturn 'left';\n\t\t\t} else if (angle >= -35 && angle <= 10) {\n\t\t\t\treturn 'right';\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t_drag: function(e) {\n\t\t\t//\t\t\tif (this.needReset) {\n\t\t\t//\t\t\t\te.stopPropagation(); //disable parent drag(nested scroller)\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tif (this.options.scrollY || detail.direction === 'up' || detail.direction === 'down') { //如果是竖向滚动或手势方向是上或下\n\t\t\t\t//ios8 hack\n\t\t\t\tif ($.os.ios && parseFloat($.os.version) >= 8) { //多webview时，离开当前webview会导致后续touch事件不触发\n\t\t\t\t\tvar clientY = detail.gesture.touches[0].clientY;\n\t\t\t\t\t//下拉刷新 or 上拉加载\n\t\t\t\t\tif ((clientY + 10) > window.innerHeight || clientY < 10) {\n\t\t\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar isPreventDefault = isReturn = false;\n\t\t\tvar direction = this._getDirectionByAngle(detail.angle);\n\t\t\tif (detail.direction === 'left' || detail.direction === 'right') {\n\t\t\t\tif (this.options.scrollX) {\n\t\t\t\t\tisPreventDefault = true;\n\t\t\t\t\tif (!this.moved) { //识别角度(该角度导致轮播不灵敏)\n\t\t\t\t\t\t//\t\t\t\t\t\tif (direction !== 'left' && direction !== 'right') {\n\t\t\t\t\t\t//\t\t\t\t\t\t\tisReturn = true;\n\t\t\t\t\t\t//\t\t\t\t\t\t} else {\n\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (this.options.scrollY && !this.moved) {\n\t\t\t\t\tisReturn = true;\n\t\t\t\t}\n\t\t\t} else if (detail.direction === 'up' || detail.direction === 'down') {\n\t\t\t\tif (this.options.scrollY) {\n\t\t\t\t\tisPreventDefault = true;\n\t\t\t\t\t//\t\t\t\t\tif (!this.moved) { //识别角度,竖向滚动似乎没必要进行小角度验证\n\t\t\t\t\t//\t\t\t\t\t\tif (direction !== 'up' && direction !== 'down') {\n\t\t\t\t\t//\t\t\t\t\t\t\tisReturn = true;\n\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t\tif (!this.moved) {\n\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.options.scrollX && !this.moved) {\n\t\t\t\t\tisReturn = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisReturn = true;\n\t\t\t}\n\t\t\tif (this.moved || isPreventDefault) {\n\t\t\t\te.stopPropagation(); //阻止冒泡(scroll类嵌套)\n\t\t\t\tdetail.gesture && detail.gesture.preventDefault();\n\t\t\t}\n\t\t\tif (isReturn) { //禁止非法方向滚动\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.moved) {\n\t\t\t\t$.trigger(this.scroller, 'scrollstart', this);\n\t\t\t} else {\n\t\t\t\te.stopPropagation(); //move期间阻止冒泡(scroll嵌套)\n\t\t\t}\n\t\t\tvar deltaX = 0;\n\t\t\tvar deltaY = 0;\n\t\t\tif (!this.moved) { //start\n\t\t\t\tdeltaX = detail.deltaX;\n\t\t\t\tdeltaY = detail.deltaY;\n\t\t\t} else { //move\n\t\t\t\tdeltaX = detail.deltaX - $.gestures.session.prevTouch.deltaX;\n\t\t\t\tdeltaY = detail.deltaY - $.gestures.session.prevTouch.deltaY;\n\t\t\t}\n\t\t\tvar absDeltaX = Math.abs(detail.deltaX);\n\t\t\tvar absDeltaY = Math.abs(detail.deltaY);\n\t\t\tif (absDeltaX > absDeltaY + this.options.directionLockThreshold) {\n\t\t\t\tdeltaY = 0;\n\t\t\t} else if (absDeltaY >= absDeltaX + this.options.directionLockThreshold) {\n\t\t\t\tdeltaX = 0;\n\t\t\t}\n\n\t\t\tdeltaX = this.hasHorizontalScroll ? deltaX : 0;\n\t\t\tdeltaY = this.hasVerticalScroll ? deltaY : 0;\n\t\t\tvar newX = this.x + deltaX;\n\t\t\tvar newY = this.y + deltaY;\n\t\t\t// Slow down if outside of the boundaries\n\t\t\tif (newX > 0 || newX < this.maxScrollX) {\n\t\t\t\tnewX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n\t\t\t}\n\t\t\tif (newY > 0 || newY < this.maxScrollY) {\n\t\t\t\tnewY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n\t\t\t}\n\n\t\t\tif (!this.requestAnimationFrame) {\n\t\t\t\tthis._updateTranslate();\n\t\t\t}\n\t\t\tthis.direction = detail.deltaX > 0 ? 'right' : 'left';\n\t\t\tthis.moved = true;\n\t\t\tthis.x = newX;\n\t\t\tthis.y = newY;\n\t\t\t$.trigger(this.scroller, 'scroll', this);\n\t\t},\n\t\t_flick: function(e) {\n\t\t\t//\t\t\tif (!this.moved || this.needReset) {\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tif (!this.moved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t\tvar detail = e.detail;\n\t\t\tthis._clearRequestAnimationFrame();\n\t\t\tif (e.type === 'dragend' && detail.flick) { //dragend\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar newX = Math.round(this.x);\n\t\t\tvar newY = Math.round(this.y);\n\n\t\t\tthis.isInTransition = false;\n\t\t\t// reset if we are outside of the boundaries\n\t\t\tif (this.resetPosition(this.options.bounceTime)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.scrollTo(newX, newY); // ensures that the last position is rounded\n\n\t\t\tif (e.type === 'dragend') { //dragend\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar time = 0;\n\t\t\tvar easing = '';\n\t\t\t// start momentum animation if needed\n\t\t\tif (this.options.momentum && detail.flickTime < 300) {\n\t\t\t\tmomentumX = this.hasHorizontalScroll ? this._momentum(this.x, detail.flickDistanceX, detail.flickTime, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : {\n\t\t\t\t\tdestination: newX,\n\t\t\t\t\tduration: 0\n\t\t\t\t};\n\t\t\t\tmomentumY = this.hasVerticalScroll ? this._momentum(this.y, detail.flickDistanceY, detail.flickTime, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : {\n\t\t\t\t\tdestination: newY,\n\t\t\t\t\tduration: 0\n\t\t\t\t};\n\t\t\t\tnewX = momentumX.destination;\n\t\t\t\tnewY = momentumY.destination;\n\t\t\t\ttime = Math.max(momentumX.duration, momentumY.duration);\n\t\t\t\tthis.isInTransition = true;\n\t\t\t}\n\n\t\t\tif (newX != this.x || newY != this.y) {\n\t\t\t\tif (newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY) {\n\t\t\t\t\teasing = ease.quadratic;\n\t\t\t\t}\n\t\t\t\tthis.scrollTo(newX, newY, time, easing);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t//\t\t\te.stopPropagation();\n\t\t},\n\t\t_end: function(e) {\n\t\t\tthis.needReset = false;\n\t\t\tif ((!this.moved && this.needReset) || e.type === $.EVENT_CANCEL) {\n\t\t\t\tthis.resetPosition();\n\t\t\t}\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target != this.scroller || !this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._transitionTime();\n\t\t\tif (!this.resetPosition(this.options.bounceTime)) {\n\t\t\t\tthis.isInTransition = false;\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t_scrollend: function(e) {\n\t\t\tif ((this.y === 0 && this.maxScrollY === 0) || (Math.abs(this.y) > 0 && this.y <= this.maxScrollY)) {\n\t\t\t\t$.trigger(this.scroller, 'scrollbottom', this);\n\t\t\t}\n\t\t},\n\t\t_resize: function() {\n\t\t\tvar that = this;\n\t\t\tclearTimeout(that.resizeTimeout);\n\t\t\tthat.resizeTimeout = setTimeout(function() {\n\t\t\t\tthat.refresh();\n\t\t\t}, that.options.resizePolling);\n\t\t},\n\t\t_transitionTime: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tthis.scrollerStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\t}\n\t\t\tif (this.options.fixedBadAndorid && !time && $.os.isBadAndroid) {\n\t\t\t\tthis.scrollerStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].transitionTime(time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (time) { //自定义timer，保证webkitTransitionEnd始终触发\n\t\t\t\tthis.transitionTimer && this.transitionTimer.cancel();\n\t\t\t\tthis.transitionTimer = $.later(function() {\n\t\t\t\t\t$.trigger(this.scroller, 'webkitTransitionEnd');\n\t\t\t\t}, time + 100, this);\n\t\t\t}\n\t\t},\n\t\t_transitionTimingFunction: function(easing) {\n\t\t\tthis.scrollerStyle['webkitTransitionTimingFunction'] = easing;\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = easing;\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].transitionTimingFunction(easing);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_translate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t},\n\t\t_clearRequestAnimationFrame: function() {\n\t\t\tif (this.requestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(this.requestAnimationFrame);\n\t\t\t\tthis.requestAnimationFrame = null;\n\t\t\t}\n\t\t},\n\t\t_updateTranslate: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.x !== self.lastX || self.y !== self.lastY) {\n\t\t\t\tself.setTranslate(self.x, self.y);\n\t\t\t}\n\t\t\tself.requestAnimationFrame = requestAnimationFrame(function() {\n\t\t\t\tself._updateTranslate();\n\t\t\t});\n\t\t},\n\t\t_createScrollBar: function(clazz) {\n\t\t\tvar scrollbar = document.createElement('div');\n\t\t\tvar indicator = document.createElement('div');\n\t\t\tscrollbar.className = CLASS_SCROLLBAR + ' ' + clazz;\n\t\t\tindicator.className = CLASS_INDICATOR;\n\t\t\tscrollbar.appendChild(indicator);\n\t\t\tif (clazz === CLASS_SCROLLBAR_VERTICAL) {\n\t\t\t\tthis.scrollbarY = scrollbar;\n\t\t\t\tthis.scrollbarIndicatorY = indicator;\n\t\t\t} else if (clazz === CLASS_SCROLLBAR_HORIZONTAL) {\n\t\t\t\tthis.scrollbarX = scrollbar;\n\t\t\t\tthis.scrollbarIndicatorX = indicator;\n\t\t\t}\n\t\t\tthis.wrapper.appendChild(scrollbar);\n\t\t\treturn scrollbar;\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t_reLayout: function() {\n\t\t\tif (!this.hasHorizontalScroll) {\n\t\t\t\tthis.maxScrollX = 0;\n\t\t\t\tthis.scrollerWidth = this.wrapperWidth;\n\t\t\t}\n\n\t\t\tif (!this.hasVerticalScroll) {\n\t\t\t\tthis.maxScrollY = 0;\n\t\t\t\tthis.scrollerHeight = this.wrapperHeight;\n\t\t\t}\n\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.refresh();\n\t\t\t});\n\n\t\t\t//以防slider类嵌套使用\n\t\t\tif (this.options.snap && typeof this.options.snap === 'string') {\n\t\t\t\tvar items = this.scroller.querySelectorAll(this.options.snap);\n\t\t\t\tthis.itemLength = 0;\n\t\t\t\tthis.snaps = [];\n\t\t\t\tfor (var i = 0, len = items.length; i < len; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item.parentNode === this.scroller) {\n\t\t\t\t\t\tthis.itemLength++;\n\t\t\t\t\t\tthis.snaps.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._initSnap(); //需要每次都_initSnap么。其实init的时候执行一次，后续resize的时候执行一次就行了吧.先这么做吧，如果影响性能，再调整\n\t\t\t}\n\t\t},\n\t\t_momentum: function(current, distance, time, lowerMargin, wrapperSize, deceleration) {\n\t\t\tvar speed = parseFloat(Math.abs(distance) / time),\n\t\t\t\tdestination,\n\t\t\t\tduration;\n\n\t\t\tdeceleration = deceleration === undefined ? 0.0006 : deceleration;\n\t\t\tdestination = current + (speed * speed) / (2 * deceleration) * (distance < 0 ? -1 : 1);\n\t\t\tduration = speed / deceleration;\n\t\t\tif (destination < lowerMargin) {\n\t\t\t\tdestination = wrapperSize ? lowerMargin - (wrapperSize / 2.5 * (speed / 8)) : lowerMargin;\n\t\t\t\tdistance = Math.abs(destination - current);\n\t\t\t\tduration = distance / speed;\n\t\t\t} else if (destination > 0) {\n\t\t\t\tdestination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0;\n\t\t\t\tdistance = Math.abs(current) + destination;\n\t\t\t\tduration = distance / speed;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdestination: Math.round(destination),\n\t\t\t\tduration: duration\n\t\t\t};\n\t\t},\n\t\t_getTranslateStr: function(x, y) {\n\t\t\tif (this.options.hardwareAccelerated) {\n\t\t\t\treturn 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ;\n\t\t\t}\n\t\t\treturn 'translate(' + x + 'px,' + y + 'px) ';\n\t\t},\n\t\t//API\n\t\tsetStopped: function(stopped) {\n\t\t\tthis.stopped = !!stopped;\n\t\t},\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.scrollerStyle['webkitTransform'] = this._getTranslateStr(x, y);\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tvar parallaxY = y * this.options.parallaxRatio;\n\t\t\t\tvar scale = 1 + parallaxY / ((this.parallaxHeight - parallaxY) / 2);\n\t\t\t\tif (scale > 1) {\n\t\t\t\t\tthis.parallaxImgStyle['opacity'] = 1 - parallaxY / 100 * this.options.parallaxRatio;\n\t\t\t\t\tthis.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -parallaxY) + ' scale(' + scale + ',' + scale + ')';\n\t\t\t\t} else {\n\t\t\t\t\tthis.parallaxImgStyle['opacity'] = 1;\n\t\t\t\t\tthis.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -1) + ' scale(1,1)';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].updatePosition();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.lastX = this.x;\n\t\t\tthis.lastY = this.y;\n\t\t\t$.trigger(this.scroller, 'scroll', this);\n\t\t},\n\t\treLayout: function() {\n\t\t\tthis.wrapper.offsetHeight;\n\n\t\t\tvar paddingLeft = parseFloat($.getStyles(this.wrapper, 'padding-left')) || 0;\n\t\t\tvar paddingRight = parseFloat($.getStyles(this.wrapper, 'padding-right')) || 0;\n\t\t\tvar paddingTop = parseFloat($.getStyles(this.wrapper, 'padding-top')) || 0;\n\t\t\tvar paddingBottom = parseFloat($.getStyles(this.wrapper, 'padding-bottom')) || 0;\n\n\t\t\tvar clientWidth = this.wrapper.clientWidth;\n\t\t\tvar clientHeight = this.wrapper.clientHeight;\n\n\t\t\tthis.scrollerWidth = this.scroller.offsetWidth;\n\t\t\tthis.scrollerHeight = this.scroller.offsetHeight;\n\n\t\t\tthis.wrapperWidth = clientWidth - paddingLeft - paddingRight;\n\t\t\tthis.wrapperHeight = clientHeight - paddingTop - paddingBottom;\n\n\t\t\tthis.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);\n\t\t\tthis.maxScrollY = Math.min(this.wrapperHeight - this.scrollerHeight, 0);\n\t\t\tthis.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;\n\t\t\tthis.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;\n\t\t\tthis._reLayout();\n\t\t},\n\t\tresetPosition: function(time) {\n\t\t\tvar x = this.x,\n\t\t\t\ty = this.y;\n\n\t\t\ttime = time || 0;\n\t\t\tif (!this.hasHorizontalScroll || this.x > 0) {\n\t\t\t\tx = 0;\n\t\t\t} else if (this.x < this.maxScrollX) {\n\t\t\t\tx = this.maxScrollX;\n\t\t\t}\n\n\t\t\tif (!this.hasVerticalScroll || this.y > 0) {\n\t\t\t\ty = 0;\n\t\t\t} else if (this.y < this.maxScrollY) {\n\t\t\t\ty = this.maxScrollY;\n\t\t\t}\n\n\t\t\tif (x == this.x && y == this.y) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.scrollTo(x, y, time, this.options.scrollEasing);\n\n\t\t\treturn true;\n\t\t},\n\t\t_reInit: function() {\n\t\t\tvar groups = this.wrapper.querySelectorAll('.' + CLASS_SCROLL);\n\t\t\tfor (var i = 0, len = groups.length; i < len; i++) {\n\t\t\t\tif (groups[i].parentNode === this.wrapper) {\n\t\t\t\t\tthis.scroller = groups[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t},\n\t\trefresh: function() {\n\t\t\tthis._reInit();\n\t\t\tthis.reLayout();\n\t\t\t$.trigger(this.scroller, 'refresh', this);\n\t\t\tthis.resetPosition();\n\t\t},\n\t\tscrollTo: function(x, y, time, easing) {\n\t\t\tvar easing = easing || ease.circular;\n\t\t\t//\t\t\tthis.isInTransition = time > 0 && (this.lastX != x || this.lastY != y);\n\t\t\t//暂不严格判断x,y，否则会导致部分版本上不正常触发轮播\n\t\t\tthis.isInTransition = time > 0;\n\t\t\tif (this.isInTransition) {\n\t\t\t\tthis._clearRequestAnimationFrame();\n\t\t\t\tthis._transitionTimingFunction(easing.style);\n\t\t\t\tthis._transitionTime(time);\n\t\t\t\tthis.setTranslate(x, y);\n\t\t\t} else {\n\t\t\t\tthis.setTranslate(x, y);\n\t\t\t}\n\n\t\t},\n\t\tscrollToBottom: function(time, easing) {\n\t\t\ttime = time || this.options.scrollTime;\n\t\t\tthis.scrollTo(0, this.maxScrollY, time, easing);\n\t\t},\n\t\tgotoPage: function(index) {\n\t\t\tthis._gotoPage(index);\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._initEvent(true); //detach\n\t\t\tdelete $.data[this.wrapper.getAttribute('data-scroll')];\n\t\t\tthis.wrapper.setAttribute('data-scroll', '');\n\t\t}\n\t});\n\t//Indicator\n\tvar Indicator = function(scroller, options) {\n\t\tthis.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n\t\tthis.wrapperStyle = this.wrapper.style;\n\t\tthis.indicator = this.wrapper.children[0];\n\t\tthis.indicatorStyle = this.indicator.style;\n\t\tthis.scroller = scroller;\n\n\t\tthis.options = $.extend({\n\t\t\tlistenX: true,\n\t\t\tlistenY: true,\n\t\t\tfade: false,\n\t\t\tspeedRatioX: 0,\n\t\t\tspeedRatioY: 0\n\t\t}, options);\n\n\t\tthis.sizeRatioX = 1;\n\t\tthis.sizeRatioY = 1;\n\t\tthis.maxPosX = 0;\n\t\tthis.maxPosY = 0;\n\n\t\tif (this.options.fade) {\n\t\t\tthis.wrapperStyle['webkitTransform'] = this.scroller.translateZ;\n\t\t\tthis.wrapperStyle['webkitTransitionDuration'] = this.options.fixedBadAndorid && $.os.isBadAndroid ? '0.001s' : '0ms';\n\t\t\tthis.wrapperStyle.opacity = '0';\n\t\t}\n\t}\n\tIndicator.prototype = {\n\t\thandleEvent: function(e) {\n\n\t\t},\n\t\ttransitionTime: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tthis.indicatorStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\tif (this.scroller.options.fixedBadAndorid && !time && $.os.isBadAndroid) {\n\t\t\t\tthis.indicatorStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t}\n\t\t},\n\t\ttransitionTimingFunction: function(easing) {\n\t\t\tthis.indicatorStyle['webkitTransitionTimingFunction'] = easing;\n\t\t},\n\t\trefresh: function() {\n\t\t\tthis.transitionTime();\n\n\t\t\tif (this.options.listenX && !this.options.listenY) {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n\t\t\t} else if (this.options.listenY && !this.options.listenX) {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t\t} else {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t\t}\n\n\t\t\tthis.wrapper.offsetHeight; // force refresh\n\n\t\t\tif (this.options.listenX) {\n\t\t\t\tthis.wrapperWidth = this.wrapper.clientWidth;\n\t\t\t\tthis.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n\t\t\t\tthis.indicatorStyle.width = this.indicatorWidth + 'px';\n\n\t\t\t\tthis.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n\t\t\t\tthis.minBoundaryX = 0;\n\t\t\t\tthis.maxBoundaryX = this.maxPosX;\n\n\t\t\t\tthis.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));\n\t\t\t}\n\n\t\t\tif (this.options.listenY) {\n\t\t\t\tthis.wrapperHeight = this.wrapper.clientHeight;\n\t\t\t\tthis.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n\t\t\t\tthis.indicatorStyle.height = this.indicatorHeight + 'px';\n\n\t\t\t\tthis.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n\t\t\t\tthis.minBoundaryY = 0;\n\t\t\t\tthis.maxBoundaryY = this.maxPosY;\n\n\t\t\t\tthis.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));\n\t\t\t}\n\n\t\t\tthis.updatePosition();\n\t\t},\n\n\t\tupdatePosition: function() {\n\t\t\tvar x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n\t\t\t\ty = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n\t\t\tif (x < this.minBoundaryX) {\n\t\t\t\tthis.width = Math.max(this.indicatorWidth + x, 8);\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\tx = this.minBoundaryX;\n\t\t\t} else if (x > this.maxBoundaryX) {\n\t\t\t\tthis.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\tx = this.maxPosX + this.indicatorWidth - this.width;\n\t\t\t} else if (this.width != this.indicatorWidth) {\n\t\t\t\tthis.width = this.indicatorWidth;\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t}\n\n\t\t\tif (y < this.minBoundaryY) {\n\t\t\t\tthis.height = Math.max(this.indicatorHeight + y * 3, 8);\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\ty = this.minBoundaryY;\n\t\t\t} else if (y > this.maxBoundaryY) {\n\t\t\t\tthis.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\ty = this.maxPosY + this.indicatorHeight - this.height;\n\t\t\t} else if (this.height != this.indicatorHeight) {\n\t\t\t\tthis.height = this.indicatorHeight;\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t}\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\n\t\t\tthis.indicatorStyle['webkitTransform'] = this.scroller._getTranslateStr(x, y);\n\n\t\t},\n\t\tfade: function(val, hold) {\n\t\t\tif (hold && !this.visible) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(this.fadeTimeout);\n\t\t\tthis.fadeTimeout = null;\n\n\t\t\tvar time = val ? 250 : 500,\n\t\t\t\tdelay = val ? 0 : 300;\n\n\t\t\tval = val ? '1' : '0';\n\n\t\t\tthis.wrapperStyle['webkitTransitionDuration'] = time + 'ms';\n\n\t\t\tthis.fadeTimeout = setTimeout((function(val) {\n\t\t\t\tthis.wrapperStyle.opacity = val;\n\t\t\t\tthis.visible = +val;\n\t\t\t}).bind(this, val), delay);\n\t\t}\n\t};\n\n\t$.Scroll = Scroll;\n\n\t$.fn.scroll = function(options) {\n\t\tvar scrollApis = [];\n\t\tthis.each(function() {\n\t\t\tvar scrollApi = null;\n\t\t\tvar self = this;\n\t\t\tvar id = self.getAttribute('data-scroll');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\tvar _options = $.extend({}, options);\n\t\t\t\tif (self.classList.contains('mui-segmented-control')) {\n\t\t\t\t\t_options = $.extend(_options, {\n\t\t\t\t\t\tscrollY: false,\n\t\t\t\t\t\tscrollX: true,\n\t\t\t\t\t\tindicators: false,\n\t\t\t\t\t\tsnap: '.mui-control-item'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$.data[id] = scrollApi = new Scroll(self, _options);\n\t\t\t\tself.setAttribute('data-scroll', id);\n\t\t\t} else {\n\t\t\t\tscrollApi = $.data[id];\n\t\t\t}\n\t\t\tscrollApis.push(scrollApi);\n\t\t});\n\t\treturn scrollApis.length === 1 ? scrollApis[0] : scrollApis;\n\t};\n})(mui, window, document);\n(function($, window, document, undefined) {\n\n\tvar CLASS_VISIBILITY = 'mui-visibility';\n\tvar CLASS_HIDDEN = 'mui-hidden';\n\n\tvar PullRefresh = $.Scroll.extend($.extend({\n\t\thandleEvent: function(e) {\n\t\t\tthis._super(e);\n\t\t\tif (e.type === 'scrollbottom') {\n\t\t\t\tif (e.target === this.scroller) {\n\t\t\t\t\tthis._scrollbottom();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_scrollbottom: function() {\n\t\t\tif (!this.pulldown && !this.loading) {\n\t\t\t\tthis.pulldown = false;\n\t\t\t\tthis._initPullupRefresh();\n\t\t\t\tthis.pullupLoading();\n\t\t\t}\n\t\t},\n\t\t_start: function(e) {\n\t\t\t//仅下拉刷新在start阻止默认事件\n\t\t\tif (e.touches && e.touches.length && e.touches[0].clientX > 30) {\n\t\t\t\te.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n\t\t\t}\n\t\t\tif (!this.loading) {\n\t\t\t\tthis.pulldown = this.pullPocket = this.pullCaption = this.pullLoading = false\n\t\t\t}\n\t\t\tthis._super(e);\n\t\t},\n\t\t_drag: function(e) {\n\t\t\tthis._super(e);\n\t\t\tif (!this.pulldown && !this.loading && this.topPocket && e.detail.direction === 'down' && this.y >= 0) {\n\t\t\t\tthis._initPulldownRefresh();\n\t\t\t}\n\t\t\tif (this.pulldown) {\n\t\t\t\tthis._setCaption(this.y > this.options.down.height ? this.options.down.contentover : this.options.down.contentdown);\n\t\t\t}\n\t\t},\n\n\t\t_reLayout: function() {\n\t\t\tthis.hasVerticalScroll = true;\n\t\t\tthis._super();\n\t\t},\n\t\t//API\n\t\tresetPosition: function(time) {\n\t\t\tif (this.pulldown) {\n\t\t\t\tif (this.y >= this.options.down.height) {\n\t\t\t\t\tthis.pulldownLoading(undefined, time || 0);\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t!this.loading && this.topPocket.classList.remove(CLASS_VISIBILITY);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._super(time);\n\t\t},\n\t\tpulldownLoading: function(y, time) {\n\t\t\ttypeof y === 'undefined' && (y = this.options.down.height); //默认高度\n\t\t\tthis.scrollTo(0, y, time, this.options.bounceEasing);\n\t\t\tif (this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//\t\t\tif (!this.pulldown) {\n\t\t\tthis._initPulldownRefresh();\n\t\t\t//\t\t\t}\n\t\t\tthis._setCaption(this.options.down.contentrefresh);\n\t\t\tthis.loading = true;\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade(0);\n\t\t\t});\n\t\t\tvar callback = this.options.down.callback;\n\t\t\tcallback && callback.call(this);\n\t\t},\n\t\tendPulldownToRefresh: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.topPocket && self.loading && this.pulldown) {\n\t\t\t\tself.scrollTo(0, 0, self.options.bounceTime, self.options.bounceEasing);\n\t\t\t\tself.loading = false;\n\t\t\t\tself._setCaption(self.options.down.contentdown, true);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tself.loading || self.topPocket.classList.remove(CLASS_VISIBILITY);\n\t\t\t\t}, 350);\n\t\t\t}\n\t\t},\n\t\tpullupLoading: function(callback, x, time) {\n\t\t\tx = x || 0;\n\t\t\tthis.scrollTo(x, this.maxScrollY, time, this.options.bounceEasing);\n\t\t\tif (this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._initPullupRefresh();\n\t\t\tthis._setCaption(this.options.up.contentrefresh);\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade(0);\n\t\t\t});\n\t\t\tthis.loading = true;\n\t\t\tcallback = callback || this.options.up.callback;\n\t\t\tcallback && callback.call(this);\n\t\t},\n\t\tendPullupToRefresh: function(finished) {\n\t\t\tvar self = this;\n\t\t\tif (self.bottomPocket) { // && self.loading && !this.pulldown\n\t\t\t\tself.loading = false;\n\t\t\t\tif (finished) {\n\t\t\t\t\tthis.finished = true;\n\t\t\t\t\tself._setCaption(self.options.up.contentnomore);\n\t\t\t\t\t//\t\t\t\t\tself.bottomPocket.classList.remove(CLASS_VISIBILITY);\n\t\t\t\t\t//\t\t\t\t\tself.bottomPocket.classList.add(CLASS_HIDDEN);\n\t\t\t\t\tself.wrapper.removeEventListener('scrollbottom', self);\n\t\t\t\t} else {\n\t\t\t\t\tself._setCaption(self.options.up.contentdown);\n\t\t\t\t\t//\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tself.loading || self.bottomPocket.classList.remove(CLASS_VISIBILITY);\n\t\t\t\t\t//\t\t\t\t\t}, 300);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdisablePullupToRefresh: function() {\n\t\t\tthis._initPullupRefresh();\n\t\t\tthis.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN;\n\t\t\tthis.wrapper.removeEventListener('scrollbottom', this);\n\t\t},\n\t\tenablePullupToRefresh: function() {\n\t\t\tthis._initPullupRefresh();\n\t\t\tthis.bottomPocket.classList.remove(CLASS_HIDDEN);\n\t\t\tthis._setCaption(this.options.up.contentdown);\n\t\t\tthis.wrapper.addEventListener('scrollbottom', this);\n\t\t},\n\t\trefresh: function(isReset) {\n\t\t\tif (isReset && this.finished) {\n\t\t\t\tthis.enablePullupToRefresh();\n\t\t\t\tthis.finished = false;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\t}, $.PullRefresh));\n\t$.fn.pullRefresh = function(options) {\n\t\tif (this.length === 1) {\n\t\t\tvar self = this[0];\n\t\t\tvar pullRefreshApi = null;\n\t\t\tvar id = self.getAttribute('data-pullrefresh');\n\t\t\tif (!id && typeof options === 'undefined') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\toptions = options || {};\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = pullRefreshApi = new PullRefresh(self, options);\n\t\t\t\tself.setAttribute('data-pullrefresh', id);\n\t\t\t} else {\n\t\t\t\tpullRefreshApi = $.data[id];\n\t\t\t}\n\t\t\tif (options.down && options.down.auto) { //如果设置了auto，则自动下拉一次\n\t\t\t\tpullRefreshApi.pulldownLoading(options.down.autoY);\n\t\t\t} else if (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n\t\t\t\tpullRefreshApi.pullupLoading();\n\t\t\t}\n\t\t\t//暂不提供这种调用方式吧\t\t\t\n\t\t\t//\t\t\tif (typeof options === 'string') {\n\t\t\t//\t\t\t\tvar methodValue = pullRefreshApi[options].apply(pullRefreshApi, $.slice.call(arguments, 1));\n\t\t\t//\t\t\t\tif (methodValue !== undefined) {\n\t\t\t//\t\t\t\t\treturn methodValue;\n\t\t\t//\t\t\t\t}\n\t\t\t//\t\t\t}\n\t\t\treturn pullRefreshApi;\n\t\t}\n\t};\n})(mui, window, document);\n/**\n * snap 重构\n * @param {Object} $\n * @param {Object} window\n */\n(function($, window) {\n\tvar CLASS_SLIDER = 'mui-slider';\n\tvar CLASS_SLIDER_GROUP = 'mui-slider-group';\n\tvar CLASS_SLIDER_LOOP = 'mui-slider-loop';\n\tvar CLASS_SLIDER_INDICATOR = 'mui-slider-indicator';\n\tvar CLASS_ACTION_PREVIOUS = 'mui-action-previous';\n\tvar CLASS_ACTION_NEXT = 'mui-action-next';\n\tvar CLASS_SLIDER_ITEM = 'mui-slider-item';\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\tvar SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM;\n\tvar SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR;\n\tvar SELECTOR_SLIDER_PROGRESS_BAR = '.mui-slider-progress-bar';\n\n\tvar Slider = $.Slider = $.Scroll.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis._super(element, $.extend(true, {\n\t\t\t\tfingers: 1,\n\t\t\t\tinterval: 0, //设置为0，则不定时轮播\n\t\t\t\tscrollY: false,\n\t\t\t\tscrollX: true,\n\t\t\t\tindicators: false,\n\t\t\t\tscrollTime: 1000,\n\t\t\t\tstartX: false,\n\t\t\t\tslideTime: 0, //滑动动画时间\n\t\t\t\tsnap: SELECTOR_SLIDER_ITEM\n\t\t\t}, options));\n\t\t\tif (this.options.startX) {\n\t\t\t\t//\t\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._reInit();\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.scrollerStyle = this.scroller.style;\n\t\t\t\tthis.progressBar = this.wrapper.querySelector(SELECTOR_SLIDER_PROGRESS_BAR);\n\t\t\t\tif (this.progressBar) {\n\t\t\t\t\tthis.progressBarWidth = this.progressBar.offsetWidth;\n\t\t\t\t\tthis.progressBarStyle = this.progressBar.style;\n\t\t\t\t}\n\t\t\t\t//忘记这个代码是干什么的了？\n\t\t\t\t//\t\t\t\tthis.x = this._getScroll();\n\t\t\t\t//\t\t\t\tif (this.options.startX === false) {\n\t\t\t\t//\t\t\t\t\tthis.options.startX = this.x;\n\t\t\t\t//\t\t\t\t}\n\t\t\t\t//根据active修正startX\n\n\t\t\t\tthis._super();\n\t\t\t\tthis._initTimer();\n\t\t\t}\n\t\t},\n\t\t_triggerSlide: function() {\n\t\t\tvar self = this;\n\t\t\tself.isInTransition = false;\n\t\t\tvar page = self.currentPage;\n\t\t\tself.slideNumber = self._fixedSlideNumber();\n\t\t\tif (self.loop) {\n\t\t\t\tif (self.slideNumber === 0) {\n\t\t\t\t\tself.setTranslate(self.pages[1][0].x, 0);\n\t\t\t\t} else if (self.slideNumber === self.itemLength - 3) {\n\t\t\t\t\tself.setTranslate(self.pages[self.itemLength - 2][0].x, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self.lastSlideNumber != self.slideNumber) {\n\t\t\t\tself.lastSlideNumber = self.slideNumber;\n\t\t\t\tself.lastPage = self.currentPage;\n\t\t\t\t$.trigger(self.wrapper, 'slide', {\n\t\t\t\t\tslideNumber: self.slideNumber\n\t\t\t\t});\n\t\t\t}\n\t\t\tself._initTimer();\n\t\t},\n\t\t_handleSlide: function(e) {\n\t\t\tvar self = this;\n\t\t\tif (e.target !== self.wrapper) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tdetail.slideNumber = detail.slideNumber || 0;\n\t\t\tvar temps = self.scroller.querySelectorAll(SELECTOR_SLIDER_ITEM);\n\t\t\tvar items = [];\n\t\t\tfor (var i = 0, len = temps.length; i < len; i++) {\n\t\t\t\tvar item = temps[i];\n\t\t\t\tif (item.parentNode === self.scroller) {\n\t\t\t\t\titems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar _slideNumber = detail.slideNumber;\n\t\t\tif (self.loop) {\n\t\t\t\t_slideNumber += 1;\n\t\t\t}\n\t\t\tif (!self.wrapper.classList.contains('mui-segmented-control')) {\n\t\t\t\tfor (var i = 0, len = items.length; i < len; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item.parentNode === self.scroller) {\n\t\t\t\t\t\tif (i === _slideNumber) {\n\t\t\t\t\t\t\titem.classList.add(CLASS_ACTIVE);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.classList.remove(CLASS_ACTIVE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar indicatorWrap = self.wrapper.querySelector('.mui-slider-indicator');\n\t\t\tif (indicatorWrap) {\n\t\t\t\tif (indicatorWrap.getAttribute('data-scroll')) { //scroll\n\t\t\t\t\t$(indicatorWrap).scroll().gotoPage(detail.slideNumber);\n\t\t\t\t}\n\t\t\t\tvar indicators = indicatorWrap.querySelectorAll('.mui-indicator');\n\t\t\t\tif (indicators.length > 0) { //图片轮播\n\t\t\t\t\tfor (var i = 0, len = indicators.length; i < len; i++) {\n\t\t\t\t\t\tindicators[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar number = indicatorWrap.querySelector('.mui-number span');\n\t\t\t\t\tif (number) { //图文表格\n\t\t\t\t\t\tnumber.innerText = (detail.slideNumber + 1);\n\t\t\t\t\t} else { //segmented controls\n\t\t\t\t\t\tvar controlItems = indicatorWrap.querySelectorAll('.mui-control-item');\n\t\t\t\t\t\tfor (var i = 0, len = controlItems.length; i < len; i++) {\n\t\t\t\t\t\t\tcontrolItems[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t},\n\t\t_handleTabShow: function(e) {\n\t\t\tvar self = this;\n\t\t\tself.gotoItem((e.detail.tabNumber || 0), self.options.slideTime);\n\t\t},\n\t\t_handleIndicatorTap: function(event) {\n\t\t\tvar self = this;\n\t\t\tvar target = event.target;\n\t\t\tif (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) {\n\t\t\t\tself[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem']();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\t_initEvent: function(detach) {\n\t\t\tvar self = this;\n\t\t\tself._super(detach);\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\tself.wrapper[action]('slide', this);\n\t\t\tself.wrapper[action]($.eventName('shown', 'tab'), this);\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tthis._super(e);\n\t\t\tswitch (e.type) {\n\t\t\t\tcase 'slide':\n\t\t\t\t\tthis._handleSlide(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.eventName('shown', 'tab'):\n\t\t\t\t\tif (~this.snaps.indexOf(e.target)) { //避免嵌套监听错误的tab show\n\t\t\t\t\t\tthis._handleTabShow(e);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t_scrollend: function(e) {\n\t\t\tthis._super(e);\n\t\t\tthis._triggerSlide(e);\n\t\t},\n\t\t_drag: function(e) {\n\t\t\tthis._super(e);\n\t\t\tvar direction = e.detail.direction;\n\t\t\tif (direction === 'left' || direction === 'right') {\n\t\t\t\t//拖拽期间取消定时\n\t\t\t\tvar slidershowTimer = this.wrapper.getAttribute('data-slidershowTimer');\n\t\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\t_initTimer: function() {\n\t\t\tvar self = this;\n\t\t\tvar slider = self.wrapper;\n\t\t\tvar interval = self.options.interval;\n\t\t\tvar slidershowTimer = slider.getAttribute('data-slidershowTimer');\n\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\t\t\tif (interval) {\n\t\t\t\tslidershowTimer = window.setTimeout(function() {\n\t\t\t\t\tif (!slider) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t//仅slider显示状态进行自动轮播\n\t\t\t\t\tif (!!(slider.offsetWidth || slider.offsetHeight)) {\n\t\t\t\t\t\tself.nextItem(true);\n\t\t\t\t\t\t//下一个\n\t\t\t\t\t}\n\t\t\t\t\tself._initTimer();\n\t\t\t\t}, interval);\n\t\t\t\tslider.setAttribute('data-slidershowTimer', slidershowTimer);\n\t\t\t}\n\t\t},\n\n\t\t_fixedSlideNumber: function(page) {\n\t\t\tpage = page || this.currentPage;\n\t\t\tvar slideNumber = page.pageX;\n\t\t\tif (this.loop) {\n\t\t\t\tif (page.pageX === 0) {\n\t\t\t\t\tslideNumber = this.itemLength - 3;\n\t\t\t\t} else if (page.pageX === (this.itemLength - 1)) {\n\t\t\t\t\tslideNumber = 0;\n\t\t\t\t} else {\n\t\t\t\t\tslideNumber = page.pageX - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn slideNumber;\n\t\t},\n\t\t_reLayout: function() {\n\t\t\tthis.hasHorizontalScroll = true;\n\t\t\tthis.loop = this.scroller.classList.contains(CLASS_SLIDER_LOOP);\n\t\t\tthis._super();\n\t\t},\n\t\t_getScroll: function() {\n\t\t\tvar result = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));\n\t\t\treturn result ? result.x : 0;\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target !== this.scroller || !this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._transitionTime();\n\t\t\tthis.isInTransition = false;\n\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t},\n\t\t_flick: function(e) {\n\t\t\tif (!this.moved) { //无moved\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tthis._clearRequestAnimationFrame();\n\t\t\tthis.isInTransition = true;\n\t\t\t//\t\t\tif (direction === 'up' || direction === 'down') {\n\t\t\t//\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tif (e.type === 'flick') {\n\t\t\t\tif (detail.deltaTime < 200) { //flick，太容易触发，额外校验一下deltaTime\n\t\t\t\t\tthis.x = this._getPage((this.slideNumber + (direction === 'right' ? -1 : 1)), true).x;\n\t\t\t\t}\n\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t} else if (e.type === 'dragend' && !detail.flick) {\n\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t},\n\t\t_initSnap: function() {\n\t\t\tthis.scrollerWidth = this.itemLength * this.scrollerWidth;\n\t\t\tthis.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);\n\t\t\tthis._super();\n\t\t\tif (!this.currentPage.x) {\n\t\t\t\t//当slider处于隐藏状态时，导致snap计算是错误的，临时先这么判断一下，后续要考虑解决所有scroll在隐藏状态下初始化属性不正确的问题\n\t\t\t\tvar currentPage = this.pages[this.loop ? 1 : 0];\n\t\t\t\tcurrentPage = currentPage || this.pages[0];\n\t\t\t\tif (!currentPage) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.currentPage = currentPage[0];\n\t\t\t\tthis.slideNumber = 0;\n\t\t\t\tthis.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? 0 : this.lastSlideNumber;\n\t\t\t} else {\n\t\t\t\tthis.slideNumber = this._fixedSlideNumber();\n\t\t\t\tthis.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? this.slideNumber : this.lastSlideNumber;\n\t\t\t}\n\t\t\tthis.options.startX = this.currentPage.x || 0;\n\t\t},\n\t\t_getSnapX: function(offsetLeft) {\n\t\t\treturn Math.max(-offsetLeft, this.maxScrollX);\n\t\t},\n\t\t_getPage: function(slideNumber, isFlick) {\n\t\t\tif (this.loop) {\n\t\t\t\tif (slideNumber > (this.itemLength - (isFlick ? 2 : 3))) {\n\t\t\t\t\tslideNumber = 1;\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (slideNumber < (isFlick ? -1 : 0)) {\n\t\t\t\t\tslideNumber = this.itemLength - 2;\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else {\n\t\t\t\t\tslideNumber += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isFlick) {\n\t\t\t\t\tif (slideNumber > (this.itemLength - 1)) {\n\t\t\t\t\t\tslideNumber = 0;\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t} else if (slideNumber < 0) {\n\t\t\t\t\t\tslideNumber = this.itemLength - 1;\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tslideNumber = Math.min(Math.max(0, slideNumber), this.itemLength - 1);\n\t\t\t}\n\t\t\treturn this.pages[slideNumber][0];\n\t\t},\n\t\t_gotoItem: function(slideNumber, time) {\n\t\t\tthis.currentPage = this._getPage(slideNumber, true); //此处传true。可保证程序切换时，动画与人手操作一致(第一张，最后一张的切换动画)\n\t\t\tthis.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);\n\t\t\tif (time === 0) {\n\t\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t//API\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis._super(x, y);\n\t\t\tvar progressBar = this.progressBar;\n\t\t\tif (progressBar) {\n\t\t\t\tthis.progressBarStyle.webkitTransform = this._getTranslateStr((-x * (this.progressBarWidth / this.wrapperWidth)), 0);\n\t\t\t}\n\t\t},\n\t\tresetPosition: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tif (this.x > 0) {\n\t\t\t\tthis.x = 0;\n\t\t\t} else if (this.x < this.maxScrollX) {\n\t\t\t\tthis.x = this.maxScrollX;\n\t\t\t}\n\t\t\tthis.currentPage = this._nearestSnap(this.x);\n\t\t\tthis.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);\n\t\t\treturn true;\n\t\t},\n\t\tgotoItem: function(slideNumber, time) {\n\t\t\tthis._gotoItem(slideNumber, typeof time === 'undefined' ? this.options.scrollTime : time);\n\t\t},\n\t\tnextItem: function() {\n\t\t\tthis._gotoItem(this.slideNumber + 1, this.options.scrollTime);\n\t\t},\n\t\tprevItem: function() {\n\t\t\tthis._gotoItem(this.slideNumber - 1, this.options.scrollTime);\n\t\t},\n\t\tgetSlideNumber: function() {\n\t\t\treturn this.slideNumber || 0;\n\t\t},\n\t\t_reInit: function() {\n\t\t\tvar groups = this.wrapper.querySelectorAll('.' + CLASS_SLIDER_GROUP);\n\t\t\tfor (var i = 0, len = groups.length; i < len; i++) {\n\t\t\t\tif (groups[i].parentNode === this.wrapper) {\n\t\t\t\t\tthis.scroller = groups[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t\tif (this.progressBar) {\n\t\t\t\tthis.progressBarWidth = this.progressBar.offsetWidth;\n\t\t\t\tthis.progressBarStyle = this.progressBar.style;\n\t\t\t}\n\t\t},\n\t\trefresh: function(options) {\n\t\t\tif (options) {\n\t\t\t\t$.extend(this.options, options);\n\t\t\t\tthis._super();\n\t\t\t\tthis._initTimer();\n\t\t\t} else {\n\t\t\t\tthis._super();\n\t\t\t}\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._initEvent(true); //detach\n\t\t\tdelete $.data[this.wrapper.getAttribute('data-slider')];\n\t\t\tthis.wrapper.setAttribute('data-slider', '');\n\t\t}\n\t});\n\t$.fn.slider = function(options) {\n\t\tvar slider = null;\n\t\tthis.each(function() {\n\t\t\tvar sliderElement = this;\n\t\t\tif (!this.classList.contains(CLASS_SLIDER)) {\n\t\t\t\tsliderElement = this.querySelector('.' + CLASS_SLIDER);\n\t\t\t}\n\t\t\tif (sliderElement && sliderElement.querySelector(SELECTOR_SLIDER_ITEM)) {\n\t\t\t\tvar id = sliderElement.getAttribute('data-slider');\n\t\t\t\tif (!id) {\n\t\t\t\t\tid = ++$.uuid;\n\t\t\t\t\t$.data[id] = slider = new Slider(sliderElement, options);\n\t\t\t\t\tsliderElement.setAttribute('data-slider', id);\n\t\t\t\t} else {\n\t\t\t\t\tslider = $.data[id];\n\t\t\t\t\tif (slider && options) {\n\t\t\t\t\t\tslider.refresh(options);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn slider;\n\t};\n\t$.ready(function() {\n\t\t//\t\tsetTimeout(function() {\n\t\t$('.mui-slider').slider();\n\t\t$('.mui-scroll-wrapper.mui-slider-indicator.mui-segmented-control').scroll({\n\t\t\tscrollY: false,\n\t\t\tscrollX: true,\n\t\t\tindicators: false,\n\t\t\tsnap: '.mui-control-item'\n\t\t});\n\t\t//\t\t}, 500); //临时处理slider宽度计算不正确的问题(初步确认是scrollbar导致的)\n\n\t});\n})(mui, window);\n/**\n * pullRefresh 5+\n * @param {type} $\n * @returns {undefined}\n */\n(function($, document) {\n    if (!($.os.plus)) { //仅在5+android支持多webview的使用\n        return;\n    }\n    $.plusReady(function() {\n        if (window.__NWin_Enable__ === false) { //不支持多webview，则不用5+下拉刷新\n            return;\n        }\n        var CLASS_PLUS_PULLREFRESH = 'mui-plus-pullrefresh';\n        var CLASS_VISIBILITY = 'mui-visibility';\n        var CLASS_HIDDEN = 'mui-hidden';\n        var CLASS_BLOCK = 'mui-block';\n\n        var CLASS_PULL_CAPTION = 'mui-pull-caption';\n        var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down';\n        var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh';\n        var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore';\n\n        var PlusPullRefresh = $.Class.extend({\n            init: function(element, options) {\n                this.element = element;\n                this.options = options;\n                this.wrapper = this.scroller = element;\n                this._init();\n                this._initPulldownRefreshEvent();\n            },\n            _init: function() {\n                var self = this;\n                //document.addEventListener('plusscrollbottom', this);\n                window.addEventListener('dragup', self);\n                document.addEventListener(\"plusscrollbottom\", self);\n                self.scrollInterval = window.setInterval(function() {\n                    if (self.isScroll && !self.loading) {\n                        if (window.pageYOffset + window.innerHeight + 10 >= document.documentElement.scrollHeight) {\n                            self.isScroll = false; //放在这里是因为快速滚动的话，有可能检测时，还没到底，所以只要有滚动，没到底之前一直检测高度变化\n                            if (self.bottomPocket) {\n                                self.pullupLoading();\n                            }\n                        }\n                    }\n                }, 100);\n            },\n            _initPulldownRefreshEvent: function() {\n                var self = this;\n                $.plusReady(function() {\n                \t\tif(self.options.down.style == \"circle\"){\n\t                \t\t//单webview、原生转圈\n\t                \t\tself.options.webview = plus.webview.currentWebview();\n\t\t\t\t\t\tself.options.webview.setPullToRefresh({\n\t\t\t\t\t\t\tsupport: true,\n\t\t\t\t\t\t\tcolor:self.options.down.color || '#2BD009',\n\t\t\t\t\t\t\theight: self.options.down.height || '50px',\n\t\t\t\t\t\t\trange: self.options.down.range || '100px',\n\t\t\t\t\t\t\tstyle: 'circle',\n\t\t\t\t\t\t\toffset: self.options.down.offset || '0px'\n\t\t\t\t\t\t}, function() {\n\t\t\t\t\t\t\tself.options.down.callback();\n\t\t\t\t\t\t});\n\t               }else if (self.topPocket && self.options.webviewId) {\n                        var webview = plus.webview.getWebviewById(self.options.webviewId);//子窗口\n                        if (!webview) {\n                            return;\n                        }\n                        self.options.webview = webview;\n                        var downOptions = self.options.down;\n                        var height = downOptions.height;\n                        webview.addEventListener('close', function() {\n                            var attrWebviewId = self.options.webviewId && self.options.webviewId.replace(/\\//g, \"_\"); //替换所有\"/\" \n                            self.element.removeAttribute('data-pullrefresh-plus-' + attrWebviewId);\n                        });\n                        webview.addEventListener(\"dragBounce\", function(e) {\n                            if (!self.pulldown) {\n                                self._initPulldownRefresh();\n                            } else {\n                                self.pullPocket.classList.add(CLASS_BLOCK);\n                            }\n                            switch (e.status) {\n                                case \"beforeChangeOffset\": //下拉可刷新状态\n                                    self._setCaption(downOptions.contentdown);\n                                    break;\n                                case \"afterChangeOffset\": //松开可刷新状态\n                                    self._setCaption(downOptions.contentover);\n                                    break;\n                                case \"dragEndAfterChangeOffset\": //正在刷新状态\n                                    //执行下拉刷新所在webview的回调函数\n                                    webview.evalJS(\"window.mui&&mui.options.pullRefresh.down.callback()\");\n                                    self._setCaption(downOptions.contentrefresh);\n                                    break;\n                                default:\n                                    break;\n                            }\n                        }, false);\n                        \n                        webview.setBounce({\n                            position: {\n                                top: height * 2 + 'px'\n                            },\n                            changeoffset: {\n                                top: height + 'px'\n                            }\n                        });\n                    \n\t                }\n                });\n            },\n            handleEvent: function(e) {\n                var self = this;\n                if (self.stopped) {\n                    return;\n                }\n                self.isScroll = false;\n                if (e.type === 'dragup' || e.type === 'plusscrollbottom') {\n                    self.isScroll = true;\n                    setTimeout(function() {\n                        self.isScroll = false;\n                    }, 1000);\n                }\n            }\n        }).extend($.extend({\n            setStopped: function(stopped) { //该方法是子页面调用的\n                this.stopped = !!stopped;\n                //TODO 此处需要设置当前webview的bounce为none,目前5+有BUG\n                var webview = plus.webview.currentWebview();\n                if (this.stopped) {\n                    webview.setStyle({\n                        bounce: 'none'\n                    });\n                    webview.setBounce({\n                        position: {\n                            top: 'none'\n                        }\n                    });\n                } else {\n                    var height = this.options.down.height;\n                    webview.setStyle({\n                        bounce: 'vertical'\n                    });\n                    webview.setBounce({\n                        position: {\n                            top: height * 2 + 'px'\n                        },\n                        changeoffset: {\n                            top: height + 'px'\n                        }\n                    });\n                }\n            },\n            beginPulldown:function() { \n                $.plusReady(function() {\n                \t\tvar _wv = plus.webview.currentWebview();\n                \t\tvar self = this;\n                \t\t//这里延时的目的是为了保证下拉刷新组件初始化完成，后续应该做成有状态的\n                \t\tsetTimeout(function () {\n                \t\t\tif(self.options.down.style == \"circle\"){\n\t                \t\t\t_wv.beginPullToRefresh();\n\t                \t\t}else{\n\t                \t\t\t_wv.setBounce({\n\t\t                        offset: {\n\t\t                            top: this.options.down.height + \"px\"\n\t\t                        }\n\t\t                    });\n\t                \t\t}\n                \t\t},15);\n                }.bind(this));\n            },\n            pulldownLoading: function () {//该方法是子页面调用的，兼容老的历史API\n            \t\tthis.beginPulldown();\n            },\n            _pulldownLoading: function() { //该方法是父页面调用的\n                var self = this;\n                $.plusReady(function() {\n                    var childWebview = plus.webview.getWebviewById(self.options.webviewId);\n                   \tchildWebview && childWebview.setBounce({\n                        offset: {\n                            top: self.options.down.height + \"px\"\n                        }\n                    });\n                });\n            },\n            endPulldown:function(){\n            \t\tvar _wv = plus.webview.currentWebview();\n                //双webview的下拉刷新，需要修改父窗口提示信息\n                if(_wv.parent() && this.options.down.style !== \"circle\"){\n\t                \t_wv.parent().evalJS(\"mui&&mui(document.querySelector('.mui-content')).pullRefresh('\" + JSON.stringify({\n\t                    webviewId: _wv.id\n\t                }) + \"')._endPulldownToRefresh()\");\n                }else{\n                \t\t_wv.endPullToRefresh();\n                }\n            },\n            endPulldownToRefresh: function () {//该方法是子页面调用的，兼容老的历史API\n           \t \tthis.endPulldown();\n            }, \n            _endPulldownToRefresh: function() { //该方法是父页面调用的\n                var self = this;\n                if (self.topPocket && self.options.webview) {\n                    self.options.webview.endPullToRefresh(); //下拉刷新所在webview回弹\n                    self.loading = false;\n                    self._setCaption(self.options.down.contentdown, true);\n                    setTimeout(function() {\n                        self.loading || self.topPocket.classList.remove(CLASS_BLOCK);\n                    }, 350);\n                }\n            },\n            beginPullup:function(callback) {//开始上拉加载\n                var self = this;\n                if (self.isLoading) return;\n                self.isLoading = true;\n                if (self.pulldown !== false) {\n                    self._initPullupRefresh();\n                } else {\n                    this.pullPocket.classList.add(CLASS_BLOCK);\n                }\n                setTimeout(function() {\n                    self.pullLoading.classList.add(CLASS_VISIBILITY);\n                    self.pullLoading.classList.remove(CLASS_HIDDEN);\n                    self.pullCaption.innerHTML = ''; //修正5+里边第一次加载时，文字显示的bug(还会显示出来个“多”,猜测应该是渲染问题导致的)\n                    self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH;\n                    self.pullCaption.innerHTML = self.options.up.contentrefresh;\n                    callback = callback || self.options.up.callback;\n                    callback && callback.call(self);\n                }, 300);\n            },\n            pullupLoading:function (callback) {//兼容老的API\n            \t\tthis.beginPullup(callback);\n            },\n            endPullup:function(finished) {//上拉加载结束\n                var self = this;\n                if (self.pullLoading) {\n                    self.pullLoading.classList.remove(CLASS_VISIBILITY);\n                    self.pullLoading.classList.add(CLASS_HIDDEN);\n                    self.isLoading = false;\n                    if (finished) {\n                        self.finished = true;\n                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;\n                        self.pullCaption.innerHTML = self.options.up.contentnomore;\n                        //取消5+的plusscrollbottom事件\n                        document.removeEventListener('plusscrollbottom', self);\n                        window.removeEventListener('dragup', self);\n                    } else { //初始化时隐藏，后续不再隐藏\n                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                        self.pullCaption.innerHTML = self.options.up.contentdown;\n                    }\n                }\n            },\n            endPullupToRefresh: function (finished) {//上拉加载结束，兼容老的API\n            \t\tthis.endPullup(finished);\n            },\n            disablePullupToRefresh: function() {\n                this._initPullupRefresh();\n                this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN;\n                window.removeEventListener('dragup', this);\n            },\n            enablePullupToRefresh: function() {\n                this._initPullupRefresh();\n                this.bottomPocket.classList.remove(CLASS_HIDDEN);\n                this.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                this.pullCaption.innerHTML = this.options.up.contentdown;\n                document.addEventListener(\"plusscrollbottom\", this);\n                window.addEventListener('dragup', this);\n            },\n            scrollTo: function(x, y, time) {\n                $.scrollTo(y, time);\n            },\n            scrollToBottom: function(time) {\n                $.scrollTo(document.documentElement.scrollHeight, time);\n            },\n            refresh: function(isReset) {\n                if (isReset && this.finished) {\n                    this.enablePullupToRefresh();\n                    this.finished = false;\n                }\n            }\n        }, $.PullRefresh));\n\n        //override h5 pullRefresh\n        $.fn.pullRefresh_native = function(options) {\n            var self;\n            if (this.length === 0) {\n                self = document.createElement('div');\n                self.className = 'mui-content';\n                document.body.appendChild(self);\n            } else {\n                self = this[0];\n            }\n            var args = options;\n            //一个父需要支持多个子下拉刷新\n            options = options || {}\n            if (typeof options === 'string') {\n                options = $.parseJSON(options);\n            };\n            !options.webviewId && (options.webviewId = (plus.webview.currentWebview().id || plus.webview.currentWebview().getURL()));\n            var pullRefreshApi = null;\n            var attrWebviewId = options.webviewId && options.webviewId.replace(/\\//g, \"_\"); //替换所有\"/\"\n            var id = self.getAttribute('data-pullrefresh-plus-' + attrWebviewId);\n            if (!id && typeof args === 'undefined') {\n                return false;\n            }\n            if (!id) { //避免重复初始化5+ pullrefresh\n                id = ++$.uuid;\n                self.setAttribute('data-pullrefresh-plus-' + attrWebviewId, id);\n                document.body.classList.add(CLASS_PLUS_PULLREFRESH);\n                $.data[id] = pullRefreshApi = new PlusPullRefresh(self, options);\n            } else {\n                pullRefreshApi = $.data[id];\n            }\n            if (options.down && options.down.auto) { //如果设置了auto，则自动下拉一次\n                //pullRefreshApi._pulldownLoading(); //parent webview\n                pullRefreshApi.beginPulldown();\n            } else if (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n                pullRefreshApi.beginPullup();\n            }\n            return pullRefreshApi;\n        };\n    });\n\n})(mui, document);\n/**\n * off-canvas\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} action\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\tvar CLASS_OFF_CANVAS_LEFT = 'mui-off-canvas-left';\n\tvar CLASS_OFF_CANVAS_RIGHT = 'mui-off-canvas-right';\n\tvar CLASS_ACTION_BACKDROP = 'mui-off-canvas-backdrop';\n\tvar CLASS_OFF_CANVAS_WRAP = 'mui-off-canvas-wrap';\n\n\tvar CLASS_SLIDE_IN = 'mui-slide-in';\n\tvar CLASS_ACTIVE = 'mui-active';\n\n\n\tvar CLASS_TRANSITIONING = 'mui-transitioning';\n\n\tvar SELECTOR_INNER_WRAP = '.mui-inner-wrap';\n\n\n\tvar OffCanvas = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.wrapper = this.element = element;\n\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\tthis.classList = this.wrapper.classList;\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.options = $.extend(true, {\n\t\t\t\t\tdragThresholdX: 10,\n\t\t\t\t\tscale: 0.8,\n\t\t\t\t\topacity: 0.1,\n\t\t\t\t\tpreventDefaultException: {\n\t\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/\n\t\t\t\t\t},\n\t\t\t\t}, options);\n\t\t\t\tdocument.body.classList.add('mui-fullscreen'); //fullscreen\n\t\t\t\tthis.refresh();\n\t\t\t\tthis.initEvent();\n\t\t\t}\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\trefresh: function(offCanvas) {\n\t\t\t//\t\t\toffCanvas && !offCanvas.classList.contains(CLASS_ACTIVE) && this.classList.remove(CLASS_ACTIVE);\n\t\t\tthis.slideIn = this.classList.contains(CLASS_SLIDE_IN);\n\t\t\tthis.scalable = this.classList.contains('mui-scalable') && !this.slideIn;\n\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\t//\t\t\t!offCanvas && this.scroller.classList.remove(CLASS_TRANSITIONING);\n\t\t\t//\t\t\t!offCanvas && this.scroller.setAttribute('style', '');\n\t\t\tthis.offCanvasLefts = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_LEFT);\n\t\t\tthis.offCanvasRights = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_RIGHT);\n\t\t\tif (offCanvas) {\n\t\t\t\tif (offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {\n\t\t\t\t\tthis.offCanvasLeft = offCanvas;\n\t\t\t\t} else if (offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {\n\t\t\t\t\tthis.offCanvasRight = offCanvas;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.offCanvasRight = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT);\n\t\t\t\tthis.offCanvasLeft = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT);\n\t\t\t}\n\t\t\tthis.offCanvasRightWidth = this.offCanvasLeftWidth = 0;\n\t\t\tthis.offCanvasLeftSlideIn = this.offCanvasRightSlideIn = false;\n\t\t\tif (this.offCanvasRight) {\n\t\t\t\tthis.offCanvasRightWidth = this.offCanvasRight.offsetWidth;\n\t\t\t\tthis.offCanvasRightSlideIn = this.slideIn && (this.offCanvasRight.parentNode === this.wrapper);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.classList.remove(CLASS_ACTIVE);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.setAttribute('style', '');\n\t\t\t}\n\t\t\tif (this.offCanvasLeft) {\n\t\t\t\tthis.offCanvasLeftWidth = this.offCanvasLeft.offsetWidth;\n\t\t\t\tthis.offCanvasLeftSlideIn = this.slideIn && (this.offCanvasLeft.parentNode === this.wrapper);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.classList.remove(CLASS_ACTIVE);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.setAttribute('style', '');\n\t\t\t}\n\t\t\tthis.backdrop = this.scroller.querySelector('.' + CLASS_ACTION_BACKDROP);\n\n\t\t\tthis.options.dragThresholdX = this.options.dragThresholdX || 10;\n\n\t\t\tthis.visible = false;\n\t\t\tthis.startX = null;\n\t\t\tthis.lastX = null;\n\t\t\tthis.offsetX = null;\n\t\t\tthis.lastTranslateX = null;\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\te.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd': //有个bug需要处理，需要考虑假设没有触发webkitTransitionEnd的情况\n\t\t\t\t\tif (e.target === this.scroller) {\n\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tvar detail = e.detail;\n\t\t\t\t\tif (!this.startX) {\n\t\t\t\t\t\tthis.startX = detail.center.x;\n\t\t\t\t\t\tthis.lastX = this.startX;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastX = detail.center.x;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.isDragging && Math.abs(this.lastX - this.startX) > this.options.dragThresholdX && (detail.direction === 'left' || (detail.direction === 'right'))) {\n\t\t\t\t\t\tif (this.slideIn) {\n\t\t\t\t\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\t\t\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\tif (this.offCanvasRight && this.offCanvasRight.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (detail.direction === 'left' && this.offCanvasRight) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t} else if (detail.direction === 'right' && this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.scroller = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\tif (detail.direction === 'left') {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (detail.direction === 'right') {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.offCanvas && this.scroller) {\n\t\t\t\t\t\t\tthis.startX = this.lastX;\n\t\t\t\t\t\t\tthis.isDragging = true;\n\n\t\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\n\t\t\t\t\t\t\tthis.offCanvas.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\t\t\tthis.scroller.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\t\t\tthis.offsetX = this.getTranslateX();\n\t\t\t\t\t\t\tthis._initOffCanvasVisible();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.isDragging) {\n\t\t\t\t\t\tthis.updateTranslate(this.offsetX + (this.lastX - this.startX));\n\t\t\t\t\t\tdetail.gesture.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tif (this.isDragging) {\n\t\t\t\t\t\tvar detail = e.detail;\n\t\t\t\t\t\tvar direction = detail.direction;\n\t\t\t\t\t\tthis.isDragging = false;\n\t\t\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tvar ratio = 0;\n\t\t\t\t\t\tvar x = this.getTranslateX();\n\t\t\t\t\t\tif (!this.slideIn) {\n\t\t\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 0) {\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t\tthis._dispatchEvent(); //此处不触发webkitTransitionEnd,所以手动dispatch\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (direction === 'right' && ratio >= 0 && (ratio >= 0.5 || detail.swipe)) { //右滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio < 0 && (ratio > -0.5 || detail.swipe)) { //右滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && ratio < 0.5) { //右滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio < 0.5) { //右滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio <= 0 && (ratio <= -0.5 || detail.swipe)) { //左滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio > 0 && (ratio <= 0.5 || detail.swipe)) { //左滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio < 0 && ratio >= -0.5) { //左滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio > 0.5) { //左滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else { //默认关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 1 || ratio === -1) { //此处不触发webkitTransitionEnd,所以手动dispatch\n\t\t\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (direction === 'right' && ratio <= 0 && (ratio >= -0.5 || detail.swipe)) { //右滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && (ratio >= 0.5 || detail.swipe)) { //右滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio <= -0.5) { //右滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && ratio <= 0.5) { //右滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= 0 && (ratio <= 0.5 || detail.swipe)) { //左滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio < 0 && (ratio <= -0.5 || detail.swipe)) { //左滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= 0.5) { //左滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= -0.5 && ratio < 0) { //左滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 1 || ratio === -1 || ratio === 0) {\n\t\t\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t_dispatchEvent: function() {\n\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t$.trigger(this.wrapper, 'shown', this);\n\t\t\t} else {\n\t\t\t\t$.trigger(this.wrapper, 'hidden', this);\n\t\t\t}\n\t\t},\n\t\t_initOffCanvasVisible: function() {\n\t\t\tif (!this.visible) {\n\t\t\t\tthis.visible = true;\n\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\tthis.offCanvasLeft.style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\tthis.offCanvasRight.style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinitEvent: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.backdrop) {\n\t\t\t\tself.backdrop.addEventListener('tap', function(e) {\n\t\t\t\t\tself.close();\n\t\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.classList.contains('mui-draggable')) {\n\t\t\t\tthis.wrapper.addEventListener($.EVENT_START, this); //临时处理\n\t\t\t\tthis.wrapper.addEventListener('drag', this);\n\t\t\t\tthis.wrapper.addEventListener('dragend', this);\n\t\t\t}\n\t\t\tthis.wrapper.addEventListener('webkitTransitionEnd', this);\n\t\t},\n\t\topenPercentage: function(percentage) {\n\t\t\tvar p = percentage / 100;\n\t\t\tif (!this.slideIn) {\n\t\t\t\tif (this.offCanvasLeft && percentage >= 0) {\n\t\t\t\t\tthis.updateTranslate(this.offCanvasLeftWidth * p);\n\t\t\t\t\tthis.offCanvasLeft.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t} else if (this.offCanvasRight && percentage <= 0) {\n\t\t\t\t\tthis.updateTranslate(this.offCanvasRightWidth * p);\n\t\t\t\t\tthis.offCanvasRight.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tthis.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t} else {\n\t\t\t\tif (this.offCanvasLeft && percentage >= 0) {\n\t\t\t\t\tp = p === 0 ? -1 : 0;\n\t\t\t\t\tthis.updateTranslate(this.offCanvasLeftWidth * p);\n\t\t\t\t\tthis.offCanvasLeft.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t} else if (this.offCanvasRight && percentage <= 0) {\n\t\t\t\t\tp = p === 0 ? 1 : 0;\n\t\t\t\t\tthis.updateTranslate(this.offCanvasRightWidth * p);\n\t\t\t\t\tthis.offCanvasRight.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tthis.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t}\n\t\t},\n\t\tupdateTranslate: function(x) {\n\t\t\tif (x !== this.lastTranslateX) {\n\t\t\t\tif (!this.slideIn) {\n\t\t\t\t\tif ((!this.offCanvasLeft && x > 0) || (!this.offCanvasRight && x < 0)) {\n\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.leftShowing && x > this.offCanvasLeftWidth) {\n\t\t\t\t\t\tthis.setTranslateX(this.offCanvasLeftWidth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.rightShowing && x < -this.offCanvasRightWidth) {\n\t\t\t\t\t\tthis.setTranslateX(-this.offCanvasRightWidth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setTranslateX(x);\n\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\tthis.leftShowing = true;\n\t\t\t\t\t\tthis.rightShowing = false;\n\t\t\t\t\t\tif (x > 0) {\n\t\t\t\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t$.each(this.offCanvasLefts, function(index, offCanvas) {\n\t\t\t\t\t\t\t\t\tif (offCanvas === this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t\t\tthis.offCanvasLeft.style.zIndex = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = -1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}.bind(this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\t\t\t\tthis.offCanvasRight.style.zIndex = -1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.rightShowing = true;\n\t\t\t\t\t\tthis.leftShowing = false;\n\t\t\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\t\t\t$.each(this.offCanvasRights, function(index, offCanvas) {\n\t\t\t\t\t\t\t\tif (offCanvas === this.offCanvasRight) {\n\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = -1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}.bind(this));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\t\t\tthis.offCanvasLeft.style.zIndex = -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x > this.offCanvasRightWidth) {\n\t\t\t\t\t\t\tthis.setTranslateX(this.offCanvasRightWidth);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (x > 0) {\n\t\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x < -this.offCanvasLeftWidth) {\n\t\t\t\t\t\t\tthis.setTranslateX(-this.offCanvasLeftWidth);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.setTranslateX(x);\n\t\t\t\t}\n\t\t\t\tthis.lastTranslateX = x;\n\t\t\t}\n\t\t},\n\t\tsetTranslateX: $.animationFrame(function(x) {\n\t\t\tif (this.scroller) {\n\t\t\t\tif (this.scalable && this.offCanvas.parentNode === this.wrapper) {\n\t\t\t\t\tvar percent = Math.abs(x) / this.offCanvasWidth;\n\t\t\t\t\tvar zoomOutScale = 1 - (1 - this.options.scale) * percent;\n\t\t\t\t\tvar zoomInScale = this.options.scale + (1 - this.options.scale) * percent;\n\t\t\t\t\tvar zoomOutOpacity = 1 - (1 - this.options.opacity) * percent;\n\t\t\t\t\tvar zoomInOpacity = this.options.opacity + (1 - this.options.opacity) * percent;\n\t\t\t\t\tif (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransformOrigin = '-100%';\n\t\t\t\t\t\tthis.scroller.style.webkitTransformOrigin = 'left';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransformOrigin = '200%';\n\t\t\t\t\t\tthis.scroller.style.webkitTransformOrigin = 'right';\n\t\t\t\t\t}\n\t\t\t\t\tthis.offCanvas.style.opacity = zoomInOpacity;\n\t\t\t\t\tthis.offCanvas.style.webkitTransform = 'translate3d(0,0,0) scale(' + zoomInScale + ')';\n\t\t\t\t\tthis.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0) scale(' + zoomOutScale + ')';\n\t\t\t\t} else {\n\t\t\t\t\tif (this.slideIn) {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}),\n\t\tgetTranslateX: function() {\n\t\t\tif (this.offCanvas) {\n\t\t\t\tvar scroller = this.slideIn ? this.offCanvas : this.scroller;\n\t\t\t\tvar result = $.parseTranslateMatrix($.getStyles(scroller, 'webkitTransform'));\n\t\t\t\treturn (result && result.x) || 0;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\tisShown: function(direction) {\n\t\t\tvar shown = false;\n\t\t\tif (!this.slideIn) {\n\t\t\t\tvar x = this.getTranslateX();\n\t\t\t\tif (direction === 'right') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x < 0;\n\t\t\t\t} else if (direction === 'left') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x > 0;\n\t\t\t\t} else {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x !== 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (direction === 'left') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);\n\t\t\t\t} else if (direction === 'right') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE);\n\t\t\t\t} else {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && (this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn shown;\n\t\t},\n\t\tclose: function() {\n\t\t\tthis._initOffCanvasVisible();\n\t\t\tthis.offCanvas = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);\n\t\t\tthis.offCanvasWidth = this.offCanvas.offsetWidth;\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.offCanvas.offsetHeight;\n\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.openPercentage(0);\n\t\t\t}\n\t\t},\n\t\tshow: function(direction) {\n\t\t\tthis._initOffCanvasVisible();\n\t\t\tif (this.isShown(direction)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!direction) {\n\t\t\t\tdirection = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT) ? 'right' : 'left';\n\t\t\t}\n\t\t\tif (direction === 'right') {\n\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t} else {\n\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t}\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.offCanvas.offsetHeight;\n\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.openPercentage(direction === 'left' ? 100 : -100);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\ttoggle: function(directionOrOffCanvas) {\n\t\t\tvar direction = directionOrOffCanvas;\n\t\t\tif (directionOrOffCanvas && directionOrOffCanvas.classList) {\n\t\t\t\tdirection = directionOrOffCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT) ? 'left' : 'right';\n\t\t\t\tthis.refresh(directionOrOffCanvas);\n\t\t\t}\n\t\t\tif (!this.show(direction)) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t});\n\n\t//hash to offcanvas\n\tvar findOffCanvasContainer = function(target) {\n\t\tparentNode = target.parentNode;\n\t\tif (parentNode) {\n\t\t\tif (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\treturn parentNode;\n\t\t\t} else {\n\t\t\t\tparentNode = parentNode.parentNode;\n\t\t\t\tif (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\t\treturn parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\tvar offcanvas = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif (offcanvas) {\n\t\t\t\tvar container = findOffCanvasContainer(offcanvas);\n\t\t\t\tif (container) {\n\t\t\t\t\t$.targets._container = container;\n\t\t\t\t\treturn offcanvas;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 60,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\twindow.addEventListener('tap', function(e) {\n\t\tif (!$.targets.offcanvas) {\n\t\t\treturn;\n\t\t}\n\t\t//TODO 此处类型的代码后续考虑统一优化(target机制)，现在的实现费力不讨好\n\t\tvar target = e.target;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.tagName === 'A' && target.hash && target.hash === ('#' + $.targets.offcanvas.id)) {\n\t\t\t\te.detail && e.detail.gesture && e.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\t\t$($.targets._container).offCanvas().toggle($.targets.offcanvas);\n\t\t\t\t$.targets.offcanvas = $.targets._container = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\t$.fn.offCanvas = function(options) {\n\t\tvar offCanvasApis = [];\n\t\tthis.each(function() {\n\t\t\tvar offCanvasApi = null;\n\t\t\tvar self = this;\n\t\t\t//hack old version\n\t\t\tif (!self.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\tself = findOffCanvasContainer(self);\n\t\t\t}\n\t\t\tvar id = self.getAttribute('data-offCanvas');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = offCanvasApi = new OffCanvas(self, options);\n\t\t\t\tself.setAttribute('data-offCanvas', id);\n\t\t\t} else {\n\t\t\t\toffCanvasApi = $.data[id];\n\t\t\t}\n\t\t\tif (options === 'show' || options === 'close' || options === 'toggle') {\n\t\t\t\toffCanvasApi.toggle();\n\t\t\t}\n\t\t\toffCanvasApis.push(offCanvasApi);\n\t\t});\n\t\treturn offCanvasApis.length === 1 ? offCanvasApis[0] : offCanvasApis;\n\t};\n\t$.ready(function() {\n\t\t$('.mui-off-canvas-wrap').offCanvas();\n\t});\n})(mui, window, document, 'offcanvas');\n/**\n * actions\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar CLASS_ACTION = 'mui-action';\n\n\tvar handle = function(event, target) {\n\t\tvar className = target.className || '';\n\t\tif (typeof className !== 'string') { //svg className(SVGAnimatedString)\n\t\t\tclassName = '';\n\t\t}\n\t\tif (className && ~className.indexOf(CLASS_ACTION)) {\n\t\t\tif (target.classList.contains('mui-action-back')) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\treturn target;\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 50,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisContinue: true\n\t});\n\n})(mui, 'action');\n/**\n * Modals\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} name\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\tvar CLASS_MODAL = 'mui-modal';\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\tvar modal = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif (modal && modal.classList.contains(CLASS_MODAL)) {\n\t\t\t\treturn modal;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 50,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\twindow.addEventListener('tap', function(event) {\n\t\tif ($.targets.modal) {\n\t\t\tevent.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\t$.targets.modal.classList.toggle('mui-active');\n\t\t}\n\t});\n})(mui, window, document, 'modal');\n/**\n * Popovers\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} name\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\n\tvar CLASS_POPOVER = 'mui-popover';\n\tvar CLASS_POPOVER_ARROW = 'mui-popover-arrow';\n\tvar CLASS_ACTION_POPOVER = 'mui-popover-action';\n\tvar CLASS_BACKDROP = 'mui-backdrop';\n\tvar CLASS_BAR_POPOVER = 'mui-bar-popover';\n\tvar CLASS_BAR_BACKDROP = 'mui-bar-backdrop';\n\tvar CLASS_ACTION_BACKDROP = 'mui-backdrop-action';\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_BOTTOM = 'mui-bottom';\n\n\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\t$.targets._popover = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif ($.targets._popover && $.targets._popover.classList.contains(CLASS_POPOVER)) {\n\t\t\t\treturn target;\n\t\t\t} else {\n\t\t\t\t$.targets._popover = null;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 60,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\tvar onPopoverShown = function(e) {\n\t\tthis.removeEventListener('webkitTransitionEnd', onPopoverShown);\n\t\tthis.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\t$.trigger(this, 'shown', this);\n\t}\n\tvar onPopoverHidden = function(e) {\n\t\tsetStyle(this, 'none');\n\t\tthis.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\tthis.removeEventListener($.EVENT_MOVE, $.preventDefault);\n\t\t$.trigger(this, 'hidden', this);\n\t};\n\n\tvar backdrop = (function() {\n\t\tvar element = document.createElement('div');\n\t\telement.classList.add(CLASS_BACKDROP);\n\t\telement.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\telement.addEventListener('tap', function(e) {\n\t\t\tvar popover = $.targets._popover;\n\t\t\tif (popover) {\n\t\t\t\tpopover.addEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t\tpopover.classList.remove(CLASS_ACTIVE);\n\t\t\t\tremoveBackdrop(popover);\n\t\t\t}\n\t\t});\n\n\t\treturn element;\n\t}());\n\tvar removeBackdropTimer;\n\tvar removeBackdrop = function(popover) {\n\t\tbackdrop.setAttribute('style', 'opacity:0');\n\t\t$.targets.popover = $.targets._popover = null; //reset\n\t\tremoveBackdropTimer = $.later(function() {\n\t\t\tif (!popover.classList.contains(CLASS_ACTIVE) && backdrop.parentNode && backdrop.parentNode === document.body) {\n\t\t\t\tdocument.body.removeChild(backdrop);\n\t\t\t}\n\t\t}, 350);\n\t};\n\twindow.addEventListener('tap', function(e) {\n\t\tif (!$.targets.popover) {\n\t\t\treturn;\n\t\t}\n\t\tvar toggle = false;\n\t\tvar target = e.target;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target === $.targets.popover) {\n\t\t\t\ttoggle = true;\n\t\t\t}\n\t\t}\n\t\tif (toggle) {\n\t\t\te.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\ttogglePopover($.targets._popover, $.targets.popover);\n\t\t}\n\n\t});\n\n\tvar togglePopover = function(popover, anchor, state) {\n\t\tif ((state === 'show' && popover.classList.contains(CLASS_ACTIVE)) || (state === 'hide' && !popover.classList.contains(CLASS_ACTIVE))) {\n\t\t\treturn;\n\t\t}\n\t\tremoveBackdropTimer && removeBackdropTimer.cancel(); //取消remove的timer\n\t\t//remove一遍，以免来回快速切换，导致webkitTransitionEnd不触发，无法remove\n\t\tpopover.removeEventListener('webkitTransitionEnd', onPopoverShown);\n\t\tpopover.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\tbackdrop.classList.remove(CLASS_BAR_BACKDROP);\n\t\tbackdrop.classList.remove(CLASS_ACTION_BACKDROP);\n\t\tvar _popover = document.querySelector('.mui-popover.mui-active');\n\t\tif (_popover) {\n\t\t\t//\t\t\t_popover.setAttribute('style', '');\n\t\t\t_popover.addEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t_popover.classList.remove(CLASS_ACTIVE);\n\t\t\t//\t\t\t_popover.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t//同一个弹出则直接返回，解决同一个popover的toggle\n\t\t\tif (popover === _popover) {\n\t\t\t\tremoveBackdrop(_popover);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tvar isActionSheet = false;\n\t\tif (popover.classList.contains(CLASS_BAR_POPOVER) || popover.classList.contains(CLASS_ACTION_POPOVER)) { //navBar\n\t\t\tif (popover.classList.contains(CLASS_ACTION_POPOVER)) { //action sheet popover\n\t\t\t\tisActionSheet = true;\n\t\t\t\tbackdrop.classList.add(CLASS_ACTION_BACKDROP);\n\t\t\t} else { //bar popover\n\t\t\t\tbackdrop.classList.add(CLASS_BAR_BACKDROP);\n\t\t\t\t//\t\t\t\tif (anchor) {\n\t\t\t\t//\t\t\t\t\tif (anchor.parentNode) {\n\t\t\t\t//\t\t\t\t\t\tvar offsetWidth = anchor.offsetWidth;\n\t\t\t\t//\t\t\t\t\t\tvar offsetLeft = anchor.offsetLeft;\n\t\t\t\t//\t\t\t\t\t\tvar innerWidth = window.innerWidth;\n\t\t\t\t//\t\t\t\t\t\tpopover.style.left = (Math.min(Math.max(offsetLeft, defaultPadding), innerWidth - offsetWidth - defaultPadding)) + \"px\";\n\t\t\t\t//\t\t\t\t\t} else {\n\t\t\t\t//\t\t\t\t\t\t//TODO anchor is position:{left,top,bottom,right}\n\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsetStyle(popover, 'block'); //actionsheet transform\n\t\tpopover.offsetHeight;\n\t\tpopover.classList.add(CLASS_ACTIVE);\n\t\tbackdrop.setAttribute('style', '');\n\t\tdocument.body.appendChild(backdrop);\n\t\tcalPosition(popover, anchor, isActionSheet); //position\n\t\tbackdrop.classList.add(CLASS_ACTIVE);\n\t\tpopover.addEventListener('webkitTransitionEnd', onPopoverShown);\n\t};\n\tvar setStyle = function(popover, display, top, left) {\n\t\tvar style = popover.style;\n\t\tif (typeof display !== 'undefined')\n\t\t\tstyle.display = display;\n\t\tif (typeof top !== 'undefined')\n\t\t\tstyle.top = top + 'px';\n\t\tif (typeof left !== 'undefined')\n\t\t\tstyle.left = left + 'px';\n\t};\n\tvar calPosition = function(popover, anchor, isActionSheet) {\n\t\tif (!popover || !anchor) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isActionSheet) { //actionsheet\n\t\t\tsetStyle(popover, 'block')\n\t\t\treturn;\n\t\t}\n\n\t\tvar wWidth = window.innerWidth;\n\t\tvar wHeight = window.innerHeight;\n\n\t\tvar pWidth = popover.offsetWidth;\n\t\tvar pHeight = popover.offsetHeight;\n\n\t\tvar aWidth = anchor.offsetWidth;\n\t\tvar aHeight = anchor.offsetHeight;\n\t\tvar offset = $.offset(anchor);\n\n\t\tvar arrow = popover.querySelector('.' + CLASS_POPOVER_ARROW);\n\t\tif (!arrow) {\n\t\t\tarrow = document.createElement('div');\n\t\t\tarrow.className = CLASS_POPOVER_ARROW;\n\t\t\tpopover.appendChild(arrow);\n\t\t}\n\t\tvar arrowSize = arrow && arrow.offsetWidth / 2 || 0;\n\n\n\n\t\tvar pTop = 0;\n\t\tvar pLeft = 0;\n\t\tvar diff = 0;\n\t\tvar arrowLeft = 0;\n\t\tvar defaultPadding = popover.classList.contains(CLASS_ACTION_POPOVER) ? 0 : 5;\n\n\t\tvar position = 'top';\n\t\tif ((pHeight + arrowSize) < (offset.top - window.pageYOffset)) { //top\n\t\t\tpTop = offset.top - pHeight - arrowSize;\n\t\t} else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset) - aHeight)) { //bottom\n\t\t\tposition = 'bottom';\n\t\t\tpTop = offset.top + aHeight + arrowSize;\n\t\t} else { //middle\n\t\t\tposition = 'middle';\n\t\t\tpTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset, 0);\n\t\t\tpLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0);\n\t\t}\n\t\tif (position === 'top' || position === 'bottom') {\n\t\t\tpLeft = aWidth / 2 + offset.left - pWidth / 2;\n\t\t\tdiff = pLeft;\n\t\t\tif (pLeft < defaultPadding) pLeft = defaultPadding;\n\t\t\tif (pLeft + pWidth > wWidth) pLeft = wWidth - pWidth - defaultPadding;\n\n\t\t\tif (arrow) {\n\t\t\t\tif (position === 'top') {\n\t\t\t\t\tarrow.classList.add(CLASS_BOTTOM);\n\t\t\t\t} else {\n\t\t\t\t\tarrow.classList.remove(CLASS_BOTTOM);\n\t\t\t\t}\n\t\t\t\tdiff = diff - pLeft;\n\t\t\t\tarrowLeft = (pWidth / 2 - arrowSize / 2 + diff);\n\t\t\t\tarrowLeft = Math.max(Math.min(arrowLeft, pWidth - arrowSize * 2 - 6), 6);\n\t\t\t\tarrow.setAttribute('style', 'left:' + arrowLeft + 'px');\n\t\t\t}\n\t\t} else if (position === 'middle') {\n\t\t\tarrow.setAttribute('style', 'display:none');\n\t\t}\n\t\tsetStyle(popover, 'block', pTop, pLeft);\n\t};\n\n\t$.createMask = function(callback) {\n\t\tvar element = document.createElement('div');\n\t\telement.classList.add(CLASS_BACKDROP);\n\t\telement.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\telement.addEventListener('tap', function() {\n\t\t\tmask.close();\n\t\t});\n\t\tvar mask = [element];\n\t\tmask._show = false;\n\t\tmask.show = function() {\n\t\t\tmask._show = true;\n\t\t\telement.setAttribute('style', 'opacity:1');\n\t\t\tdocument.body.appendChild(element);\n\t\t\treturn mask;\n\t\t};\n\t\tmask._remove = function() {\n\t\t\tif (mask._show) {\n\t\t\t\tmask._show = false;\n\t\t\t\telement.setAttribute('style', 'opacity:0');\n\t\t\t\t$.later(function() {\n\t\t\t\t\tvar body = document.body;\n\t\t\t\t\telement.parentNode === body && body.removeChild(element);\n\t\t\t\t}, 350);\n\t\t\t}\n\t\t\treturn mask;\n\t\t};\n\t\tmask.close = function() {\n\t\t\tif (callback) {\n\t\t\t\tif (callback() !== false) {\n\t\t\t\t\tmask._remove();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmask._remove();\n\t\t\t}\n\t\t};\n\t\treturn mask;\n\t};\n\t$.fn.popover = function() {\n\t\tvar args = arguments;\n\t\tthis.each(function() {\n\t\t\t$.targets._popover = this;\n\t\t\tif (args[0] === 'show' || args[0] === 'hide' || args[0] === 'toggle') {\n\t\t\t\ttogglePopover(this, args[1], args[0]);\n\t\t\t}\n\t\t});\n\t};\n\n})(mui, window, document, 'popover');\n/**\n * segmented-controllers\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, document, name, undefined) {\n\n\tvar CLASS_CONTROL_ITEM = 'mui-control-item';\n\tvar CLASS_SEGMENTED_CONTROL = 'mui-segmented-control';\n\tvar CLASS_SEGMENTED_CONTROL_VERTICAL = 'mui-segmented-control-vertical';\n\tvar CLASS_CONTROL_CONTENT = 'mui-control-content';\n\tvar CLASS_TAB_BAR = 'mui-bar-tab';\n\tvar CLASS_TAB_ITEM = 'mui-tab-item';\n\tvar CLASS_SLIDER_ITEM = 'mui-slider-item';\n\n\tvar handle = function(event, target) {\n\t\tif (target.classList && (target.classList.contains(CLASS_CONTROL_ITEM) || target.classList.contains(CLASS_TAB_ITEM))) {\n\t\t\tif (target.parentNode && target.parentNode.classList && target.parentNode.classList.contains(CLASS_SEGMENTED_CONTROL_VERTICAL)) {\n\t\t\t\t//vertical 如果preventDefault会导致无法滚动\n\t\t\t} else {\n\t\t\t\tevent.preventDefault(); //stop hash change\t\t\t\t\n\t\t\t}\n\t\t\t//\t\t\tif (target.hash) {\n\t\t\treturn target;\n\t\t\t//\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 80,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\n\twindow.addEventListener('tap', function(e) {\n\n\t\tvar targetTab = $.targets.tab;\n\t\tif (!targetTab) {\n\t\t\treturn;\n\t\t}\n\t\tvar activeTab;\n\t\tvar activeBodies;\n\t\tvar targetBody;\n\t\tvar className = 'mui-active';\n\t\tvar classSelector = '.' + className;\n\t\tvar segmentedControl = targetTab.parentNode;\n\n\t\tfor (; segmentedControl && segmentedControl !== document; segmentedControl = segmentedControl.parentNode) {\n\t\t\tif (segmentedControl.classList.contains(CLASS_SEGMENTED_CONTROL)) {\n\t\t\t\tactiveTab = segmentedControl.querySelector(classSelector + '.' + CLASS_CONTROL_ITEM);\n\t\t\t\tbreak;\n\t\t\t} else if (segmentedControl.classList.contains(CLASS_TAB_BAR)) {\n\t\t\t\tactiveTab = segmentedControl.querySelector(classSelector + '.' + CLASS_TAB_ITEM);\n\t\t\t}\n\t\t}\n\n\t\tif (activeTab) {\n\t\t\tactiveTab.classList.remove(className);\n\t\t}\n\n\t\tvar isLastActive = targetTab === activeTab;\n\t\tif (targetTab) {\n\t\t\ttargetTab.classList.add(className);\n\t\t}\n\n\t\tif (!targetTab.hash) {\n\t\t\treturn;\n\t\t}\n\t\ttargetBody = document.getElementById(targetTab.hash.replace('#', ''));\n\n\t\tif (!targetBody) {\n\t\t\treturn;\n\t\t}\n\t\tif (!targetBody.classList.contains(CLASS_CONTROL_CONTENT)) { //tab bar popover\n\t\t\ttargetTab.classList[isLastActive ? 'remove' : 'add'](className);\n\t\t\treturn;\n\t\t}\n\t\tif (isLastActive) { //same\n\t\t\treturn;\n\t\t}\n\t\tvar parentNode = targetBody.parentNode;\n\t\tactiveBodies = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT + classSelector);\n\t\tfor (var i = 0; i < activeBodies.length; i++) {\n\t\t\tvar activeBody = activeBodies[i];\n\t\t\tactiveBody.parentNode === parentNode && activeBody.classList.remove(className);\n\t\t}\n\n\t\ttargetBody.classList.add(className);\n\n\t\tvar contents = [];\n\t\tvar _contents = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT);\n\t\tfor (var i = 0; i < _contents.length; i++) { //查找直属子节点\n\t\t\t_contents[i].parentNode === parentNode && (contents.push(_contents[i]));\n\t\t}\n\t\t$.trigger(targetBody, $.eventName('shown', name), {\n\t\t\ttabNumber: Array.prototype.indexOf.call(contents, targetBody)\n\t\t});\n\t\te.detail && e.detail.gesture.preventDefault(); //fixed hashchange\n\t});\n\n})(mui, window, document, 'tab');\n/**\n * Toggles switch\n * @param {type} $\n * @param {type} window\n * @param {type} name\n * @returns {undefined}\n */\n(function($, window, name) {\n\n\tvar CLASS_SWITCH = 'mui-switch';\n\tvar CLASS_SWITCH_HANDLE = 'mui-switch-handle';\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_DRAGGING = 'mui-dragging';\n\n\tvar CLASS_DISABLED = 'mui-disabled';\n\n\tvar SELECTOR_SWITCH_HANDLE = '.' + CLASS_SWITCH_HANDLE;\n\n\tvar handle = function(event, target) {\n\t\tif (target.classList && target.classList.contains(CLASS_SWITCH)) {\n\t\t\treturn target;\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 100,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\n\n\tvar Toggle = function(element) {\n\t\tthis.element = element;\n\t\tthis.classList = this.element.classList;\n\t\tthis.handle = this.element.querySelector(SELECTOR_SWITCH_HANDLE);\n\t\tthis.init();\n\t\tthis.initEvent();\n\t};\n\tToggle.prototype.init = function() {\n\t\tthis.toggleWidth = this.element.offsetWidth;\n\t\tthis.handleWidth = this.handle.offsetWidth;\n\t\tthis.handleX = this.toggleWidth - this.handleWidth - 3;\n\t};\n\tToggle.prototype.initEvent = function() {\n\t\tthis.element.addEventListener($.EVENT_START, this);\n\t\tthis.element.addEventListener('drag', this);\n\t\tthis.element.addEventListener('swiperight', this);\n\t\tthis.element.addEventListener($.EVENT_END, this);\n\t\tthis.element.addEventListener($.EVENT_CANCEL, this);\n\n\t};\n\tToggle.prototype.handleEvent = function(e) {\n\t\tif (this.classList.contains(CLASS_DISABLED)) {\n\t\t\treturn;\n\t\t}\n\t\tswitch (e.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tthis.start(e);\n\t\t\t\tbreak;\n\t\t\tcase 'drag':\n\t\t\t\tthis.drag(e);\n\t\t\t\tbreak;\n\t\t\tcase 'swiperight':\n\t\t\t\tthis.swiperight();\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tthis.end(e);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\tToggle.prototype.start = function(e) {\n\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';\n\t\tthis.classList.add(CLASS_DRAGGING);\n\t\tif (this.toggleWidth === 0 || this.handleWidth === 0) { //当switch处于隐藏状态时，width为0，需要重新初始化\n\t\t\tthis.init();\n\t\t}\n\t};\n\tToggle.prototype.drag = function(e) {\n\t\tvar detail = e.detail;\n\t\tif (!this.isDragging) {\n\t\t\tif (detail.direction === 'left' || detail.direction === 'right') {\n\t\t\t\tthis.isDragging = true;\n\t\t\t\tthis.lastChanged = undefined;\n\t\t\t\tthis.initialState = this.classList.contains(CLASS_ACTIVE);\n\t\t\t}\n\t\t}\n\t\tif (this.isDragging) {\n\t\t\tthis.setTranslateX(detail.deltaX);\n\t\t\te.stopPropagation();\n\t\t\tdetail.gesture.preventDefault();\n\t\t}\n\t};\n\tToggle.prototype.swiperight = function(e) {\n\t\tif (this.isDragging) {\n\t\t\te.stopPropagation();\n\t\t}\n\t};\n\tToggle.prototype.end = function(e) {\n\t\tthis.classList.remove(CLASS_DRAGGING);\n\t\tif (this.isDragging) {\n\t\t\tthis.isDragging = false;\n\t\t\te.stopPropagation();\n\t\t\t$.trigger(this.element, 'toggle', {\n\t\t\t\tisActive: this.classList.contains(CLASS_ACTIVE)\n\t\t\t});\n\t\t} else {\n\t\t\tthis.toggle();\n\t\t}\n\t};\n\tToggle.prototype.toggle = function(animate) {\n\t\tvar classList = this.classList;\n\t\tif (animate === false) {\n\t\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '0s';\n\t\t} else {\n\t\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';\n\t\t}\n\t\tif (classList.contains(CLASS_ACTIVE)) {\n\t\t\tclassList.remove(CLASS_ACTIVE);\n\t\t\tthis.handle.style.webkitTransform = 'translate(0,0)';\n\t\t} else {\n\t\t\tclassList.add(CLASS_ACTIVE);\n\t\t\tthis.handle.style.webkitTransform = 'translate(' + this.handleX + 'px,0)';\n\t\t}\n\t\t$.trigger(this.element, 'toggle', {\n\t\t\tisActive: this.classList.contains(CLASS_ACTIVE)\n\t\t});\n\t};\n\tToggle.prototype.setTranslateX = $.animationFrame(function(x) {\n\t\tif (!this.isDragging) {\n\t\t\treturn;\n\t\t}\n\t\tvar isChanged = false;\n\t\tif ((this.initialState && -x > (this.handleX / 2)) || (!this.initialState && x > (this.handleX / 2))) {\n\t\t\tisChanged = true;\n\t\t}\n\t\tif (this.lastChanged !== isChanged) {\n\t\t\tif (isChanged) {\n\t\t\t\tthis.handle.style.webkitTransform = 'translate(' + (this.initialState ? 0 : this.handleX) + 'px,0)';\n\t\t\t\tthis.classList[this.initialState ? 'remove' : 'add'](CLASS_ACTIVE);\n\t\t\t} else {\n\t\t\t\tthis.handle.style.webkitTransform = 'translate(' + (this.initialState ? this.handleX : 0) + 'px,0)';\n\t\t\t\tthis.classList[this.initialState ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t}\n\t\t\tthis.lastChanged = isChanged;\n\t\t}\n\n\t});\n\n\t$.fn['switch'] = function(options) {\n\t\tvar switchApis = [];\n\t\tthis.each(function() {\n\t\t\tvar switchApi = null;\n\t\t\tvar id = this.getAttribute('data-switch');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = new Toggle(this);\n\t\t\t\tthis.setAttribute('data-switch', id);\n\t\t\t} else {\n\t\t\t\tswitchApi = $.data[id];\n\t\t\t}\n\t\t\tswitchApis.push(switchApi);\n\t\t});\n\t\treturn switchApis.length > 1 ? switchApis : switchApis[0];\n\t};\n\t$.ready(function() {\n\t\t$('.' + CLASS_SWITCH)['switch']();\n\t});\n})(mui, window, 'toggle');\n/**\n * Tableviews\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n\n\tvar CLASS_ACTIVE = 'mui-active';\n\tvar CLASS_SELECTED = 'mui-selected';\n\tvar CLASS_GRID_VIEW = 'mui-grid-view';\n\tvar CLASS_RADIO_VIEW = 'mui-table-view-radio';\n\tvar CLASS_TABLE_VIEW_CELL = 'mui-table-view-cell';\n\tvar CLASS_COLLAPSE_CONTENT = 'mui-collapse-content';\n\tvar CLASS_DISABLED = 'mui-disabled';\n\tvar CLASS_TOGGLE = 'mui-switch';\n\tvar CLASS_BTN = 'mui-btn';\n\n\tvar CLASS_SLIDER_HANDLE = 'mui-slider-handle';\n\tvar CLASS_SLIDER_LEFT = 'mui-slider-left';\n\tvar CLASS_SLIDER_RIGHT = 'mui-slider-right';\n\tvar CLASS_TRANSITIONING = 'mui-transitioning';\n\n\n\tvar SELECTOR_SLIDER_HANDLE = '.' + CLASS_SLIDER_HANDLE;\n\tvar SELECTOR_SLIDER_LEFT = '.' + CLASS_SLIDER_LEFT;\n\tvar SELECTOR_SLIDER_RIGHT = '.' + CLASS_SLIDER_RIGHT;\n\tvar SELECTOR_SELECTED = '.' + CLASS_SELECTED;\n\tvar SELECTOR_BUTTON = '.' + CLASS_BTN;\n\tvar overFactor = 0.8;\n\tvar cell, a;\n\n\tvar isMoved = isOpened = openedActions = progress = false;\n\tvar sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;\n\tvar timer = translateX = lastTranslateX = sliderActionLeftWidth = sliderActionRightWidth = 0;\n\n\n\n\tvar toggleActive = function(isActive) {\n\t\tif (isActive) {\n\t\t\tif (a) {\n\t\t\t\ta.classList.add(CLASS_ACTIVE);\n\t\t\t} else if (cell) {\n\t\t\t\tcell.classList.add(CLASS_ACTIVE);\n\t\t\t}\n\t\t} else {\n\t\t\ttimer && timer.cancel();\n\t\t\tif (a) {\n\t\t\t\ta.classList.remove(CLASS_ACTIVE);\n\t\t\t} else if (cell) {\n\t\t\t\tcell.classList.remove(CLASS_ACTIVE);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar updateTranslate = function() {\n\t\tif (translateX !== lastTranslateX) {\n\t\t\tif (buttonsRight && buttonsRight.length > 0) {\n\t\t\t\tprogress = translateX / sliderActionRightWidth;\n\t\t\t\tif (translateX < -sliderActionRightWidth) {\n\t\t\t\t\ttranslateX = -sliderActionRightWidth - Math.pow(-translateX - sliderActionRightWidth, overFactor);\n\t\t\t\t}\n\t\t\t\tfor (var i = 0, len = buttonsRight.length; i < len; i++) {\n\t\t\t\t\tvar buttonRight = buttonsRight[i];\n\t\t\t\t\tif (typeof buttonRight._buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonRight._buttonOffset = buttonRight.offsetLeft;\n\t\t\t\t\t}\n\t\t\t\t\tbuttonOffset = buttonRight._buttonOffset;\n\t\t\t\t\tsetTranslate(buttonRight, (translateX - buttonOffset * (1 + Math.max(progress, -1))));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (buttonsLeft && buttonsLeft.length > 0) {\n\t\t\t\tprogress = translateX / sliderActionLeftWidth;\n\t\t\t\tif (translateX > sliderActionLeftWidth) {\n\t\t\t\t\ttranslateX = sliderActionLeftWidth + Math.pow(translateX - sliderActionLeftWidth, overFactor);\n\t\t\t\t}\n\t\t\t\tfor (var i = 0, len = buttonsLeft.length; i < len; i++) {\n\t\t\t\t\tvar buttonLeft = buttonsLeft[i];\n\t\t\t\t\tif (typeof buttonLeft._buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t\tbuttonOffset = buttonLeft._buttonOffset;\n\t\t\t\t\tif (buttonsLeft.length > 1) {\n\t\t\t\t\t\tbuttonLeft.style.zIndex = buttonsLeft.length - i;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonLeft, (translateX + buttonOffset * (1 - Math.min(progress, 1))));\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTranslate(sliderHandle, translateX);\n\t\t\tlastTranslateX = translateX;\n\t\t}\n\t\tsliderRequestAnimationFrame = requestAnimationFrame(function() {\n\t\t\tupdateTranslate();\n\t\t});\n\t};\n\tvar setTranslate = function(element, x) {\n\t\tif (element) {\n\t\t\telement.style.webkitTransform = 'translate(' + x + 'px,0)';\n\t\t}\n\t};\n\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tif (cell) {\n\t\t\ttoggleActive(false);\n\t\t}\n\t\tcell = a = false;\n\t\tisMoved = isOpened = openedActions = false;\n\t\tvar target = event.target;\n\t\tvar isDisabled = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList) {\n\t\t\t\tvar classList = target.classList;\n\t\t\t\tif ((target.tagName === 'INPUT' && target.type !== 'radio' && target.type !== 'checkbox') || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN) || classList.contains(CLASS_DISABLED)) {\n\t\t\t\t\tisDisabled = true;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_COLLAPSE_CONTENT)) { //collapse content\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_TABLE_VIEW_CELL)) {\n\t\t\t\t\tcell = target;\n\t\t\t\t\t//TODO swipe to delete close\n\t\t\t\t\tvar selected = cell.parentNode.querySelector(SELECTOR_SELECTED);\n\t\t\t\t\tif (!cell.parentNode.classList.contains(CLASS_RADIO_VIEW) && selected && selected !== cell) {\n\t\t\t\t\t\t$.swipeoutClose(selected);\n\t\t\t\t\t\tcell = isDisabled = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!cell.parentNode.classList.contains(CLASS_GRID_VIEW)) {\n\t\t\t\t\t\tvar link = cell.querySelector('a');\n\t\t\t\t\t\tif (link && link.parentNode === cell) { //li>a\n\t\t\t\t\t\t\ta = link;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar handle = cell.querySelector(SELECTOR_SLIDER_HANDLE);\n\t\t\t\t\tif (handle) {\n\t\t\t\t\t\ttoggleEvents(cell);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tif (!isDisabled) {\n\t\t\t\t\t\tif (handle) {\n\t\t\t\t\t\t\tif (timer) {\n\t\t\t\t\t\t\t\ttimer.cancel();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimer = $.later(function() {\n\t\t\t\t\t\t\t\ttoggleActive(true);\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoggleActive(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\twindow.addEventListener($.EVENT_MOVE, function(event) {\n\t\ttoggleActive(false);\n\t});\n\n\tvar handleEvent = {\n\t\thandleEvent: function(event) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis.drag(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis.dragend(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'flick':\n\t\t\t\t\tthis.flick(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swiperight':\n\t\t\t\t\tthis.swiperight(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swipeleft':\n\t\t\t\t\tthis.swipeleft(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tdrag: function(event) {\n\t\t\tif (!cell) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isMoved) { //init\n\t\t\t\tsliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;\n\t\t\t\tsliderHandle = cell.querySelector(SELECTOR_SLIDER_HANDLE);\n\t\t\t\tif (sliderHandle) {\n\t\t\t\t\tsliderActionLeft = cell.querySelector(SELECTOR_SLIDER_LEFT);\n\t\t\t\t\tsliderActionRight = cell.querySelector(SELECTOR_SLIDER_RIGHT);\n\t\t\t\t\tif (sliderActionLeft) {\n\t\t\t\t\t\tsliderActionLeftWidth = sliderActionLeft.offsetWidth;\n\t\t\t\t\t\tbuttonsLeft = sliderActionLeft.querySelectorAll(SELECTOR_BUTTON);\n\t\t\t\t\t}\n\t\t\t\t\tif (sliderActionRight) {\n\t\t\t\t\t\tsliderActionRightWidth = sliderActionRight.offsetWidth;\n\t\t\t\t\t\tbuttonsRight = sliderActionRight.querySelectorAll(SELECTOR_BUTTON);\n\t\t\t\t\t}\n\t\t\t\t\tcell.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tisOpened = cell.classList.contains(CLASS_SELECTED);\n\t\t\t\t\tif (isOpened) {\n\t\t\t\t\t\topenedActions = cell.querySelector(SELECTOR_SLIDER_LEFT + SELECTOR_SELECTED) ? 'left' : 'right';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tvar angle = detail.angle;\n\t\t\tif (direction === 'left' && (angle > 150 || angle < -150)) {\n\t\t\t\tif (buttonsRight || (buttonsLeft && isOpened)) { //存在右侧按钮或存在左侧按钮且是已打开状态\n\t\t\t\t\tisMoved = true;\n\t\t\t\t}\n\t\t\t} else if (direction === 'right' && (angle > -30 && angle < 30)) {\n\t\t\t\tif (buttonsLeft || (buttonsRight && isOpened)) { //存在左侧按钮或存在右侧按钮且是已打开状态\n\t\t\t\t\tisMoved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\tvar translate = event.detail.deltaX;\n\t\t\t\tif (isOpened) {\n\t\t\t\t\tif (openedActions === 'right') {\n\t\t\t\t\t\ttranslate = translate - sliderActionRightWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttranslate = translate + sliderActionLeftWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ((translate > 0 && !buttonsLeft) || (translate < 0 && !buttonsRight)) {\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttranslate = 0;\n\t\t\t\t}\n\t\t\t\tif (translate < 0) {\n\t\t\t\t\tsliderDirection = 'toLeft';\n\t\t\t\t} else if (translate > 0) {\n\t\t\t\t\tsliderDirection = 'toRight';\n\t\t\t\t} else {\n\t\t\t\t\tif (!sliderDirection) {\n\t\t\t\t\t\tsliderDirection = 'toLeft';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!sliderRequestAnimationFrame) {\n\t\t\t\t\tupdateTranslate();\n\t\t\t\t}\n\t\t\t\ttranslateX = translate;\n\t\t\t}\n\t\t},\n\t\tflick: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tswipeleft: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tswiperight: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tdragend: function(event) {\n\t\t\tif (!isMoved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.stopPropagation();\n\t\t\tif (sliderRequestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(sliderRequestAnimationFrame);\n\t\t\t\tsliderRequestAnimationFrame = null;\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tisMoved = false;\n\t\t\tvar action = 'close';\n\t\t\tvar actionsWidth = sliderDirection === 'toLeft' ? sliderActionRightWidth : sliderActionLeftWidth;\n\t\t\tvar isToggle = detail.swipe || (Math.abs(translateX) > actionsWidth / 2);\n\t\t\tif (isToggle) {\n\t\t\t\tif (!isOpened) {\n\t\t\t\t\taction = 'open';\n\t\t\t\t} else if (detail.direction === 'left' && openedActions === 'right') {\n\t\t\t\t\taction = 'open';\n\t\t\t\t} else if (detail.direction === 'right' && openedActions === 'left') {\n\t\t\t\t\taction = 'open';\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tcell.classList.add(CLASS_TRANSITIONING);\n\t\t\tvar buttons;\n\t\t\tif (action === 'open') {\n\t\t\t\tvar newTranslate = sliderDirection === 'toLeft' ? -actionsWidth : actionsWidth;\n\t\t\t\tsetTranslate(sliderHandle, newTranslate);\n\t\t\t\tbuttons = sliderDirection === 'toLeft' ? buttonsRight : buttonsLeft;\n\t\t\t\tif (typeof buttons !== 'undefined') {\n\t\t\t\t\tvar button = null;\n\t\t\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\t\t\t\t\tsetTranslate(button, newTranslate);\n\t\t\t\t\t}\n\t\t\t\t\tbutton.parentNode.classList.add(CLASS_SELECTED);\n\t\t\t\t\tcell.classList.add(CLASS_SELECTED);\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\t$.trigger(cell, sliderDirection === 'toLeft' ? 'slideleft' : 'slideright');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsetTranslate(sliderHandle, 0);\n\t\t\t\tsliderActionLeft && sliderActionLeft.classList.remove(CLASS_SELECTED);\n\t\t\t\tsliderActionRight && sliderActionRight.classList.remove(CLASS_SELECTED);\n\t\t\t\tcell.classList.remove(CLASS_SELECTED);\n\t\t\t}\n\t\t\tvar buttonOffset;\n\t\t\tif (buttonsLeft && buttonsLeft.length > 0 && buttonsLeft !== buttons) {\n\t\t\t\tfor (var i = 0, len = buttonsLeft.length; i < len; i++) {\n\t\t\t\t\tvar buttonLeft = buttonsLeft[i];\n\t\t\t\t\tbuttonOffset = buttonLeft._buttonOffset;\n\t\t\t\t\tif (typeof buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonLeft, buttonOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (buttonsRight && buttonsRight.length > 0 && buttonsRight !== buttons) {\n\t\t\t\tfor (var i = 0, len = buttonsRight.length; i < len; i++) {\n\t\t\t\t\tvar buttonRight = buttonsRight[i];\n\t\t\t\t\tbuttonOffset = buttonRight._buttonOffset;\n\t\t\t\t\tif (typeof buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonRight._buttonOffset = buttonRight.offsetLeft;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonRight, -buttonOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction toggleEvents(element, isRemove) {\n\t\tvar method = !!isRemove ? 'removeEventListener' : 'addEventListener';\n\t\telement[method]('drag', handleEvent);\n\t\telement[method]('dragend', handleEvent);\n\t\telement[method]('swiperight', handleEvent);\n\t\telement[method]('swipeleft', handleEvent);\n\t\telement[method]('flick', handleEvent);\n\t};\n\t/**\n\t * 打开滑动菜单\n\t * @param {Object} el\n\t * @param {Object} direction\n\t */\n\t$.swipeoutOpen = function(el, direction) {\n\t\tif (!el) return;\n\t\tvar classList = el.classList;\n\t\tif (classList.contains(CLASS_SELECTED)) return;\n\t\tif (!direction) {\n\t\t\tif (el.querySelector(SELECTOR_SLIDER_RIGHT)) {\n\t\t\t\tdirection = 'right';\n\t\t\t} else {\n\t\t\t\tdirection = 'left';\n\t\t\t}\n\t\t}\n\t\tvar swipeoutAction = el.querySelector($.classSelector(\".slider-\" + direction));\n\t\tif (!swipeoutAction) return;\n\t\tswipeoutAction.classList.add(CLASS_SELECTED);\n\t\tclassList.add(CLASS_SELECTED);\n\t\tclassList.remove(CLASS_TRANSITIONING);\n\t\tvar buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);\n\t\tvar swipeoutWidth = swipeoutAction.offsetWidth;\n\t\tvar translate = (direction === 'right') ? -swipeoutWidth : swipeoutWidth;\n\t\tvar length = buttons.length;\n\t\tvar button;\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tbutton = buttons[i];\n\t\t\tif (direction === 'right') {\n\t\t\t\tsetTranslate(button, -button.offsetLeft);\n\t\t\t} else {\n\t\t\t\tsetTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));\n\t\t\t}\n\t\t}\n\t\tclassList.add(CLASS_TRANSITIONING);\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsetTranslate(buttons[i], translate);\n\t\t}\n\t\tsetTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), translate);\n\t};\n\t/**\n\t * 关闭滑动菜单\n\t * @param {Object} el\n\t */\n\t$.swipeoutClose = function(el) {\n\t\tif (!el) return;\n\t\tvar classList = el.classList;\n\t\tif (!classList.contains(CLASS_SELECTED)) return;\n\t\tvar direction = el.querySelector(SELECTOR_SLIDER_RIGHT + SELECTOR_SELECTED) ? 'right' : 'left';\n\t\tvar swipeoutAction = el.querySelector($.classSelector(\".slider-\" + direction));\n\t\tif (!swipeoutAction) return;\n\t\tswipeoutAction.classList.remove(CLASS_SELECTED);\n\t\tclassList.remove(CLASS_SELECTED);\n\t\tclassList.add(CLASS_TRANSITIONING);\n\t\tvar buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);\n\t\tvar swipeoutWidth = swipeoutAction.offsetWidth;\n\t\tvar length = buttons.length;\n\t\tvar button;\n\t\tsetTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), 0);\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tbutton = buttons[i];\n\t\t\tif (direction === 'right') {\n\t\t\t\tsetTranslate(button, (-button.offsetLeft));\n\t\t\t} else {\n\t\t\t\tsetTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));\n\t\t\t}\n\t\t}\n\t};\n\n\twindow.addEventListener($.EVENT_END, function(event) { //使用touchend来取消高亮，避免一次点击既不触发tap，doubletap，longtap的事件\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleActive(false);\n\t\tsliderHandle && toggleEvents(cell, true);\n\t});\n\twindow.addEventListener($.EVENT_CANCEL, function(event) { //使用touchcancel来取消高亮，避免一次点击既不触发tap，doubletap，longtap的事件\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleActive(false);\n\t\tsliderHandle && toggleEvents(cell, true);\n\t});\n\tvar radioOrCheckboxClick = function(event) {\n\t\tvar type = event.target && event.target.type || '';\n\t\tif (type === 'radio' || type === 'checkbox') {\n\t\t\treturn;\n\t\t}\n\t\tvar classList = cell.classList;\n\t\tif (classList.contains('mui-radio')) {\n\t\t\tvar input = cell.querySelector('input[type=radio]');\n\t\t\tif (input) {\n\t\t\t\t//\t\t\t\tinput.click();\n\t\t\t\tif (!input.disabled && !input.readOnly) {\n\t\t\t\t\tinput.checked = !input.checked;\n\t\t\t\t\t$.trigger(input, 'change');\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (classList.contains('mui-checkbox')) {\n\t\t\tvar input = cell.querySelector('input[type=checkbox]');\n\t\t\tif (input) {\n\t\t\t\t//\t\t\t\tinput.click();\n\t\t\t\tif (!input.disabled && !input.readOnly) {\n\t\t\t\t\tinput.checked = !input.checked;\n\t\t\t\t\t$.trigger(input, 'change');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t//fixed hashchange(android)\n\twindow.addEventListener($.EVENT_CLICK, function(e) {\n\t\tif (cell && cell.classList.contains('mui-collapse')) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\twindow.addEventListener('doubletap', function(event) {\n\t\tif (cell) {\n\t\t\tradioOrCheckboxClick(event);\n\t\t}\n\t});\n\tvar preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;\n\twindow.addEventListener('tap', function(event) {\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\tvar isExpand = false;\n\t\tvar classList = cell.classList;\n\t\tvar ul = cell.parentNode;\n\t\tif (ul && ul.classList.contains(CLASS_RADIO_VIEW)) {\n\t\t\tif (classList.contains(CLASS_SELECTED)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar selected = ul.querySelector('li' + SELECTOR_SELECTED);\n\t\t\tif (selected) {\n\t\t\t\tselected.classList.remove(CLASS_SELECTED);\n\t\t\t}\n\t\t\tclassList.add(CLASS_SELECTED);\n\t\t\t$.trigger(cell, 'selected', {\n\t\t\t\tel: cell\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (classList.contains('mui-collapse') && !cell.parentNode.classList.contains('mui-unfold')) {\n\t\t\tif (!preventDefaultException.test(event.target.tagName)) {\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t}\n\n\t\t\tif (!classList.contains(CLASS_ACTIVE)) { //展开时,需要收缩其他同类\n\t\t\t\tvar collapse = cell.parentNode.querySelector('.mui-collapse.mui-active');\n\t\t\t\tif (collapse) {\n\t\t\t\t\tcollapse.classList.remove(CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tisExpand = true;\n\t\t\t}\n\t\t\tclassList.toggle(CLASS_ACTIVE);\n\t\t\tif (isExpand) {\n\t\t\t\t//触发展开事件\n\t\t\t\t$.trigger(cell, 'expand');\n\n\t\t\t\t//scroll\n\t\t\t\t//暂不滚动\n\t\t\t\t// var offsetTop = $.offset(cell).top;\n\t\t\t\t// var scrollTop = document.body.scrollTop;\n\t\t\t\t// var height = window.innerHeight;\n\t\t\t\t// var offsetHeight = cell.offsetHeight;\n\t\t\t\t// var cellHeight = (offsetTop - scrollTop + offsetHeight);\n\t\t\t\t// if (offsetHeight > height) {\n\t\t\t\t// \t$.scrollTo(offsetTop, 300);\n\t\t\t\t// } else if (cellHeight > height) {\n\t\t\t\t// \t$.scrollTo(cellHeight - height + scrollTop, 300);\n\t\t\t\t// }\n\t\t\t}\n\t\t} else {\n\t\t\tradioOrCheckboxClick(event);\n\t\t}\n\t});\n})(mui, window, document);\n(function($, window) {\n\t/**\n\t * 警告消息框\n\t */\n\t$.alert = function(message, title, btnValue, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tif (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnValue = '确定';\n\t\t\t\t} else if (typeof btnValue === 'function') {\n\t\t\t\t\tcallback = btnValue;\n\t\t\t\t\tbtnValue = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.alert(message, callback, title, btnValue);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//TODO H5版本\n\t\t\twindow.alert(message);\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\t/**\n\t * 确认消息框\n\t */\n\t$.confirm = function(message, title, btnArray, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tif (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof btnArray === 'function') {\n\t\t\t\t\tcallback = btnArray;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.confirm(message, callback, title, btnArray);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//H5版本，0为确认，1为取消\n\t\t\tif (window.confirm(message)) {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 0\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\t/**\n\t * 输入对话框\n\t */\n\t$.prompt = function(text, defaultText, title, btnArray, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\n\t\t\t\tif (typeof defaultText === 'function') {\n\t\t\t\t\tcallback = defaultText;\n\t\t\t\t\tdefaultText = null;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof btnArray === 'function') {\n\t\t\t\t\tcallback = btnArray;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.prompt(text, callback, title, defaultText, btnArray);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//H5版本(确认index为0，取消index为1)\n\t\t\tvar result = window.prompt(text);\n\t\t\tif (result) {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tvalue: result\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 1,\n\t\t\t\t\tvalue: ''\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n})(mui, window);\n(function($, window) {\n\tvar CLASS_ACTIVE = 'mui-active';\n\t/**\n\t * 自动消失提示框\n\t */\n\t$.toast = function(message,options) {\n\t\tvar durations = {\n\t\t    'long': 3500,\n\t\t    'short': 2000\n\t\t};\n\n\t\t//计算显示时间\n\t\t options = $.extend({\n\t        duration: 'short'\n\t    }, options || {});\n\n\n\t\tif ($.os.plus && options.type !== 'div') {\n\t\t\t//默认显示在底部；\n\t\t\t$.plusReady(function() {\n\t\t\t\tplus.nativeUI.toast(message, {\n\t\t\t\t\tverticalAlign: 'bottom',\n\t\t\t\t\tduration:options.duration\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tif (typeof options.duration === 'number') {\n\t\t        duration = options.duration>0 ? options.duration:durations['short'];\n\t\t    } else {\n\t\t        duration = durations[options.duration];\n\t\t    }\n\t\t    if (!duration) {\n\t\t        duration = durations['short'];\n\t\t    }\n\t\t\tvar toast = document.createElement('div');\n\t\t\ttoast.classList.add('mui-toast-container');\n\t\t\ttoast.innerHTML = '<div class=\"' + 'mui-toast-message' + '\">' + message + '</div>';\n\t\t\ttoast.addEventListener('webkitTransitionEnd', function() {\n\t\t\t\tif (!toast.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\ttoast.parentNode.removeChild(toast);\n\t\t\t\t\ttoast = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t//点击则自动消失\n\t\t\ttoast.addEventListener('click', function() {\n\t\t        toast.parentNode.removeChild(toast);\n\t\t        toast = null;\n\t\t    });\n\t\t\tdocument.body.appendChild(toast);\n\t\t\ttoast.offsetHeight;\n\t\t\ttoast.classList.add(CLASS_ACTIVE);\n\t\t\tsetTimeout(function() {\n\t\t\t\ttoast && toast.classList.remove(CLASS_ACTIVE);\n\t\t\t}, duration);\n\t\t\t\n\t\t\treturn {\n\t\t        isVisible: function() {return !!toast;}\n\t\t    }\n\t\t}   \n\t};\n\n})(mui, window);\n/**\n * Popup(alert,confirm,prompt)  \n * @param {Object} $\n * @param {Object} window\n * @param {Object} document\n */\n(function($, window, document) {\n    var CLASS_POPUP = 'mui-popup';\n    var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop';\n    var CLASS_POPUP_IN = 'mui-popup-in';\n    var CLASS_POPUP_OUT = 'mui-popup-out';\n    var CLASS_POPUP_INNER = 'mui-popup-inner';\n    var CLASS_POPUP_TITLE = 'mui-popup-title';\n    var CLASS_POPUP_TEXT = 'mui-popup-text';\n    var CLASS_POPUP_INPUT = 'mui-popup-input';\n    var CLASS_POPUP_BUTTONS = 'mui-popup-buttons';\n    var CLASS_POPUP_BUTTON = 'mui-popup-button';\n    var CLASS_POPUP_BUTTON_BOLD = 'mui-popup-button-bold';\n    var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop';\n    var CLASS_ACTIVE = 'mui-active';\n\n    var popupStack = [];\n    var backdrop = (function() {\n        var element = document.createElement('div');\n        element.classList.add(CLASS_POPUP_BACKDROP);\n        element.addEventListener($.EVENT_MOVE, $.preventDefault);\n        element.addEventListener('webkitTransitionEnd', function() {\n            if (!this.classList.contains(CLASS_ACTIVE)) {\n                element.parentNode && element.parentNode.removeChild(element);\n            }\n        });\n        return element;\n    }());\n\n    var createInput = function(placeholder) {\n        return '<div class=\"' + CLASS_POPUP_INPUT + '\"><input type=\"text\" autofocus placeholder=\"' + (placeholder || '') + '\"/></div>';\n    };\n    var createInner = function(message, title, extra) {\n        return '<div class=\"' + CLASS_POPUP_INNER + '\"><div class=\"' + CLASS_POPUP_TITLE + '\">' + title + '</div><div class=\"' + CLASS_POPUP_TEXT + '\">' + message.replace(/\\r\\n/g, \"<br/>\").replace(/\\n/g, \"<br/>\") + '</div>' + (extra || '') + '</div>';\n    };\n    var createButtons = function(btnArray) {\n        var length = btnArray.length;\n        var btns = [];\n        for (var i = 0; i < length; i++) {\n            btns.push('<span class=\"' + CLASS_POPUP_BUTTON + (i === length - 1 ? (' ' + CLASS_POPUP_BUTTON_BOLD) : '') + '\">' + btnArray[i] + '</span>');\n        }\n        return '<div class=\"' + CLASS_POPUP_BUTTONS + '\">' + btns.join('') + '</div>';\n    };\n\n    var createPopup = function(html, callback) {\n        var popupElement = document.createElement('div');\n        popupElement.className = CLASS_POPUP;\n        popupElement.innerHTML = html;\n        var removePopupElement = function() {\n            popupElement.parentNode && popupElement.parentNode.removeChild(popupElement);\n            popupElement = null;\n        };\n        popupElement.addEventListener($.EVENT_MOVE, $.preventDefault);\n        popupElement.addEventListener('webkitTransitionEnd', function(e) {\n            if (popupElement && e.target === popupElement && popupElement.classList.contains(CLASS_POPUP_OUT)) {\n                removePopupElement();\n            }\n        });\n        popupElement.style.display = 'block';\n        document.body.appendChild(popupElement);\n        popupElement.offsetHeight;\n        popupElement.classList.add(CLASS_POPUP_IN);\n\n        if (!backdrop.classList.contains(CLASS_ACTIVE)) {\n            backdrop.style.display = 'block';\n            document.body.appendChild(backdrop);\n            backdrop.offsetHeight;\n            backdrop.classList.add(CLASS_ACTIVE);\n        }\n        var btns = $.qsa('.' + CLASS_POPUP_BUTTON, popupElement);\n        var input = popupElement.querySelector('.' + CLASS_POPUP_INPUT + ' input');\n        var popup = {\n            element: popupElement,\n            close: function(index, animate) {\n                if (popupElement) {\n                    var result = callback && callback({\n                        index: index || 0,\n                        value: input && input.value || ''\n                    });\n                    if (result === false) { //返回false则不关闭当前popup\n                        return;\n                    }\n                    if (animate !== false) {\n                        popupElement.classList.remove(CLASS_POPUP_IN);\n                        popupElement.classList.add(CLASS_POPUP_OUT);\n                    } else {\n                        removePopupElement();\n                    }\n                    popupStack.pop();\n                    //如果还有其他popup，则不remove backdrop\n                    if (popupStack.length) {\n                        popupStack[popupStack.length - 1]['show'](animate);\n                    } else {\n                        backdrop.classList.remove(CLASS_ACTIVE);\n                    }\n                }\n            }\n        };\n        var handleEvent = function(e) {\n            popup.close(btns.indexOf(e.target));\n        };\n        $(popupElement).on('tap', '.' + CLASS_POPUP_BUTTON, handleEvent);\n        if (popupStack.length) {\n            popupStack[popupStack.length - 1]['hide']();\n        }\n        popupStack.push({\n            close: popup.close,\n            show: function(animate) {\n                popupElement.style.display = 'block';\n                popupElement.offsetHeight;\n                popupElement.classList.add(CLASS_POPUP_IN);\n            },\n            hide: function() {\n                popupElement.style.display = 'none';\n                popupElement.classList.remove(CLASS_POPUP_IN);\n            }\n        });\n        return popup;\n    };\n    var createAlert = function(message, title, btnValue, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof title === 'function') {\n                callback = title;\n                type = btnValue;\n                title = null;\n                btnValue = null;\n            } else if (typeof btnValue === 'function') {\n                type = callback;\n                callback = btnValue;\n                btnValue = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示') + createButtons([btnValue || '确定']), callback);\n        }\n        return plus.nativeUI.alert(message, callback, title || '提示', btnValue || '确定');\n    };\n    var createConfirm = function(message, title, btnArray, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof title === 'function') {\n                callback = title;\n                type = btnArray;\n                title = null;\n                btnArray = null;\n            } else if (typeof btnArray === 'function') {\n                type = callback;\n                callback = btnArray;\n                btnArray = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示') + createButtons(btnArray || ['取消', '确认']), callback);\n        }\n        return plus.nativeUI.confirm(message, callback, title, btnArray || ['取消', '确认']);\n    };\n    var createPrompt = function(message, placeholder, title, btnArray, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof placeholder === 'function') {\n                callback = placeholder;\n                type = title;\n                placeholder = null;\n                title = null;\n                btnArray = null;\n            } else if (typeof title === 'function') {\n                callback = title;\n                type = btnArray;\n                title = null;\n                btnArray = null;\n            } else if (typeof btnArray === 'function') {\n                type = callback;\n                callback = btnArray;\n                btnArray = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示', createInput(placeholder)) + createButtons(btnArray || ['取消', '确认']), callback);\n        }\n        return plus.nativeUI.prompt(message, callback, title || '提示', placeholder, btnArray || ['取消', '确认']);\n    };\n    var closePopup = function() {\n        if (popupStack.length) {\n            popupStack[popupStack.length - 1]['close']();\n            return true;\n        } else {\n            return false;\n        }\n    };\n    var closePopups = function() {\n        while (popupStack.length) {\n            popupStack[popupStack.length - 1]['close']();\n        }\n    };\n\n    $.closePopup = closePopup;\n    $.closePopups = closePopups;\n    $.alert = createAlert;\n    $.confirm = createConfirm;\n    $.prompt = createPrompt;\n})(mui, window, document);\n(function($, document) {\n\tvar CLASS_PROGRESSBAR = 'mui-progressbar';\n\tvar CLASS_PROGRESSBAR_IN = 'mui-progressbar-in';\n\tvar CLASS_PROGRESSBAR_OUT = 'mui-progressbar-out';\n\tvar CLASS_PROGRESSBAR_INFINITE = 'mui-progressbar-infinite';\n\n\tvar SELECTOR_PROGRESSBAR = '.mui-progressbar';\n\n\tvar _findProgressbar = function(container) {\n\t\tcontainer = $(container || 'body');\n\t\tif (container.length === 0) return;\n\t\tcontainer = container[0];\n\t\tif (container.classList.contains(CLASS_PROGRESSBAR)) {\n\t\t\treturn container;\n\t\t}\n\t\tvar progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR);\n\t\tif (progressbars) {\n\t\t\tfor (var i = 0, len = progressbars.length; i < len; i++) {\n\t\t\t\tvar progressbar = progressbars[i];\n\t\t\t\tif (progressbar.parentNode === container) {\n\t\t\t\t\treturn progressbar;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * 创建并显示进度条 \n\t * @param {Object} container  可选，默认body，支持selector,DOM Node,mui wrapper\n\t * @param {Object} progress 可选，undefined表示循环，数字表示具体进度\n\t * @param {Object} color 可选，指定颜色样式(目前暂未提供实际样式，可暂时不暴露此参数)\n\t */\n\tvar showProgressbar = function(container, progress, color) {\n\t\tif (typeof container === 'number') {\n\t\t\tcolor = progress;\n\t\t\tprogress = container;\n\t\t\tcontainer = 'body';\n\t\t}\n\t\tcontainer = $(container || 'body');\n\t\tif (container.length === 0) return;\n\t\tcontainer = container[0];\n\t\tvar progressbar;\n\t\tif (container.classList.contains(CLASS_PROGRESSBAR)) {\n\t\t\tprogressbar = container;\n\t\t} else {\n\t\t\tvar progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR + ':not(.' + CLASS_PROGRESSBAR_OUT + ')');\n\t\t\tif (progressbars) {\n\t\t\t\tfor (var i = 0, len = progressbars.length; i < len; i++) {\n\t\t\t\t\tvar _progressbar = progressbars[i];\n\t\t\t\t\tif (_progressbar.parentNode === container) {\n\t\t\t\t\t\tprogressbar = _progressbar;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!progressbar) {\n\t\t\t\tprogressbar = document.createElement('span');\n\t\t\t\tprogressbar.className = CLASS_PROGRESSBAR + ' ' + CLASS_PROGRESSBAR_IN + (typeof progress !== 'undefined' ? '' : (' ' + CLASS_PROGRESSBAR_INFINITE)) + (color ? (' ' + CLASS_PROGRESSBAR + '-' + color) : '');\n\t\t\t\tif (typeof progress !== 'undefined') {\n\t\t\t\t\tprogressbar.innerHTML = '<span></span>';\n\t\t\t\t}\n\t\t\t\tcontainer.appendChild(progressbar);\n\t\t\t} else {\n\t\t\t\tprogressbar.classList.add(CLASS_PROGRESSBAR_IN);\n\t\t\t}\n\t\t}\n\t\tif (progress) setProgressbar(container, progress);\n\t\treturn progressbar;\n\t};\n\t/**\n\t * 关闭进度条 \n\t * @param {Object} container 可选，默认body，支持selector,DOM Node,mui wrapper\n\t */\n\tvar hideProgressbar = function(container) {\n\t\tvar progressbar = _findProgressbar(container);\n\t\tif (!progressbar) {\n\t\t\treturn;\n\t\t}\n\t\tvar classList = progressbar.classList;\n\t\tif (!classList.contains(CLASS_PROGRESSBAR_IN) || classList.contains(CLASS_PROGRESSBAR_OUT)) {\n\t\t\treturn;\n\t\t}\n\t\tclassList.remove(CLASS_PROGRESSBAR_IN);\n\t\tclassList.add(CLASS_PROGRESSBAR_OUT);\n\t\tprogressbar.addEventListener('webkitAnimationEnd', function() {\n\t\t\tprogressbar.parentNode && progressbar.parentNode.removeChild(progressbar);\n\t\t\tprogressbar = null;\n\t\t});\n\t\treturn;\n\t};\n\t/**\n\t * 设置指定进度条进度 \n\t * @param {Object} container  可选，默认body，支持selector,DOM Node,mui wrapper\n\t * @param {Object} progress 可选，默认0 取值范围[0-100]\n\t * @param {Object} speed 进度条动画时间\n\t */\n\tvar setProgressbar = function(container, progress, speed) {\n\t\tif (typeof container === 'number') {\n\t\t\tspeed = progress;\n\t\t\tprogress = container;\n\t\t\tcontainer = false;\n\t\t}\n\t\tvar progressbar = _findProgressbar(container);\n\t\tif (!progressbar || progressbar.classList.contains(CLASS_PROGRESSBAR_INFINITE)) {\n\t\t\treturn;\n\t\t}\n\t\tif (progress) progress = Math.min(Math.max(progress, 0), 100);\n\t\tprogressbar.offsetHeight;\n\t\tvar span = progressbar.querySelector('span');\n\t\tif (span) {\n\t\t\tvar style = span.style;\n\t\t\tstyle.webkitTransform = 'translate3d(' + (-100 + progress) + '%,0,0)';\n\t\t\tif (typeof speed !== 'undefined') {\n\t\t\t\tstyle.webkitTransitionDuration = speed + 'ms';\n\t\t\t} else {\n\t\t\t\tstyle.webkitTransitionDuration = '';\n\t\t\t}\n\t\t}\n\t\treturn progressbar;\n\t};\n\t$.fn.progressbar = function(options) {\n\t\tvar progressbarApis = [];\n\t\toptions = options || {};\n\t\tthis.each(function() {\n\t\t\tvar self = this;\n\t\t\tvar progressbarApi = self.mui_plugin_progressbar;\n\t\t\tif (!progressbarApi) {\n\t\t\t\tself.mui_plugin_progressbar = progressbarApi = {\n\t\t\t\t\toptions: options,\n\t\t\t\t\tsetOptions: function(options) {\n\t\t\t\t\t\tthis.options = options;\n\t\t\t\t\t},\n\t\t\t\t\tshow: function() {\n\t\t\t\t\t\treturn showProgressbar(self, this.options.progress, this.options.color);\n\t\t\t\t\t},\n\t\t\t\t\tsetProgress: function(progress) {\n\t\t\t\t\t\treturn setProgressbar(self, progress);\n\t\t\t\t\t},\n\t\t\t\t\thide: function() {\n\t\t\t\t\t\treturn hideProgressbar(self);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else if (options) {\n\t\t\t\tprogressbarApi.setOptions(options);\n\t\t\t}\n\t\t\tprogressbarApis.push(progressbarApi);\n\t\t});\n\t\treturn progressbarApis.length === 1 ? progressbarApis[0] : progressbarApis;\n\t};\n\t//\t$.setProgressbar = setProgressbar;\n\t//\t$.showProgressbar = showProgressbar;\n\t//\t$.hideProgressbar = hideProgressbar;\n})(mui, document);\n/**\n * Input(TODO resize)\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n\tvar CLASS_ICON = 'mui-icon';\n\tvar CLASS_ICON_CLEAR = 'mui-icon-clear';\n\tvar CLASS_ICON_SPEECH = 'mui-icon-speech';\n\tvar CLASS_ICON_SEARCH = 'mui-icon-search';\n\tvar CLASS_ICON_PASSWORD = 'mui-icon-eye';\n\tvar CLASS_INPUT_ROW = 'mui-input-row';\n\tvar CLASS_PLACEHOLDER = 'mui-placeholder';\n\tvar CLASS_TOOLTIP = 'mui-tooltip';\n\tvar CLASS_HIDDEN = 'mui-hidden';\n\tvar CLASS_FOCUSIN = 'mui-focusin';\n\tvar SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR;\n\tvar SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH;\n\tvar SELECTOR_ICON_PASSWORD = '.' + CLASS_ICON_PASSWORD;\n\tvar SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER;\n\tvar SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP;\n\n\tvar findRow = function(target) {\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList && target.classList.contains(CLASS_INPUT_ROW)) {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\tvar Input = function(element, options) {\n\t\tthis.element = element;\n\t\tthis.options = options || {\n\t\t\tactions: 'clear'\n\t\t};\n\t\tif (~this.options.actions.indexOf('slider')) { //slider\n\t\t\tthis.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN;\n\t\t\tthis.sliderActionSelector = SELECTOR_TOOLTIP;\n\t\t} else { //clear,speech,search\n\t\t\tif (~this.options.actions.indexOf('clear')) {\n\t\t\t\tthis.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + ' ' + CLASS_HIDDEN;\n\t\t\t\tthis.clearActionSelector = SELECTOR_ICON_CLOSE;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('speech')) { //only for 5+\n\t\t\t\tthis.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH;\n\t\t\t\tthis.speechActionSelector = SELECTOR_ICON_SPEECH;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('search')) {\n\t\t\t\tthis.searchActionClass = CLASS_PLACEHOLDER;\n\t\t\t\tthis.searchActionSelector = SELECTOR_PLACEHOLDER;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('password')) {\n\t\t\t\tthis.passwordActionClass = CLASS_ICON + ' ' + CLASS_ICON_PASSWORD;\n\t\t\t\tthis.passwordActionSelector = SELECTOR_ICON_PASSWORD;\n\t\t\t}\n\t\t}\n\t\tthis.init();\n\t};\n\tInput.prototype.init = function() {\n\t\tthis.initAction();\n\t\tthis.initElementEvent();\n\t};\n\tInput.prototype.initAction = function() {\n\t\tvar self = this;\n\n\t\tvar row = self.element.parentNode;\n\t\tif (row) {\n\t\t\tif (self.sliderActionClass) {\n\t\t\t\tself.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector);\n\t\t\t} else {\n\t\t\t\tif (self.searchActionClass) {\n\t\t\t\t\tself.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector);\n\t\t\t\t\tself.searchAction.addEventListener('tap', function(e) {\n\t\t\t\t\t\t$.focus(self.element);\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.speechActionClass) {\n\t\t\t\t\tself.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector);\n\t\t\t\t\tself.speechAction.addEventListener('click', $.stopPropagation);\n\t\t\t\t\tself.speechAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.speechActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.clearActionClass) {\n\t\t\t\t\tself.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector);\n\t\t\t\t\tself.clearAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.clearActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.passwordActionClass) {\n\t\t\t\t\tself.passwordAction = self.createAction(row, self.passwordActionClass, self.passwordActionSelector);\n\t\t\t\t\tself.passwordAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.passwordActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tInput.prototype.createAction = function(row, actionClass, actionSelector) {\n\t\tvar action = row.querySelector(actionSelector);\n\t\tif (!action) {\n\t\t\tvar action = document.createElement('span');\n\t\t\taction.className = actionClass;\n\t\t\tif (actionClass === this.searchActionClass) {\n\t\t\t\taction.innerHTML = '<span class=\"' + CLASS_ICON + ' ' + CLASS_ICON_SEARCH + '\"></span><span>' + this.element.getAttribute('placeholder') + '</span>';\n\t\t\t\tthis.element.setAttribute('placeholder', '');\n\t\t\t\tif (this.element.value.trim()) {\n\t\t\t\t\trow.classList.add('mui-active');\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.insertBefore(action, this.element.nextSibling);\n\t\t}\n\t\treturn action;\n\t};\n\tInput.prototype.initElementEvent = function() {\n\t\tvar element = this.element;\n\n\t\tif (this.sliderActionClass) {\n\t\t\tvar tooltip = this.sliderAction;\n\t\t\tvar timer = null;\n\t\t\tvar showTip = function() { //每次重新计算是因为控件可能被隐藏，初始化时计算是不正确的\n\t\t\t\ttooltip.classList.remove(CLASS_HIDDEN);\n\t\t\t\tvar offsetLeft = element.offsetLeft;\n\t\t\t\tvar width = element.offsetWidth - 28;\n\t\t\t\tvar tooltipWidth = tooltip.offsetWidth;\n\t\t\t\tvar distince = Math.abs(element.max - element.min);\n\t\t\t\tvar scaleWidth = (width / distince) * Math.abs(element.value - element.min);\n\t\t\t\ttooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px';\n\t\t\t\ttooltip.innerText = element.value;\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\ttooltip.classList.add(CLASS_HIDDEN);\n\t\t\t\t}, 1000);\n\t\t\t};\n\t\t\telement.addEventListener('input', showTip);\n\t\t\telement.addEventListener('tap', showTip);\n\t\t\telement.addEventListener($.EVENT_MOVE, function(e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t} else {\n\t\t\tif (this.clearActionClass) {\n\t\t\t\tvar action = this.clearAction;\n\t\t\t\tif (!action) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.each(['keyup', 'change', 'input', 'focus', 'cut', 'paste'], function(index, type) {\n\t\t\t\t\t(function(type) {\n\t\t\t\t\t\telement.addEventListener(type, function() {\n\t\t\t\t\t\t\taction.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN);\n\t\t\t\t\t\t});\n\t\t\t\t\t})(type);\n\t\t\t\t});\n\t\t\t\telement.addEventListener('blur', function() {\n\t\t\t\t\taction.classList.add(CLASS_HIDDEN);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.searchActionClass) {\n\t\t\t\telement.addEventListener('focus', function() {\n\t\t\t\t\telement.parentNode.classList.add('mui-active');\n\t\t\t\t});\n\t\t\t\telement.addEventListener('blur', function() {\n\t\t\t\t\tif (!element.value.trim()) {\n\t\t\t\t\t\telement.parentNode.classList.remove('mui-active');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\tInput.prototype.setPlaceholder = function(text) {\n\t\tif (this.searchActionClass) {\n\t\t\tvar placeholder = this.element.parentNode.querySelector(SELECTOR_PLACEHOLDER);\n\t\t\tplaceholder && (placeholder.getElementsByTagName('span')[1].innerText = text);\n\t\t} else {\n\t\t\tthis.element.setAttribute('placeholder', text);\n\t\t}\n\t};\n\tInput.prototype.passwordActionClick = function(event) {\n\t\tif (this.element.type === 'text') {\n\t\t\tthis.element.type = 'password';\n\t\t} else {\n\t\t\tthis.element.type = 'text';\n\t\t}\n\t\tthis.passwordAction.classList.toggle('mui-active');\n\t\tevent.preventDefault();\n\t};\n\tInput.prototype.clearActionClick = function(event) {\n\t\tvar self = this;\n\t\tself.element.value = '';\n\t\t$.focus(self.element);\n\t\tself.clearAction.classList.add(CLASS_HIDDEN);\n\t\tevent.preventDefault();\n\t};\n\tInput.prototype.speechActionClick = function(event) {\n\t\tif (window.plus) {\n\t\t\tvar self = this;\n\t\t\tvar oldValue = self.element.value;\n\t\t\tself.element.value = '';\n\t\t\tdocument.body.classList.add(CLASS_FOCUSIN);\n\t\t\tplus.speech.startRecognize({\n\t\t\t\tengine: 'iFly'\n\t\t\t}, function(s) {\n\t\t\t\tself.element.value += s;\n\t\t\t\t$.focus(self.element);\n\t\t\t\tplus.speech.stopRecognize();\n\t\t\t\t$.trigger(self.element, 'recognized', {\n\t\t\t\t\tvalue: self.element.value\n\t\t\t\t});\n\t\t\t\tif (oldValue !== self.element.value) {\n\t\t\t\t\t$.trigger(self.element, 'change');\n\t\t\t\t\t$.trigger(self.element, 'input');\n\t\t\t\t}\n\t\t\t\t// document.body.classList.remove(CLASS_FOCUSIN);\n\t\t\t}, function(e) {\n\t\t\t\tdocument.body.classList.remove(CLASS_FOCUSIN);\n\t\t\t});\n\t\t} else {\n\t\t\talert('only for 5+');\n\t\t}\n\t\tevent.preventDefault();\n\t};\n\t$.fn.input = function(options) {\n\t\tvar inputApis = [];\n\t\tthis.each(function() {\n\t\t\tvar inputApi = null;\n\t\t\tvar actions = [];\n\t\t\tvar row = findRow(this.parentNode);\n\t\t\tif (this.type === 'range' && row.classList.contains('mui-input-range')) {\n\t\t\t\tactions.push('slider');\n\t\t\t} else {\n\t\t\t\tvar classList = this.classList;\n\t\t\t\tif (classList.contains('mui-input-clear')) {\n\t\t\t\t\tactions.push('clear');\n\t\t\t\t}\n\t\t\t\tif (!($.os.android && $.os.stream) && classList.contains('mui-input-speech')) {\n\t\t\t\t\tactions.push('speech');\n\t\t\t\t}\n\t\t\t\tif (classList.contains('mui-input-password')) {\n\t\t\t\t\tactions.push('password');\n\t\t\t\t}\n\t\t\t\tif (this.type === 'search' && row.classList.contains('mui-search')) {\n\t\t\t\t\tactions.push('search');\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar id = this.getAttribute('data-input-' + actions[0]);\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\tinputApi = $.data[id] = new Input(this, {\n\t\t\t\t\tactions: actions.join(',')\n\t\t\t\t});\n\t\t\t\tfor (var i = 0, len = actions.length; i < len; i++) {\n\t\t\t\t\tthis.setAttribute('data-input-' + actions[i], id);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinputApi = $.data[id];\n\t\t\t}\n\t\t\tinputApis.push(inputApi);\n\t\t});\n\t\treturn inputApis.length === 1 ? inputApis[0] : inputApis;\n\t};\n\t$.ready(function() {\n\t\t$('.mui-input-row input').input();\n\t});\n})(mui, window, document);\n(function($, window) {\n    var CLASS_ACTIVE = 'mui-active';\n    var rgbaRegex = /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n    var getColor = function(colorStr) {\n        var matches = colorStr.match(rgbaRegex);\n        if (matches && matches.length === 5) {\n            return [\n                matches[1],\n                matches[2],\n                matches[3],\n                matches[4]\n            ];\n        }\n        return [];\n    };\n    var Transparent = function(element, options) {\n        this.element = element;\n        this.options = $.extend({\n            top: 0, //距离顶部高度(到达该高度即触发)\n            offset: 150, //滚动透明距离\n            duration: 16, //过渡时间\n            scrollby: window//监听滚动距离容器\n        }, options || {});\n\n        this.scrollByElem = this.options.scrollby || window;\n        if (!this.scrollByElem) {\n            throw new Error(\"监听滚动的元素不存在\");\n        }\n        this.isNativeScroll = false;\n        if (this.scrollByElem === window) {\n            this.isNativeScroll = true;\n        } else if (!~this.scrollByElem.className.indexOf('mui-scroll-wrapper')) {\n            this.isNativeScroll = true;\n        }\n\n        this._style = this.element.style;\n        this._bgColor = this._style.backgroundColor;\n        var color = getColor(mui.getStyles(this.element, 'backgroundColor'));\n        if (color.length) {\n            this._R = color[0];\n            this._G = color[1];\n            this._B = color[2];\n            this._A = parseFloat(color[3]);\n            this.lastOpacity = this._A;\n            this._bufferFn = $.buffer(this.handleScroll, this.options.duration, this);\n            this.initEvent();\n        } else {\n            throw new Error(\"元素背景颜色必须为RGBA\");\n        }\n    };\n\n    Transparent.prototype.initEvent = function() {\n        this.scrollByElem.addEventListener('scroll', this._bufferFn);\n        if (this.isNativeScroll) { //原生scroll\n            this.scrollByElem.addEventListener($.EVENT_MOVE, this._bufferFn);\n        }\n    }\n    Transparent.prototype.handleScroll = function(e) {\n        var y = window.scrollY;\n        if (!this.isNativeScroll && e && e.detail) {\n            y = -e.detail.y;\n        }\n        var opacity = (y - this.options.top) / this.options.offset + this._A;\n        opacity = Math.min(Math.max(this._A, opacity), 1);\n        this._style.backgroundColor = 'rgba(' + this._R + ',' + this._G + ',' + this._B + ',' + opacity + ')';\n        if (opacity > this._A) {\n            this.element.classList.add(CLASS_ACTIVE);\n        } else {\n            this.element.classList.remove(CLASS_ACTIVE);\n        }\n        if (this.lastOpacity !== opacity) {\n            $.trigger(this.element, 'alpha', {\n                alpha: opacity\n            });\n            this.lastOpacity = opacity;\n        }\n    };\n    Transparent.prototype.destory = function() {\n        this.scrollByElem.removeEventListener('scroll', this._bufferFn);\n        this.scrollByElem.removeEventListener($.EVENT_MOVE, this._bufferFn);\n        this.element.style.backgroundColor = this._bgColor;\n        this.element.mui_plugin_transparent = null;\n    };\n    $.fn.transparent = function(options) {\n        options = options || {};\n        var transparentApis = [];\n        this.each(function() {\n            var transparentApi = this.mui_plugin_transparent;\n            if (!transparentApi) {\n                var top = this.getAttribute('data-top');\n                var offset = this.getAttribute('data-offset');\n                var duration = this.getAttribute('data-duration');\n                var scrollby = this.getAttribute('data-scrollby');\n                if (top !== null && typeof options.top === 'undefined') {\n                    options.top = top;\n                }\n                if (offset !== null && typeof options.offset === 'undefined') {\n                    options.offset = offset;\n                }\n                if (duration !== null && typeof options.duration === 'undefined') {\n                    options.duration = duration;\n                }\n                if (scrollby !== null && typeof options.scrollby === 'undefined') {\n                    options.scrollby = document.querySelector(scrollby) || window;\n                }\n                transparentApi = this.mui_plugin_transparent = new Transparent(this, options);\n            }\n            transparentApis.push(transparentApi);\n        });\n        return transparentApis.length === 1 ? transparentApis[0] : transparentApis;\n    };\n    $.ready(function() {\n        $('.mui-bar-transparent').transparent();\n    });\n})(mui, window);\n/**\n * 数字输入框\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($) {\n\n    var touchSupport = ('ontouchstart' in document);\n    var tapEventName = touchSupport ? 'tap' : 'click';\n    var changeEventName = 'change';\n    var holderClassName = 'mui-numbox';\n    var plusClassSelector = '.mui-btn-numbox-plus,.mui-numbox-btn-plus';\n    var minusClassSelector = '.mui-btn-numbox-minus,.mui-numbox-btn-minus';\n    var inputClassSelector = '.mui-input-numbox,.mui-numbox-input';\n\n    var Numbox = $.Numbox = $.Class.extend({\n        /**\n         * 构造函数\n         **/\n        init: function(holder, options) {\n            var self = this;\n            if (!holder) {\n                throw \"构造 numbox 时缺少容器元素\";\n            }\n            self.holder = holder;\n            options = options || {};\n            options.step = parseInt(options.step || 1);\n            self.options = options;\n            self.input = $.qsa(inputClassSelector, self.holder)[0];\n            self.plus = $.qsa(plusClassSelector, self.holder)[0];\n            self.minus = $.qsa(minusClassSelector, self.holder)[0];\n            self.checkValue();\n            self.initEvent();\n        },\n        /**\n         * 初始化事件绑定\n         **/\n        initEvent: function() {\n            var self = this;\n            self.plus.addEventListener(tapEventName, function(event) {\n                var val = parseInt(self.input.value) + self.options.step;\n                self.input.value = val.toString();\n                $.trigger(self.input, changeEventName, null);\n            });\n            self.minus.addEventListener(tapEventName, function(event) {\n                var val = parseInt(self.input.value) - self.options.step;\n                self.input.value = val.toString();\n                $.trigger(self.input, changeEventName, null);\n            });\n            self.input.addEventListener(changeEventName, function(event) {\n                self.checkValue();\n                var val = parseInt(self.input.value);\n                //触发顶层容器\n                $.trigger(self.holder, changeEventName, {\n                    value: val\n                });\n            });\n        },\n        /**\n         * 获取当前值\n         **/\n        getValue: function() {\n            var self = this;\n            return parseInt(self.input.value);\n        },\n        /**\n         * 验证当前值是法合法\n         **/\n        checkValue: function() {\n            var self = this;\n            var val = self.input.value;\n            if (val == null || val == '' || isNaN(val)) {\n                self.input.value = self.options.min || 0;\n                self.minus.disabled = self.options.min != null;\n            } else {\n                var val = parseInt(val);\n                if (self.options.max != null && !isNaN(self.options.max) && val >= parseInt(self.options.max)) {\n                    val = self.options.max;\n                    self.plus.disabled = true;\n                } else {\n                    self.plus.disabled = false;\n                }\n                if (self.options.min != null && !isNaN(self.options.min) && val <= parseInt(self.options.min)) {\n                    val = self.options.min;\n                    self.minus.disabled = true;\n                } else {\n                    self.minus.disabled = false;\n                }\n                self.input.value = val;\n            }\n        },\n        /**\n         * 更新选项\n         **/\n        setOption: function(name, value) {\n            var self = this;\n            self.options[name] = value;\n        },\n        /**\n         * 动态设置新值\n         **/\n        setValue: function(value) {\n            this.input.value = value;\n            this.checkValue();\n        }\n    });\n\n    $.fn.numbox = function(options) {\n        var instanceArray = [];\n        //遍历选择的元素\n        this.each(function(i, element) {\n            if (element.numbox) {\n                return;\n            }\n            if (options) {\n                element.numbox = new Numbox(element, options);\n            } else {\n                var optionsText = element.getAttribute('data-numbox-options');\n                var options = optionsText ? JSON.parse(optionsText) : {};\n                options.step = element.getAttribute('data-numbox-step') || options.step;\n                options.min = element.getAttribute('data-numbox-min') || options.min;\n                options.max = element.getAttribute('data-numbox-max') || options.max;\n                element.numbox = new Numbox(element, options);\n            }\n        });\n        return this[0] ? this[0].numbox : null;\n    }\n\n    //自动处理 class='mui-locker' 的 dom\n    $.ready(function() {\n        $('.' + holderClassName).numbox();\n    });\n\n}(mui));\n/**\n * Button\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n    var CLASS_ICON = 'mui-icon';\n    var CLASS_DISABLED = 'mui-disabled';\n\n    var STATE_RESET = 'reset';\n    var STATE_LOADING = 'loading';\n\n    var defaultOptions = {\n        loadingText: 'Loading...', //文案\n        loadingIcon: 'mui-spinner' + ' ' + 'mui-spinner-white', //图标，可为空\n        loadingIconPosition: 'left' //图标所处位置，仅支持left|right\n    };\n\n    var Button = function(element, options) {\n        this.element = element;\n        this.options = $.extend({}, defaultOptions, options);\n        if (!this.options.loadingText) {\n            this.options.loadingText = defaultOptions.loadingText;\n        }\n        if (this.options.loadingIcon === null) {\n            this.options.loadingIcon = 'mui-spinner';\n            if ($.getStyles(this.element, 'color') === 'rgb(255, 255, 255)') {\n                this.options.loadingIcon += ' ' + 'mui-spinner-white';\n            }\n        }\n        this.isInput = this.element.tagName === 'INPUT';\n        this.resetHTML = this.isInput ? this.element.value : this.element.innerHTML;\n        this.state = '';\n    };\n    Button.prototype.loading = function() {\n        this.setState(STATE_LOADING);\n    };\n    Button.prototype.reset = function() {\n        this.setState(STATE_RESET);\n    };\n    Button.prototype.setState = function(state) {\n        if (this.state === state) {\n            return false;\n        }\n        this.state = state;\n        if (state === STATE_RESET) {\n            this.element.disabled = false;\n            this.element.classList.remove(CLASS_DISABLED);\n            this.setHtml(this.resetHTML);\n        } else if (state === STATE_LOADING) {\n            this.element.disabled = true;\n            this.element.classList.add(CLASS_DISABLED);\n            var html = this.isInput ? this.options.loadingText : ('<span>' + this.options.loadingText + '</span>');\n            if (this.options.loadingIcon && !this.isInput) {\n                if (this.options.loadingIconPosition === 'right') {\n                    html += '&nbsp;<span class=\"' + this.options.loadingIcon + '\"></span>';\n                } else {\n                    html = '<span class=\"' + this.options.loadingIcon + '\"></span>&nbsp;' + html;\n                }\n            }\n            this.setHtml(html);\n        }\n    };\n    Button.prototype.setHtml = function(html) {\n        if (this.isInput) {\n            this.element.value = html;\n        } else {\n            this.element.innerHTML = html;\n        }\n    }\n    $.fn.button = function(state) {\n        var buttonApis = [];\n        this.each(function() {\n            var buttonApi = this.mui_plugin_button;\n            if (!buttonApi) {\n                var loadingText = this.getAttribute('data-loading-text');\n                var loadingIcon = this.getAttribute('data-loading-icon');\n                var loadingIconPosition = this.getAttribute('data-loading-icon-position');\n                this.mui_plugin_button = buttonApi = new Button(this, {\n                    loadingText: loadingText,\n                    loadingIcon: loadingIcon,\n                    loadingIconPosition: loadingIconPosition\n                });\n            }\n            if (state === STATE_LOADING || state === STATE_RESET) {\n                buttonApi.setState(state);\n            }\n            buttonApis.push(buttonApi);\n        });\n        return buttonApis.length === 1 ? buttonApis[0] : buttonApis;\n    };\n})(mui, window, document);"
  },
  {
    "path": "examples/nativeTab/js/util.js",
    "content": "var util = {\n\toptions: {\n\t\tACTIVE_COLOR: \"#007aff\",\n\t\tNORMAL_COLOR: \"#000\",\n\t\tsubpages: [\"html/tab-webview-subpage-chat.html\", \"html/tab-webview-subpage-contact.html\"]\n\t},\n\t/**\n\t *  简单封装了绘制原生view控件的方法\n\t *  绘制内容支持font（文本，字体图标）,图片img , 矩形区域rect\n\t */\n\tdrawNative: function(id, styles, tags) {\n\t\tvar view = new plus.nativeObj.View(id, styles, tags);\n\t\treturn view;\n\t},\n\t/**\n\t * 初始化首个tab窗口 和 创建子webview窗口 \n\t */\n\tinitSubpage: function(aniShow) {\n\t\tvar subpage_style = {\n\t\t\t\ttop: 0,\n\t\t\t\tbottom: 51\n\t\t\t},\n\t\t\tsubpages = util.options.subpages,\n\t\t\tself = plus.webview.currentWebview(),\n\t\t\ttemp = {};\n\t\t\t\n\t\t//兼容安卓上添加titleNView 和 设置沉浸式模式会遮盖子webview内容\n\t\tif(mui.os.android) {\n\t\t\tif(plus.navigator.isImmersedStatusbar()) {\n\t\t\t\tsubpage_style.top += plus.navigator.getStatusbarHeight();\n\t\t\t}\n\t\t\tif(self.getTitleNView()) {\n\t\t\t\tsubpage_style.top += 40;\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t// 初始化第一个tab项为首次显示\n\t\ttemp[self.id] = \"true\";\n\t\tmui.extend(aniShow, temp);\n\t\t// 初始化绘制首个tab按钮\n\t\tutil.toggleNview(0);\n\n\t\tfor(var i = 0, len = subpages.length; i < len; i++) {\n\n\t\t\tif(!plus.webview.getWebviewById(subpages[i])) {\n\t\t\t\tvar sub = plus.webview.create(subpages[i], subpages[i], subpage_style);\n\t\t\t\t//初始化隐藏\n\t\t\t\tsub.hide();\n\t\t\t\t// append到当前父webview\n\t\t\t\tself.append(sub);\n\t\t\t}\n\t\t}\n\t},\n\t/**\t\n\t * 点击切换tab窗口 \n\t */\n\tchangeSubpage: function(targetPage, activePage, aniShow) {\n\t\t//若为iOS平台或非首次显示，则直接显示\n\t\tif(mui.os.ios || aniShow[targetPage]) {\n\t\t\tplus.webview.show(targetPage);\n\t\t} else {\n\t\t\t//否则，使用fade-in动画，且保存变量\n\t\t\tvar temp = {};\n\t\t\ttemp[targetPage] = \"true\";\n\t\t\tmui.extend(aniShow, temp);\n\t\t\tplus.webview.show(targetPage, \"fade-in\", 300);\n\t\t}\n\t\t//隐藏当前 除了第一个父窗口\n\t\tif(activePage !== plus.webview.getLaunchWebview()) {\n\t\t\tplus.webview.hide(activePage);\n\t\t}\n\t},\n\t/**\n\t * 点击重绘底部tab （view控件）\n\t */\n\ttoggleNview: function(currIndex) {\n\t\tcurrIndex = currIndex * 2;\n\t\t// 重绘当前tag 包括icon和text，所以执行两个重绘操作\n\t\tutil.updateSubNView(currIndex, util.options.ACTIVE_COLOR);\n\t\tutil.updateSubNView(currIndex + 1, util.options.ACTIVE_COLOR);\n\t\t// 重绘兄弟tag 反之排除当前点击的icon和text\n\t\tfor(var i = 0; i < 8; i++) {\n\t\t\tif(i !== currIndex && i !== currIndex + 1) {\n\t\t\t\tutil.updateSubNView(i, util.options.NORMAL_COLOR);\n\t\t\t}\n\t\t}\n\t},\n\t/*\n\t * 改变颜色\n\t */\n\tchangeColor: function(obj, color) {\n\t\tobj.color = color;\n\t\treturn obj;\n\t},\n\t/*\n\t * 利用 plus.nativeObj.View 提供的 drawText 方法更新 view 控件\n\t */\n\tupdateSubNView: function(currIndex, color) {\n\t\tvar self = plus.webview.currentWebview(),\n\t\t\tnviewEvent = plus.nativeObj.View.getViewById(\"tabBar\"), // 获取nview控件对象\n\t\t\tnviewObj = self.getStyle().subNViews[0], // 获取nview对象的属性\n\t\t\tcurrTag = nviewObj.tags[currIndex]; // 获取当前需重绘的tag\n\n\t\tnviewEvent.drawText(currTag.text, currTag.position, util.changeColor(currTag.textStyles, color), currTag.id);\n\t}\n};"
  },
  {
    "path": "examples/nativeTab/manifest.json",
    "content": "{\n\t\"@platforms\": [\n\t\t\"android\",\n\t\t\"iPhone\",\n\t\t\"iPad\"\n\t],\n\t\"id\": \"mui_template_nativetab\",/*应用的标识，创建应用时自动生成，勿手动修改*/\n\t\"name\": \"nativeObj模式底部选项卡\",/*应用名称，程序桌面图标名称*/\n\t\"version\": {\n\t\t\"name\": \"1.0\",/*应用版本名称*/\n\t\t\"code\": \"\"\n\t},\n\t\"description\": \"nativeObj模式底部选项卡 + 底部悬浮大球图标 + webview模式子窗口官方示例\",/*应用描述信息*/\n\t\"icons\": {\n\t\t\"72\": \"icon.png\"\n\t},\n\t\"launch_path\": \"index.html\",/*应用的入口页面，默认为根目录下的index.html；支持网络地址，必须以http://或https://开头*/\n\t\"developer\": {\n\t\t\"name\": \"\",/*开发者名称*/\n\t\t\"email\": \"\",/*开发者邮箱地址*/\n\t\t\"url\": \"\"\n\t},\n\t\"permissions\": {\n\t\t\"Accelerometer\": {\n\t\t\t\"description\": \"访问加速度感应器\"\n\t\t},\n\t\t\"Audio\": {\n\t\t\t\"description\": \"访问麦克风\"\n\t\t},\n\t\t\"Messaging\": {\n\t\t\t\"description\": \"短彩邮件插件\"\n\t\t},\n\t\t\"Cache\": {\n\t\t\t\"description\": \"管理应用缓存\"\n\t\t},\n\t\t\"Camera\": {\n\t\t\t\"description\": \"访问摄像头\"\n\t\t},\n\t\t\"Console\": {\n\t\t\t\"description\": \"跟踪调试输出日志\"\n\t\t},\n\t\t\"Contacts\": {\n\t\t\t\"description\": \"访问系统联系人信息\"\n\t\t},\n\t\t\"Device\": {\n\t\t\t\"description\": \"访问设备信息\"\n\t\t},\n\t\t\"Downloader\": {\n\t\t\t\"description\": \"文件下载管理\"\n\t\t},\n\t\t\"Events\": {\n\t\t\t\"description\": \"应用扩展事件\"\n\t\t},\n\t\t\"File\": {\n\t\t\t\"description\": \"访问本地文件系统\"\n\t\t},\n\t\t\"Gallery\": {\n\t\t\t\"description\": \"访问系统相册\"\n\t\t},\n\t\t\"Geolocation\": {\n\t\t\t\"description\": \"访问位置信息\"\n\t\t},\n\t\t\"Invocation\": {\n\t\t\t\"description\": \"使用Native.js能力\"\n\t\t},\n\t\t\"Orientation\": {\n\t\t\t\"description\": \"访问方向感应器\"\n\t\t},\n\t\t\"Proximity\": {\n\t\t\t\"description\": \"访问距离感应器\"\n\t\t},\n\t\t\"Storage\": {\n\t\t\t\"description\": \"管理应用本地数据\"\n\t\t},\n\n\t\t\"Uploader\": {\n\t\t\t\"description\": \"管理文件上传任务\"\n\t\t},\n\t\t\"Runtime\": {\n\t\t\t\"description\": \"访问运行期环境\"\n\t\t},\n\t\t\"XMLHttpRequest\": {\n\t\t\t\"description\": \"跨域网络访问\"\n\t\t},\n\t\t\"Zip\": {\n\t\t\t\"description\": \"文件压缩与解压缩\"\n\t\t},\n\t\t\"Barcode\": {\n\t\t\t\"description\": \"管理二维码扫描插件\"\n\t\t},\n\t\t\"Maps\": {\n\t\t\t\"description\": \"管理地图插件\"\n\t\t},\n\t\t\"Speech\": {\n\t\t\t\"description\": \"管理语音识别插件\"\n\t\t},\n\t\t\"Webview\": {\n\t\t\t\"description\": \"窗口管理\"\n\t\t},\n\t\t\"NativeUI\": {\n\t\t\t\"description\": \"原生UI控件\"\n\t\t},\n\t\t\"Navigator\": {\n\t\t\t\"description\": \"浏览器信息\"\n\t\t},\n\t\t\"NativeObj\": {\n\t\t\t\"description\": \"原生对象\"\n\t\t}\n\t},\n\t\"plus\": {\n\t\t\"launchwebview\": {\n\t\t\t\"bottom\": \"0px\",\n\t\t\t\"background\": \"#fff\",\n\t\t\t\"subNViews\": [\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"tabBar\",\n\t\t\t\t\t\"styles\": {\n\t\t\t\t\t\t\"bottom\": \"0px\",\n\t\t\t\t\t\t\"left\": \"0\",\n\t\t\t\t\t\t\"height\": \"50px\",\n\t\t\t\t\t\t\"width\": \"100%\",\n\t\t\t\t\t\t\"backgroundColor\": \"#fff\"\n\t\t\t\t\t},\n\t\t\t\t\t\"tags\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"tag\": \"font\",\n\t\t\t\t\t\t\t\"id\": \"indexIcon\",\n\t\t\t\t\t\t\t\"text\": \"\\ue500\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"4px\",\n\t\t\t\t\t\t\t\t\"left\": \"0\",\n\t\t\t\t\t\t\t\t\"width\": \"25%\",\n\t\t\t\t\t\t\t\t\"height\": \"24px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"textStyles\": {\n\t\t\t\t\t\t\t\t\"fontSrc\": \"_www/fonts/mui.ttf\",\n\t\t\t\t\t\t\t\t\"align\": \"center\",\n\t\t\t\t\t\t\t\t\"size\": \"24px\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\"tag\": \"font\",\n\t\t\t\t\t\t\t\"id\": \"indexText\",\n\t\t\t\t\t\t\t\"text\": \"首页\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"23px\",\n\t\t\t\t\t\t\t\t\"left\": \"0\",\n\t\t\t\t\t\t\t\t\"width\": \"25%\",\n\t\t\t\t\t\t\t\t\"height\": \"24px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"textStyles\": {\n\t\t\t\t\t\t\t\t\"align\": \"center\",\n\t\t\t\t\t\t\t\t\"size\": \"10px\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\t\"tag\": \"font\",\n\t\t\t\t\t\t\t\"id\": \"newsIcon\",\n\t\t\t\t\t\t\t\"text\": \"\\ue201\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"4px\",\n\t\t\t\t\t\t\t\t\"left\": \"20%\",\n\t\t\t\t\t\t\t\t\"width\": \"25%\",\n\t\t\t\t\t\t\t\t\"height\": \"24px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"textStyles\": {\n\t\t\t\t\t\t\t\t\"fontSrc\": \"_www/fonts/mui.ttf\",\n\t\t\t\t\t\t\t\t\"align\": \"center\",\n\t\t\t\t\t\t\t\t\"size\": \"24px\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\"tag\": \"font\",\n\t\t\t\t\t\t\t\"id\": \"newsText\",\n\t\t\t\t\t\t\t\"text\": \"消息\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"23px\",\n\t\t\t\t\t\t\t\t\"left\": \"20%\",\n\t\t\t\t\t\t\t\t\"width\": \"25%\",\n\t\t\t\t\t\t\t\t\"height\": \"24px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"textStyles\": {\n\t\t\t\t\t\t\t\t\"align\": \"center\",\n\t\t\t\t\t\t\t\t\"size\": \"10px\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\t\"tag\": \"font\",\n\t\t\t\t\t\t\t\"id\": \"contactIcon\",\n\t\t\t\t\t\t\t\"text\": \"\\ue100\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"4px\",\n\t\t\t\t\t\t\t\t\"left\": \"55%\",\n\t\t\t\t\t\t\t\t\"width\": \"25%\",\n\t\t\t\t\t\t\t\t\"height\": \"24px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"textStyles\": {\n\t\t\t\t\t\t\t\t\"fontSrc\": \"_www/fonts/mui.ttf\",\n\t\t\t\t\t\t\t\t\"align\": \"center\",\n\t\t\t\t\t\t\t\t\"size\": \"24px\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\"tag\": \"font\",\n\t\t\t\t\t\t\t\"id\": \"contactText\",\n\t\t\t\t\t\t\t\"text\": \"通讯录\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"24px\",\n\t\t\t\t\t\t\t\t\"left\": \"55%\",\n\t\t\t\t\t\t\t\t\"width\": \"25%\",\n\t\t\t\t\t\t\t\t\"height\": \"24px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"textStyles\": {\n\t\t\t\t\t\t\t\t\"align\": \"center\",\n\t\t\t\t\t\t\t\t\"size\": \"10px\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\t\"tag\": \"font\",\n\t\t\t\t\t\t\t\"id\": \"newwindowIcon\",\n\t\t\t\t\t\t\t\"text\": \"\\ue6c9\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"4px\",\n\t\t\t\t\t\t\t\t\"left\": \"75%\",\n\t\t\t\t\t\t\t\t\"width\": \"25%\",\n\t\t\t\t\t\t\t\t\"height\": \"24px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"textStyles\": {\n\t\t\t\t\t\t\t\t\"fontSrc\": \"_www/fonts/iconfont.ttf\",\n\t\t\t\t\t\t\t\t\"align\": \"center\",\n\t\t\t\t\t\t\t\t\"size\": \"24px\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\"tag\": \"font\",\n\t\t\t\t\t\t\t\"id\": \"newwindowText\",\n\t\t\t\t\t\t\t\"text\": \"新窗口\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"24px\",\n\t\t\t\t\t\t\t\t\"left\": \"75%\",\n\t\t\t\t\t\t\t\t\"width\": \"25%\",\n\t\t\t\t\t\t\t\t\"height\": \"24px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"textStyles\": {\n\t\t\t\t\t\t\t\t\"align\": \"center\",\n\t\t\t\t\t\t\t\t\"size\": \"10px\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"tag\": \"rect\",\n\t\t\t\t\t\t\t\"id\": \"tabBorder\",\n\t\t\t\t\t\t\t\"position\": {\n\t\t\t\t\t\t\t\t\"top\": \"0\",\n\t\t\t\t\t\t\t\t\"left\": \"0\",\n\t\t\t\t\t\t\t\t\"width\": \"100%\",\n\t\t\t\t\t\t\t\t\"height\": \"1px\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"rectStyles\": {\n\t\t\t\t\t\t\t\t\"color\": \"#ccc\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"splashscreen\": {\n\t\t\t\"autoclose\": true,/*是否自动关闭程序启动界面，true表示应用加载应用入口页面后自动关闭；false则需调plus.navigator.closeSplashscreen()关闭*/\n\t\t\t\"waiting\": true\n\t\t},\n\t\t\"popGesture\": \"close\",/*设置应用默认侧滑返回关闭Webview窗口，\"none\"为无侧滑返回功能，\"hide\"为侧滑隐藏Webview窗口。参考http://ask.dcloud.net.cn/article/102*/\n\t\t\"runmode\": \"normal\",/*应用的首次启动运行模式，可取liberate或normal，liberate模式在第一次启动时将解压应用资源（Android平台File API才可正常访问_www目录）*/\n\t\t\"signature\": \"Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==\",/*可选，保留给应用签名，暂不使用*/\n\t\t\"distribute\": {\n\t\t\t\"apple\": {\n\t\t\t\t\"appid\": \"\",/*iOS应用标识，苹果开发网站申请的appid，如io.dcloud.HelloH5*/\n\t\t\t\t\"mobileprovision\": \"\",/*iOS应用打包配置文件*/\n\t\t\t\t\"password\": \"\",/*iOS应用打包个人证书导入密码*/\n\t\t\t\t\"p12\": \"\",/*iOS应用打包个人证书，打包配置文件关联的个人证书*/\n\t\t\t\t\"devices\": \"universal\",/*iOS应用支持的设备类型，可取值iphone/ipad/universal*/\n\t\t\t\t\"frameworks\": []\n\t\t\t},\n\t\t\t\"google\": {\n\t\t\t\t\"packagename\": \"\",/*Android应用包名，如io.dcloud.HelloH5*/\n\t\t\t\t\"keystore\": \"\",/*Android应用打包使用的密钥库文件*/\n\t\t\t\t\"password\": \"\",/*Android应用打包使用密钥库中证书的密码*/\n\t\t\t\t\"aliasname\": \"\",/*Android应用打包使用密钥库中证书的别名*/\n\t\t\t\t\"permissions\": [\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.CHANGE_NETWORK_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.READ_CONTACTS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.VIBRATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.READ_LOGS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.ACCESS_WIFI_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-feature android:name=\\\"android.hardware.camera.autofocus\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.WRITE_CONTACTS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.ACCESS_NETWORK_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.CAMERA\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.RECORD_AUDIO\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.GET_ACCOUNTS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.MODIFY_AUDIO_SETTINGS\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.READ_PHONE_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.CHANGE_WIFI_STATE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.WAKE_LOCK\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.CALL_PHONE\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.FLASHLIGHT\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.ACCESS_COARSE_LOCATION\\\"/>\",\n\t\t\t\t\t\"<uses-feature android:name=\\\"android.hardware.camera\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.ACCESS_FINE_LOCATION\\\"/>\",\n\t\t\t\t\t\"<uses-permission android:name=\\\"android.permission.WRITE_SETTINGS\\\"/>\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"orientation\": [\n\t\t\t\t\"portrait-primary\"\n\t\t\t],/*应用支持的方向，portrait-primary：竖屏正方向；portrait-secondary：竖屏反方向；landscape-primary：横屏正方向；landscape-secondary：横屏反方向*/\n\t\t\t\"icons\": {\n\t\t\t\t\"ios\": {\n\t\t\t\t\t\"prerendered\": true, /*应用图标是否已经高亮处理，在iOS6及以下设备上有效*/\n\t\t\t\t\t\"auto\": \"\", /*应用图标，分辨率：512x512，用于自动生成各种尺寸程序图标*/\n\t\t\t\t\t\"iphone\": {\n\t\t\t\t\t\t\"normal\": \"\", /*iPhone3/3GS程序图标，分辨率：57x57*/\n\t\t\t\t\t\t\"retina\": \"\", /*iPhone4程序图标，分辨率：114x114*/\n\t\t\t\t\t\t\"retina7\": \"\", /*iPhone4S/5/6程序图标，分辨率：120x120*/\n\t\t\t\t\t\t\"retina8\": \"\", /*iPhone6 Plus程序图标，分辨率：180x180*/\n\t\t\t\t\t\t\"spotlight-normal\": \"\", /*iPhone3/3GS Spotlight搜索程序图标，分辨率：29x29*/\n\t\t\t\t\t\t\"spotlight-retina\": \"\", /*iPhone4 Spotlight搜索程序图标，分辨率：58x58*/\n\t\t\t\t\t\t\"spotlight-retina7\": \"\", /*iPhone4S/5/6 Spotlight搜索程序图标，分辨率：80x80*/\n\t\t\t\t\t\t\"settings-normal\": \"\", /*iPhone4设置页面程序图标，分辨率：29x29*/\n\t\t\t\t\t\t\"settings-retina\": \"\", /*iPhone4S/5/6设置页面程序图标，分辨率：58x58*/\n\t\t\t\t\t\t\"settings-retina8\": \"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"ipad\": {\n\t\t\t\t\t\t\"normal\": \"\", /*iPad普通屏幕程序图标，分辨率：72x72*/\n\t\t\t\t\t\t\"retina\": \"\", /*iPad高分屏程序图标，分辨率：144x144*/\n\t\t\t\t\t\t\"normal7\": \"\", /*iPad iOS7程序图标，分辨率：76x76*/\n\t\t\t\t\t\t\"retina7\": \"\", /*iPad iOS7高分屏程序图标，分辨率：152x152*/\n\t\t\t\t\t\t\"spotlight-normal\": \"\", /*iPad Spotlight搜索程序图标，分辨率：50x50*/\n\t\t\t\t\t\t\"spotlight-retina\": \"\", /*iPad高分屏Spotlight搜索程序图标，分辨率：100x100*/\n\t\t\t\t\t\t\"spotlight-normal7\": \"\",/*iPad iOS7 Spotlight搜索程序图标，分辨率：40x40*/\n\t\t\t\t\t\t\"spotlight-retina7\": \"\",/*iPad iOS7高分屏Spotlight搜索程序图标，分辨率：80x80*/\n\t\t\t\t\t\t\"settings-normal\": \"\",/*iPad设置页面程序图标，分辨率：29x29*/\n\t\t\t\t\t\t\"settings-retina\": \"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"android\": {\n\t\t\t\t\t\"mdpi\": \"\", /*普通屏程序图标，分辨率：48x48*/\n\t\t\t\t\t\"ldpi\": \"\", /*大屏程序图标，分辨率：48x48*/\n\t\t\t\t\t\"hdpi\": \"\", /*高分屏程序图标，分辨率：72x72*/\n\t\t\t\t\t\"xhdpi\": \"\",/*720P高分屏程序图标，分辨率：96x96*/\n\t\t\t\t\t\"xxhdpi\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"splashscreen\": {\n\t\t\t\t\"ios\": {\n\t\t\t\t\t\"iphone\": {\n\t\t\t\t\t\t\"default\": \"\", /*iPhone3启动图片选，分辨率：320x480*/\n\t\t\t\t\t\t\"retina35\": \"\",/*3.5英寸设备(iPhone4)启动图片，分辨率：640x960*/\n\t\t\t\t\t\t\"retina40\": \"\",/*4.0 英寸设备(iPhone5/iPhone5s)启动图片，分辨率：640x1136*/\n\t\t\t\t\t\t\"retina47\": \"\",/*4.7 英寸设备(iPhone6)启动图片，分辨率：750x1334*/\n\t\t\t\t\t\t\"retina55\": \"\",/*5.5 英寸设备(iPhone6 Plus)启动图片，分辨率：1242x2208*/\n\t\t\t\t\t\t\"retina55l\": \"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"ipad\": {\n\t\t\t\t\t\t\"portrait\": \"\", /*iPad竖屏启动图片，分辨率：768x1004*/\n\t\t\t\t\t\t\"portrait-retina\": \"\",/*iPad高分屏竖屏图片，分辨率：1536x2008*/\n\t\t\t\t\t\t\"landscape\": \"\", /*iPad横屏启动图片，分辨率：1024x748*/\n\t\t\t\t\t\t\"landscape-retina\": \"\", /*iPad高分屏横屏启动图片，分辨率：2048x1496*/\n\t\t\t\t\t\t\"portrait7\": \"\", /*iPad iOS7竖屏启动图片，分辨率：768x1024*/\n\t\t\t\t\t\t\"portrait-retina7\": \"\",/*iPad iOS7高分屏竖屏图片，分辨率：1536x2048*/\n\t\t\t\t\t\t\"landscape7\": \"\", /*iPad iOS7横屏启动图片，分辨率：1024x768*/\n\t\t\t\t\t\t\"landscape-retina7\": \"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"android\": {\n\t\t\t\t\t\"mdpi\": \"\", /*普通屏启动图片，分辨率：240x282*/\n\t\t\t\t\t\"ldpi\": \"\", /*大屏启动图片，分辨率：320x442*/\n\t\t\t\t\t\"hdpi\": \"\", /*高分屏启动图片，分辨率：480x762*/\n\t\t\t\t\t\"xhdpi\": \"\", /*720P高分屏启动图片，分辨率：720x1242*/\n\t\t\t\t\t\"xxhdpi\": \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"dependencies\": {\n\t\t\"pages\": {\n\t\t\t\"index.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"html/tab-webview-subpage-about.html\",\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"fonts/iconfont.ttf\",\n\t\t\t\t\t\"html/tab-webview-subpage-chat.html\",\n\t\t\t\t\t\"js/util.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"html/tab-webview-subpage-contact.html\",\n\t\t\t\t\t\"html/new-webview.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"launch.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"html/tab-webview-subpage-about.html\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [\n\t\t\t\t\t\"html/tab-webview-subpage-setting.html\",\n\t\t\t\t\t\"html/tab-webview-subpage-chat.html\",\n\t\t\t\t\t\"html/tab-webview-subpage-contact.html\"\n\t\t\t\t],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"html/tab-webview-subpage-setting.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/mui.min.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"html/tab-webview-subpage-about.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"js/util.js\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"html/tab-webview-subpage-chat.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"fonts/mui.ttf\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"html/tab-webview-subpage-contact.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"images/60x60.gif\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"css/mui.min.css\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t},\n\t\t\t\"html/new-webview.html\": {\n\t\t\t\t\"resources\": [\n\t\t\t\t\t\"css/mui.min.css\",\n\t\t\t\t\t\"js/mui.min.js\",\n\t\t\t\t\t\"fonts/mui.ttf\"\n\t\t\t\t],\n\t\t\t\t\"refer\": [],\n\t\t\t\t\"priority\": 0\n\t\t\t}\n\t\t},\n\t\t\"idle\": {\n\t\t\t\"resources\": [\n\t\t\t\t\"js/mui.js\",\n\t\t\t\t\"css/mui.css\"\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "examples/nativeTab/unpackage/.confirmed_dependencies",
    "content": "{\n  \"index.html\": {\n    \"resources\": [\n      \"js/mui.min.js\",\n      \"css/mui.min.css\",\n      \"html/tab-webview-subpage-about.html\",\n      \"fonts/mui.ttf\",\n      \"fonts/iconfont.ttf\",\n      \"js/util.js\",\n      \"html/tab-webview-subpage-chat.html\"\n    ],\n    \"refer\": [\n      \"html/tab-webview-subpage-setting.html\",\n      \"html/tab-webview-subpage-chat.html\",\n      \"html/tab-webview-subpage-contact.html\",\n      \"html/tab-webview-subpage-about.html\",\n      \"html/new-webview.html\"\n    ]\n  },\n  \"launch.html\": {\n    \"resources\": [\n      \"js/mui.min.js\",\n      \"css/mui.min.css\",\n      \"html/tab-webview-subpage-about.html\"\n    ],\n    \"refer\": [\n      \"html/tab-webview-subpage-setting.html\",\n      \"html/tab-webview-subpage-chat.html\",\n      \"html/tab-webview-subpage-contact.html\",\n      \"html/tab-webview-subpage-about.html\"\n    ]\n  },\n  \"html/tab-webview-subpage-setting.html\": {\n    \"resources\": [\n      \"fonts/mui.ttf\",\n      \"css/mui.min.css\",\n      \"js/mui.min.js\"\n    ],\n    \"refer\": []\n  },\n  \"html/tab-webview-subpage-about.html\": {\n    \"resources\": [\n      \"css/mui.min.css\",\n      \"js/mui.min.js\",\n      \"js/util.js\"\n    ],\n    \"refer\": []\n  },\n  \"html/tab-webview-subpage-chat.html\": {\n    \"resources\": [\n      \"fonts/mui.ttf\",\n      \"js/mui.min.js\",\n      \"css/mui.min.css\"\n    ],\n    \"refer\": []\n  },\n  \"html/tab-webview-subpage-contact.html\": {\n    \"resources\": [\n      \"images/60x60.gif\",\n      \"js/mui.min.js\",\n      \"css/mui.min.css\"\n    ],\n    \"refer\": []\n  },\n  \"html/new-webview.html\": {\n    \"resources\": [\n      \"css/mui.min.css\",\n      \"js/mui.min.js\",\n      \"fonts/mui.ttf\"\n    ],\n    \"refer\": []\n  }\n}"
  },
  {
    "path": "examples/nativeTab/unpackage/.dependencies",
    "content": "null"
  },
  {
    "path": "grunt/mui-namespace-generator.js",
    "content": "/*!\n * Mui Grunt task for namespace generation\n */\n\n/* jshint node: true */'use strict';\nvar fs = require('fs');\nmodule.exports = function generateNamespace() {\n\tvar dir = fs.readdirSync('dist/js/');\n\tdir.forEach(function(file) {\n\t\tif (~file.indexOf('.js') && !~file.indexOf('.min')) {\n\t\t\tvar source = fs.readFileSync('dist/js/' + file, 'utf8');\n\t\t\tvar name = file.replace('.js', '').split('.')[0];\n\t\t\tsource = source.toString().replace(/\\$\\.className\\(([\\'|\"])([^\\'|\"]*)[\\'|\"]\\)/g, '$1' + name + '-$2$1').replace(/\\$\\.classSelector\\(([\\'|\"])([^\\'|\"]*)[\\'|\"]\\)/g, function(match, p1, p2) {\n\t\t\t\treturn p1 + p2.replace(/\\./g, '.' + name + '-') + p1;\n\t\t\t});\n\t\t\tfs.writeFileSync('dist/js/' + file, source);\n\t\t}\n\t});\n};\n"
  },
  {
    "path": "js/actions.js",
    "content": "/**\n * actions\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar CLASS_ACTION = $.className('action');\n\n\tvar handle = function(event, target) {\n\t\tvar className = target.className || '';\n\t\tif (typeof className !== 'string') { //svg className(SVGAnimatedString)\n\t\t\tclassName = '';\n\t\t}\n\t\tif (className && ~className.indexOf(CLASS_ACTION)) {\n\t\t\tif (target.classList.contains($.className('action-back'))) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\treturn target;\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 50,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisContinue: true\n\t});\n\n})(mui, 'action');"
  },
  {
    "path": "js/ajax.plugin.js",
    "content": "(function($) {\n    //TODO\n})(mui);"
  },
  {
    "path": "js/input.plugin.js",
    "content": "/**\n * Input(TODO resize)\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n\tvar CLASS_ICON = $.className('icon');\n\tvar CLASS_ICON_CLEAR = $.className('icon-clear');\n\tvar CLASS_ICON_SPEECH = $.className('icon-speech');\n\tvar CLASS_ICON_SEARCH = $.className('icon-search');\n\tvar CLASS_ICON_PASSWORD = $.className('icon-eye');\n\tvar CLASS_INPUT_ROW = $.className('input-row');\n\tvar CLASS_PLACEHOLDER = $.className('placeholder');\n\tvar CLASS_TOOLTIP = $.className('tooltip');\n\tvar CLASS_HIDDEN = $.className('hidden');\n\tvar CLASS_FOCUSIN = $.className('focusin');\n\tvar SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR;\n\tvar SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH;\n\tvar SELECTOR_ICON_PASSWORD = '.' + CLASS_ICON_PASSWORD;\n\tvar SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER;\n\tvar SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP;\n\n\tvar findRow = function(target) {\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList && target.classList.contains(CLASS_INPUT_ROW)) {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\tvar Input = function(element, options) {\n\t\tthis.element = element;\n\t\tthis.options = options || {\n\t\t\tactions: 'clear'\n\t\t};\n\t\tif (~this.options.actions.indexOf('slider')) { //slider\n\t\t\tthis.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN;\n\t\t\tthis.sliderActionSelector = SELECTOR_TOOLTIP;\n\t\t} else { //clear,speech,search\n\t\t\tif (~this.options.actions.indexOf('clear')) {\n\t\t\t\tthis.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + ' ' + CLASS_HIDDEN;\n\t\t\t\tthis.clearActionSelector = SELECTOR_ICON_CLOSE;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('speech')) { //only for 5+\n\t\t\t\tthis.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH;\n\t\t\t\tthis.speechActionSelector = SELECTOR_ICON_SPEECH;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('search')) {\n\t\t\t\tthis.searchActionClass = CLASS_PLACEHOLDER;\n\t\t\t\tthis.searchActionSelector = SELECTOR_PLACEHOLDER;\n\t\t\t}\n\t\t\tif (~this.options.actions.indexOf('password')) {\n\t\t\t\tthis.passwordActionClass = CLASS_ICON + ' ' + CLASS_ICON_PASSWORD;\n\t\t\t\tthis.passwordActionSelector = SELECTOR_ICON_PASSWORD;\n\t\t\t}\n\t\t}\n\t\tthis.init();\n\t};\n\tInput.prototype.init = function() {\n\t\tthis.initAction();\n\t\tthis.initElementEvent();\n\t};\n\tInput.prototype.initAction = function() {\n\t\tvar self = this;\n\n\t\tvar row = self.element.parentNode;\n\t\tif (row) {\n\t\t\tif (self.sliderActionClass) {\n\t\t\t\tself.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector);\n\t\t\t} else {\n\t\t\t\tif (self.searchActionClass) {\n\t\t\t\t\tself.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector);\n\t\t\t\t\tself.searchAction.addEventListener('tap', function(e) {\n\t\t\t\t\t\t$.focus(self.element);\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.speechActionClass) {\n\t\t\t\t\tself.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector);\n\t\t\t\t\tself.speechAction.addEventListener('click', $.stopPropagation);\n\t\t\t\t\tself.speechAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.speechActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.clearActionClass) {\n\t\t\t\t\tself.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector);\n\t\t\t\t\tself.clearAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.clearActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (self.passwordActionClass) {\n\t\t\t\t\tself.passwordAction = self.createAction(row, self.passwordActionClass, self.passwordActionSelector);\n\t\t\t\t\tself.passwordAction.addEventListener('tap', function(event) {\n\t\t\t\t\t\tself.passwordActionClick(event);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tInput.prototype.createAction = function(row, actionClass, actionSelector) {\n\t\tvar action = row.querySelector(actionSelector);\n\t\tif (!action) {\n\t\t\tvar action = document.createElement('span');\n\t\t\taction.className = actionClass;\n\t\t\tif (actionClass === this.searchActionClass) {\n\t\t\t\taction.innerHTML = '<span class=\"' + CLASS_ICON + ' ' + CLASS_ICON_SEARCH + '\"></span><span>' + this.element.getAttribute('placeholder') + '</span>';\n\t\t\t\tthis.element.setAttribute('placeholder', '');\n\t\t\t\tif (this.element.value.trim()) {\n\t\t\t\t\trow.classList.add($.className('active'));\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.insertBefore(action, this.element.nextSibling);\n\t\t}\n\t\treturn action;\n\t};\n\tInput.prototype.initElementEvent = function() {\n\t\tvar element = this.element;\n\n\t\tif (this.sliderActionClass) {\n\t\t\tvar tooltip = this.sliderAction;\n\t\t\tvar timer = null;\n\t\t\tvar showTip = function() { //每次重新计算是因为控件可能被隐藏，初始化时计算是不正确的\n\t\t\t\ttooltip.classList.remove(CLASS_HIDDEN);\n\t\t\t\tvar offsetLeft = element.offsetLeft;\n\t\t\t\tvar width = element.offsetWidth - 28;\n\t\t\t\tvar tooltipWidth = tooltip.offsetWidth;\n\t\t\t\tvar distince = Math.abs(element.max - element.min);\n\t\t\t\tvar scaleWidth = (width / distince) * Math.abs(element.value - element.min);\n\t\t\t\ttooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px';\n\t\t\t\ttooltip.innerText = element.value;\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\ttooltip.classList.add(CLASS_HIDDEN);\n\t\t\t\t}, 1000);\n\t\t\t};\n\t\t\telement.addEventListener('input', showTip);\n\t\t\telement.addEventListener('tap', showTip);\n\t\t\telement.addEventListener($.EVENT_MOVE, function(e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t} else {\n\t\t\tif (this.clearActionClass) {\n\t\t\t\tvar action = this.clearAction;\n\t\t\t\tif (!action) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$.each(['keyup', 'change', 'input', 'focus', 'cut', 'paste'], function(index, type) {\n\t\t\t\t\t(function(type) {\n\t\t\t\t\t\telement.addEventListener(type, function() {\n\t\t\t\t\t\t\taction.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN);\n\t\t\t\t\t\t});\n\t\t\t\t\t})(type);\n\t\t\t\t});\n\t\t\t\telement.addEventListener('blur', function() {\n\t\t\t\t\taction.classList.add(CLASS_HIDDEN);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.searchActionClass) {\n\t\t\t\telement.addEventListener('focus', function() {\n\t\t\t\t\telement.parentNode.classList.add($.className('active'));\n\t\t\t\t});\n\t\t\t\telement.addEventListener('blur', function() {\n\t\t\t\t\tif (!element.value.trim()) {\n\t\t\t\t\t\telement.parentNode.classList.remove($.className('active'));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\tInput.prototype.setPlaceholder = function(text) {\n\t\tif (this.searchActionClass) {\n\t\t\tvar placeholder = this.element.parentNode.querySelector(SELECTOR_PLACEHOLDER);\n\t\t\tplaceholder && (placeholder.getElementsByTagName('span')[1].innerText = text);\n\t\t} else {\n\t\t\tthis.element.setAttribute('placeholder', text);\n\t\t}\n\t};\n\tInput.prototype.passwordActionClick = function(event) {\n\t\tif (this.element.type === 'text') {\n\t\t\tthis.element.type = 'password';\n\t\t} else {\n\t\t\tthis.element.type = 'text';\n\t\t}\n\t\tthis.passwordAction.classList.toggle($.className('active'));\n\t\tevent.preventDefault();\n\t};\n\tInput.prototype.clearActionClick = function(event) {\n\t\tvar self = this;\n\t\tself.element.value = '';\n\t\t$.focus(self.element);\n\t\tself.clearAction.classList.add(CLASS_HIDDEN);\n\t\tevent.preventDefault();\n\t};\n\tInput.prototype.speechActionClick = function(event) {\n\t\tif (window.plus) {\n\t\t\tvar self = this;\n\t\t\tvar oldValue = self.element.value;\n\t\t\tself.element.value = '';\n\t\t\tdocument.body.classList.add(CLASS_FOCUSIN);\n\t\t\tplus.speech.startRecognize({\n\t\t\t\tengine: 'iFly'\n\t\t\t}, function(s) {\n\t\t\t\tself.element.value += s;\n\t\t\t\t$.focus(self.element);\n\t\t\t\tplus.speech.stopRecognize();\n\t\t\t\t$.trigger(self.element, 'recognized', {\n\t\t\t\t\tvalue: self.element.value\n\t\t\t\t});\n\t\t\t\tif (oldValue !== self.element.value) {\n\t\t\t\t\t$.trigger(self.element, 'change');\n\t\t\t\t\t$.trigger(self.element, 'input');\n\t\t\t\t}\n\t\t\t\t// document.body.classList.remove(CLASS_FOCUSIN);\n\t\t\t}, function(e) {\n\t\t\t\tdocument.body.classList.remove(CLASS_FOCUSIN);\n\t\t\t});\n\t\t} else {\n\t\t\talert('only for 5+');\n\t\t}\n\t\tevent.preventDefault();\n\t};\n\t$.fn.input = function(options) {\n\t\tvar inputApis = [];\n\t\tthis.each(function() {\n\t\t\tvar inputApi = null;\n\t\t\tvar actions = [];\n\t\t\tvar row = findRow(this.parentNode);\n\t\t\tif (this.type === 'range' && row.classList.contains($.className('input-range'))) {\n\t\t\t\tactions.push('slider');\n\t\t\t} else {\n\t\t\t\tvar classList = this.classList;\n\t\t\t\tif (classList.contains($.className('input-clear'))) {\n\t\t\t\t\tactions.push('clear');\n\t\t\t\t}\n\t\t\t\tif (!($.os.android && $.os.stream) && classList.contains($.className('input-speech'))) {\n\t\t\t\t\tactions.push('speech');\n\t\t\t\t}\n\t\t\t\tif (classList.contains($.className('input-password'))) {\n\t\t\t\t\tactions.push('password');\n\t\t\t\t}\n\t\t\t\tif (this.type === 'search' && row.classList.contains($.className('search'))) {\n\t\t\t\t\tactions.push('search');\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar id = this.getAttribute('data-input-' + actions[0]);\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\tinputApi = $.data[id] = new Input(this, {\n\t\t\t\t\tactions: actions.join(',')\n\t\t\t\t});\n\t\t\t\tfor (var i = 0, len = actions.length; i < len; i++) {\n\t\t\t\t\tthis.setAttribute('data-input-' + actions[i], id);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinputApi = $.data[id];\n\t\t\t}\n\t\t\tinputApis.push(inputApi);\n\t\t});\n\t\treturn inputApis.length === 1 ? inputApis[0] : inputApis;\n\t};\n\t$.ready(function() {\n\t\t$($.classSelector('.input-row input')).input();\n\t});\n})(mui, window, document);"
  },
  {
    "path": "js/modals.js",
    "content": "/**\n * Modals\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} name\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\tvar CLASS_MODAL = $.className('modal');\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\tvar modal = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif (modal && modal.classList.contains(CLASS_MODAL)) {\n\t\t\t\treturn modal;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 50,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\twindow.addEventListener('tap', function(event) {\n\t\tif ($.targets.modal) {\n\t\t\tevent.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\t$.targets.modal.classList.toggle($.className('active'));\n\t\t}\n\t});\n})(mui, window, document, 'modal');"
  },
  {
    "path": "js/mui.active.js",
    "content": "/**\n * TODO mui active\n */\n(function(window) {\n\tvar active;\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tvar target = event.target;\n\t\tvar isCellDisabled = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList) {\n\t\t\t\tvar classList = target.classList;\n\t\t\t\tif (classList.contains(CLASS_DISABLED)) { //normal\n\t\t\t\t\tisCellDisabled = true;\n\t\t\t\t} else if (target.tagName === 'INPUT' || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN)) {\n\t\t\t\t\tisCellDisabled = true;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_TABLE_VIEW_CELL)) {\n\t\t\t\t\tif (!isCellDisabled) {\n\t\t\t\t\t\tactive = target;\n\t\t\t\t\t\tvar link = cell.querySelector('a');\n\t\t\t\t\t\tif (link && link.parentNode === cell) { //li>a\n\t\t\t\t\t\t\tactive = link;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(window);"
  },
  {
    "path": "js/mui.ajax.5+.js",
    "content": "/**\n * 5+ ajax\n */\n(function($) {\n\tvar originAnchor = document.createElement('a');\n\toriginAnchor.href = window.location.href;\n\t$.plusReady(function() {\n\t\t$.ajaxSettings = $.extend($.ajaxSettings, {\n\t\t\txhr: function(settings) {\n\t\t\t\tif (settings.crossDomain) { //强制使用plus跨域\n\t\t\t\t\treturn new plus.net.XMLHttpRequest();\n\t\t\t\t}\n\t\t\t\t//仅在webview的url为远程文件，且ajax请求的资源不同源下使用plus.net.XMLHttpRequest\n\t\t\t\tif (originAnchor.protocol !== 'file:') {\n\t\t\t\t\tvar urlAnchor = document.createElement('a');\n\t\t\t\t\turlAnchor.href = settings.url;\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\tsettings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host);\n\t\t\t\t\tif (settings.crossDomain) {\n\t\t\t\t\t\treturn new plus.net.XMLHttpRequest();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ($.os.ios && window.webkit && window.webkit.messageHandlers) { //wkwebview下同样使用5+ xhr\n                    return new plus.net.XMLHttpRequest();\n                }\n\t\t\t\treturn new window.XMLHttpRequest();\n\t\t\t}\n\t\t});\n\t});\n})(mui);"
  },
  {
    "path": "js/mui.ajax.js",
    "content": "/**\n * mui ajax\n * @param {type} $\n * @returns {undefined}\n */\n(function($, window, undefined) {\n\n\tvar jsonType = 'application/json';\n\tvar htmlType = 'text/html';\n\tvar rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi;\n\tvar scriptTypeRE = /^(?:text|application)\\/javascript/i;\n\tvar xmlTypeRE = /^(?:text|application)\\/xml/i;\n\tvar blankRE = /^\\s*$/;\n\n\t$.ajaxSettings = {\n\t\ttype: 'GET',\n\t\tbeforeSend: $.noop,\n\t\tsuccess: $.noop,\n\t\terror: $.noop,\n\t\tcomplete: $.noop,\n\t\tcontext: null,\n\t\txhr: function(protocol) {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t},\n\t\taccepts: {\n\t\t\tscript: 'text/javascript, application/javascript, application/x-javascript',\n\t\t\tjson: jsonType,\n\t\t\txml: 'application/xml, text/xml',\n\t\t\thtml: htmlType,\n\t\t\ttext: 'text/plain'\n\t\t},\n\t\ttimeout: 0,\n\t\tprocessData: true,\n\t\tcache: true\n\t};\n\tvar ajaxBeforeSend = function(xhr, settings) {\n\t\tvar context = settings.context\n\t\tif(settings.beforeSend.call(context, xhr, settings) === false) {\n\t\t\treturn false;\n\t\t}\n\t};\n\tvar ajaxSuccess = function(data, xhr, settings) {\n\t\tsettings.success.call(settings.context, data, 'success', xhr);\n\t\tajaxComplete('success', xhr, settings);\n\t};\n\t// type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n\tvar ajaxError = function(error, type, xhr, settings) {\n\t\tsettings.error.call(settings.context, xhr, type, error);\n\t\tajaxComplete(type, xhr, settings);\n\t};\n\t// status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n\tvar ajaxComplete = function(status, xhr, settings) {\n\t\tsettings.complete.call(settings.context, xhr, status);\n\t};\n\n\tvar serialize = function(params, obj, traditional, scope) {\n\t\tvar type, array = $.isArray(obj),\n\t\t\thash = $.isPlainObject(obj);\n\t\t$.each(obj, function(key, value) {\n\t\t\ttype = $.type(value);\n\t\t\tif(scope) {\n\t\t\t\tkey = traditional ? scope :\n\t\t\t\t\tscope + '[' + (hash || type === 'object' || type === 'array' ? key : '') + ']';\n\t\t\t}\n\t\t\t// handle data in serializeArray() format\n\t\t\tif(!scope && array) {\n\t\t\t\tparams.add(value.name, value.value);\n\t\t\t}\n\t\t\t// recurse into nested objects\n\t\t\telse if(type === \"array\" || (!traditional && type === \"object\")) {\n\t\t\t\tserialize(params, value, traditional, key);\n\t\t\t} else {\n\t\t\t\tparams.add(key, value);\n\t\t\t}\n\t\t});\n\t};\n\tvar serializeData = function(options) {\n\t\tif(options.processData && options.data && typeof options.data !== \"string\") {\n\t\t\tvar contentType = options.contentType;\n\t\t\tif(!contentType && options.headers) {\n\t\t\t\tcontentType = options.headers['Content-Type'];\n\t\t\t}\n\t\t\tif(contentType && ~contentType.indexOf(jsonType)) { //application/json\n\t\t\t\toptions.data = JSON.stringify(options.data);\n\t\t\t} else {\n\t\t\t\toptions.data = $.param(options.data, options.traditional);\n\t\t\t}\n\t\t}\n\t\tif(options.data && (!options.type || options.type.toUpperCase() === 'GET')) {\n\t\t\toptions.url = appendQuery(options.url, options.data);\n\t\t\toptions.data = undefined;\n\t\t}\n\t};\n\tvar appendQuery = function(url, query) {\n\t\tif(query === '') {\n\t\t\treturn url;\n\t\t}\n\t\treturn(url + '&' + query).replace(/[&?]{1,2}/, '?');\n\t};\n\tvar mimeToDataType = function(mime) {\n\t\tif(mime) {\n\t\t\tmime = mime.split(';', 2)[0];\n\t\t}\n\t\treturn mime && (mime === htmlType ? 'html' :\n\t\t\tmime === jsonType ? 'json' :\n\t\t\tscriptTypeRE.test(mime) ? 'script' :\n\t\t\txmlTypeRE.test(mime) && 'xml') || 'text';\n\t};\n\tvar parseArguments = function(url, data, success, dataType) {\n\t\tif($.isFunction(data)) {\n\t\t\tdataType = success, success = data, data = undefined;\n\t\t}\n\t\tif(!$.isFunction(success)) {\n\t\t\tdataType = success, success = undefined;\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: success,\n\t\t\tdataType: dataType\n\t\t};\n\t};\n\t$.ajax = function(url, options) {\n\t\tif(typeof url === \"object\") {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\t\tvar settings = options || {};\n\t\tsettings.url = url || settings.url;\n\t\tfor(var key in $.ajaxSettings) {\n\t\t\tif(settings[key] === undefined) {\n\t\t\t\tsettings[key] = $.ajaxSettings[key];\n\t\t\t}\n\t\t}\n\t\tserializeData(settings);\n\t\tvar dataType = settings.dataType;\n\n\t\tif(settings.cache === false || ((!options || options.cache !== true) && ('script' === dataType))) {\n\t\t\tsettings.url = appendQuery(settings.url, '_=' + $.now());\n\t\t}\n\t\tvar mime = settings.accepts[dataType && dataType.toLowerCase()];\n\t\tvar headers = {};\n\t\tvar setHeader = function(name, value) {\n\t\t\theaders[name.toLowerCase()] = [name, value];\n\t\t};\n\t\tvar protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol;        \n\t\tvar xhr = settings.xhr(settings);\n        \n        if(location.protocol === 'file:' && $.os.ios && window.webkit && window.webkit.messageHandlers && !(xhr instanceof plus.net.XMLHttpRequest)){\n            console.error(\"当前运行环境为WKWebview，需在plusReady事件触发后再调用mui.ajax，否则可能会执行失败或报Script error的错误\")\n        }\n\t\tvar nativeSetHeader = xhr.setRequestHeader;\n\t\tvar abortTimeout;\n\n\t\tsetHeader('X-Requested-With', 'XMLHttpRequest');\n\t\tsetHeader('Accept', mime || '*/*');\n\t\tif(!!(mime = settings.mimeType || mime)) {\n\t\t\tif(mime.indexOf(',') > -1) {\n\t\t\t\tmime = mime.split(',', 2)[0];\n\t\t\t}\n\t\t\txhr.overrideMimeType && xhr.overrideMimeType(mime);\n\t\t}\n\t\tif(settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() !== 'GET')) {\n\t\t\tsetHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');\n\t\t}\n\t\tif(settings.headers) {\n\t\t\tfor(var name in settings.headers)\n\t\t\t\tsetHeader(name, settings.headers[name]);\n\t\t}\n\t\txhr.setRequestHeader = setHeader;\n\n\t\txhr.onreadystatechange = function() {\n\t\t\tif(xhr.readyState === 4) {\n\t\t\t\txhr.onreadystatechange = $.noop;\n\t\t\t\tclearTimeout(abortTimeout);\n\t\t\t\tvar result, error = false;\n\t\t\t\tvar isLocal = protocol === 'file:';\n\t\t\t\tif((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || (xhr.status === 0 && isLocal && xhr.responseText)) {\n\t\t\t\t\tdataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));\n\t\t\t\t\tresult = xhr.responseText;\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// http://perfectionkills.com/global-eval-what-are-the-options/\n\t\t\t\t\t\tif(dataType === 'script') {\n\t\t\t\t\t\t\t(1, eval)(result);\n\t\t\t\t\t\t} else if(dataType === 'xml') {\n\t\t\t\t\t\t\tresult = xhr.responseXML;\n\t\t\t\t\t\t} else if(dataType === 'json') {\n\t\t\t\t\t\t\tresult = blankRE.test(result) ? null : $.parseJSON(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\terror = e;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(error) {\n\t\t\t\t\t\tajaxError(error, 'parsererror', xhr, settings);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tajaxSuccess(result, xhr, settings);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar status = xhr.status ? 'error' : 'abort';\n\t\t\t\t\tvar statusText = xhr.statusText || null;\n\t\t\t\t\tif(isLocal) {\n\t\t\t\t\t\tstatus = 'error';\n\t\t\t\t\t\tstatusText = '404';\n\t\t\t\t\t}\n\t\t\t\t\tajaxError(statusText, status, xhr, settings);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif(ajaxBeforeSend(xhr, settings) === false) {\n\t\t\txhr.abort();\n\t\t\tajaxError(null, 'abort', xhr, settings);\n\t\t\treturn xhr;\n\t\t}\n\n\t\tif(settings.xhrFields) {\n\t\t\tfor(var name in settings.xhrFields) {\n\t\t\t\txhr[name] = settings.xhrFields[name];\n\t\t\t}\n\t\t}\n\n\t\tvar async = 'async' in settings ? settings.async : true;\n\n\t\txhr.open(settings.type.toUpperCase(), settings.url, async, settings.username, settings.password);\n\n\t\tfor(var name in headers) {\n\t\t\tif(headers.hasOwnProperty(name)) {\n\t\t\t\tnativeSetHeader.apply(xhr, headers[name]);\n\t\t\t}\n\t\t}\n\t\tif(settings.timeout > 0) {\n\t\t\tabortTimeout = setTimeout(function() {\n\t\t\t\txhr.onreadystatechange = $.noop;\n\t\t\t\txhr.abort();\n\t\t\t\tajaxError(null, 'timeout', xhr, settings);\n\t\t\t}, settings.timeout);\n\t\t}\n\t\txhr.send(settings.data ? settings.data : null);\n\t\treturn xhr;\n\t};\n\n\t$.param = function(obj, traditional) {\n\t\tvar params = [];\n\t\tparams.add = function(k, v) {\n\t\t\tthis.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n\t\t};\n\t\tserialize(params, obj, traditional);\n\t\treturn params.join('&').replace(/%20/g, '+');\n\t};\n\t$.get = function( /* url, data, success, dataType */ ) {\n\t\treturn $.ajax(parseArguments.apply(null, arguments));\n\t};\n\n\t$.post = function( /* url, data, success, dataType */ ) {\n\t\tvar options = parseArguments.apply(null, arguments);\n\t\toptions.type = 'POST';\n\t\treturn $.ajax(options);\n\t};\n\n\t$.getJSON = function( /* url, data, success */ ) {\n\t\tvar options = parseArguments.apply(null, arguments);\n\t\toptions.dataType = 'json';\n\t\treturn $.ajax(options);\n\t};\n\n\t$.fn.load = function(url, data, success) {\n\t\tif(!this.length)\n\t\t\treturn this;\n\t\tvar self = this,\n\t\t\tparts = url.split(/\\s/),\n\t\t\tselector,\n\t\t\toptions = parseArguments(url, data, success),\n\t\t\tcallback = options.success;\n\t\tif(parts.length > 1)\n\t\t\toptions.url = parts[0], selector = parts[1];\n\t\toptions.success = function(response) {\n\t\t\tif(selector) {\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tdiv.innerHTML = response.replace(rscript, \"\");\n\t\t\t\tvar selectorDiv = document.createElement('div');\n\t\t\t\tvar childs = div.querySelectorAll(selector);\n\t\t\t\tif(childs && childs.length > 0) {\n\t\t\t\t\tfor(var i = 0, len = childs.length; i < len; i++) {\n\t\t\t\t\t\tselectorDiv.appendChild(childs[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself[0].innerHTML = selectorDiv.innerHTML;\n\t\t\t} else {\n\t\t\t\tself[0].innerHTML = response;\n\t\t\t}\n\t\t\tcallback && callback.apply(self, arguments);\n\t\t};\n\t\t$.ajax(options);\n\t\treturn this;\n\t};\n\n})(mui, window);"
  },
  {
    "path": "js/mui.animation.js",
    "content": "/**\n * mui animation\n */\n(function($, window) {\n\t/**\n\t * scrollTo\n\t */\n\t$.scrollTo = function(scrollTop, duration, callback) {\n\t\tduration = duration || 1000;\n\t\tvar scroll = function(duration) {\n\t\t\tif (duration <= 0) {\n\t\t\t\twindow.scrollTo(0, scrollTop);\n\t\t\t\tcallback && callback();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar distaince = scrollTop - window.scrollY;\n\t\t\tsetTimeout(function() {\n\t\t\t\twindow.scrollTo(0, window.scrollY + distaince / duration * 10);\n\t\t\t\tscroll(duration - 10);\n\t\t\t}, 16.7);\n\t\t};\n\t\tscroll(duration);\n\t};\n\t$.animationFrame = function(cb) {\n\t\tvar args, isQueued, context;\n\t\treturn function() {\n\t\t\targs = arguments;\n\t\t\tcontext = this;\n\t\t\tif (!isQueued) {\n\t\t\t\tisQueued = true;\n\t\t\t\trequestAnimationFrame(function() {\n\t\t\t\t\tcb.apply(context, args);\n\t\t\t\t\tisQueued = false;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t};\n\n})(mui, window);"
  },
  {
    "path": "js/mui.animationframe.js",
    "content": "/**\n * mui animationFrame\n */\n(function($, window) {\n\n\tvar rAF = window.requestAnimationFrame;\n\tvar cAF = window.cancelAnimationFrame;\n\n\tvar queues = {};\n\n\tvar animationFrame = {\n\t\tqueue : queue,\n\t\tqueueAfter : queueAfter,\n\t\tcancel : cancel\n\t};\n\n\tfunction animation_id() {\n\t\tvar id;\n\t\tdo {\n\t\t\tid = Math.floor(Math.random() * 1E9);\n\t\t} while (id in queues);\n\t\treturn id;\n\t}\n\n\tfunction recursion(callback) {\n\t\tvar qid = animation_id();\n\t\t(function wrapper() {\n\t\t\tcallback();\n\t\t\tqueues[qid] = rAF(function() {\n\t\t\t\tdelete queues[qid];\n\t\t\t\twrapper();\n\t\t\t});\n\t\t})();\n\t\treturn qid;\n\t}\n\n\tfunction queue(callback) {\n\t\tvar qid = animation_id();\n\n\t\tqueues[qid] = rAF(function() {\n\t\t\tdelete queues[qid];\n\t\t\tcallback.apply(animationFrame, arguments);\n\t\t});\n\n\t\treturn qid;\n\t}\n\n\tfunction queueAfter(callback) {\n\t\tvar qid;\n\n\t\tqid = queue(function() {\n\t\t\tqueues[qid] = rAF(function() {\n\t\t\t\tdelete queues[qid];\n\t\t\t\tcallback.apply(animationFrame, arguments);\n\t\t\t});\n\t\t});\n\n\t\treturn qid;\n\t}\n\n\tfunction cancel(qid) {\n\t\tif ( qid in queues) {\n\t\t\tcAF(queues[qid]);\n\t\t\tdelete queues[qid];\n\t\t}\n\t\treturn animationFrame;\n\t}\n\n\n\t$.animationFrame = animationFrame;\n\n})(mui, window);\n"
  },
  {
    "path": "js/mui.back.5+.js",
    "content": "/**\n * mui back 5+\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\tif ($.os.plus && $.os.android) {\n\t\t$.addBack({\n\t\t\tname: 'mui',\n\t\t\tindex: 5,\n\t\t\thandle: function() {\n\t\t\t\t//后续重新设计此处，将back放到各个空间内部实现\n\t\t\t\t//popover\n\t\t\t\tif ($.targets._popover && $.targets._popover.classList.contains($.className('active'))) {\n\t\t\t\t\t$($.targets._popover).popover('hide');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//offcanvas\n\t\t\t\tvar offCanvas = document.querySelector($.classSelector('.off-canvas-wrap.active'));\n\t\t\t\tif (offCanvas) {\n\t\t\t\t\t$(offCanvas).offCanvas('close');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage();\n\t\t\t\tif (previewImage && previewImage.isShown()) {\n\t\t\t\t\tpreviewImage.close();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//popup\n\t\t\t\treturn $.closePopup();\n\t\t\t}\n\t\t});\n\t}\n\t//首次按下back按键的时间\n\t$.__back__first = null;\n\t/**\n\t * 5+ back\n\t */\n\t$.addBack({\n\t\tname: '5+',\n\t\tindex: 10,\n\t\thandle: function() {\n\t\t\tif (!window.plus) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar wobj = plus.webview.currentWebview();\n\t\t\tvar parent = wobj.parent();\n\t\t\tif (parent) {\n\t\t\t\tparent.evalJS('mui&&mui.back();');\n\t\t\t} else {\n\t\t\t\twobj.canBack(function(e) {\n\t\t\t\t\t//by chb 暂时注释，在碰到类似popover之类的锚点的时候，需多次点击才能返回；\n\t\t\t\t\tif (e.canBack) { //webview history back\n\t\t\t\t\t\twindow.history.back();\n\t\t\t\t\t} else { //webview close or hide\n\t\t\t\t\t\t//fixed by fxy 此处不应该用opener判断，因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了，导致不能执行close\n\t\t\t\t\t\tif (wobj.id === plus.runtime.appid) { //首页\n\t\t\t\t\t\t\t//首页不存在opener的情况下，后退实际上应该是退出应用；\n\t\t\t\t\t\t\t//首次按键，提示‘再按一次退出应用’\n\t\t\t\t\t\t\tif (!$.__back__first) {\n\t\t\t\t\t\t\t\t$.__back__first = new Date().getTime();\n\t\t\t\t\t\t\t\tmui.toast('再按一次退出应用');\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t$.__back__first = null;\n\t\t\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (new Date().getTime() - $.__back__first < 2000) {\n\t\t\t\t\t\t\t\t\tplus.runtime.quit();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else { //其他页面，\n\t\t\t\t\t\t\tif (wobj.preload) {\n\t\t\t\t\t\t\t\twobj.hide(\"auto\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//关闭页面时，需要将其打开的所有子页面全部关闭；\n\t\t\t\t\t\t\t\t$.closeAll(wobj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t});\n\n\n\t$.menu = function() {\n\t\tvar menu = document.querySelector($.classSelector('.action-menu'));\n\t\tif (menu) {\n\t\t\t$.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话，找不到当前targets的问题\n\t\t\t$.trigger(menu, 'tap');\n\t\t} else { //执行父窗口的menu\n\t\t\tif (window.plus) {\n\t\t\t\tvar wobj = $.currentWebview;\n\t\t\t\tvar parent = wobj.parent();\n\t\t\t\tif (parent) { //又得evalJS\n\t\t\t\t\tparent.evalJS('mui&&mui.menu();');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar __back = function() {\n\t\t$.back();\n\t};\n\tvar __menu = function() {\n\t\t$.menu();\n\t};\n\t//默认监听\n\t$.plusReady(function() {\n\t\tif ($.options.keyEventBind.backbutton) {\n\t\t\tplus.key.addEventListener('backbutton', __back, false);\n\t\t}\n\t\tif ($.options.keyEventBind.menubutton) {\n\t\t\tplus.key.addEventListener('menubutton', __menu, false);\n\t\t}\n\t});\n\t//处理按键监听事件\n\t$.addInit({\n\t\tname: 'keyEventBind',\n\t\tindex: 1000,\n\t\thandle: function() {\n\t\t\t$.plusReady(function() {\n\t\t\t\t//如果不为true，则移除默认监听\n\t\t\t\tif (!$.options.keyEventBind.backbutton) {\n\t\t\t\t\tplus.key.removeEventListener('backbutton', __back);\n\t\t\t\t}\n\t\t\t\tif (!$.options.keyEventBind.menubutton) {\n\t\t\t\t\tplus.key.removeEventListener('menubutton', __menu);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(mui, window);"
  },
  {
    "path": "js/mui.back.js",
    "content": "/**\n * mui back\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\t/**\n\t * register back\n\t * @param {type} back\n\t * @returns {$.gestures}\n\t */\n\t$.addBack = function(back) {\n\t\treturn $.addAction('backs', back);\n\t};\n\t/**\n\t * default\n\t */\n\t$.addBack({\n\t\tname: 'browser',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tif (window.history.length > 1) {\n\t\t\t\twindow.history.back();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t});\n\t/**\n\t * 后退\n\t */\n\t$.back = function() {\n\t\tif (typeof $.options.beforeback === 'function') {\n\t\t\tif ($.options.beforeback() === false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$.doAction('backs');\n\t};\n\twindow.addEventListener('tap', function(e) {\n\t\tvar action = $.targets.action;\n\t\tif (action && action.classList.contains($.className('action-back'))) {\n\t\t\t$.back();\n\t\t\t$.targets.action = false;\n\t\t}\n\t});\n\twindow.addEventListener('swiperight', function(e) {\n\t\tvar detail = e.detail;\n\t\tif ($.options.swipeBack === true && Math.abs(detail.angle) < 3) {\n\t\t\t$.back();\n\t\t}\n\t});\n\n})(mui, window);"
  },
  {
    "path": "js/mui.button.js",
    "content": "/**\n * Button\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n    var CLASS_ICON = $.className('icon');\n    var CLASS_DISABLED = $.className('disabled');\n\n    var STATE_RESET = 'reset';\n    var STATE_LOADING = 'loading';\n\n    var defaultOptions = {\n        loadingText: 'Loading...', //文案\n        loadingIcon: $.className('spinner') + ' ' + $.className('spinner-white'), //图标，可为空\n        loadingIconPosition: 'left' //图标所处位置，仅支持left|right\n    };\n\n    var Button = function(element, options) {\n        this.element = element;\n        this.options = $.extend({}, defaultOptions, options);\n        if (!this.options.loadingText) {\n            this.options.loadingText = defaultOptions.loadingText;\n        }\n        if (this.options.loadingIcon === null) {\n            this.options.loadingIcon = $.className('spinner');\n            if ($.getStyles(this.element, 'color') === 'rgb(255, 255, 255)') {\n                this.options.loadingIcon += ' ' + $.className('spinner-white');\n            }\n        }\n        this.isInput = this.element.tagName === 'INPUT';\n        this.resetHTML = this.isInput ? this.element.value : this.element.innerHTML;\n        this.state = '';\n    };\n    Button.prototype.loading = function() {\n        this.setState(STATE_LOADING);\n    };\n    Button.prototype.reset = function() {\n        this.setState(STATE_RESET);\n    };\n    Button.prototype.setState = function(state) {\n        if (this.state === state) {\n            return false;\n        }\n        this.state = state;\n        if (state === STATE_RESET) {\n            this.element.disabled = false;\n            this.element.classList.remove(CLASS_DISABLED);\n            this.setHtml(this.resetHTML);\n        } else if (state === STATE_LOADING) {\n            this.element.disabled = true;\n            this.element.classList.add(CLASS_DISABLED);\n            var html = this.isInput ? this.options.loadingText : ('<span>' + this.options.loadingText + '</span>');\n            if (this.options.loadingIcon && !this.isInput) {\n                if (this.options.loadingIconPosition === 'right') {\n                    html += '&nbsp;<span class=\"' + this.options.loadingIcon + '\"></span>';\n                } else {\n                    html = '<span class=\"' + this.options.loadingIcon + '\"></span>&nbsp;' + html;\n                }\n            }\n            this.setHtml(html);\n        }\n    };\n    Button.prototype.setHtml = function(html) {\n        if (this.isInput) {\n            this.element.value = html;\n        } else {\n            this.element.innerHTML = html;\n        }\n    }\n    $.fn.button = function(state) {\n        var buttonApis = [];\n        this.each(function() {\n            var buttonApi = this.mui_plugin_button;\n            if (!buttonApi) {\n                var loadingText = this.getAttribute('data-loading-text');\n                var loadingIcon = this.getAttribute('data-loading-icon');\n                var loadingIconPosition = this.getAttribute('data-loading-icon-position');\n                this.mui_plugin_button = buttonApi = new Button(this, {\n                    loadingText: loadingText,\n                    loadingIcon: loadingIcon,\n                    loadingIconPosition: loadingIconPosition\n                });\n            }\n            if (state === STATE_LOADING || state === STATE_RESET) {\n                buttonApi.setState(state);\n            }\n            buttonApis.push(buttonApi);\n        });\n        return buttonApis.length === 1 ? buttonApis[0] : buttonApis;\n    };\n})(mui, window, document);"
  },
  {
    "path": "js/mui.class.js",
    "content": "(function($) {\n\tvar initializing = false,\n\t\tfnTest = /xyz/.test(function() {\n\t\t\txyz;\n\t\t}) ? /\\b_super\\b/ : /.*/;\n\n\tvar Class = function() {};\n\tClass.extend = function(prop) {\n\t\tvar _super = this.prototype;\n\t\tinitializing = true;\n\t\tvar prototype = new this();\n\t\tinitializing = false;\n\t\tfor (var name in prop) {\n\t\t\tprototype[name] = typeof prop[name] == \"function\" &&\n\t\t\t\ttypeof _super[name] == \"function\" && fnTest.test(prop[name]) ?\n\t\t\t\t(function(name, fn) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tvar tmp = this._super;\n\n\t\t\t\t\t\tthis._super = _super[name];\n\n\t\t\t\t\t\tvar ret = fn.apply(this, arguments);\n\t\t\t\t\t\tthis._super = tmp;\n\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t};\n\t\t\t\t})(name, prop[name]) :\n\t\t\t\tprop[name];\n\t\t}\n\t\tfunction Class() {\n\t\t\tif (!initializing && this.init)\n\t\t\t\tthis.init.apply(this, arguments);\n\t\t}\n\t\tClass.prototype = prototype;\n\t\tClass.prototype.constructor = Class;\n\t\tClass.extend = arguments.callee;\n\t\treturn Class;\n\t};\n\t$.Class = Class;\n})(mui);"
  },
  {
    "path": "js/mui.class.scroll.js",
    "content": "(function($, window, document, undefined) {\n\tvar CLASS_SCROLL = $.className('scroll');\n\tvar CLASS_SCROLLBAR = $.className('scrollbar');\n\tvar CLASS_INDICATOR = $.className('scrollbar-indicator');\n\tvar CLASS_SCROLLBAR_VERTICAL = CLASS_SCROLLBAR + '-vertical';\n\tvar CLASS_SCROLLBAR_HORIZONTAL = CLASS_SCROLLBAR + '-horizontal';\n\n\tvar CLASS_ACTIVE = $.className('active');\n\n\tvar ease = {\n\t\tquadratic: {\n\t\t\tstyle: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n\t\t\tfn: function(k) {\n\t\t\t\treturn k * (2 - k);\n\t\t\t}\n\t\t},\n\t\tcircular: {\n\t\t\tstyle: 'cubic-bezier(0.1, 0.57, 0.1, 1)',\n\t\t\tfn: function(k) {\n\t\t\t\treturn Math.sqrt(1 - (--k * k));\n\t\t\t}\n\t\t},\n\t\toutCirc: {\n\t\t\tstyle: 'cubic-bezier(0.075, 0.82, 0.165, 1)'\n\t\t},\n\t\toutCubic: {\n\t\t\tstyle: 'cubic-bezier(0.165, 0.84, 0.44, 1)'\n\t\t}\n\t}\n\tvar Scroll = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.wrapper = this.element = element;\n\t\t\tthis.scroller = this.wrapper.children[0];\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t\tthis.stopped = false;\n\n\t\t\tthis.options = $.extend(true, {\n\t\t\t\tscrollY: true, //是否竖向滚动\n\t\t\t\tscrollX: false, //是否横向滚动\n\t\t\t\tstartX: 0, //初始化时滚动至x\n\t\t\t\tstartY: 0, //初始化时滚动至y\n\n\t\t\t\tindicators: true, //是否显示滚动条\n\t\t\t\tstopPropagation: false,\n\t\t\t\thardwareAccelerated: true,\n\t\t\t\tfixedBadAndorid: false,\n\t\t\t\tpreventDefaultException: {\n\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/\n\t\t\t\t},\n\t\t\t\tmomentum: true,\n\n\t\t\t\tsnapX: 0.5, //横向切换距离(以当前容器宽度为基准)\n\t\t\t\tsnap: false, //图片轮播，拖拽式选项卡\n\n\t\t\t\tbounce: true, //是否启用回弹\n\t\t\t\tbounceTime: 500, //回弹动画时间\n\t\t\t\tbounceEasing: ease.outCirc, //回弹动画曲线\n\n\t\t\t\tscrollTime: 500,\n\t\t\t\tscrollEasing: ease.outCubic, //轮播动画曲线\n\n\t\t\t\tdirectionLockThreshold: 5,\n\n\t\t\t\tparallaxElement: false, //视差元素\n\t\t\t\tparallaxRatio: 0.5\n\t\t\t}, options);\n\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tthis.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : '';\n\n\t\t\tthis._init();\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.refresh();\n\t\t\t\t//\t\t\t\tif (this.options.startX !== 0 || this.options.startY !== 0) { //需要判断吗？后续根据实际情况再看看\n\t\t\t\tthis.scrollTo(this.options.startX, this.options.startY);\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._initParallax();\n\t\t\tthis._initIndicators();\n\t\t\tthis._initEvent();\n\t\t},\n\t\t_initParallax: function() {\n\t\t\tif (this.options.parallaxElement) {\n\t\t\t\tthis.parallaxElement = document.querySelector(this.options.parallaxElement);\n\t\t\t\tthis.parallaxStyle = this.parallaxElement.style;\n\t\t\t\tthis.parallaxHeight = this.parallaxElement.offsetHeight;\n\t\t\t\tthis.parallaxImgStyle = this.parallaxElement.querySelector('img').style;\n\t\t\t}\n\t\t},\n\t\t_initIndicators: function() {\n\t\t\tvar self = this;\n\t\t\tself.indicators = [];\n\t\t\tif (!this.options.indicators) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar indicators = [],\n\t\t\t\tindicator;\n\n\t\t\t// Vertical scrollbar\n\t\t\tif (self.options.scrollY) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: this._createScrollBar(CLASS_SCROLLBAR_VERTICAL),\n\t\t\t\t\tlistenX: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\t// Horizontal scrollbar\n\t\t\tif (this.options.scrollX) {\n\t\t\t\tindicator = {\n\t\t\t\t\tel: this._createScrollBar(CLASS_SCROLLBAR_HORIZONTAL),\n\t\t\t\t\tlistenY: false\n\t\t\t\t};\n\n\t\t\t\tthis.wrapper.appendChild(indicator.el);\n\t\t\t\tindicators.push(indicator);\n\t\t\t}\n\n\t\t\tfor (var i = indicators.length; i--;) {\n\t\t\t\tthis.indicators.push(new Indicator(this, indicators[i]));\n\t\t\t}\n\n\t\t},\n\t\t_initSnap: function() {\n\t\t\tthis.currentPage = {};\n\t\t\tthis.pages = [];\n\t\t\tvar snaps = this.snaps;\n\t\t\tvar length = snaps.length;\n\t\t\tvar m = 0;\n\t\t\tvar n = -1;\n\t\t\tvar x = 0;\n\t\t\tvar leftX = 0;\n\t\t\tvar rightX = 0;\n\t\t\tvar snapX = 0;\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar snap = snaps[i];\n\t\t\t\tvar offsetLeft = snap.offsetLeft;\n\t\t\t\tvar offsetWidth = snap.offsetWidth;\n\t\t\t\tif (i === 0 || offsetLeft <= snaps[i - 1].offsetLeft) {\n\t\t\t\t\tm = 0;\n\t\t\t\t\tn++;\n\t\t\t\t}\n\t\t\t\tif (!this.pages[m]) {\n\t\t\t\t\tthis.pages[m] = [];\n\t\t\t\t}\n\t\t\t\tx = this._getSnapX(offsetLeft);\n\t\t\t\tsnapX = Math.round((offsetWidth) * this.options.snapX);\n\t\t\t\tleftX = x - snapX;\n\t\t\t\trightX = x - offsetWidth + snapX;\n\t\t\t\tthis.pages[m][n] = {\n\t\t\t\t\tx: x,\n\t\t\t\t\tleftX: leftX,\n\t\t\t\t\trightX: rightX,\n\t\t\t\t\tpageX: m,\n\t\t\t\t\telement: snap\n\t\t\t\t}\n\t\t\t\tif (snap.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\tthis.currentPage = this.pages[m][0];\n\t\t\t\t}\n\t\t\t\tif (x >= this.maxScrollX) {\n\t\t\t\t\tm++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.options.startX = this.currentPage.x || 0;\n\t\t},\n\t\t_getSnapX: function(offsetLeft) {\n\t\t\treturn Math.max(Math.min(0, -offsetLeft + (this.wrapperWidth / 2)), this.maxScrollX);\n\t\t},\n\t\t_gotoPage: function(index) {\n\t\t\tthis.currentPage = this.pages[Math.min(index, this.pages.length - 1)][0];\n\t\t\tfor (var i = 0, len = this.snaps.length; i < len; i++) {\n\t\t\t\tif (i === index) {\n\t\t\t\t\tthis.snaps[i].classList.add(CLASS_ACTIVE);\n\t\t\t\t} else {\n\t\t\t\t\tthis.snaps[i].classList.remove(CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollTo(this.currentPage.x, 0, this.options.scrollTime);\n\t\t},\n\t\t_nearestSnap: function(x) {\n\t\t\tif (!this.pages.length) {\n\t\t\t\treturn {\n\t\t\t\t\tx: 0,\n\t\t\t\t\tpageX: 0\n\t\t\t\t};\n\t\t\t}\n\t\t\tvar i = 0;\n\t\t\tvar length = this.pages.length;\n\t\t\tif (x > 0) {\n\t\t\t\tx = 0;\n\t\t\t} else if (x < this.maxScrollX) {\n\t\t\t\tx = this.maxScrollX;\n\t\t\t}\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tvar nearestX = this.direction === 'left' ? this.pages[i][0].leftX : this.pages[i][0].rightX;\n\t\t\t\tif (x >= nearestX) {\n\t\t\t\t\treturn this.pages[i][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tx: 0,\n\t\t\t\tpageX: 0\n\t\t\t};\n\t\t},\n\t\t_initEvent: function(detach) {\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\twindow[action]('orientationchange', this);\n\t\t\twindow[action]('resize', this);\n\n\t\t\tthis.scroller[action]('webkitTransitionEnd', this);\n\n\t\t\tthis.wrapper[action]($.EVENT_START, this);\n\t\t\tthis.wrapper[action]($.EVENT_CANCEL, this);\n\t\t\tthis.wrapper[action]($.EVENT_END, this);\n\t\t\tthis.wrapper[action]('drag', this);\n\t\t\tthis.wrapper[action]('dragend', this);\n\t\t\tthis.wrapper[action]('flick', this);\n\t\t\tthis.wrapper[action]('scrollend', this);\n\t\t\tif (this.options.scrollX) {\n\t\t\t\tthis.wrapper[action]('swiperight', this);\n\t\t\t}\n\t\t\tvar segmentedControl = this.wrapper.querySelector($.classSelector('.segmented-control'));\n\t\t\tif (segmentedControl) { //靠，这个bug排查了一下午，阻止hash跳转，一旦hash跳转会导致可拖拽选项卡的tab不见\n\t\t\t\tmui(segmentedControl)[detach ? 'off' : 'on']('click', 'a', $.preventDefault);\n\t\t\t}\n\n\t\t\tthis.wrapper[action]('scrollstart', this);\n\t\t\tthis.wrapper[action]('refresh', this);\n\t\t},\n\t\t_handleIndicatorScrollend: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade();\n\t\t\t});\n\t\t},\n\t\t_handleIndicatorScrollstart: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.fade(1);\n\t\t\t});\n\t\t},\n\t\t_handleIndicatorRefresh: function() {\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.refresh();\n\t\t\t});\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tif (this.stopped) {\n\t\t\t\tthis.resetPosition();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\tthis._start(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis.options.stopPropagation && e.stopPropagation();\n\t\t\t\t\tthis._drag(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\tcase 'flick':\n\t\t\t\t\tthis.options.stopPropagation && e.stopPropagation();\n\t\t\t\t\tthis._flick(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tcase $.EVENT_END:\n\t\t\t\t\tthis._end(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd':\n\t\t\t\t\tthis.transitionTimer && this.transitionTimer.cancel();\n\t\t\t\t\tthis._transitionEnd(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollstart':\n\t\t\t\t\tthis._handleIndicatorScrollstart(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollend':\n\t\t\t\t\tthis._handleIndicatorScrollend(e);\n\t\t\t\t\tthis._scrollend(e);\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'orientationchange':\n\t\t\t\tcase 'resize':\n\t\t\t\t\tthis._resize();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swiperight':\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'refresh':\n\t\t\t\t\tthis._handleIndicatorRefresh(e);\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t},\n\t\t_start: function(e) {\n\t\t\tthis.moved = this.needReset = false;\n\t\t\tthis._transitionTime();\n\t\t\tif (this.isInTransition) {\n\t\t\t\tthis.needReset = true;\n\t\t\t\tthis.isInTransition = false;\n\t\t\t\tvar pos = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));\n\t\t\t\tthis.setTranslate(Math.round(pos.x), Math.round(pos.y));\n\t\t\t\t//\t\t\t\tthis.resetPosition(); //reset\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t\t//\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tthis.reLayout();\n\t\t\t$.trigger(this.scroller, 'beforescrollstart', this);\n\t\t},\n\t\t_getDirectionByAngle: function(angle) {\n\t\t\tif (angle < -80 && angle > -100) {\n\t\t\t\treturn 'up';\n\t\t\t} else if (angle >= 80 && angle < 100) {\n\t\t\t\treturn 'down';\n\t\t\t} else if (angle >= 170 || angle <= -170) {\n\t\t\t\treturn 'left';\n\t\t\t} else if (angle >= -35 && angle <= 10) {\n\t\t\t\treturn 'right';\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t_drag: function(e) {\n\t\t\t//\t\t\tif (this.needReset) {\n\t\t\t//\t\t\t\te.stopPropagation(); //disable parent drag(nested scroller)\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tif (this.options.scrollY || detail.direction === 'up' || detail.direction === 'down') { //如果是竖向滚动或手势方向是上或下\n\t\t\t\t//ios8 hack\n\t\t\t\tif ($.os.ios && parseFloat($.os.version) >= 8) { //多webview时，离开当前webview会导致后续touch事件不触发\n\t\t\t\t\tvar clientY = detail.gesture.touches[0].clientY;\n\t\t\t\t\t//下拉刷新 or 上拉加载\n\t\t\t\t\tif ((clientY + 10) > window.innerHeight || clientY < 10) {\n\t\t\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar isPreventDefault = isReturn = false;\n\t\t\tvar direction = this._getDirectionByAngle(detail.angle);\n\t\t\tif (detail.direction === 'left' || detail.direction === 'right') {\n\t\t\t\tif (this.options.scrollX) {\n\t\t\t\t\tisPreventDefault = true;\n\t\t\t\t\tif (!this.moved) { //识别角度(该角度导致轮播不灵敏)\n\t\t\t\t\t\t//\t\t\t\t\t\tif (direction !== 'left' && direction !== 'right') {\n\t\t\t\t\t\t//\t\t\t\t\t\t\tisReturn = true;\n\t\t\t\t\t\t//\t\t\t\t\t\t} else {\n\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (this.options.scrollY && !this.moved) {\n\t\t\t\t\tisReturn = true;\n\t\t\t\t}\n\t\t\t} else if (detail.direction === 'up' || detail.direction === 'down') {\n\t\t\t\tif (this.options.scrollY) {\n\t\t\t\t\tisPreventDefault = true;\n\t\t\t\t\t//\t\t\t\t\tif (!this.moved) { //识别角度,竖向滚动似乎没必要进行小角度验证\n\t\t\t\t\t//\t\t\t\t\t\tif (direction !== 'up' && direction !== 'down') {\n\t\t\t\t\t//\t\t\t\t\t\t\tisReturn = true;\n\t\t\t\t\t//\t\t\t\t\t\t}\n\t\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t\tif (!this.moved) {\n\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.options.scrollX && !this.moved) {\n\t\t\t\t\tisReturn = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisReturn = true;\n\t\t\t}\n\t\t\tif (this.moved || isPreventDefault) {\n\t\t\t\te.stopPropagation(); //阻止冒泡(scroll类嵌套)\n\t\t\t\tdetail.gesture && detail.gesture.preventDefault();\n\t\t\t}\n\t\t\tif (isReturn) { //禁止非法方向滚动\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.moved) {\n\t\t\t\t$.trigger(this.scroller, 'scrollstart', this);\n\t\t\t} else {\n\t\t\t\te.stopPropagation(); //move期间阻止冒泡(scroll嵌套)\n\t\t\t}\n\t\t\tvar deltaX = 0;\n\t\t\tvar deltaY = 0;\n\t\t\tif (!this.moved) { //start\n\t\t\t\tdeltaX = detail.deltaX;\n\t\t\t\tdeltaY = detail.deltaY;\n\t\t\t} else { //move\n\t\t\t\tdeltaX = detail.deltaX - $.gestures.session.prevTouch.deltaX;\n\t\t\t\tdeltaY = detail.deltaY - $.gestures.session.prevTouch.deltaY;\n\t\t\t}\n\t\t\tvar absDeltaX = Math.abs(detail.deltaX);\n\t\t\tvar absDeltaY = Math.abs(detail.deltaY);\n\t\t\tif (absDeltaX > absDeltaY + this.options.directionLockThreshold) {\n\t\t\t\tdeltaY = 0;\n\t\t\t} else if (absDeltaY >= absDeltaX + this.options.directionLockThreshold) {\n\t\t\t\tdeltaX = 0;\n\t\t\t}\n\n\t\t\tdeltaX = this.hasHorizontalScroll ? deltaX : 0;\n\t\t\tdeltaY = this.hasVerticalScroll ? deltaY : 0;\n\t\t\tvar newX = this.x + deltaX;\n\t\t\tvar newY = this.y + deltaY;\n\t\t\t// Slow down if outside of the boundaries\n\t\t\tif (newX > 0 || newX < this.maxScrollX) {\n\t\t\t\tnewX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n\t\t\t}\n\t\t\tif (newY > 0 || newY < this.maxScrollY) {\n\t\t\t\tnewY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n\t\t\t}\n\n\t\t\tif (!this.requestAnimationFrame) {\n\t\t\t\tthis._updateTranslate();\n\t\t\t}\n\t\t\tthis.direction = detail.deltaX > 0 ? 'right' : 'left';\n\t\t\tthis.moved = true;\n\t\t\tthis.x = newX;\n\t\t\tthis.y = newY;\n\t\t\t$.trigger(this.scroller, 'scroll', this);\n\t\t},\n\t\t_flick: function(e) {\n\t\t\t//\t\t\tif (!this.moved || this.needReset) {\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tif (!this.moved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t\tvar detail = e.detail;\n\t\t\tthis._clearRequestAnimationFrame();\n\t\t\tif (e.type === 'dragend' && detail.flick) { //dragend\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar newX = Math.round(this.x);\n\t\t\tvar newY = Math.round(this.y);\n\n\t\t\tthis.isInTransition = false;\n\t\t\t// reset if we are outside of the boundaries\n\t\t\tif (this.resetPosition(this.options.bounceTime)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.scrollTo(newX, newY); // ensures that the last position is rounded\n\n\t\t\tif (e.type === 'dragend') { //dragend\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar time = 0;\n\t\t\tvar easing = '';\n\t\t\t// start momentum animation if needed\n\t\t\tif (this.options.momentum && detail.flickTime < 300) {\n\t\t\t\tmomentumX = this.hasHorizontalScroll ? this._momentum(this.x, detail.flickDistanceX, detail.flickTime, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : {\n\t\t\t\t\tdestination: newX,\n\t\t\t\t\tduration: 0\n\t\t\t\t};\n\t\t\t\tmomentumY = this.hasVerticalScroll ? this._momentum(this.y, detail.flickDistanceY, detail.flickTime, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : {\n\t\t\t\t\tdestination: newY,\n\t\t\t\t\tduration: 0\n\t\t\t\t};\n\t\t\t\tnewX = momentumX.destination;\n\t\t\t\tnewY = momentumY.destination;\n\t\t\t\ttime = Math.max(momentumX.duration, momentumY.duration);\n\t\t\t\tthis.isInTransition = true;\n\t\t\t}\n\n\t\t\tif (newX != this.x || newY != this.y) {\n\t\t\t\tif (newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY) {\n\t\t\t\t\teasing = ease.quadratic;\n\t\t\t\t}\n\t\t\t\tthis.scrollTo(newX, newY, time, easing);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t//\t\t\te.stopPropagation();\n\t\t},\n\t\t_end: function(e) {\n\t\t\tthis.needReset = false;\n\t\t\tif ((!this.moved && this.needReset) || e.type === $.EVENT_CANCEL) {\n\t\t\t\tthis.resetPosition();\n\t\t\t}\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target != this.scroller || !this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._transitionTime();\n\t\t\tif (!this.resetPosition(this.options.bounceTime)) {\n\t\t\t\tthis.isInTransition = false;\n\t\t\t\t$.trigger(this.scroller, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t_scrollend: function(e) {\n\t\t\tif ((this.y === 0 && this.maxScrollY === 0) || (Math.abs(this.y) > 0 && this.y <= this.maxScrollY)) {\n\t\t\t\t$.trigger(this.scroller, 'scrollbottom', this);\n\t\t\t}\n\t\t},\n\t\t_resize: function() {\n\t\t\tvar that = this;\n\t\t\tclearTimeout(that.resizeTimeout);\n\t\t\tthat.resizeTimeout = setTimeout(function() {\n\t\t\t\tthat.refresh();\n\t\t\t}, that.options.resizePolling);\n\t\t},\n\t\t_transitionTime: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tthis.scrollerStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\t}\n\t\t\tif (this.options.fixedBadAndorid && !time && $.os.isBadAndroid) {\n\t\t\t\tthis.scrollerStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].transitionTime(time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (time) { //自定义timer，保证webkitTransitionEnd始终触发\n\t\t\t\tthis.transitionTimer && this.transitionTimer.cancel();\n\t\t\t\tthis.transitionTimer = $.later(function() {\n\t\t\t\t\t$.trigger(this.scroller, 'webkitTransitionEnd');\n\t\t\t\t}, time + 100, this);\n\t\t\t}\n\t\t},\n\t\t_transitionTimingFunction: function(easing) {\n\t\t\tthis.scrollerStyle['webkitTransitionTimingFunction'] = easing;\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tthis.parallaxStyle['webkitTransitionDuration'] = easing;\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].transitionTimingFunction(easing);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_translate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t},\n\t\t_clearRequestAnimationFrame: function() {\n\t\t\tif (this.requestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(this.requestAnimationFrame);\n\t\t\t\tthis.requestAnimationFrame = null;\n\t\t\t}\n\t\t},\n\t\t_updateTranslate: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.x !== self.lastX || self.y !== self.lastY) {\n\t\t\t\tself.setTranslate(self.x, self.y);\n\t\t\t}\n\t\t\tself.requestAnimationFrame = requestAnimationFrame(function() {\n\t\t\t\tself._updateTranslate();\n\t\t\t});\n\t\t},\n\t\t_createScrollBar: function(clazz) {\n\t\t\tvar scrollbar = document.createElement('div');\n\t\t\tvar indicator = document.createElement('div');\n\t\t\tscrollbar.className = CLASS_SCROLLBAR + ' ' + clazz;\n\t\t\tindicator.className = CLASS_INDICATOR;\n\t\t\tscrollbar.appendChild(indicator);\n\t\t\tif (clazz === CLASS_SCROLLBAR_VERTICAL) {\n\t\t\t\tthis.scrollbarY = scrollbar;\n\t\t\t\tthis.scrollbarIndicatorY = indicator;\n\t\t\t} else if (clazz === CLASS_SCROLLBAR_HORIZONTAL) {\n\t\t\t\tthis.scrollbarX = scrollbar;\n\t\t\t\tthis.scrollbarIndicatorX = indicator;\n\t\t\t}\n\t\t\tthis.wrapper.appendChild(scrollbar);\n\t\t\treturn scrollbar;\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t_reLayout: function() {\n\t\t\tif (!this.hasHorizontalScroll) {\n\t\t\t\tthis.maxScrollX = 0;\n\t\t\t\tthis.scrollerWidth = this.wrapperWidth;\n\t\t\t}\n\n\t\t\tif (!this.hasVerticalScroll) {\n\t\t\t\tthis.maxScrollY = 0;\n\t\t\t\tthis.scrollerHeight = this.wrapperHeight;\n\t\t\t}\n\n\t\t\tthis.indicators.map(function(indicator) {\n\t\t\t\tindicator.refresh();\n\t\t\t});\n\n\t\t\t//以防slider类嵌套使用\n\t\t\tif (this.options.snap && typeof this.options.snap === 'string') {\n\t\t\t\tvar items = this.scroller.querySelectorAll(this.options.snap);\n\t\t\t\tthis.itemLength = 0;\n\t\t\t\tthis.snaps = [];\n\t\t\t\tfor (var i = 0, len = items.length; i < len; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item.parentNode === this.scroller) {\n\t\t\t\t\t\tthis.itemLength++;\n\t\t\t\t\t\tthis.snaps.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._initSnap(); //需要每次都_initSnap么。其实init的时候执行一次，后续resize的时候执行一次就行了吧.先这么做吧，如果影响性能，再调整\n\t\t\t}\n\t\t},\n\t\t_momentum: function(current, distance, time, lowerMargin, wrapperSize, deceleration) {\n\t\t\tvar speed = parseFloat(Math.abs(distance) / time),\n\t\t\t\tdestination,\n\t\t\t\tduration;\n\n\t\t\tdeceleration = deceleration === undefined ? 0.0006 : deceleration;\n\t\t\tdestination = current + (speed * speed) / (2 * deceleration) * (distance < 0 ? -1 : 1);\n\t\t\tduration = speed / deceleration;\n\t\t\tif (destination < lowerMargin) {\n\t\t\t\tdestination = wrapperSize ? lowerMargin - (wrapperSize / 2.5 * (speed / 8)) : lowerMargin;\n\t\t\t\tdistance = Math.abs(destination - current);\n\t\t\t\tduration = distance / speed;\n\t\t\t} else if (destination > 0) {\n\t\t\t\tdestination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0;\n\t\t\t\tdistance = Math.abs(current) + destination;\n\t\t\t\tduration = distance / speed;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdestination: Math.round(destination),\n\t\t\t\tduration: duration\n\t\t\t};\n\t\t},\n\t\t_getTranslateStr: function(x, y) {\n\t\t\tif (this.options.hardwareAccelerated) {\n\t\t\t\treturn 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ;\n\t\t\t}\n\t\t\treturn 'translate(' + x + 'px,' + y + 'px) ';\n\t\t},\n\t\t//API\n\t\tsetStopped: function(stopped) {\n\t\t\t// this.stopped = !!stopped;\n\n\t\t\t// fixed ios双webview模式下拉刷新\n\t\t\tif(stopped) {\n\t\t\t\tthis.disablePullupToRefresh();\n\t\t\t\tthis.disablePulldownToRefresh();\n\t\t\t} else {\n\t\t\t\tthis.enablePullupToRefresh();\n\t\t\t\tthis.enablePulldownToRefresh();\n\t\t\t}\n\t\t},\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.scrollerStyle['webkitTransform'] = this._getTranslateStr(x, y);\n\t\t\tif (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果\n\t\t\t\tvar parallaxY = y * this.options.parallaxRatio;\n\t\t\t\tvar scale = 1 + parallaxY / ((this.parallaxHeight - parallaxY) / 2);\n\t\t\t\tif (scale > 1) {\n\t\t\t\t\tthis.parallaxImgStyle['opacity'] = 1 - parallaxY / 100 * this.options.parallaxRatio;\n\t\t\t\t\tthis.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -parallaxY) + ' scale(' + scale + ',' + scale + ')';\n\t\t\t\t} else {\n\t\t\t\t\tthis.parallaxImgStyle['opacity'] = 1;\n\t\t\t\t\tthis.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -1) + ' scale(1,1)';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.indicators) {\n\t\t\t\tfor (var i = this.indicators.length; i--;) {\n\t\t\t\t\tthis.indicators[i].updatePosition();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.lastX = this.x;\n\t\t\tthis.lastY = this.y;\n\t\t\t$.trigger(this.scroller, 'scroll', this);\n\t\t},\n\t\treLayout: function() {\n\t\t\tthis.wrapper.offsetHeight;\n\n\t\t\tvar paddingLeft = parseFloat($.getStyles(this.wrapper, 'padding-left')) || 0;\n\t\t\tvar paddingRight = parseFloat($.getStyles(this.wrapper, 'padding-right')) || 0;\n\t\t\tvar paddingTop = parseFloat($.getStyles(this.wrapper, 'padding-top')) || 0;\n\t\t\tvar paddingBottom = parseFloat($.getStyles(this.wrapper, 'padding-bottom')) || 0;\n\n\t\t\tvar clientWidth = this.wrapper.clientWidth;\n\t\t\tvar clientHeight = this.wrapper.clientHeight;\n\n\t\t\tthis.scrollerWidth = this.scroller.offsetWidth;\n\t\t\tthis.scrollerHeight = this.scroller.offsetHeight;\n\n\t\t\tthis.wrapperWidth = clientWidth - paddingLeft - paddingRight;\n\t\t\tthis.wrapperHeight = clientHeight - paddingTop - paddingBottom;\n\n\t\t\tthis.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);\n\t\t\tthis.maxScrollY = Math.min(this.wrapperHeight - this.scrollerHeight, 0);\n\t\t\tthis.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;\n\t\t\tthis.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;\n\t\t\tthis._reLayout();\n\t\t},\n\t\tresetPosition: function(time) {\n\t\t\tvar x = this.x,\n\t\t\t\ty = this.y;\n\n\t\t\ttime = time || 0;\n\t\t\tif (!this.hasHorizontalScroll || this.x > 0) {\n\t\t\t\tx = 0;\n\t\t\t} else if (this.x < this.maxScrollX) {\n\t\t\t\tx = this.maxScrollX;\n\t\t\t}\n\n\t\t\tif (!this.hasVerticalScroll || this.y > 0) {\n\t\t\t\ty = 0;\n\t\t\t} else if (this.y < this.maxScrollY) {\n\t\t\t\ty = this.maxScrollY;\n\t\t\t}\n\n\t\t\tif (x == this.x && y == this.y) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.scrollTo(x, y, time, this.options.scrollEasing);\n\n\t\t\treturn true;\n\t\t},\n\t\t_reInit: function() {\n\t\t\tvar groups = this.wrapper.querySelectorAll('.' + CLASS_SCROLL);\n\t\t\tfor (var i = 0, len = groups.length; i < len; i++) {\n\t\t\t\tif (groups[i].parentNode === this.wrapper) {\n\t\t\t\t\tthis.scroller = groups[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t},\n\t\trefresh: function() {\n\t\t\tthis._reInit();\n\t\t\tthis.reLayout();\n\t\t\t$.trigger(this.scroller, 'refresh', this);\n\t\t\tthis.resetPosition();\n\t\t},\n\t\tscrollTo: function(x, y, time, easing) {\n\t\t\tvar easing = easing || ease.circular;\n\t\t\t//\t\t\tthis.isInTransition = time > 0 && (this.lastX != x || this.lastY != y);\n\t\t\t//暂不严格判断x,y，否则会导致部分版本上不正常触发轮播\n\t\t\tthis.isInTransition = time > 0;\n\t\t\tif (this.isInTransition) {\n\t\t\t\tthis._clearRequestAnimationFrame();\n\t\t\t\tthis._transitionTimingFunction(easing.style);\n\t\t\t\tthis._transitionTime(time);\n\t\t\t\tthis.setTranslate(x, y);\n\t\t\t} else {\n\t\t\t\tthis.setTranslate(x, y);\n\t\t\t}\n\n\t\t},\n\t\tscrollToBottom: function(time, easing) {\n\t\t\ttime = time || this.options.scrollTime;\n\t\t\tthis.scrollTo(0, this.maxScrollY, time, easing);\n\t\t},\n\t\tgotoPage: function(index) {\n\t\t\tthis._gotoPage(index);\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._initEvent(true); //detach\n\t\t\tdelete $.data[this.wrapper.getAttribute('data-scroll')];\n\t\t\tthis.wrapper.setAttribute('data-scroll', '');\n\t\t}\n\t});\n\t//Indicator\n\tvar Indicator = function(scroller, options) {\n\t\tthis.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n\t\tthis.wrapperStyle = this.wrapper.style;\n\t\tthis.indicator = this.wrapper.children[0];\n\t\tthis.indicatorStyle = this.indicator.style;\n\t\tthis.scroller = scroller;\n\n\t\tthis.options = $.extend({\n\t\t\tlistenX: true,\n\t\t\tlistenY: true,\n\t\t\tfade: false,\n\t\t\tspeedRatioX: 0,\n\t\t\tspeedRatioY: 0\n\t\t}, options);\n\n\t\tthis.sizeRatioX = 1;\n\t\tthis.sizeRatioY = 1;\n\t\tthis.maxPosX = 0;\n\t\tthis.maxPosY = 0;\n\n\t\tif (this.options.fade) {\n\t\t\tthis.wrapperStyle['webkitTransform'] = this.scroller.translateZ;\n\t\t\tthis.wrapperStyle['webkitTransitionDuration'] = this.options.fixedBadAndorid && $.os.isBadAndroid ? '0.001s' : '0ms';\n\t\t\tthis.wrapperStyle.opacity = '0';\n\t\t}\n\t}\n\tIndicator.prototype = {\n\t\thandleEvent: function(e) {\n\n\t\t},\n\t\ttransitionTime: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tthis.indicatorStyle['webkitTransitionDuration'] = time + 'ms';\n\t\t\tif (this.scroller.options.fixedBadAndorid && !time && $.os.isBadAndroid) {\n\t\t\t\tthis.indicatorStyle['webkitTransitionDuration'] = '0.001s';\n\t\t\t}\n\t\t},\n\t\ttransitionTimingFunction: function(easing) {\n\t\t\tthis.indicatorStyle['webkitTransitionTimingFunction'] = easing;\n\t\t},\n\t\trefresh: function() {\n\t\t\tthis.transitionTime();\n\n\t\t\tif (this.options.listenX && !this.options.listenY) {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n\t\t\t} else if (this.options.listenY && !this.options.listenX) {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t\t} else {\n\t\t\t\tthis.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n\t\t\t}\n\n\t\t\tthis.wrapper.offsetHeight; // force refresh\n\n\t\t\tif (this.options.listenX) {\n\t\t\t\tthis.wrapperWidth = this.wrapper.clientWidth;\n\t\t\t\tthis.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n\t\t\t\tthis.indicatorStyle.width = this.indicatorWidth + 'px';\n\n\t\t\t\tthis.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n\t\t\t\tthis.minBoundaryX = 0;\n\t\t\t\tthis.maxBoundaryX = this.maxPosX;\n\n\t\t\t\tthis.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));\n\t\t\t}\n\n\t\t\tif (this.options.listenY) {\n\t\t\t\tthis.wrapperHeight = this.wrapper.clientHeight;\n\t\t\t\tthis.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n\t\t\t\tthis.indicatorStyle.height = this.indicatorHeight + 'px';\n\n\t\t\t\tthis.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n\t\t\t\tthis.minBoundaryY = 0;\n\t\t\t\tthis.maxBoundaryY = this.maxPosY;\n\n\t\t\t\tthis.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));\n\t\t\t}\n\n\t\t\tthis.updatePosition();\n\t\t},\n\n\t\tupdatePosition: function() {\n\t\t\tvar x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n\t\t\t\ty = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n\t\t\tif (x < this.minBoundaryX) {\n\t\t\t\tthis.width = Math.max(this.indicatorWidth + x, 8);\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\tx = this.minBoundaryX;\n\t\t\t} else if (x > this.maxBoundaryX) {\n\t\t\t\tthis.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t\tx = this.maxPosX + this.indicatorWidth - this.width;\n\t\t\t} else if (this.width != this.indicatorWidth) {\n\t\t\t\tthis.width = this.indicatorWidth;\n\t\t\t\tthis.indicatorStyle.width = this.width + 'px';\n\t\t\t}\n\n\t\t\tif (y < this.minBoundaryY) {\n\t\t\t\tthis.height = Math.max(this.indicatorHeight + y * 3, 8);\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\ty = this.minBoundaryY;\n\t\t\t} else if (y > this.maxBoundaryY) {\n\t\t\t\tthis.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t\ty = this.maxPosY + this.indicatorHeight - this.height;\n\t\t\t} else if (this.height != this.indicatorHeight) {\n\t\t\t\tthis.height = this.indicatorHeight;\n\t\t\t\tthis.indicatorStyle.height = this.height + 'px';\n\t\t\t}\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\n\t\t\tthis.indicatorStyle['webkitTransform'] = this.scroller._getTranslateStr(x, y);\n\n\t\t},\n\t\tfade: function(val, hold) {\n\t\t\tif (hold && !this.visible) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(this.fadeTimeout);\n\t\t\tthis.fadeTimeout = null;\n\n\t\t\tvar time = val ? 250 : 500,\n\t\t\t\tdelay = val ? 0 : 300;\n\n\t\t\tval = val ? '1' : '0';\n\n\t\t\tthis.wrapperStyle['webkitTransitionDuration'] = time + 'ms';\n\n\t\t\tthis.fadeTimeout = setTimeout((function(val) {\n\t\t\t\tthis.wrapperStyle.opacity = val;\n\t\t\t\tthis.visible = +val;\n\t\t\t}).bind(this, val), delay);\n\t\t}\n\t};\n\n\t$.Scroll = Scroll;\n\n\t$.fn.scroll = function(options) {\n\t\tvar scrollApis = [];\n\t\tthis.each(function() {\n\t\t\tvar scrollApi = null;\n\t\t\tvar self = this;\n\t\t\tvar id = self.getAttribute('data-scroll');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\tvar _options = $.extend({}, options);\n\t\t\t\tif (self.classList.contains($.className('segmented-control'))) {\n\t\t\t\t\t_options = $.extend(_options, {\n\t\t\t\t\t\tscrollY: false,\n\t\t\t\t\t\tscrollX: true,\n\t\t\t\t\t\tindicators: false,\n\t\t\t\t\t\tsnap: $.classSelector('.control-item')\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$.data[id] = scrollApi = new Scroll(self, _options);\n\t\t\t\tself.setAttribute('data-scroll', id);\n\t\t\t} else {\n\t\t\t\tscrollApi = $.data[id];\n\t\t\t}\n\t\t\tscrollApis.push(scrollApi);\n\t\t});\n\t\treturn scrollApis.length === 1 ? scrollApis[0] : scrollApis;\n\t};\n})(mui, window, document);"
  },
  {
    "path": "js/mui.class.scroll.pullrefresh.js",
    "content": "(function($, window, document, undefined) {\n\n    var CLASS_VISIBILITY = $.className('visibility');\n    var CLASS_HIDDEN = $.className('hidden');\n\n    var PullRefresh = $.Scroll.extend($.extend({\n        handleEvent: function(e) {\n            this._super(e);\n            if (e.type === 'scrollbottom') {\n                if (e.target === this.scroller) {\n                    this._scrollbottom();\n                }\n            }\n        },\n        _scrollbottom: function() {\n            if (!this.pulldown && !this.loading) {\n                this.pulldown = false;\n                this._initPullupRefresh();\n                this.pullupLoading();\n            }\n        },\n        _start: function(e) {\n            //仅下拉刷新在start阻止默认事件\n            if (e.touches && e.touches.length && e.touches[0].clientX > 30) {\n                e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n            }\n            if (!this.loading) {\n                this.pulldown = this.pullPocket = this.pullCaption = this.pullLoading = false\n            }\n            this._super(e);\n        },\n        _drag: function(e) {\n            if (this.y >= 0 && this.disablePulldown && e.detail.direction === 'down') { //禁用下拉刷新\n                return;\n            }\n            this._super(e);\n            if (!this.pulldown && !this.loading && this.topPocket && e.detail.direction === 'down' && this.y >= 0) {\n                this._initPulldownRefresh();\n            }\n            if (this.pulldown) {\n                this._setCaption(this.y > this.options.down.height ? this.options.down.contentover : this.options.down.contentdown);\n            }\n        },\n\n        _reLayout: function() {\n            this.hasVerticalScroll = true;\n            this._super();\n        },\n        //API\n        resetPosition: function(time) {\n            if (this.pulldown && !this.disablePulldown) {\n                if (this.y >= this.options.down.height) {\n                    this.pulldownLoading(undefined, time || 0);\n                    return true;\n                } else {\n                    !this.loading && this.topPocket.classList.remove(CLASS_VISIBILITY);\n                }\n            }\n            return this._super(time);\n        },\n        pulldownLoading: function(y, time) {\n            typeof y === 'undefined' && (y = this.options.down.height); //默认高度\n            this.scrollTo(0, y, time, this.options.bounceEasing);\n            if (this.loading) {\n                return;\n            }\n            //\t\t\tif (!this.pulldown) {\n            this._initPulldownRefresh();\n            //\t\t\t}\n            this._setCaption(this.options.down.contentrefresh);\n            this.loading = true;\n            this.indicators.map(function(indicator) {\n                indicator.fade(0);\n            });\n            var callback = this.options.down.callback;\n            callback && callback.call(this);\n        },\n        endPulldownToRefresh: function() {\n            var self = this;\n            if (self.topPocket && self.loading && this.pulldown) {\n                self.scrollTo(0, 0, self.options.bounceTime, self.options.bounceEasing);\n                self.loading = false;\n                self._setCaption(self.options.down.contentdown, true);\n                setTimeout(function() {\n                    self.loading || self.topPocket.classList.remove(CLASS_VISIBILITY);\n                }, 350);\n            }\n        },\n        pullupLoading: function(callback, x, time) {\n            x = x || 0;\n            this.scrollTo(x, this.maxScrollY, time, this.options.bounceEasing);\n            if (this.loading) {\n                return;\n            }\n            this._initPullupRefresh();\n            this._setCaption(this.options.up.contentrefresh);\n            this.indicators.map(function(indicator) {\n                indicator.fade(0);\n            });\n            this.loading = true;\n            callback = callback || this.options.up.callback;\n            callback && callback.call(this);\n        },\n        endPullupToRefresh: function(finished) {\n            var self = this;\n            if (self.bottomPocket) { // && self.loading && !this.pulldown\n                self.loading = false;\n                if (finished) {\n                    this.finished = true;\n                    self._setCaption(self.options.up.contentnomore);\n                    //\t\t\t\t\tself.bottomPocket.classList.remove(CLASS_VISIBILITY);\n                    //\t\t\t\t\tself.bottomPocket.classList.add(CLASS_HIDDEN);\n                    self.wrapper.removeEventListener('scrollbottom', self);\n                } else {\n                    self._setCaption(self.options.up.contentdown);\n                    //\t\t\t\t\tsetTimeout(function() {\n                    self.loading || self.bottomPocket.classList.remove(CLASS_VISIBILITY);\n                    //\t\t\t\t\t}, 300);\n                }\n            }\n        },\n        disablePullupToRefresh: function() {\n            this._initPullupRefresh();\n            this.bottomPocket.className = $.className('pull-bottom-pocket') + ' ' + CLASS_HIDDEN;\n            this.wrapper.removeEventListener('scrollbottom', this);\n        },\n        disablePulldownToRefresh: function() {\n            this._initPulldownRefresh();\n            this.topPocket.className = $.className('pull-top-pocket') + ' ' + CLASS_HIDDEN;\n            this.disablePulldown = true;\n        },\n        enablePulldownToRefresh: function() {\n            this._initPulldownRefresh();\n            this.topPocket.classList.remove(CLASS_HIDDEN);\n            this._setCaption(this.options.down.contentdown);\n            this.disablePulldown = false;\n        },\n        enablePullupToRefresh: function() {\n            this._initPullupRefresh();\n            this.bottomPocket.classList.remove(CLASS_HIDDEN);\n            this._setCaption(this.options.up.contentdown);\n            this.wrapper.addEventListener('scrollbottom', this);\n        },\n        refresh: function(isReset) {\n            if (isReset && this.finished) {\n                this.enablePullupToRefresh();\n                this.finished = false;\n            }\n            this._super();\n        },\n    }, $.PullRefresh));\n    $.fn.pullRefresh = function(options) {\n        if (this.length === 1) {\n            var self = this[0];\n            var pullRefreshApi = null;\n            var id = self.getAttribute('data-pullrefresh');\n            if (!id && typeof options === 'undefined') {\n                return false;\n            }\n            options = options || {};\n            if (!id) {\n                id = ++$.uuid;\n                $.data[id] = pullRefreshApi = new PullRefresh(self, options);\n                self.setAttribute('data-pullrefresh', id);\n            } else {\n                pullRefreshApi = $.data[id];\n            }\n            if (options.down && options.down.auto) { //如果设置了auto，则自动下拉一次\n                pullRefreshApi.pulldownLoading(options.down.autoY);\n            } else if (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n                pullRefreshApi.pullupLoading();\n            }\n            //暂不提供这种调用方式吧\t\t\t\n            //\t\t\tif (typeof options === 'string') {\n            //\t\t\t\tvar methodValue = pullRefreshApi[options].apply(pullRefreshApi, $.slice.call(arguments, 1));\n            //\t\t\t\tif (methodValue !== undefined) {\n            //\t\t\t\t\treturn methodValue;\n            //\t\t\t\t}\n            //\t\t\t}\n            return pullRefreshApi;\n        }\n    };\n})(mui, window, document);"
  },
  {
    "path": "js/mui.class.scroll.slider.js",
    "content": "/**\n * snap 重构\n * @param {Object} $\n * @param {Object} window\n */\n(function($, window) {\n\tvar CLASS_SLIDER = $.className('slider');\n\tvar CLASS_SLIDER_GROUP = $.className('slider-group');\n\tvar CLASS_SLIDER_LOOP = $.className('slider-loop');\n\tvar CLASS_SLIDER_INDICATOR = $.className('slider-indicator');\n\tvar CLASS_ACTION_PREVIOUS = $.className('action-previous');\n\tvar CLASS_ACTION_NEXT = $.className('action-next');\n\tvar CLASS_SLIDER_ITEM = $.className('slider-item');\n\n\tvar CLASS_ACTIVE = $.className('active');\n\n\tvar SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM;\n\tvar SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR;\n\tvar SELECTOR_SLIDER_PROGRESS_BAR = $.classSelector('.slider-progress-bar');\n\n\tvar Slider = $.Slider = $.Scroll.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis._super(element, $.extend(true, {\n\t\t\t\tfingers: 1,\n\t\t\t\tinterval: 0, //设置为0，则不定时轮播\n\t\t\t\tscrollY: false,\n\t\t\t\tscrollX: true,\n\t\t\t\tindicators: false,\n\t\t\t\tscrollTime: 1000,\n\t\t\t\tstartX: false,\n\t\t\t\tslideTime: 0, //滑动动画时间\n\t\t\t\tsnap: SELECTOR_SLIDER_ITEM\n\t\t\t}, options));\n\t\t\tif (this.options.startX) {\n\t\t\t\t//\t\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t_init: function() {\n\t\t\tthis._reInit();\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.scrollerStyle = this.scroller.style;\n\t\t\t\tthis.progressBar = this.wrapper.querySelector(SELECTOR_SLIDER_PROGRESS_BAR);\n\t\t\t\tif (this.progressBar) {\n\t\t\t\t\tthis.progressBarWidth = this.progressBar.offsetWidth;\n\t\t\t\t\tthis.progressBarStyle = this.progressBar.style;\n\t\t\t\t}\n\t\t\t\t//忘记这个代码是干什么的了？\n\t\t\t\t//\t\t\t\tthis.x = this._getScroll();\n\t\t\t\t//\t\t\t\tif (this.options.startX === false) {\n\t\t\t\t//\t\t\t\t\tthis.options.startX = this.x;\n\t\t\t\t//\t\t\t\t}\n\t\t\t\t//根据active修正startX\n\n\t\t\t\tthis._super();\n\t\t\t\tthis._initTimer();\n\t\t\t}\n\t\t},\n\t\t_triggerSlide: function() {\n\t\t\tvar self = this;\n\t\t\tself.isInTransition = false;\n\t\t\tvar page = self.currentPage;\n\t\t\tself.slideNumber = self._fixedSlideNumber();\n\t\t\tif (self.loop) {\n\t\t\t\tif (self.slideNumber === 0) {\n\t\t\t\t\tself.setTranslate(self.pages[1][0].x, 0);\n\t\t\t\t} else if (self.slideNumber === self.itemLength - 3) {\n\t\t\t\t\tself.setTranslate(self.pages[self.itemLength - 2][0].x, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self.lastSlideNumber != self.slideNumber) {\n\t\t\t\tself.lastSlideNumber = self.slideNumber;\n\t\t\t\tself.lastPage = self.currentPage;\n\t\t\t\t$.trigger(self.wrapper, 'slide', {\n\t\t\t\t\tslideNumber: self.slideNumber\n\t\t\t\t});\n\t\t\t}\n\t\t\tself._initTimer();\n\t\t},\n\t\t_handleSlide: function(e) {\n\t\t\tvar self = this;\n\t\t\tif (e.target !== self.wrapper) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tdetail.slideNumber = detail.slideNumber || 0;\n\t\t\tvar temps = self.scroller.querySelectorAll(SELECTOR_SLIDER_ITEM);\n\t\t\tvar items = [];\n\t\t\tfor (var i = 0, len = temps.length; i < len; i++) {\n\t\t\t\tvar item = temps[i];\n\t\t\t\tif (item.parentNode === self.scroller) {\n\t\t\t\t\titems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar _slideNumber = detail.slideNumber;\n\t\t\tif (self.loop) {\n\t\t\t\t_slideNumber += 1;\n\t\t\t}\n\t\t\tif (!self.wrapper.classList.contains($.className('segmented-control'))) {\n\t\t\t\tfor (var i = 0, len = items.length; i < len; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tif (item.parentNode === self.scroller) {\n\t\t\t\t\t\tif (i === _slideNumber) {\n\t\t\t\t\t\t\titem.classList.add(CLASS_ACTIVE);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.classList.remove(CLASS_ACTIVE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar indicatorWrap = self.wrapper.querySelector($.classSelector('.slider-indicator'));\n\t\t\tif (indicatorWrap) {\n\t\t\t\tif (indicatorWrap.getAttribute('data-scroll')) { //scroll\n\t\t\t\t\t$(indicatorWrap).scroll().gotoPage(detail.slideNumber);\n\t\t\t\t}\n\t\t\t\tvar indicators = indicatorWrap.querySelectorAll($.classSelector('.indicator'));\n\t\t\t\tif (indicators.length > 0) { //图片轮播\n\t\t\t\t\tfor (var i = 0, len = indicators.length; i < len; i++) {\n\t\t\t\t\t\tindicators[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar number = indicatorWrap.querySelector($.classSelector('.number span'));\n\t\t\t\t\tif (number) { //图文表格\n\t\t\t\t\t\tnumber.innerText = (detail.slideNumber + 1);\n\t\t\t\t\t} else { //segmented controls\n\t\t\t\t\t\tvar controlItems = indicatorWrap.querySelectorAll($.classSelector('.control-item'));\n\t\t\t\t\t\tfor (var i = 0, len = controlItems.length; i < len; i++) {\n\t\t\t\t\t\t\tcontrolItems[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t},\n\t\t_handleTabShow: function(e) {\n\t\t\tvar self = this;\n\t\t\tself.gotoItem((e.detail.tabNumber || 0), self.options.slideTime);\n\t\t},\n\t\t_handleIndicatorTap: function(event) {\n\t\t\tvar self = this;\n\t\t\tvar target = event.target;\n\t\t\tif (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) {\n\t\t\t\tself[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem']();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\t_initEvent: function(detach) {\n\t\t\tvar self = this;\n\t\t\tself._super(detach);\n\t\t\tvar action = detach ? 'removeEventListener' : 'addEventListener';\n\t\t\tself.wrapper[action]('slide', this);\n\t\t\tself.wrapper[action]($.eventName('shown', 'tab'), this);\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tthis._super(e);\n\t\t\tswitch (e.type) {\n\t\t\t\tcase 'slide':\n\t\t\t\t\tthis._handleSlide(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.eventName('shown', 'tab'):\n\t\t\t\t\tif (~this.snaps.indexOf(e.target)) { //避免嵌套监听错误的tab show\n\t\t\t\t\t\tthis._handleTabShow(e);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t_scrollend: function(e) {\n\t\t\tthis._super(e);\n\t\t\tthis._triggerSlide(e);\n\t\t},\n\t\t_drag: function(e) {\n\t\t\tthis._super(e);\n\t\t\tvar direction = e.detail.direction;\n\t\t\tif (direction === 'left' || direction === 'right') {\n\t\t\t\t//拖拽期间取消定时\n\t\t\t\tvar slidershowTimer = this.wrapper.getAttribute('data-slidershowTimer');\n\t\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\t_initTimer: function() {\n\t\t\tvar self = this;\n\t\t\tvar slider = self.wrapper;\n\t\t\tvar interval = self.options.interval;\n\t\t\tvar slidershowTimer = slider.getAttribute('data-slidershowTimer');\n\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\t\t\tif (interval) {\n\t\t\t\tslidershowTimer = window.setTimeout(function() {\n\t\t\t\t\tif (!slider) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t//仅slider显示状态进行自动轮播\n\t\t\t\t\tif (!!(slider.offsetWidth || slider.offsetHeight)) {\n\t\t\t\t\t\tself.nextItem(true);\n\t\t\t\t\t\t//下一个\n\t\t\t\t\t}\n\t\t\t\t\tself._initTimer();\n\t\t\t\t}, interval);\n\t\t\t\tslider.setAttribute('data-slidershowTimer', slidershowTimer);\n\t\t\t}\n\t\t},\n\n\t\t_fixedSlideNumber: function(page) {\n\t\t\tpage = page || this.currentPage;\n\t\t\tvar slideNumber = page.pageX;\n\t\t\tif (this.loop) {\n\t\t\t\tif (page.pageX === 0) {\n\t\t\t\t\tslideNumber = this.itemLength - 3;\n\t\t\t\t} else if (page.pageX === (this.itemLength - 1)) {\n\t\t\t\t\tslideNumber = 0;\n\t\t\t\t} else {\n\t\t\t\t\tslideNumber = page.pageX - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn slideNumber;\n\t\t},\n\t\t_reLayout: function() {\n\t\t\tthis.hasHorizontalScroll = true;\n\t\t\tthis.loop = this.scroller.classList.contains(CLASS_SLIDER_LOOP);\n\t\t\tthis._super();\n\t\t},\n\t\t_getScroll: function() {\n\t\t\tvar result = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));\n\t\t\treturn result ? result.x : 0;\n\t\t},\n\t\t_transitionEnd: function(e) {\n\t\t\tif (e.target !== this.scroller || !this.isInTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._transitionTime();\n\t\t\tthis.isInTransition = false;\n\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t},\n\t\t_flick: function(e) {\n\t\t\tif (!this.moved) { //无moved\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar detail = e.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tthis._clearRequestAnimationFrame();\n\t\t\tthis.isInTransition = true;\n\t\t\t//\t\t\tif (direction === 'up' || direction === 'down') {\n\t\t\t//\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t//\t\t\t\treturn;\n\t\t\t//\t\t\t}\n\t\t\tif (e.type === 'flick') {\n\t\t\t\tif (detail.deltaTime < 200) { //flick，太容易触发，额外校验一下deltaTime\n\t\t\t\t\tthis.x = this._getPage((this.slideNumber + (direction === 'right' ? -1 : 1)), true).x;\n\t\t\t\t}\n\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t} else if (e.type === 'dragend' && !detail.flick) {\n\t\t\t\tthis.resetPosition(this.options.bounceTime);\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t},\n\t\t_initSnap: function() {\n\t\t\tthis.scrollerWidth = this.itemLength * this.scrollerWidth;\n\t\t\tthis.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);\n\t\t\tthis._super();\n\t\t\tif (!this.currentPage.x) {\n\t\t\t\t//当slider处于隐藏状态时，导致snap计算是错误的，临时先这么判断一下，后续要考虑解决所有scroll在隐藏状态下初始化属性不正确的问题\n\t\t\t\tvar currentPage = this.pages[this.loop ? 1 : 0];\n\t\t\t\tcurrentPage = currentPage || this.pages[0];\n\t\t\t\tif (!currentPage) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.currentPage = currentPage[0];\n\t\t\t\tthis.slideNumber = 0;\n\t\t\t\tthis.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? 0 : this.lastSlideNumber;\n\t\t\t} else {\n\t\t\t\tthis.slideNumber = this._fixedSlideNumber();\n\t\t\t\tthis.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? this.slideNumber : this.lastSlideNumber;\n\t\t\t}\n\t\t\tthis.options.startX = this.currentPage.x || 0;\n\t\t},\n\t\t_getSnapX: function(offsetLeft) {\n\t\t\treturn Math.max(-offsetLeft, this.maxScrollX);\n\t\t},\n\t\t_getPage: function(slideNumber, isFlick) {\n\t\t\tif (this.loop) {\n\t\t\t\tif (slideNumber > (this.itemLength - (isFlick ? 2 : 3))) {\n\t\t\t\t\tslideNumber = 1;\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (slideNumber < (isFlick ? -1 : 0)) {\n\t\t\t\t\tslideNumber = this.itemLength - 2;\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else {\n\t\t\t\t\tslideNumber += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isFlick) {\n\t\t\t\t\tif (slideNumber > (this.itemLength - 1)) {\n\t\t\t\t\t\tslideNumber = 0;\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t} else if (slideNumber < 0) {\n\t\t\t\t\t\tslideNumber = this.itemLength - 1;\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tslideNumber = Math.min(Math.max(0, slideNumber), this.itemLength - 1);\n\t\t\t}\n\t\t\treturn this.pages[slideNumber][0];\n\t\t},\n\t\t_gotoItem: function(slideNumber, time) {\n\t\t\tthis.currentPage = this._getPage(slideNumber, true); //此处传true。可保证程序切换时，动画与人手操作一致(第一张，最后一张的切换动画)\n\t\t\tthis.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);\n\t\t\tif (time === 0) {\n\t\t\t\t$.trigger(this.wrapper, 'scrollend', this);\n\t\t\t}\n\t\t},\n\t\t//API\n\t\tsetTranslate: function(x, y) {\n\t\t\tthis._super(x, y);\n\t\t\tvar progressBar = this.progressBar;\n\t\t\tif (progressBar) {\n\t\t\t\tthis.progressBarStyle.webkitTransform = this._getTranslateStr((-x * (this.progressBarWidth / this.wrapperWidth)), 0);\n\t\t\t}\n\t\t},\n\t\tresetPosition: function(time) {\n\t\t\ttime = time || 0;\n\t\t\tif (this.x > 0) {\n\t\t\t\tthis.x = 0;\n\t\t\t} else if (this.x < this.maxScrollX) {\n\t\t\t\tthis.x = this.maxScrollX;\n\t\t\t}\n\t\t\tthis.currentPage = this._nearestSnap(this.x);\n\t\t\tthis.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);\n\t\t\treturn true;\n\t\t},\n\t\tgotoItem: function(slideNumber, time) {\n\t\t\tthis._gotoItem(slideNumber, typeof time === 'undefined' ? this.options.scrollTime : time);\n\t\t},\n\t\tnextItem: function() {\n\t\t\tthis._gotoItem(this.slideNumber + 1, this.options.scrollTime);\n\t\t},\n\t\tprevItem: function() {\n\t\t\tthis._gotoItem(this.slideNumber - 1, this.options.scrollTime);\n\t\t},\n\t\tgetSlideNumber: function() {\n\t\t\treturn this.slideNumber || 0;\n\t\t},\n\t\t_reInit: function() {\n\t\t\tvar groups = this.wrapper.querySelectorAll('.' + CLASS_SLIDER_GROUP);\n\t\t\tfor (var i = 0, len = groups.length; i < len; i++) {\n\t\t\t\tif (groups[i].parentNode === this.wrapper) {\n\t\t\t\t\tthis.scroller = groups[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.scrollerStyle = this.scroller && this.scroller.style;\n\t\t\tif (this.progressBar) {\n\t\t\t\tthis.progressBarWidth = this.progressBar.offsetWidth;\n\t\t\t\tthis.progressBarStyle = this.progressBar.style;\n\t\t\t}\n\t\t},\n\t\trefresh: function(options) {\n\t\t\tif (options) {\n\t\t\t\t$.extend(this.options, options);\n\t\t\t\tthis._super();\n\t\t\t\tthis._initTimer();\n\t\t\t} else {\n\t\t\t\tthis._super();\n\t\t\t}\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis._initEvent(true); //detach\n\t\t\tdelete $.data[this.wrapper.getAttribute('data-slider')];\n\t\t\tthis.wrapper.setAttribute('data-slider', '');\n\t\t}\n\t});\n\t$.fn.slider = function(options) {\n\t\tvar slider = null;\n\t\tthis.each(function() {\n\t\t\tvar sliderElement = this;\n\t\t\tif (!this.classList.contains(CLASS_SLIDER)) {\n\t\t\t\tsliderElement = this.querySelector('.' + CLASS_SLIDER);\n\t\t\t}\n\t\t\tif (sliderElement && sliderElement.querySelector(SELECTOR_SLIDER_ITEM)) {\n\t\t\t\tvar id = sliderElement.getAttribute('data-slider');\n\t\t\t\tif (!id) {\n\t\t\t\t\tid = ++$.uuid;\n\t\t\t\t\t$.data[id] = slider = new Slider(sliderElement, options);\n\t\t\t\t\tsliderElement.setAttribute('data-slider', id);\n\t\t\t\t} else {\n\t\t\t\t\tslider = $.data[id];\n\t\t\t\t\tif (slider && options) {\n\t\t\t\t\t\tslider.refresh(options);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn slider;\n\t};\n\t$.ready(function() {\n\t\t//\t\tsetTimeout(function() {\n\t\t$($.classSelector('.slider')).slider();\n\t\t$($.classSelector('.scroll-wrapper.slider-indicator.segmented-control')).scroll({\n\t\t\tscrollY: false,\n\t\t\tscrollX: true,\n\t\t\tindicators: false,\n\t\t\tsnap: $.classSelector('.control-item')\n\t\t});\n\t\t//\t\t}, 500); //临时处理slider宽度计算不正确的问题(初步确认是scrollbar导致的)\n\n\t});\n})(mui, window);"
  },
  {
    "path": "js/mui.detect.5+.js",
    "content": "/**\n * $.os.plus\n * @param {type} $\n * @returns {undefined}\n */\n(function($, document) {\n\tfunction detect(ua) {\n\t\tthis.os = this.os || {};\n\t\tvar plus = ua.match(/Html5Plus/i); //TODO 5\\+Browser?\n\t\tif (plus) {\n\t\t\tthis.os.plus = true;\n\t\t\t$(function() {\n\t\t\t\tdocument.body.classList.add($.className('plus'));\n\t\t\t});\n\t\t\tif (ua.match(/StreamApp/i)) { //TODO 最好有流应用自己的标识\n\t\t\t\tthis.os.stream = true;\n\t\t\t\t$(function() {\n\t\t\t\t\tdocument.body.classList.add($.className('plus-stream'));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tdetect.call($, navigator.userAgent);\n})(mui, document);"
  },
  {
    "path": "js/mui.detect.js",
    "content": "/**\n * $.os\n * @param {type} $\n * @returns {undefined}\n */\n(function($, window) {\n\tfunction detect(ua) {\n\t\tthis.os = {};\n\t\tvar funcs = [\n\n\t\t\tfunction() { //wechat\n\t\t\t\tvar wechat = ua.match(/(MicroMessenger)\\/([\\d\\.]+)/i);\n\t\t\t\tif (wechat) { //wechat\n\t\t\t\t\tthis.os.wechat = {\n\t\t\t\t\t\tversion: wechat[2].replace(/_/g, '.')\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tfunction() { //android\n\t\t\t\tvar android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n\t\t\t\tif (android) {\n\t\t\t\t\tthis.os.android = true;\n\t\t\t\t\tthis.os.version = android[2];\n\n\t\t\t\t\tthis.os.isBadAndroid = !(/Chrome\\/\\d/.test(window.navigator.appVersion));\n\t\t\t\t}\n\t\t\t\treturn this.os.android === true;\n\t\t\t},\n\t\t\tfunction() { //ios\n\t\t\t\tvar iphone = ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n\t\t\t\tif (iphone) { //iphone\n\t\t\t\t\tthis.os.ios = this.os.iphone = true;\n\t\t\t\t\tthis.os.version = iphone[2].replace(/_/g, '.');\n\t\t\t\t} else {\n\t\t\t\t\tvar ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n\t\t\t\t\tif (ipad) { //ipad\n\t\t\t\t\t\tthis.os.ios = this.os.ipad = true;\n\t\t\t\t\t\tthis.os.version = ipad[2].replace(/_/g, '.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.os.ios === true;\n\t\t\t}\n\t\t];\n\t\t[].every.call(funcs, function(func) {\n\t\t\treturn !func.call($);\n\t\t});\n\t}\n\tdetect.call($, navigator.userAgent);\n})(mui, window);"
  },
  {
    "path": "js/mui.dialog.alert.js",
    "content": "(function($, window) {\n\t/**\n\t * 警告消息框\n\t */\n\t$.alert = function(message, title, btnValue, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tif (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnValue = '确定';\n\t\t\t\t} else if (typeof btnValue === 'function') {\n\t\t\t\t\tcallback = btnValue;\n\t\t\t\t\tbtnValue = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.alert(message, callback, title, btnValue);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//TODO H5版本\n\t\t\twindow.alert(message);\n\t\t}\n\t};\n\n})(mui, window);"
  },
  {
    "path": "js/mui.dialog.confirm.js",
    "content": "(function($, window) {\n\t/**\n\t * 确认消息框\n\t */\n\t$.confirm = function(message, title, btnArray, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tif (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof btnArray === 'function') {\n\t\t\t\t\tcallback = btnArray;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.confirm(message, callback, title, btnArray);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//H5版本，0为确认，1为取消\n\t\t\tif (window.confirm(message)) {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 0\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n})(mui, window);"
  },
  {
    "path": "js/mui.dialog.prompt.js",
    "content": "(function($, window) {\n\t/**\n\t * 输入对话框\n\t */\n\t$.prompt = function(text, defaultText, title, btnArray, callback) {\n\t\tif ($.os.plus) {\n\t\t\tif (typeof message === 'undefined') {\n\t\t\t\treturn;\n\t\t\t} else {\n\n\t\t\t\tif (typeof defaultText === 'function') {\n\t\t\t\t\tcallback = defaultText;\n\t\t\t\t\tdefaultText = null;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof title === 'function') {\n\t\t\t\t\tcallback = title;\n\t\t\t\t\ttitle = null;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t} else if (typeof btnArray === 'function') {\n\t\t\t\t\tcallback = btnArray;\n\t\t\t\t\tbtnArray = null;\n\t\t\t\t}\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\tplus.nativeUI.prompt(text, callback, title, defaultText, btnArray);\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\t//H5版本(确认index为0，取消index为1)\n\t\t\tvar result = window.prompt(text);\n\t\t\tif (result) {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tvalue: result\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcallback({\n\t\t\t\t\tindex: 1,\n\t\t\t\t\tvalue: ''\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n})(mui, window);"
  },
  {
    "path": "js/mui.dialog.toast.js",
    "content": "(function($, window) {\n\tvar CLASS_ACTIVE = $.className('active');\n\t/**\n\t * 自动消失提示框\n\t */\n\t$.toast = function(message,options) {\n\t\tvar durations = {\n\t\t    'long': 3500,\n\t\t    'short': 2000\n\t\t};\n\n\t\t//计算显示时间\n\t\t options = $.extend({\n\t        duration: 'short'\n\t    }, options || {});\n\n\n\t\tif ($.os.plus && options.type !== 'div') {\n\t\t\t//默认显示在底部；\n\t\t\t$.plusReady(function() {\n\t\t\t\tplus.nativeUI.toast(message, {\n\t\t\t\t\tverticalAlign: 'bottom',\n\t\t\t\t\tduration:options.duration\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tif (typeof options.duration === 'number') {\n\t\t        duration = options.duration>0 ? options.duration:durations['short'];\n\t\t    } else {\n\t\t        duration = durations[options.duration];\n\t\t    }\n\t\t    if (!duration) {\n\t\t        duration = durations['short'];\n\t\t    }\n\t\t\tvar toast = document.createElement('div');\n\t\t\ttoast.classList.add($.className('toast-container'));\n\t\t\ttoast.innerHTML = '<div class=\"' + $.className('toast-message') + '\">' + message + '</div>';\n\t\t\ttoast.addEventListener('webkitTransitionEnd', function() {\n\t\t\t\tif (!toast.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\ttoast.parentNode.removeChild(toast);\n\t\t\t\t\ttoast = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t//点击则自动消失\n\t\t\ttoast.addEventListener('click', function() {\n\t\t        toast.parentNode.removeChild(toast);\n\t\t        toast = null;\n\t\t    });\n\t\t\tdocument.body.appendChild(toast);\n\t\t\ttoast.offsetHeight;\n\t\t\ttoast.classList.add(CLASS_ACTIVE);\n\t\t\tsetTimeout(function() {\n\t\t\t\ttoast && toast.classList.remove(CLASS_ACTIVE);\n\t\t\t}, duration);\n\t\t\t\n\t\t\treturn {\n\t\t        isVisible: function() {return !!toast;}\n\t\t    }\n\t\t}   \n\t};\n\n})(mui, window);"
  },
  {
    "path": "js/mui.event.js",
    "content": "/**\n * 仅提供简单的on，off(仅支持事件委托，不支持当前元素绑定，当前元素绑定请直接使用addEventListener,removeEventListener)\n * @param {Object} $\n */\n(function($) {\n\tif ('ontouchstart' in window) {\n\t\t$.isTouchable = true;\n\t\t$.EVENT_START = 'touchstart';\n\t\t$.EVENT_MOVE = 'touchmove';\n\t\t$.EVENT_END = 'touchend';\n\t} else {\n\t\t$.isTouchable = false;\n\t\t$.EVENT_START = 'mousedown';\n\t\t$.EVENT_MOVE = 'mousemove';\n\t\t$.EVENT_END = 'mouseup';\n\t}\n\t$.EVENT_CANCEL = 'touchcancel';\n\t$.EVENT_CLICK = 'click';\n\n\tvar _mid = 1;\n\tvar delegates = {};\n\t//需要wrap的函数\n\tvar eventMethods = {\n\t\tpreventDefault: 'isDefaultPrevented',\n\t\tstopImmediatePropagation: 'isImmediatePropagationStopped',\n\t\tstopPropagation: 'isPropagationStopped'\n\t};\n\t//默认true返回函数\n\tvar returnTrue = function() {\n\t\treturn true\n\t};\n\t//默认false返回函数\n\tvar returnFalse = function() {\n\t\treturn false\n\t};\n\t//wrap浏览器事件\n\tvar compatible = function(event, target) {\n\t\tif (!event.detail) {\n\t\t\tevent.detail = {\n\t\t\t\tcurrentTarget: target\n\t\t\t};\n\t\t} else {\n\t\t\tevent.detail.currentTarget = target;\n\t\t}\n\t\t$.each(eventMethods, function(name, predicate) {\n\t\t\tvar sourceMethod = event[name];\n\t\t\tevent[name] = function() {\n\t\t\t\tthis[predicate] = returnTrue;\n\t\t\t\treturn sourceMethod && sourceMethod.apply(event, arguments)\n\t\t\t}\n\t\t\tevent[predicate] = returnFalse;\n\t\t}, true);\n\t\treturn event;\n\t};\n\t//简单的wrap对象_mid\n\tvar mid = function(obj) {\n\t\treturn obj && (obj._mid || (obj._mid = _mid++));\n\t};\n\t//事件委托对象绑定的事件回调列表\n\tvar delegateFns = {};\n\t//返回事件委托的wrap事件回调\n\tvar delegateFn = function(element, event, selector, callback) {\n\t\treturn function(e) {\n\t\t\t//same event\n\t\t\tvar callbackObjs = delegates[element._mid][event];\n\t\t\tvar handlerQueue = [];\n\t\t\tvar target = e.target;\n\t\t\tvar selectorAlls = {};\n\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\tif (target === element) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains($.className('disabled')))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar matches = {};\n\t\t\t\t$.each(callbackObjs, function(selector, callbacks) { //same selector\n\t\t\t\t\tselectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element));\n\t\t\t\t\tif (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) {\n\t\t\t\t\t\tif (!matches[selector]) {\n\t\t\t\t\t\t\tmatches[selector] = callbacks;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t\tif (!$.isEmptyObject(matches)) {\n\t\t\t\t\thandlerQueue.push({\n\t\t\t\t\t\telement: target,\n\t\t\t\t\t\thandlers: matches\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tselectorAlls = null;\n\t\t\te = compatible(e); //compatible event\n\t\t\t$.each(handlerQueue, function(index, handler) {\n\t\t\t\ttarget = handler.element;\n\t\t\t\tvar tagName = target.tagName;\n\t\t\t\tif (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.detail && e.detail.gesture && e.detail.gesture.preventDefault();\n\t\t\t\t}\n\t\t\t\t$.each(handler.handlers, function(index, handler) {\n\t\t\t\t\t$.each(handler, function(index, callback) {\n\t\t\t\t\t\tif (callback.call(target, e) === false) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, true);\n\t\t\t\t}, true)\n\t\t\t\tif (e.isPropagationStopped()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t};\n\t};\n\tvar findDelegateFn = function(element, event) {\n\t\tvar delegateCallbacks = delegateFns[mid(element)];\n\t\tvar result = [];\n\t\tif (delegateCallbacks) {\n\t\t\tresult = [];\n\t\t\tif (event) {\n\t\t\t\tvar filterFn = function(fn) {\n\t\t\t\t\treturn fn.type === event;\n\t\t\t\t}\n\t\t\t\treturn delegateCallbacks.filter(filterFn);\n\t\t\t} else {\n\t\t\t\tresult = delegateCallbacks;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\tvar preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;\n\t/**\n\t * mui delegate events\n\t * @param {type} event\n\t * @param {type} selector\n\t * @param {type} callback\n\t * @returns {undefined}\n\t */\n\t$.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用，类似mouse,focus之类暂不封装支持\n\t\treturn this.each(function() {\n\t\t\tvar element = this;\n\t\t\tmid(element);\n\t\t\tmid(callback);\n\t\t\tvar isAddEventListener = false;\n\t\t\tvar delegateEvents = delegates[element._mid] || (delegates[element._mid] = {});\n\t\t\tvar delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {}));\n\t\t\tif ($.isEmptyObject(delegateCallbackObjs)) {\n\t\t\t\tisAddEventListener = true;\n\t\t\t}\n\t\t\tvar delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []);\n\t\t\tdelegateCallbacks.push(callback);\n\t\t\tif (isAddEventListener) {\n\t\t\t\tvar delegateFnArray = delegateFns[mid(element)];\n\t\t\t\tif (!delegateFnArray) {\n\t\t\t\t\tdelegateFnArray = [];\n\t\t\t\t}\n\t\t\t\tvar delegateCallback = delegateFn(element, event, selector, callback);\n\t\t\t\tdelegateFnArray.push(delegateCallback);\n\t\t\t\tdelegateCallback.i = delegateFnArray.length - 1;\n\t\t\t\tdelegateCallback.type = event;\n\t\t\t\tdelegateFns[mid(element)] = delegateFnArray;\n\t\t\t\telement.addEventListener(event, delegateCallback);\n\t\t\t\tif (event === 'tap') { //TODO 需要找个更好的解决方案\n\t\t\t\t\telement.addEventListener('click', function(e) {\n\t\t\t\t\t\tif (e.target) {\n\t\t\t\t\t\t\tvar tagName = e.target.tagName;\n\t\t\t\t\t\t\tif (!preventDefaultException.test(tagName)) {\n\t\t\t\t\t\t\t\tif (tagName === 'A') {\n\t\t\t\t\t\t\t\t\tvar href = e.target.href;\n\t\t\t\t\t\t\t\t\tif (!(href && ~href.indexOf('tel:'))) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t$.fn.off = function(event, selector, callback) {\n\t\treturn this.each(function() {\n\t\t\tvar _mid = mid(this);\n\t\t\tif (!event) { //mui(selector).off();\n\t\t\t\tdelegates[_mid] && delete delegates[_mid];\n\t\t\t} else if (!selector) { //mui(selector).off(event);\n\t\t\t\tdelegates[_mid] && delete delegates[_mid][event];\n\t\t\t} else if (!callback) { //mui(selector).off(event,selector);\n\t\t\t\tdelegates[_mid] && delegates[_mid][event] && delete delegates[_mid][event][selector];\n\t\t\t} else { //mui(selector).off(event,selector,callback);\n\t\t\t\tvar delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector];\n\t\t\t\t$.each(delegateCallbacks, function(index, delegateCallback) {\n\t\t\t\t\tif (mid(delegateCallback) === mid(callback)) {\n\t\t\t\t\t\tdelegateCallbacks.splice(index, 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\tif (delegates[_mid]) {\n\t\t\t\t//如果off掉了所有当前element的指定的event事件，则remove掉当前element的delegate回调\n\t\t\t\tif ((!delegates[_mid][event] || $.isEmptyObject(delegates[_mid][event]))) {\n\t\t\t\t\tfindDelegateFn(this, event).forEach(function(fn) {\n\t\t\t\t\t\tthis.removeEventListener(fn.type, fn);\n\t\t\t\t\t\tdelete delegateFns[_mid][fn.i];\n\t\t\t\t\t}.bind(this));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//如果delegates[_mid]已不存在，删除所有\n\t\t\t\tfindDelegateFn(this).forEach(function(fn) {\n\t\t\t\t\tthis.removeEventListener(fn.type, fn);\n\t\t\t\t\tdelete delegateFns[_mid][fn.i];\n\t\t\t\t}.bind(this));\n\t\t\t}\n\t\t});\n\n\t};\n})(mui);"
  },
  {
    "path": "js/mui.fixed.animation.js",
    "content": "/**\n * mui fixed requestAnimationFrame\n * @param {type} window\n * @returns {undefined}\n */\n(function(window) {\n\tif (!window.requestAnimationFrame) {\n\t\tvar lastTime = 0;\n\t\twindow.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) {\n\t\t\tvar currTime = new Date().getTime();\n\t\t\tvar timeToCall = Math.max(0, 16.7 - (currTime - lastTime));\n\t\t\tvar id = window.setTimeout(function() {\n\t\t\t\tcallback(currTime + timeToCall);\n\t\t\t}, timeToCall);\n\t\t\tlastTime = currTime + timeToCall;\n\t\t\treturn id;\n\t\t};\n\t\twindow.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) {\n\t\t\tclearTimeout(id);\n\t\t};\n\t};\n}(window));"
  },
  {
    "path": "js/mui.fixed.bind.js",
    "content": "/*\n\tA shim for non ES5 supporting browsers.\n\tAdds function bind to Function prototype, so that you can do partial application.\n\tWorks 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.\n*/\n\nFunction.prototype.bind = Function.prototype.bind || function(to) {\n\t// Make an array of our arguments, starting from second argument\n\tvar partial = Array.prototype.splice.call(arguments, 1),\n\t\t// We'll need the original function.\n\t\tfn = this;\n\tvar bound = function() {\n\t\t\t// Join the already applied arguments to the now called ones (after converting to an array again).\n\t\t\tvar args = partial.concat(Array.prototype.splice.call(arguments, 0));\n\t\t\t// If not being called as a constructor\n\t\t\tif (!(this instanceof bound)) {\n\t\t\t\t// return the result of the function called bound to target and partially applied.\n\t\t\t\treturn fn.apply(to, args);\n\t\t\t}\n\t\t\t// If being called as a constructor, apply the function bound to self.\n\t\t\tfn.apply(this, args);\n\t\t}\n\t\t// Attach the prototype of the function to our newly created function.\n\tbound.prototype = fn.prototype;\n\treturn bound;\n};"
  },
  {
    "path": "js/mui.fixed.classlist.js",
    "content": "/**\n * mui fixed classList\n * @param {type} document\n * @returns {undefined}\n */\n(function(document) {\n    if (!(\"classList\" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {\n\n        Object.defineProperty(HTMLElement.prototype, 'classList', {\n            get: function() {\n                var self = this;\n                function update(fn) {\n                    return function(value) {\n                        var classes = self.className.split(/\\s+/),\n                                index = classes.indexOf(value);\n\n                        fn(classes, index, value);\n                        self.className = classes.join(\" \");\n                    };\n                }\n\n                var ret = {\n                    add: update(function(classes, index, value) {\n                        ~index || classes.push(value);\n                    }),\n                    remove: update(function(classes, index) {\n                        ~index && classes.splice(index, 1);\n                    }),\n                    toggle: update(function(classes, index, value) {\n                        ~index ? classes.splice(index, 1) : classes.push(value);\n                    }),\n                    contains: function(value) {\n                        return !!~self.className.split(/\\s+/).indexOf(value);\n                    },\n                    item: function(i) {\n                        return self.className.split(/\\s+/)[i] || null;\n                    }\n                };\n\n                Object.defineProperty(ret, 'length', {\n                    get: function() {\n                        return self.className.split(/\\s+/).length;\n                    }\n                });\n\n                return ret;\n            }\n        });\n    }\n})(document);\n"
  },
  {
    "path": "js/mui.fixed.fastclick.js",
    "content": "/**\n * fastclick(only for radio,checkbox)\n */\n(function($, window, name) {\n\tif (!$.os.android && !$.os.ios) { //目前仅识别android和ios\n\t\treturn;\n\t}\n\tif (window.FastClick) {\n\t\treturn;\n\t}\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'LABEL') {\n\t\t\tif (target.parentNode) {\n\t\t\t\ttarget = target.parentNode.querySelector('input');\n\t\t\t}\n\t\t}\n\t\tif (target && (target.type === 'radio' || target.type === 'checkbox')) {\n\t\t\tif (!target.disabled) { //disabled\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 40,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\tvar dispatchEvent = function(event) {\n\t\tvar targetElement = $.targets.click;\n\t\tif (targetElement) {\n\t\t\tvar clickEvent, touch;\n\t\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect\n\t\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\t\ttouch = event.detail.gesture.changedTouches[0];\n\t\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\t\tclickEvent = document.createEvent('MouseEvents');\n\t\t\tclickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\t\tclickEvent.forwardedTouchEvent = true;\n\t\t\ttargetElement.dispatchEvent(clickEvent);\n\t\t\tevent.detail && event.detail.gesture.preventDefault();\n\t\t}\n\t};\n\twindow.addEventListener('tap', dispatchEvent);\n\twindow.addEventListener('doubletap', dispatchEvent);\n\t//捕获\n\twindow.addEventListener('click', function(event) {\n\t\tif ($.targets.click) {\n\t\t\tif (!event.forwardedTouchEvent) { //stop click\n\t\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t} else {\n\t\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation\n\t\t\t\t\tevent.propagationStopped = true;\n\t\t\t\t}\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, true);\n\n})(mui, window, 'click');"
  },
  {
    "path": "js/mui.fixed.js",
    "content": "/**\n * fixed trim\n * @param {type} undefined\n * @returns {undefined}\n */\n(function(undefined) {\n\tif (String.prototype.trim === undefined) { // fix for iOS 3.2\n\t\tString.prototype.trim = function() {\n\t\t\treturn this.replace(/^\\s+|\\s+$/g, '');\n\t\t};\n\t}\n\tObject.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {\n\t\tobj['__proto__'] = proto;\n\t\treturn obj;\n\t};\n\n})();\n/**\n * fixed CustomEvent\n */\n(function() {\n\tif (typeof window.CustomEvent === 'undefined') {\n\t\tfunction CustomEvent(event, params) {\n\t\t\tparams = params || {\n\t\t\t\tbubbles: false,\n\t\t\t\tcancelable: false,\n\t\t\t\tdetail: undefined\n\t\t\t};\n\t\t\tvar evt = document.createEvent('Events');\n\t\t\tvar bubbles = true;\n\t\t\tfor (var name in params) {\n\t\t\t\t(name === 'bubbles') ? (bubbles = !!params[name]) : (evt[name] = params[name]);\n\t\t\t}\n\t\t\tevt.initEvent(event, bubbles, true);\n\t\t\treturn evt;\n\t\t};\n\t\tCustomEvent.prototype = window.Event.prototype;\n\t\twindow.CustomEvent = CustomEvent;\n\t}\n})();"
  },
  {
    "path": "js/mui.fixed.keyboard.js",
    "content": "(function($, document) {\n\t$(function() {\n\t\tif (!$.os.ios) {\n\t\t\treturn;\n\t\t}\n\t\tvar CLASS_FOCUSIN = $.className('focusin');\n\t\tvar CLASS_BAR_TAB = $.className('bar-tab');\n\t\tvar CLASS_BAR_FOOTER = $.className('bar-footer');\n\t\tvar CLASS_BAR_FOOTER_SECONDARY = $.className('bar-footer-secondary');\n\t\tvar CLASS_BAR_FOOTER_SECONDARY_TAB = $.className('bar-footer-secondary-tab');\n\t\t// var content = document.querySelector('.' + CLASS_CONTENT);\n\t\t// if (content) {\n\t\t// \tdocument.body.insertBefore(content, document.body.firstElementChild);\n\t\t// }\n\t\tdocument.addEventListener('focusin', function(e) {\n\t\t\tif ($.os.plus) { //在父webview里边不fix\n\t\t\t\tif (window.plus) {\n\t\t\t\t\tif (plus.webview.currentWebview().children().length > 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar target = e.target;\n\t\t\t//TODO 需考虑所有键盘弹起的情况\n\t\t\tif (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) {\n\t\t\t\tif (target.disabled || target.readOnly) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdocument.body.classList.add(CLASS_FOCUSIN);\n\t\t\t\tvar isFooter = false;\n\t\t\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\t\t\tvar classList = target.classList;\n\t\t\t\t\tif (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) {\n\t\t\t\t\t\tisFooter = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isFooter) {\n\t\t\t\t\tvar scrollTop = document.body.scrollHeight;\n\t\t\t\t\tvar scrollLeft = document.body.scrollLeft;\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\twindow.scrollTo(scrollLeft, scrollTop);\n\t\t\t\t\t}, 20);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tdocument.addEventListener('focusout', function(e) {\n\t\t\tvar classList = document.body.classList;\n\t\t\tif (classList.contains(CLASS_FOCUSIN)) {\n\t\t\t\tclassList.remove(CLASS_FOCUSIN);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twindow.scrollTo(document.body.scrollLeft, document.body.scrollTop);\n\t\t\t\t}, 20);\n\t\t\t}\n\t\t});\n\t});\n})(mui, document);"
  },
  {
    "path": "js/mui.gestures.drag.js",
    "content": "/**\n * mui gesture drag[start|left|right|up|down|end]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (!touch.direction || !session.target) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//修正direction,可在session期间自行锁定拖拽方向，方便开发scroll类不同方向拖拽插件嵌套\n\t\t\t\tif (session.lockDirection && session.startDirection) {\n\t\t\t\t\tif (session.startDirection && session.startDirection !== touch.direction) {\n\t\t\t\t\t\tif (session.startDirection === 'up' || session.startDirection === 'down') {\n\t\t\t\t\t\t\ttouch.direction = touch.deltaY < 0 ? 'up' : 'down';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttouch.direction = touch.deltaX < 0 ? 'left' : 'right';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!session.drag) {\n\t\t\t\t\tsession.drag = true;\n\t\t\t\t\t$.trigger(session.target, name + 'start', touch);\n\t\t\t\t}\n\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif (session.drag && touch.isFinal) {\n\t\t\t\t\t$.trigger(session.target, name + 'end', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture drag\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 20,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1\n\t\t}\n\t});\n})(mui, 'drag');"
  },
  {
    "path": "js/mui.gestures.flick.js",
    "content": "/**\n * mui gesture flick[left|right|up|down]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar flickStartTime = 0;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tvar now = $.now();\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (now - flickStartTime > 300) {\n\t\t\t\t\tflickStartTime = now;\n\t\t\t\t\tsession.flickStart = touch.center;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\ttouch.flick = false;\n\t\t\t\tif (session.flickStart && options.flickMaxTime > (now - flickStartTime) && touch.distance > options.flickMinDistince) {\n\t\t\t\t\ttouch.flick = true;\n\t\t\t\t\ttouch.flickTime = now - flickStartTime;\n\t\t\t\t\ttouch.flickDistanceX = touch.center.x - session.flickStart.x;\n\t\t\t\t\ttouch.flickDistanceY = touch.center.y - session.flickStart.y;\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t};\n\t/**\n\t * mui gesture flick\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 5,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tflickMaxTime: 200,\n\t\t\tflickMinDistince: 10\n\t\t}\n\t});\n})(mui, 'flick');"
  },
  {
    "path": "js/mui.gestures.hold.js",
    "content": "/**\n * mui gesture hold\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar timer;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tif ($.options.gestureConfig.hold) {\n\t\t\t\t\ttimer && clearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t\ttouch.hold = true;\n\t\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\t}, options.holdTimeout);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif (timer) {\n\t\t\t\t\tclearTimeout(timer) && (timer = null);\n\t\t\t\t\t$.trigger(session.target, 'release', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture hold\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\tholdTimeout: 0\n\t\t}\n\t});\n})(mui, 'hold');"
  },
  {
    "path": "js/mui.gestures.js",
    "content": "/**\n * mui gestures\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\t$.gestures = {\n\t\tsession: {}\n\t};\n\t/**\n\t * Gesture preventDefault\n\t * @param {type} e\n\t * @returns {undefined}\n\t */\n\t$.preventDefault = function(e) {\n\t\te.preventDefault();\n\t};\n\t/**\n\t * Gesture stopPropagation\n\t * @param {type} e\n\t * @returns {undefined}\n\t */\n\t$.stopPropagation = function(e) {\n\t\te.stopPropagation();\n\t};\n\n\t/**\n\t * register gesture\n\t * @param {type} gesture\n\t * @returns {$.gestures}\n\t */\n\t$.addGesture = function(gesture) {\n\t\treturn $.addAction('gestures', gesture);\n\n\t};\n\n\tvar round = Math.round;\n\tvar abs = Math.abs;\n\tvar sqrt = Math.sqrt;\n\tvar atan = Math.atan;\n\tvar atan2 = Math.atan2;\n\t/**\n\t * distance\n\t * @param {type} p1\n\t * @param {type} p2\n\t * @returns {Number}\n\t */\n\tvar getDistance = function(p1, p2, props) {\n\t\tif(!props) {\n\t\t\tprops = ['x', 'y'];\n\t\t}\n\t\tvar x = p2[props[0]] - p1[props[0]];\n\t\tvar y = p2[props[1]] - p1[props[1]];\n\t\treturn sqrt((x * x) + (y * y));\n\t};\n\t/**\n\t * scale\n\t * @param {Object} starts\n\t * @param {Object} moves\n\t */\n\tvar getScale = function(starts, moves) {\n\t\tif(starts.length >= 2 && moves.length >= 2) {\n\t\t\tvar props = ['pageX', 'pageY'];\n\t\t\treturn getDistance(moves[1], moves[0], props) / getDistance(starts[1], starts[0], props);\n\t\t}\n\t\treturn 1;\n\t};\n\t/**\n\t * angle\n\t * @param {type} p1\n\t * @param {type} p2\n\t * @returns {Number}\n\t */\n\tvar getAngle = function(p1, p2, props) {\n\t\tif(!props) {\n\t\t\tprops = ['x', 'y'];\n\t\t}\n\t\tvar x = p2[props[0]] - p1[props[0]];\n\t\tvar y = p2[props[1]] - p1[props[1]];\n\t\treturn atan2(y, x) * 180 / Math.PI;\n\t};\n\t/**\n\t * direction\n\t * @param {Object} x\n\t * @param {Object} y\n\t */\n\tvar getDirection = function(x, y) {\n\t\tif(x === y) {\n\t\t\treturn '';\n\t\t}\n\t\tif(abs(x) >= abs(y)) {\n\t\t\treturn x > 0 ? 'left' : 'right';\n\t\t}\n\t\treturn y > 0 ? 'up' : 'down';\n\t};\n\t/**\n\t * rotation\n\t * @param {Object} start\n\t * @param {Object} end\n\t */\n\tvar getRotation = function(start, end) {\n\t\tvar props = ['pageX', 'pageY'];\n\t\treturn getAngle(end[1], end[0], props) - getAngle(start[1], start[0], props);\n\t};\n\t/**\n\t * px per ms\n\t * @param {Object} deltaTime\n\t * @param {Object} x\n\t * @param {Object} y\n\t */\n\tvar getVelocity = function(deltaTime, x, y) {\n\t\treturn {\n\t\t\tx: x / deltaTime || 0,\n\t\t\ty: y / deltaTime || 0\n\t\t};\n\t};\n\t/**\n\t * detect gestures\n\t * @param {type} event\n\t * @param {type} touch\n\t * @returns {undefined}\n\t */\n\tvar detect = function(event, touch) {\n\t\tif($.gestures.stoped) {\n\t\t\treturn;\n\t\t}\n\t\t$.doAction('gestures', function(index, gesture) {\n\t\t\tif(!$.gestures.stoped) {\n\t\t\t\tif($.options.gestureConfig[gesture.name] !== false) {\n\t\t\t\t\tgesture.handle(event, touch);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t * 暂时无用\n\t * @param {Object} node\n\t * @param {Object} parent\n\t */\n\tvar hasParent = function(node, parent) {\n\t\twhile(node) {\n\t\t\tif(node == parent) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar uniqueArray = function(src, key, sort) {\n\t\tvar results = [];\n\t\tvar values = [];\n\t\tvar i = 0;\n\n\t\twhile(i < src.length) {\n\t\t\tvar val = key ? src[i][key] : src[i];\n\t\t\tif(values.indexOf(val) < 0) {\n\t\t\t\tresults.push(src[i]);\n\t\t\t}\n\t\t\tvalues[i] = val;\n\t\t\ti++;\n\t\t}\n\n\t\tif(sort) {\n\t\t\tif(!key) {\n\t\t\t\tresults = results.sort();\n\t\t\t} else {\n\t\t\t\tresults = results.sort(function sortUniqueArray(a, b) {\n\t\t\t\t\treturn a[key] > b[key];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t};\n\tvar getMultiCenter = function(touches) {\n\t\tvar touchesLength = touches.length;\n\t\tif(touchesLength === 1) {\n\t\t\treturn {\n\t\t\t\tx: round(touches[0].pageX),\n\t\t\t\ty: round(touches[0].pageY)\n\t\t\t};\n\t\t}\n\n\t\tvar x = 0;\n\t\tvar y = 0;\n\t\tvar i = 0;\n\t\twhile(i < touchesLength) {\n\t\t\tx += touches[i].pageX;\n\t\t\ty += touches[i].pageY;\n\t\t\ti++;\n\t\t}\n\n\t\treturn {\n\t\t\tx: round(x / touchesLength),\n\t\t\ty: round(y / touchesLength)\n\t\t};\n\t};\n\tvar multiTouch = function() {\n\t\treturn $.options.gestureConfig.pinch;\n\t};\n\tvar copySimpleTouchData = function(touch) {\n\t\tvar touches = [];\n\t\tvar i = 0;\n\t\twhile(i < touch.touches.length) {\n\t\t\ttouches[i] = {\n\t\t\t\tpageX: round(touch.touches[i].pageX),\n\t\t\t\tpageY: round(touch.touches[i].pageY)\n\t\t\t};\n\t\t\ti++;\n\t\t}\n\t\treturn {\n\t\t\ttimestamp: $.now(),\n\t\t\tgesture: touch.gesture,\n\t\t\ttouches: touches,\n\t\t\tcenter: getMultiCenter(touch.touches),\n\t\t\tdeltaX: touch.deltaX,\n\t\t\tdeltaY: touch.deltaY\n\t\t};\n\t};\n\n\tvar calDelta = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar center = touch.center;\n\t\tvar offset = session.offsetDelta || {};\n\t\tvar prevDelta = session.prevDelta || {};\n\t\tvar prevTouch = session.prevTouch || {};\n\n\t\tif(touch.gesture.type === $.EVENT_START || touch.gesture.type === $.EVENT_END) {\n\t\t\tprevDelta = session.prevDelta = {\n\t\t\t\tx: prevTouch.deltaX || 0,\n\t\t\t\ty: prevTouch.deltaY || 0\n\t\t\t};\n\n\t\t\toffset = session.offsetDelta = {\n\t\t\t\tx: center.x,\n\t\t\t\ty: center.y\n\t\t\t};\n\t\t}\n\t\ttouch.deltaX = prevDelta.x + (center.x - offset.x);\n\t\ttouch.deltaY = prevDelta.y + (center.y - offset.y);\n\t};\n\tvar calTouchData = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar touches = touch.touches;\n\t\tvar touchesLength = touches.length;\n\n\t\tif(!session.firstTouch) {\n\t\t\tsession.firstTouch = copySimpleTouchData(touch);\n\t\t}\n\n\t\tif(multiTouch() && touchesLength > 1 && !session.firstMultiTouch) {\n\t\t\tsession.firstMultiTouch = copySimpleTouchData(touch);\n\t\t} else if(touchesLength === 1) {\n\t\t\tsession.firstMultiTouch = false;\n\t\t}\n\n\t\tvar firstTouch = session.firstTouch;\n\t\tvar firstMultiTouch = session.firstMultiTouch;\n\t\tvar offsetCenter = firstMultiTouch ? firstMultiTouch.center : firstTouch.center;\n\n\t\tvar center = touch.center = getMultiCenter(touches);\n\t\ttouch.timestamp = $.now();\n\t\ttouch.deltaTime = touch.timestamp - firstTouch.timestamp;\n\n\t\ttouch.angle = getAngle(offsetCenter, center);\n\t\ttouch.distance = getDistance(offsetCenter, center);\n\n\t\tcalDelta(touch);\n\n\t\ttouch.offsetDirection = getDirection(touch.deltaX, touch.deltaY);\n\n\t\ttouch.scale = firstMultiTouch ? getScale(firstMultiTouch.touches, touches) : 1;\n\t\ttouch.rotation = firstMultiTouch ? getRotation(firstMultiTouch.touches, touches) : 0;\n\n\t\tcalIntervalTouchData(touch);\n\n\t};\n\tvar CAL_INTERVAL = 25;\n\tvar calIntervalTouchData = function(touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar last = session.lastInterval || touch;\n\t\tvar deltaTime = touch.timestamp - last.timestamp;\n\t\tvar velocity;\n\t\tvar velocityX;\n\t\tvar velocityY;\n\t\tvar direction;\n\n\t\tif(touch.gesture.type != $.EVENT_CANCEL && (deltaTime > CAL_INTERVAL || last.velocity === undefined)) {\n\t\t\tvar deltaX = last.deltaX - touch.deltaX;\n\t\t\tvar deltaY = last.deltaY - touch.deltaY;\n\n\t\t\tvar v = getVelocity(deltaTime, deltaX, deltaY);\n\t\t\tvelocityX = v.x;\n\t\t\tvelocityY = v.y;\n\t\t\tvelocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n\t\t\tdirection = getDirection(deltaX, deltaY) || last.direction;\n\n\t\t\tsession.lastInterval = touch;\n\t\t} else {\n\t\t\tvelocity = last.velocity;\n\t\t\tvelocityX = last.velocityX;\n\t\t\tvelocityY = last.velocityY;\n\t\t\tdirection = last.direction;\n\t\t}\n\n\t\ttouch.velocity = velocity;\n\t\ttouch.velocityX = velocityX;\n\t\ttouch.velocityY = velocityY;\n\t\ttouch.direction = direction;\n\t};\n\tvar targetIds = {};\n\tvar convertTouches = function(touches) {\n\t\tfor(var i = 0; i < touches.length; i++) {\n\t\t\t!touches['identifier'] && (touches['identifier'] = 0);\n\t\t}\n\t\treturn touches;\n\t};\n\tvar getTouches = function(event, touch) {\n\t\tvar allTouches = convertTouches($.slice.call(event.touches || [event]));\n\n\t\tvar type = event.type;\n\n\t\tvar targetTouches = [];\n\t\tvar changedTargetTouches = [];\n\n\t\t//当touchstart或touchmove且touches长度为1，直接获得all和changed\n\t\tif((type === $.EVENT_START || type === $.EVENT_MOVE) && allTouches.length === 1) {\n\t\t\ttargetIds[allTouches[0].identifier] = true;\n\t\t\ttargetTouches = allTouches;\n\t\t\tchangedTargetTouches = allTouches;\n\t\t\ttouch.target = event.target;\n\t\t} else {\n\t\t\tvar i = 0;\n\t\t\tvar targetTouches = [];\n\t\t\tvar changedTargetTouches = [];\n\t\t\tvar changedTouches = convertTouches($.slice.call(event.changedTouches || [event]));\n\n\t\t\ttouch.target = event.target;\n\t\t\tvar sessionTarget = $.gestures.session.target || event.target;\n\t\t\ttargetTouches = allTouches.filter(function(touch) {\n\t\t\t\treturn hasParent(touch.target, sessionTarget);\n\t\t\t});\n\n\t\t\tif(type === $.EVENT_START) {\n\t\t\t\ti = 0;\n\t\t\t\twhile(i < targetTouches.length) {\n\t\t\t\t\ttargetIds[targetTouches[i].identifier] = true;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = 0;\n\t\t\twhile(i < changedTouches.length) {\n\t\t\t\tif(targetIds[changedTouches[i].identifier]) {\n\t\t\t\t\tchangedTargetTouches.push(changedTouches[i]);\n\t\t\t\t}\n\t\t\t\tif(type === $.EVENT_END || type === $.EVENT_CANCEL) {\n\t\t\t\t\tdelete targetIds[changedTouches[i].identifier];\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif(!changedTargetTouches.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\ttargetTouches = uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true);\n\t\tvar touchesLength = targetTouches.length;\n\t\tvar changedTouchesLength = changedTargetTouches.length;\n\t\tif(type === $.EVENT_START && touchesLength - changedTouchesLength === 0) { //first\n\t\t\ttouch.isFirst = true;\n\t\t\t$.gestures.touch = $.gestures.session = {\n\t\t\t\ttarget: event.target\n\t\t\t};\n\t\t}\n\t\ttouch.isFinal = ((type === $.EVENT_END || type === $.EVENT_CANCEL) && (touchesLength - changedTouchesLength === 0));\n\n\t\ttouch.touches = targetTouches;\n\t\ttouch.changedTouches = changedTargetTouches;\n\t\treturn true;\n\n\t};\n\tvar handleTouchEvent = function(event) {\n\t\tvar touch = {\n\t\t\tgesture: event\n\t\t};\n\t\tvar touches = getTouches(event, touch);\n\t\tif(!touches) {\n\t\t\treturn;\n\t\t}\n\t\tcalTouchData(touch);\n\t\tdetect(event, touch);\n\t\t$.gestures.session.prevTouch = touch;\n\t\tif(event.type === $.EVENT_END && !$.isTouchable) {\n\t\t\t$.gestures.touch = $.gestures.session = {};\n\t\t}\n\t};\n\tvar supportsPassive = (function checkPassiveListener() {\n\t\tvar supportsPassive = false;\n\t\ttry {\n\t\t\tvar opts = Object.defineProperty({}, 'passive', {\n\t\t\t\tget: function get() {\n\t\t\t\t\tsupportsPassive = true;\n\t\t\t\t},\n\t\t\t});\n\t\t\twindow.addEventListener('testPassiveListener', null, opts);\n\t\t} catch(e) {\n\t\t\t// No support\n\t\t}\n\t\treturn supportsPassive;\n\t}())\n\twindow.addEventListener($.EVENT_START, handleTouchEvent);\n\twindow.addEventListener($.EVENT_MOVE, handleTouchEvent, supportsPassive ? {\n\t\tpassive: false,\n\t\tcapture: false\n\t} : false);\n\twindow.addEventListener($.EVENT_END, handleTouchEvent);\n\twindow.addEventListener($.EVENT_CANCEL, handleTouchEvent);\n\t//fixed hashchange(android)\n\twindow.addEventListener($.EVENT_CLICK, function(e) {\n\t\t//TODO 应该判断当前target是不是在targets.popover内部，而不是非要相等\n\t\tif(($.os.android || $.os.ios) && (($.targets.popover && e.target === $.targets.popover) || ($.targets.tab) || $.targets.offcanvas || $.targets.modal)) {\n\t\t\te.preventDefault();\n\t\t}\n\t}, true);\n\n\t//增加原生滚动识别\n\t$.isScrolling = false;\n\tvar scrollingTimeout = null;\n\twindow.addEventListener('scroll', function() {\n\t\t$.isScrolling = true;\n\t\tscrollingTimeout && clearTimeout(scrollingTimeout);\n\t\tscrollingTimeout = setTimeout(function() {\n\t\t\t$.isScrolling = false;\n\t\t}, 250);\n\t});\n})(mui, window);"
  },
  {
    "path": "js/mui.gestures.longtap.js",
    "content": "/**\n * mui gesture longtap\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar timer;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t}, options.holdTimeout);\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif (touch.distance > options.holdThreshold) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture longtap\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\tholdTimeout: 500,\n\t\t\tholdThreshold: 2\n\t\t}\n\t});\n})(mui, 'longtap');"
  },
  {
    "path": "js/mui.gestures.pinch.js",
    "content": "/**\n * mui gesture pinch\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar options = this.options;\n\t\tvar session = $.gestures.session;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_MOVE:\n\t\t\t\tif ($.options.gestureConfig.pinch) {\n\t\t\t\t\tif (touch.touches.length < 2) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!session.pinch) { //start\n\t\t\t\t\t\tsession.pinch = true;\n\t\t\t\t\t\t$.trigger(session.target, name + 'start', touch);\n\t\t\t\t\t}\n\t\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t\tvar scale = touch.scale;\n\t\t\t\t\tvar rotation = touch.rotation;\n\t\t\t\t\tvar lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale;\n\t\t\t\t\tvar scaleDiff = 0.000000000001; //防止scale与lastScale相等，不触发事件的情况。\n\t\t\t\t\tif (scale > lastScale) { //out\n\t\t\t\t\t\tlastScale = scale - scaleDiff;\n\t\t\t\t\t\t$.trigger(session.target, name + 'out', touch);\n\t\t\t\t\t} //in\n\t\t\t\t\telse if (scale < lastScale) {\n\t\t\t\t\t\tlastScale = scale + scaleDiff;\n\t\t\t\t\t\t$.trigger(session.target, name + 'in', touch);\n\t\t\t\t\t}\n\t\t\t\t\tif (Math.abs(rotation) > options.minRotationAngle) {\n\t\t\t\t\t\t$.trigger(session.target, 'rotate', touch);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tif ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) {\n\t\t\t\t\tsession.pinch = false;\n\t\t\t\t\t$.trigger(session.target, name + 'end', touch);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture pinch\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tminRotationAngle: 0\n\t\t}\n\t});\n})(mui, 'pinch');"
  },
  {
    "path": "js/mui.gestures.swipe.js",
    "content": "/**\n * mui gesture swipe[left|right|up|down]\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tif (event.type === $.EVENT_END || event.type === $.EVENT_CANCEL) {\n\t\t\tvar options = this.options;\n\t\t\ttouch.swipe = false;\n\t\t\t//TODO 后续根据velocity计算\n\t\t\tif (touch.direction && options.swipeMaxTime > touch.deltaTime && touch.distance > options.swipeMinDistince) {\n\t\t\t\ttouch.swipe = true;\n\t\t\t\t$.trigger(session.target, name, touch);\n\t\t\t\t$.trigger(session.target, name + touch.direction, touch);\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * mui gesture swipe\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 10,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tswipeMaxTime: 300,\n\t\t\tswipeMinDistince: 18\n\t\t}\n\t});\n})(mui, 'swipe');"
  },
  {
    "path": "js/mui.gestures.tap.js",
    "content": "/**\n * mui gesture tap and doubleTap\n * @param {type} $\n * @param {type} name\n * @returns {undefined}\n */\n(function($, name) {\n\tvar lastTarget;\n\tvar lastTapTime;\n\tvar handle = function(event, touch) {\n\t\tvar session = $.gestures.session;\n\t\tvar options = this.options;\n\t\tswitch (event.type) {\n\t\t\tcase $.EVENT_END:\n\t\t\t\tif (!touch.isFinal) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar target = session.target;\n\t\t\t\tif (!target || (target.disabled || (target.classList && target.classList.contains($.className('disabled'))))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (touch.distance < options.tapMaxDistance && touch.deltaTime < options.tapMaxTime) {\n\t\t\t\t\tif ($.options.gestureConfig.doubletap && lastTarget && (lastTarget === target)) { //same target\n\t\t\t\t\t\tif (lastTapTime && (touch.timestamp - lastTapTime) < options.tapMaxInterval) {\n\t\t\t\t\t\t\t$.trigger(target, 'doubletap', touch);\n\t\t\t\t\t\t\tlastTapTime = $.now();\n\t\t\t\t\t\t\tlastTarget = target;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$.trigger(target, name, touch);\n\t\t\t\t\tlastTapTime = $.now();\n\t\t\t\t\tlastTarget = target;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\t/**\n\t * mui gesture tap\n\t */\n\t$.addGesture({\n\t\tname: name,\n\t\tindex: 30,\n\t\thandle: handle,\n\t\toptions: {\n\t\t\tfingers: 1,\n\t\t\ttapMaxInterval: 300,\n\t\t\ttapMaxDistance: 5,\n\t\t\ttapMaxTime: 250\n\t\t}\n\t});\n})(mui, 'tap');"
  },
  {
    "path": "js/mui.init.5+.js",
    "content": "/**\n * mui.init 5+\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\tvar defaultOptions = {\n\t\tswipeBack: false,\n\t\tpreloadPages: [], //5+ lazyLoad webview\n\t\tpreloadLimit: 10, //预加载窗口的数量限制(一旦超出，先进先出)\n\t\tkeyEventBind: {\n\t\t\tbackbutton: true,\n\t\t\tmenubutton: true\n\t\t},\n\t\ttitleConfig: {\n\t\t\theight: \"44px\",\n\t\t\tbackgroundColor: \"#f7f7f7\", //导航栏背景色\n\t\t\tbottomBorderColor: \"#cccccc\", //底部边线颜色\n\t\t\ttitle: { //标题配置\n\t\t\t\ttext: \"\", //标题文字\n\t\t\t\tposition: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\"\n\t\t\t\t},\n\t\t\t\tstyles: {\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talign: \"center\",\n\t\t\t\t\tfamily: \"'Helvetica Neue',Helvetica,sans-serif\",\n\t\t\t\t\tsize: \"17px\",\n\t\t\t\t\tstyle: \"normal\",\n\t\t\t\t\tweight: \"normal\",\n\t\t\t\t\tfontSrc: \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tback: {\n\t\t\t\timage: {\n\t\t\t\t\tbase64Data: '',\n\t\t\t\t\timgSrc: '',\n\t\t\t\t\tsprite: {\n\t\t\t\t\t\ttop: '0px',\n\t\t\t\t\t\tleft: '0px',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\theight: '100%'\n\t\t\t\t\t},\n\t\t\t\t\tposition: {\n\t\t\t\t\t\ttop: \"10px\",\n\t\t\t\t\t\tleft: \"10px\",\n\t\t\t\t\t\twidth: \"24px\",\n\t\t\t\t\t\theight: \"24px\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//默认页面动画\n\tvar defaultShow = {\n\t\tevent:\"titleUpdate\",\n\t\tautoShow: true,\n\t\tduration: 300,\n\t\taniShow: 'slide-in-right',\n\t\textras:{}\n\t};\n\t//若执行了显示动画初始化操作，则要覆盖默认配置\n\tif($.options.show) {\n\t\tdefaultShow = $.extend(true, defaultShow, $.options.show);\n\t}\n\n\t$.currentWebview = null;\n\n\t$.extend(true, $.global, defaultOptions);\n\t$.extend(true, $.options, defaultOptions);\n\t/**\n\t * 等待动画配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.waitingOptions = function(options) {\n\t\treturn $.extend(true, {}, {\n\t\t\tautoShow: true,\n\t\t\ttitle: '',\n\t\t\tmodal: false\n\t\t}, options);\n\t};\n\t/**\n\t * 窗口显示配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.showOptions = function(options) {\n\t\treturn $.extend(true, {}, defaultShow, options);\n\t};\n\t/**\n\t * 窗口默认配置\n\t * @param {type} options\n\t * @returns {Object}\n\t */\n\t$.windowOptions = function(options) {\n\t\treturn $.extend({\n\t\t\tscalable: false,\n\t\t\tbounce: \"\" //vertical\n\t\t}, options);\n\t};\n\t/**\n\t * plusReady\n\t * @param {type} callback\n\t * @returns {_L6.$}\n\t */\n\t$.plusReady = function(callback) {\n\t\tif(window.plus) {\n\t\t\tsetTimeout(function() { //解决callback与plusready事件的执行时机问题(典型案例:showWaiting,closeWaiting)\n\t\t\t\tcallback();\n\t\t\t}, 0);\n\t\t} else {\n\t\t\tdocument.addEventListener(\"plusready\", function() {\n\t\t\t\tcallback();\n\t\t\t}, false);\n\t\t}\n\t\treturn this;\n\t};\n\t/**\n\t * 5+ event(5+没提供之前我自己实现)\n\t * @param {type} webview\n\t * @param {type} eventType\n\t * @param {type} data\n\t * @returns {undefined}\n\t */\n\t$.fire = function(webview, eventType, data) {\n\t\tif(webview) {\n\t\t\tif(typeof data === 'undefined') {\n\t\t\t\tdata = '';\n\t\t\t} else if(typeof data === 'boolean' || typeof data === 'number') {\n\t\t\t\twebview.evalJS(\"typeof mui!=='undefined'&&mui.receive('\" + eventType + \"',\" + data + \")\");\n\t\t\t\treturn;\n\t\t\t} else if($.isPlainObject(data) || $.isArray(data)) {\n\t\t\t\tdata = JSON.stringify(data || {}).replace(/\\'/g, \"\\\\u0027\").replace(/\\\\/g, \"\\\\u005c\");\n\t\t\t}\n\t\t\twebview.evalJS(\"typeof mui!=='undefined'&&mui.receive('\" + eventType + \"','\" + data + \"')\");\n\t\t}\n\t};\n\t/**\n\t * 5+ event(5+没提供之前我自己实现)\n\t * @param {type} eventType\n\t * @param {type} data\n\t * @returns {undefined}\n\t */\n\t$.receive = function(eventType, data) {\n\t\tif(eventType) {\n\t\t\ttry {\n\t\t\t\tif(data && typeof data === 'string') {\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\t}\n\t\t\t} catch(e) {}\n\t\t\t$.trigger(document, eventType, data);\n\t\t}\n\t};\n\tvar triggerPreload = function(webview) {\n\t\tif(!webview.preloaded) { //保证仅触发一次\n\t\t\t$.fire(webview, 'preload');\n\t\t\tvar list = webview.children();\n\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t$.fire(list[i], 'preload');\n\t\t\t}\n\t\t\twebview.preloaded = true;\n\t\t}\n\t};\n\tvar trigger = function(webview, eventType, timeChecked) {\n\t\tif(timeChecked) {\n\t\t\tif(!webview[eventType + 'ed']) {\n\t\t\t\t$.fire(webview, eventType);\n\t\t\t\tvar list = webview.children();\n\t\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t\t$.fire(list[i], eventType);\n\t\t\t\t}\n\t\t\t\twebview[eventType + 'ed'] = true;\n\t\t\t}\n\t\t} else {\n\t\t\t$.fire(webview, eventType);\n\t\t\tvar list = webview.children();\n\t\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\t\t$.fire(list[i], eventType);\n\t\t\t}\n\t\t}\n\n\t};\n\t/**\n\t * 打开新窗口\n\t * @param {string} url 要打开的页面地址\n\t * @param {string} id 指定页面ID\n\t * @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}}\n\t */\n\t$.openWindow = function(url, id, options) {\n\t\tif(typeof url === 'object') {\n\t\t\toptions = url;\n\t\t\turl = options.url;\n\t\t\tid = options.id || url;\n\t\t} else {\n\t\t\tif(typeof id === 'object') {\n\t\t\t\toptions = id;\n\t\t\t\tid = options.id || url;\n\t\t\t} else {\n\t\t\t\tid = id || url;\n\t\t\t}\n\t\t}\n\t\tif(!$.os.plus) {\n\t\t\t//TODO 先临时这么处理：手机上顶层跳，PC上parent跳\n\t\t\tif($.os.ios || $.os.android) {\n\t\t\t\twindow.top.location.href = url;\n\t\t\t} else {\n\t\t\t\twindow.parent.location.href = url;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions = options || {};\n\t\tvar params = options.params || {};\n\t\tvar webview = null,\n\t\t\twebviewCache = null,\n\t\t\tnShow, nWaiting;\n\n\t\tif($.webviews[id]) {\n\t\t\twebviewCache = $.webviews[id];\n\t\t\t//webview真实存在，才能获取\n\t\t\tif(plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = webviewCache.webview;\n\t\t\t}\n\t\t} else if(options.createNew !== true) {\n\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t}\n\n\t\tif(webview) { //已缓存\n\t\t\t//每次show都需要传递动画参数；\n\t\t\t//预加载的动画参数优先级：openWindow配置>preloadPages配置>mui默认配置；\n\t\t\tnShow = webviewCache ? webviewCache.show : defaultShow;\n\t\t\tnShow = options.show ? $.extend(nShow, options.show) : nShow;\n\t\t\tnShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {\n\t\t\t\ttriggerPreload(webview);\n\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t});\n\t\t\tif(webviewCache) {\n\t\t\t\twebviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t}\n\t\t\treturn webview;\n\t\t} else { //新窗口\n\t\t\tif(!url) {\n\t\t\t\tthrow new Error('webview[' + id + '] does not exist');\n\t\t\t}\n\n\t\t\t//显示waiting\n\t\t\tvar waitingConfig = $.waitingOptions(options.waiting);\n\t\t\tif(waitingConfig.autoShow) {\n\t\t\t\tnWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);\n\t\t\t}\n\n\t\t\t//创建页面\n\t\t\toptions = $.extend(options, {\n\t\t\t\tid: id,\n\t\t\t\turl: url\n\t\t\t});\n\n\t\t\twebview = $.createWindow(options);\n\n\t\t\t//显示\n\t\t\tnShow = $.showOptions(options.show);\n\t\t\tif(nShow.autoShow) {\n\t\t\t\tvar showWebview = function() {\n\t\t\t\t\t//关闭等待框\n\t\t\t\t\tif(nWaiting) {\n\t\t\t\t\t\tnWaiting.close();\n\t\t\t\t\t}\n\t\t\t\t\t//显示页面\n\t\t\t\t\twebview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);\n\t\t\t\t\toptions.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t\t};\n\t\t\t\t//titleUpdate触发时机早于loaded，更换为titleUpdate后，可以更早的显示webview\n\t\t\t\twebview.addEventListener(nShow.event, showWebview, false);\n\t\t\t\t//loaded事件发生后，触发预加载和pagebeforeshow事件\n\t\t\t\twebview.addEventListener(\"loaded\", function() {\n\t\t\t\t\ttriggerPreload(webview);\n\t\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t$.openWindowWithTitle = function(options, titleConfig) {\n\t\toptions = options || {};\n\t\tvar url = options.url;\n\t\tvar id = options.id || url;\n\n\t\tif(!$.os.plus) {\n\t\t\t//TODO 先临时这么处理：手机上顶层跳，PC上parent跳\n\t\t\tif($.os.ios || $.os.android) {\n\t\t\t\twindow.top.location.href = url;\n\t\t\t} else {\n\t\t\t\twindow.parent.location.href = url;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar params = options.params || {};\n\t\tvar webview = null,\n\t\t\twebviewCache = null,\n\t\t\tnShow, nWaiting;\n\n\t\tif($.webviews[id]) {\n\t\t\twebviewCache = $.webviews[id];\n\t\t\t//webview真实存在，才能获取\n\t\t\tif(plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = webviewCache.webview;\n\t\t\t}\n\t\t} else if(options.createNew !== true) {\n\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t}\n\n\t\tif(webview) { //已缓存\n\t\t\t//每次show都需要传递动画参数；\n\t\t\t//预加载的动画参数优先级：openWindow配置>preloadPages配置>mui默认配置；\n\t\t\tnShow = webviewCache ? webviewCache.show : defaultShow;\n\t\t\tnShow = options.show ? $.extend(nShow, options.show) : nShow;\n\t\t\tnShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {\n\t\t\t\ttriggerPreload(webview);\n\t\t\t\ttrigger(webview, 'pagebeforeshow', false);\n\t\t\t});\n\t\t\tif(webviewCache) {\n\t\t\t\twebviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\\'' + JSON.stringify(params) + '\\')');\n\t\t\t}\n\t\t\treturn webview;\n\t\t} else { //新窗口\n\t\t\tif(!url) {\n\t\t\t\tthrow new Error('webview[' + id + '] does not exist');\n\t\t\t}\n\n\t\t\t//显示waiting\n\t\t\tvar waitingConfig = $.waitingOptions(options.waiting);\n\t\t\tif(waitingConfig.autoShow) {\n\t\t\t\tnWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);\n\t\t\t}\n\n\t\t\t//创建页面\n\t\t\toptions = $.extend(options, {\n\t\t\t\tid: id,\n\t\t\t\turl: url\n\t\t\t});\n\n\t\t\twebview = $.createWindow(options);\n\n\t\t\tif(titleConfig) { //处理原生头\n\t\t\t\t$.extend(true, $.options.titleConfig, titleConfig);\n\t\t\t\tvar tid = $.options.titleConfig.id ? $.options.titleConfig.id : id + \"_title\";\n\t\t\t\tvar view = new plus.nativeObj.View(tid, {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\theight: $.options.titleConfig.height,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tdock: \"top\",\n\t\t\t\t\tposition: \"dock\"\n\t\t\t\t});\n\t\t\t\tview.drawRect($.options.titleConfig.backgroundColor); //绘制背景色\n\t\t\t\tvar _b = parseInt($.options.titleConfig.height) - 1;\n\t\t\t\tview.drawRect($.options.titleConfig.bottomBorderColor, {\n\t\t\t\t\ttop: _b + \"px\",\n\t\t\t\t\tleft: \"0px\"\n\t\t\t\t}); //绘制底部边线\n\n\t\t\t\t//绘制文字\n\t\t\t\tif($.options.titleConfig.title.text){\n\t\t\t\t\tvar _title = $.options.titleConfig.title;\n\t\t\t\t\tview.drawText(_title.text,_title.position , _title.styles);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//返回图标绘制\n\t\t\t\tvar _back = $.options.titleConfig.back;\n\t\t\t\tvar backClick = null;\n\t\t\t\t//优先字体\n\n\t\t\t\t//其次是图片\n\t\t\t\tvar _backImage = _back.image;\n\t\t\t\tif(_backImage.base64Data || _backImage.imgSrc) {\n\t\t\t\t\t//TODO 此处需要处理百分比的情况\n\t\t\t\t\tbackClick = {\n\t\t\t\t\t\tleft:parseInt(_backImage.position.left),\n\t\t\t\t\t\tright:parseInt(_backImage.position.left) + parseInt(_backImage.position.width)\n\t\t\t\t\t};\n\t\t\t\t\tvar bitmap = new plus.nativeObj.Bitmap(id + \"_back\");\n\t\t\t\t\tif(_backImage.base64Data) { //优先base64编码字符串\n\t\t\t\t\t\tbitmap.loadBase64Data(_backImage.base64Data);\n\t\t\t\t\t} else { //其次加载图片文件\n\t\t\t\t\t\tbitmap.load(_backImage.imgSrc);\n\t\t\t\t\t}\n\t\t\t\t\tview.drawBitmap(bitmap,_backImage.sprite , _backImage.position);\n\t\t\t\t}\n\n\t\t\t\t//处理点击事件\n\t\t\t\tview.setTouchEventRect({\n\t\t\t\t\ttop: \"0px\",\n\t\t\t\t\tleft: \"0px\",\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\"\n\t\t\t\t});\n\t\t\t\tview.interceptTouchEvent(true);\n\t\t\t\tview.addEventListener(\"click\", function(e) {\n\t\t\t\t\tvar x = e.clientX;\n\t\t\t\t\t\n\t\t\t\t\t//返回按钮点击\n\t\t\t\t\tif(backClick&& x > backClick.left && x < backClick.right){\n\t\t\t\t\t\tif( _back.click && $.isFunction(_back.click)){\n\t\t\t\t\t\t\t_back.click();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\twebview.evalJS(\"window.mui&&mui.back();\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t\twebview.append(view);\n\n\t\t\t}\n\n\t\t\t//显示\n\t\t\tnShow = $.showOptions(options.show);\n\t\t\tif(nShow.autoShow) {\n\t\t\t\t//titleUpdate触发时机早于loaded，更换为titleUpdate后，可以更早的显示webview\n\t\t\t\twebview.addEventListener(nShow.event, function () {\n\t\t\t\t\t//关闭等待框\n\t\t\t\t\tif(nWaiting) {\n\t\t\t\t\t\tnWaiting.close();\n\t\t\t\t\t}\n\t\t\t\t\t//显示页面\n\t\t\t\t\twebview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t/**\n\t * 根据配置信息创建一个webview\n\t * @param {type} options\n\t * @param {type} isCreate\n\t * @returns {webview}\n\t */\n\t$.createWindow = function(options, isCreate) {\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\t\tvar id = options.id || options.url;\n\t\tvar webview;\n\t\tif(options.preload) {\n\t\t\tif($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache\n\t\t\t\twebview = $.webviews[id].webview;\n\t\t\t} else { //新增预加载窗口\n\t\t\t\t//判断是否携带createNew参数，默认为false\n\t\t\t\tif(options.createNew !== true) {\n\t\t\t\t\twebview = plus.webview.getWebviewById(id);\n\t\t\t\t}\n\n\t\t\t\t//之前没有，那就新创建\t\n\t\t\t\tif(!webview) {\n\t\t\t\t\twebview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({\n\t\t\t\t\t\tpreload: true\n\t\t\t\t\t}, options.extras));\n\t\t\t\t\tif(options.subpages) {\n\t\t\t\t\t\t$.each(options.subpages, function(index, subpage) {\n\t\t\t\t\t\t\tvar subpageId = subpage.id || subpage.url;\n\t\t\t\t\t\t\tif(subpageId) { //过滤空对象\n\t\t\t\t\t\t\t\tvar subWebview = plus.webview.getWebviewById(subpageId);\n\t\t\t\t\t\t\t\tif(!subWebview) { //如果该webview不存在，则创建\n\t\t\t\t\t\t\t\t\tsubWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), $.extend({\n\t\t\t\t\t\t\t\t\t\tpreload: true\n\t\t\t\t\t\t\t\t\t}, subpage.extras));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twebview.append(subWebview);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//TODO 理论上，子webview也应该计算到预加载队列中，但这样就麻烦了，要退必须退整体，否则可能出现问题；\n\t\t\t$.webviews[id] = {\n\t\t\t\twebview: webview, //目前仅preload的缓存webview\n\t\t\t\tpreload: true,\n\t\t\t\tshow: $.showOptions(options.show),\n\t\t\t\tafterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯\n\t\t\t};\n\t\t\t//索引该预加载窗口\n\t\t\tvar preloads = $.data.preloads;\n\t\t\tvar index = preloads.indexOf(id);\n\t\t\tif(~index) { //删除已存在的(变相调整插入位置)\n\t\t\t\tpreloads.splice(index, 1);\n\t\t\t}\n\t\t\tpreloads.push(id);\n\t\t\tif(preloads.length > $.options.preloadLimit) {\n\t\t\t\t//先进先出\n\t\t\t\tvar first = $.data.preloads.shift();\n\t\t\t\tvar webviewCache = $.webviews[first];\n\t\t\t\tif(webviewCache && webviewCache.webview) {\n\t\t\t\t\t//需要将自己打开的所有页面，全部close；\n\t\t\t\t\t//关闭该预加载webview\t\n\t\t\t\t\t$.closeAll(webviewCache.webview);\n\t\t\t\t}\n\t\t\t\t//删除缓存\n\t\t\t\tdelete $.webviews[first];\n\t\t\t}\n\t\t} else {\n\t\t\tif(isCreate !== false) { //直接创建非预加载窗口\n\t\t\t\twebview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras);\n\t\t\t\tif(options.subpages) {\n\t\t\t\t\t$.each(options.subpages, function(index, subpage) {\n\t\t\t\t\t\tvar subpageId = subpage.id || subpage.url;\n\t\t\t\t\t\tvar subWebview = plus.webview.getWebviewById(subpageId);\n\t\t\t\t\t\tif(!subWebview) {\n\t\t\t\t\t\t\tsubWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), subpage.extras);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twebview.append(subWebview);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn webview;\n\t};\n\n\t/**\n\t * 预加载\n\t */\n\t$.preload = function(options) {\n\t\t//调用预加载函数，不管是否传递preload参数，强制变为true\n\t\tif(!options.preload) {\n\t\t\toptions.preload = true;\n\t\t}\n\t\treturn $.createWindow(options);\n\t};\n\n\t/**\n\t *关闭当前webview打开的所有webview；\n\t */\n\t$.closeOpened = function(webview) {\n\t\tvar opened = webview.opened();\n\t\tif(opened) {\n\t\t\tfor(var i = 0, len = opened.length; i < len; i++) {\n\t\t\t\tvar openedWebview = opened[i];\n\t\t\t\tvar open_open = openedWebview.opened();\n\t\t\t\tif(open_open && open_open.length > 0) {\n\t\t\t\t\t//关闭打开的webview\n\t\t\t\t\t$.closeOpened(openedWebview);\n\t\t\t\t\t//关闭自己\n\t\t\t\t\topenedWebview.close(\"none\");\n\t\t\t\t} else {\n\t\t\t\t\t//如果直接孩子节点，就不用关闭了，因为父关闭的时候，会自动关闭子；\n\t\t\t\t\tif(openedWebview.parent() !== webview) {\n\t\t\t\t\t\topenedWebview.close('none');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t$.closeAll = function(webview, aniShow) {\n\t\t$.closeOpened(webview);\n\t\tif(aniShow) {\n\t\t\twebview.close(aniShow);\n\t\t} else {\n\t\t\twebview.close();\n\t\t}\n\t};\n\n\t/**\n\t * 批量创建webview\n\t * @param {type} options\n\t * @returns {undefined}\n\t */\n\t$.createWindows = function(options) {\n\t\t$.each(options, function(index, option) {\n\t\t\t//初始化预加载窗口(创建)和非预加载窗口(仅配置，不创建)\n\t\t\t$.createWindow(option, false);\n\t\t});\n\t};\n\t/**\n\t * 创建当前页面的子webview\n\t * @param {type} options\n\t * @returns {webview}\n\t */\n\t$.appendWebview = function(options) {\n\t\tif(!window.plus) {\n\t\t\treturn;\n\t\t}\n\t\tvar id = options.id || options.url;\n\t\tvar webview;\n\t\tif(!$.webviews[id]) { //保证执行一遍\n\t\t\t//TODO 这里也有隐患，比如某个webview不是作为subpage创建的，而是作为target webview的话；\n\t\t\tif(!plus.webview.getWebviewById(id)) {\n\t\t\t\twebview = plus.webview.create(options.url, id, options.styles, options.extras);\n\t\t\t}\n\t\t\t//之前的实现方案：子窗口loaded之后再append到父窗口中；\n\t\t\t//问题：部分子窗口loaded事件发生较晚，此时执行父窗口的children方法会返回空，导致父子通讯失败；\n\t\t\t//     比如父页面执行完preload事件后，需触发子页面的preload事件，此时未append的话，就无法触发；\n\t\t\t//修改方式：不再监控loaded事件，直接append\n\t\t\t//by chb@20150521\n\t\t\t// webview.addEventListener('loaded', function() {\n\t\t\tplus.webview.currentWebview().append(webview);\n\t\t\t// });\n\t\t\t$.webviews[id] = options;\n\n\t\t}\n\t\treturn webview;\n\t};\n\n\t//全局webviews\n\t$.webviews = {};\n\t//预加载窗口索引\n\t$.data.preloads = [];\n\t//$.currentWebview\n\t$.plusReady(function() {\n\t\t$.currentWebview = plus.webview.currentWebview();\n\t});\n\t$.addInit({\n\t\tname: '5+',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar subpages = options.subpages || [];\n\t\t\tif($.os.plus) {\n\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t//TODO  这里需要判断一下，最好等子窗口加载完毕后，再调用主窗口的show方法；\n\t\t\t\t\t//或者：在openwindow方法中，监听实现；\n\t\t\t\t\t$.each(subpages, function(index, subpage) {\n\t\t\t\t\t\t$.appendWebview(subpage);\n\t\t\t\t\t});\n\t\t\t\t\t//判断是否首页\n\t\t\t\t\tif(plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) {\n\t\t\t\t\t\t//首页需要自己激活预加载；\n\t\t\t\t\t\t//timeout因为子页面loaded之后才append的，防止子页面尚未append、从而导致其preload未触发的问题；\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\ttriggerPreload(plus.webview.currentWebview());\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t}\n\t\t\t\t\t//设置ios顶部状态栏颜色；\n\t\t\t\t\tif($.os.ios && $.options.statusBarBackground) {\n\t\t\t\t\t\tplus.navigator.setStatusBarBackground($.options.statusBarBackground);\n\t\t\t\t\t}\n\t\t\t\t\tif($.os.android && parseFloat($.os.version) < 4.4) {\n\t\t\t\t\t\t//解决Android平台4.4版本以下，resume后，父窗体标题延迟渲染的问题；\n\t\t\t\t\t\tif(plus.webview.currentWebview().parent() == null) {\n\t\t\t\t\t\t\tdocument.addEventListener(\"resume\", function() {\n\t\t\t\t\t\t\t\tvar body = document.body;\n\t\t\t\t\t\t\t\tbody.style.display = 'none';\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tbody.style.display = '';\n\t\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t//已支持iframe嵌入\n\t\t\t\t//\t\t\t\tif (subpages.length > 0) {\n\t\t\t\t//\t\t\t\t\tvar err = document.createElement('div');\n\t\t\t\t//\t\t\t\t\terr.className = 'mui-error';\n\t\t\t\t//\t\t\t\t\t//文字描述\n\t\t\t\t//\t\t\t\t\tvar span = document.createElement('span');\n\t\t\t\t//\t\t\t\t\tspan.innerHTML = '在该浏览器下，不支持创建子页面，具体参考';\n\t\t\t\t//\t\t\t\t\terr.appendChild(span);\n\t\t\t\t//\t\t\t\t\tvar a = document.createElement('a');\n\t\t\t\t//\t\t\t\t\ta.innerHTML = '\"mui框架适用场景\"';\n\t\t\t\t//\t\t\t\t\ta.href = 'http://ask.dcloud.net.cn/article/113';\n\t\t\t\t//\t\t\t\t\terr.appendChild(a);\n\t\t\t\t//\t\t\t\t\tdocument.body.appendChild(err);\n\t\t\t\t//\t\t\t\t\tconsole.log('在该浏览器下，不支持创建子页面');\n\t\t\t\t//\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t});\n\twindow.addEventListener('preload', function() {\n\t\t//处理预加载部分\n\t\tvar webviews = $.options.preloadPages || [];\n\t\t$.plusReady(function() {\n\t\t\t$.each(webviews, function(index, webview) {\n\t\t\t\t$.createWindow($.extend(webview, {\n\t\t\t\t\tpreload: true\n\t\t\t\t}));\n\t\t\t});\n\n\t\t});\n\t});\n\t$.supportStatusbarOffset = function() {\n\t\treturn $.os.plus && $.os.ios && parseFloat($.os.version) >= 7;\n\t};\n\t$.ready(function() {\n\t\t//标识当前环境支持statusbar\n\t\tif($.supportStatusbarOffset()) {\n\t\t\tdocument.body.classList.add($.className('statusbar'));\n\t\t}\n\t});\n})(mui);\n"
  },
  {
    "path": "js/mui.init.js",
    "content": "/**\n * mui.init\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.global = $.options = {\n\t\tgestureConfig: {\n\t\t\ttap: true,\n\t\t\tdoubletap: false,\n\t\t\tlongtap: false,\n\t\t\thold: false,\n\t\t\tflick: true,\n\t\t\tswipe: true,\n\t\t\tdrag: true,\n\t\t\tpinch: false\n\t\t}\n\t};\n\t/**\n\t *\n\t * @param {type} options\n\t * @returns {undefined}\n\t */\n\t$.initGlobal = function(options) {\n\t\t$.options = $.extend(true, $.global, options);\n\t\treturn this;\n\t};\n\tvar inits = {};\n\n\t/**\n\t * 单页配置 初始化\n\t * @param {object} options\n\t */\n\t$.init = function(options) {\n\t\t$.options = $.extend(true, $.global, options || {});\n\t\t$.ready(function() {\n\t\t\t$.doAction('inits', function(index, init) {\n\t\t\t\tvar isInit = !!(!inits[init.name] || init.repeat);\n\t\t\t\tif (isInit) {\n\t\t\t\t\tinit.handle.call($);\n\t\t\t\t\tinits[init.name] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn this;\n\t};\n\n\t/**\n\t * 增加初始化执行流程\n\t * @param {function} init\n\t */\n\t$.addInit = function(init) {\n\t\treturn $.addAction('inits', init);\n\t};\n\t/**\n\t * 处理html5版本subpages \n\t */\n\t$.addInit({\n\t\tname: 'iframe',\n\t\tindex: 100,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar subpages = options.subpages || [];\n\t\t\tif (!$.os.plus && subpages.length) {\n\t\t\t\t//暂时只处理单个subpage。后续可以考虑支持多个subpage\n\t\t\t\tcreateIframe(subpages[0]);\n\t\t\t}\n\t\t}\n\t});\n\tvar createIframe = function(options) {\n\t\tvar wrapper = document.createElement('div');\n\t\twrapper.className = $.className('iframe-wrapper');\n\t\tvar styles = options.styles || {};\n\t\tif (typeof styles.top !== 'string') {\n\t\t\tstyles.top = '0px';\n\t\t}\n\t\tif (typeof styles.bottom !== 'string') {\n\t\t\tstyles.bottom = '0px';\n\t\t}\n\t\twrapper.style.top = styles.top;\n\t\twrapper.style.bottom = styles.bottom;\n\t\tvar iframe = document.createElement('iframe');\n\t\tiframe.src = options.url;\n\t\tiframe.id = options.id || options.url;\n\t\tiframe.name = iframe.id;\n\t\twrapper.appendChild(iframe);\n\t\tdocument.body.appendChild(wrapper);\n\t\t//目前仅处理微信\n\t\t$.os.wechat && handleScroll(wrapper, iframe);\n\t};\n\n\tfunction handleScroll(wrapper, iframe) {\n\t\tvar key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src;\n\t\tvar scrollTop = (parseFloat(localStorage.getItem(key)) || 0);\n\t\tif (scrollTop) {\n\t\t\t(function(y) {\n\t\t\t\tiframe.onload = function() {\n\t\t\t\t\twindow.scrollTo(0, y);\n\t\t\t\t};\n\t\t\t})(scrollTop);\n\t\t}\n\t\tsetInterval(function() {\n\t\t\tvar _scrollTop = window.scrollY;\n\t\t\tif (scrollTop !== _scrollTop) {\n\t\t\t\tlocalStorage.setItem(key, _scrollTop + '');\n\t\t\t\tscrollTop = _scrollTop;\n\t\t\t}\n\t\t}, 100);\n\t};\n\t$(function() {\n\t\tvar classList = document.body.classList;\n\t\tvar os = [];\n\t\tif ($.os.ios) {\n\t\t\tos.push({\n\t\t\t\tos: 'ios',\n\t\t\t\tversion: $.os.version\n\t\t\t});\n\t\t\tclassList.add($.className('ios'));\n\t\t} else if ($.os.android) {\n\t\t\tos.push({\n\t\t\t\tos: 'android',\n\t\t\t\tversion: $.os.version\n\t\t\t});\n\t\t\tclassList.add($.className('android'));\n\t\t}\n\t\tif ($.os.wechat) {\n\t\t\tos.push({\n\t\t\t\tos: 'wechat',\n\t\t\t\tversion: $.os.wechat.version\n\t\t\t});\n\t\t\tclassList.add($.className('wechat'));\n\t\t}\n\t\tif (os.length) {\n\t\t\t$.each(os, function(index, osObj) {\n\t\t\t\tvar version = '';\n\t\t\t\tvar classArray = [];\n\t\t\t\tif (osObj.version) {\n\t\t\t\t\t$.each(osObj.version.split('.'), function(i, v) {\n\t\t\t\t\t\tversion = version + (version ? '-' : '') + v;\n\t\t\t\t\t\tclassList.add($.className(osObj.os + '-' + version));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(mui);"
  },
  {
    "path": "js/mui.init.pullrefresh.js",
    "content": "/**\n * mui.init pulldownRefresh\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.addInit({\n\t\tname: 'pullrefresh',\n\t\tindex: 1000,\n\t\thandle: function() {\n\t\t\tvar options = $.options;\n\t\t\tvar pullRefreshOptions = options.pullRefresh || {};\n\t\t\tvar hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback');\n\t\t\tvar hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback');\n\t\t\tif(hasPulldown || hasPullup) {\n\t\t\t\tvar container = pullRefreshOptions.container;\n\t\t\t\tif(container) {\n\t\t\t\t\tvar $container = $(container);\n\t\t\t\t\tif($container.length === 1) {\n\t\t\t\t\t\tif($.os.plus) { //5+环境\n\t\t\t\t\t\t\tif(hasPulldown && pullRefreshOptions.down.style == \"circle\") { //原生转圈\n\t\t\t\t\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t\t\t\t\t//这里改写$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t$.fn.pullRefresh = $.fn.pullRefresh_native;\n\t\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t} else if($.os.android) { //非原生转圈，但是Android环境\n\t\t\t\t\t\t\t\t$.plusReady(function() {\n\t\t\t\t\t\t\t\t\t//这里改写$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t$.fn.pullRefresh = $.fn.pullRefresh_native\n\t\t\t\t\t\t\t\t\tvar webview = plus.webview.currentWebview();\n\t\t\t\t\t\t\t\t\tif(window.__NWin_Enable__ === false) { //不支持多webview\n\t\t\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif(hasPullup) {\n\t\t\t\t\t\t\t\t\t\t\t//当前页面初始化pullup\n\t\t\t\t\t\t\t\t\t\t\tvar upOptions = {};\n\t\t\t\t\t\t\t\t\t\t\tupOptions.up = pullRefreshOptions.up;\n\t\t\t\t\t\t\t\t\t\t\tupOptions.webviewId = webview.id || webview.getURL();\n\t\t\t\t\t\t\t\t\t\t\t$container.pullRefresh(upOptions);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif(hasPulldown) {\n\t\t\t\t\t\t\t\t\t\t\tvar parent = webview.parent();\n\t\t\t\t\t\t\t\t\t\t\tvar id = webview.id || webview.getURL();\n\t\t\t\t\t\t\t\t\t\t\tif(parent) {\n\t\t\t\t\t\t\t\t\t\t\t\tif(!hasPullup) { //如果没有上拉加载，需要手动初始化一个默认的pullRefresh，以便当前页面容器可以调用endPulldownToRefresh等方法\n\t\t\t\t\t\t\t\t\t\t\t\t\t$container.pullRefresh({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebviewId: id\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tvar downOptions = {\n\t\t\t\t\t\t\t\t\t\t\t\t\twebviewId: id//子页面id\n\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\tdownOptions.down = $.extend({}, pullRefreshOptions.down);\n\t\t\t\t\t\t\t\t\t\t\t\tdownOptions.down.callback = '_CALLBACK';\n\t\t\t\t\t\t\t\t\t\t\t\t//改写父页面的$.fn.pullRefresh\n\t\t\t\t\t\t\t\t\t\t\t\tparent.evalJS(\"mui.fn.pullRefresh=mui.fn.pullRefresh_native\");\n\t\t\t\t\t\t\t\t\t\t\t\t//父页面初始化pulldown\n\t\t\t\t\t\t\t\t\t\t\t\tparent.evalJS(\"mui&&mui(document.querySelector('.mui-content')).pullRefresh('\" + JSON.stringify(downOptions) + \"')\");\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else { //非原生转圈，iOS环境\n\t\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$container.pullRefresh(pullRefreshOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(mui);"
  },
  {
    "path": "js/mui.js",
    "content": "/**\n * MUI核心JS\n * @type _L4.$|Function\n */\nvar mui = (function(document, undefined) {\n\tvar readyRE = /complete|loaded|interactive/;\n\tvar idSelectorRE = /^#([\\w-]+)$/;\n\tvar classSelectorRE = /^\\.([\\w-]+)$/;\n\tvar tagSelectorRE = /^[\\w-]+$/;\n\tvar translateRE = /translate(?:3d)?\\((.+?)\\)/;\n\tvar translateMatrixRE = /matrix(3d)?\\((.+?)\\)/;\n\n\tvar $ = function(selector, context) {\n\t\tcontext = context || document;\n\t\tif (!selector)\n\t\t\treturn wrap();\n\t\tif (typeof selector === 'object')\n\t\t\tif ($.isArrayLike(selector)) {\n\t\t\t\treturn wrap($.slice.call(selector), null);\n\t\t\t} else {\n\t\t\t\treturn wrap([selector], null);\n\t\t\t}\n\t\tif (typeof selector === 'function')\n\t\t\treturn $.ready(selector);\n\t\tif (typeof selector === 'string') {\n\t\t\ttry {\n\t\t\t\tselector = selector.trim();\n\t\t\t\tif (idSelectorRE.test(selector)) {\n\t\t\t\t\tvar found = document.getElementById(RegExp.$1);\n\t\t\t\t\treturn wrap(found ? [found] : []);\n\t\t\t\t}\n\t\t\t\treturn wrap($.qsa(selector, context), selector);\n\t\t\t} catch (e) {}\n\t\t}\n\t\treturn wrap();\n\t};\n\n\tvar wrap = function(dom, selector) {\n\t\tdom = dom || [];\n\t\tObject.setPrototypeOf(dom, $.fn);\n\t\tdom.selector = selector || '';\n\t\treturn dom;\n\t};\n\n\t$.uuid = 0;\n\n\t$.data = {};\n\t/**\n\t * extend(simple)\n\t * @param {type} target\n\t * @param {type} source\n\t * @param {type} deep\n\t * @returns {unresolved}\n\t */\n\t$.extend = function() { //from jquery2\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\tif (typeof target !== \"object\" && !$.isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\t\t\tif ((options = arguments[i]) != null) {\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\tif (target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && $.isArray(src) ? src : [];\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && $.isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttarget[name] = $.extend(deep, clone, copy);\n\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t};\n\t/**\n\t * mui noop(function)\n\t */\n\t$.noop = function() {};\n\t/**\n\t * mui slice(array)\n\t */\n\t$.slice = [].slice;\n\t/**\n\t * mui filter(array)\n\t */\n\t$.filter = [].filter;\n\n\t$.type = function(obj) {\n\t\treturn obj == null ? String(obj) : class2type[{}.toString.call(obj)] || \"object\";\n\t};\n\t/**\n\t * mui isArray\n\t */\n\t$.isArray = Array.isArray ||\n\t\tfunction(object) {\n\t\t\treturn object instanceof Array;\n\t\t};\n\t/**\n\t * mui isArrayLike \n\t * @param {Object} obj\n\t */\n\t$.isArrayLike = function(obj) {\n\t\tvar length = !!obj && \"length\" in obj && obj.length;\n\t\tvar type = $.type(obj);\n\t\tif (type === \"function\" || $.isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t};\n\t/**\n\t * mui isWindow(需考虑obj为undefined的情况)\n\t */\n\t$.isWindow = function(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\t/**\n\t * mui isObject\n\t */\n\t$.isObject = function(obj) {\n\t\treturn $.type(obj) === \"object\";\n\t};\n\t/**\n\t * mui isPlainObject\n\t */\n\t$.isPlainObject = function(obj) {\n\t\treturn $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype;\n\t};\n\t/**\n\t * mui isEmptyObject\n\t * @param {Object} o\n\t */\n\t$.isEmptyObject = function(o) {\n\t\tfor (var p in o) {\n\t\t\tif (p !== undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t/**\n\t * mui isFunction\n\t */\n\t$.isFunction = function(value) {\n\t\treturn $.type(value) === \"function\";\n\t};\n\t/**\n\t * mui querySelectorAll\n\t * @param {type} selector\n\t * @param {type} context\n\t * @returns {Array}\n\t */\n\t$.qsa = function(selector, context) {\n\t\tcontext = context || document;\n\t\treturn $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector));\n\t};\n\t/**\n\t * ready(DOMContentLoaded)\n\t * @param {type} callback\n\t * @returns {_L6.$}\n\t */\n\t$.ready = function(callback) {\n\t\tif (readyRE.test(document.readyState)) {\n\t\t\tcallback($);\n\t\t} else {\n\t\t\tdocument.addEventListener('DOMContentLoaded', function() {\n\t\t\t\tcallback($);\n\t\t\t}, false);\n\t\t}\n\t\treturn this;\n\t};\n\t/**\n\t * 将 fn 缓存一段时间后, 再被调用执行\n\t * 此方法为了避免在 ms 段时间内, 执行 fn 多次. 常用于 resize , scroll , mousemove 等连续性事件中;\n\t * 当 ms 设置为 -1, 表示立即执行 fn, 即和直接调用 fn 一样;\n\t * 调用返回函数的 stop 停止最后一次的 buffer 效果\n\t * @param {Object} fn\n\t * @param {Object} ms\n\t * @param {Object} context\n\t */\n\t$.buffer = function(fn, ms, context) {\n\t\tvar timer;\n\t\tvar lastStart = 0;\n\t\tvar lastEnd = 0;\n\t\tvar ms = ms || 150;\n\n\t\tfunction run() {\n\t\t\tif (timer) {\n\t\t\t\ttimer.cancel();\n\t\t\t\ttimer = 0;\n\t\t\t}\n\t\t\tlastStart = $.now();\n\t\t\tfn.apply(context || this, arguments);\n\t\t\tlastEnd = $.now();\n\t\t}\n\n\t\treturn $.extend(function() {\n\t\t\tif (\n\t\t\t\t(!lastStart) || // 从未运行过\n\t\t\t\t(lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒\n\t\t\t\t(lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成，后8*ms毫秒\n\t\t\t) {\n\t\t\t\trun.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tif (timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t}\n\t\t\t\ttimer = $.later(run, ms, null, $.slice.call(arguments));\n\t\t\t}\n\t\t}, {\n\t\t\tstop: function() {\n\t\t\t\tif (timer) {\n\t\t\t\t\ttimer.cancel();\n\t\t\t\t\ttimer = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t * each\n\t * @param {type} elements\n\t * @param {type} callback\n\t * @returns {_L8.$}\n\t */\n\t$.each = function(elements, callback, hasOwnProperty) {\n\t\tif (!elements) {\n\t\t\treturn this;\n\t\t}\n\t\tif (typeof elements.length === 'number') {\n\t\t\t[].every.call(elements, function(el, idx) {\n\t\t\t\treturn callback.call(el, idx, el) !== false;\n\t\t\t});\n\t\t} else {\n\t\t\tfor (var key in elements) {\n\t\t\t\tif (hasOwnProperty) {\n\t\t\t\t\tif (elements.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\t$.focus = function(element) {\n\t\tif ($.os.ios) {\n\t\t\tsetTimeout(function() {\n\t\t\t\telement.focus();\n\t\t\t}, 10);\n\t\t} else {\n\t\t\telement.focus();\n\t\t}\n\t};\n\t/**\n\t * trigger event\n\t * @param {type} element\n\t * @param {type} eventType\n\t * @param {type} eventData\n\t * @returns {_L8.$}\n\t */\n\t$.trigger = function(element, eventType, eventData) {\n\t\telement.dispatchEvent(new CustomEvent(eventType, {\n\t\t\tdetail: eventData,\n\t\t\tbubbles: true,\n\t\t\tcancelable: true\n\t\t}));\n\t\treturn this;\n\t};\n\t/**\n\t * getStyles\n\t * @param {type} element\n\t * @param {type} property\n\t * @returns {styles}\n\t */\n\t$.getStyles = function(element, property) {\n\t\tvar styles = element.ownerDocument.defaultView.getComputedStyle(element, null);\n\t\tif (property) {\n\t\t\treturn styles.getPropertyValue(property) || styles[property];\n\t\t}\n\t\treturn styles;\n\t};\n\t/**\n\t * parseTranslate\n\t * @param {type} translateString\n\t * @param {type} position\n\t * @returns {Object}\n\t */\n\t$.parseTranslate = function(translateString, position) {\n\t\tvar result = translateString.match(translateRE || '');\n\t\tif (!result || !result[1]) {\n\t\t\tresult = ['', '0,0,0'];\n\t\t}\n\t\tresult = result[1].split(\",\");\n\t\tresult = {\n\t\t\tx: parseFloat(result[0]),\n\t\t\ty: parseFloat(result[1]),\n\t\t\tz: parseFloat(result[2])\n\t\t};\n\t\tif (position && result.hasOwnProperty(position)) {\n\t\t\treturn result[position];\n\t\t}\n\t\treturn result;\n\t};\n\t/**\n\t * parseTranslateMatrix\n\t * @param {type} translateString\n\t * @param {type} position\n\t * @returns {Object}\n\t */\n\t$.parseTranslateMatrix = function(translateString, position) {\n\t\tvar matrix = translateString.match(translateMatrixRE);\n\t\tvar is3D = matrix && matrix[1];\n\t\tif (matrix) {\n\t\t\tmatrix = matrix[2].split(\",\");\n\t\t\tif (is3D === \"3d\")\n\t\t\t\tmatrix = matrix.slice(12, 15);\n\t\t\telse {\n\t\t\t\tmatrix.push(0);\n\t\t\t\tmatrix = matrix.slice(4, 7);\n\t\t\t}\n\t\t} else {\n\t\t\tmatrix = [0, 0, 0];\n\t\t}\n\t\tvar result = {\n\t\t\tx: parseFloat(matrix[0]),\n\t\t\ty: parseFloat(matrix[1]),\n\t\t\tz: parseFloat(matrix[2])\n\t\t};\n\t\tif (position && result.hasOwnProperty(position)) {\n\t\t\treturn result[position];\n\t\t}\n\t\treturn result;\n\t};\n\t$.hooks = {};\n\t$.addAction = function(type, hook) {\n\t\tvar hooks = $.hooks[type];\n\t\tif (!hooks) {\n\t\t\thooks = [];\n\t\t}\n\t\thook.index = hook.index || 1000;\n\t\thooks.push(hook);\n\t\thooks.sort(function(a, b) {\n\t\t\treturn a.index - b.index;\n\t\t});\n\t\t$.hooks[type] = hooks;\n\t\treturn $.hooks[type];\n\t};\n\t$.doAction = function(type, callback) {\n\t\tif ($.isFunction(callback)) { //指定了callback\n\t\t\t$.each($.hooks[type], callback);\n\t\t} else { //未指定callback，直接执行\n\t\t\t$.each($.hooks[type], function(index, hook) {\n\t\t\t\treturn !hook.handle();\n\t\t\t});\n\t\t}\n\t};\n\t/**\n\t * setTimeout封装\n\t * @param {Object} fn\n\t * @param {Object} when\n\t * @param {Object} context\n\t * @param {Object} data\n\t */\n\t$.later = function(fn, when, context, data) {\n\t\twhen = when || 0;\n\t\tvar m = fn;\n\t\tvar d = data;\n\t\tvar f;\n\t\tvar r;\n\n\t\tif (typeof fn === 'string') {\n\t\t\tm = context[fn];\n\t\t}\n\n\t\tf = function() {\n\t\t\tm.apply(context, $.isArray(d) ? d : [d]);\n\t\t};\n\n\t\tr = setTimeout(f, when);\n\n\t\treturn {\n\t\t\tid: r,\n\t\t\tcancel: function() {\n\t\t\t\tclearTimeout(r);\n\t\t\t}\n\t\t};\n\t};\n\t$.now = Date.now || function() {\n\t\treturn +new Date();\n\t};\n\tvar class2type = {};\n\t$.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) {\n\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t});\n\tif (window.JSON) {\n\t\t$.parseJSON = JSON.parse;\n\t}\n\t/**\n\t * $.fn\n\t */\n\t$.fn = {\n\t\teach: function(callback) {\n\t\t\t[].every.call(this, function(el, idx) {\n\t\t\t\treturn callback.call(el, idx, el) !== false;\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t};\n\n\t/**\n\t * 兼容 AMD 模块\n\t **/\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine('mui', [], function() {\n\t\t\treturn $;\n\t\t});\n\t}\n\n\treturn $;\n})(document);\n//window.mui = mui;\n//'$' in window || (window.$ = mui);"
  },
  {
    "path": "js/mui.jsonp.js",
    "content": "/**\n * MUI JSONP\n * varstion 1.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, win, doc) {\n\n\tvar callbackIndex = 0;\n\n\t//生成回调函数名\n\tvar createCallbackName = function() {\n\t\treturn 'mui_jsonp_callback_' + (callbackIndex++);\n\t};\n\n\tvar container = doc.body;\n\n\t//导入 script 元素\n\tvar importScript = function(url) {\n\t\tvar element = doc.createElement('script');\n\t\telement.src = url;\n\t\telement.async = true;\n\t\telement.defer = true;\n\t\tcontainer.appendChild(element);\n\t\treturn element;\n\t};\n\n\t//转换 URL，JSONP 只支持 get 方式的 queryString ,需将 data 拼入 url\n\tvar convertUrl = function(url, data, jsonpParam, callbacnName) {\n\t\tif (jsonpParam) {\n\t\t\turl = url.replace(jsonpParam + '=?', jsonpParam + '=' + callbacnName);\n\t\t} else {\n\t\t\tdata['callback'] = callbacnName;\n\t\t}\n\t\tvar buffer = [];\n\t\tfor (var key in data) {\n\t\t\tbuffer.push(key + '=' + encodeURIComponent(data[key]));\n\t\t}\n\t\treturn url + (url.indexOf('?') > -1 ? '&' : '?') + buffer.join('&');\n\t};\n\n\t//获取 QueryString\n\tvar getQueryString = function(url) {\n\t\turl = url || location.search;\n\t\tvar splitIndex = url.indexOf('?');\n\t\tvar queryString = url.substr(splitIndex + 1);\n\t\tvar paramArray = queryString.split('&');\n\t\tvar result = {};\n\t\tfor (var i in paramArray) {\n\t\t\tvar params = paramArray[i].split('=');\n\t\t\tresult[params[0]] = params[1];\n\t\t}\n\t\treturn result;\n\t}\n\n\t//获取将传递给服务器的回调函数的请求参数名\n\tvar getJSONPParam = function(url) {\n\t\tvar query = getQueryString(url);\n\t\tfor (var name in query) {\n\t\t\tif (query[name] === '?') {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\t/**\n\t * @description JSONP 方法\n\t * @param {String} url  将请求的地址\n\t * @param {Object} data 请求参数数据\n\t * @param {Function} callback 请求完成时回调函数\n\t * @return {mui} mui 对象自身\n\t **/\n\t$.getJSONP = function(url, data, callback) {\n\t\tif (!url) {\n\t\t\tthrow \"mui.getJSONP URL error!\";\n\t\t}\n\t\tvar jsonpParam = getJSONPParam(url);\n\t\tvar callbackName = createCallbackName();\n\t\tdata = data || {};\n\t\tcallback = callback || $.noop;\n\t\turl = convertUrl(url, data, jsonpParam, callbackName);\n\t\tvar scriptElement = null;\n\t\twin[callbackName] = function(result) {\n\t\t\tcallback(result);\n\t\t\tif (scriptElement) {\n\t\t\t\tcontainer.removeChild(scriptElement);\n\t\t\t}\n\t\t\twin[callbackName] = null;\n\t\t\tdelete win[callbackName];\n\t\t};\n\t\tscriptElement = importScript(url);\n\t\treturn $;\n\t};\n\n\t//为原 mui.getJSON 方法添加同 jQuery.getJSON 一样的 JSONP 支持\n\t$.__getJSON = $.getJSON;\n\t$.getJSON = function(url, data, callback) {\n\t\tvar isJSONP = getJSONPParam(url) != null;\n\t\tif (isJSONP) {\n\t\t\treturn $.getJSONP(url, data, callback);\n\t\t} else {\n\t\t\treturn $.__getJSON(url, data, callback);\n\t\t}\n\t};\n\n}(mui, window, document));"
  },
  {
    "path": "js/mui.layout.js",
    "content": "/**\n * mui layout(offset[,position,width,height...])\n * @param {type} $\n * @param {type} window\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, undefined) {\n\t$.offset = function(element) {\n\t\tvar box = {\n\t\t\ttop : 0,\n\t\t\tleft : 0\n\t\t};\n\t\tif ( typeof element.getBoundingClientRect !== undefined) {\n\t\t\tbox = element.getBoundingClientRect();\n\t\t}\n\t\treturn {\n\t\t\ttop : box.top + window.pageYOffset - element.clientTop,\n\t\t\tleft : box.left + window.pageXOffset - element.clientLeft\n\t\t};\n\t};\n})(mui, window); "
  },
  {
    "path": "js/mui.namespace.js",
    "content": "/**\n * mui namespace(optimization)\n * @param {type} $\n * @returns {undefined}\n */\n(function($) {\n\t$.namespace = 'mui';\n\t$.classNamePrefix = $.namespace + '-';\n\t$.classSelectorPrefix = '.' + $.classNamePrefix;\n\t/**\n\t * 返回正确的className\n\t * @param {type} className\n\t * @returns {String}\n\t */\n\t$.className = function(className) {\n\t\treturn $.classNamePrefix + className;\n\t};\n\t/**\n\t * 返回正确的classSelector\n\t * @param {type} classSelector\n\t * @returns {String}\n\t */\n\t$.classSelector = function(classSelector) {\n\t\treturn classSelector.replace(/\\./g, $.classSelectorPrefix);\n\t};\n\t/**\n         * 返回正确的eventName\n         * @param {type} event\n         * @param {type} module\n         * @returns {String}\n         */\n\t$.eventName = function(event, module) {\n\t\treturn event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : '');\n\t};\n})(mui);\n"
  },
  {
    "path": "js/mui.number.js",
    "content": "/**\n * 数字输入框\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($) {\n\n    var touchSupport = ('ontouchstart' in document);\n    var tapEventName = touchSupport ? 'tap' : 'click';\n    var changeEventName = 'change';\n    var holderClassName = $.className('numbox');\n    var plusClassSelector = $.classSelector('.btn-numbox-plus,.numbox-btn-plus');\n    var minusClassSelector = $.classSelector('.btn-numbox-minus,.numbox-btn-minus');\n    var inputClassSelector = $.classSelector('.input-numbox,.numbox-input');\n\n    var Numbox = $.Numbox = $.Class.extend({\n        /**\n         * 构造函数\n         **/\n        init: function(holder, options) {\n            var self = this;\n            if (!holder) {\n                throw \"构造 numbox 时缺少容器元素\";\n            }\n            self.holder = holder;\n            options = options || {};\n            options.step = parseInt(options.step || 1);\n            self.options = options;\n            self.input = $.qsa(inputClassSelector, self.holder)[0];\n            self.plus = $.qsa(plusClassSelector, self.holder)[0];\n            self.minus = $.qsa(minusClassSelector, self.holder)[0];\n            self.checkValue();\n            self.initEvent();\n        },\n        /**\n         * 初始化事件绑定\n         **/\n        initEvent: function() {\n            var self = this;\n            self.plus.addEventListener(tapEventName, function(event) {\n                var val = parseInt(self.input.value) + self.options.step;\n                self.input.value = val.toString();\n                $.trigger(self.input, changeEventName, null);\n            });\n            self.minus.addEventListener(tapEventName, function(event) {\n                var val = parseInt(self.input.value) - self.options.step;\n                self.input.value = val.toString();\n                $.trigger(self.input, changeEventName, null);\n            });\n            self.input.addEventListener(changeEventName, function(event) {\n                self.checkValue();\n                var val = parseInt(self.input.value);\n                //触发顶层容器\n                $.trigger(self.holder, changeEventName, {\n                    value: val\n                });\n            });\n        },\n        /**\n         * 获取当前值\n         **/\n        getValue: function() {\n            var self = this;\n            return parseInt(self.input.value);\n        },\n        /**\n         * 验证当前值是法合法\n         **/\n        checkValue: function() {\n            var self = this;\n            var val = self.input.value;\n            if (val == null || val == '' || isNaN(val)) {\n                self.input.value = self.options.min || 0;\n                self.minus.disabled = self.options.min != null;\n            } else {\n                var val = parseInt(val);\n                if (self.options.max != null && !isNaN(self.options.max) && val >= parseInt(self.options.max)) {\n                    val = self.options.max;\n                    self.plus.disabled = true;\n                } else {\n                    self.plus.disabled = false;\n                }\n                if (self.options.min != null && !isNaN(self.options.min) && val <= parseInt(self.options.min)) {\n                    val = self.options.min;\n                    self.minus.disabled = true;\n                } else {\n                    self.minus.disabled = false;\n                }\n                self.input.value = val;\n            }\n        },\n        /**\n         * 更新选项\n         **/\n        setOption: function(name, value) {\n            var self = this;\n            self.options[name] = value;\n        },\n        /**\n         * 动态设置新值\n         **/\n        setValue: function(value) {\n            this.input.value = value;\n            this.checkValue();\n        }\n    });\n\n    $.fn.numbox = function(options) {\n        var instanceArray = [];\n        //遍历选择的元素\n        this.each(function(i, element) {\n            if (element.numbox) {\n                return;\n            }\n            if (options) {\n                element.numbox = new Numbox(element, options);\n            } else {\n                var optionsText = element.getAttribute('data-numbox-options');\n                var options = optionsText ? JSON.parse(optionsText) : {};\n                options.step = element.getAttribute('data-numbox-step') || options.step;\n                options.min = element.getAttribute('data-numbox-min') || options.min;\n                options.max = element.getAttribute('data-numbox-max') || options.max;\n                element.numbox = new Numbox(element, options);\n            }\n        });\n        return this[0] ? this[0].numbox : null;\n    }\n\n    //自动处理 class='mui-locker' 的 dom\n    $.ready(function() {\n        $('.' + holderClassName).numbox();\n    });\n\n}(mui));"
  },
  {
    "path": "js/mui.offcanvas.js",
    "content": "/**\n * off-canvas\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} action\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\tvar CLASS_OFF_CANVAS_LEFT = $.className('off-canvas-left');\n\tvar CLASS_OFF_CANVAS_RIGHT = $.className('off-canvas-right');\n\tvar CLASS_ACTION_BACKDROP = $.className('off-canvas-backdrop');\n\tvar CLASS_OFF_CANVAS_WRAP = $.className('off-canvas-wrap');\n\n\tvar CLASS_SLIDE_IN = $.className('slide-in');\n\tvar CLASS_ACTIVE = $.className('active');\n\n\n\tvar CLASS_TRANSITIONING = $.className('transitioning');\n\n\tvar SELECTOR_INNER_WRAP = $.classSelector('.inner-wrap');\n\n\n\tvar OffCanvas = $.Class.extend({\n\t\tinit: function(element, options) {\n\t\t\tthis.wrapper = this.element = element;\n\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\tthis.classList = this.wrapper.classList;\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.options = $.extend(true, {\n\t\t\t\t\tdragThresholdX: 10,\n\t\t\t\t\tscale: 0.8,\n\t\t\t\t\topacity: 0.1,\n\t\t\t\t\tpreventDefaultException: {\n\t\t\t\t\t\ttagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/\n\t\t\t\t\t},\n\t\t\t\t}, options);\n\t\t\t\tdocument.body.classList.add($.className('fullscreen')); //fullscreen\n\t\t\t\tthis.refresh();\n\t\t\t\tthis.initEvent();\n\t\t\t}\n\t\t},\n\t\t_preventDefaultException: function(el, exceptions) {\n\t\t\tfor (var i in exceptions) {\n\t\t\t\tif (exceptions[i].test(el[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\trefresh: function(offCanvas) {\n\t\t\t//\t\t\toffCanvas && !offCanvas.classList.contains(CLASS_ACTIVE) && this.classList.remove(CLASS_ACTIVE);\n\t\t\tthis.slideIn = this.classList.contains(CLASS_SLIDE_IN);\n\t\t\tthis.scalable = this.classList.contains($.className('scalable')) && !this.slideIn;\n\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\t//\t\t\t!offCanvas && this.scroller.classList.remove(CLASS_TRANSITIONING);\n\t\t\t//\t\t\t!offCanvas && this.scroller.setAttribute('style', '');\n\t\t\tthis.offCanvasLefts = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_LEFT);\n\t\t\tthis.offCanvasRights = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_RIGHT);\n\t\t\tif (offCanvas) {\n\t\t\t\tif (offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {\n\t\t\t\t\tthis.offCanvasLeft = offCanvas;\n\t\t\t\t} else if (offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {\n\t\t\t\t\tthis.offCanvasRight = offCanvas;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.offCanvasRight = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT);\n\t\t\t\tthis.offCanvasLeft = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT);\n\t\t\t}\n\t\t\tthis.offCanvasRightWidth = this.offCanvasLeftWidth = 0;\n\t\t\tthis.offCanvasLeftSlideIn = this.offCanvasRightSlideIn = false;\n\t\t\tif (this.offCanvasRight) {\n\t\t\t\tthis.offCanvasRightWidth = this.offCanvasRight.offsetWidth;\n\t\t\t\tthis.offCanvasRightSlideIn = this.slideIn && (this.offCanvasRight.parentNode === this.wrapper);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.classList.remove(CLASS_ACTIVE);\n\t\t\t\t//\t\t\t\tthis.offCanvasRight.setAttribute('style', '');\n\t\t\t}\n\t\t\tif (this.offCanvasLeft) {\n\t\t\t\tthis.offCanvasLeftWidth = this.offCanvasLeft.offsetWidth;\n\t\t\t\tthis.offCanvasLeftSlideIn = this.slideIn && (this.offCanvasLeft.parentNode === this.wrapper);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.classList.remove(CLASS_ACTIVE);\n\t\t\t\t//\t\t\t\tthis.offCanvasLeft.setAttribute('style', '');\n\t\t\t}\n\t\t\tthis.backdrop = this.scroller.querySelector('.' + CLASS_ACTION_BACKDROP);\n\n\t\t\tthis.options.dragThresholdX = this.options.dragThresholdX || 10;\n\n\t\t\tthis.visible = false;\n\t\t\tthis.startX = null;\n\t\t\tthis.lastX = null;\n\t\t\tthis.offsetX = null;\n\t\t\tthis.lastTranslateX = null;\n\t\t},\n\t\thandleEvent: function(e) {\n\t\t\tswitch (e.type) {\n\t\t\t\tcase $.EVENT_START:\n\t\t\t\t\te.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'webkitTransitionEnd': //有个bug需要处理，需要考虑假设没有触发webkitTransitionEnd的情况\n\t\t\t\t\tif (e.target === this.scroller) {\n\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'drag':\n\t\t\t\t\tvar detail = e.detail;\n\t\t\t\t\tif (!this.startX) {\n\t\t\t\t\t\tthis.startX = detail.center.x;\n\t\t\t\t\t\tthis.lastX = this.startX;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastX = detail.center.x;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.isDragging && Math.abs(this.lastX - this.startX) > this.options.dragThresholdX && (detail.direction === 'left' || (detail.direction === 'right'))) {\n\t\t\t\t\t\tif (this.slideIn) {\n\t\t\t\t\t\t\tthis.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);\n\t\t\t\t\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\tif (this.offCanvasRight && this.offCanvasRight.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (detail.direction === 'left' && this.offCanvasRight) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t} else if (detail.direction === 'right' && this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.scroller = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t\t\t\t\tif (detail.direction === 'left') {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (detail.direction === 'right') {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\t\t\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.offCanvas && this.scroller) {\n\t\t\t\t\t\t\tthis.startX = this.lastX;\n\t\t\t\t\t\t\tthis.isDragging = true;\n\n\t\t\t\t\t\t\t$.gestures.session.lockDirection = true; //锁定方向\n\t\t\t\t\t\t\t$.gestures.session.startDirection = detail.direction;\n\n\t\t\t\t\t\t\tthis.offCanvas.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\t\t\tthis.scroller.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\t\t\tthis.offsetX = this.getTranslateX();\n\t\t\t\t\t\t\tthis._initOffCanvasVisible();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.isDragging) {\n\t\t\t\t\t\tthis.updateTranslate(this.offsetX + (this.lastX - this.startX));\n\t\t\t\t\t\tdetail.gesture.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tif (this.isDragging) {\n\t\t\t\t\t\tvar detail = e.detail;\n\t\t\t\t\t\tvar direction = detail.direction;\n\t\t\t\t\t\tthis.isDragging = false;\n\t\t\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\t\t\tvar ratio = 0;\n\t\t\t\t\t\tvar x = this.getTranslateX();\n\t\t\t\t\t\tif (!this.slideIn) {\n\t\t\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 0) {\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t\tthis._dispatchEvent(); //此处不触发webkitTransitionEnd,所以手动dispatch\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (direction === 'right' && ratio >= 0 && (ratio >= 0.5 || detail.swipe)) { //右滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio < 0 && (ratio > -0.5 || detail.swipe)) { //右滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && ratio < 0.5) { //右滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio < 0.5) { //右滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio <= 0 && (ratio <= -0.5 || detail.swipe)) { //左滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio > 0 && (ratio <= 0.5 || detail.swipe)) { //左滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio < 0 && ratio >= -0.5) { //左滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio > 0.5) { //左滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else { //默认关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 1 || ratio === -1) { //此处不触发webkitTransitionEnd,所以手动dispatch\n\t\t\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (direction === 'right' && ratio <= 0 && (ratio >= -0.5 || detail.swipe)) { //右滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && (ratio >= 0.5 || detail.swipe)) { //右滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio <= -0.5) { //右滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'right' && ratio > 0 && ratio <= 0.5) { //右滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= 0 && (ratio <= 0.5 || detail.swipe)) { //左滑打开\n\t\t\t\t\t\t\t\tthis.openPercentage(-100);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio < 0 && (ratio <= -0.5 || detail.swipe)) { //左滑关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= 0.5) { //左滑还原关闭\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t} else if (direction === 'left' && ratio >= -0.5 && ratio < 0) { //左滑还原打开\n\t\t\t\t\t\t\t\tthis.openPercentage(100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.openPercentage(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ratio === 1 || ratio === -1 || ratio === 0) {\n\t\t\t\t\t\t\t\tthis._dispatchEvent();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t_dispatchEvent: function() {\n\t\t\tif (this.classList.contains(CLASS_ACTIVE)) {\n\t\t\t\t$.trigger(this.wrapper, 'shown', this);\n\t\t\t} else {\n\t\t\t\t$.trigger(this.wrapper, 'hidden', this);\n\t\t\t}\n\t\t},\n\t\t_initOffCanvasVisible: function() {\n\t\t\tif (!this.visible) {\n\t\t\t\tthis.visible = true;\n\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\tthis.offCanvasLeft.style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\tthis.offCanvasRight.style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinitEvent: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.backdrop) {\n\t\t\t\tself.backdrop.addEventListener('tap', function(e) {\n\t\t\t\t\tself.close();\n\t\t\t\t\te.detail.gesture.preventDefault();\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.classList.contains($.className('draggable'))) {\n\t\t\t\tthis.wrapper.addEventListener($.EVENT_START, this); //临时处理\n\t\t\t\tthis.wrapper.addEventListener('drag', this);\n\t\t\t\tthis.wrapper.addEventListener('dragend', this);\n\t\t\t}\n\t\t\tthis.wrapper.addEventListener('webkitTransitionEnd', this);\n\t\t},\n\t\topenPercentage: function(percentage) {\n\t\t\tvar p = percentage / 100;\n\t\t\tif (!this.slideIn) {\n\t\t\t\tif (this.offCanvasLeft && percentage >= 0) {\n\t\t\t\t\tthis.updateTranslate(this.offCanvasLeftWidth * p);\n\t\t\t\t\tthis.offCanvasLeft.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t} else if (this.offCanvasRight && percentage <= 0) {\n\t\t\t\t\tthis.updateTranslate(this.offCanvasRightWidth * p);\n\t\t\t\t\tthis.offCanvasRight.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tthis.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t} else {\n\t\t\t\tif (this.offCanvasLeft && percentage >= 0) {\n\t\t\t\t\tp = p === 0 ? -1 : 0;\n\t\t\t\t\tthis.updateTranslate(this.offCanvasLeftWidth * p);\n\t\t\t\t\tthis.offCanvasLeft.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t} else if (this.offCanvasRight && percentage <= 0) {\n\t\t\t\t\tp = p === 0 ? 1 : 0;\n\t\t\t\t\tthis.updateTranslate(this.offCanvasRightWidth * p);\n\t\t\t\t\tthis.offCanvasRight.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tthis.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t}\n\t\t},\n\t\tupdateTranslate: function(x) {\n\t\t\tif (x !== this.lastTranslateX) {\n\t\t\t\tif (!this.slideIn) {\n\t\t\t\t\tif ((!this.offCanvasLeft && x > 0) || (!this.offCanvasRight && x < 0)) {\n\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.leftShowing && x > this.offCanvasLeftWidth) {\n\t\t\t\t\t\tthis.setTranslateX(this.offCanvasLeftWidth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.rightShowing && x < -this.offCanvasRightWidth) {\n\t\t\t\t\t\tthis.setTranslateX(-this.offCanvasRightWidth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setTranslateX(x);\n\t\t\t\t\tif (x >= 0) {\n\t\t\t\t\t\tthis.leftShowing = true;\n\t\t\t\t\t\tthis.rightShowing = false;\n\t\t\t\t\t\tif (x > 0) {\n\t\t\t\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t$.each(this.offCanvasLefts, function(index, offCanvas) {\n\t\t\t\t\t\t\t\t\tif (offCanvas === this.offCanvasLeft) {\n\t\t\t\t\t\t\t\t\t\tthis.offCanvasLeft.style.zIndex = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = -1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}.bind(this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\t\t\t\tthis.offCanvasRight.style.zIndex = -1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.rightShowing = true;\n\t\t\t\t\t\tthis.leftShowing = false;\n\t\t\t\t\t\tif (this.offCanvasRight) {\n\t\t\t\t\t\t\t$.each(this.offCanvasRights, function(index, offCanvas) {\n\t\t\t\t\t\t\t\tif (offCanvas === this.offCanvasRight) {\n\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\toffCanvas.style.zIndex = -1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}.bind(this));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.offCanvasLeft) {\n\t\t\t\t\t\t\tthis.offCanvasLeft.style.zIndex = -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x > this.offCanvasRightWidth) {\n\t\t\t\t\t\t\tthis.setTranslateX(this.offCanvasRightWidth);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (x > 0) {\n\t\t\t\t\t\t\tthis.setTranslateX(0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x < -this.offCanvasLeftWidth) {\n\t\t\t\t\t\t\tthis.setTranslateX(-this.offCanvasLeftWidth);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.setTranslateX(x);\n\t\t\t\t}\n\t\t\t\tthis.lastTranslateX = x;\n\t\t\t}\n\t\t},\n\t\tsetTranslateX: $.animationFrame(function(x) {\n\t\t\tif (this.scroller) {\n\t\t\t\tif (this.scalable && this.offCanvas.parentNode === this.wrapper) {\n\t\t\t\t\tvar percent = Math.abs(x) / this.offCanvasWidth;\n\t\t\t\t\tvar zoomOutScale = 1 - (1 - this.options.scale) * percent;\n\t\t\t\t\tvar zoomInScale = this.options.scale + (1 - this.options.scale) * percent;\n\t\t\t\t\tvar zoomOutOpacity = 1 - (1 - this.options.opacity) * percent;\n\t\t\t\t\tvar zoomInOpacity = this.options.opacity + (1 - this.options.opacity) * percent;\n\t\t\t\t\tif (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransformOrigin = '-100%';\n\t\t\t\t\t\tthis.scroller.style.webkitTransformOrigin = 'left';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransformOrigin = '200%';\n\t\t\t\t\t\tthis.scroller.style.webkitTransformOrigin = 'right';\n\t\t\t\t\t}\n\t\t\t\t\tthis.offCanvas.style.opacity = zoomInOpacity;\n\t\t\t\t\tthis.offCanvas.style.webkitTransform = 'translate3d(0,0,0) scale(' + zoomInScale + ')';\n\t\t\t\t\tthis.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0) scale(' + zoomOutScale + ')';\n\t\t\t\t} else {\n\t\t\t\t\tif (this.slideIn) {\n\t\t\t\t\t\tthis.offCanvas.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}),\n\t\tgetTranslateX: function() {\n\t\t\tif (this.offCanvas) {\n\t\t\t\tvar scroller = this.slideIn ? this.offCanvas : this.scroller;\n\t\t\t\tvar result = $.parseTranslateMatrix($.getStyles(scroller, 'webkitTransform'));\n\t\t\t\treturn (result && result.x) || 0;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\tisShown: function(direction) {\n\t\t\tvar shown = false;\n\t\t\tif (!this.slideIn) {\n\t\t\t\tvar x = this.getTranslateX();\n\t\t\t\tif (direction === 'right') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x < 0;\n\t\t\t\t} else if (direction === 'left') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x > 0;\n\t\t\t\t} else {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && x !== 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (direction === 'left') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);\n\t\t\t\t} else if (direction === 'right') {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE);\n\t\t\t\t} else {\n\t\t\t\t\tshown = this.classList.contains(CLASS_ACTIVE) && (this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn shown;\n\t\t},\n\t\tclose: function() {\n\t\t\tthis._initOffCanvasVisible();\n\t\t\tthis.offCanvas = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);\n\t\t\tthis.offCanvasWidth = this.offCanvas.offsetWidth;\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.offCanvas.offsetHeight;\n\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.openPercentage(0);\n\t\t\t}\n\t\t},\n\t\tshow: function(direction) {\n\t\t\tthis._initOffCanvasVisible();\n\t\t\tif (this.isShown(direction)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!direction) {\n\t\t\t\tdirection = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT) ? 'right' : 'left';\n\t\t\t}\n\t\t\tif (direction === 'right') {\n\t\t\t\tthis.offCanvas = this.offCanvasRight;\n\t\t\t\tthis.offCanvasWidth = this.offCanvasRightWidth;\n\t\t\t} else {\n\t\t\t\tthis.offCanvas = this.offCanvasLeft;\n\t\t\t\tthis.offCanvasWidth = this.offCanvasLeftWidth;\n\t\t\t}\n\t\t\tif (this.scroller) {\n\t\t\t\tthis.offCanvas.offsetHeight;\n\t\t\t\tthis.offCanvas.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.scroller.classList.add(CLASS_TRANSITIONING);\n\t\t\t\tthis.openPercentage(direction === 'left' ? 100 : -100);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\ttoggle: function(directionOrOffCanvas) {\n\t\t\tvar direction = directionOrOffCanvas;\n\t\t\tif (directionOrOffCanvas && directionOrOffCanvas.classList) {\n\t\t\t\tdirection = directionOrOffCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT) ? 'left' : 'right';\n\t\t\t\tthis.refresh(directionOrOffCanvas);\n\t\t\t}\n\t\t\tif (!this.show(direction)) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t});\n\n\t//hash to offcanvas\n\tvar findOffCanvasContainer = function(target) {\n\t\tparentNode = target.parentNode;\n\t\tif (parentNode) {\n\t\t\tif (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\treturn parentNode;\n\t\t\t} else {\n\t\t\t\tparentNode = parentNode.parentNode;\n\t\t\t\tif (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\t\treturn parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\tvar offcanvas = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif (offcanvas) {\n\t\t\t\tvar container = findOffCanvasContainer(offcanvas);\n\t\t\t\tif (container) {\n\t\t\t\t\t$.targets._container = container;\n\t\t\t\t\treturn offcanvas;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 60,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\twindow.addEventListener('tap', function(e) {\n\t\tif (!$.targets.offcanvas) {\n\t\t\treturn;\n\t\t}\n\t\t//TODO 此处类型的代码后续考虑统一优化(target机制)，现在的实现费力不讨好\n\t\tvar target = e.target;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.tagName === 'A' && target.hash && target.hash === ('#' + $.targets.offcanvas.id)) {\n\t\t\t\te.detail && e.detail.gesture && e.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\t\t$($.targets._container).offCanvas().toggle($.targets.offcanvas);\n\t\t\t\t$.targets.offcanvas = $.targets._container = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\t$.fn.offCanvas = function(options) {\n\t\tvar offCanvasApis = [];\n\t\tthis.each(function() {\n\t\t\tvar offCanvasApi = null;\n\t\t\tvar self = this;\n\t\t\t//hack old version\n\t\t\tif (!self.classList.contains(CLASS_OFF_CANVAS_WRAP)) {\n\t\t\t\tself = findOffCanvasContainer(self);\n\t\t\t}\n\t\t\tvar id = self.getAttribute('data-offCanvas');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = offCanvasApi = new OffCanvas(self, options);\n\t\t\t\tself.setAttribute('data-offCanvas', id);\n\t\t\t} else {\n\t\t\t\toffCanvasApi = $.data[id];\n\t\t\t}\n\t\t\tif (options === 'show' || options === 'close' || options === 'toggle') {\n\t\t\t\toffCanvasApi.toggle();\n\t\t\t}\n\t\t\toffCanvasApis.push(offCanvasApi);\n\t\t});\n\t\treturn offCanvasApis.length === 1 ? offCanvasApis[0] : offCanvasApis;\n\t};\n\t$.ready(function() {\n\t\t$($.classSelector('.off-canvas-wrap')).offCanvas();\n\t});\n})(mui, window, document, 'offcanvas');"
  },
  {
    "path": "js/mui.popup.js",
    "content": "/**\n * Popup(alert,confirm,prompt)  \n * @param {Object} $\n * @param {Object} window\n * @param {Object} document\n */\n(function($, window, document) {\n    var CLASS_POPUP = $.className('popup');\n    var CLASS_POPUP_BACKDROP = $.className('popup-backdrop');\n    var CLASS_POPUP_IN = $.className('popup-in');\n    var CLASS_POPUP_OUT = $.className('popup-out');\n    var CLASS_POPUP_INNER = $.className('popup-inner');\n    var CLASS_POPUP_TITLE = $.className('popup-title');\n    var CLASS_POPUP_TEXT = $.className('popup-text');\n    var CLASS_POPUP_INPUT = $.className('popup-input');\n    var CLASS_POPUP_BUTTONS = $.className('popup-buttons');\n    var CLASS_POPUP_BUTTON = $.className('popup-button');\n    var CLASS_POPUP_BUTTON_BOLD = $.className('popup-button-bold');\n    var CLASS_POPUP_BACKDROP = $.className('popup-backdrop');\n    var CLASS_ACTIVE = $.className('active');\n\n    var popupStack = [];\n    var backdrop = (function() {\n        var element = document.createElement('div');\n        element.classList.add(CLASS_POPUP_BACKDROP);\n        element.addEventListener($.EVENT_MOVE, $.preventDefault);\n        element.addEventListener('webkitTransitionEnd', function() {\n            if (!this.classList.contains(CLASS_ACTIVE)) {\n                element.parentNode && element.parentNode.removeChild(element);\n            }\n        });\n        return element;\n    }());\n\n    var createInput = function(placeholder) {\n        return '<div class=\"' + CLASS_POPUP_INPUT + '\"><input type=\"text\" autofocus placeholder=\"' + (placeholder || '') + '\"/></div>';\n    };\n    var createInner = function(message, title, extra) {\n        return '<div class=\"' + CLASS_POPUP_INNER + '\"><div class=\"' + CLASS_POPUP_TITLE + '\">' + title + '</div><div class=\"' + CLASS_POPUP_TEXT + '\">' + message.replace(/\\r\\n/g, \"<br/>\").replace(/\\n/g, \"<br/>\") + '</div>' + (extra || '') + '</div>';\n    };\n    var createButtons = function(btnArray) {\n        var length = btnArray.length;\n        var btns = [];\n        for (var i = 0; i < length; i++) {\n            btns.push('<span class=\"' + CLASS_POPUP_BUTTON + (i === length - 1 ? (' ' + CLASS_POPUP_BUTTON_BOLD) : '') + '\">' + btnArray[i] + '</span>');\n        }\n        return '<div class=\"' + CLASS_POPUP_BUTTONS + '\">' + btns.join('') + '</div>';\n    };\n\n    var createPopup = function(html, callback) {\n        var popupElement = document.createElement('div');\n        popupElement.className = CLASS_POPUP;\n        popupElement.innerHTML = html;\n        var removePopupElement = function() {\n            popupElement.parentNode && popupElement.parentNode.removeChild(popupElement);\n            popupElement = null;\n        };\n        popupElement.addEventListener($.EVENT_MOVE, $.preventDefault);\n        popupElement.addEventListener('webkitTransitionEnd', function(e) {\n            if (popupElement && e.target === popupElement && popupElement.classList.contains(CLASS_POPUP_OUT)) {\n                removePopupElement();\n            }\n        });\n        popupElement.style.display = 'block';\n        document.body.appendChild(popupElement);\n        popupElement.offsetHeight;\n        popupElement.classList.add(CLASS_POPUP_IN);\n\n        if (!backdrop.classList.contains(CLASS_ACTIVE)) {\n            backdrop.style.display = 'block';\n            document.body.appendChild(backdrop);\n            backdrop.offsetHeight;\n            backdrop.classList.add(CLASS_ACTIVE);\n        }\n        var btns = $.qsa('.' + CLASS_POPUP_BUTTON, popupElement);\n        var input = popupElement.querySelector('.' + CLASS_POPUP_INPUT + ' input');\n        var popup = {\n            element: popupElement,\n            close: function(index, animate) {\n                if (popupElement) {\n                    var result = callback && callback({\n                        index: index || 0,\n                        value: input && input.value || ''\n                    });\n                    if (result === false) { //返回false则不关闭当前popup\n                        return;\n                    }\n                    if (animate !== false) {\n                        popupElement.classList.remove(CLASS_POPUP_IN);\n                        popupElement.classList.add(CLASS_POPUP_OUT);\n                    } else {\n                        removePopupElement();\n                    }\n                    popupStack.pop();\n                    //如果还有其他popup，则不remove backdrop\n                    if (popupStack.length) {\n                        popupStack[popupStack.length - 1]['show'](animate);\n                    } else {\n                        backdrop.classList.remove(CLASS_ACTIVE);\n                    }\n                }\n            }\n        };\n        var handleEvent = function(e) {\n            popup.close(btns.indexOf(e.target));\n        };\n        $(popupElement).on('tap', '.' + CLASS_POPUP_BUTTON, handleEvent);\n        if (popupStack.length) {\n            popupStack[popupStack.length - 1]['hide']();\n        }\n        popupStack.push({\n            close: popup.close,\n            show: function(animate) {\n                popupElement.style.display = 'block';\n                popupElement.offsetHeight;\n                popupElement.classList.add(CLASS_POPUP_IN);\n            },\n            hide: function() {\n                popupElement.style.display = 'none';\n                popupElement.classList.remove(CLASS_POPUP_IN);\n            }\n        });\n        return popup;\n    };\n    var createAlert = function(message, title, btnValue, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof title === 'function') {\n                callback = title;\n                type = btnValue;\n                title = null;\n                btnValue = null;\n            } else if (typeof btnValue === 'function') {\n                type = callback;\n                callback = btnValue;\n                btnValue = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示') + createButtons([btnValue || '确定']), callback);\n        }\n        return plus.nativeUI.alert(message, callback, title || '提示', btnValue || '确定');\n    };\n    var createConfirm = function(message, title, btnArray, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof title === 'function') {\n                callback = title;\n                type = btnArray;\n                title = null;\n                btnArray = null;\n            } else if (typeof btnArray === 'function') {\n                type = callback;\n                callback = btnArray;\n                btnArray = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示') + createButtons(btnArray || ['取消', '确认']), callback);\n        }\n        return plus.nativeUI.confirm(message, callback, title, btnArray || ['取消', '确认']);\n    };\n    var createPrompt = function(message, placeholder, title, btnArray, callback, type) {\n        if (typeof message === 'undefined') {\n            return;\n        } else {\n            if (typeof placeholder === 'function') {\n                callback = placeholder;\n                type = title;\n                placeholder = null;\n                title = null;\n                btnArray = null;\n            } else if (typeof title === 'function') {\n                callback = title;\n                type = btnArray;\n                title = null;\n                btnArray = null;\n            } else if (typeof btnArray === 'function') {\n                type = callback;\n                callback = btnArray;\n                btnArray = null;\n            }\n        }\n        if (!$.os.plus || type === 'div') {\n            return createPopup(createInner(message, title || '提示', createInput(placeholder)) + createButtons(btnArray || ['取消', '确认']), callback);\n        }\n        return plus.nativeUI.prompt(message, callback, title || '提示', placeholder, btnArray || ['取消', '确认']);\n    };\n    var closePopup = function() {\n        if (popupStack.length) {\n            popupStack[popupStack.length - 1]['close']();\n            return true;\n        } else {\n            return false;\n        }\n    };\n    var closePopups = function() {\n        while (popupStack.length) {\n            popupStack[popupStack.length - 1]['close']();\n        }\n    };\n\n    $.closePopup = closePopup;\n    $.closePopups = closePopups;\n    $.alert = createAlert;\n    $.confirm = createConfirm;\n    $.prompt = createPrompt;\n})(mui, window, document);"
  },
  {
    "path": "js/mui.progressbar.js",
    "content": "(function($, document) {\n\tvar CLASS_PROGRESSBAR = $.className('progressbar');\n\tvar CLASS_PROGRESSBAR_IN = $.className('progressbar-in');\n\tvar CLASS_PROGRESSBAR_OUT = $.className('progressbar-out');\n\tvar CLASS_PROGRESSBAR_INFINITE = $.className('progressbar-infinite');\n\n\tvar SELECTOR_PROGRESSBAR = $.classSelector('.progressbar');\n\n\tvar _findProgressbar = function(container) {\n\t\tcontainer = $(container || 'body');\n\t\tif (container.length === 0) return;\n\t\tcontainer = container[0];\n\t\tif (container.classList.contains(CLASS_PROGRESSBAR)) {\n\t\t\treturn container;\n\t\t}\n\t\tvar progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR);\n\t\tif (progressbars) {\n\t\t\tfor (var i = 0, len = progressbars.length; i < len; i++) {\n\t\t\t\tvar progressbar = progressbars[i];\n\t\t\t\tif (progressbar.parentNode === container) {\n\t\t\t\t\treturn progressbar;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * 创建并显示进度条 \n\t * @param {Object} container  可选，默认body，支持selector,DOM Node,mui wrapper\n\t * @param {Object} progress 可选，undefined表示循环，数字表示具体进度\n\t * @param {Object} color 可选，指定颜色样式(目前暂未提供实际样式，可暂时不暴露此参数)\n\t */\n\tvar showProgressbar = function(container, progress, color) {\n\t\tif (typeof container === 'number') {\n\t\t\tcolor = progress;\n\t\t\tprogress = container;\n\t\t\tcontainer = 'body';\n\t\t}\n\t\tcontainer = $(container || 'body');\n\t\tif (container.length === 0) return;\n\t\tcontainer = container[0];\n\t\tvar progressbar;\n\t\tif (container.classList.contains(CLASS_PROGRESSBAR)) {\n\t\t\tprogressbar = container;\n\t\t} else {\n\t\t\tvar progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR + ':not(.' + CLASS_PROGRESSBAR_OUT + ')');\n\t\t\tif (progressbars) {\n\t\t\t\tfor (var i = 0, len = progressbars.length; i < len; i++) {\n\t\t\t\t\tvar _progressbar = progressbars[i];\n\t\t\t\t\tif (_progressbar.parentNode === container) {\n\t\t\t\t\t\tprogressbar = _progressbar;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!progressbar) {\n\t\t\t\tprogressbar = document.createElement('span');\n\t\t\t\tprogressbar.className = CLASS_PROGRESSBAR + ' ' + CLASS_PROGRESSBAR_IN + (typeof progress !== 'undefined' ? '' : (' ' + CLASS_PROGRESSBAR_INFINITE)) + (color ? (' ' + CLASS_PROGRESSBAR + '-' + color) : '');\n\t\t\t\tif (typeof progress !== 'undefined') {\n\t\t\t\t\tprogressbar.innerHTML = '<span></span>';\n\t\t\t\t}\n\t\t\t\tcontainer.appendChild(progressbar);\n\t\t\t} else {\n\t\t\t\tprogressbar.classList.add(CLASS_PROGRESSBAR_IN);\n\t\t\t}\n\t\t}\n\t\tif (progress) setProgressbar(container, progress);\n\t\treturn progressbar;\n\t};\n\t/**\n\t * 关闭进度条 \n\t * @param {Object} container 可选，默认body，支持selector,DOM Node,mui wrapper\n\t */\n\tvar hideProgressbar = function(container) {\n\t\tvar progressbar = _findProgressbar(container);\n\t\tif (!progressbar) {\n\t\t\treturn;\n\t\t}\n\t\tvar classList = progressbar.classList;\n\t\tif (!classList.contains(CLASS_PROGRESSBAR_IN) || classList.contains(CLASS_PROGRESSBAR_OUT)) {\n\t\t\treturn;\n\t\t}\n\t\tclassList.remove(CLASS_PROGRESSBAR_IN);\n\t\tclassList.add(CLASS_PROGRESSBAR_OUT);\n\t\tprogressbar.addEventListener('webkitAnimationEnd', function() {\n\t\t\tprogressbar.parentNode && progressbar.parentNode.removeChild(progressbar);\n\t\t\tprogressbar = null;\n\t\t});\n\t\treturn;\n\t};\n\t/**\n\t * 设置指定进度条进度 \n\t * @param {Object} container  可选，默认body，支持selector,DOM Node,mui wrapper\n\t * @param {Object} progress 可选，默认0 取值范围[0-100]\n\t * @param {Object} speed 进度条动画时间\n\t */\n\tvar setProgressbar = function(container, progress, speed) {\n\t\tif (typeof container === 'number') {\n\t\t\tspeed = progress;\n\t\t\tprogress = container;\n\t\t\tcontainer = false;\n\t\t}\n\t\tvar progressbar = _findProgressbar(container);\n\t\tif (!progressbar || progressbar.classList.contains(CLASS_PROGRESSBAR_INFINITE)) {\n\t\t\treturn;\n\t\t}\n\t\tif (progress) progress = Math.min(Math.max(progress, 0), 100);\n\t\tprogressbar.offsetHeight;\n\t\tvar span = progressbar.querySelector('span');\n\t\tif (span) {\n\t\t\tvar style = span.style;\n\t\t\tstyle.webkitTransform = 'translate3d(' + (-100 + progress) + '%,0,0)';\n\t\t\tif (typeof speed !== 'undefined') {\n\t\t\t\tstyle.webkitTransitionDuration = speed + 'ms';\n\t\t\t} else {\n\t\t\t\tstyle.webkitTransitionDuration = '';\n\t\t\t}\n\t\t}\n\t\treturn progressbar;\n\t};\n\t$.fn.progressbar = function(options) {\n\t\tvar progressbarApis = [];\n\t\toptions = options || {};\n\t\tthis.each(function() {\n\t\t\tvar self = this;\n\t\t\tvar progressbarApi = self.mui_plugin_progressbar;\n\t\t\tif (!progressbarApi) {\n\t\t\t\tself.mui_plugin_progressbar = progressbarApi = {\n\t\t\t\t\toptions: options,\n\t\t\t\t\tsetOptions: function(options) {\n\t\t\t\t\t\tthis.options = options;\n\t\t\t\t\t},\n\t\t\t\t\tshow: function() {\n\t\t\t\t\t\treturn showProgressbar(self, this.options.progress, this.options.color);\n\t\t\t\t\t},\n\t\t\t\t\tsetProgress: function(progress) {\n\t\t\t\t\t\treturn setProgressbar(self, progress);\n\t\t\t\t\t},\n\t\t\t\t\thide: function() {\n\t\t\t\t\t\treturn hideProgressbar(self);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else if (options) {\n\t\t\t\tprogressbarApi.setOptions(options);\n\t\t\t}\n\t\t\tprogressbarApis.push(progressbarApi);\n\t\t});\n\t\treturn progressbarApis.length === 1 ? progressbarApis[0] : progressbarApis;\n\t};\n\t//\t$.setProgressbar = setProgressbar;\n\t//\t$.showProgressbar = showProgressbar;\n\t//\t$.hideProgressbar = hideProgressbar;\n})(mui, document);"
  },
  {
    "path": "js/mui.pullrefresh.5+.js",
    "content": "/**\n * pullRefresh 5+\n * @param {type} $\n * @returns {undefined}\n */\n(function($, document) {\n    if (!($.os.plus)) { //仅在5+android支持多webview的使用\n        return;\n    }\n    $.plusReady(function() {\n        if (window.__NWin_Enable__ === false) { //不支持多webview，则不用5+下拉刷新\n            return;\n        }\n        var CLASS_PLUS_PULLREFRESH = $.className('plus-pullrefresh');\n        var CLASS_VISIBILITY = $.className('visibility');\n        var CLASS_HIDDEN = $.className('hidden');\n        var CLASS_BLOCK = $.className('block');\n\n        var CLASS_PULL_CAPTION = $.className('pull-caption');\n        var CLASS_PULL_CAPTION_DOWN = $.className('pull-caption-down');\n        var CLASS_PULL_CAPTION_REFRESH = $.className('pull-caption-refresh');\n        var CLASS_PULL_CAPTION_NOMORE = $.className('pull-caption-nomore');\n\n        var PlusPullRefresh = $.Class.extend({\n            init: function(element, options) {\n                this.element = element;\n                this.options = options;\n                this.wrapper = this.scroller = element;\n                this._init();\n                this._initPulldownRefreshEvent();\n            },\n            _init: function() {\n                var self = this;\n                //document.addEventListener('plusscrollbottom', this);\n                window.addEventListener('dragup', self);\n                document.addEventListener(\"plusscrollbottom\", self);\n                self.scrollInterval = window.setInterval(function() {\n                    if (self.isScroll && !self.loading) {\n                        if (window.pageYOffset + window.innerHeight + 10 >= document.documentElement.scrollHeight) {\n                            self.isScroll = false; //放在这里是因为快速滚动的话，有可能检测时，还没到底，所以只要有滚动，没到底之前一直检测高度变化\n                            if (self.bottomPocket) {\n                                self.pullupLoading();\n                            }\n                        }\n                    }\n                }, 100);\n            },\n            _initPulldownRefreshEvent: function() {\n                var self = this;\n                $.plusReady(function() {\n                    if (self.options.down.style == \"circle\") {\n                        //单webview、原生转圈\n                        self.options.webview = plus.webview.currentWebview();\n                        self.options.webview.setPullToRefresh({\n                            support: true,\n                            color: self.options.down.color || '#2BD009',\n                            height: self.options.down.height || '50px',\n                            range: self.options.down.range || '100px',\n                            style: 'circle',\n                            offset: self.options.down.offset || '0px'\n                        }, function() {\n                            self.options.down.callback();\n                        });\n                    } else if (self.topPocket && self.options.webviewId) {\n                        var webview = plus.webview.getWebviewById(self.options.webviewId); //子窗口\n                        if (!webview) {\n                            return;\n                        }\n                        self.options.webview = webview;\n                        var downOptions = self.options.down;\n                        var height = downOptions.height;\n                        webview.addEventListener('close', function() {\n                            var attrWebviewId = self.options.webviewId && self.options.webviewId.replace(/\\//g, \"_\"); //替换所有\"/\" \n                            self.element.removeAttribute('data-pullrefresh-plus-' + attrWebviewId);\n                        });\n                        webview.addEventListener(\"dragBounce\", function(e) {\n                            if (!self.pulldown) {\n                                self._initPulldownRefresh();\n                            } else {\n                                self.pullPocket.classList.add(CLASS_BLOCK);\n                            }\n                            switch (e.status) {\n                                case \"beforeChangeOffset\": //下拉可刷新状态\n                                    self._setCaption(downOptions.contentdown);\n                                    break;\n                                case \"afterChangeOffset\": //松开可刷新状态\n                                    self._setCaption(downOptions.contentover);\n                                    break;\n                                case \"dragEndAfterChangeOffset\": //正在刷新状态\n                                    //执行下拉刷新所在webview的回调函数\n                                    webview.evalJS(\"window.mui&&mui.options.pullRefresh.down.callback()\");\n                                    self._setCaption(downOptions.contentrefresh);\n                                    break;\n                                default:\n                                    break;\n                            }\n                        }, false);\n\n                        webview.setBounce({\n                            position: {\n                                top: height * 2 + 'px'\n                            },\n                            changeoffset: {\n                                top: height + 'px'\n                            }\n                        });\n\n                    }\n                });\n            },\n            handleEvent: function(e) {\n                var self = this;\n                if (self.stopped) {\n                    return;\n                }\n                self.isScroll = false;\n                if (e.type === 'dragup' || e.type === 'plusscrollbottom') {\n                    self.isScroll = true;\n                    setTimeout(function() {\n                        self.isScroll = false;\n                    }, 1000);\n                }\n            }\n        }).extend($.extend({\n            setStopped: function(stopped) { //该方法是子页面调用的\n                this.stopped = !!stopped;\n                // TODO 此处需要设置当前webview的bounce为none,目前5+有BUG\n                if (this.stopped) {\n                    this.disablePullupToRefresh();\n                    this.disablePulldownToRefresh();\n                } else {\n                    this.enablePullupToRefresh();\n                    this.enablePulldownToRefresh();\n                }\n            },\n            beginPulldown: function() {\n                var self = this;\n                $.plusReady(function() {\n                    //这里延时的目的是为了保证下拉刷新组件初始化完成，后续应该做成有状态的\n                    setTimeout(function() {\n                        if (self.options.down.style == \"circle\") { //单webview下拉刷新\n                            plus.webview.currentWebview().beginPullToRefresh();\n                        } else { //双webview模式\n                            var webview = self.options.webview;\n                            if (webview) {\n                                webview.setBounce({\n                                    offset: {\n                                        top: self.options.down.height + \"px\"\n                                    }\n                                });\n                            }\n                        }\n                    }, 15);\n                }.bind(this));\n            },\n            pulldownLoading: function() { //该方法是子页面调用的，兼容老的历史API\n                this.beginPulldown();\n            },\n            _pulldownLoading: function() { //该方法是父页面调用的\n                var self = this;\n                $.plusReady(function() {\n                    var childWebview = plus.webview.getWebviewById(self.options.webviewId);\n                    childWebview && childWebview.setBounce({\n                        offset: {\n                            top: self.options.down.height + \"px\"\n                        }\n                    });\n                });\n            },\n            endPulldown: function() {\n                var _wv = plus.webview.currentWebview();\n                //双webview的下拉刷新，需要修改父窗口提示信息\n                if (_wv.parent() && this.options.down.style !== \"circle\") {\n                    _wv.parent().evalJS(\"mui&&mui(document.querySelector('.mui-content')).pullRefresh('\" + JSON.stringify({\n                        webviewId: _wv.id\n                    }) + \"')._endPulldownToRefresh()\");\n                } else {\n                    _wv.endPullToRefresh();\n                }\n            },\n            endPulldownToRefresh: function() { //该方法是子页面调用的，兼容老的历史API\n                this.endPulldown();\n            },\n            _endPulldownToRefresh: function() { //该方法是父页面调用的\n                var self = this;\n                if (self.topPocket && self.options.webview) {\n                    self.options.webview.endPullToRefresh(); //下拉刷新所在webview回弹\n                    self.loading = false;\n                    self._setCaption(self.options.down.contentdown, true);\n                    setTimeout(function() {\n                        self.loading || self.topPocket.classList.remove(CLASS_BLOCK);\n                    }, 350);\n                }\n            },\n            beginPullup: function(callback) { //开始上拉加载\n                var self = this;\n                if (self.isLoading) return;\n                self.isLoading = true;\n                if (self.pulldown !== false) {\n                    self._initPullupRefresh();\n                } else {\n                    this.pullPocket.classList.add(CLASS_BLOCK);\n                }\n                setTimeout(function() {\n                    self.pullLoading.classList.add(CLASS_VISIBILITY);\n                    self.pullLoading.classList.remove(CLASS_HIDDEN);\n                    self.pullCaption.innerHTML = ''; //修正5+里边第一次加载时，文字显示的bug(还会显示出来个“多”,猜测应该是渲染问题导致的)\n                    self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH;\n                    self.pullCaption.innerHTML = self.options.up.contentrefresh;\n                    callback = callback || self.options.up.callback;\n                    callback && callback.call(self);\n                }, 300);\n            },\n            pullupLoading: function(callback) { //兼容老的API\n                this.beginPullup(callback);\n            },\n            endPullup: function(finished) { //上拉加载结束\n                var self = this;\n                if (self.pullLoading) {\n                    self.pullLoading.classList.remove(CLASS_VISIBILITY);\n                    self.pullLoading.classList.add(CLASS_HIDDEN);\n                    self.isLoading = false;\n                    if (finished) {\n                        self.finished = true;\n                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;\n                        self.pullCaption.innerHTML = self.options.up.contentnomore;\n                        //取消5+的plusscrollbottom事件\n                        document.removeEventListener('plusscrollbottom', self);\n                        window.removeEventListener('dragup', self);\n                    } else { //初始化时隐藏，后续不再隐藏\n                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                        self.pullCaption.innerHTML = self.options.up.contentdown;\n                    }\n                }\n            },\n            endPullupToRefresh: function(finished) { //上拉加载结束，兼容老的API\n                this.endPullup(finished);\n            },\n            disablePulldownToRefresh: function() {\n                var webview = plus.webview.currentWebview();\n                if (this.options.down.style && this.options.down.style == 'circle') { // 单webview模式禁止原生下拉刷新\n                    this.options.webview.setPullToRefresh({\n                        support: false,\n                        style: 'circle'\n                    });\n                } else { // 双webview模式禁止下拉刷新\n                    webview.setStyle({\n                        bounce: 'none'\n                    });\n                    webview.setBounce({\n                        position: {\n                            top: 'none'\n                        }\n                    });\n                }\n            },\n            enablePulldownToRefresh: function() {\n                var self = this,\n                    webview = plus.webview.currentWebview(),\n                    height = this.options.down.height;\n                // 单webview模式禁止原生下拉刷新\n                if (this.options.down.style && this.options.down.style == 'circle') {\n                    webview.setPullToRefresh({\n                        support: true,\n                        height: height || '50px',\n                        range: self.options.down.range || '100px',\n                        style: 'circle',\n                        offset: self.options.down.offset || '0px'\n                    });\n                } else { // 重新初始化双webview模式下拉刷新\n                    webview.setStyle({\n                        bounce: 'vertical'\n                    });\n                    webview.setBounce({\n                        position: {\n                            top: height * 2 + 'px'\n                        },\n                        changeoffset: {\n                            top: height + 'px'\n                        }\n                    });\n                }\n            },\n            disablePullupToRefresh: function() {\n                this._initPullupRefresh();\n                this.bottomPocket.className = $.className('pull-bottom-pocket') + ' ' + CLASS_HIDDEN;\n                window.removeEventListener('dragup', this);\n            },\n            enablePullupToRefresh: function() {\n                this._initPullupRefresh();\n                this.bottomPocket.classList.remove(CLASS_HIDDEN);\n                this.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                this.pullCaption.innerHTML = this.options.up.contentdown;\n                document.addEventListener(\"plusscrollbottom\", this);\n                window.addEventListener('dragup', this);\n            },\n            scrollTo: function(x, y, time) {\n                $.scrollTo(y, time);\n            },\n            scrollToBottom: function(time) {\n                $.scrollTo(document.documentElement.scrollHeight, time);\n            },\n            refresh: function(isReset) {\n                if (isReset && this.finished) {\n                    this.enablePullupToRefresh();\n                    this.finished = false;\n                }\n            }\n        }, $.PullRefresh));\n\n        //override h5 pullRefresh\n        $.fn.pullRefresh_native = function(options) {\n            var self;\n            if (this.length === 0) {\n                self = document.createElement('div');\n                self.className = 'mui-content';\n                document.body.appendChild(self);\n            } else {\n                self = this[0];\n            }\n            var args = options;\n            //一个父需要支持多个子下拉刷新\n            options = options || {}\n            if (typeof options === 'string') {\n                options = $.parseJSON(options);\n            };\n            !options.webviewId && (options.webviewId = (plus.webview.currentWebview().id || plus.webview.currentWebview().getURL()));\n            var pullRefreshApi = null;\n            var attrWebviewId = options.webviewId && options.webviewId.replace(/\\//g, \"_\"); //替换所有\"/\"\n            var id = self.getAttribute('data-pullrefresh-plus-' + attrWebviewId);\n            if (!id && typeof args === 'undefined') {\n                return false;\n            }\n            if (!id) { //避免重复初始化5+ pullrefresh\n                id = ++$.uuid;\n                self.setAttribute('data-pullrefresh-plus-' + attrWebviewId, id);\n                document.body.classList.add(CLASS_PLUS_PULLREFRESH);\n                $.data[id] = pullRefreshApi = new PlusPullRefresh(self, options);\n            } else {\n                pullRefreshApi = $.data[id];\n            }\n            if (options.down && options.down.auto) { //如果设置了auto，则自动下拉一次\n                //pullRefreshApi._pulldownLoading(); //parent webview\n                pullRefreshApi.beginPulldown();\n            } else if (options.up && options.up.auto) { //如果设置了auto，则自动上拉一次\n                pullRefreshApi.beginPullup();\n            }\n            return pullRefreshApi;\n        };\n    });\n\n})(mui, document);"
  },
  {
    "path": "js/mui.pullrefresh.js",
    "content": "(function($, document, undefined) {\n    var CLASS_PULL_TOP_POCKET = $.className('pull-top-pocket');\n    var CLASS_PULL_BOTTOM_POCKET = $.className('pull-bottom-pocket');\n    var CLASS_PULL = $.className('pull');\n    var CLASS_PULL_LOADING = $.className('pull-loading');\n    var CLASS_PULL_CAPTION = $.className('pull-caption');\n    var CLASS_PULL_CAPTION_DOWN = $.className('pull-caption-down');\n    var CLASS_PULL_CAPTION_REFRESH = $.className('pull-caption-refresh');\n    var CLASS_PULL_CAPTION_NOMORE = $.className('pull-caption-nomore');\n\n    var CLASS_ICON = $.className('icon');\n    var CLASS_SPINNER = $.className('spinner');\n    var CLASS_ICON_PULLDOWN = $.className('icon-pulldown');\n\n    var CLASS_BLOCK = $.className('block');\n    var CLASS_HIDDEN = $.className('hidden');\n    var CLASS_VISIBILITY = $.className('visibility');\n\n    var CLASS_LOADING_UP = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;\n    var CLASS_LOADING_DOWN = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;\n    var CLASS_LOADING = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_SPINNER;\n\n    var pocketHtml = ['<div class=\"' + CLASS_PULL + '\">', '<div class=\"{icon}\"></div>', '<div class=\"' + CLASS_PULL_CAPTION + '\">{contentrefresh}</div>', '</div>'].join('');\n\n    var PullRefresh = {\n        init: function(element, options) {\n            this._super(element, $.extend(true, {\n                scrollY: true,\n                scrollX: false,\n                indicators: true,\n                deceleration: 0.003,\n                down: {\n                    height: 50,\n                    contentinit: '下拉可以刷新',\n                    contentdown: '下拉可以刷新',\n                    contentover: '释放立即刷新',\n                    contentrefresh: '正在刷新...'\n                },\n                up: {\n                    height: 50,\n                    auto: false,\n                    contentinit: '上拉显示更多',\n                    contentdown: '上拉显示更多',\n                    contentrefresh: '正在加载...',\n                    contentnomore: '没有更多数据了',\n                    duration: 300\n                }\n            }, options));\n        },\n        _init: function() {\n            this._super();\n            this._initPocket();\n        },\n        _initPulldownRefresh: function() {\n            this.pulldown = true;\n            if (this.topPocket) {\n                this.pullPocket = this.topPocket;\n                this.pullPocket.classList.add(CLASS_BLOCK);\n                this.pullPocket.classList.add(CLASS_VISIBILITY);\n                this.pullCaption = this.topCaption;\n                this.pullLoading = this.topLoading;\n            }\n        },\n        _initPullupRefresh: function() {\n            this.pulldown = false;\n            if (this.bottomPocket) {\n                this.pullPocket = this.bottomPocket;\n                this.pullPocket.classList.add(CLASS_BLOCK);\n                this.pullPocket.classList.add(CLASS_VISIBILITY);\n                this.pullCaption = this.bottomCaption;\n                this.pullLoading = this.bottomLoading;\n            }\n        },\n        _initPocket: function() {\n            var options = this.options;\n            if (options.down && options.down.hasOwnProperty('callback')) {\n                this.topPocket = this.scroller.querySelector('.' + CLASS_PULL_TOP_POCKET);\n                if (!this.topPocket) {\n                    this.topPocket = this._createPocket(CLASS_PULL_TOP_POCKET, options.down, CLASS_LOADING_DOWN);\n                    this.wrapper.insertBefore(this.topPocket, this.wrapper.firstChild);\n                }\n                this.topLoading = this.topPocket.querySelector('.' + CLASS_PULL_LOADING);\n                this.topCaption = this.topPocket.querySelector('.' + CLASS_PULL_CAPTION);\n            }\n            if (options.up && options.up.hasOwnProperty('callback')) {\n                this.bottomPocket = this.scroller.querySelector('.' + CLASS_PULL_BOTTOM_POCKET);\n                if (!this.bottomPocket) {\n                    this.bottomPocket = this._createPocket(CLASS_PULL_BOTTOM_POCKET, options.up, CLASS_LOADING);\n                    this.scroller.appendChild(this.bottomPocket);\n                }\n                this.bottomLoading = this.bottomPocket.querySelector('.' + CLASS_PULL_LOADING);\n                this.bottomCaption = this.bottomPocket.querySelector('.' + CLASS_PULL_CAPTION);\n                //TODO only for h5\n                this.wrapper.addEventListener('scrollbottom', this);\n            }\n        },\n        _createPocket: function(clazz, options, iconClass) {\n            var pocket = document.createElement('div');\n            pocket.className = clazz;\n            pocket.innerHTML = pocketHtml.replace('{contentrefresh}', options.contentinit).replace('{icon}', iconClass);\n            return pocket;\n        },\n        _resetPullDownLoading: function() {\n            var loading = this.pullLoading;\n            if (loading) {\n                this.pullCaption.innerHTML = this.options.down.contentdown;\n                loading.style.webkitTransition = \"\";\n                loading.style.webkitTransform = \"\";\n                loading.style.webkitAnimation = \"\";\n                loading.className = CLASS_LOADING_DOWN;\n            }\n        },\n        _setCaptionClass: function(isPulldown, caption, title) {\n            if (!isPulldown) {\n                switch (title) {\n                    case this.options.up.contentdown:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;\n                        break;\n                    case this.options.up.contentrefresh:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH\n                        break;\n                    case this.options.up.contentnomore:\n                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;\n                        break;\n                }\n            }\n        },\n        _setCaption: function(title, reset) {\n            if (this.loading) {\n                return;\n            }\n            var options = this.options;\n            var pocket = this.pullPocket;\n            var caption = this.pullCaption;\n            var loading = this.pullLoading;\n            var isPulldown = this.pulldown;\n            var self = this;\n            if (pocket) {\n                if (reset) {\n                    setTimeout(function() {\n                        caption.innerHTML = self.lastTitle = title;\n                        if (isPulldown) {\n                            loading.className = CLASS_LOADING_DOWN;\n                        } else {\n                            self._setCaptionClass(false, caption, title);\n                            loading.className = CLASS_LOADING;\n                        }\n                        loading.style.webkitAnimation = \"\";\n                        loading.style.webkitTransition = \"\";\n                        loading.style.webkitTransform = \"\";\n                    }, 100);\n                } else {\n                    if (title !== this.lastTitle) {\n                        caption.innerHTML = title;\n                        if (isPulldown) {\n                            if (title === options.down.contentrefresh) {\n                                loading.className = CLASS_LOADING;\n                                loading.style.webkitAnimation = \"spinner-spin 1s step-end infinite\";\n                            } else if (title === options.down.contentover) {\n                                loading.className = CLASS_LOADING_UP;\n                                loading.style.webkitTransition = \"-webkit-transform 0.3s ease-in\";\n                                loading.style.webkitTransform = \"rotate(180deg)\";\n                            } else if (title === options.down.contentdown) {\n                                loading.className = CLASS_LOADING_DOWN;\n                                loading.style.webkitTransition = \"-webkit-transform 0.3s ease-in\";\n                                loading.style.webkitTransform = \"rotate(0deg)\";\n                            }\n                        } else {\n                            if (title === options.up.contentrefresh) {\n                                loading.className = CLASS_LOADING + ' ' + CLASS_VISIBILITY;\n                            } else {\n                                loading.className = CLASS_LOADING + ' ' + CLASS_HIDDEN;\n                            }\n                            self._setCaptionClass(false, caption, title);\n                        }\n                        this.lastTitle = title;\n                    }\n                }\n\n            }\n        }\n    };\n    $.PullRefresh = PullRefresh;\n})(mui, document);"
  },
  {
    "path": "js/mui.target.js",
    "content": "/**\n * mui target(action>popover>modal>tab>toggle)\n */\n(function($, window, document) {\n\t/**\n\t * targets\n\t */\n\t$.targets = {};\n\t/**\n\t * target handles\n\t */\n\t$.targetHandles = [];\n\t/**\n\t * register target\n\t * @param {type} target\n\t * @returns {$.targets}\n\t */\n\t$.registerTarget = function(target) {\n\n\t\ttarget.index = target.index || 1000;\n\n\t\t$.targetHandles.push(target);\n\n\t\t$.targetHandles.sort(function(a, b) {\n\t\t\treturn a.index - b.index;\n\t\t});\n\n\t\treturn $.targetHandles;\n\t};\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tvar target = event.target;\n\t\tvar founds = {};\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tvar isFound = false;\n\t\t\t$.each($.targetHandles, function(index, targetHandle) {\n\t\t\t\tvar name = targetHandle.name;\n\t\t\t\tif (!isFound && !founds[name] && targetHandle.hasOwnProperty('handle')) {\n\t\t\t\t\t$.targets[name] = targetHandle.handle(event, target);\n\t\t\t\t\tif ($.targets[name]) {\n\t\t\t\t\t\tfounds[name] = true;\n\t\t\t\t\t\tif (targetHandle.isContinue !== true) {\n\t\t\t\t\t\t\tisFound = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!founds[name]) {\n\t\t\t\t\t\tif (targetHandle.isReset !== false)\n\t\t\t\t\t\t\t$.targets[name] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (isFound) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\twindow.addEventListener('click', function(event) { //解决touch与click的target不一致的问题(比如链接边缘点击时，touch的target为html，而click的target为A)\n\t\tvar target = event.target;\n\t\tvar isFound = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.tagName === 'A') {\n\t\t\t\t$.each($.targetHandles, function(index, targetHandle) {\n\t\t\t\t\tvar name = targetHandle.name;\n\t\t\t\t\tif (targetHandle.hasOwnProperty('handle')) {\n\t\t\t\t\t\tif (targetHandle.handle(event, target)) {\n\t\t\t\t\t\t\tisFound = true;\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (isFound) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(mui, window, document);"
  },
  {
    "path": "js/mui.transparent.js",
    "content": "(function($, window) {\n    var CLASS_ACTIVE = $.className('active');\n    var rgbaRegex = /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n    var getColor = function(colorStr) {\n        var matches = colorStr.match(rgbaRegex);\n        if (matches && matches.length === 5) {\n            return [\n                matches[1],\n                matches[2],\n                matches[3],\n                matches[4]\n            ];\n        }\n        return [];\n    };\n    var Transparent = function(element, options) {\n        this.element = element;\n        this.options = $.extend({\n            top: 0, //距离顶部高度(到达该高度即触发)\n            offset: 150, //滚动透明距离\n            duration: 16, //过渡时间\n            scrollby: window//监听滚动距离容器\n        }, options || {});\n\n        this.scrollByElem = this.options.scrollby || window;\n        if (!this.scrollByElem) {\n            throw new Error(\"监听滚动的元素不存在\");\n        }\n        this.isNativeScroll = false;\n        if (this.scrollByElem === window) {\n            this.isNativeScroll = true;\n        } else if (!~this.scrollByElem.className.indexOf($.className('scroll-wrapper'))) {\n            this.isNativeScroll = true;\n        }\n\n        this._style = this.element.style;\n        this._bgColor = this._style.backgroundColor;\n        var color = getColor(mui.getStyles(this.element, 'backgroundColor'));\n        if (color.length) {\n            this._R = color[0];\n            this._G = color[1];\n            this._B = color[2];\n            this._A = parseFloat(color[3]);\n            this.lastOpacity = this._A;\n            this._bufferFn = $.buffer(this.handleScroll, this.options.duration, this);\n            this.initEvent();\n        } else {\n            throw new Error(\"元素背景颜色必须为RGBA\");\n        }\n    };\n\n    Transparent.prototype.initEvent = function() {\n        this.scrollByElem.addEventListener('scroll', this._bufferFn);\n        if (this.isNativeScroll) { //原生scroll\n            this.scrollByElem.addEventListener($.EVENT_MOVE, this._bufferFn);\n        }\n    }\n    Transparent.prototype.handleScroll = function(e) {\n        var y = window.scrollY;\n        if (!this.isNativeScroll && e && e.detail) {\n            y = -e.detail.y;\n        }\n        var opacity = (y - this.options.top) / this.options.offset + this._A;\n        opacity = Math.min(Math.max(this._A, opacity), 1);\n        this._style.backgroundColor = 'rgba(' + this._R + ',' + this._G + ',' + this._B + ',' + opacity + ')';\n        if (opacity > this._A) {\n            this.element.classList.add(CLASS_ACTIVE);\n        } else {\n            this.element.classList.remove(CLASS_ACTIVE);\n        }\n        if (this.lastOpacity !== opacity) {\n            $.trigger(this.element, 'alpha', {\n                alpha: opacity\n            });\n            this.lastOpacity = opacity;\n        }\n    };\n    Transparent.prototype.destory = function() {\n        this.scrollByElem.removeEventListener('scroll', this._bufferFn);\n        this.scrollByElem.removeEventListener($.EVENT_MOVE, this._bufferFn);\n        this.element.style.backgroundColor = this._bgColor;\n        this.element.mui_plugin_transparent = null;\n    };\n    $.fn.transparent = function(options) {\n        options = options || {};\n        var transparentApis = [];\n        this.each(function() {\n            var transparentApi = this.mui_plugin_transparent;\n            if (!transparentApi) {\n                var top = this.getAttribute('data-top');\n                var offset = this.getAttribute('data-offset');\n                var duration = this.getAttribute('data-duration');\n                var scrollby = this.getAttribute('data-scrollby');\n                if (top !== null && typeof options.top === 'undefined') {\n                    options.top = top;\n                }\n                if (offset !== null && typeof options.offset === 'undefined') {\n                    options.offset = offset;\n                }\n                if (duration !== null && typeof options.duration === 'undefined') {\n                    options.duration = duration;\n                }\n                if (scrollby !== null && typeof options.scrollby === 'undefined') {\n                    options.scrollby = document.querySelector(scrollby) || window;\n                }\n                transparentApi = this.mui_plugin_transparent = new Transparent(this, options);\n            }\n            transparentApis.push(transparentApi);\n        });\n        return transparentApis.length === 1 ? transparentApis[0] : transparentApis;\n    };\n    $.ready(function() {\n        $($.classSelector('.bar-transparent')).transparent();\n    });\n})(mui, window);"
  },
  {
    "path": "js/popovers.js",
    "content": "/**\n * Popovers\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} name\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, document, name) {\n\n\tvar CLASS_POPOVER = $.className('popover');\n\tvar CLASS_POPOVER_ARROW = $.className('popover-arrow');\n\tvar CLASS_ACTION_POPOVER = $.className('popover-action');\n\tvar CLASS_BACKDROP = $.className('backdrop');\n\tvar CLASS_BAR_POPOVER = $.className('bar-popover');\n\tvar CLASS_BAR_BACKDROP = $.className('bar-backdrop');\n\tvar CLASS_ACTION_BACKDROP = $.className('backdrop-action');\n\tvar CLASS_ACTIVE = $.className('active');\n\tvar CLASS_BOTTOM = $.className('bottom');\n\n\n\n\tvar handle = function(event, target) {\n\t\tif (target.tagName === 'A' && target.hash) {\n\t\t\t$.targets._popover = document.getElementById(target.hash.replace('#', ''));\n\t\t\tif ($.targets._popover && $.targets._popover.classList.contains(CLASS_POPOVER)) {\n\t\t\t\treturn target;\n\t\t\t} else {\n\t\t\t\t$.targets._popover = null;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 60,\n\t\thandle: handle,\n\t\ttarget: false,\n\t\tisReset: false,\n\t\tisContinue: true\n\t});\n\n\tvar onPopoverShown = function(e) {\n\t\tthis.removeEventListener('webkitTransitionEnd', onPopoverShown);\n\t\tthis.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\t$.trigger(this, 'shown', this);\n\t}\n\tvar onPopoverHidden = function(e) {\n\t\tsetStyle(this, 'none');\n\t\tthis.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\tthis.removeEventListener($.EVENT_MOVE, $.preventDefault);\n\t\t$.trigger(this, 'hidden', this);\n\t};\n\n\tvar backdrop = (function() {\n\t\tvar element = document.createElement('div');\n\t\telement.classList.add(CLASS_BACKDROP);\n\t\telement.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\telement.addEventListener('tap', function(e) {\n\t\t\tvar popover = $.targets._popover;\n\t\t\tif (popover) {\n\t\t\t\tpopover.addEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t\tpopover.classList.remove(CLASS_ACTIVE);\n\t\t\t\tremoveBackdrop(popover);\n\t\t\t}\n\t\t});\n\n\t\treturn element;\n\t}());\n\tvar removeBackdropTimer;\n\tvar removeBackdrop = function(popover) {\n\t\tbackdrop.setAttribute('style', 'opacity:0');\n\t\t$.targets.popover = $.targets._popover = null; //reset\n\t\tremoveBackdropTimer = $.later(function() {\n\t\t\tif (!popover.classList.contains(CLASS_ACTIVE) && backdrop.parentNode && backdrop.parentNode === document.body) {\n\t\t\t\tdocument.body.removeChild(backdrop);\n\t\t\t}\n\t\t}, 350);\n\t};\n\twindow.addEventListener('tap', function(e) {\n\t\tif (!$.targets.popover) {\n\t\t\treturn;\n\t\t}\n\t\tvar toggle = false;\n\t\tvar target = e.target;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target === $.targets.popover) {\n\t\t\t\ttoggle = true;\n\t\t\t}\n\t\t}\n\t\tif (toggle) {\n\t\t\te.detail.gesture.preventDefault(); //fixed hashchange\n\t\t\ttogglePopover($.targets._popover, $.targets.popover);\n\t\t}\n\n\t});\n\n\tvar togglePopover = function(popover, anchor, state) {\n\t\tif ((state === 'show' && popover.classList.contains(CLASS_ACTIVE)) || (state === 'hide' && !popover.classList.contains(CLASS_ACTIVE))) {\n\t\t\treturn;\n\t\t}\n\t\tremoveBackdropTimer && removeBackdropTimer.cancel(); //取消remove的timer\n\t\t//remove一遍，以免来回快速切换，导致webkitTransitionEnd不触发，无法remove\n\t\tpopover.removeEventListener('webkitTransitionEnd', onPopoverShown);\n\t\tpopover.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\tbackdrop.classList.remove(CLASS_BAR_BACKDROP);\n\t\tbackdrop.classList.remove(CLASS_ACTION_BACKDROP);\n\t\tvar _popover = document.querySelector($.classSelector('.popover.active'));\n\t\tif (_popover) {\n\t\t\t//\t\t\t_popover.setAttribute('style', '');\n\t\t\t_popover.addEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t_popover.classList.remove(CLASS_ACTIVE);\n\t\t\t//\t\t\t_popover.removeEventListener('webkitTransitionEnd', onPopoverHidden);\n\t\t\t//同一个弹出则直接返回，解决同一个popover的toggle\n\t\t\tif (popover === _popover) {\n\t\t\t\tremoveBackdrop(_popover);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tvar isActionSheet = false;\n\t\tif (popover.classList.contains(CLASS_BAR_POPOVER) || popover.classList.contains(CLASS_ACTION_POPOVER)) { //navBar\n\t\t\tif (popover.classList.contains(CLASS_ACTION_POPOVER)) { //action sheet popover\n\t\t\t\tisActionSheet = true;\n\t\t\t\tbackdrop.classList.add(CLASS_ACTION_BACKDROP);\n\t\t\t} else { //bar popover\n\t\t\t\tbackdrop.classList.add(CLASS_BAR_BACKDROP);\n\t\t\t\t//\t\t\t\tif (anchor) {\n\t\t\t\t//\t\t\t\t\tif (anchor.parentNode) {\n\t\t\t\t//\t\t\t\t\t\tvar offsetWidth = anchor.offsetWidth;\n\t\t\t\t//\t\t\t\t\t\tvar offsetLeft = anchor.offsetLeft;\n\t\t\t\t//\t\t\t\t\t\tvar innerWidth = window.innerWidth;\n\t\t\t\t//\t\t\t\t\t\tpopover.style.left = (Math.min(Math.max(offsetLeft, defaultPadding), innerWidth - offsetWidth - defaultPadding)) + \"px\";\n\t\t\t\t//\t\t\t\t\t} else {\n\t\t\t\t//\t\t\t\t\t\t//TODO anchor is position:{left,top,bottom,right}\n\t\t\t\t//\t\t\t\t\t}\n\t\t\t\t//\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsetStyle(popover, 'block'); //actionsheet transform\n\t\tpopover.offsetHeight;\n\t\tpopover.classList.add(CLASS_ACTIVE);\n\t\tbackdrop.setAttribute('style', '');\n\t\tdocument.body.appendChild(backdrop);\n\t\tcalPosition(popover, anchor, isActionSheet); //position\n\t\tbackdrop.classList.add(CLASS_ACTIVE);\n\t\tpopover.addEventListener('webkitTransitionEnd', onPopoverShown);\n\t};\n\tvar setStyle = function(popover, display, top, left) {\n\t\tvar style = popover.style;\n\t\tif (typeof display !== 'undefined')\n\t\t\tstyle.display = display;\n\t\tif (typeof top !== 'undefined')\n\t\t\tstyle.top = top + 'px';\n\t\tif (typeof left !== 'undefined')\n\t\t\tstyle.left = left + 'px';\n\t};\n\tvar calPosition = function(popover, anchor, isActionSheet) {\n\t\tif (!popover || !anchor) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isActionSheet) { //actionsheet\n\t\t\tsetStyle(popover, 'block')\n\t\t\treturn;\n\t\t}\n\n\t\tvar wWidth = window.innerWidth;\n\t\tvar wHeight = window.innerHeight;\n\n\t\tvar pWidth = popover.offsetWidth;\n\t\tvar pHeight = popover.offsetHeight;\n\n\t\tvar aWidth = anchor.offsetWidth;\n\t\tvar aHeight = anchor.offsetHeight;\n\t\tvar offset = $.offset(anchor);\n\n\t\tvar arrow = popover.querySelector('.' + CLASS_POPOVER_ARROW);\n\t\tif (!arrow) {\n\t\t\tarrow = document.createElement('div');\n\t\t\tarrow.className = CLASS_POPOVER_ARROW;\n\t\t\tpopover.appendChild(arrow);\n\t\t}\n\t\tvar arrowSize = arrow && arrow.offsetWidth / 2 || 0;\n\n\n\n\t\tvar pTop = 0;\n\t\tvar pLeft = 0;\n\t\tvar diff = 0;\n\t\tvar arrowLeft = 0;\n\t\tvar defaultPadding = popover.classList.contains(CLASS_ACTION_POPOVER) ? 0 : 5;\n\n\t\tvar position = 'top';\n\t\tif ((pHeight + arrowSize) < (offset.top - window.pageYOffset)) { //top\n\t\t\tpTop = offset.top - pHeight - arrowSize;\n\t\t} else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset) - aHeight)) { //bottom\n\t\t\tposition = 'bottom';\n\t\t\tpTop = offset.top + aHeight + arrowSize;\n\t\t} else { //middle\n\t\t\tposition = 'middle';\n\t\t\tpTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset, 0);\n\t\t\tpLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0);\n\t\t}\n\t\tif (position === 'top' || position === 'bottom') {\n\t\t\tpLeft = aWidth / 2 + offset.left - pWidth / 2;\n\t\t\tdiff = pLeft;\n\t\t\tif (pLeft < defaultPadding) pLeft = defaultPadding;\n\t\t\tif (pLeft + pWidth > wWidth) pLeft = wWidth - pWidth - defaultPadding;\n\n\t\t\tif (arrow) {\n\t\t\t\tif (position === 'top') {\n\t\t\t\t\tarrow.classList.add(CLASS_BOTTOM);\n\t\t\t\t} else {\n\t\t\t\t\tarrow.classList.remove(CLASS_BOTTOM);\n\t\t\t\t}\n\t\t\t\tdiff = diff - pLeft;\n\t\t\t\tarrowLeft = (pWidth / 2 - arrowSize / 2 + diff);\n\t\t\t\tarrowLeft = Math.max(Math.min(arrowLeft, pWidth - arrowSize * 2 - 6), 6);\n\t\t\t\tarrow.setAttribute('style', 'left:' + arrowLeft + 'px');\n\t\t\t}\n\t\t} else if (position === 'middle') {\n\t\t\tarrow.setAttribute('style', 'display:none');\n\t\t}\n\t\tsetStyle(popover, 'block', pTop, pLeft);\n\t};\n\n\t$.createMask = function(callback) {\n\t\tvar element = document.createElement('div');\n\t\telement.classList.add(CLASS_BACKDROP);\n\t\telement.addEventListener($.EVENT_MOVE, $.preventDefault);\n\t\telement.addEventListener('tap', function() {\n\t\t\tmask.close();\n\t\t});\n\t\tvar mask = [element];\n\t\tmask._show = false;\n\t\tmask.show = function() {\n\t\t\tmask._show = true;\n\t\t\telement.setAttribute('style', 'opacity:1');\n\t\t\tdocument.body.appendChild(element);\n\t\t\treturn mask;\n\t\t};\n\t\tmask._remove = function() {\n\t\t\tif (mask._show) {\n\t\t\t\tmask._show = false;\n\t\t\t\telement.setAttribute('style', 'opacity:0');\n\t\t\t\t$.later(function() {\n\t\t\t\t\tvar body = document.body;\n\t\t\t\t\telement.parentNode === body && body.removeChild(element);\n\t\t\t\t}, 350);\n\t\t\t}\n\t\t\treturn mask;\n\t\t};\n\t\tmask.close = function() {\n\t\t\tif (callback) {\n\t\t\t\tif (callback() !== false) {\n\t\t\t\t\tmask._remove();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmask._remove();\n\t\t\t}\n\t\t};\n\t\treturn mask;\n\t};\n\t$.fn.popover = function() {\n\t\tvar args = arguments;\n\t\tthis.each(function() {\n\t\t\t$.targets._popover = this;\n\t\t\tif (args[0] === 'show' || args[0] === 'hide' || args[0] === 'toggle') {\n\t\t\t\ttogglePopover(this, args[1], args[0]);\n\t\t\t}\n\t\t});\n\t};\n\n})(mui, window, document, 'popover');"
  },
  {
    "path": "js/segmented-controllers.js",
    "content": "/**\n * segmented-controllers\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @param {type} undefined\n * @returns {undefined}\n */\n(function($, window, document, name, undefined) {\n\n    var CLASS_CONTROL_ITEM = $.className('control-item');\n    var CLASS_SEGMENTED_CONTROL = $.className('segmented-control');\n    var CLASS_SEGMENTED_CONTROL_VERTICAL = $.className('segmented-control-vertical');\n    var CLASS_CONTROL_CONTENT = $.className('control-content');\n    var CLASS_TAB_BAR = $.className('bar-tab');\n    var CLASS_TAB_ITEM = $.className('tab-item');\n    var CLASS_SLIDER_ITEM = $.className('slider-item');\n\n   var handle = function(event, target) {\n        if (target.classList && (target.classList.contains(CLASS_CONTROL_ITEM) || target.classList.contains(CLASS_TAB_ITEM))) {\n            if (target.parentNode && target.parentNode.classList && target.parentNode.classList.contains(CLASS_SEGMENTED_CONTROL_VERTICAL)) {\n                //vertical 如果preventDefault会导致无法滚动\n            } else {\n\n                    event.preventDefault();      \n                    // if(target.tagName == 'A') {\n                    //     // fixed 底部选项卡href 无法跳转 && stop hash change\n                    //     var curr_href = location.hostname + location.pathname,\n                    //         target_href = target.hostname + target.pathname;\n                   \n                    //     if (curr_href == target_href && target.hash !== \"\") {\n                    //         event.preventDefault();\n                    //         return target;\n                    //     }else{\n                    //             return false\n                    //     }\n                    // }\n            }\n            //          if (target.hash) {\n            return target;\n            //          }\n        }\n        return false;\n    };\n\n    $.registerTarget({\n        name: name,\n        index: 80,\n        handle: handle,\n        target: false\n    });\n\n    window.addEventListener('tap', function(e) {\n\n        var targetTab = $.targets.tab;\n        if (!targetTab) {\n            return;\n        }\n        var activeTab;\n        var activeBodies;\n        var targetBody;\n        var className = $.className('active');\n        var classSelector = '.' + className;\n        var segmentedControl = targetTab.parentNode;\n\n        for (; segmentedControl && segmentedControl !== document; segmentedControl = segmentedControl.parentNode) {\n            if (segmentedControl.classList.contains(CLASS_SEGMENTED_CONTROL)) {\n                activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_CONTROL_ITEM);\n                break;\n            } else if (segmentedControl.classList.contains(CLASS_TAB_BAR)) {\n                activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_TAB_ITEM);\n            }\n        }\n\n        if (activeTab) {\n            activeTab.classList.remove(className);\n        }\n\n        var isLastActive = targetTab === activeTab;\n        if (targetTab) {\n            targetTab.classList.add(className);\n        }\n\n        if (!targetTab.hash) {\n            return;\n        }\n        targetBody = document.getElementById(targetTab.hash.replace('#', ''));\n\n        if (!targetBody) {\n            return;\n        }\n        if (!targetBody.classList.contains(CLASS_CONTROL_CONTENT)) { //tab bar popover\n            targetTab.classList[isLastActive ? 'remove' : 'add'](className);\n            return;\n        }\n        if (isLastActive) { //same\n            return;\n        }\n        var parentNode = targetBody.parentNode;\n        activeBodies = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT + classSelector);\n        for (var i = 0; i < activeBodies.length; i++) {\n            var activeBody = activeBodies[i];\n            activeBody.parentNode === parentNode && activeBody.classList.remove(className);\n        }\n\n        targetBody.classList.add(className);\n\n        var contents = [];\n        var _contents = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT);\n        for (var i = 0; i < _contents.length; i++) { //查找直属子节点\n            _contents[i].parentNode === parentNode && (contents.push(_contents[i]));\n        }\n        $.trigger(targetBody, $.eventName('shown', name), {\n            tabNumber: Array.prototype.indexOf.call(contents, targetBody)\n        });\n        e.detail && e.detail.gesture.preventDefault(); //fixed hashchange\n    });\n\n})(mui, window, document, 'tab');"
  },
  {
    "path": "js/sliders.js",
    "content": "/**\n * Slider (TODO resize)\n * @param {type} $\n * @param {type} window\n * @returns {undefined}\n */\n(function($, window) {\n\tvar CLASS_SLIDER = $.className('slider');\n\tvar CLASS_SLIDER_GROUP = $.className('slider-group');\n\tvar CLASS_SLIDER_LOOP = $.className('slider-loop');\n\tvar CLASS_SLIDER_INDICATOR = $.className('slider-indicator');\n\tvar CLASS_ACTION_PREVIOUS = $.className('action-previous');\n\tvar CLASS_ACTION_NEXT = $.className('action-next');\n\tvar CLASS_SLIDER_ITEM = $.className('slider-item');\n\n\tvar SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM;\n\tvar SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR;\n\tvar SELECTOR_SLIDER_PROGRESS_BAR = $.classSelector('.slider-progress-bar');\n\n\n\tvar Slider = function(element, options) {\n\t\tthis.element = element;\n\t\tthis.options = $.extend({\n\t\t\tslideshowDelay: 0, //设置为0，则不定时轮播\n\t\t\tfactor: 1\n\t\t}, options);\n\n\t\tthis.init();\n\t};\n\tSlider.prototype.init = function() {\n\t\t//\t\tthis.initDuplicate();\n\t\tthis.initEvent();\n\t\tthis.initTimer();\n\t};\n\tSlider.prototype.refresh = function(options) {\n\t\tvar newOptions = $.extend({\n\t\t\tslideshowDelay: 0, //设置为0，则不定时轮播\n\t\t\tfactor: 1\n\t\t}, options);\n\t\tif (this.options.slideshowDelay !== newOptions.slideshowDelay) {\n\t\t\tthis.options.slideshowDelay = newOptions.slideshowDelay;\n\t\t\tif (this.options.slideshowDelay) {\n\t\t\t\tthis.nextItem();\n\t\t\t}\n\t\t}\n\t};\n\t//TODO 暂时不做自动clone\n\t//\tSlider.prototype.initDuplicate = function() {\n\t//\t\tvar self = this;\n\t//\t\tvar element = self.element;\n\t//\t\tif (element.classList.contains(CLASS_SLIDER_LOOP)) {\n\t//\t\t\tvar duplicates = element.getElementsByClassName(CLASS_SLIDER_ITEM_DUPLICATE);\n\t//\t\t}\n\t//\t};\n\tSlider.prototype.initEvent = function() {\n\t\tvar self = this;\n\t\tvar element = self.element;\n\t\tvar slider = element.parentNode;\n\t\tself.translateX = 0;\n\t\tself.sliderWidth = element.offsetWidth;\n\t\tself.isLoop = element.classList.contains(CLASS_SLIDER_LOOP);\n\t\tself.sliderLength = element.querySelectorAll(SELECTOR_SLIDER_ITEM).length;\n\t\tself.progressBarWidth = 0;\n\t\tself.progressBar = slider.querySelector(SELECTOR_SLIDER_PROGRESS_BAR);\n\t\tif (self.progressBar) {\n\t\t\tself.progressBarWidth = self.progressBar.offsetWidth;\n\t\t}\n\t\t//slider\n\t\tvar isDragable = false;\n\t\tself.isSwipeable = false;\n\t\tslider.addEventListener('dragstart', function(event) {\n\t\t\tvar detail = event.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tif (direction === 'left' || direction === 'right') { //reset\n\t\t\t\tisDragable = true;\n\t\t\t\tself.translateX = self.lastTranslateX = 0;\n\t\t\t\tself.scrollX = self.getScroll();\n\t\t\t\tself.sliderWidth = element.offsetWidth;\n\t\t\t\tself.isLoop = element.classList.contains(CLASS_SLIDER_LOOP);\n\t\t\t\tself.sliderLength = element.querySelectorAll(SELECTOR_SLIDER_ITEM).length;\n\t\t\t\tif (self.progressBar) {\n\t\t\t\t\tself.progressBarWidth = self.progressBar.offsetWidth;\n\t\t\t\t}\n\t\t\t\tself.maxTranslateX = ((self.sliderLength - 1) * self.sliderWidth);\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\tvar isStopPropagation = true;\n\t\t\t\tif (!self.isLoop) {\n\t\t\t\t\tif (direction === 'right' && self.scrollX === 0) {\n\t\t\t\t\t\tisStopPropagation = false;\n\t\t\t\t\t} else if (direction === 'left' && self.scrollX === -self.maxTranslateX) {\n\t\t\t\t\t\tisStopPropagation = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tisStopPropagation && event.stopPropagation();\n\t\t\t}\n\t\t});\n\t\tslider.addEventListener('drag', function(event) {\n\t\t\tif (isDragable) {\n\t\t\t\tself.dragItem(event);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\n\t\t});\n\t\tslider.addEventListener('dragend', function(event) {\n\t\t\tif (isDragable) {\n\t\t\t\tself.gotoItem(self.getSlideNumber());\n\t\t\t\tisDragable = self.isSwipeable = false;\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t});\n\t\t//\t\tslider.addEventListener('flick', $.stopPropagation);\n\t\tslider.addEventListener('swipeleft', function(event) {\n\t\t\tif (self.isSwipeable) {\n\t\t\t\t//stop dragend\n\t\t\t\t$.gestures.stoped = true;\n\t\t\t\tself.nextItem();\n\t\t\t\tisDragable = self.isSwipeable = false;\n\t\t\t}\n\t\t\tevent.stopPropagation();\n\t\t});\n\t\tslider.addEventListener('swiperight', function(event) {\n\t\t\tif (self.isSwipeable) {\n\t\t\t\t//stop dragend\n\t\t\t\t$.gestures.stoped = true;\n\t\t\t\tself.prevItem();\n\t\t\t\tisDragable = self.isSwipeable = false;\n\t\t\t}\n\t\t\tevent.stopPropagation();\n\t\t});\n\t\tslider.addEventListener('slide', function(e) {\n\t\t\tvar detail = e.detail;\n\t\t\tdetail.slideNumber = detail.slideNumber || 0;\n\t\t\tvar number = slider.querySelector($.classSelector('.slider-indicator .number span'));\n\t\t\tif (number) {\n\t\t\t\tnumber.innerText = (detail.slideNumber + 1);\n\t\t\t}\n\n\t\t\tvar indicators = slider.querySelectorAll($.classSelector('.slider-indicator .indicator'));\n\t\t\tfor (var i = 0, len = indicators.length; i < len; i++) {\n\t\t\t\tindicators[i].classList[i === detail.slideNumber ? 'add' : 'remove']($.className('active'));\n\t\t\t}\n\n\t\t\tvar controlItems = slider.querySelectorAll($.classSelector('.control-item'));\n\t\t\tfor (var i = 0, len = controlItems.length; i < len; i++) {\n\t\t\t\tcontrolItems[i].classList[i === detail.slideNumber ? 'add' : 'remove']($.className('active'));\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t});\n\t\tslider.addEventListener($.eventName('shown', 'tab'), function(e) { //tab\n\t\t\tself.gotoItem(-(e.detail.tabNumber || 0));\n\t\t});\n\t\t//indicator\n\t\tvar indicator = element.parentNode.querySelector(SELECTOR_SLIDER_INDICATOR);\n\t\tif (indicator) {\n\t\t\tindicator.addEventListener('tap', function(event) {\n\t\t\t\tvar target = event.target;\n\t\t\t\tif (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) {\n\t\t\t\t\tself[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem']();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\tSlider.prototype.dragItem = function(event) {\n\t\tvar self = this;\n\t\tvar detail = event.detail;\n\n\t\tif (detail.deltaX !== detail.lastDeltaX) {\n\t\t\tvar translate = (detail.deltaX * self.options.factor + self.scrollX);\n\t\t\tself.element.style['-webkit-transition-duration'] = '0';\n\t\t\tvar min = 0;\n\t\t\tvar max = -self.maxTranslateX;\n\t\t\tif (self.isLoop) {\n\t\t\t\tmin = self.sliderWidth;\n\t\t\t\tmax = max + min;\n\t\t\t}\n\t\t\tif (translate > min || translate < max) {\n\t\t\t\tself.isSwipeable = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!self.requestAnimationFrame) {\n\t\t\t\tself.updateTranslate();\n\t\t\t}\n\t\t\tself.isSwipeable = true;\n\t\t\tself.translateX = translate;\n\t\t}\n\t\tif (self.timer) {\n\t\t\tclearTimeout(self.timer);\n\t\t}\n\t\tself.timer = setTimeout(function() {\n\t\t\tself.initTimer();\n\t\t}, 100);\n\n\t};\n\tSlider.prototype.updateTranslate = function() {\n\t\tvar self = this;\n\t\tif (self.lastTranslateX !== self.translateX) {\n\t\t\tself.setTranslate(self.translateX);\n\t\t\tself.lastTranslateX = self.translateX;\n\t\t}\n\t\tself.requestAnimationFrame = requestAnimationFrame(function() {\n\t\t\tself.updateTranslate();\n\t\t});\n\t};\n\tSlider.prototype.setTranslate = function(x) {\n\t\tthis.element.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';\n\t\tthis.updateProcess(x);\n\t};\n\tSlider.prototype.updateProcess = function(translate) {\n\t\tvar progressBarWidth = this.progressBarWidth;\n\t\tif (progressBarWidth) {\n\t\t\ttranslate = Math.abs(translate);\n\t\t\tthis.setProcess(translate * (progressBarWidth / this.sliderWidth));\n\t\t}\n\t};\n\tSlider.prototype.setProcess = function(translate) {\n\t\tvar progressBar = this.progressBar;\n\t\tif (progressBar) {\n\t\t\tprogressBar.style.webkitTransform = 'translate3d(' + translate + 'px,0,0)';\n\t\t}\n\t};\n\t/**\n\t * 下一个轮播\n\t * @returns {Number}\n\t */\n\tSlider.prototype.nextItem = function() {\n\t\tthis.gotoItem(this.getCurrentSlideNumber('next') - 1);\n\t};\n\t/**\n\t * 上一个轮播\n\t * @returns {Number}\n\t */\n\tSlider.prototype.prevItem = function() {\n\t\tthis.gotoItem(this.getCurrentSlideNumber('prev') + 1);\n\t};\n\t/**\n\t * 滑动到指定轮播\n\t * @param {type} slideNumber\n\t * @returns {undefined}\n\t */\n\tSlider.prototype.gotoItem = function(slideNumber) {\n\t\tif (!(slideNumber === 1 && this.getSlideNumber() === slideNumber)) {\n\t\t\tslideNumber = slideNumber > 0 ? -slideNumber : slideNumber;\n\t\t}\n\t\tvar self = this;\n\t\tvar slider = self.element;\n\t\tvar slideLength = self.sliderLength;\n\t\tif (self.isLoop) { //循环轮播需减去2个过渡元素\n\t\t\tslideLength = slideLength - 2;\n\t\t} else {\n\t\t\tslideLength = slideLength - 1;\n\t\t\tslideNumber = Math.min(0, slideNumber);\n\t\t\tslideNumber = Math.max(slideNumber, -slideLength);\n\t\t}\n\t\tif (self.requestAnimationFrame) {\n\t\t\tcancelAnimationFrame(self.requestAnimationFrame);\n\t\t\tself.requestAnimationFrame = null;\n\t\t}\n\t\tvar offsetX = Math.max(slideNumber, -slideLength) * slider.offsetWidth;\n\t\tslider.style['-webkit-transition-duration'] = '.2s';\n\t\tself.setTranslate(offsetX);\n\t\t//\t\tslider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)';\n\t\t//\t\tself.updateProcess(offsetX);\n\t\tvar fixedLoop = function() {\n\t\t\tslider.style['-webkit-transition-duration'] = '0';\n\t\t\tslider.style.webkitTransform = 'translate3d(' + (slideNumber * slider.offsetWidth) + 'px,0,0)';\n\t\t\tslider.removeEventListener('webkitTransitionEnd', fixedLoop);\n\t\t};\n\t\tslider.removeEventListener('webkitTransitionEnd', fixedLoop);\n\t\tif (self.isLoop) { //循环轮播自动重新定位\n\t\t\tif (slideNumber === 1 || slideNumber === -slideLength) {\n\t\t\t\tslideNumber = slideNumber === 1 ? (-slideLength + 1) : 0;\n\t\t\t\tslider.addEventListener('webkitTransitionEnd', fixedLoop);\n\t\t\t}\n\t\t}\n\t\t$.trigger(slider.parentNode, 'slide', {\n\t\t\tslideNumber: Math.abs(slideNumber)\n\t\t});\n\t\tthis.initTimer();\n\t};\n\n\t/**\n\t * 计算轮播应该处于的位置(四舍五入)\n\t * @returns {Number}\n\t */\n\tSlider.prototype.getSlideNumber = function() {\n\t\treturn (Math.round(this.getScroll() / this.sliderWidth));\n\t};\n\t/**\n\t * 当前所处位置\n\t * @param {type} type\n\t * @returns {unresolved}\n\t */\n\tSlider.prototype.getCurrentSlideNumber = function(type) {\n\t\treturn (Math[type === 'next' ? 'ceil' : 'floor'](this.getScroll() / this.sliderWidth));\n\t};\n\t/**\n\t * 获取当前滚动位置\n\t * @returns {Number}\n\t */\n\tSlider.prototype.getScroll = function() {\n\t\tvar slider = this.element;\n\t\tvar scroll = 0;\n\t\tif ('webkitTransform' in slider.style) {\n\t\t\tvar result = $.parseTranslate(slider.style.webkitTransform);\n\t\t\tscroll = result ? result.x : 0;\n\t\t}\n\t\treturn scroll;\n\t};\n\t/**\n\t * 自动轮播\n\t * @returns {undefined}\n\t */\n\tSlider.prototype.initTimer = function() {\n\t\tvar self = this;\n\t\tvar slideshowDelay = self.options.slideshowDelay;\n\t\tif (slideshowDelay) {\n\t\t\tvar slider = self.element;\n\t\t\tvar slidershowTimer = slider.getAttribute('data-slidershowTimer');\n\t\t\tslidershowTimer && window.clearTimeout(slidershowTimer);\n\t\t\tslidershowTimer = window.setTimeout(function() {\n\t\t\t\tif (!slider) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//仅slider显示状态进行自动轮播\n\t\t\t\tif (!!(slider.offsetWidth || slider.offsetHeight)) {\n\t\t\t\t\tself.nextItem();\n\t\t\t\t\t//下一个\n\t\t\t\t}\n\t\t\t\tself.initTimer();\n\t\t\t}, slideshowDelay);\n\t\t\tslider.setAttribute('data-slidershowTimer', slidershowTimer);\n\t\t}\n\n\t};\n\n\t$.fn.slider = function(options) {\n\t\t//新增定时轮播 重要：remove该轮播时，请获取data-slidershowTimer然后手动clearTimeout\n\t\tvar slider = null;\n\t\tthis.each(function() {\n\t\t\tvar sliderGroup = this;\n\t\t\tif (this.classList.contains(CLASS_SLIDER)) {\n\t\t\t\tsliderGroup = this.querySelector('.' + CLASS_SLIDER_GROUP);\n\t\t\t}\n\t\t\tvar id = sliderGroup.getAttribute('data-slider');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = slider = new Slider(sliderGroup, options);\n\t\t\t\tsliderGroup.setAttribute('data-slider', id);\n\t\t\t} else {\n\t\t\t\tslider = $.data[id];\n\t\t\t\tif (slider && options) {\n\t\t\t\t\tslider.refresh(options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn slider;\n\t};\n\t$.ready(function() {\n\t\t$($.classSelector('.slider-group')).slider();\n\t});\n})(mui, window);"
  },
  {
    "path": "js/switches.js",
    "content": "/**\n * Toggles switch\n * @param {type} $\n * @param {type} window\n * @param {type} name\n * @returns {undefined}\n */\n(function($, window, name) {\n\n\tvar CLASS_SWITCH = $.className('switch');\n\tvar CLASS_SWITCH_HANDLE = $.className('switch-handle');\n\tvar CLASS_ACTIVE = $.className('active');\n\tvar CLASS_DRAGGING = $.className('dragging');\n\n\tvar CLASS_DISABLED = $.className('disabled');\n\n\tvar SELECTOR_SWITCH_HANDLE = '.' + CLASS_SWITCH_HANDLE;\n\n\tvar handle = function(event, target) {\n\t\tif (target.classList && target.classList.contains(CLASS_SWITCH)) {\n\t\t\treturn target;\n\t\t}\n\t\treturn false;\n\t};\n\n\t$.registerTarget({\n\t\tname: name,\n\t\tindex: 100,\n\t\thandle: handle,\n\t\ttarget: false\n\t});\n\n\n\tvar Toggle = function(element) {\n\t\tthis.element = element;\n\t\tthis.classList = this.element.classList;\n\t\tthis.handle = this.element.querySelector(SELECTOR_SWITCH_HANDLE);\n\t\tthis.init();\n\t\tthis.initEvent();\n\t};\n\tToggle.prototype.init = function() {\n\t\tthis.toggleWidth = this.element.offsetWidth;\n\t\tthis.handleWidth = this.handle.offsetWidth;\n\t\tthis.handleX = this.toggleWidth - this.handleWidth - 3;\n\t};\n\tToggle.prototype.initEvent = function() {\n\t\tthis.element.addEventListener($.EVENT_START, this);\n\t\tthis.element.addEventListener('drag', this);\n\t\tthis.element.addEventListener('swiperight', this);\n\t\tthis.element.addEventListener($.EVENT_END, this);\n\t\tthis.element.addEventListener($.EVENT_CANCEL, this);\n\n\t};\n\tToggle.prototype.handleEvent = function(e) {\n\t\tif (this.classList.contains(CLASS_DISABLED)) {\n\t\t\treturn;\n\t\t}\n\t\tswitch (e.type) {\n\t\t\tcase $.EVENT_START:\n\t\t\t\tthis.start(e);\n\t\t\t\tbreak;\n\t\t\tcase 'drag':\n\t\t\t\tthis.drag(e);\n\t\t\t\tbreak;\n\t\t\tcase 'swiperight':\n\t\t\t\tthis.swiperight();\n\t\t\t\tbreak;\n\t\t\tcase $.EVENT_END:\n\t\t\tcase $.EVENT_CANCEL:\n\t\t\t\tthis.end(e);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\tToggle.prototype.start = function(e) {\n\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';\n\t\tthis.classList.add(CLASS_DRAGGING);\n\t\tif (this.toggleWidth === 0 || this.handleWidth === 0) { //当switch处于隐藏状态时，width为0，需要重新初始化\n\t\t\tthis.init();\n\t\t}\n\t};\n\tToggle.prototype.drag = function(e) {\n\t\tvar detail = e.detail;\n\t\tif (!this.isDragging) {\n\t\t\tif (detail.direction === 'left' || detail.direction === 'right') {\n\t\t\t\tthis.isDragging = true;\n\t\t\t\tthis.lastChanged = undefined;\n\t\t\t\tthis.initialState = this.classList.contains(CLASS_ACTIVE);\n\t\t\t}\n\t\t}\n\t\tif (this.isDragging) {\n\t\t\tthis.setTranslateX(detail.deltaX);\n\t\t\te.stopPropagation();\n\t\t\tdetail.gesture.preventDefault();\n\t\t}\n\t};\n\tToggle.prototype.swiperight = function(e) {\n\t\tif (this.isDragging) {\n\t\t\te.stopPropagation();\n\t\t}\n\t};\n\tToggle.prototype.end = function(e) {\n\t\tthis.classList.remove(CLASS_DRAGGING);\n\t\tif (this.isDragging) {\n\t\t\tthis.isDragging = false;\n\t\t\te.stopPropagation();\n\t\t\t$.trigger(this.element, 'toggle', {\n\t\t\t\tisActive: this.classList.contains(CLASS_ACTIVE)\n\t\t\t});\n\t\t} else {\n\t\t\tthis.toggle();\n\t\t}\n\t};\n\tToggle.prototype.toggle = function(animate) {\n\t\tvar classList = this.classList;\n\t\tif (animate === false) {\n\t\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '0s';\n\t\t} else {\n\t\t\tthis.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';\n\t\t}\n\t\tif (classList.contains(CLASS_ACTIVE)) {\n\t\t\tclassList.remove(CLASS_ACTIVE);\n\t\t\tthis.handle.style.webkitTransform = 'translate(0,0)';\n\t\t} else {\n\t\t\tclassList.add(CLASS_ACTIVE);\n\t\t\tthis.handle.style.webkitTransform = 'translate(' + this.handleX + 'px,0)';\n\t\t}\n\t\t$.trigger(this.element, 'toggle', {\n\t\t\tisActive: this.classList.contains(CLASS_ACTIVE)\n\t\t});\n\t};\n\tToggle.prototype.setTranslateX = $.animationFrame(function(x) {\n\t\tif (!this.isDragging) {\n\t\t\treturn;\n\t\t}\n\t\tvar isChanged = false;\n\t\tif ((this.initialState && -x > (this.handleX / 2)) || (!this.initialState && x > (this.handleX / 2))) {\n\t\t\tisChanged = true;\n\t\t}\n\t\tif (this.lastChanged !== isChanged) {\n\t\t\tif (isChanged) {\n\t\t\t\tthis.handle.style.webkitTransform = 'translate(' + (this.initialState ? 0 : this.handleX) + 'px,0)';\n\t\t\t\tthis.classList[this.initialState ? 'remove' : 'add'](CLASS_ACTIVE);\n\t\t\t} else {\n\t\t\t\tthis.handle.style.webkitTransform = 'translate(' + (this.initialState ? this.handleX : 0) + 'px,0)';\n\t\t\t\tthis.classList[this.initialState ? 'add' : 'remove'](CLASS_ACTIVE);\n\t\t\t}\n\t\t\tthis.lastChanged = isChanged;\n\t\t}\n\n\t});\n\n\t$.fn['switch'] = function(options) {\n\t\tvar switchApis = [];\n\t\tthis.each(function() {\n\t\t\tvar switchApi = null;\n\t\t\tvar id = this.getAttribute('data-switch');\n\t\t\tif (!id) {\n\t\t\t\tid = ++$.uuid;\n\t\t\t\t$.data[id] = new Toggle(this);\n\t\t\t\tthis.setAttribute('data-switch', id);\n\t\t\t} else {\n\t\t\t\tswitchApi = $.data[id];\n\t\t\t}\n\t\t\tswitchApis.push(switchApi);\n\t\t});\n\t\treturn switchApis.length > 1 ? switchApis : switchApis[0];\n\t};\n\t$.ready(function() {\n\t\t$('.' + CLASS_SWITCH)['switch']();\n\t});\n})(mui, window, 'toggle');"
  },
  {
    "path": "js/tableviews.js",
    "content": "/**\n * Tableviews\n * @param {type} $\n * @param {type} window\n * @param {type} document\n * @returns {undefined}\n */\n(function($, window, document) {\n\n\tvar CLASS_ACTIVE = $.className('active');\n\tvar CLASS_SELECTED = $.className('selected');\n\tvar CLASS_GRID_VIEW = $.className('grid-view');\n\tvar CLASS_RADIO_VIEW = $.className('table-view-radio');\n\tvar CLASS_TABLE_VIEW_CELL = $.className('table-view-cell');\n\tvar CLASS_COLLAPSE_CONTENT = $.className('collapse-content');\n\tvar CLASS_DISABLED = $.className('disabled');\n\tvar CLASS_TOGGLE = $.className('switch');\n\tvar CLASS_BTN = $.className('btn');\n\n\tvar CLASS_SLIDER_HANDLE = $.className('slider-handle');\n\tvar CLASS_SLIDER_LEFT = $.className('slider-left');\n\tvar CLASS_SLIDER_RIGHT = $.className('slider-right');\n\tvar CLASS_TRANSITIONING = $.className('transitioning');\n\n\n\tvar SELECTOR_SLIDER_HANDLE = '.' + CLASS_SLIDER_HANDLE;\n\tvar SELECTOR_SLIDER_LEFT = '.' + CLASS_SLIDER_LEFT;\n\tvar SELECTOR_SLIDER_RIGHT = '.' + CLASS_SLIDER_RIGHT;\n\tvar SELECTOR_SELECTED = '.' + CLASS_SELECTED;\n\tvar SELECTOR_BUTTON = '.' + CLASS_BTN;\n\tvar overFactor = 0.8;\n\tvar cell, a;\n\n\tvar isMoved = isOpened = openedActions = progress = false;\n\tvar sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;\n\tvar timer = translateX = lastTranslateX = sliderActionLeftWidth = sliderActionRightWidth = 0;\n\n\n\n\tvar toggleActive = function(isActive) {\n\t\tif (isActive) {\n\t\t\tif (a) {\n\t\t\t\ta.classList.add(CLASS_ACTIVE);\n\t\t\t} else if (cell) {\n\t\t\t\tcell.classList.add(CLASS_ACTIVE);\n\t\t\t}\n\t\t} else {\n\t\t\ttimer && timer.cancel();\n\t\t\tif (a) {\n\t\t\t\ta.classList.remove(CLASS_ACTIVE);\n\t\t\t} else if (cell) {\n\t\t\t\tcell.classList.remove(CLASS_ACTIVE);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar updateTranslate = function() {\n\t\tif (translateX !== lastTranslateX) {\n\t\t\tif (buttonsRight && buttonsRight.length > 0) {\n\t\t\t\tprogress = translateX / sliderActionRightWidth;\n\t\t\t\tif (translateX < -sliderActionRightWidth) {\n\t\t\t\t\ttranslateX = -sliderActionRightWidth - Math.pow(-translateX - sliderActionRightWidth, overFactor);\n\t\t\t\t}\n\t\t\t\tfor (var i = 0, len = buttonsRight.length; i < len; i++) {\n\t\t\t\t\tvar buttonRight = buttonsRight[i];\n\t\t\t\t\tif (typeof buttonRight._buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonRight._buttonOffset = buttonRight.offsetLeft;\n\t\t\t\t\t}\n\t\t\t\t\tbuttonOffset = buttonRight._buttonOffset;\n\t\t\t\t\tsetTranslate(buttonRight, (translateX - buttonOffset * (1 + Math.max(progress, -1))));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (buttonsLeft && buttonsLeft.length > 0) {\n\t\t\t\tprogress = translateX / sliderActionLeftWidth;\n\t\t\t\tif (translateX > sliderActionLeftWidth) {\n\t\t\t\t\ttranslateX = sliderActionLeftWidth + Math.pow(translateX - sliderActionLeftWidth, overFactor);\n\t\t\t\t}\n\t\t\t\tfor (var i = 0, len = buttonsLeft.length; i < len; i++) {\n\t\t\t\t\tvar buttonLeft = buttonsLeft[i];\n\t\t\t\t\tif (typeof buttonLeft._buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t\tbuttonOffset = buttonLeft._buttonOffset;\n\t\t\t\t\tif (buttonsLeft.length > 1) {\n\t\t\t\t\t\tbuttonLeft.style.zIndex = buttonsLeft.length - i;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonLeft, (translateX + buttonOffset * (1 - Math.min(progress, 1))));\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTranslate(sliderHandle, translateX);\n\t\t\tlastTranslateX = translateX;\n\t\t}\n\t\tsliderRequestAnimationFrame = requestAnimationFrame(function() {\n\t\t\tupdateTranslate();\n\t\t});\n\t};\n\tvar setTranslate = function(element, x) {\n\t\tif (element) {\n\t\t\telement.style.webkitTransform = 'translate(' + x + 'px,0)';\n\t\t}\n\t};\n\n\twindow.addEventListener($.EVENT_START, function(event) {\n\t\tif (cell) {\n\t\t\ttoggleActive(false);\n\t\t}\n\t\tcell = a = false;\n\t\tisMoved = isOpened = openedActions = false;\n\t\tvar target = event.target;\n\t\tvar isDisabled = false;\n\t\tfor (; target && target !== document; target = target.parentNode) {\n\t\t\tif (target.classList) {\n\t\t\t\tvar classList = target.classList;\n\t\t\t\tif ((target.tagName === 'INPUT' && target.type !== 'radio' && target.type !== 'checkbox') || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN) || classList.contains(CLASS_DISABLED)) {\n\t\t\t\t\tisDisabled = true;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_COLLAPSE_CONTENT)) { //collapse content\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (classList.contains(CLASS_TABLE_VIEW_CELL)) {\n\t\t\t\t\tcell = target;\n\t\t\t\t\t//TODO swipe to delete close\n\t\t\t\t\tvar selected = cell.parentNode.querySelector(SELECTOR_SELECTED);\n\t\t\t\t\tif (!cell.parentNode.classList.contains(CLASS_RADIO_VIEW) && selected && selected !== cell) {\n\t\t\t\t\t\t$.swipeoutClose(selected);\n\t\t\t\t\t\tcell = isDisabled = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!cell.parentNode.classList.contains(CLASS_GRID_VIEW)) {\n\t\t\t\t\t\tvar link = cell.querySelector('a');\n\t\t\t\t\t\tif (link && link.parentNode === cell) { //li>a\n\t\t\t\t\t\t\ta = link;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar handle = cell.querySelector(SELECTOR_SLIDER_HANDLE);\n\t\t\t\t\tif (handle) {\n\t\t\t\t\t\ttoggleEvents(cell);\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tif (!isDisabled) {\n\t\t\t\t\t\tif (handle) {\n\t\t\t\t\t\t\tif (timer) {\n\t\t\t\t\t\t\t\ttimer.cancel();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimer = $.later(function() {\n\t\t\t\t\t\t\t\ttoggleActive(true);\n\t\t\t\t\t\t\t}, 100);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoggleActive(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\twindow.addEventListener($.EVENT_MOVE, function(event) {\n\t\ttoggleActive(false);\n\t});\n\n\tvar handleEvent = {\n\t\thandleEvent: function(event) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'drag':\n\t\t\t\t\tthis.drag(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis.dragend(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'flick':\n\t\t\t\t\tthis.flick(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swiperight':\n\t\t\t\t\tthis.swiperight(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'swipeleft':\n\t\t\t\t\tthis.swipeleft(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tdrag: function(event) {\n\t\t\tif (!cell) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!isMoved) { //init\n\t\t\t\tsliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;\n\t\t\t\tsliderHandle = cell.querySelector(SELECTOR_SLIDER_HANDLE);\n\t\t\t\tif (sliderHandle) {\n\t\t\t\t\tsliderActionLeft = cell.querySelector(SELECTOR_SLIDER_LEFT);\n\t\t\t\t\tsliderActionRight = cell.querySelector(SELECTOR_SLIDER_RIGHT);\n\t\t\t\t\tif (sliderActionLeft) {\n\t\t\t\t\t\tsliderActionLeftWidth = sliderActionLeft.offsetWidth;\n\t\t\t\t\t\tbuttonsLeft = sliderActionLeft.querySelectorAll(SELECTOR_BUTTON);\n\t\t\t\t\t}\n\t\t\t\t\tif (sliderActionRight) {\n\t\t\t\t\t\tsliderActionRightWidth = sliderActionRight.offsetWidth;\n\t\t\t\t\t\tbuttonsRight = sliderActionRight.querySelectorAll(SELECTOR_BUTTON);\n\t\t\t\t\t}\n\t\t\t\t\tcell.classList.remove(CLASS_TRANSITIONING);\n\t\t\t\t\tisOpened = cell.classList.contains(CLASS_SELECTED);\n\t\t\t\t\tif (isOpened) {\n\t\t\t\t\t\topenedActions = cell.querySelector(SELECTOR_SLIDER_LEFT + SELECTOR_SELECTED) ? 'left' : 'right';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tvar direction = detail.direction;\n\t\t\tvar angle = detail.angle;\n\t\t\tif (direction === 'left' && (angle > 150 || angle < -150)) {\n\t\t\t\tif (buttonsRight || (buttonsLeft && isOpened)) { //存在右侧按钮或存在左侧按钮且是已打开状态\n\t\t\t\t\tisMoved = true;\n\t\t\t\t}\n\t\t\t} else if (direction === 'right' && (angle > -30 && angle < 30)) {\n\t\t\t\tif (buttonsLeft || (buttonsRight && isOpened)) { //存在左侧按钮或存在右侧按钮且是已打开状态\n\t\t\t\t\tisMoved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t\tvar translate = event.detail.deltaX;\n\t\t\t\tif (isOpened) {\n\t\t\t\t\tif (openedActions === 'right') {\n\t\t\t\t\t\ttranslate = translate - sliderActionRightWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttranslate = translate + sliderActionLeftWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ((translate > 0 && !buttonsLeft) || (translate < 0 && !buttonsRight)) {\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ttranslate = 0;\n\t\t\t\t}\n\t\t\t\tif (translate < 0) {\n\t\t\t\t\tsliderDirection = 'toLeft';\n\t\t\t\t} else if (translate > 0) {\n\t\t\t\t\tsliderDirection = 'toRight';\n\t\t\t\t} else {\n\t\t\t\t\tif (!sliderDirection) {\n\t\t\t\t\t\tsliderDirection = 'toLeft';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!sliderRequestAnimationFrame) {\n\t\t\t\t\tupdateTranslate();\n\t\t\t\t}\n\t\t\t\ttranslateX = translate;\n\t\t\t}\n\t\t},\n\t\tflick: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tswipeleft: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tswiperight: function(event) {\n\t\t\tif (isMoved) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tdragend: function(event) {\n\t\t\tif (!isMoved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.stopPropagation();\n\t\t\tif (sliderRequestAnimationFrame) {\n\t\t\t\tcancelAnimationFrame(sliderRequestAnimationFrame);\n\t\t\t\tsliderRequestAnimationFrame = null;\n\t\t\t}\n\t\t\tvar detail = event.detail;\n\t\t\tisMoved = false;\n\t\t\tvar action = 'close';\n\t\t\tvar actionsWidth = sliderDirection === 'toLeft' ? sliderActionRightWidth : sliderActionLeftWidth;\n\t\t\tvar isToggle = detail.swipe || (Math.abs(translateX) > actionsWidth / 2);\n\t\t\tif (isToggle) {\n\t\t\t\tif (!isOpened) {\n\t\t\t\t\taction = 'open';\n\t\t\t\t} else if (detail.direction === 'left' && openedActions === 'right') {\n\t\t\t\t\taction = 'open';\n\t\t\t\t} else if (detail.direction === 'right' && openedActions === 'left') {\n\t\t\t\t\taction = 'open';\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tcell.classList.add(CLASS_TRANSITIONING);\n\t\t\tvar buttons;\n\t\t\tif (action === 'open') {\n\t\t\t\tvar newTranslate = sliderDirection === 'toLeft' ? -actionsWidth : actionsWidth;\n\t\t\t\tsetTranslate(sliderHandle, newTranslate);\n\t\t\t\tbuttons = sliderDirection === 'toLeft' ? buttonsRight : buttonsLeft;\n\t\t\t\tif (typeof buttons !== 'undefined') {\n\t\t\t\t\tvar button = null;\n\t\t\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\t\t\t\t\tsetTranslate(button, newTranslate);\n\t\t\t\t\t}\n\t\t\t\t\tbutton.parentNode.classList.add(CLASS_SELECTED);\n\t\t\t\t\tcell.classList.add(CLASS_SELECTED);\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\t$.trigger(cell, sliderDirection === 'toLeft' ? 'slideleft' : 'slideright');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsetTranslate(sliderHandle, 0);\n\t\t\t\tsliderActionLeft && sliderActionLeft.classList.remove(CLASS_SELECTED);\n\t\t\t\tsliderActionRight && sliderActionRight.classList.remove(CLASS_SELECTED);\n\t\t\t\tcell.classList.remove(CLASS_SELECTED);\n\t\t\t}\n\t\t\tvar buttonOffset;\n\t\t\tif (buttonsLeft && buttonsLeft.length > 0 && buttonsLeft !== buttons) {\n\t\t\t\tfor (var i = 0, len = buttonsLeft.length; i < len; i++) {\n\t\t\t\t\tvar buttonLeft = buttonsLeft[i];\n\t\t\t\t\tbuttonOffset = buttonLeft._buttonOffset;\n\t\t\t\t\tif (typeof buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonLeft, buttonOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (buttonsRight && buttonsRight.length > 0 && buttonsRight !== buttons) {\n\t\t\t\tfor (var i = 0, len = buttonsRight.length; i < len; i++) {\n\t\t\t\t\tvar buttonRight = buttonsRight[i];\n\t\t\t\t\tbuttonOffset = buttonRight._buttonOffset;\n\t\t\t\t\tif (typeof buttonOffset === 'undefined') {\n\t\t\t\t\t\tbuttonRight._buttonOffset = buttonRight.offsetLeft;\n\t\t\t\t\t}\n\t\t\t\t\tsetTranslate(buttonRight, -buttonOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction toggleEvents(element, isRemove) {\n\t\tvar method = !!isRemove ? 'removeEventListener' : 'addEventListener';\n\t\telement[method]('drag', handleEvent);\n\t\telement[method]('dragend', handleEvent);\n\t\telement[method]('swiperight', handleEvent);\n\t\telement[method]('swipeleft', handleEvent);\n\t\telement[method]('flick', handleEvent);\n\t};\n\t/**\n\t * 打开滑动菜单\n\t * @param {Object} el\n\t * @param {Object} direction\n\t */\n\t$.swipeoutOpen = function(el, direction) {\n\t\tif (!el) return;\n\t\tvar classList = el.classList;\n\t\tif (classList.contains(CLASS_SELECTED)) return;\n\t\tif (!direction) {\n\t\t\tif (el.querySelector(SELECTOR_SLIDER_RIGHT)) {\n\t\t\t\tdirection = 'right';\n\t\t\t} else {\n\t\t\t\tdirection = 'left';\n\t\t\t}\n\t\t}\n\t\tvar swipeoutAction = el.querySelector($.classSelector(\".slider-\" + direction));\n\t\tif (!swipeoutAction) return;\n\t\tswipeoutAction.classList.add(CLASS_SELECTED);\n\t\tclassList.add(CLASS_SELECTED);\n\t\tclassList.remove(CLASS_TRANSITIONING);\n\t\tvar buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);\n\t\tvar swipeoutWidth = swipeoutAction.offsetWidth;\n\t\tvar translate = (direction === 'right') ? -swipeoutWidth : swipeoutWidth;\n\t\tvar length = buttons.length;\n\t\tvar button;\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tbutton = buttons[i];\n\t\t\tif (direction === 'right') {\n\t\t\t\tsetTranslate(button, -button.offsetLeft);\n\t\t\t} else {\n\t\t\t\tsetTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));\n\t\t\t}\n\t\t}\n\t\tclassList.add(CLASS_TRANSITIONING);\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsetTranslate(buttons[i], translate);\n\t\t}\n\t\tsetTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), translate);\n\t};\n\t/**\n\t * 关闭滑动菜单\n\t * @param {Object} el\n\t */\n\t$.swipeoutClose = function(el) {\n\t\tif (!el) return;\n\t\tvar classList = el.classList;\n\t\tif (!classList.contains(CLASS_SELECTED)) return;\n\t\tvar direction = el.querySelector(SELECTOR_SLIDER_RIGHT + SELECTOR_SELECTED) ? 'right' : 'left';\n\t\tvar swipeoutAction = el.querySelector($.classSelector(\".slider-\" + direction));\n\t\tif (!swipeoutAction) return;\n\t\tswipeoutAction.classList.remove(CLASS_SELECTED);\n\t\tclassList.remove(CLASS_SELECTED);\n\t\tclassList.add(CLASS_TRANSITIONING);\n\t\tvar buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);\n\t\tvar swipeoutWidth = swipeoutAction.offsetWidth;\n\t\tvar length = buttons.length;\n\t\tvar button;\n\t\tsetTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), 0);\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tbutton = buttons[i];\n\t\t\tif (direction === 'right') {\n\t\t\t\tsetTranslate(button, (-button.offsetLeft));\n\t\t\t} else {\n\t\t\t\tsetTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));\n\t\t\t}\n\t\t}\n\t};\n\n\twindow.addEventListener($.EVENT_END, function(event) { //使用touchend来取消高亮，避免一次点击既不触发tap，doubletap，longtap的事件\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleActive(false);\n\t\tsliderHandle && toggleEvents(cell, true);\n\t});\n\twindow.addEventListener($.EVENT_CANCEL, function(event) { //使用touchcancel来取消高亮，避免一次点击既不触发tap，doubletap，longtap的事件\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\ttoggleActive(false);\n\t\tsliderHandle && toggleEvents(cell, true);\n\t});\n\tvar radioOrCheckboxClick = function(event) {\n\t\tvar type = event.target && event.target.type || '';\n\t\tif (type === 'radio' || type === 'checkbox') {\n\t\t\treturn;\n\t\t}\n\t\tvar classList = cell.classList;\n\t\tif (classList.contains($.className('radio'))) {\n\t\t\tvar input = cell.querySelector('input[type=radio]');\n\t\t\tif (input) {\n\t\t\t\t//\t\t\t\tinput.click();\n\t\t\t\tif (!input.disabled && !input.readOnly) {\n\t\t\t\t\tinput.checked = !input.checked;\n\t\t\t\t\t$.trigger(input, 'change');\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (classList.contains($.className('checkbox'))) {\n\t\t\tvar input = cell.querySelector('input[type=checkbox]');\n\t\t\tif (input) {\n\t\t\t\t//\t\t\t\tinput.click();\n\t\t\t\tif (!input.disabled && !input.readOnly) {\n\t\t\t\t\tinput.checked = !input.checked;\n\t\t\t\t\t$.trigger(input, 'change');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\t//fixed hashchange(android)\n\twindow.addEventListener($.EVENT_CLICK, function(e) {\n\t\tif (cell && cell.classList.contains($.className('collapse'))) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\twindow.addEventListener('doubletap', function(event) {\n\t\tif (cell) {\n\t\t\tradioOrCheckboxClick(event);\n\t\t}\n\t});\n\tvar preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;\n\twindow.addEventListener('tap', function(event) {\n\t\tif (!cell) {\n\t\t\treturn;\n\t\t}\n\t\tvar isExpand = false;\n\t\tvar classList = cell.classList;\n\t\tvar ul = cell.parentNode;\n\t\tif (ul && ul.classList.contains(CLASS_RADIO_VIEW)) {\n\t\t\tif (classList.contains(CLASS_SELECTED)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar selected = ul.querySelector('li' + SELECTOR_SELECTED);\n\t\t\tif (selected) {\n\t\t\t\tselected.classList.remove(CLASS_SELECTED);\n\t\t\t}\n\t\t\tclassList.add(CLASS_SELECTED);\n\t\t\t$.trigger(cell, 'selected', {\n\t\t\t\tel: cell\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (classList.contains($.className('collapse')) && !cell.parentNode.classList.contains($.className('unfold'))) {\n\t\t\tif (!preventDefaultException.test(event.target.tagName)) {\n\t\t\t\tevent.detail.gesture.preventDefault();\n\t\t\t}\n\n\t\t\tif (!classList.contains(CLASS_ACTIVE)) { //展开时,需要收缩其他同类\n\t\t\t\tvar collapse = cell.parentNode.querySelector($.classSelector('.collapse.active'));\n\t\t\t\tif (collapse) {\n\t\t\t\t\tcollapse.classList.remove(CLASS_ACTIVE);\n\t\t\t\t}\n\t\t\t\tisExpand = true;\n\t\t\t}\n\t\t\tclassList.toggle(CLASS_ACTIVE);\n\t\t\tif (isExpand) {\n\t\t\t\t//触发展开事件\n\t\t\t\t$.trigger(cell, 'expand');\n\n\t\t\t\t//scroll\n\t\t\t\t//暂不滚动\n\t\t\t\t// var offsetTop = $.offset(cell).top;\n\t\t\t\t// var scrollTop = document.body.scrollTop;\n\t\t\t\t// var height = window.innerHeight;\n\t\t\t\t// var offsetHeight = cell.offsetHeight;\n\t\t\t\t// var cellHeight = (offsetTop - scrollTop + offsetHeight);\n\t\t\t\t// if (offsetHeight > height) {\n\t\t\t\t// \t$.scrollTo(offsetTop, 300);\n\t\t\t\t// } else if (cellHeight > height) {\n\t\t\t\t// \t$.scrollTo(cellHeight - height + scrollTop, 300);\n\t\t\t\t// }\n\t\t\t}\n\t\t} else {\n\t\t\tradioOrCheckboxClick(event);\n\t\t}\n\t});\n})(mui, window, document);"
  },
  {
    "path": "mui_snippets.rb",
    "content": "require 'ruble'\r\n=begin \r\n HBuilder可使用ruby脚本来扩展代码块和增强操作命令。这是极客的神奇玩具。\r\n  本文档用于用户自定义HTML扩展命令，并非HBuilder预置命令的文档，预置的代码块不可改。查阅预置代码块，请在弹出预置代码块界面时点右下角的编辑按钮，比如div代码块。\r\n  本文档修改完毕，保存即可生效。\r\n  玩的愉快，别玩坏！\r\n  \r\n  脚本开源地址 https://github.com/dcloudio/HBuilderRubyBundle\r\n  可以把你的配置共享到这里，也可以在这里获取其他网友的版本\r\n  \r\n  注：如果1.9版本之前的用户修改过HTML代码块，请点右键打开本文档所在目录，找之前的snippets.rb.bak文件，把修改过的内容放置进来。 \r\n=end\r\n\r\nwith_defaults :scope => 'text.html text' do |bundle|  #=====HTML标签代码块================================================================================\r\n#如下是一个示例代码块，可以复制后再添加新代码块\r\n  snippet 'div_class' do |cmd|  #div_class是显示名称，代码助手提示列表显示时可见\r\n    cmd.trigger = 'divc'        #divc是激活字符，即按下divc后会触发该代码块\r\n    cmd.expansion = \"<div class=\\\"$1\\\">\r\n\t$0\r\n</div>\"                         #expansion是代码块的输出内容，其中$0、$1是光标的停留和切换位置。$1是第一个停留光标，$0是最后回车时停留的光标。\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t      #如果输出涉及到换行和tab，也需严格在这里使用换行和tab。\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t      #输出双引号在前面加\\来转义，输出$使用\\$(单引号中)或\\\\$(双引号中)转义\r\n    cmd.needApplyReContentAssist = true  #这句话的意思是输出后同时激活代码助手，即在$1的位置直接拉出样式列表\r\n  end #div_class代码块结束\r\n  \r\n  snippet 'ng-pluralize' do |cmd|\r\n    cmd.trigger = 'ngp'\r\n    cmd.expansion = \"<ng-pluralize>$1</ng-pluralize>\"\r\n  end\r\n\r\nend\r\n\r\n\r\nwith_defaults :scope => 'text.html entity.other.attribute-name.html' do |bundle|  #=====HTML属性代码块====================================================\r\n#如下是一个示例代码块，可以复制后再添加新代码块\r\n  snippet 'ng-' do |s|   #ng-是显示名称，代码助手提示列表显示时可见\r\n    s.trigger = 'ng-'\t\t #ng-是激活字符，即按下ng-后会触发该代码块\r\n    s.expansion='ng-${1:app/bind/bind-html/bind-template/blur/change/checked/class/class-even/class-odd/click/cloak/controller/copy/csp/cut/dblclick/disabled/focus/hide/href/if/include/init/keydown/keypress/keyup/list/model/mousedown/mouseenter/mouseleave/mousemove/mouseover/mouseup/ng-non-bindable/open/options/paste/readonly/repeat-start/repeat-end/selected/show/src/srcset/style/submit/swipe-left/swipe-right/switch/switch-default/switch-when/view}=\"$2\"'\r\n\t\t#expansion是代码块的输出内容，其中$0、$1是光标的停留和切换位置。\r\n\t  #$1是第一个停留光标，$0是最后回车时停留的光标。\r\n\t  #使用{}包围的内容，是提示值域。\r\n\t  #如果输出涉及到换行和tab，也需严格在这里使用换行和tab。\r\n\t  #输出双引号在前面加\\来转义，输出$使用\\$(单引号中)或\\\\$(双引号中)转义\r\n    s.locationType='HTML_ATTRIBUTE'\r\n  end #ng代码块结束\r\n\r\nend\r\n\r\n\r\nwith_defaults :scope => 'text.html - source', :input => :none, :output => :insert_as_snippet do |bundle|  #=====无显示名称的快捷命令=======================\r\n=begin\r\n如下示例均为系统已经预置的命令，无需重复制作\r\n示例1 Ctrl+Enter输出<br />\r\n  command t(:quick_br) do |cmd|\r\n    cmd.key_binding = 'M2+ENTER'\r\n    cmd.output = :insert_as_snippet\r\n    cmd.input = :none\r\n    cmd.invoke { \"<br />\" }\r\n  end\r\n示例2 Ctrl+9为选中文字添加包围标签\r\n  command t(:wrap_selection_in_tag_pair) do |cmd|\r\n    cmd.key_binding = \"CONTROL+9\"\r\n    cmd.input = :selection\r\n    cmd.invoke do |context|\r\n      selection = ENV['TM_SELECTED_TEXT'] || ''\r\n      if selection.length > 0\r\n        \"<${1:p}>#{selection.gsub('/', '\\/')}</${1:p}>\"\r\n      else\r\n        \"<${1:p}>$0</${1:p}>\"\r\n      end\r\n    end\r\n  end\r\n=end\r\n#可复制一段命令，在下面开始制作新命令\r\nsnippet 'mBody(主体)' do |cmd|\r\n    cmd.trigger = 'mbody'\r\n    cmd.expansion = '<div class=\"mui-content\">\r\n    $0\r\n</div>'\r\nend\r\n\r\nsnippet 'mCheckbox(复选框)' do |cmd|\r\n    cmd.trigger = 'mcheckbox'\r\n    cmd.expansion = \"<div class=\\\"mui-input-row mui-checkbox \\\">\r\n    <label>${1:Checkbox}</label>\r\n    <input name=\\\"${3:Checkbox}\\\" type=\\\"checkbox\\\" ${2:checked}>\r\n</div>\r\n$0\"\r\nend \r\n\r\nsnippet 'mCheckbox(复选框居左)' do |cmd|\r\n    cmd.trigger = 'mcheckbox'\r\n    cmd.expansion = \"<div class=\\\"mui-input-row mui-checkbox mui-left\\\">\r\n  <label>${1:checkbox左侧显示示例}</label>\r\n  <input name=\\\"${3:checkbox1}\\\" value=\\\"Item 1\\\" type=\\\"checkbox\\\" ${2:checked} >\r\n</div>\r\n$0\"\r\nend \r\n  \r\nsnippet 'mCheckbox(复选框禁用选项)' do |cmd|\r\n    cmd.trigger = 'mcheckbox'\r\n    cmd.expansion = \"<div class=\\\"mui-input-row mui-checkbox mui-left mui-disabled\\\">\r\n    <label>${1:disabled checkbox}</label>\r\n    <input name=\\\"checkbox\\\" type=\\\"checkbox\\\" ${2:disabled=\\\"disabled\\\"}>\r\n</div>\r\n$0\"\r\nend \r\n  \r\nsnippet 'mHeader(标题栏)' do |cmd|\r\n    cmd.trigger = 'mheader'\r\n    cmd.expansion = '<header class=\"mui-bar mui-bar-nav\">\r\n    <h1 class=\"mui-title\">${1:标题}</h1>\r\n</header>\r\n$0'\r\nend\r\nsnippet 'mHeader(带返回箭头的标题栏)' do |cmd|\r\n    cmd.trigger = 'mheaderwithBack'\r\n    cmd.expansion = '<header class=\"mui-bar mui-bar-nav\">\r\n    <a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"><\\/a>\r\n    <h1 class=\"mui-title\">${1:标题}</h1>\r\n</header>\r\n$0'\r\nend\r\n    \r\nsnippet 'mText(文本框)' do |cmd|\r\n    cmd.trigger = 'minputtext'\r\n    cmd.needApplyReContentAssist = true \r\n    cmd.expansion = \"<div class=\\\"mui-input-row\\\">\r\n    <label>${3:Input}</label>\r\n    <input type=\\\"${1:text}\\\" placeholder=\\\"${2:普通输入框}\\\">\r\n</div>\r\n$0\"\r\nend\r\n  \r\nsnippet 'mText_Search(搜索框)' do |cmd|\r\n    cmd.trigger = 'minputsearch'\r\n    cmd.expansion = \"<div class=\\\"mui-input-row mui-search\\\">\r\n    <input type=\\\"search\\\" class=\\\"mui-input-clear\\\" placeholder=\\\"$1\\\">\r\n</div>\r\n$0\"\r\nend\r\n\r\nsnippet 'mText_Clear(带清除按钮的文本框)' do |cmd|\r\n    cmd.trigger = 'minputclear'\r\n    cmd.expansion = \"<div class=\\\"mui-input-row\\\">\r\n    <label>Input</label>\r\n    <input type=\\\"text\\\" class=\\\"mui-input-clear\\\" placeholder=\\\"${1:带清除按钮的输入框}\\\">\r\n</div>\r\n$0\"\r\nend\r\n\r\nsnippet 'mText_Speech(语音输入)' do |cmd|\r\n    cmd.trigger = 'minputspeech'\r\n    cmd.expansion = \"<div class=\\\"mui-input-row\\\">\r\n    <label>${2:Input}</label>\r\n    <input type=\\\"text\\\" class=\\\"mui-input-speech mui-input-clear\\\" placeholder=\\\"${1:语音输入}\\\">\r\n</div>\r\n$0\"\r\nend\r\n  \r\nsnippet 'mForm(表单)' do |cmd|\r\n    cmd.trigger = 'mform'\r\n    cmd.needApplyReContentAssist = true \r\n    cmd.expansion = \"<form class=\\\"mui-input-group\\\">\r\n    <div class=\\\"mui-input-row\\\">\r\n        <label>${3:input}</label>\r\n        <input type=\\\"${1:text}\\\" class=\\\"${2:mui-input-clear}\\\" placeholder=\\\"${3:请输入}\\\">\r\n    </div>\r\n</form>$0\"\r\nend\r\n  \r\nsnippet 'mRadio(单选框)' do |cmd|\r\n    cmd.trigger = 'mradio'\r\n    cmd.expansion = \"<div class=\\\"mui-input-row mui-radio \\\">\r\n    <label>${1:Radio}</label>\r\n    <input name=\\\"$2\\\" type=\\\"radio\\\" ${3:checked}>\r\n</div>$0\"\r\nend\r\n  \r\nsnippet 'mPopover(弹出菜单)' do |cmd|\r\n    cmd.trigger = 'mpopover'\r\n    cmd.expansion = '<div class=\"mui-popover\">\r\n    <ul class=\"mui-table-view\">\r\n        <li class=\"mui-table-view-cell\"><a href=\"#\">${1:Item1}</a></li>\r\n        <li class=\"mui-table-view-cell\"><a href=\"#\">${2:Item2}</a></li>\r\n        <li class=\"mui-table-view-cell\"><a href=\"#\">${3:Item3}</a></li>\r\n    </ul>\r\n</div>$0'\r\nend\r\n  \r\nsnippet 'mPopover(H5模式弹出菜单)' do |cmd|\r\n    cmd.trigger = 'mactionsheet'\r\n    cmd.expansion = '<div class=\"mui-popover mui-popover-action mui-popover-bottom\">\r\n    <ul class=\"mui-table-view\">\r\n        <li class=\"mui-table-view-cell\"><a href=\"#\">${1:Item1}</a></li>\r\n        <li class=\"mui-table-view-cell\"><a href=\"#\">${2:Item2}</a></li>\r\n        <li class=\"mui-table-view-cell\"><a href=\"#\">${3:Item3}</a></li>\r\n    </ul>\r\n</div>$0'\r\nend\r\n  \r\nsnippet 'mRange(label+输入框+滑块)' do |cmd|\r\n    cmd.trigger = 'mrangeinput'\r\n    cmd.expansion = \"<h5>label+输入框+滑块：</h5> \r\n<div class=\\\"mui-input-row mui-input-range field-contain\\\">\r\n    <div style=\\\"float:left\\\">\r\n        <label >${4:滑块：}</label>\r\n        <input type=\\\"text\\\" id=\\'field-range-input\\' value=\\'${1:60}\\'>\r\n    </div>\r\n    <div style=\\\"margin-left:121px;\\\">\r\n        <input type=\\\"range\\\" id=\\'field-range\\' value=\\\"${1:60}\\\" min=\\\"${2:0}\\\" max=\\\"${3:100}\\\" />\r\n    </div>\r\n</div> $0\"\r\nend\r\n  \r\nsnippet 'mRange(Label+滑块)' do |cmd|\r\n    cmd.trigger = 'mrangelabel'\r\n    cmd.expansion = \"<h5>label+滑块：<span id=\\'inline-range-val\\'>${1:20}</span></h5> \r\n<div class=\\\"mui-input-row mui-input-range\\\">\r\n    <label>${4:滑块：}</label>\r\n    <input type=\\\"range\\\" id='inline-range' value=\\\"${1:20}\\\" min=\\\"${2:0}\\\" max=\\\"${3:100}\\\" >\r\n</div>$0\"\r\nend\r\n\r\nsnippet 'mRange(整行滑块)' do |cmd|\r\n    cmd.trigger = 'mrangeline'\r\n    cmd.expansion = \"<h5 style=\\\"clear: left;\\\">${4:整行滑块：}<span id=\\'block-range-val\\'>${1:50}</span></h5>   \r\n    <div class=\\\"mui-input-row mui-input-range\\\">\r\n        <input type=\\\"range\\\" id=\\'block-range\\' value=\\\"${1:50}\\\" min=\\\"${2:0}\\\" max=\\\"${3:100}\\\" >\r\n    </div>$0\"\r\nend\r\n  \r\nsnippet 'mSwitch(开关)' do |cmd|\r\n    cmd.trigger = 'mswitch'\r\n    cmd.expansion = \"<div class=\\\"mui-input-row\\\">\r\n    <label>${2:Switch}</label>\r\n    <div class=\\\"mui-switch${1: mui-active}\\\">\r\n        <div class=\\\"mui-switch-handle\\\"></div>\r\n    </div>\r\n</div>$0\"\r\nend\r\n  \r\nsnippet 'mSwitch(开关Mini)' do |cmd|\r\n    cmd.trigger = 'mswitchmini'\r\n    cmd.expansion = \"<div class=\\\"mui-switch mui-switch-mini${1: mui-active}\\\">\r\n  <div class=\\\"mui-switch-handle\\\"></div>\r\n</div>\"\r\nend\r\n  \r\nsnippet 'mbadge（数字角标）' do |cmd|\r\n    cmd.trigger = 'mbadge'\r\n    cmd.expansion = \"<span class=\\\"mui-badge ${1:mui-btn-blue/mui-btn-green/mui-btn-yellow/mui-btn-red/mui-btn-purple/mui-btn-grey}\\\">${2:1}</span>$0\"\r\nend\r\nsnippet 'mbadge（数字角标无底色）' do |cmd|\r\n    cmd.trigger = 'mbadge_inverted'\r\n    cmd.expansion = \"<span class=\\\"mui-badge mui-badge-inverted ${1:mui-btn-blue/mui-btn-green/mui-btn-yellow/mui-btn-red/mui-btn-purple/mui-btn-grey}\\\">${2:1}</span>$0\"\r\nend\r\n  \r\nsnippet 'mTab(底部选项卡)' do |cmd|\r\n    cmd.trigger = 'mtab'\r\n    cmd.expansion = \"<nav class=\\\"mui-bar mui-bar-tab\\\">\r\n    <a class=\\\"mui-tab-item mui-active\\\">\r\n        <span class=\\\"mui-icon mui-icon-home\\\"></span>\r\n        <span class=\\\"mui-tab-label\\\">${1:首页}</span>\r\n    </a>\r\n    <a class=\\\"mui-tab-item\\\">\r\n        <span class=\\\"mui-icon mui-icon-phone\\\"></span>\r\n        <span class=\\\"mui-tab-label\\\">${2:电话}</span>\r\n    </a>\r\n    <a class=\\\"mui-tab-item\\\">\r\n        <span class=\\\"mui-icon mui-icon-email\\\"></span>\r\n        <span class=\\\"mui-tab-label\\\">${3:邮件}</span>\r\n    </a>\r\n    <a class=\\\"mui-tab-item\\\">\r\n        <span class=\\\"mui-icon mui-icon-gear\\\"></span>\r\n        <span class=\\\"mui-tab-label\\\">${4:设置}</span>\r\n    </a>\r\n</nav>$0\"\r\nend\r\n  \r\nsnippet 'mTabSegmented(div选项卡)' do |cmd|\r\n    cmd.trigger = 'mtabsegmented'\r\n    cmd.expansion = \"<div class=\\\"mui-segmented-control\\\">\r\n    <a class=\\\"mui-control-item mui-active\\\" href=\\\"#item1\\\">${1:选项卡1}</a>\r\n    <a class=\\\"mui-control-item\\\" href=\\\"#item2\\\">${1:选项卡2}</a>\r\n</div>$0\"\r\nend\r\n  \r\nsnippet 'mTabSegmented(可左右拖动的选项卡)' do |cmd|\r\n    cmd.trigger = 'mtabviewpage'\r\n    cmd.expansion = '<div class=\"mui-slider\">\r\n    <div class=\"mui-slider-indicator mui-segmented-control mui-segmented-control-inverted\">\r\n        <a class=\"mui-control-item\" href=\"#item1\">${1:选项卡1}</a>\r\n        <a class=\"mui-control-item\" href=\"#item2\">${2:选项卡2}</a>\r\n    </div>\r\n    <div id=\"sliderProgressBar\" class=\"mui-slider-progress-bar mui-col-xs-4\"></div>\r\n    <div class=\"mui-slider-group\">\r\n        <div id=\"item1\" class=\"mui-slider-item mui-control-content mui-active\">\r\n            <ul class=\"mui-table-view\">\r\n                <li class=\"mui-table-view-cell\">${3:第1个选项卡子项}</li>\r\n                <li class=\"mui-table-view-cell\">${4:第1个选项卡子项}</li>\r\n            </ul>\r\n        </div>\r\n        <div id=\"item2mobile\" class=\"mui-slider-item mui-control-content\">\r\n            <ul class=\"mui-table-view\">\r\n                <li class=\"mui-table-view-cell\">${5:第2个选项卡子项}</li>\r\n                <li class=\"mui-table-view-cell\">${6:第2个选项卡子项}</li>\r\n            </ul>\r\n        </div>\r\n    </div>\r\n</div>$0'\r\nend\r\n  \r\nsnippet 'mPagination(分页)' do |cmd|\r\n    cmd.trigger = 'mpagination'\r\n    cmd.expansion = \"<ul class=\\\"mui-pagination\\\">\r\n    <li class=\\\"mui-disabled\\\">\r\n        <span> &laquo; </span>\r\n    </li>\r\n    <li class=\\\"mui-active\\\">\r\n        <a href=\\\"#\\\">${1:1}</a>\r\n    </li>\r\n    <li>\r\n        <a href=\\\"#\\\">${2:2}</a>\r\n    </li>\r\n    <li>\r\n        <a href=\\\"#\\\">&raquo;</a>\r\n    </li>\r\n</ul>$0\"\r\nend\r\n  \r\nsnippet 'mList(列表)' do |cmd|\r\n    cmd.trigger = 'mlist'\r\n    cmd.expansion = \"<div class=\\\"mui-card\\\">\r\n    <ul class=\\\"mui-table-view\\\">\r\n        <li class=\\\"mui-table-view-cell\\\">\r\n            <a class=\\\"mui-navigate-right\\\">\r\n                ${1:Item 1}\r\n            </a>\r\n        </li>\r\n        <li class=\\\"mui-table-view-cell\\\">\r\n            <a class=\\\"mui-navigate-right\\\">\r\n                 ${2:Item 2}\r\n            </a>\r\n        </li>\r\n        <li class=\\\"mui-table-view-cell\\\">\r\n            <a class=\\\"mui-navigate-right\\\">\r\n                 ${3:Item 3}\r\n            </a>\r\n        </li>\r\n    </ul>\r\n</div>$0\"\r\nend\r\n  \r\nsnippet 'mListMedia(图文列表图片居左)' do |cmd|\r\n    cmd.trigger = 'mlist_Media_left'\r\n    cmd.needApplyReContentAssist = true \r\n    cmd.expansion = \"<ul class=\\\"mui-table-view\\\">\r\n    <li class=\\\"mui-table-view-cell mui-media\\\">\r\n        <a href=\\\"javascript:;\\\">\r\n            <img class=\\\"mui-media-object mui-pull-left\\\" src=\\\"$1\\\">\r\n            <div class=\\\"mui-media-body\\\">\r\n                ${4:幸福}\r\n                <p class=\\\"mui-ellipsis\\\">${5:能和心爱的人一起睡觉，是件幸福的事情；可是，打呼噜怎么办？}</p>\r\n            </div>\r\n        </a>\r\n    </li>\r\n    <li class=\\\"mui-table-view-cell mui-media\\\">\r\n        <a href=\\\"javascript:;\\\">\r\n            <img class=\\\"mui-media-object mui-pull-left\\\" src=\\\"$2\\\">\r\n            <div class=\\\"mui-media-body\\\">\r\n                ${6:木屋}\r\n                <p class=\\\"mui-ellipsis\\\">${7:想要这样一间小木屋，夏天挫冰吃瓜，冬天围炉取暖.}</p>\r\n            </div>\r\n        </a>\r\n    </li>\r\n    <li class=\\\"mui-table-view-cell mui-media\\\">\r\n        <a href=\\\"javascript:;\\\">\r\n            <img class=\\\"mui-media-object mui-pull-left\\\" src=\\\"$3\\\">\r\n            <div class=\\\"mui-media-body\\\">\r\n               ${8: CBD}\r\n                <p class=\\\"mui-ellipsis\\\">${9:烤炉模式的城，到黄昏，如同打翻的调色盘一般.}</p>\r\n            </div>\r\n        </a>\r\n    </li>\r\n</ul>$0\"\r\nend\r\n\r\nsnippet 'mListMedia(图文列表图片居右)' do |cmd|\r\n    cmd.trigger = 'mlist_Media_right'\r\n    cmd.needApplyReContentAssist = true \r\n    cmd.expansion = \"<ul class=\\\"mui-table-view\\\">\r\n    <li class=\\\"mui-table-view-cell mui-media\\\">\r\n        <a href=\\\"javascript:;\\\">\r\n            <img class=\\\"mui-media-object mui-pull-right\\\" src=\\\"$1\\\">\r\n            <div class=\\\"mui-media-body\\\">\r\n                ${4:幸福}\r\n                <p class=\\\"mui-ellipsis\\\">${5:能和心爱的人一起睡觉，是件幸福的事情；可是，打呼噜怎么办？}</p>\r\n            </div>\r\n        </a>\r\n    </li>\r\n    <li class=\\\"mui-table-view-cell mui-media\\\">\r\n        <a href=\\\"javascript:;\\\">\r\n            <img class=\\\"mui-media-object mui-pull-right\\\" src=\\\"$2\\\">\r\n            <div class=\\\"mui-media-body\\\">\r\n                ${6:木屋}\r\n                <p class=\\\"mui-ellipsis\\\">${7:想要这样一间小木屋，夏天挫冰吃瓜，冬天围炉取暖.}</p>\r\n            </div>\r\n        </a>\r\n    </li>\r\n    <li class=\\\"mui-table-view-cell mui-media\\\">\r\n        <a href=\\\"javascript:;\\\">\r\n            <img class=\\\"mui-media-object mui-pull-right\\\" src=\\\"$3\\\">\r\n            <div class=\\\"mui-media-body\\\">\r\n               ${8: CBD}\r\n                <p class=\\\"mui-ellipsis\\\">${9:烤炉模式的城，到黄昏，如同打翻的调色盘一般.}</p>\r\n            </div>\r\n        </a>\r\n    </li>\r\n</ul>$0\"\r\nend\r\n\r\nsnippet 'mGrid(九宫格)' do |cmd|\r\n    cmd.trigger = 'mgrid'\r\n    cmd.expansion = \"<div class=\\\"mui-card\\\">\r\n    <ul class=\\\"mui-table-view mui-grid-view mui-grid-9\\\">\r\n        <li class=\\\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\\\">\r\n            <a href=\\\"#\\\">\r\n                <span class=\\\"mui-icon mui-icon-home\\\"></span>\r\n                <div class=\\\"mui-media-body\\\">${1:Home}</div>\r\n            </a>\r\n        </li>\r\n        <li class=\\\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\\\">\r\n            <a href=\\\"#\\\">\r\n                <span class=\\\"mui-icon mui-icon-email\\\"><span class=\\\"mui-badge mui-badge-red\\\">5</span></span>\r\n                <div class=\\\"mui-media-body\\\">${2:Email}</div>\r\n            </a>\r\n        </li>\r\n        <li class=\\\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\\\">\r\n            <a href=\\\"#\\\">\r\n                <span class=\\\"mui-icon mui-icon-chatbubble\\\"></span>\r\n                <div class=\\\"mui-media-body\\\">${3:Chat}</div>\r\n            </a>\r\n        </li>\r\n        <li class=\\\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\\\">\r\n            <a href=\\\"#\\\">\r\n                <span class=\\\"mui-icon mui-icon-location\\\"></span>\r\n                <div class=\\\"mui-media-body\\\">${4:Location}</div>\r\n            </a>\r\n        </li>\r\n        <li class=\\\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\\\">\r\n            <a href=\\\"#\\\">\r\n                <span class=\\\"mui-icon mui-icon-search\\\"></span>\r\n                <div class=\\\"mui-media-body\\\">${5:Search}</div>\r\n            </a>\r\n        </li>\r\n        <li class=\\\"mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3\\\">\r\n            <a href=\\\"#\\\">\r\n                <span class=\\\"mui-icon mui-icon-phone\\\"></span>\r\n                <div class=\\\"mui-media-body\\\">${6:Phone}</div>\r\n            </a>\r\n        </li>\r\n    </ul>\r\n</div>$0\"\r\nend\r\n  \r\nsnippet 'mGallery-Table(图文表格)' do |cmd|\r\n    cmd.needApplyReContentAssist = true \r\n    cmd.trigger = 'mgallerytable'\r\n    cmd.expansion = \"<ul class=\\\"mui-table-view mui-grid-view\\\">\r\n    <li class=\\\"mui-table-view-cell mui-media mui-col-xs-6\\\">\r\n        <a href=\\\"#\\\">\r\n            <img class=\\\"mui-media-object\\\" src=\\\"http://placehold.it/400x300\\\">\r\n            <div class=\\\"mui-media-body\\\">${1:文字说明1}</div>\r\n        </a>\r\n    </li>\r\n    <li class=\\\"mui-table-view-cell mui-media mui-col-xs-6\\\">\r\n        <a href=\\\"#\\\">\r\n            <img class=\\\"mui-media-object\\\" src=\\\"http://placehold.it/400x300\\\">\r\n            <div class=\\\"mui-media-body\\\">${2:文字说明2}</div>\r\n        </a>\r\n    </li>\r\n</ul>$0\"\r\nend\r\n  \r\nsnippet 'mGallery图片轮播' do |cmd|\r\n    cmd.needApplyReContentAssist = true \r\n    cmd.trigger = 'mgallery'\r\n    cmd.expansion = \"<div class=\\\"mui-slider\\\">\r\n    <div class=\\\"mui-slider-group\\\">\r\n        <div class=\\\"mui-slider-item\\\">\r\n            <a href=\\\"#\\\">\r\n                <img src=\\\"$1\\\">\r\n                <p class=\\\"mui-slider-title\\\">${3:文字说明1}</p>\r\n            </a>\r\n        </div>\r\n        <div class=\\\"mui-slider-item\\\">\r\n            <a href=\\\"#\\\">\r\n                <img src=\\\"$2\\\">\r\n                <p class=\\\"mui-slider-title\\\">${4:文字说明2}</p>\r\n            </a>\r\n        </div>\r\n    </div>\r\n    <div class=\\\"mui-slider-indicator\\\">\r\n        <div class=\\\"mui-indicator mui-active\\\"></div>\r\n        <div class=\\\"mui-indicator\\\"></div>\r\n    </div>\r\n</div>$0\"\r\nend\r\n  \r\nsnippet 'mactionsheet（操作表）' do |cmd|\r\n    cmd.trigger = 'actionsheet'\r\n    cmd.expansion = \"<div id=\\\"sheet1\\\" class=\\\"mui-popover mui-popover-bottom mui-popover-action \\\">\r\n    <!-- 可选择菜单 -->\r\n    <ul class=\\\"mui-table-view\\\">\r\n      <li class=\\\"mui-table-view-cell\\\">\r\n        <a href=\\\"#\\\">${1菜单1}</a>\r\n      </li>\r\n      <li class=\\\"mui-table-view-cell\\\">\r\n        <a href=\\\"#\\\">${2菜单2}</a>\r\n      </li>\r\n    </ul>\r\n    <!-- 取消菜单 -->\r\n    <ul class=\\\"mui-table-view\\\">\r\n      <li class=\\\"mui-table-view-cell\\\">\r\n        <a href=\\\"#sheet1\\\"><b>${3取消}</b></a>\r\n      </li>\r\n    </ul>\r\n</div>$0\"\r\nend\r\n\r\nsnippet 'maccordion（折叠面板）' do |cmd|\r\n    cmd.trigger = 'maccordion'\r\n    cmd.expansion = '<ul class=\"mui-table-view\">\r\n    <li class=\"mui-table-view-cell mui-collapse\">\r\n        <a class=\"mui-navigate-right\" href=\"#\">${1:面板1}</a>\r\n        <div class=\"mui-collapse-content\">\r\n            <p>${2:面板1子内容}</p>\r\n        </div>\r\n    </li>\r\n    <li class=\"mui-table-view-cell mui-collapse\">\r\n        <a class=\"mui-navigate-right\" href=\"#\">${3:面板}</a>\r\n            <div class=\"mui-collapse-content\">\r\n            <p>${4:面板2子内容}</p>\r\n        </div>\r\n    </li>\r\n    <li class=\"mui-table-view-cell mui-collapse\">\r\n        <a class=\"mui-navigate-right\" href=\"#\">${5:面板3}</a>\r\n        <div class=\"mui-collapse-content\">\r\n            <p>${6:面板3子内容}</p>\r\n        </div>\r\n    </li>\r\n</ul>$0'\r\nend\r\n\r\nsnippet 'mnumbox(数字输入框)' do |cmd|\r\n    cmd.trigger = 'mnumbox'\r\n    cmd.expansion = \"<div class=\\\"mui-numbox\\\" data-numbox-step=\\'${1:1}\\' data-numbox-min=\\'${2:0}\\' data-numbox-max=\\'${3:10}\\'>\r\n  <button class=\\\"mui-btn mui-numbox-btn-minus\\\" type=\\\"button\\\">-</button>\r\n  <input class=\\\"mui-numbox-input\\\" type=\\\"number\\\" />\r\n  <button class=\\\"mui-btn mui-numbox-btn-plus\\\" type=\\\"button\\\">+</button>\r\n</div>$0\"\r\nend\r\nsnippet 'mrefreshContainer(刷新容器)' do |cmd|\r\n    cmd.trigger = 'mrefresh'\r\n    cmd.expansion = \"<!--下拉刷新容器-->\r\n<div id=\\\"refreshContainer\\\" class=\\\"mui-content mui-scroll-wrapper\\\">\r\n  <div class=\\\"mui-scroll\\\">\r\n    <!--数据列表-->\r\n    <ul class=\\\"mui-table-view mui-table-view-chevron\\\">\r\n      $0\r\n    </ul>\r\n  </div>\r\n</div>\"\r\nend\r\n \r\nsnippet 'mButton(按钮)' do |cmd|\r\n    cmd.trigger = 'mbutton'\r\n    cmd.expansion = \"<button type=\\\"button\\\" class=\\\"mui-btn ${1:mui-btn-blue/mui-btn-green/mui-btn-yellow/mui-btn-red/mui-btn-purple/mui-btn-grey}\\\">${2:按钮}</button>$0\"\r\nend\r\nsnippet 'mButton(按钮无底色,有边框)' do |cmd|\r\n    cmd.trigger = 'mbutton_outline'\r\n    cmd.expansion = \"<button type=\\\"button\\\" class=\\\"mui-btn ${1:mui-btn-blue/mui-btn-green/mui-btn-yellow/mui-btn-red/mui-btn-purple/mui-btn-grey} mui-btn-outlined\\\">${2:按钮}</button>$0\"\r\nend\r\n  \r\nend\r\n\r\n  "
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"mui\",\n  \"description\": \"最接近原生体验的高性能前端框架.\",\n  \"version\": \"3.7.3\",\n  \"keywords\": [\n    \"css\",\n    \"fonts\",\n    \"ios\",\n    \"android\",\n    \"mobile\",\n    \"prototype\"\n  ],\n  \"homepage\": \"http://dev.dcloud.net.cn/mui\",\n  \"author\": \"DCloud\",\n  \"style\": \"dist/css/mui.css\",\n  \"sass\": \"sass/mui.scss\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/dcloudio/mui.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/dcloudio/mui/issues\"\n  },\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"test\": \"grunt test\"\n  },\n  \"devDependencies\": {\n    \"body-parser\": \"~1.9.1\",\n    \"grunt\": \"~0.4.5\",\n    \"grunt-contrib-clean\": \"~0.5.0\",\n    \"grunt-contrib-concat\": \"~0.4.0\",\n    \"grunt-contrib-connect\": \"^0.8.0\",\n    \"grunt-contrib-copy\": \"~0.5.0\",\n    \"grunt-contrib-csslint\": \"~0.2.0\",\n    \"grunt-contrib-cssmin\": \"~0.9.0\",\n    \"grunt-contrib-handlebars\": \"~0.8.0\",\n    \"grunt-contrib-jshint\": \"~0.10.0\",\n    \"grunt-contrib-sass\": \"~0.7.3\",\n    \"grunt-contrib-uglify\": \"~0.4.0\",\n    \"grunt-contrib-watch\": \"~0.6.1\",\n    \"grunt-csscomb\": \"~2.0.1\",\n    \"grunt-html-validation\": \"~0.1.17\",\n    \"grunt-jekyll\": \"~0.4.2\",\n    \"grunt-jscs\": \"~1.7.0\",\n    \"grunt-jsdoc\": \"~0.5.4\",\n    \"grunt-open\": \"^0.2.3\",\n    \"grunt-sed\": \"~0.1.1\",\n    \"gulp\": \"^3.9.1\",\n    \"load-grunt-tasks\": \"~0.4.0\",\n    \"time-grunt\": \"~0.3.1\"\n  },\n  \"engines\": {\n    \"node\": \"~0.10.1\"\n  }\n}\n"
  },
  {
    "path": "plugin/picker/css/mui.dtpicker.css",
    "content": ".mui-dtpicker {\n\tposition: fixed;\n\tleft: 0px;\n\twidth: 100%;\n\tz-index: 999999;\n\tbackground-color: #eee;\n\tborder-top: solid 1px #ccc;\n\tbox-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1);\n\t-webkit-transition: .3s;\n\tbottom: 0px;\n\t-webkit-transform: translateY(300px);\n}\n.mui-dtpicker.mui-active {\n\t-webkit-transform: translateY(0px);\n}\n/*用于将 html body 禁止滚动条*/\n\n.mui-dtpicker-active-for-page {\n\toverflow: hidden !important;\n}\n.mui-android-5-1 .mui-dtpicker {\n\tbottom: -300px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-android-5-1 .mui-dtpicker.mui-active {\n\tbottom: 0px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-dtpicker-header {\n\tpadding: 6px;\n\tfont-size: 14px;\n\tcolor: #888;\n}\n.mui-dtpicker-header button {\n\tfont-size: 12px;\n\tpadding: 5px 10px;\n}\n.mui-dtpicker-header button:last-child {\n\tfloat: right;\n}\n.mui-dtpicker-body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 200px;\n\t/*border-top: solid 1px #eee;\r\n\tbackground-color: #fff;*/\n}\n.mui-ios .mui-dtpicker-body {\n\t-webkit-perspective: 1200px;\n\tperspective: 1200px;\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n.mui-dtpicker-title h5 {\n\tdisplay: inline-block;\n\twidth: 20%;\n\tmargin: 0px;\n\tpadding: 8px;\n\ttext-align: center;\n\tborder-top: solid 1px #ddd;\n\tbackground-color: #f0f0f0;\n\tborder-bottom: solid 1px #ccc;\n}\n.mui-dtpicker .mui-picker {\n\twidth: 20%;\n\theight: 100%;\n\tmargin: 0px;\n\tfloat: left;\n\tborder: none;\n}\n/*年月日时分*/\n\n[data-type=\"datetime\"] .mui-picker,\n[data-type=\"time\"] .mui-dtpicker-title h5 {\n\twidth: 20%;\n}\n[data-type=\"datetime\"] [data-id=\"picker-h\"],\n[data-type=\"datetime\"] [data-id=\"title-h\"] {\n\tborder-left: dotted 1px #ccc;\n}\n/*年月日*/\n\n[data-type=\"date\"] .mui-picker,\n[data-type=\"date\"] .mui-dtpicker-title h5 {\n\twidth: 33.3%;\n}\n[data-type=\"date\"] [data-id=\"picker-h\"],\n[data-type=\"date\"] [data-id=\"picker-i\"],\n[data-type=\"date\"] [data-id=\"title-h\"],\n[data-type=\"date\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}\n/*年月日时*/\n\n[data-type=\"hour\"] .mui-picker,\n[data-type=\"hour\"] .mui-dtpicker-title h5 {\n\twidth: 25%;\n}\n[data-type=\"hour\"] [data-id=\"picker-i\"],\n[data-type=\"hour\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}\n[data-type=\"hour\"] [data-id=\"picker-h\"],\n[data-type=\"hour\"] [data-id=\"title-h\"] {\n\tborder-left: dotted 1px #ccc;\n}\n/*时分*/\n\n[data-type=\"time\"] .mui-picker,\n[data-type=\"time\"] .mui-dtpicker-title h5 {\n\twidth: 50%;\n}\n[data-type=\"time\"] [data-id=\"picker-y\"],\n[data-type=\"time\"] [data-id=\"picker-m\"],\n[data-type=\"time\"] [data-id=\"picker-d\"],\n[data-type=\"time\"] [data-id=\"title-y\"],\n[data-type=\"time\"] [data-id=\"title-m\"],\n[data-type=\"time\"] [data-id=\"title-d\"] {\n\tdisplay: none;\n}\n/*年月*/\n\n[data-type=\"month\"] .mui-picker,\n[data-type=\"month\"] .mui-dtpicker-title h5 {\n\twidth: 50%;\n}\n[data-type=\"month\"] [data-id=\"picker-d\"],\n[data-type=\"month\"] [data-id=\"picker-h\"],\n[data-type=\"month\"] [data-id=\"picker-i\"],\n[data-type=\"month\"] [data-id=\"title-d\"],\n[data-type=\"month\"] [data-id=\"title-h\"],\n[data-type=\"month\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}"
  },
  {
    "path": "plugin/picker/css/mui.picker.css",
    "content": "/**\n * 选择列表插件\n * varstion 2.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n.mui-picker {\n    background-color: #ddd;\n    position: relative;\n    height: 200px;\n    overflow: hidden;\n    border: solid 1px rgba(0, 0, 0, 0.1);\n    -webkit-user-select: none;\n    user-select: none;\n    box-sizing: border-box;\n    list-style: none;\n}\n.mui-picker-inner {\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n    -webkit-mask-box-image: linear-gradient(top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n}\n.mui-pciker-list,\n.mui-pciker-rule {\n    box-sizing: border-box;\n    padding: 0px;\n    margin: 0px;\n    width: 100%;\n    height: 36px;\n    line-height: 36px;\n    position: absolute;\n    left: 0px;\n    top: 50%;\n    margin-top: -18px;\n}\n.mui-pciker-rule-bg {\n    z-index: 0;\n    /*background-color: #cfd5da;*/\n}\n.mui-pciker-rule-ft {\n    z-index: 2;\n    border-top: solid 1px rgba(0, 0, 0, 0.1);\n    border-bottom: solid 1px rgba(0, 0, 0, 0.1);\n    /*-webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/\n    /*box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/\n}\n.mui-pciker-list {\n    z-index: 1;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    -webkit-transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n    transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n}\n.mui-pciker-list li {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    text-align: center;\n    vertical-align: middle;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    overflow: hidden;\n    box-sizing: border-box;\n    font-size: 16px;\n    font-family: \"Helvetica Neue\", \"Helvetica\", \"Arial\", \"sans-serif\";\n    color: #888;\n    padding: 0px 8px;\n    white-space: nowrap;\n    -webkit-text-overflow: ellipsis;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    cursor: default;\n    visibility: hidden;\n    list-style: none;\n}\n.mui-pciker-list li.highlight,\n.mui-pciker-list li.visible {\n    visibility: visible;\n}\n.mui-pciker-list li.highlight {\n    color: #222;\n}"
  },
  {
    "path": "plugin/picker/css/mui.poppicker.css",
    "content": ".mui-poppicker {\n\tposition: fixed;\n\tleft: 0px;\n\twidth: 100%;\n\tz-index: 999;\n\tbackground-color: #eee;\n\tborder-top: solid 1px #ccc;\n\tbox-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1);\n\t-webkit-transition: .3s;\n\ttransition: .3s;\n\tbottom: 0px;\n\t-webkit-transform: translateY(300px);\n\ttransform: translateY(300px);\n}\n\n.mui-poppicker.mui-active {\n\t-webkit-transform: translateY(0px);\n\ttransform: translateY(0px);\n}\n\n.mui-android-5-1 .mui-poppicker {\n\tbottom: -300px;\n\t-webkit-transition-property: bottom;\n\ttransition-property: bottom;\n\t-webkit-transform: none;\n\ttransform: none;\n}\n\n.mui-android-5-1 .mui-poppicker.mui-active {\n\tbottom: 0px;\n\t-webkit-transition-property: bottom;\n\ttransition-property: bottom;\n\t-webkit-transform: none;\n\ttransform: none;\n}\n\n.mui-poppicker-header {\n\tpadding: 6px;\n\tfont-size: 14px;\n\tcolor: #888;\n}\n\n.mui-poppicker-header .mui-btn {\n\tfont-size: 12px;\n\tpadding: 5px 10px;\n}\n\n.mui-poppicker-btn-cancel {\n\tfloat: left;\n}\n\n.mui-poppicker-btn-ok {\n\tfloat: right;\n}\n\n.mui-poppicker-clear {\n\tclear: both;\n\theight: 0px;\n\tline-height: 0px;\n\tfont-size: 0px;\n\toverflow: hidden;\n}\n\n.mui-poppicker-body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 200px;\n\tborder-top: solid 1px #ddd;\n\t/*-webkit-perspective: 1200px;\n\tperspective: 1200px;\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;*/\n}\n\n.mui-poppicker-body .mui-picker {\n\twidth: 100%;\n\theight: 100%;\n\tmargin: 0px;\n\tborder: none;\n\tfloat: left;\n}"
  },
  {
    "path": "plugin/picker/dist/css/mui.picker.all.css",
    "content": "/**\n * 选择列表插件\n * varstion 2.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n.mui-picker {\n    background-color: #ddd;\n    position: relative;\n    height: 200px;\n    overflow: hidden;\n    border: solid 1px rgba(0, 0, 0, 0.1);\n    -webkit-user-select: none;\n    user-select: none;\n    box-sizing: border-box;\n    list-style: none;\n}\n.mui-picker-inner {\n    box-sizing: border-box;\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n    -webkit-mask-box-image: linear-gradient(top, transparent, transparent 5%, #fff 20%, #fff 80%, transparent 95%, transparent);\n}\n.mui-pciker-list,\n.mui-pciker-rule {\n    box-sizing: border-box;\n    padding: 0px;\n    margin: 0px;\n    width: 100%;\n    height: 36px;\n    line-height: 36px;\n    position: absolute;\n    left: 0px;\n    top: 50%;\n    margin-top: -18px;\n}\n.mui-pciker-rule-bg {\n    z-index: 0;\n    /*background-color: #cfd5da;*/\n}\n.mui-pciker-rule-ft {\n    z-index: 2;\n    border-top: solid 1px rgba(0, 0, 0, 0.1);\n    border-bottom: solid 1px rgba(0, 0, 0, 0.1);\n    /*-webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/\n    /*box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);*/\n}\n.mui-pciker-list {\n    z-index: 1;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    -webkit-transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n    transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n}\n.mui-pciker-list li {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    text-align: center;\n    vertical-align: middle;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    overflow: hidden;\n    box-sizing: border-box;\n    font-size: 16px;\n    font-family: \"Helvetica Neue\", \"Helvetica\", \"Arial\", \"sans-serif\";\n    color: #888;\n    padding: 0px 8px;\n    white-space: nowrap;\n    -webkit-text-overflow: ellipsis;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    cursor: default;\n    visibility: hidden;\n    list-style: none;\n}\n.mui-pciker-list li.highlight,\n.mui-pciker-list li.visible {\n    visibility: visible;\n}\n.mui-pciker-list li.highlight {\n    color: #222;\n}\n.mui-poppicker {\n\tposition: fixed;\n\tleft: 0px;\n\twidth: 100%;\n\tz-index: 999;\n\tbackground-color: #eee;\n\tborder-top: solid 1px #ccc;\n\tbox-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1);\n\t-webkit-transition: .3s;\n\ttransition: .3s;\n\tbottom: 0px;\n\t-webkit-transform: translateY(300px);\n\ttransform: translateY(300px);\n}\n\n.mui-poppicker.mui-active {\n\t-webkit-transform: translateY(0px);\n\ttransform: translateY(0px);\n}\n\n.mui-android-5-1 .mui-poppicker {\n\tbottom: -300px;\n\t-webkit-transition-property: bottom;\n\ttransition-property: bottom;\n\t-webkit-transform: none;\n\ttransform: none;\n}\n\n.mui-android-5-1 .mui-poppicker.mui-active {\n\tbottom: 0px;\n\t-webkit-transition-property: bottom;\n\ttransition-property: bottom;\n\t-webkit-transform: none;\n\ttransform: none;\n}\n\n.mui-poppicker-header {\n\tpadding: 6px;\n\tfont-size: 14px;\n\tcolor: #888;\n}\n\n.mui-poppicker-header .mui-btn {\n\tfont-size: 12px;\n\tpadding: 5px 10px;\n}\n\n.mui-poppicker-btn-cancel {\n\tfloat: left;\n}\n\n.mui-poppicker-btn-ok {\n\tfloat: right;\n}\n\n.mui-poppicker-clear {\n\tclear: both;\n\theight: 0px;\n\tline-height: 0px;\n\tfont-size: 0px;\n\toverflow: hidden;\n}\n\n.mui-poppicker-body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 200px;\n\tborder-top: solid 1px #ddd;\n\t/*-webkit-perspective: 1200px;\n\tperspective: 1200px;\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;*/\n}\n\n.mui-poppicker-body .mui-picker {\n\twidth: 100%;\n\theight: 100%;\n\tmargin: 0px;\n\tborder: none;\n\tfloat: left;\n}\n.mui-dtpicker {\n\tposition: fixed;\n\tleft: 0px;\n\twidth: 100%;\n\tz-index: 999999;\n\tbackground-color: #eee;\n\tborder-top: solid 1px #ccc;\n\tbox-shadow: 0px -5px 7px 0px rgba(0, 0, 0, 0.1);\n\t-webkit-transition: .3s;\n\tbottom: 0px;\n\t-webkit-transform: translateY(300px);\n}\n.mui-dtpicker.mui-active {\n\t-webkit-transform: translateY(0px);\n}\n/*用于将 html body 禁止滚动条*/\n\n.mui-dtpicker-active-for-page {\n\toverflow: hidden !important;\n}\n.mui-android-5-1 .mui-dtpicker {\n\tbottom: -300px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-android-5-1 .mui-dtpicker.mui-active {\n\tbottom: 0px;\n\t-webkit-transition-property: bottom;\n\t-webkit-transform: none;\n}\n.mui-dtpicker-header {\n\tpadding: 6px;\n\tfont-size: 14px;\n\tcolor: #888;\n}\n.mui-dtpicker-header button {\n\tfont-size: 12px;\n\tpadding: 5px 10px;\n}\n.mui-dtpicker-header button:last-child {\n\tfloat: right;\n}\n.mui-dtpicker-body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 200px;\n\t/*border-top: solid 1px #eee;\r\n\tbackground-color: #fff;*/\n}\n.mui-ios .mui-dtpicker-body {\n\t-webkit-perspective: 1200px;\n\tperspective: 1200px;\n\t-webkit-transform-style: preserve-3d;\n\ttransform-style: preserve-3d;\n}\n.mui-dtpicker-title h5 {\n\tdisplay: inline-block;\n\twidth: 20%;\n\tmargin: 0px;\n\tpadding: 8px;\n\ttext-align: center;\n\tborder-top: solid 1px #ddd;\n\tbackground-color: #f0f0f0;\n\tborder-bottom: solid 1px #ccc;\n}\n.mui-dtpicker .mui-picker {\n\twidth: 20%;\n\theight: 100%;\n\tmargin: 0px;\n\tfloat: left;\n\tborder: none;\n}\n/*年月日时分*/\n\n[data-type=\"datetime\"] .mui-picker,\n[data-type=\"time\"] .mui-dtpicker-title h5 {\n\twidth: 20%;\n}\n[data-type=\"datetime\"] [data-id=\"picker-h\"],\n[data-type=\"datetime\"] [data-id=\"title-h\"] {\n\tborder-left: dotted 1px #ccc;\n}\n/*年月日*/\n\n[data-type=\"date\"] .mui-picker,\n[data-type=\"date\"] .mui-dtpicker-title h5 {\n\twidth: 33.3%;\n}\n[data-type=\"date\"] [data-id=\"picker-h\"],\n[data-type=\"date\"] [data-id=\"picker-i\"],\n[data-type=\"date\"] [data-id=\"title-h\"],\n[data-type=\"date\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}\n/*年月日时*/\n\n[data-type=\"hour\"] .mui-picker,\n[data-type=\"hour\"] .mui-dtpicker-title h5 {\n\twidth: 25%;\n}\n[data-type=\"hour\"] [data-id=\"picker-i\"],\n[data-type=\"hour\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}\n[data-type=\"hour\"] [data-id=\"picker-h\"],\n[data-type=\"hour\"] [data-id=\"title-h\"] {\n\tborder-left: dotted 1px #ccc;\n}\n/*时分*/\n\n[data-type=\"time\"] .mui-picker,\n[data-type=\"time\"] .mui-dtpicker-title h5 {\n\twidth: 50%;\n}\n[data-type=\"time\"] [data-id=\"picker-y\"],\n[data-type=\"time\"] [data-id=\"picker-m\"],\n[data-type=\"time\"] [data-id=\"picker-d\"],\n[data-type=\"time\"] [data-id=\"title-y\"],\n[data-type=\"time\"] [data-id=\"title-m\"],\n[data-type=\"time\"] [data-id=\"title-d\"] {\n\tdisplay: none;\n}\n/*年月*/\n\n[data-type=\"month\"] .mui-picker,\n[data-type=\"month\"] .mui-dtpicker-title h5 {\n\twidth: 50%;\n}\n[data-type=\"month\"] [data-id=\"picker-d\"],\n[data-type=\"month\"] [data-id=\"picker-h\"],\n[data-type=\"month\"] [data-id=\"picker-i\"],\n[data-type=\"month\"] [data-id=\"title-d\"],\n[data-type=\"month\"] [data-id=\"title-h\"],\n[data-type=\"month\"] [data-id=\"title-i\"] {\n\tdisplay: none;\n}"
  },
  {
    "path": "plugin/picker/dist/js/mui.picker.all.js",
    "content": "/**\n * 选择列表插件\n * varstion 2.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, window, document, undefined) {\n\n\tvar MAX_EXCEED = 30;\n\tvar VISIBLE_RANGE = 90;\n\tvar DEFAULT_ITEM_HEIGHT = 40;\n\tvar BLUR_WIDTH = 10;\n\n\tvar rad2deg = $.rad2deg = function(rad) {\n\t\treturn rad / (Math.PI / 180);\n\t};\n\n\tvar deg2rad = $.deg2rad = function(deg) {\n\t\treturn deg * (Math.PI / 180);\n\t};\n\n\tvar platform = navigator.platform.toLowerCase();\n\tvar userAgent = navigator.userAgent.toLowerCase();\n\tvar isIos = (userAgent.indexOf('iphone') > -1 ||\n\t\t\tuserAgent.indexOf('ipad') > -1 ||\n\t\t\tuserAgent.indexOf('ipod') > -1) &&\n\t\t(platform.indexOf('iphone') > -1 ||\n\t\t\tplatform.indexOf('ipad') > -1 ||\n\t\t\tplatform.indexOf('ipod') > -1);\n\t//alert(isIos);\n\n\tvar Picker = $.Picker = function(holder, options) {\n\t\tvar self = this;\n\t\tself.holder = holder;\n\t\tself.options = options || {};\n\t\tself.init();\n\t\tself.initInertiaParams();\n\t\tself.calcElementItemPostion(true);\n\t\tself.bindEvent();\n\t};\n\n\tPicker.prototype.findElementItems = function() {\n\t\tvar self = this;\n\t\tself.elementItems = [].slice.call(self.holder.querySelectorAll('li'));\n\t\treturn self.elementItems;\n\t};\n\n\tPicker.prototype.init = function() {\n\t\tvar self = this;\n\t\tself.list = self.holder.querySelector('ul');\n\t\tself.findElementItems();\n\t\tself.height = self.holder.offsetHeight;\n\t\tself.r = self.height / 2 - BLUR_WIDTH;\n\t\tself.d = self.r * 2;\n\t\tself.itemHeight = self.elementItems.length > 0 ? self.elementItems[0].offsetHeight : DEFAULT_ITEM_HEIGHT;\n\t\tself.itemAngle = parseInt(self.calcAngle(self.itemHeight * 0.8));\n\t\tself.hightlightRange = self.itemAngle / 2;\n\t\tself.visibleRange = VISIBLE_RANGE;\n\t\tself.beginAngle = 0;\n\t\tself.beginExceed = self.beginAngle - MAX_EXCEED;\n\t\tself.list.angle = self.beginAngle;\n\t\tif (isIos) {\n\t\t\tself.list.style.webkitTransformOrigin = \"center center \" + self.r + \"px\";\n\t\t}\n\t};\n\n\tPicker.prototype.calcElementItemPostion = function(andGenerateItms) {\n\t\tvar self = this;\n\t\tif (andGenerateItms) {\n\t\t\tself.items = [];\n\t\t}\n\t\tself.elementItems.forEach(function(item) {\n\t\t\tvar index = self.elementItems.indexOf(item);\n\t\t\tself.endAngle = self.itemAngle * index;\n\t\t\titem.angle = self.endAngle;\n\t\t\titem.style.webkitTransformOrigin = \"center center -\" + self.r + \"px\";\n\t\t\titem.style.webkitTransform = \"translateZ(\" + self.r + \"px) rotateX(\" + (-self.endAngle) + \"deg)\";\n\t\t\tif (andGenerateItms) {\n\t\t\t\tvar dataItem = {};\n\t\t\t\tdataItem.text = item.innerHTML || '';\n\t\t\t\tdataItem.value = item.getAttribute('data-value') || dataItem.text;\n\t\t\t\tself.items.push(dataItem);\n\t\t\t}\n\t\t});\n\t\tself.endExceed = self.endAngle + MAX_EXCEED;\n\t\tself.calcElementItemVisibility(self.beginAngle);\n\t};\n\n\tPicker.prototype.calcAngle = function(c) {\n\t\tvar self = this;\n\t\tvar a = b = parseFloat(self.r);\n\t\t//直径的整倍数部分直接乘以 180\n\t\tc = Math.abs(c); //只算角度不关心正否值\n\t\tvar intDeg = parseInt(c / self.d) * 180;\n\t\tc = c % self.d;\n\t\t//余弦\n\t\tvar cosC = (a * a + b * b - c * c) / (2 * a * b);\n\t\tvar angleC = intDeg + rad2deg(Math.acos(cosC));\n\t\treturn angleC;\n\t};\n\n\tPicker.prototype.calcElementItemVisibility = function(angle) {\n\t\tvar self = this;\n\t\tself.elementItems.forEach(function(item) {\n\t\t\tvar difference = Math.abs(item.angle - angle);\n\t\t\tif (difference < self.hightlightRange) {\n\t\t\t\titem.classList.add('highlight');\n\t\t\t} else if (difference < self.visibleRange) {\n\t\t\t\titem.classList.add('visible');\n\t\t\t\titem.classList.remove('highlight');\n\t\t\t} else {\n\t\t\t\titem.classList.remove('highlight');\n\t\t\t\titem.classList.remove('visible');\n\t\t\t}\n\t\t});\n\t};\n\n\tPicker.prototype.setAngle = function(angle) {\n\t\tvar self = this;\n\t\tself.list.angle = angle;\n\t\tself.list.style.webkitTransform = \"perspective(1000px) rotateY(0deg) rotateX(\" + angle + \"deg)\";\n\t\tself.calcElementItemVisibility(angle);\n\t};\n\n\tPicker.prototype.bindEvent = function() {\n\t\tvar self = this;\n\t\tvar lastAngle = 0;\n\t\tvar startY = null;\n\t\tvar isPicking = false;\n\t\tself.holder.addEventListener($.EVENT_START, function(event) {\n\t\t\tisPicking = true;\n\t\t\tevent.preventDefault();\n\t\t\tself.list.style.webkitTransition = '';\n\t\t\tstartY = (event.changedTouches ? event.changedTouches[0] : event).pageY;\n\t\t\tlastAngle = self.list.angle;\n\t\t\tself.updateInertiaParams(event, true);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_END, function(event) {\n\t\t\tisPicking = false;\n\t\t\tevent.preventDefault();\n\t\t\tself.startInertiaScroll(event);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_CANCEL, function(event) {\n\t\t\tisPicking = false;\n\t\t\tevent.preventDefault();\n\t\t\tself.startInertiaScroll(event);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\tif (!isPicking) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tvar endY = (event.changedTouches ? event.changedTouches[0] : event).pageY;\n\t\t\tvar dragRange = endY - startY;\n\t\t\tvar dragAngle = self.calcAngle(dragRange);\n\t\t\tvar newAngle = dragRange > 0 ? lastAngle - dragAngle : lastAngle + dragAngle;\n\t\t\tif (newAngle > self.endExceed) {\n\t\t\t\tnewAngle = self.endExceed\n\t\t\t}\n\t\t\tif (newAngle < self.beginExceed) {\n\t\t\t\tnewAngle = self.beginExceed\n\t\t\t}\n\t\t\tself.setAngle(newAngle);\n\t\t\tself.updateInertiaParams(event);\n\t\t}, false);\n\t\t//--\n\t\tself.list.addEventListener('tap', function(event) {\n\t\t\telementItem = event.target;\n\t\t\tif (elementItem.tagName == 'LI') {\n\t\t\t\tself.setSelectedIndex(self.elementItems.indexOf(elementItem), 200);\n\t\t\t}\n\t\t}, false);\n\t};\n\n\tPicker.prototype.initInertiaParams = function() {\n\t\tvar self = this;\n\t\tself.lastMoveTime = 0;\n\t\tself.lastMoveStart = 0;\n\t\tself.stopInertiaMove = false;\n\t};\n\n\tPicker.prototype.updateInertiaParams = function(event, isStart) {\n\t\tvar self = this;\n\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\tif (isStart) {\n\t\t\tself.lastMoveStart = point.pageY;\n\t\t\tself.lastMoveTime = event.timeStamp || Date.now();\n\t\t\tself.startAngle = self.list.angle;\n\t\t} else {\n\t\t\tvar nowTime = event.timeStamp || Date.now();\n\t\t\tif (nowTime - self.lastMoveTime > 300) {\n\t\t\t\tself.lastMoveTime = nowTime;\n\t\t\t\tself.lastMoveStart = point.pageY;\n\t\t\t}\n\t\t}\n\t\tself.stopInertiaMove = true;\n\t};\n\n\tPicker.prototype.startInertiaScroll = function(event) {\n\t\tvar self = this;\n\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t/** \n\t\t * 缓动代码\n\t\t */\n\t\tvar nowTime = event.timeStamp || Date.now();\n\t\tvar v = (point.pageY - self.lastMoveStart) / (nowTime - self.lastMoveTime); //最后一段时间手指划动速度  \n\t\tvar dir = v > 0 ? -1 : 1; //加速度方向  \n\t\tvar deceleration = dir * 0.0006 * -1;\n\t\tvar duration = Math.abs(v / deceleration); // 速度消减至0所需时间  \n\t\tvar dist = v * duration / 2; //最终移动多少 \n\t\tvar startAngle = self.list.angle;\n\t\tvar distAngle = self.calcAngle(dist) * dir;\n\t\t//----\n\t\tvar srcDistAngle = distAngle;\n\t\tif (startAngle + distAngle < self.beginExceed) {\n\t\t\tdistAngle = self.beginExceed - startAngle;\n\t\t\tduration = duration * (distAngle / srcDistAngle) * 0.6;\n\t\t}\n\t\tif (startAngle + distAngle > self.endExceed) {\n\t\t\tdistAngle = self.endExceed - startAngle;\n\t\t\tduration = duration * (distAngle / srcDistAngle) * 0.6;\n\t\t}\n\t\t//----\n\t\tif (distAngle == 0) {\n\t\t\tself.endScroll();\n\t\t\treturn;\n\t\t}\n\t\tself.scrollDistAngle(nowTime, startAngle, distAngle, duration);\n\t};\n\n\tPicker.prototype.scrollDistAngle = function(nowTime, startAngle, distAngle, duration) {\n\t\tvar self = this;\n\t\tself.stopInertiaMove = false;\n\t\t(function(nowTime, startAngle, distAngle, duration) {\n\t\t\tvar frameInterval = 13;\n\t\t\tvar stepCount = duration / frameInterval;\n\t\t\tvar stepIndex = 0;\n\t\t\t(function inertiaMove() {\n\t\t\t\tif (self.stopInertiaMove) return;\n\t\t\t\tvar newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\n\t\t\t\tself.setAngle(newAngle);\n\t\t\t\tstepIndex++;\n\t\t\t\tif (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\n\t\t\t\t\tself.endScroll();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetTimeout(inertiaMove, frameInterval);\n\t\t\t})();\n\t\t})(nowTime, startAngle, distAngle, duration);\n\t};\n\n\tPicker.prototype.quartEaseOut = function(t, b, c, d) {\n\t\treturn -c * ((t = t / d - 1) * t * t * t - 1) + b;\n\t};\n\n\tPicker.prototype.endScroll = function() {\n\t\tvar self = this;\n\t\tif (self.list.angle < self.beginAngle) {\n\t\t\tself.list.style.webkitTransition = \"150ms ease-out\";\n\t\t\tself.setAngle(self.beginAngle);\n\t\t} else if (self.list.angle > self.endAngle) {\n\t\t\tself.list.style.webkitTransition = \"150ms ease-out\";\n\t\t\tself.setAngle(self.endAngle);\n\t\t} else {\n\t\t\tvar index = parseInt((self.list.angle / self.itemAngle).toFixed(0));\n\t\t\tself.list.style.webkitTransition = \"100ms ease-out\";\n\t\t\tself.setAngle(self.itemAngle * index);\n\t\t}\n\t\tself.triggerChange();\n\t};\n\n\tPicker.prototype.triggerChange = function(force) {\n\t\tvar self = this;\n\t\tsetTimeout(function() {\n\t\t\tvar index = self.getSelectedIndex();\n\t\t\tvar item = self.items[index];\n\t\t\tif ($.trigger && (index != self.lastIndex || force === true)) {\n\t\t\t\t$.trigger(self.holder, 'change', {\n\t\t\t\t\t\"index\": index,\n\t\t\t\t\t\"item\": item\n\t\t\t\t});\n\t\t\t\t//console.log('change:' + index);\n\t\t\t}\n\t\t\tself.lastIndex = index;\n\t\t\ttypeof force === 'function' && force();\n\t\t}, 0);\n\t};\n\n\tPicker.prototype.correctAngle = function(angle) {\n\t\tvar self = this;\n\t\tif (angle < self.beginAngle) {\n\t\t\treturn self.beginAngle;\n\t\t} else if (angle > self.endAngle) {\n\t\t\treturn self.endAngle;\n\t\t} else {\n\t\t\treturn angle;\n\t\t}\n\t};\n\n\tPicker.prototype.setItems = function(items) {\n\t\tvar self = this;\n\t\tself.items = items || [];\n\t\tvar buffer = [];\n\t\tself.items.forEach(function(item) {\n\t\t\tif (item !== null && item !== undefined) {\n\t\t\t\tbuffer.push('<li>' + (item.text || item) + '</li>');\n\t\t\t}\n\t\t});\n\t\tself.list.innerHTML = buffer.join('');\n\t\tself.findElementItems();\n\t\tself.calcElementItemPostion();\n\t\tself.setAngle(self.correctAngle(self.list.angle));\n\t\tself.triggerChange(true);\n\t};\n\n\tPicker.prototype.getItems = function() {\n\t\tvar self = this;\n\t\treturn self.items;\n\t};\n\n\tPicker.prototype.getSelectedIndex = function() {\n\t\tvar self = this;\n\t\treturn parseInt((self.list.angle / self.itemAngle).toFixed(0));\n\t};\n\n\tPicker.prototype.setSelectedIndex = function(index, duration, callback) {\n\t\tvar self = this;\n\t\tself.list.style.webkitTransition = '';\n\t\tvar angle = self.correctAngle(self.itemAngle * index);\n\t\tif (duration && duration > 0) {\n\t\t\tvar distAngle = angle - self.list.angle;\n\t\t\tself.scrollDistAngle(Date.now(), self.list.angle, distAngle, duration);\n\t\t} else {\n\t\t\tself.setAngle(angle);\n\t\t}\n\t\tself.triggerChange(callback);\n\t};\n\n\tPicker.prototype.getSelectedItem = function() {\n\t\tvar self = this;\n\t\treturn self.items[self.getSelectedIndex()];\n\t};\n\n\tPicker.prototype.getSelectedValue = function() {\n\t\tvar self = this;\n\t\treturn (self.items[self.getSelectedIndex()] || {}).value;\n\t};\n\n\tPicker.prototype.getSelectedText = function() {\n\t\tvar self = this;\n\t\treturn (self.items[self.getSelectedIndex()] || {}).text;\n\t};\n\n\tPicker.prototype.setSelectedValue = function(value, duration, callback) {\n\t\tvar self = this;\n\t\tfor (var index in self.items) {\n\t\t\tvar item = self.items[index];\n\t\t\tif (item.value == value) {\n\t\t\t\tself.setSelectedIndex(index, duration, callback);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\n\tif ($.fn) {\n\t\t$.fn.picker = function(options) {\n\t\t\t//遍历选择的元素\n\t\t\tthis.each(function(i, element) {\n\t\t\t\tif (element.picker) return;\n\t\t\t\tif (options) {\n\t\t\t\t\telement.picker = new Picker(element, options);\n\t\t\t\t} else {\n\t\t\t\t\tvar optionsText = element.getAttribute('data-picker-options');\n\t\t\t\t\tvar _options = optionsText ? JSON.parse(optionsText) : {};\n\t\t\t\t\telement.picker = new Picker(element, _options);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn this[0] ? this[0].picker : null;\n\t\t};\n\n\t\t//自动初始化\n\t\t$.ready(function() {\n\t\t\t$('.mui-picker').picker();\n\t\t});\n\t}\n\n})(window.mui || window, window, document, undefined);\n//end\n/**\n * 弹出选择列表插件\n * 此组件依赖 listpcker ，请在页面中先引入 mui.picker.css + mui.picker.js\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar panelBuffer = '<div class=\"mui-poppicker\">\\\n\t\t<div class=\"mui-poppicker-header\">\\\n\t\t\t<button class=\"mui-btn mui-poppicker-btn-cancel\">取消</button>\\\n\t\t\t<button class=\"mui-btn mui-btn-blue mui-poppicker-btn-ok\">确定</button>\\\n\t\t\t<div class=\"mui-poppicker-clear\"></div>\\\n\t\t</div>\\\n\t\t<div class=\"mui-poppicker-body\">\\\n\t\t</div>\\\n\t</div>';\n\n\tvar pickerBuffer = '<div class=\"mui-picker\">\\\n\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t</ul>\\\n\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t</div>\\\n\t</div>';\n\n\t//定义弹出选择器类\n\tvar PopPicker = $.PopPicker = $.Class.extend({\n\t\t//构造函数\n\t\tinit: function(options) {\n\t\t\tvar self = this;\n\t\t\tself.options = options || {};\n\t\t\tself.options.buttons = self.options.buttons || ['取消', '确定'];\n\t\t\tself.panel = $.dom(panelBuffer)[0];\n\t\t\tdocument.body.appendChild(self.panel);\n\t\t\tself.ok = self.panel.querySelector('.mui-poppicker-btn-ok');\n\t\t\tself.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');\n\t\t\tself.body = self.panel.querySelector('.mui-poppicker-body');\n\t\t\tself.mask = $.createMask();\n\t\t\tself.cancel.innerText = self.options.buttons[0];\n\t\t\tself.ok.innerText = self.options.buttons[1];\n\t\t\tself.cancel.addEventListener('tap', function(event) {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself.ok.addEventListener('tap', function(event) {\n\t\t\t\tif (self.callback) {\n\t\t\t\t\tvar rs = self.callback(self.getSelectedItems());\n\t\t\t\t\tif (rs !== false) {\n\t\t\t\t\t\tself.hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tself.mask[0].addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself._createPicker();\n\t\t\t//防止滚动穿透\n\t\t\tself.panel.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t\tself.panel.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t},\n\t\t_createPicker: function() {\n\t\t\tvar self = this;\n\t\t\tvar layer = self.options.layer || 1;\n\t\t\tvar width = (100 / layer) + '%';\n\t\t\tself.pickers = [];\n\t\t\tfor (var i = 1; i <= layer; i++) {\n\t\t\t\tvar pickerElement = $.dom(pickerBuffer)[0];\n\t\t\t\tpickerElement.style.width = width;\n\t\t\t\tself.body.appendChild(pickerElement);\n\t\t\t\tvar picker = $(pickerElement).picker();\n\t\t\t\tself.pickers.push(picker);\n\t\t\t\tpickerElement.addEventListener('change', function(event) {\n\t\t\t\t\tvar nextPickerElement = this.nextSibling;\n\t\t\t\t\tif (nextPickerElement && nextPickerElement.picker) {\n\t\t\t\t\t\tvar eventData = event.detail || {};\n\t\t\t\t\t\tvar preItem = eventData.item || {};\n\t\t\t\t\t\tnextPickerElement.picker.setItems(preItem.children);\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t}\n\t\t},\n\t\t//填充数据\n\t\tsetData: function(data) {\n\t\t\tvar self = this;\n\t\t\tdata = data || [];\n\t\t\tself.pickers[0].setItems(data);\n\t\t},\n\t\t//获取选中的项（数组）\n\t\tgetSelectedItems: function() {\n\t\t\tvar self = this;\n\t\t\tvar items = [];\n\t\t\tfor (var i in self.pickers) {\n\t\t\t\tvar picker = self.pickers[i];\n\t\t\t\titems.push(picker.getSelectedItem() || {});\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\t\t//显示\n\t\tshow: function(callback) {\n\t\t\tvar self = this;\n\t\t\tself.callback = callback;\n\t\t\tself.mask.show();\n\t\t\tdocument.body.classList.add($.className('poppicker-active-for-page'));\n\t\t\tself.panel.classList.add($.className('active'));\n\t\t\t//处理物理返回键\n\t\t\tself.__back = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tself.hide();\n\t\t\t};\n\t\t},\n\t\t//隐藏\n\t\thide: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.disposed) return;\n\t\t\tself.panel.classList.remove($.className('active'));\n\t\t\tself.mask.close();\n\t\t\tdocument.body.classList.remove($.className('poppicker-active-for-page'));\n\t\t\t//处理物理返回键\n\t\t\t$.back=self.__back;\n\t\t},\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.hide();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.panel.parentNode.removeChild(self.panel);\n\t\t\t\tfor (var name in self) {\n\t\t\t\t\tself[name] = null;\n\t\t\t\t\tdelete self[name];\n\t\t\t\t};\n\t\t\t\tself.disposed = true;\n\t\t\t}, 300);\n\t\t}\n\t});\n\n})(mui, document);\n/**\n * 日期时间插件\n * varstion 1.0.5\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar domBuffer = '<div class=\"mui-dtpicker\" data-type=\"datetime\">\\\n\t\t<div class=\"mui-dtpicker-header\">\\\n\t\t\t<button data-id=\"btn-cancel\" class=\"mui-btn\">取消</button>\\\n\t\t\t<button data-id=\"btn-ok\" class=\"mui-btn mui-btn-blue\">确定</button>\\\n\t\t</div>\\\n\t\t<div class=\"mui-dtpicker-title\"><h5 data-id=\"title-y\">年</h5><h5 data-id=\"title-m\">月</h5><h5 data-id=\"title-d\">日</h5><h5 data-id=\"title-h\">时</h5><h5 data-id=\"title-i\">分</h5></div>\\\n\t\t<div class=\"mui-dtpicker-body\">\\\n\t\t\t<div data-id=\"picker-y\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-m\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-d\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-h\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-i\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t</div>\\\n\t</div>';\n\n\t//plugin\n\tvar DtPicker = $.DtPicker = $.Class.extend({\n\t\tinit: function(options) {\n\t\t\tvar self = this;\n\t\t\tvar _picker = $.dom(domBuffer)[0];\n\t\t\tdocument.body.appendChild(_picker);\n\t\t\t$('[data-id*=\"picker\"]', _picker).picker();\n\t\t\tvar ui = self.ui = {\n\t\t\t\tpicker: _picker,\n\t\t\t\tmask: $.createMask(),\n\t\t\t\tok: $('[data-id=\"btn-ok\"]', _picker)[0],\n\t\t\t\tcancel: $('[data-id=\"btn-cancel\"]', _picker)[0],\n\t\t\t\ty: $('[data-id=\"picker-y\"]', _picker)[0],\n\t\t\t\tm: $('[data-id=\"picker-m\"]', _picker)[0],\n\t\t\t\td: $('[data-id=\"picker-d\"]', _picker)[0],\n\t\t\t\th: $('[data-id=\"picker-h\"]', _picker)[0],\n\t\t\t\ti: $('[data-id=\"picker-i\"]', _picker)[0],\n\t\t\t\tlabels: $('[data-id*=\"title-\"]', _picker),\n\t\t\t};\n\t\t\tui.cancel.addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tui.ok.addEventListener('tap', function() {\n\t\t\t\tvar rs = self.callback(self.getSelected());\n\t\t\t\tif (rs !== false) {\n\t\t\t\t\tself.hide();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.y.addEventListener('change', function(e) { //目前的change事件容易导致级联触发\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) {\n\t\t\t\t\tself._createMonth();\n\t\t\t\t} else {\n\t\t\t\t\tself._createDay();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.m.addEventListener('change', function(e) {\n\t\t\t\tself._createDay();\n\t\t\t}, false);\n\t\t\tui.d.addEventListener('change', function(e) {\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) { //仅提供了beginDate时，触发day,hours,minutes的change\n\t\t\t\t\tself._createHours();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.h.addEventListener('change', function(e) {\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) {\n\t\t\t\t\tself._createMinutes();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.mask[0].addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself._create(options);\n\t\t\t//防止滚动穿透\n\t\t\tself.ui.picker.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t\tself.ui.picker.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t},\n\t\tgetSelected: function() {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tvar type = self.options.type;\n\t\t\tvar selected = {\n\t\t\t\ttype: type,\n\t\t\t\ty: ui.y.picker.getSelectedItem(),\n\t\t\t\tm: ui.m.picker.getSelectedItem(),\n\t\t\t\td: ui.d.picker.getSelectedItem(),\n\t\t\t\th: ui.h.picker.getSelectedItem(),\n\t\t\t\ti: ui.i.picker.getSelectedItem(),\n\t\t\t\ttoString: function() {\n\t\t\t\t\treturn this.value;\n\t\t\t\t}\n\t\t\t};\n\t\t\tswitch (type) {\n\t\t\t\tcase 'datetime':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'time':\n\t\t\t\t\tselected.value = selected.h.value + ':' + selected.i.value;\n\t\t\t\t\tselected.text = selected.h.text + ':' + selected.i.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'month':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'hour':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\tsetSelectedValue: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tvar parsedValue = self._parseValue(value);\n\t\t\t//TODO 嵌套过多，因为picker的change时间是异步(考虑到性能)的，所以为了保证change之后再setSelected，目前使用回调处理\n\t\t\tui.y.picker.setSelectedValue(parsedValue.y, 0, function() {\n\t\t\t\tui.m.picker.setSelectedValue(parsedValue.m, 0, function() {\n\t\t\t\t\tui.d.picker.setSelectedValue(parsedValue.d, 0, function() {\n\t\t\t\t\t\tui.h.picker.setSelectedValue(parsedValue.h, 0, function() {\n\t\t\t\t\t\t\tui.i.picker.setSelectedValue(parsedValue.i, 0);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tisLeapYear: function(year) {\n\t\t\treturn (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);\n\t\t},\n\t\t_inArray: function(array, item) {\n\t\t\tfor (var index in array) {\n\t\t\t\tvar _item = array[index];\n\t\t\t\tif (_item === item) return true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tgetDayNum: function(year, month) {\n\t\t\tvar self = this;\n\t\t\tif (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) {\n\t\t\t\treturn 31;\n\t\t\t} else if (self._inArray([4, 6, 9, 11], month)) {\n\t\t\t\treturn 30;\n\t\t\t} else if (self.isLeapYear(year)) {\n\t\t\t\treturn 29;\n\t\t\t} else {\n\t\t\t\treturn 28;\n\t\t\t}\n\t\t},\n\t\t_fill: function(num) {\n\t\t\tnum = num.toString();\n\t\t\tif (num.length < 2) {\n\t\t\t\tnum = 0 + num;\n\t\t\t}\n\t\t\treturn num;\n\t\t},\n\t\t_isBeginYear: function() {\n\t\t\treturn this.options.beginYear === parseInt(this.ui.y.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginMonth: function() {\n\t\t\treturn this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginDay: function() {\n\t\t\treturn this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginHours: function() {\n\t\t\treturn this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.picker.getSelectedValue());\n\t\t},\n\t\t_isEndYear: function() {\n\t\t\treturn this.options.endYear === parseInt(this.ui.y.picker.getSelectedValue());\n\t\t},\n\t\t_isEndMonth: function() {\n\t\t\treturn this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.picker.getSelectedValue());\n\t\t},\n\t\t_isEndDay: function() {\n\t\t\treturn this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.picker.getSelectedValue());\n\t\t},\n\t\t_isEndHours: function() {\n\t\t\treturn this._isEndDay() && this.options.endHours === parseInt(this.ui.h.picker.getSelectedValue());\n\t\t},\n\t\t_createYear: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\t//生成年列表\n\t\t\tvar yArray = [];\n\t\t\tif (options.customData.y) {\n\t\t\t\tyArray = options.customData.y;\n\t\t\t} else {\n\t\t\t\tvar yBegin = options.beginYear;\n\t\t\t\tvar yEnd = options.endYear;\n\t\t\t\tfor (var y = yBegin; y <= yEnd; y++) {\n\t\t\t\t\tyArray.push({\n\t\t\t\t\t\ttext: y + '',\n\t\t\t\t\t\tvalue: y\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.y.picker.setItems(yArray);\n\t\t\t//ui.y.picker.setSelectedValue(current);\n\t\t},\n\t\t_createMonth: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成月列表\n\t\t\tvar mArray = [];\n\t\t\tif (options.customData.m) {\n\t\t\t\tmArray = options.customData.m;\n\t\t\t} else {\n\t\t\t\tvar m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1;\n\t\t\t\tvar maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12;\n\t\t\t\tfor (; m <= maxMonth; m++) {\n\t\t\t\t\tvar val = self._fill(m);\n\t\t\t\t\tmArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.m.picker.setItems(mArray);\n\t\t\t//ui.m.picker.setSelectedValue(current);\n\t\t},\n\t\t_createDay: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成日列表\n\t\t\tvar dArray = [];\n\t\t\tif (options.customData.d) {\n\t\t\t\tdArray = options.customData.d;\n\t\t\t} else {\n\t\t\t\tvar d = self._isBeginMonth() ? options.beginDay : 1;\n\t\t\t\tvar maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.picker.getSelectedValue()), parseInt(this.ui.m.picker.getSelectedValue()));\n\t\t\t\tfor (; d <= maxDay; d++) {\n\t\t\t\t\tvar val = self._fill(d);\n\t\t\t\t\tdArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.d.picker.setItems(dArray);\n\t\t\tcurrent = current || ui.d.picker.getSelectedValue();\n\t\t\t//ui.d.picker.setSelectedValue(current);\n\t\t},\n\t\t_createHours: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\t//生成时列表\n\t\t\tvar hArray = [];\n\t\t\tif (options.customData.h) {\n\t\t\t\thArray = options.customData.h;\n\t\t\t} else {\n\t\t\t\tvar h = self._isBeginDay() ? options.beginHours : 0;\n\t\t\t\tvar maxHours = self._isEndDay() ? options.endHours : 23;\n\t\t\t\tfor (; h <= maxHours; h++) {\n\t\t\t\t\tvar val = self._fill(h);\n\t\t\t\t\thArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.h.picker.setItems(hArray);\n\t\t\t//ui.h.picker.setSelectedValue(current);\n\t\t},\n\t\t_createMinutes: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成分列表\n\t\t\tvar iArray = [];\n\t\t\tif (options.customData.i) {\n\t\t\t\tiArray = options.customData.i;\n\t\t\t} else {\n\t\t\t\tvar i = self._isBeginHours() ? options.beginMinutes : 0;\n\t\t\t\tvar maxMinutes = self._isEndHours() ? options.endMinutes : 59;\n\t\t\t\tfor (; i <= maxMinutes; i++) {\n\t\t\t\t\tvar val = self._fill(i);\n\t\t\t\t\tiArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.i.picker.setItems(iArray);\n\t\t\t//ui.i.picker.setSelectedValue(current);\n\t\t},\n\t\t_setLabels: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\tui.labels.each(function(i, label) {\n\t\t\t\tlabel.innerText = options.labels[i];\n\t\t\t});\n\t\t},\n\t\t_setButtons: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\tui.cancel.innerText = options.buttons[0];\n\t\t\tui.ok.innerText = options.buttons[1];\n\t\t},\n\t\t_parseValue: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar rs = {};\n\t\t\tif (value) {\n\t\t\t\tvar parts = value.replace(\":\", \"-\").replace(\" \", \"-\").split(\"-\");\n\t\t\t\trs.y = parts[0];\n\t\t\t\trs.m = parts[1];\n\t\t\t\trs.d = parts[2];\n\t\t\t\trs.h = parts[3];\n\t\t\t\trs.i = parts[4];\n\t\t\t} else {\n\t\t\t\tvar now = new Date();\n\t\t\t\trs.y = now.getFullYear();\n\t\t\t\trs.m = now.getMonth() + 1;\n\t\t\t\trs.d = now.getDate();\n\t\t\t\trs.h = now.getHours();\n\t\t\t\trs.i = now.getMinutes();\n\t\t\t}\n\t\t\treturn rs;\n\t\t},\n\t\t_create: function(options) {\n\t\t\tvar self = this;\n\t\t\toptions = options || {};\n\t\t\toptions.labels = options.labels || ['年', '月', '日', '时', '分'];\n\t\t\toptions.buttons = options.buttons || ['取消', '确定'];\n\t\t\toptions.type = options.type || 'datetime';\n\t\t\toptions.customData = options.customData || {};\n\t\t\tself.options = options;\n\t\t\tvar now = new Date();\n\t\t\tvar beginDate = options.beginDate;\n\t\t\tif (beginDate instanceof Date && !isNaN(beginDate.valueOf())) { //设定了开始日期\n\t\t\t\toptions.beginYear = beginDate.getFullYear();\n\t\t\t\toptions.beginMonth = beginDate.getMonth() + 1;\n\t\t\t\toptions.beginDay = beginDate.getDate();\n\t\t\t\toptions.beginHours = beginDate.getHours();\n\t\t\t\toptions.beginMinutes = beginDate.getMinutes();\n\t\t\t}\n\t\t\tvar endDate = options.endDate;\n\t\t\tif (endDate instanceof Date && !isNaN(endDate.valueOf())) { //设定了结束日期\n\t\t\t\toptions.endYear = endDate.getFullYear();\n\t\t\t\toptions.endMonth = endDate.getMonth() + 1;\n\t\t\t\toptions.endDay = endDate.getDate();\n\t\t\t\toptions.endHours = endDate.getHours();\n\t\t\t\toptions.endMinutes = endDate.getMinutes();\n\t\t\t}\n\t\t\toptions.beginYear = options.beginYear || (now.getFullYear() - 5);\n\t\t\toptions.endYear = options.endYear || (now.getFullYear() + 5);\n\t\t\tvar ui = self.ui;\n\t\t\t//设定label\n\t\t\tself._setLabels();\n\t\t\tself._setButtons();\n\t\t\t//设定类型\n\t\t\tui.picker.setAttribute('data-type', options.type);\n\t\t\t//生成\n\t\t\tself._createYear();\n\t\t\tself._createMonth();\n\t\t\tself._createDay();\n\t\t\tself._createHours();\n\t\t\tself._createMinutes();\n\t\t\t//设定默认值\n\t\t\tself.setSelectedValue(options.value);\n\t\t},\n\t\t//显示\n\t\tshow: function(callback) {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tself.callback = callback || $.noop;\n\t\t\tui.mask.show();\n\t\t\tdocument.body.classList.add($.className('dtpicker-active-for-page'));\n\t\t\tui.picker.classList.add($.className('active'));\n\t\t\t//处理物理返回键\n\t\t\tself.__back = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tself.hide();\n\t\t\t};\n\t\t},\n\t\thide: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.disposed) return;\n\t\t\tvar ui = self.ui;\n\t\t\tui.picker.classList.remove($.className('active'));\n\t\t\tui.mask.close();\n\t\t\tdocument.body.classList.remove($.className('dtpicker-active-for-page'));\n\t\t\t//处理物理返回键\n\t\t\t$.back = self.__back;\n\t\t},\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.hide();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.ui.picker.parentNode.removeChild(self.ui.picker);\n\t\t\t\tfor (var name in self) {\n\t\t\t\t\tself[name] = null;\n\t\t\t\t\tdelete self[name];\n\t\t\t\t};\n\t\t\t\tself.disposed = true;\n\t\t\t}, 300);\n\t\t}\n\t});\n\n})(mui, document);"
  },
  {
    "path": "plugin/picker/gulpfile.js",
    "content": "var gulp = require(\"gulp\");\nvar pkg = require(\"./package.json\");\nvar uglify = require(\"gulp-uglify\");\nvar minifycss = require('gulp-minify-css');\nvar del = require('del');\nvar concat = require('gulp-concat');\nvar rename = require('gulp-rename');\nvar header = require('gulp-header');\n\n//var banner = ['/**',\n//\t' * <%= pkg.name %> - <%= pkg.description %>',\n//\t' * @version v<%= pkg.version %>',\n//\t' * @link <%= pkg.homepage %>',\n//\t' * @license <%= pkg.license %>',\n//\t' */',\n//\t''\n//].join('\\r\\n');\n\nvar picker_banner = ['/**',\n\t'* 选择列表插件',\n\t'* varstion 2.0.0',\n\t'* by Houfeng',\n\t'* Houfeng@DCloud.io',\n\t'**/',\n\t''\n].join('\\r\\n');\n\ngulp.task('clear_picker', function(cb) {\n\tdel(['dist/js/*.js', 'dist/css/*.css'], cb);\n\n\n\t// del(['dist/js/*.js', 'dist/css/*.css']).then(paths => {\n\t// \tconsole.log('Deleted files and folders:\\n', paths.join('\\n'));\n\t// });\n\n});\n\ngulp.task('build', [\"clear_picker\"], function() {\n\t//css\n\tgulp.src([\"./css/mui.picker.css\",\n\t\t\t\"./css/mui.poppicker.css\",\n\t\t\t\"./css/mui.dtpicker.css\"\n\t\t])\n\t\t.pipe(concat(\"mui.picker.all.css\"))\n\t\t//.pipe(header(picker_banner))\n\t\t.pipe(gulp.dest(\"./dist/css/\"))\n\t\t.pipe(minifycss())\n\t\t.pipe(rename(\"mui.picker.min.css\"))\n\t\t.pipe(header(picker_banner))\n\t\t.pipe(gulp.dest(\"./dist/css/\"));\n\t//js\n\tgulp.src([\"./js/mui.picker.js\",\n\t\t\t\"./js/mui.poppicker.js\",\n\t\t\t\"./js/mui.dtpicker.js\"\n\t\t])\n\t\t.pipe(concat(\"mui.picker.all.js\"))\n\t\t//.pipe(header(picker_banner))\n\t\t.pipe(gulp.dest(\"./dist/js/\"))\n\t\t.pipe(uglify())\n\t\t.pipe(rename(\"mui.picker.min.js\"))\n\t\t.pipe(header(picker_banner))\n\t\t.pipe(gulp.dest(\"./dist/js/\"));\n});\n\ngulp.task('default', [\"build\"]);"
  },
  {
    "path": "plugin/picker/js/mui.dtpicker.js",
    "content": "/**\n * 日期时间插件\n * varstion 1.0.5\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar domBuffer = '<div class=\"mui-dtpicker\" data-type=\"datetime\">\\\n\t\t<div class=\"mui-dtpicker-header\">\\\n\t\t\t<button data-id=\"btn-cancel\" class=\"mui-btn\">取消</button>\\\n\t\t\t<button data-id=\"btn-ok\" class=\"mui-btn mui-btn-blue\">确定</button>\\\n\t\t</div>\\\n\t\t<div class=\"mui-dtpicker-title\"><h5 data-id=\"title-y\">年</h5><h5 data-id=\"title-m\">月</h5><h5 data-id=\"title-d\">日</h5><h5 data-id=\"title-h\">时</h5><h5 data-id=\"title-i\">分</h5></div>\\\n\t\t<div class=\"mui-dtpicker-body\">\\\n\t\t\t<div data-id=\"picker-y\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-m\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-d\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-h\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t\t<div data-id=\"picker-i\" class=\"mui-picker\">\\\n\t\t\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t\t\t</ul>\\\n\t\t\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t\t\t</div>\\\n\t\t\t</div>\\\n\t\t</div>\\\n\t</div>';\n\n\t//plugin\n\tvar DtPicker = $.DtPicker = $.Class.extend({\n\t\tinit: function(options) {\n\t\t\tvar self = this;\n\t\t\tvar _picker = $.dom(domBuffer)[0];\n\t\t\tdocument.body.appendChild(_picker);\n\t\t\t$('[data-id*=\"picker\"]', _picker).picker();\n\t\t\tvar ui = self.ui = {\n\t\t\t\tpicker: _picker,\n\t\t\t\tmask: $.createMask(),\n\t\t\t\tok: $('[data-id=\"btn-ok\"]', _picker)[0],\n\t\t\t\tcancel: $('[data-id=\"btn-cancel\"]', _picker)[0],\n\t\t\t\ty: $('[data-id=\"picker-y\"]', _picker)[0],\n\t\t\t\tm: $('[data-id=\"picker-m\"]', _picker)[0],\n\t\t\t\td: $('[data-id=\"picker-d\"]', _picker)[0],\n\t\t\t\th: $('[data-id=\"picker-h\"]', _picker)[0],\n\t\t\t\ti: $('[data-id=\"picker-i\"]', _picker)[0],\n\t\t\t\tlabels: $('[data-id*=\"title-\"]', _picker),\n\t\t\t};\n\t\t\tui.cancel.addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tui.ok.addEventListener('tap', function() {\n\t\t\t\tvar rs = self.callback(self.getSelected());\n\t\t\t\tif (rs !== false) {\n\t\t\t\t\tself.hide();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.y.addEventListener('change', function(e) { //目前的change事件容易导致级联触发\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) {\n\t\t\t\t\tself._createMonth();\n\t\t\t\t} else {\n\t\t\t\t\tself._createDay();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.m.addEventListener('change', function(e) {\n\t\t\t\tself._createDay();\n\t\t\t}, false);\n\t\t\tui.d.addEventListener('change', function(e) {\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) { //仅提供了beginDate时，触发day,hours,minutes的change\n\t\t\t\t\tself._createHours();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.h.addEventListener('change', function(e) {\n\t\t\t\tif (self.options.beginMonth || self.options.endMonth) {\n\t\t\t\t\tself._createMinutes();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tui.mask[0].addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself._create(options);\n\t\t\t//防止滚动穿透\n\t\t\tself.ui.picker.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t\tself.ui.picker.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t},\n\t\tgetSelected: function() {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tvar type = self.options.type;\n\t\t\tvar selected = {\n\t\t\t\ttype: type,\n\t\t\t\ty: ui.y.picker.getSelectedItem(),\n\t\t\t\tm: ui.m.picker.getSelectedItem(),\n\t\t\t\td: ui.d.picker.getSelectedItem(),\n\t\t\t\th: ui.h.picker.getSelectedItem(),\n\t\t\t\ti: ui.i.picker.getSelectedItem(),\n\t\t\t\ttoString: function() {\n\t\t\t\t\treturn this.value;\n\t\t\t\t}\n\t\t\t};\n\t\t\tswitch (type) {\n\t\t\t\tcase 'datetime':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'time':\n\t\t\t\t\tselected.value = selected.h.value + ':' + selected.i.value;\n\t\t\t\t\tselected.text = selected.h.text + ':' + selected.i.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'month':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'hour':\n\t\t\t\t\tselected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value;\n\t\t\t\t\tselected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\tsetSelectedValue: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tvar parsedValue = self._parseValue(value);\n\t\t\t//TODO 嵌套过多，因为picker的change时间是异步(考虑到性能)的，所以为了保证change之后再setSelected，目前使用回调处理\n\t\t\tui.y.picker.setSelectedValue(parsedValue.y, 0, function() {\n\t\t\t\tui.m.picker.setSelectedValue(parsedValue.m, 0, function() {\n\t\t\t\t\tui.d.picker.setSelectedValue(parsedValue.d, 0, function() {\n\t\t\t\t\t\tui.h.picker.setSelectedValue(parsedValue.h, 0, function() {\n\t\t\t\t\t\t\tui.i.picker.setSelectedValue(parsedValue.i, 0);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tisLeapYear: function(year) {\n\t\t\treturn (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);\n\t\t},\n\t\t_inArray: function(array, item) {\n\t\t\tfor (var index in array) {\n\t\t\t\tvar _item = array[index];\n\t\t\t\tif (_item === item) return true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tgetDayNum: function(year, month) {\n\t\t\tvar self = this;\n\t\t\tif (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) {\n\t\t\t\treturn 31;\n\t\t\t} else if (self._inArray([4, 6, 9, 11], month)) {\n\t\t\t\treturn 30;\n\t\t\t} else if (self.isLeapYear(year)) {\n\t\t\t\treturn 29;\n\t\t\t} else {\n\t\t\t\treturn 28;\n\t\t\t}\n\t\t},\n\t\t_fill: function(num) {\n\t\t\tnum = num.toString();\n\t\t\tif (num.length < 2) {\n\t\t\t\tnum = 0 + num;\n\t\t\t}\n\t\t\treturn num;\n\t\t},\n\t\t_isBeginYear: function() {\n\t\t\treturn this.options.beginYear === parseInt(this.ui.y.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginMonth: function() {\n\t\t\treturn this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginDay: function() {\n\t\t\treturn this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.picker.getSelectedValue());\n\t\t},\n\t\t_isBeginHours: function() {\n\t\t\treturn this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.picker.getSelectedValue());\n\t\t},\n\t\t_isEndYear: function() {\n\t\t\treturn this.options.endYear === parseInt(this.ui.y.picker.getSelectedValue());\n\t\t},\n\t\t_isEndMonth: function() {\n\t\t\treturn this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.picker.getSelectedValue());\n\t\t},\n\t\t_isEndDay: function() {\n\t\t\treturn this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.picker.getSelectedValue());\n\t\t},\n\t\t_isEndHours: function() {\n\t\t\treturn this._isEndDay() && this.options.endHours === parseInt(this.ui.h.picker.getSelectedValue());\n\t\t},\n\t\t_createYear: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\t//生成年列表\n\t\t\tvar yArray = [];\n\t\t\tif (options.customData.y) {\n\t\t\t\tyArray = options.customData.y;\n\t\t\t} else {\n\t\t\t\tvar yBegin = options.beginYear;\n\t\t\t\tvar yEnd = options.endYear;\n\t\t\t\tfor (var y = yBegin; y <= yEnd; y++) {\n\t\t\t\t\tyArray.push({\n\t\t\t\t\t\ttext: y + '',\n\t\t\t\t\t\tvalue: y\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.y.picker.setItems(yArray);\n\t\t\t//ui.y.picker.setSelectedValue(current);\n\t\t},\n\t\t_createMonth: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成月列表\n\t\t\tvar mArray = [];\n\t\t\tif (options.customData.m) {\n\t\t\t\tmArray = options.customData.m;\n\t\t\t} else {\n\t\t\t\tvar m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1;\n\t\t\t\tvar maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12;\n\t\t\t\tfor (; m <= maxMonth; m++) {\n\t\t\t\t\tvar val = self._fill(m);\n\t\t\t\t\tmArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.m.picker.setItems(mArray);\n\t\t\t//ui.m.picker.setSelectedValue(current);\n\t\t},\n\t\t_createDay: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成日列表\n\t\t\tvar dArray = [];\n\t\t\tif (options.customData.d) {\n\t\t\t\tdArray = options.customData.d;\n\t\t\t} else {\n\t\t\t\tvar d = self._isBeginMonth() ? options.beginDay : 1;\n\t\t\t\tvar maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.picker.getSelectedValue()), parseInt(this.ui.m.picker.getSelectedValue()));\n\t\t\t\tfor (; d <= maxDay; d++) {\n\t\t\t\t\tvar val = self._fill(d);\n\t\t\t\t\tdArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.d.picker.setItems(dArray);\n\t\t\tcurrent = current || ui.d.picker.getSelectedValue();\n\t\t\t//ui.d.picker.setSelectedValue(current);\n\t\t},\n\t\t_createHours: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\t//生成时列表\n\t\t\tvar hArray = [];\n\t\t\tif (options.customData.h) {\n\t\t\t\thArray = options.customData.h;\n\t\t\t} else {\n\t\t\t\tvar h = self._isBeginDay() ? options.beginHours : 0;\n\t\t\t\tvar maxHours = self._isEndDay() ? options.endHours : 23;\n\t\t\t\tfor (; h <= maxHours; h++) {\n\t\t\t\t\tvar val = self._fill(h);\n\t\t\t\t\thArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.h.picker.setItems(hArray);\n\t\t\t//ui.h.picker.setSelectedValue(current);\n\t\t},\n\t\t_createMinutes: function(current) {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\n\t\t\t//生成分列表\n\t\t\tvar iArray = [];\n\t\t\tif (options.customData.i) {\n\t\t\t\tiArray = options.customData.i;\n\t\t\t} else {\n\t\t\t\tvar i = self._isBeginHours() ? options.beginMinutes : 0;\n\t\t\t\tvar maxMinutes = self._isEndHours() ? options.endMinutes : 59;\n\t\t\t\tfor (; i <= maxMinutes; i++) {\n\t\t\t\t\tvar val = self._fill(i);\n\t\t\t\t\tiArray.push({\n\t\t\t\t\t\ttext: val,\n\t\t\t\t\t\tvalue: val\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tui.i.picker.setItems(iArray);\n\t\t\t//ui.i.picker.setSelectedValue(current);\n\t\t},\n\t\t_setLabels: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\tui.labels.each(function(i, label) {\n\t\t\t\tlabel.innerText = options.labels[i];\n\t\t\t});\n\t\t},\n\t\t_setButtons: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = self.options;\n\t\t\tvar ui = self.ui;\n\t\t\tui.cancel.innerText = options.buttons[0];\n\t\t\tui.ok.innerText = options.buttons[1];\n\t\t},\n\t\t_parseValue: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar rs = {};\n\t\t\tif (value) {\n\t\t\t\tvar parts = value.replace(\":\", \"-\").replace(\" \", \"-\").split(\"-\");\n\t\t\t\trs.y = parts[0];\n\t\t\t\trs.m = parts[1];\n\t\t\t\trs.d = parts[2];\n\t\t\t\trs.h = parts[3];\n\t\t\t\trs.i = parts[4];\n\t\t\t} else {\n\t\t\t\tvar now = new Date();\n\t\t\t\trs.y = now.getFullYear();\n\t\t\t\trs.m = now.getMonth() + 1;\n\t\t\t\trs.d = now.getDate();\n\t\t\t\trs.h = now.getHours();\n\t\t\t\trs.i = now.getMinutes();\n\t\t\t}\n\t\t\treturn rs;\n\t\t},\n\t\t_create: function(options) {\n\t\t\tvar self = this;\n\t\t\toptions = options || {};\n\t\t\toptions.labels = options.labels || ['年', '月', '日', '时', '分'];\n\t\t\toptions.buttons = options.buttons || ['取消', '确定'];\n\t\t\toptions.type = options.type || 'datetime';\n\t\t\toptions.customData = options.customData || {};\n\t\t\tself.options = options;\n\t\t\tvar now = new Date();\n\t\t\tvar beginDate = options.beginDate;\n\t\t\tif (beginDate instanceof Date && !isNaN(beginDate.valueOf())) { //设定了开始日期\n\t\t\t\toptions.beginYear = beginDate.getFullYear();\n\t\t\t\toptions.beginMonth = beginDate.getMonth() + 1;\n\t\t\t\toptions.beginDay = beginDate.getDate();\n\t\t\t\toptions.beginHours = beginDate.getHours();\n\t\t\t\toptions.beginMinutes = beginDate.getMinutes();\n\t\t\t}\n\t\t\tvar endDate = options.endDate;\n\t\t\tif (endDate instanceof Date && !isNaN(endDate.valueOf())) { //设定了结束日期\n\t\t\t\toptions.endYear = endDate.getFullYear();\n\t\t\t\toptions.endMonth = endDate.getMonth() + 1;\n\t\t\t\toptions.endDay = endDate.getDate();\n\t\t\t\toptions.endHours = endDate.getHours();\n\t\t\t\toptions.endMinutes = endDate.getMinutes();\n\t\t\t}\n\t\t\toptions.beginYear = options.beginYear || (now.getFullYear() - 5);\n\t\t\toptions.endYear = options.endYear || (now.getFullYear() + 5);\n\t\t\tvar ui = self.ui;\n\t\t\t//设定label\n\t\t\tself._setLabels();\n\t\t\tself._setButtons();\n\t\t\t//设定类型\n\t\t\tui.picker.setAttribute('data-type', options.type);\n\t\t\t//生成\n\t\t\tself._createYear();\n\t\t\tself._createMonth();\n\t\t\tself._createDay();\n\t\t\tself._createHours();\n\t\t\tself._createMinutes();\n\t\t\t//设定默认值\n\t\t\tself.setSelectedValue(options.value);\n\t\t},\n\t\t//显示\n\t\tshow: function(callback) {\n\t\t\tvar self = this;\n\t\t\tvar ui = self.ui;\n\t\t\tself.callback = callback || $.noop;\n\t\t\tui.mask.show();\n\t\t\tdocument.body.classList.add($.className('dtpicker-active-for-page'));\n\t\t\tui.picker.classList.add($.className('active'));\n\t\t\t//处理物理返回键\n\t\t\tself.__back = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tself.hide();\n\t\t\t};\n\t\t},\n\t\thide: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.disposed) return;\n\t\t\tvar ui = self.ui;\n\t\t\tui.picker.classList.remove($.className('active'));\n\t\t\tui.mask.close();\n\t\t\tdocument.body.classList.remove($.className('dtpicker-active-for-page'));\n\t\t\t//处理物理返回键\n\t\t\t$.back = self.__back;\n\t\t},\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.hide();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.ui.picker.parentNode.removeChild(self.ui.picker);\n\t\t\t\tfor (var name in self) {\n\t\t\t\t\tself[name] = null;\n\t\t\t\t\tdelete self[name];\n\t\t\t\t};\n\t\t\t\tself.disposed = true;\n\t\t\t}, 300);\n\t\t}\n\t});\n\n})(mui, document);"
  },
  {
    "path": "plugin/picker/js/mui.picker.js",
    "content": "/**\n * 选择列表插件\n * varstion 2.0.0\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, window, document, undefined) {\n\n\tvar MAX_EXCEED = 30;\n\tvar VISIBLE_RANGE = 90;\n\tvar DEFAULT_ITEM_HEIGHT = 40;\n\tvar BLUR_WIDTH = 10;\n\n\tvar rad2deg = $.rad2deg = function(rad) {\n\t\treturn rad / (Math.PI / 180);\n\t};\n\n\tvar deg2rad = $.deg2rad = function(deg) {\n\t\treturn deg * (Math.PI / 180);\n\t};\n\n\tvar platform = navigator.platform.toLowerCase();\n\tvar userAgent = navigator.userAgent.toLowerCase();\n\tvar isIos = (userAgent.indexOf('iphone') > -1 ||\n\t\t\tuserAgent.indexOf('ipad') > -1 ||\n\t\t\tuserAgent.indexOf('ipod') > -1) &&\n\t\t(platform.indexOf('iphone') > -1 ||\n\t\t\tplatform.indexOf('ipad') > -1 ||\n\t\t\tplatform.indexOf('ipod') > -1);\n\t//alert(isIos);\n\n\tvar Picker = $.Picker = function(holder, options) {\n\t\tvar self = this;\n\t\tself.holder = holder;\n\t\tself.options = options || {};\n\t\tself.init();\n\t\tself.initInertiaParams();\n\t\tself.calcElementItemPostion(true);\n\t\tself.bindEvent();\n\t};\n\n\tPicker.prototype.findElementItems = function() {\n\t\tvar self = this;\n\t\tself.elementItems = [].slice.call(self.holder.querySelectorAll('li'));\n\t\treturn self.elementItems;\n\t};\n\n\tPicker.prototype.init = function() {\n\t\tvar self = this;\n\t\tself.list = self.holder.querySelector('ul');\n\t\tself.findElementItems();\n\t\tself.height = self.holder.offsetHeight;\n\t\tself.r = self.height / 2 - BLUR_WIDTH;\n\t\tself.d = self.r * 2;\n\t\tself.itemHeight = self.elementItems.length > 0 ? self.elementItems[0].offsetHeight : DEFAULT_ITEM_HEIGHT;\n\t\tself.itemAngle = parseInt(self.calcAngle(self.itemHeight * 0.8));\n\t\tself.hightlightRange = self.itemAngle / 2;\n\t\tself.visibleRange = VISIBLE_RANGE;\n\t\tself.beginAngle = 0;\n\t\tself.beginExceed = self.beginAngle - MAX_EXCEED;\n\t\tself.list.angle = self.beginAngle;\n\t\tif (isIos) {\n\t\t\tself.list.style.webkitTransformOrigin = \"center center \" + self.r + \"px\";\n\t\t}\n\t};\n\n\tPicker.prototype.calcElementItemPostion = function(andGenerateItms) {\n\t\tvar self = this;\n\t\tif (andGenerateItms) {\n\t\t\tself.items = [];\n\t\t}\n\t\tself.elementItems.forEach(function(item) {\n\t\t\tvar index = self.elementItems.indexOf(item);\n\t\t\tself.endAngle = self.itemAngle * index;\n\t\t\titem.angle = self.endAngle;\n\t\t\titem.style.webkitTransformOrigin = \"center center -\" + self.r + \"px\";\n\t\t\titem.style.webkitTransform = \"translateZ(\" + self.r + \"px) rotateX(\" + (-self.endAngle) + \"deg)\";\n\t\t\tif (andGenerateItms) {\n\t\t\t\tvar dataItem = {};\n\t\t\t\tdataItem.text = item.innerHTML || '';\n\t\t\t\tdataItem.value = item.getAttribute('data-value') || dataItem.text;\n\t\t\t\tself.items.push(dataItem);\n\t\t\t}\n\t\t});\n\t\tself.endExceed = self.endAngle + MAX_EXCEED;\n\t\tself.calcElementItemVisibility(self.beginAngle);\n\t};\n\n\tPicker.prototype.calcAngle = function(c) {\n\t\tvar self = this;\n\t\tvar a = b = parseFloat(self.r);\n\t\t//直径的整倍数部分直接乘以 180\n\t\tc = Math.abs(c); //只算角度不关心正否值\n\t\tvar intDeg = parseInt(c / self.d) * 180;\n\t\tc = c % self.d;\n\t\t//余弦\n\t\tvar cosC = (a * a + b * b - c * c) / (2 * a * b);\n\t\tvar angleC = intDeg + rad2deg(Math.acos(cosC));\n\t\treturn angleC;\n\t};\n\n\tPicker.prototype.calcElementItemVisibility = function(angle) {\n\t\tvar self = this;\n\t\tself.elementItems.forEach(function(item) {\n\t\t\tvar difference = Math.abs(item.angle - angle);\n\t\t\tif (difference < self.hightlightRange) {\n\t\t\t\titem.classList.add('highlight');\n\t\t\t} else if (difference < self.visibleRange) {\n\t\t\t\titem.classList.add('visible');\n\t\t\t\titem.classList.remove('highlight');\n\t\t\t} else {\n\t\t\t\titem.classList.remove('highlight');\n\t\t\t\titem.classList.remove('visible');\n\t\t\t}\n\t\t});\n\t};\n\n\tPicker.prototype.setAngle = function(angle) {\n\t\tvar self = this;\n\t\tself.list.angle = angle;\n\t\tself.list.style.webkitTransform = \"perspective(1000px) rotateY(0deg) rotateX(\" + angle + \"deg)\";\n\t\tself.calcElementItemVisibility(angle);\n\t};\n\n\tPicker.prototype.bindEvent = function() {\n\t\tvar self = this;\n\t\tvar lastAngle = 0;\n\t\tvar startY = null;\n\t\tvar isPicking = false;\n\t\tself.holder.addEventListener($.EVENT_START, function(event) {\n\t\t\tisPicking = true;\n\t\t\tevent.preventDefault();\n\t\t\tself.list.style.webkitTransition = '';\n\t\t\tstartY = (event.changedTouches ? event.changedTouches[0] : event).pageY;\n\t\t\tlastAngle = self.list.angle;\n\t\t\tself.updateInertiaParams(event, true);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_END, function(event) {\n\t\t\tisPicking = false;\n\t\t\tevent.preventDefault();\n\t\t\tself.startInertiaScroll(event);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_CANCEL, function(event) {\n\t\t\tisPicking = false;\n\t\t\tevent.preventDefault();\n\t\t\tself.startInertiaScroll(event);\n\t\t}, false);\n\t\tself.holder.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\tif (!isPicking) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tvar endY = (event.changedTouches ? event.changedTouches[0] : event).pageY;\n\t\t\tvar dragRange = endY - startY;\n\t\t\tvar dragAngle = self.calcAngle(dragRange);\n\t\t\tvar newAngle = dragRange > 0 ? lastAngle - dragAngle : lastAngle + dragAngle;\n\t\t\tif (newAngle > self.endExceed) {\n\t\t\t\tnewAngle = self.endExceed\n\t\t\t}\n\t\t\tif (newAngle < self.beginExceed) {\n\t\t\t\tnewAngle = self.beginExceed\n\t\t\t}\n\t\t\tself.setAngle(newAngle);\n\t\t\tself.updateInertiaParams(event);\n\t\t}, false);\n\t\t//--\n\t\tself.list.addEventListener('tap', function(event) {\n\t\t\telementItem = event.target;\n\t\t\tif (elementItem.tagName == 'LI') {\n\t\t\t\tself.setSelectedIndex(self.elementItems.indexOf(elementItem), 200);\n\t\t\t}\n\t\t}, false);\n\t};\n\n\tPicker.prototype.initInertiaParams = function() {\n\t\tvar self = this;\n\t\tself.lastMoveTime = 0;\n\t\tself.lastMoveStart = 0;\n\t\tself.stopInertiaMove = false;\n\t};\n\n\tPicker.prototype.updateInertiaParams = function(event, isStart) {\n\t\tvar self = this;\n\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\tif (isStart) {\n\t\t\tself.lastMoveStart = point.pageY;\n\t\t\tself.lastMoveTime = event.timeStamp || Date.now();\n\t\t\tself.startAngle = self.list.angle;\n\t\t} else {\n\t\t\tvar nowTime = event.timeStamp || Date.now();\n\t\t\tif (nowTime - self.lastMoveTime > 300) {\n\t\t\t\tself.lastMoveTime = nowTime;\n\t\t\t\tself.lastMoveStart = point.pageY;\n\t\t\t}\n\t\t}\n\t\tself.stopInertiaMove = true;\n\t};\n\n\tPicker.prototype.startInertiaScroll = function(event) {\n\t\tvar self = this;\n\t\tvar point = event.changedTouches ? event.changedTouches[0] : event;\n\t\t/** \n\t\t * 缓动代码\n\t\t */\n\t\tvar nowTime = event.timeStamp || Date.now();\n\t\tvar v = (point.pageY - self.lastMoveStart) / (nowTime - self.lastMoveTime); //最后一段时间手指划动速度  \n\t\tvar dir = v > 0 ? -1 : 1; //加速度方向  \n\t\tvar deceleration = dir * 0.0006 * -1;\n\t\tvar duration = Math.abs(v / deceleration); // 速度消减至0所需时间  \n\t\tvar dist = v * duration / 2; //最终移动多少 \n\t\tvar startAngle = self.list.angle;\n\t\tvar distAngle = self.calcAngle(dist) * dir;\n\t\t//----\n\t\tvar srcDistAngle = distAngle;\n\t\tif (startAngle + distAngle < self.beginExceed) {\n\t\t\tdistAngle = self.beginExceed - startAngle;\n\t\t\tduration = duration * (distAngle / srcDistAngle) * 0.6;\n\t\t}\n\t\tif (startAngle + distAngle > self.endExceed) {\n\t\t\tdistAngle = self.endExceed - startAngle;\n\t\t\tduration = duration * (distAngle / srcDistAngle) * 0.6;\n\t\t}\n\t\t//----\n\t\tif (distAngle == 0) {\n\t\t\tself.endScroll();\n\t\t\treturn;\n\t\t}\n\t\tself.scrollDistAngle(nowTime, startAngle, distAngle, duration);\n\t};\n\n\tPicker.prototype.scrollDistAngle = function(nowTime, startAngle, distAngle, duration) {\n\t\tvar self = this;\n\t\tself.stopInertiaMove = false;\n\t\t(function(nowTime, startAngle, distAngle, duration) {\n\t\t\tvar frameInterval = 13;\n\t\t\tvar stepCount = duration / frameInterval;\n\t\t\tvar stepIndex = 0;\n\t\t\t(function inertiaMove() {\n\t\t\t\tif (self.stopInertiaMove) return;\n\t\t\t\tvar newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\n\t\t\t\tself.setAngle(newAngle);\n\t\t\t\tstepIndex++;\n\t\t\t\tif (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\n\t\t\t\t\tself.endScroll();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetTimeout(inertiaMove, frameInterval);\n\t\t\t})();\n\t\t})(nowTime, startAngle, distAngle, duration);\n\t};\n\n\tPicker.prototype.quartEaseOut = function(t, b, c, d) {\n\t\treturn -c * ((t = t / d - 1) * t * t * t - 1) + b;\n\t};\n\n\tPicker.prototype.endScroll = function() {\n\t\tvar self = this;\n\t\tif (self.list.angle < self.beginAngle) {\n\t\t\tself.list.style.webkitTransition = \"150ms ease-out\";\n\t\t\tself.setAngle(self.beginAngle);\n\t\t} else if (self.list.angle > self.endAngle) {\n\t\t\tself.list.style.webkitTransition = \"150ms ease-out\";\n\t\t\tself.setAngle(self.endAngle);\n\t\t} else {\n\t\t\tvar index = parseInt((self.list.angle / self.itemAngle).toFixed(0));\n\t\t\tself.list.style.webkitTransition = \"100ms ease-out\";\n\t\t\tself.setAngle(self.itemAngle * index);\n\t\t}\n\t\tself.triggerChange();\n\t};\n\n\tPicker.prototype.triggerChange = function(force) {\n\t\tvar self = this;\n\t\tsetTimeout(function() {\n\t\t\tvar index = self.getSelectedIndex();\n\t\t\tvar item = self.items[index];\n\t\t\tif ($.trigger && (index != self.lastIndex || force === true)) {\n\t\t\t\t$.trigger(self.holder, 'change', {\n\t\t\t\t\t\"index\": index,\n\t\t\t\t\t\"item\": item\n\t\t\t\t});\n\t\t\t\t//console.log('change:' + index);\n\t\t\t}\n\t\t\tself.lastIndex = index;\n\t\t\ttypeof force === 'function' && force();\n\t\t}, 0);\n\t};\n\n\tPicker.prototype.correctAngle = function(angle) {\n\t\tvar self = this;\n\t\tif (angle < self.beginAngle) {\n\t\t\treturn self.beginAngle;\n\t\t} else if (angle > self.endAngle) {\n\t\t\treturn self.endAngle;\n\t\t} else {\n\t\t\treturn angle;\n\t\t}\n\t};\n\n\tPicker.prototype.setItems = function(items) {\n\t\tvar self = this;\n\t\tself.items = items || [];\n\t\tvar buffer = [];\n\t\tself.items.forEach(function(item) {\n\t\t\tif (item !== null && item !== undefined) {\n\t\t\t\tbuffer.push('<li>' + (item.text || item) + '</li>');\n\t\t\t}\n\t\t});\n\t\tself.list.innerHTML = buffer.join('');\n\t\tself.findElementItems();\n\t\tself.calcElementItemPostion();\n\t\tself.setAngle(self.correctAngle(self.list.angle));\n\t\tself.triggerChange(true);\n\t};\n\n\tPicker.prototype.getItems = function() {\n\t\tvar self = this;\n\t\treturn self.items;\n\t};\n\n\tPicker.prototype.getSelectedIndex = function() {\n\t\tvar self = this;\n\t\treturn parseInt((self.list.angle / self.itemAngle).toFixed(0));\n\t};\n\n\tPicker.prototype.setSelectedIndex = function(index, duration, callback) {\n\t\tvar self = this;\n\t\tself.list.style.webkitTransition = '';\n\t\tvar angle = self.correctAngle(self.itemAngle * index);\n\t\tif (duration && duration > 0) {\n\t\t\tvar distAngle = angle - self.list.angle;\n\t\t\tself.scrollDistAngle(Date.now(), self.list.angle, distAngle, duration);\n\t\t} else {\n\t\t\tself.setAngle(angle);\n\t\t}\n\t\tself.triggerChange(callback);\n\t};\n\n\tPicker.prototype.getSelectedItem = function() {\n\t\tvar self = this;\n\t\treturn self.items[self.getSelectedIndex()];\n\t};\n\n\tPicker.prototype.getSelectedValue = function() {\n\t\tvar self = this;\n\t\treturn (self.items[self.getSelectedIndex()] || {}).value;\n\t};\n\n\tPicker.prototype.getSelectedText = function() {\n\t\tvar self = this;\n\t\treturn (self.items[self.getSelectedIndex()] || {}).text;\n\t};\n\n\tPicker.prototype.setSelectedValue = function(value, duration, callback) {\n\t\tvar self = this;\n\t\tfor (var index in self.items) {\n\t\t\tvar item = self.items[index];\n\t\t\tif (item.value == value) {\n\t\t\t\tself.setSelectedIndex(index, duration, callback);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\n\tif ($.fn) {\n\t\t$.fn.picker = function(options) {\n\t\t\t//遍历选择的元素\n\t\t\tthis.each(function(i, element) {\n\t\t\t\tif (element.picker) return;\n\t\t\t\tif (options) {\n\t\t\t\t\telement.picker = new Picker(element, options);\n\t\t\t\t} else {\n\t\t\t\t\tvar optionsText = element.getAttribute('data-picker-options');\n\t\t\t\t\tvar _options = optionsText ? JSON.parse(optionsText) : {};\n\t\t\t\t\telement.picker = new Picker(element, _options);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn this[0] ? this[0].picker : null;\n\t\t};\n\n\t\t//自动初始化\n\t\t$.ready(function() {\n\t\t\t$('.mui-picker').picker();\n\t\t});\n\t}\n\n})(window.mui || window, window, document, undefined);\n//end"
  },
  {
    "path": "plugin/picker/js/mui.poppicker.js",
    "content": "/**\n * 弹出选择列表插件\n * 此组件依赖 listpcker ，请在页面中先引入 mui.picker.css + mui.picker.js\n * varstion 1.0.1\n * by Houfeng\n * Houfeng@DCloud.io\n */\n\n(function($, document) {\n\n\t//创建 DOM\n\t$.dom = function(str) {\n\t\tif (typeof(str) !== 'string') {\n\t\t\tif ((str instanceof Array) || (str[0] && str.length)) {\n\t\t\t\treturn [].slice.call(str);\n\t\t\t} else {\n\t\t\t\treturn [str];\n\t\t\t}\n\t\t}\n\t\tif (!$.__create_dom_div__) {\n\t\t\t$.__create_dom_div__ = document.createElement('div');\n\t\t}\n\t\t$.__create_dom_div__.innerHTML = str;\n\t\treturn [].slice.call($.__create_dom_div__.childNodes);\n\t};\n\n\tvar panelBuffer = '<div class=\"mui-poppicker\">\\\n\t\t<div class=\"mui-poppicker-header\">\\\n\t\t\t<button class=\"mui-btn mui-poppicker-btn-cancel\">取消</button>\\\n\t\t\t<button class=\"mui-btn mui-btn-blue mui-poppicker-btn-ok\">确定</button>\\\n\t\t\t<div class=\"mui-poppicker-clear\"></div>\\\n\t\t</div>\\\n\t\t<div class=\"mui-poppicker-body\">\\\n\t\t</div>\\\n\t</div>';\n\n\tvar pickerBuffer = '<div class=\"mui-picker\">\\\n\t\t<div class=\"mui-picker-inner\">\\\n\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-ft\"></div>\\\n\t\t\t<ul class=\"mui-pciker-list\">\\\n\t\t\t</ul>\\\n\t\t\t<div class=\"mui-pciker-rule mui-pciker-rule-bg\"></div>\\\n\t\t</div>\\\n\t</div>';\n\n\t//定义弹出选择器类\n\tvar PopPicker = $.PopPicker = $.Class.extend({\n\t\t//构造函数\n\t\tinit: function(options) {\n\t\t\tvar self = this;\n\t\t\tself.options = options || {};\n\t\t\tself.options.buttons = self.options.buttons || ['取消', '确定'];\n\t\t\tself.panel = $.dom(panelBuffer)[0];\n\t\t\tdocument.body.appendChild(self.panel);\n\t\t\tself.ok = self.panel.querySelector('.mui-poppicker-btn-ok');\n\t\t\tself.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');\n\t\t\tself.body = self.panel.querySelector('.mui-poppicker-body');\n\t\t\tself.mask = $.createMask();\n\t\t\tself.cancel.innerText = self.options.buttons[0];\n\t\t\tself.ok.innerText = self.options.buttons[1];\n\t\t\tself.cancel.addEventListener('tap', function(event) {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself.ok.addEventListener('tap', function(event) {\n\t\t\t\tif (self.callback) {\n\t\t\t\t\tvar rs = self.callback(self.getSelectedItems());\n\t\t\t\t\tif (rs !== false) {\n\t\t\t\t\t\tself.hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\tself.mask[0].addEventListener('tap', function() {\n\t\t\t\tself.hide();\n\t\t\t}, false);\n\t\t\tself._createPicker();\n\t\t\t//防止滚动穿透\n\t\t\tself.panel.addEventListener($.EVENT_START, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t\tself.panel.addEventListener($.EVENT_MOVE, function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false);\n\t\t},\n\t\t_createPicker: function() {\n\t\t\tvar self = this;\n\t\t\tvar layer = self.options.layer || 1;\n\t\t\tvar width = (100 / layer) + '%';\n\t\t\tself.pickers = [];\n\t\t\tfor (var i = 1; i <= layer; i++) {\n\t\t\t\tvar pickerElement = $.dom(pickerBuffer)[0];\n\t\t\t\tpickerElement.style.width = width;\n\t\t\t\tself.body.appendChild(pickerElement);\n\t\t\t\tvar picker = $(pickerElement).picker();\n\t\t\t\tself.pickers.push(picker);\n\t\t\t\tpickerElement.addEventListener('change', function(event) {\n\t\t\t\t\tvar nextPickerElement = this.nextSibling;\n\t\t\t\t\tif (nextPickerElement && nextPickerElement.picker) {\n\t\t\t\t\t\tvar eventData = event.detail || {};\n\t\t\t\t\t\tvar preItem = eventData.item || {};\n\t\t\t\t\t\tnextPickerElement.picker.setItems(preItem.children);\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t}\n\t\t},\n\t\t//填充数据\n\t\tsetData: function(data) {\n\t\t\tvar self = this;\n\t\t\tdata = data || [];\n\t\t\tself.pickers[0].setItems(data);\n\t\t},\n\t\t//获取选中的项（数组）\n\t\tgetSelectedItems: function() {\n\t\t\tvar self = this;\n\t\t\tvar items = [];\n\t\t\tfor (var i in self.pickers) {\n\t\t\t\tvar picker = self.pickers[i];\n\t\t\t\titems.push(picker.getSelectedItem() || {});\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\t\t//显示\n\t\tshow: function(callback) {\n\t\t\tvar self = this;\n\t\t\tself.callback = callback;\n\t\t\tself.mask.show();\n\t\t\tdocument.body.classList.add($.className('poppicker-active-for-page'));\n\t\t\tself.panel.classList.add($.className('active'));\n\t\t\t//处理物理返回键\n\t\t\tself.__back = $.back;\n\t\t\t$.back = function() {\n\t\t\t\tself.hide();\n\t\t\t};\n\t\t},\n\t\t//隐藏\n\t\thide: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.disposed) return;\n\t\t\tself.panel.classList.remove($.className('active'));\n\t\t\tself.mask.close();\n\t\t\tdocument.body.classList.remove($.className('poppicker-active-for-page'));\n\t\t\t//处理物理返回键\n\t\t\t$.back=self.__back;\n\t\t},\n\t\tdispose: function() {\n\t\t\tvar self = this;\n\t\t\tself.hide();\n\t\t\tsetTimeout(function() {\n\t\t\t\tself.panel.parentNode.removeChild(self.panel);\n\t\t\t\tfor (var name in self) {\n\t\t\t\t\tself[name] = null;\n\t\t\t\t\tdelete self[name];\n\t\t\t\t};\n\t\t\t\tself.disposed = true;\n\t\t\t}, 300);\n\t\t}\n\t});\n\n})(mui, document);"
  },
  {
    "path": "plugin/picker/package.json",
    "content": "{\n  \"name\": \"Hello-MUI\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Hello-MUI!\",\n  \"main\": \"index.js\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"del\": \"^1.2.0\",\n    \"gulp\": \"^3.9.1\",\n    \"gulp-autoprefixer\": \"^2.3.1\",\n    \"gulp-concat\": \"^2.6.0\",\n    \"gulp-header\": \"^1.2.2\",\n    \"gulp-htmlmin\": \"^1.1.3\",\n    \"gulp-minify-css\": \"^1.2.1\",\n    \"gulp-rename\": \"^1.2.2\",\n    \"gulp-uglify\": \"^1.5.3\",\n    \"gulp-util\": \"^3.0.6\"\n  },\n  \"scripts\": {\n    \"test\": \"test\"\n  },\n  \"keywords\": [\n    \"Hello-MUI\"\n  ],\n  \"author\": \"MUI Team\",\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "plugin/share/plusShare.js",
    "content": "(function() {\r\n    var plusReady = function(callback) {\r\n        if (window.plus) {\r\n            callback();\r\n        } else {\r\n            document.addEventListener('plusready', callback);\r\n        }\r\n    }\r\n    var shareServices = {};\r\n    var init = function() {\r\n        plus.share.getServices(function(services) {\r\n            for (var i = 0, len = services.length; i < len; i++) {\r\n                shareServices[services[i].id] = services[i];\r\n            }\r\n        });\r\n    };\r\n    var isWechatInstalled = function() {\r\n        return plus.runtime.isApplicationExist && plus.runtime.isApplicationExist({\r\n            pname: 'com.tencent.mm',\r\n            action: 'weixin://'\r\n        });\r\n    };\r\n\r\n    function share(id, msg, callback) {\r\n        var service = shareServices[id];\r\n        if (!service) {\r\n            plus.nativeUI.alert('无效的分享服务[' + id + ']');\r\n            callback && callback(false);\r\n            return;\r\n        }\r\n        var _share = function() {\r\n            service.send(msg, function() {\r\n                plus.nativeUI.toast(\"分享到\\\"\" + service.description + \"\\\"成功！\");\r\n                callback && callback(true);\r\n            }, function(e) {\r\n                plus.nativeUI.toast(\"分享到\\\"\" + service.description + \"\\\"失败！\");\r\n                callback && callback(false);\r\n            })\r\n        };\r\n        if (service.authenticated) {\r\n            _share(service, msg, callback);\r\n        } else {\r\n            service.authorize(function() {\r\n                _share(service, msg, callback);\r\n            }, function(e) {\r\n                plus.nativeUI.alert(\"认证授权失败\");\r\n                callback && callback(false);\r\n            })\r\n        }\r\n    };\r\n\r\n    function openSystem(msg, callback) {\r\n        if (plus.share.sendWithSystem) {\r\n            plus.share.sendWithSystem(msg, function() {\r\n                //TODO 系统分享暂不支持回调\r\n                //callback && callback(true);\r\n            }, function() {\r\n                //TODO 系统分享暂不支持回调\r\n                //callback && callback(false);\r\n            });\r\n        } else {\r\n            callback && callback(false);\r\n        }\r\n    }\r\n    var open = function(msg, callback) {\r\n        if (shareServices.weixin && isWechatInstalled()) {\r\n            plus.nativeUI.actionSheet({\r\n                title: '分享到',\r\n                cancel: \"取消\",\r\n                buttons: [{\r\n                    title: \"微信消息\"\r\n                }, {\r\n                    title: \"微信朋友圈\"\r\n                }, {\r\n                    title: \"更多分享\"\r\n                }]\r\n            }, function(e) {\r\n                var index = e.index;\r\n                switch (index) {\r\n                    case 1: //分享到微信好友\r\n                        msg.extra = {\r\n                            scene: 'WXSceneSession'\r\n                        };\r\n                        share('weixin', msg, callback);\r\n                        break;\r\n                    case 2: //分享到微信朋友圈\r\n                        msg.title = msg.content;\r\n                        msg.extra = {\r\n                            scene: 'WXSceneTimeline'\r\n                        };\r\n                        share('weixin', msg, callback);\r\n                        break;\r\n                    case 3: //更多分享\r\n                        var url = msg.href ? ('( ' + msg.href + ' )') : '';\r\n                        msg.title = msg.title + url;\r\n                        msg.content = msg.content + url;\r\n                        openSystem(msg, callback);\r\n                        break;\r\n                }\r\n            })\r\n        } else {\r\n            //系统分享\r\n            var url = msg.href ? ('( ' + msg.href + ' )') : '';\r\n            msg.title = msg.title + url;\r\n            msg.content = msg.content + url;\r\n            openSystem(msg, callback);\r\n        }\r\n    };\r\n    plusReady(init);\r\n    window.plusShare = open;\r\n})();"
  },
  {
    "path": "sass/badges.scss",
    "content": "//\n// Badges\n// --------------------------------------------------\n.#{$namespace}badge {\n    display: inline-block;\n    padding: 3px 6px;\n    font-size: 12px;\n    line-height: 1;\n    color: #333;\n    background-color: rgba(0,0,0,.15);\n    border-radius: 100px;\n\n    // Inverted badges have no background.\n    &.#{$namespace}badge-inverted {\n        padding: 0 5px 0 0;\n        color: $default-color;\n        background-color: transparent;\n    }\n}\n\n\n// Badge modifiers\n// --------------------------------------------------\n\n// Main badge\n.#{$namespace}badge-primary,.#{$namespace}badge-blue {\n    color: #fff;\n    background-color: $primary-color;\n\n    &.#{$namespace}badge-inverted {\n        color: $primary-color;\n        background-color: transparent;\n    }\n}\n\n// success badge\n.#{$namespace}badge-success,.#{$namespace}badge-green {\n    color: #fff;\n    background-color: $positive-color;\n\n    &.#{$namespace}badge-inverted {\n        color: $positive-color;\n        background-color: transparent;\n    }\n}\n//waring\n.#{$namespace}badge-warning,.#{$namespace}badge-yellow {\n    color: #fff;\n    background-color: $warning-color;\n\n    &.#{$namespace}badge-inverted {\n        color: $warning-color;\n        background-color: transparent;\n    }\n}\n\n// Negative badge\n.#{$namespace}badge-danger,.#{$namespace}badge-red {\n    color: #fff;\n    background-color: $negative-color;\n\n    &.#{$namespace}badge-inverted {\n        color: $negative-color;\n        background-color: transparent;\n    }\n}\n\n.#{$namespace}badge-royal,.#{$namespace}badge-purple {\n    color: #fff;\n    background-color: $royal-color;\n\n    &.#{$namespace}badge-inverted {\n        color: $royal-color;\n        background-color: transparent;\n    }\n}\n\n.#{$namespace}icon .#{$namespace}badge{\n    position: absolute;\n    left: 100%;\n    margin-left: -10px;\n    top: -2px;\n    font-size: 10px;\n    line-height: 1.4;\n    padding: 1px 5px;\n    background: red;\n    color: white;   \n}"
  },
  {
    "path": "sass/bars.scss",
    "content": "//\n// Bars\n// --------------------------------------------------\n.#{$namespace}bar {\n    position: fixed;\n    right: 0;\n    left: 0;\n    z-index: z(\"bar\",\"bar\");\n    height: $bar-base-height;\n    padding-right: $bar-side-spacing;\n    padding-left: $bar-side-spacing;\n    background-color: $chrome-color;\n    border-bottom: 0;\n    @include box-shadow(0 0 1px rgba(0,0,0,.85));\n    -webkit-backface-visibility: hidden; // Make sure the bar is visible when a modal animates in.\n    backface-visibility: hidden;\n}\n//fixed by fxy\n.#{$namespace}bar {\n    .#{$namespace}title {\n        width: auto;\n        left: 40px;\n        right: 40px;\n        margin: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        display: inline-block;\n    }\n    .#{$namespace}backdrop {\n        background: none;\n    }\n}\n// Modifier class to dock any bar below .#{$namespace}bar-nav\n.#{$namespace}bar-header-secondary {\n    top: $bar-base-height;\n}\n// Modifier class for footer bars\n.#{$namespace}bar-footer {\n    bottom: 0;\n}\n// Modifier class to dock any bar above a standard bar\n.#{$namespace}bar-footer-secondary {\n    bottom: $bar-base-height;\n}\n// Modifier class to dock any bar above a .#{$namespace}bar-tab\n.#{$namespace}bar-footer-secondary-tab {\n    bottom: $bar-tab-height;\n}\n// Give the footers the correct border\n.#{$namespace}bar-footer,\n.#{$namespace}bar-footer-secondary,\n.#{$namespace}bar-footer-secondary-tab {\n    border-top: 0;\n}\n// Nav bar\n// --------------------------------------------------\n// Bar docked to top of viewport for showing page title and actions\n.#{$namespace}bar-transparent {\n    top: 0;\n    background-color: rgba(247,247,247,0); //应该设置成变量\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n.#{$namespace}bar-nav {\n    top: 0;\n    -webkit-box-shadow: 0 1px 6px #CCC;\n    box-shadow: 0 1px 6px #CCC;\n    ~ .#{$namespace}content .#{$namespace}anchor {\n        display: block;\n        height: 45px;\n        margin-top: -45px;\n        visibility: hidden;\n    }\n    &.#{$namespace}bar .#{$namespace}icon {\n        margin-left: -10px;\n        margin-right: -10px;\n        padding-left: 10px;\n        padding-right: 10px;\n    }\n}\n// Centered text in the .#{$namespace}bar-nav\n//\n// We position the absolutely to make sure the title is always centered\n.#{$namespace}title {\n    position: absolute;\n    display: block;\n    width: 100%;\n    padding: 0;\n    margin: 0 (-$bar-side-spacing);\n    font-size: $font-size-default;\n    font-weight: $font-weight;\n    line-height: $bar-base-height;\n    color: #000;\n    text-align: center;\n    white-space: nowrap;\n}\n// Retain specified title color\n.#{$namespace}title a {\n    color: inherit;\n}\n// Tab bar\n// --------------------------------------------------\n// Bar docked to bottom and used for primary app navigation\n.#{$namespace}bar-tab {\n    display: table;\n    bottom: 0;\n    width: 100%;\n    height: $bar-tab-height;\n    padding: 0;\n    table-layout: fixed;\n    border-top: 0;\n    border-bottom: 0;\n    -webkit-touch-callout: none; //选项卡上禁止长按弹出菜单；\n    // Navigational tab (Nested to be more specific for the icons in tab-items)\n    .#{$namespace}tab-item {\n        display: table-cell;\n        width: 1%;\n        height: $bar-tab-height;\n        color: #929292;\n        text-align: center;\n        vertical-align: middle;\n        //自动处理超出部分的文字；\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        // Active states for the tab bar\n        &.#{$namespace}active {\n            color: $primary-color;\n        }\n        // Tab icon\n        .#{$namespace}icon {\n            top: 3px;\n            width: 24px;\n            height: 24px;\n            padding-top: 0;\n            padding-bottom: 0;\n            // Make the text smaller if it's used with an icon\n            ~ .#{$namespace}tab-label {\n                display: block;\n                font-size: 11px;\n                //处理超出部分文字；\n                overflow: hidden;\n                text-overflow: ellipsis;\n            }\n            &:active {\n                background: none;\n            }\n        }\n    }\n}\n.#{$namespace}focusin>.#{$namespace}bar-nav,\n.#{$namespace}focusin>.#{$namespace}bar-header-secondary {\n    position: absolute;\n}\n.#{$namespace}focusin>.#{$namespace}bar~.#{$namespace}content {\n    padding-bottom: 0;\n}\n// Bars with buttons\n// --------------------------------------------------\n.#{$namespace}bar .#{$namespace}btn {\n    position: relative;\n    top: 7px;\n    z-index: z(\"bar\",\"btn\"); // Position the buttons on top of .#{$namespace}title\n    padding: 6px 12px 7px;\n    margin-top: 0;\n    font-weight: $font-weight-light;\n    // Give buttons that are floated left and right side margin\n    &.#{$namespace}pull-right {\n        margin-left: $bar-side-spacing;\n    }\n    &.#{$namespace}pull-left {\n        margin-right: $bar-side-spacing;\n    }\n}\n// Bars with link buttons (Line the text up with content)\n.#{$namespace}bar .#{$namespace}btn-link {\n    top: 0;\n    padding: 0;\n    font-size: 16px;\n    line-height: $bar-base-height;\n    color: $primary-color;\n    border: 0;\n    &:active,\n    &.#{$namespace}active {\n        color: darken($primary-color, 10%);\n    }\n}\n// Bars with block buttons\n//\n// Add proper padding\n.#{$namespace}bar .#{$namespace}btn-block {\n    top: 6px;\n    padding: 5px 0;\n    margin-bottom: 0;\n    font-size: 16px; // Scale down font size to fit in bar.\n}\n// Nav buttons (Only applicable within bars)\n//\n// Buttons inside bars that sit closer against the viewport.\n.#{$namespace}bar .#{$namespace}btn-nav {\n    &.#{$namespace}pull-left {\n        margin-left: -5px;\n        .#{$namespace}icon-left-nav {\n            margin-right: -3px;\n        }\n    }\n    &.#{$namespace}pull-right {\n        margin-right: -5px;\n        .#{$namespace}icon-right-nav {\n            margin-left: -3px;\n        }\n    }\n    &:active {\n        opacity: 0.3;\n        //background-color: rgba(0,0,0,.07);\n    }\n}\n// Bars with Muiicons\n// --------------------------------------------------\n.#{$namespace}bar {\n    .#{$namespace}icon {\n        position: relative;\n        z-index: z(\"bar\",\"icon\"); // Position the buttons on top of .#{$namespace}title\n        padding-top: 10px;\n        padding-bottom: 10px;\n        font-size: 24px;\n        &:active {\n            opacity: 0.3;\n            //background-color: rgba(0,0,0,.07);\n        }\n    }\n    // Vertical center the larger icons in btns.\n    .#{$namespace}btn .#{$namespace}icon {\n        top: 1px;\n        padding: 0;\n        margin: 0;\n    }\n    // Handle carets in the titles\n    .#{$namespace}title .#{$namespace}icon {\n        padding: 0;\n        margin: 0;\n        // Specific postioning of the caret icon within a title. Used with popover.js.\n        &.#{$namespace}icon-caret {\n            top: 4px;\n            margin-left: -5px;\n        }\n    }\n}\n// Bars for search forms\n// --------------------------------------------------\n// Position/size search bar within the bar\n.#{$namespace}bar input[type=\"search\"] {\n    height: 29px;\n    margin: 6px 0;\n}\n.#{$namespace}bar .#{$namespace}input-row .#{$namespace}btn {\n    padding: 12px 10px;\n}\n.#{$namespace}bar .#{$namespace}search:before {\n    margin-top: -10px;\n}\n.#{$namespace}bar .#{$namespace}input-row .#{$namespace}input-clear~.#{$namespace}icon-clear,\n.#{$namespace}bar .#{$namespace}input-row .#{$namespace}input-speech~.#{$namespace}icon-speech {\n    top: 0;\n    right: 12px;\n}\n.#{$namespace}bar.#{$namespace}bar-header-secondary .#{$namespace}input-row .#{$namespace}input-clear~.#{$namespace}icon-clear,\n.#{$namespace}bar.#{$namespace}bar-header-secondary .#{$namespace}input-row .#{$namespace}input-speech~.#{$namespace}icon-speech {\n    top: 0;\n    right: 0;\n}\n// Bars with segmented controls\n// --------------------------------------------------\n// Position the control correctly inside a bar.\n.#{$namespace}bar .#{$namespace}segmented-control {\n    top: 7px;\n    margin: 0 auto;\n    width: auto;\n}\n.#{$namespace}bar.#{$namespace}bar-header-secondary .#{$namespace}segmented-control {\n    top: 0;\n}"
  },
  {
    "path": "sass/base.scss",
    "content": "//\n// Base styles\n// --------------------------------------------------\n\n// Use box sizing on all the things!\n* {\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-tap-highlight-color: transparent;\n    -webkit-user-select: none;//禁止选择文字\n    outline: none;\n}\n// We fix position the body and scroll `.#{$namespace}content`.\nbody {\n    font-family: $font-family-default;\n    font-size: $font-size-default;\n    line-height: $line-height-default;\n    color: #000;\n    background-color: #efeff4;\n    -webkit-overflow-scrolling: touch;\n}\n\n// Universal link styling\na {\n    color: $primary-color;\n    text-decoration: none;\n\n    &:active {\n        color: darken($primary-color, 10%);\n    }\n}\n\n// Wrapper to be used around all content not in .#{$namespace}bar-title and .#{$namespace}bar-tab\n.#{$namespace}content {\n    background-color: #efeff4;\n    -webkit-overflow-scrolling: touch;\n}\n\n// Hack to force all relatively and absolutely positioned elements still render while scrolling\n// Note: This is a bug for \"-webkit-overflow-scrolling: touch\"\n// .#{$namespace}content > * {\n//     @include transform(translateZ(0));\n// }\n\n// Pad top/bottom of content so it doesn't hide behind bars.\n// Note: For these to work, content must come after both bars in the markup\n.#{$namespace}bar-nav ~ .#{$namespace}content {\n    padding-top: $bar-base-height;\n    &.#{$namespace}scroll-wrapper{\n     .#{$namespace}scrollbar-vertical{\n         top:$bar-base-height;\n     }\n    }\n}\n.#{$namespace}bar-header-secondary ~ .#{$namespace}content {\n    padding-top: ($bar-base-height*2);\n     &.#{$namespace}scroll-wrapper{\n     .#{$namespace}scrollbar-vertical{\n         top:($bar-base-height*2);\n     }\n    }\n}\n\n// Footer bar padding\n.#{$namespace}bar-footer ~ .#{$namespace}content {\n    padding-bottom: $bar-base-height;\n     &.#{$namespace}scroll-wrapper{\n     .#{$namespace}scrollbar-vertical{\n         bottom:$bar-base-height;\n     }\n    }\n}\n.#{$namespace}bar-footer-secondary ~ .#{$namespace}content {\n    padding-bottom: ($bar-base-height*2);\n     &.#{$namespace}scroll-wrapper{\n     .#{$namespace}scrollbar-vertical{\n         bottom:($bar-base-height*2);\n     }\n    }\n}\n\n// Tab bar padding\n.#{$namespace}bar-tab ~ .#{$namespace}content {\n    padding-bottom: $bar-tab-height;\n     &.#{$namespace}scroll-wrapper{\n     .#{$namespace}scrollbar-vertical{\n         bottom:$bar-tab-height;\n     }\n    }\n}\n.#{$namespace}bar-footer-secondary-tab ~ .#{$namespace}content {\n    padding-bottom: ($bar-tab-height+$bar-base-height);\n     &.#{$namespace}scroll-wrapper{\n     .#{$namespace}scrollbar-vertical{\n         bottom:($bar-tab-height+$bar-base-height);\n     }\n    }\n}\n\n// Utility classes\n\n.#{$namespace}content-padded {\n    //暂时放弃content-padded\n       margin: $bar-side-spacing;\n}\n.#{$namespace}inline {\n    display: inline-block;\n    vertical-align: top;\n}\n.#{$namespace}block {\n    display: block!important;\n}\n.#{$namespace}visibility {\n    visibility: visible!important;\n}\n.#{$namespace}hidden {\n    display: none!important;\n}\n.#{$namespace}ellipsis{\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n.#{$namespace}ellipsis-2{\n    overflow: hidden;\n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    white-space: normal!important;\n    word-wrap: break-word;\n}\n.#{$namespace}table{\n    display: table;\n    table-layout: fixed;\n    width: 100%;\n}\n.#{$namespace}table-cell{\n    display: table-cell;\n    position: relative;\n}\n.#{$namespace}text-left{\n    text-align: left!important;\n}\n.#{$namespace}text-center{\n    text-align: center!important;\n}\n.#{$namespace}text-justify{\n    text-align: justify!important;\n}\n.#{$namespace}text-right{\n    text-align: right!important;\n}\n.#{$namespace}pull-left {\n    float: left;\n}\n.#{$namespace}pull-right {\n    float: right;\n}\n\n.#{$namespace}list-unstyled {\n    padding-left: 0;\n    list-style: none;\n}\n.#{$namespace}list-inline {\n    padding-left: 0;\n    list-style: none;\n    margin-left: -5px;\n}\n.#{$namespace}list-inline > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n}\n.#{$namespace}clearfix {\n    @include clearfix();\n}\n.#{$namespace}bg-primary {\n    background-color:$primary-color;\n}\n.#{$namespace}bg-positive{\n    background-color:$positive-color;\n}\n.#{$namespace}bg-negative{\n    background-color:$negative-color;\n}\n.#{$namespace}error{\n    margin: 88px 35px;\n    padding:10px;\n    border-radius:6px;\n    background-color:#bbb;\n}\n.#{$namespace}subtitle{\n    font-size: 15px;\n}"
  },
  {
    "path": "sass/buttons.scss",
    "content": "//\n// Buttons\n// --------------------------------------------------\ninput[type=\"button\"],\ninput[type=\"submit\"],\ninput[type=\"reset\"],\nbutton,\n.#{$namespace}btn {\n    position: relative;\n    display: inline-block;\n    padding: 6px 12px;\n    margin-bottom: 0; // For input.#{$namespace}btn\n    font-size: $button-font-size;\n    font-weight: $font-weight-light;\n    line-height: 1.42; //增大，和bootstrap保持一致；\n    color: #333;\n    text-align: center;\n    white-space: nowrap;\n    vertical-align: top;\n    cursor: pointer;\n    background-color: #fff;\n    background-clip: padding-box;\n    border: 1px solid #ccc;\n    border-top-left-radius: 3px; //fixed android 4.2\n    border-top-right-radius: 3px; //fixed android 4.2\n    border-bottom-right-radius: 3px; //fixed android 4.2\n    border-bottom-left-radius: 3px; //fixed android 4.2\n    border-radius: 3px;\n    @include transition(all);\n    @include transition-duration(.2s);\n    @include transition-timing-function(linear);\n    // Active & filled button styles\n    &:enabled:active,\n    &.#{$namespace}active:enabled {\n        color: #fff;\n        background-color: $default-color;\n    }\n    // Disabled styles & filled button active styles\n    &:disabled,\n    &.#{$namespace}disabled {\n        opacity: 0.6;\n    }\n}\n// Other button types\n// --------------------------------------------------\n// Primary button (Default color is blue)\ninput[type=\"submit\"],\n.#{$namespace}btn-primary,\n.#{$namespace}btn-blue {\n    @include btn($primary-color);\n}\n// Positive button (Default color is green)\n.#{$namespace}btn-positive,\n.#{$namespace}btn-success,\n.#{$namespace}btn-green {\n    @include btn($positive-color);\n}\n.#{$namespace}btn-warning,\n.#{$namespace}btn-yellow {\n    @include btn($warning-color);\n}\n// Negative button (Default color is red)\n.#{$namespace}btn-negative,\n.#{$namespace}btn-danger,\n.#{$namespace}btn-red {\n    @include btn($negative-color);\n}\n//紫色\n.#{$namespace}btn-royal,\n.#{$namespace}btn-purple {\n    @include btn($royal-color);\n}\n// grey button\n.#{$namespace}btn-grey {\n    @include btn($grey-color);\n}\n// Outlined buttons\n.#{$namespace}btn-outlined {\n    background-color: transparent;\n    &.#{$namespace}btn-primary,\n    &.#{$namespace}btn-blue {\n        color: $primary-color;\n    }\n    &.#{$namespace}btn-positive,\n    &.#{$namespace}btn-success,\n    &.#{$namespace}btn-green {\n        color: $positive-color;\n    }\n    &.#{$namespace}btn-warning,\n    &.#{$namespace}btn-yellow {\n        color: $warning-color;\n    }\n    &.#{$namespace}btn-negative,\n    &.#{$namespace}btn-danger,\n    &.#{$namespace}btn-red {\n        color: $negative-color;\n    }\n    &.#{$namespace}btn-royal,\n    &.#{$namespace}btn-purple {\n        color: $royal-color;\n    }\n    // Active states\n    &.#{$namespace}btn-primary,\n    &.#{$namespace}btn-blue,\n    &.#{$namespace}btn-positive,\n    &.#{$namespace}btn-success,\n    &.#{$namespace}btn-green,\n    &.#{$namespace}btn-warning,\n    &.#{$namespace}btn-yellow,\n    &.#{$namespace}btn-negative,\n    &.#{$namespace}btn-danger,\n    &.#{$namespace}btn-red,\n    &.#{$namespace}btn-royal,\n    &.#{$namespace}btn-purple,\n     {\n        &:enabled:active {\n            color: #fff;\n        }\n    }\n}\n// Link button (Buttons that look like links)\n.#{$namespace}btn-link {\n    padding-top: 6px;\n    padding-bottom: 6px;\n    color: $primary-color;\n    background-color: transparent;\n    border: 0;\n    &:enabled:active,\n    &.#{$namespace}active:enabled {\n        color: darken($primary-color, 10%);\n        background-color: transparent;\n    }\n}\n// Block level buttons (full width buttons)\n.#{$namespace}btn-block {\n    display: block;\n    width: 100%;\n    padding: 15px 0;\n    margin-bottom: 10px;\n    font-size: 18px;\n}\n// Button overrides\n// --------------------------------------------------\n//input[type=\"submit\"],\n//input[type=\"reset\"],\n//input[type=\"button\"] {\n//  width: 100%;\n//}\n// Buttons with badges\n// --------------------------------------------------\n// Generic styles for all badges within default buttons\n.#{$namespace}btn .#{$namespace}badge {\n    margin: -2px -4px -2px 4px;\n    font-size: $button-font-size;\n    background-color: rgba(0,0,0,.15);\n}\n// Buttons with inverted badges\n.#{$namespace}btn .#{$namespace}badge-inverted,\n.#{$namespace}btn:enabled:active .#{$namespace}badge-inverted {\n    background-color: transparent;\n}\n.#{$namespace}btn-primary:enabled:active .#{$namespace}badge-inverted,\n.#{$namespace}btn-positive:enabled:active .#{$namespace}badge-inverted,\n.#{$namespace}btn-negative:enabled:active .#{$namespace}badge-inverted {\n    color: #fff;\n}\n// Position badges within block level buttons\n// Note: These are absolutely positioned so that text of button isn't \"pushed\" by badge and always\n// stays at the center of button\n.#{$namespace}btn-block .#{$namespace}badge {\n    position: absolute;\n    right: 0;\n    margin-right: 10px;\n}\n// Buttons with Muiicons\n// --------------------------------------------------\n.#{$namespace}btn .#{$namespace}icon {\n    font-size: inherit;\n}\n.#{$namespace}btn.#{$namespace}icon {\n    font-size: $button-font-size;\n    line-height: 1.42;\n}\n.#{$namespace}btn.#{$namespace}fab {\n    border-radius: 50%;\n    width: 56px;\n    height: 56px;\n    padding: 16px;\n    outline: none;\n    &.#{$namespace}btn-mini {\n        width: 40px;\n        height: 40px;\n        padding: 8px;\n    }\n    .#{$namespace}icon {\n        font-size: 24px;\n        line-height: 24px;\n        width: 24px;\n        height: 24px;\n    }\n}\n.#{$namespace}btn .#{$namespace}spinner {\n    width: 14px;\n    height: 14px;\n    vertical-align: text-bottom;\n}\n.#{$namespace}btn-block .#{$namespace}spinner {\n    width: 22px;\n    height: 22px;\n}"
  },
  {
    "path": "sass/cards.scss",
    "content": "//\n// Cards\n// --------------------------------------------------\n\n.#{$namespace}card {\n    // margin: 0 15px;\n    margin:$card-margin;\n    overflow: hidden;\n    background-color: $card-bg;\n    // border: $border-default;\n    background-clip:padding-box;\n    border-radius: $card-border-radius;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, .3);\n    position: relative;\n    font-size: $card-font-size;\n}\n\n.#{$namespace}content > .#{$namespace}card:first-child{\n    margin-top: 15px;\n}\n//Cards with input-group\n.#{$namespace}card .#{$namespace}input-group{\n    &:before,&:after{\n         height:0;   \n    }\n    .#{$namespace}input-row:last-child{\n        &:before,&:after{\n            height:0;   \n        }\n    }\n    \n}\n// Cards with table-views\n// --------------------------------------------------\n.#{$namespace}card .#{$namespace}table-view {\n    margin-bottom: 0;\n    border-top: 0;\n    border-bottom: 0;\n    border-radius: $border-radius;\n    // Rounding first divider on carded lists and remove border on the top\n    //fix Android 4.1.x/4.2.x 圆角列表四角不圆的bug\n    .#{$namespace}table-view-divider:first-child,.#{$namespace}table-view-cell:first-child {\n        top: 0;\n        border-top-left-radius: $border-radius;\n        border-top-right-radius: $border-radius;\n    }\n\n    // Rounding last divider on carded table views\n    .#{$namespace}table-view-divider:last-child,.#{$namespace}table-view-cell:last-child {\n        border-bottom-left-radius: $border-radius;\n        border-bottom-right-radius: $border-radius;\n    }\n    &:before,&:after{\n     height:0;\n    }\n}\n\n\n// Remove the bottom border from last table cell\n.#{$namespace}card > .#{$namespace}table-view {\n    >.#{$namespace}table-view-cell:last-child{\n        &:before,&:after{\n        height:0;   \n        }\n    }\n}\n\n\n.#{$namespace}card-header,\n.#{$namespace}card-footer {\n    min-height: $bar-base-height;\n    position: relative;\n    padding: 10px 15px;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: flex;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    justify-content: space-between;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    align-items: center;\n\n    .#{$namespace}card-link {\n        line-height: $bar-base-height;\n        height: $bar-base-height;\n        text-decoration: none;\n        position: relative;\n        margin-top: -10px;\n        margin-bottom: -10px;\n        display: -webkit-box;\n        display: -webkit-flex;\n        display: flex;\n        -webkit-box-pack: start;\n        -webkit-justify-content: flex-start;\n        justify-content: flex-start;\n        -webkit-box-align: center;\n        -webkit-align-items: center;\n        align-items: center;\n        -webkit-transition-duration: .3s;\n        transition-duration: .3s;\n    }\n\n}\n     \n.#{$namespace}card-header:after,\n.#{$namespace}card-footer:before {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 1px;\n    background-color: #c8c7cc;\n    content: '';\n    -webkit-transform: scaleY(0.5);\n    transform: scaleY(0.5);\n}\n\n.#{$namespace}card-header {\n    border-radius: 2px 2px 0 0;\n    font-size: $font-size-default;\n    &:after {\n        top: auto;\n        bottom: 0;\n    }\n    >img:first-child{\n        font-size: 0;\n        line-height: 0;\n        width: 34px;\n        height: 34px;\n        float: left;\n    }\n}\n\n.#{$namespace}card-footer {\n    border-radius: 0 0 2px 2px;\n    color: $card-footer-color;\n}\n\n.#{$namespace}card-content {\n    position: relative;\n    font-size: $card-font-size;\n}\n    \n.#{$namespace}card-content-inner {\n    padding: 15px;\n    position: relative;\n}\n    \n.#{$namespace}card-media {\n    color: #fff;\n    background-size: cover;\n    background-position: center;\n    vertical-align: bottom;\n}\n    \n.#{$namespace}card-header.#{$namespace}card-media {\n    display: block;\n    padding: 10px;\n\n    .#{$namespace}media-body{\n        margin-bottom: 0;\n        margin-left: $card-media-body-margin-left;\n        font-size: $card-font-size;\n        font-weight: $font-weight;\n        color: #333;\n        line-height: $font-size-default;\n        p {\n            font-size: 13px;\n            margin-bottom: 0;\n        }\n\n    }\n}\n"
  },
  {
    "path": "sass/forms.scss",
    "content": "//\n// Forms\n// --------------------------------------------------\n\n// Force form elements to inherit font styles\ninput,\ntextarea,\nselect {\n    font-family: $font-family-default;\n    font-size: $font-size-default;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-tap-highlight-color: transparent;\n    &:focus{\n        -webkit-tap-highlight-color: rgba(0,0,0,0);\n        -webkit-tap-highlight-color: transparent;\n        -webkit-user-modify: read-write-plaintext-only;\n    }\n}\n\n// Stretch inputs/textareas to full width and add height to maintain a consistent baseline\nselect,\ntextarea,\ninput[type=\"text\"],\ninput[type=\"search\"],\ninput[type=\"password\"],\ninput[type=\"datetime\"],\ninput[type=\"datetime-local\"],\ninput[type=\"date\"],\ninput[type=\"month\"],\ninput[type=\"time\"],\ninput[type=\"week\"],\ninput[type=\"number\"],\ninput[type=\"email\"],\ninput[type=\"url\"],\ninput[type=\"tel\"],\ninput[type=\"color\"] {\n    width: 100%;\n    height: 40px;\n    -webkit-appearance: none;\n    padding: 10px 15px;\n    margin-bottom: 15px;\n    line-height: $line-height-default;\n    background-color: #fff;\n    border: 1px solid rgba(0, 0, 0, .2);\n    border-radius: 3px;\n    outline: none;\n    -webkit-user-select: text;\n}\n//input[type=number]::-webkit-outer-spin-button { margin: 0; }\n//turn off spin button\ninput[type=number]::-webkit-inner-spin-button,\ninput[type=number]::-webkit-outer-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n}\n// Rounded search input\ninput[type=\"search\"] {\n    font-size: 16px;\n    height: 34px;\n    text-align: center;\n    background-color: rgba(0,0,0,.1);\n    border: 0;\n    border-radius: 6px;\n    // Override content-box in normalize\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\ninput[type=\"search\"]:focus {\n    text-align: left;\n}\n\n// Allow text area's height to grow larger than a normal input\ntextarea {\n    height: auto;\n    resize: none;\n}\n\n// Style select button to look like part of the Ratchet's style\nselect {\n    margin-top:1px;\n    height: auto;\n    font-size: 14px;\n    background-color: #fff;\n    border: 0!important;\n    &:focus{\n        -webkit-user-modify: read-only;\n    }\n}\n\n\n\n// Input groups (cluster multiple inputs together into a single group)\n// -------------------------------------------------------------------\n\n// Remove spacing, borders, shadows and rounding since it all belongs on the .#{$namespace}input-group not the input\n.#{$namespace}input-group {\n    position: relative;\n    padding: 0;\n    border: 0;\n    background-color: #fff;\n    @include hairline(double, #c8c7cc, 0); // Double grey border.\n}\n.#{$namespace}input-group input,\n.#{$namespace}input-group textarea {\n    margin-bottom: 0;\n    background-color: transparent;\n    border-radius: 0;\n    @include box-shadow(none);\n    border: 0;\n//  @include hairline(single, #c8c7cc, 15px);//为啥之前给input，textarea加了边线？都放入input-row的话，是不需要的\n}\n\n.#{$namespace}input-group input[type=\"search\"]{\n    background:none;\n}\n.#{$namespace}input-group input:last-child {\n    background-image: none;\n}\n// Input groups with labels\n// --------------------------------------------------\n.#{$namespace}input-row {\n    clear:left;\n    overflow: hidden;\n    select{\n        padding: 0;\n        height: 37px;\n        font-size:17px;\n    }\n}\n.#{$namespace}input-row:last-child,\n.#{$namespace}input-row label + input,.#{$namespace}input-row .mui-btn + input  {\n    background: none;\n}\n// To use labels with input groups, wrap a label and an input in an .#{$namespace}input-row\n.#{$namespace}input-group .#{$namespace}input-row {\n    height: 40px; // Matches the height of inputs.\n    @include hairline(single, #c8c7cc, 15px); // Single grey border with a 15px .\n}\n// Labels get floated left with a set percentage width\n.#{$namespace}input-row label {\n    float: left;\n    width: 35%;\n    padding: 11px 15px;\n    font-family: $font-family-default;\n    line-height: 1.1; // Put the text on the baseline.\n}\n.#{$namespace}input-row label ~\n{\n    input,select,textarea{\n        float: right;\n        width: 65%;\n        padding-left: 0;\n        margin-bottom: 0;\n        border: 0;    \n    }\n}\n.#{$namespace}input-row .mui-btn {\n    float: right;\n    width: 15%;\n    padding: 10px 15px;\n    line-height: 1.1; // Put the text on the baseline.\n}\n.#{$namespace}input-row .mui-btn ~\n{\n    input,select,textarea{\n        float: left;\n        width: 85%;\n        padding-left: 0;\n        margin-bottom: 0;\n        border: 0;    \n    }\n}\n.#{$namespace}button-row  {\n    position: relative;\n    padding-top: 5px;\n    text-align: center;    \n}\n.#{$namespace}input-group .#{$namespace}button-row  {\n    height: 45px;\n}\n// Actual inputs float to right of labels and also have a set percentage\n.#{$namespace}input-row  {\n    position:relative;\n    &.#{$namespace}input-range{\n        padding-right: 20px;\n        overflow: visible;\n    }\n    .#{$namespace}inline{\n        padding: 8px 0;\n    }\n    .#{$namespace}input-clear ~ .#{$namespace}icon-clear,.#{$namespace}input-speech ~ .#{$namespace}icon-speech,.#{$namespace}input-password ~ .#{$namespace}icon-eye{\n        position:absolute;\n        right: 0px;\n        top: 10px;\n        font-size: 20px;\n        height: 38px;\n        width: 38px;\n        text-align: center;\n        color:#999;\n        z-index: z(\"default\");\n        &.#{$namespace}active{\n            color:$primary-color;\n        }\n    }\n    .#{$namespace}input-speech ~ .#{$namespace}icon-speech{\n        top:8px;\n        font-size:24px;\n    }\n    .#{$namespace}input-clear ~ .#{$namespace}icon-clear {\n        ~ .#{$namespace}icon-speech{\n            display:none;\n        }\n        &.#{$namespace}hidden{\n            ~ .#{$namespace}icon-speech{\n                display:inline-block;\n            }\n        }\n    }\n    .#{$namespace}icon-speech ~ .#{$namespace}placeholder{\n        right:38px;\n    }\n    &.#{$namespace}search{\n        .#{$namespace}icon-clear{\n            top:7px;\n        }\n        .#{$namespace}icon-speech{\n            top:5px;\n        }\n    }\n}\n\n//radio,checkbox\n.#{$namespace}radio,.#{$namespace}checkbox{\n    position:relative;\n    label{\n        float: none;\n        display: inline-block;\n        width: 100%;\n        padding-right: 58px;\n    }\n\n}\n.#{$namespace}radio.#{$namespace}left input[type=\"radio\"],.#{$namespace}checkbox.#{$namespace}left input[type=\"checkbox\"]{\n    left:20px;\n}\n.#{$namespace}radio.#{$namespace}left label,.#{$namespace}checkbox.#{$namespace}left label{\n    padding-left: 58px;\n    padding-right: 15px;\n}\n.#{$namespace}radio input[type=\"radio\"],.#{$namespace}checkbox input[type=\"checkbox\"]{\n    -webkit-appearance:none;\n    outline: 0!important;\n    width: 28px;\n    border: 0;\n    height: 26px;\n    display: inline-block;\n    position: absolute;\n    right: 20px;\n    top: 4px;\n    //设置背景色，否则在Ios上会有黑色边框；\n    background-color:transparent;\n    &[disabled]:before{\n        opacity: .3;\n    }\n    &:before{\n        font-family: Muiicons;\n        font-weight: normal;\n        border-radius: 0;\n        font-size: 28px;\n        line-height: 1;\n        text-decoration: none;\n        -webkit-font-smoothing: antialiased;\n        color: rgb(170, 170, 170);\n        background: none;\n    }\n    &:checked:before{\n        color:$primary-color;\n    }\n\n}\n.#{$namespace}radio.#{$namespace}disabled label,.#{$namespace}radio label.#{$namespace}disabled,.#{$namespace}checkbox.#{$namespace}disabled label,.#{$namespace}checkbox label.#{$namespace}disabled{\n    opacity: .4;\n}\n.#{$namespace}radio input[type=\"radio\"]:before{\n    content: \"\\e411\";\n}\n.#{$namespace}radio input[type=\"radio\"]:checked:before{\n    content: \"\\e441\";\n}\n.#{$namespace}checkbox input[type=\"checkbox\"]:before{\n    content: \"\\e411\";\n}\n.#{$namespace}checkbox input[type=\"checkbox\"]:checked:before{\n    content: \"\\e442\";\n}\n\n\n.#{$namespace}select{\n    position: relative;\n}\n.#{$namespace}select:before{\n    position: absolute;\n    top: 8px;\n    color:rgba(170, 170, 170, 0.6);\n    font-family: Muiicons;\n    right: 21px;\n    content: '\\e581';\n}\n\n\n.#{$namespace}input-row .#{$namespace}switch{\n    float: right;\n    margin-top: 5px;\n    margin-right: 20px;\n}\n//show the min and max\n.#{$namespace}input-range{\n    input[type=\"range\"] {\n        -webkit-appearance: none!important;\n        cursor: pointer;\n        border: 0;\n        outline: none;\n        padding: 0;\n        margin: 17px 0;\n        background-color: #999;\n        height: 2px;\n        border-radius: 3px;\n        position: relative;\n        width:100%;\n    }\n\n    input[type='range']::-webkit-slider-thumb {\n        -webkit-appearance: none!important;\n        background-color:$primary-color;\n        background-clip: padding-box;\n        height:28px;\n        width:28px;\n        border-radius: 50%;\n        border-color: darken($primary-color, 10%);\n    }\n    /*input[type=\"range\"] {\n        -webkit-appearance: none;\n        background: #999;\n        height: 36px;\n        border-radius: 1px;\n        overflow: hidden;\n        margin-top: 2px;\n        margin-bottom: 2px;\n        outline:none;\n        position:relative;\n        width:100%;\n    }*/\n    label ~ input[type=\"range\"]{\n        width:65%;\n    }\n\n    /*input[type='range']::-webkit-slider-thumb {\n        -webkit-appearance: none!important;\n        opacity: 0.5;\n        height:28px;\n        width:28px;\n        border-radius: 50%;\n        background:#00b7fb;\n        position: relative;\n        pointer-events: none;\n        -webkit-box-sizing: border-box;\n        box-sizing: border-box;\n        &:before{\n            position: absolute;\n            top: 13px;\n            left: -2000px;\n            width: 2000px;\n            height: 2px;\n            background: #00b7fb;\n            content:' ';\n        }\n    }*/\n    .#{$namespace}tooltip{\n        width: 64px;\n        height: 64px;\n        font-size: 36px;\n        line-height:64px;\n        opacity: .8;\n        background-color: #fff;\n        border:1px solid #ddd;\n        border-radius:6px;\n        color: #333;\n        text-shadow: 0 1px 0 #f3f3f3;\n        position:absolute;\n        top:-70px;\n        text-align:center;\n        z-index:z(\"default\");\n    }\n}\n//.#{$namespace}bar .#{$namespace}input-row.#{$namespace}search .#{$namespace}icon-speech{\n//  top: -2px;\n//  right: 10px;\n//}\n.#{$namespace}search{\n    position: relative;\n    input[type=\"search\"]{\n        padding-left:30px;\n    }\n    .#{$namespace}placeholder{\n        height: 34px;\n        font-size: 16px;\n        line-height:34px;\n        text-align: center;\n        background:none;\n        border: 0;\n        color:#999;\n        border-radius: 6px;\n        display:inline-block;\n        position:absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        z-index:z(\"default\");\n        .#{$namespace}icon{\n            color:#333;\n            font-size:20px;\n        }\n    }\n\n    &:before{\n        position: absolute;\n        font-family: Muiicons;\n        font-weight: normal;\n        font-size: 20px;\n        right: 50%;\n        margin-right:31px;\n        top: 50%;\n        margin-top: -18px;\n        content: '\\e466';\n        display:none;\n    }\n    &.#{$namespace}active{\n        &:before{\n            left:5px;\n            right:auto;\n            margin-right:0;\n            font-size:20px;\n            display:block;\n        }\n        input[type=\"search\"]{\n            text-align:left;\n        }\n        .#{$namespace}placeholder{\n            display:none;\n        }\n    }\n}\n\n"
  },
  {
    "path": "sass/fullscreen.scss",
    "content": ".#{$namespace}fullscreen {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    &.#{$namespace}slider .#{$namespace}slider-group {\n        height: 100%;\n    }\n    .#{$namespace}segmented-control ~ .#{$namespace}slider-group {\n        width: 100%;\n        height: auto;\n        top: 40px;\n        bottom: 0;\n        position: absolute;\n    }\n    &.#{$namespace}slider .#{$namespace}slider-item>a {\n        top: 50%;\n        transform: translateY(-50%);\n        -webkit-transform: translateY(-50%);\n    }\n    .#{$namespace}off-canvas-wrap .#{$namespace}slider-item>a {\n        top: auto;\n        transform: none;\n        -webkit-transform: none;\n    }\n}\n.#{$namespace}bar-nav ~ .#{$namespace}content .#{$namespace}slider.#{$namespace}fullscreen {\n    top: 44px;\n}\n.#{$namespace}bar-tab ~ .#{$namespace}content .#{$namespace}slider.#{$namespace}fullscreen {\n    .#{$namespace}segmented-control ~ .#{$namespace}slider-group {\n        bottom: 50px;\n    }\n}"
  },
  {
    "path": "sass/grid.scss",
    "content": ".#{$namespace}row {\n    @include clearfix();\n}\n.#{$namespace}col-xs-1, .#{$namespace}col-sm-1, .#{$namespace}col-xs-2, .#{$namespace}col-sm-2, .#{$namespace}col-xs-3, .#{$namespace}col-sm-3, .#{$namespace}col-xs-4, .#{$namespace}col-sm-4,  .#{$namespace}col-xs-5, .#{$namespace}col-sm-5, .#{$namespace}col-xs-6, .#{$namespace}col-sm-6, .#{$namespace}col-xs-7, .#{$namespace}col-sm-7, .#{$namespace}col-xs-8, .#{$namespace}col-sm-8, .#{$namespace}col-xs-9, .#{$namespace}col-sm-9, .#{$namespace}col-xs-10, .#{$namespace}col-sm-10,  .#{$namespace}col-xs-11, .#{$namespace}col-sm-11, .#{$namespace}col-xs-12, .#{$namespace}col-sm-12 {\n  position: relative;\n  min-height: 1px;\n}\n.#{$namespace}row>[class*=\"#{$namespace}col-\"]{\n  float: left;  \n}\n.#{$namespace}col-xs-12 {\n    width: 100%;\n}\n.#{$namespace}col-xs-11 {\n    width: 91.66666667%;\n}\n.#{$namespace}col-xs-10 {\n    width: 83.33333333%;\n}\n.#{$namespace}col-xs-9 {\n    width: 75%;\n}\n.#{$namespace}col-xs-8 {\n    width: 66.66666667%;\n}\n.#{$namespace}col-xs-7 {\n    width: 58.33333333%;\n}\n.#{$namespace}col-xs-6 {\n    width: 50%;\n}\n.#{$namespace}col-xs-5 {\n    width: 41.66666667%;\n}\n.#{$namespace}col-xs-4 {\n    width: 33.33333333%;\n}\n.#{$namespace}col-xs-3 {\n    width: 25%;\n}\n.#{$namespace}col-xs-2 {\n    width: 16.66666667%;\n}\n.#{$namespace}col-xs-1 {\n    width: 8.33333333%;\n}\n@media (min-width: 400px) {\n    .#{$namespace}col-sm-12 {\n        width: 100%;\n    }\n    .#{$namespace}col-sm-11 {\n        width: 91.66666667%;\n    }\n    .#{$namespace}col-sm-10 {\n        width: 83.33333333%;\n    }\n    .#{$namespace}col-sm-9 {\n        width: 75%;\n    }\n    .#{$namespace}col-sm-8 {\n        width: 66.66666667%;\n    }\n    .#{$namespace}col-sm-7 {\n        width: 58.33333333%;\n    }\n    .#{$namespace}col-sm-6 {\n        width: 50%;\n    }\n    .#{$namespace}col-sm-5 {\n        width: 41.66666667%;\n    }\n    .#{$namespace}col-sm-4 {\n        width: 33.33333333%;\n    }\n    .#{$namespace}col-sm-3 {\n        width: 25%;\n    }\n    .#{$namespace}col-sm-2 {\n        width: 16.66666667%;\n    }\n    .#{$namespace}col-sm-1 {\n        width: 8.33333333%;\n    }\n\n}"
  },
  {
    "path": "sass/hack.scss",
    "content": ".#{$namespace}android.#{$namespace}android-4-0 {\ninput,\ntextarea{\n    &:focus{\n        //修复4.0.x系统的输入框无法正常输入文字\n        -webkit-user-modify: inherit;\n    }\n}\t\n}\n.#{$namespace}android.#{$namespace}android-4-2,.#{$namespace}android.#{$namespace}android-4-3 {\ninput,\ntextarea{\n    -webkit-user-select: text;\n}   \n}\n//解决ios list 过多(height>20000px) crash的bug\n.#{$namespace}ios .#{$namespace}table-view-cell {\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n}\n"
  },
  {
    "path": "sass/icon.scss",
    "content": "//\n// Muiicons\n// --------------------------------------------------\n\n@font-face {\n    font-family: Muiicons;\n    font-weight: normal;\n    font-style: normal;\n    src: url('../fonts/mui.ttf') format('truetype');\n}\n\n.#{$namespace}icon {\n    display: inline-block;\n    font-family: Muiicons;\n    font-weight: normal;\n    font-style: normal;\n    font-size: 24px;\n    line-height: 1;\n    text-decoration: none;\n    -webkit-font-smoothing: antialiased;\n    &.#{$namespace}active{\n        color:$primary-color;\n    }\n    &.#{$namespace}right{\n        &:before{\n            float:right;\n            padding-left: 0.2em;\n        }   \n    }\n}\n\n\n// 通讯录\n// 空心部分\n.#{$namespace}icon-contact:before { content: \"\\e100\"; }\n.#{$namespace}icon-person:before { content: \"\\e101\"; }\n.#{$namespace}icon-personadd:before { content: \"\\e102\"; }\n\n// 实心部分\n.#{$namespace}icon-contact-filled:before { content: \"\\e130\"; }\n.#{$namespace}icon-person-filled:before { content: \"\\e131\"; }\n.#{$namespace}icon-personadd-filled:before { content: \"\\e132\"; }\n\n\n// 通讯功能\n// 空心部分\n.#{$namespace}icon-phone:before { content: \"\\e200\"; }\n.#{$namespace}icon-email:before { content: \"\\e201\"; }\n.#{$namespace}icon-chatbubble:before { content: \"\\e202\"; }\n.#{$namespace}icon-chatboxes:before { content: \"\\e203\"; }\n\n// 实心部分\n.#{$namespace}icon-phone-filled:before { content: \"\\e230\"; }\n.#{$namespace}icon-email-filled:before { content: \"\\e231\"; }\n.#{$namespace}icon-chatbubble-filled:before { content: \"\\e232\"; }\n.#{$namespace}icon-chatboxes-filled:before { content: \"\\e233\"; }\n// 通讯功能补充类\n.#{$namespace}icon-weibo:before { content: \"\\e260\"; }\n.#{$namespace}icon-weixin:before { content: \"\\e261\"; }\n.#{$namespace}icon-pengyouquan:before { content: \"\\e262\"; }\n.#{$namespace}icon-chat:before { content: \"\\e263\"; }\n.#{$namespace}icon-qq:before { content: \"\\e264\"; }\n\n\n// 设备类\n// 空心部分\n.#{$namespace}icon-videocam:before { content: \"\\e300\"; }\n.#{$namespace}icon-camera:before { content: \"\\e301\"; }\n.#{$namespace}icon-mic:before { content: \"\\e302\"; }\n.#{$namespace}icon-location:before { content: \"\\e303\"; }\n\n// 实心部分\n.#{$namespace}icon-mic-filled:before,.#{$namespace}icon-speech:before { content: \"\\e332\"; }\n.#{$namespace}icon-location-filled:before { content: \"\\e333\"; }\n\n// 设备补充类\n.#{$namespace}icon-micoff:before { content: \"\\e360\"; }\n// .#{$namespace}icon-volumehigh:before { content: \"\\e361\"; }\n// .#{$namespace}icon-volumelow:before { content: \"\\e362\"; }\n.#{$namespace}icon-image:before { content: \"\\e363\"; }\n.#{$namespace}icon-map:before { content: \"\\e364\"; }\n\n\n// 操作标志类\n// 空心部分\n.#{$namespace}icon-compose:before { content: \"\\e400\"; }\n.#{$namespace}icon-trash:before { content: \"\\e401\"; }\n.#{$namespace}icon-upload:before { content: \"\\e402\"; }\n.#{$namespace}icon-download:before { content: \"\\e403\"; }\n.#{$namespace}icon-close:before { content: \"\\e404\"; }\n.#{$namespace}icon-redo:before { content: \"\\e405\"; }\n.#{$namespace}icon-undo:before { content: \"\\e406\"; }\n.#{$namespace}icon-refresh:before { content: \"\\e407\"; }\n.#{$namespace}icon-star:before { content: \"\\e408\"; }\n.#{$namespace}icon-plus:before { content: \"\\e409\"; }\n.#{$namespace}icon-minus:before { content: \"\\e410\"; }\n.#{$namespace}icon-circle:before,.#{$namespace}icon-checkbox:before { content: \"\\e411\"; }\n\n// 实心部分\n.#{$namespace}icon-close-filled:before,.#{$namespace}icon-clear:before { content: \"\\e434\"; }\n.#{$namespace}icon-refresh-filled:before { content: \"\\e437\"; }\n.#{$namespace}icon-star-filled:before { content: \"\\e438\"; }\n.#{$namespace}icon-plus-filled:before { content: \"\\e439\"; }\n.#{$namespace}icon-minus-filled:before { content: \"\\e440\"; }\n.#{$namespace}icon-circle-filled:before { content: \"\\e441\"; }\n.#{$namespace}icon-checkbox-filled:before { content: \"\\e442\"; }\n\n\n// 操作标志补充类\n.#{$namespace}icon-closeempty:before { content: \"\\e460\"; }\n.#{$namespace}icon-refreshempty:before { content: \"\\e461\"; }\n.#{$namespace}icon-reload:before { content: \"\\e462\"; }\n.#{$namespace}icon-starhalf:before { content: \"\\e463\"; }\n.#{$namespace}icon-spinner:before { content: \"\\e464\"; }\n.#{$namespace}icon-spinner-cycle:before { content: \"\\e465\"; }\n.#{$namespace}icon-search:before { content: \"\\e466\"; }\n// .#{$namespace}icon-searchstrong:before { content: \"\\e467\"; }\n.#{$namespace}icon-plusempty:before { content: \"\\e468\"; }\n\n.#{$namespace}icon-forward:before { content: \"\\e470\"; }\n.#{$namespace}icon-back:before,.#{$namespace}icon-left-nav:before { content: \"\\e471\"; }\n.#{$namespace}icon-checkmarkempty:before { content: \"\\e472\"; }\n// .#{$namespace}icon-share:before { content: \"\\e473\"; }\n\n\n// 拟物标志类\n// 空心部分\n.#{$namespace}icon-home:before { content: \"\\e500\"; }\n.#{$namespace}icon-navigate:before { content: \"\\e501\"; }\n.#{$namespace}icon-gear:before { content: \"\\e502\"; }\n.#{$namespace}icon-paperplane:before { content: \"\\e503\"; }\n.#{$namespace}icon-info:before { content: \"\\e504\"; }\n.#{$namespace}icon-help:before { content: \"\\e505\"; }\n.#{$namespace}icon-locked:before { content: \"\\e506\"; }\n.#{$namespace}icon-more:before { content: \"\\e507\"; }\n.#{$namespace}icon-flag:before { content: \"\\e508\"; }\n\n// 实心部分\n.#{$namespace}icon-home-filled:before { content: \"\\e530\"; }\n.#{$namespace}icon-gear-filled:before { content: \"\\e532\"; }\n.#{$namespace}icon-info-filled:before { content: \"\\e534\"; }\n.#{$namespace}icon-help-filled:before { content: \"\\e535\"; }\n.#{$namespace}icon-more-filled:before { content: \"\\e537\"; }\n\n// 拟物标志补充类\n.#{$namespace}icon-settings:before { content: \"\\e560\"; }\n// .#{$namespace}icon-settingsstrong:before { content: \"\\e561\"; }\n.#{$namespace}icon-list:before { content: \"\\e562\"; }\n.#{$namespace}icon-bars:before { content: \"\\e563\"; }\n// .#{$namespace}icon-more-vertical:before { content: \"\\e564\"; }\n.#{$namespace}icon-loop:before { content: \"\\e565\"; }\n// .#{$namespace}icon-loopstrong:before { content: \"\\e566\"; }\n.#{$namespace}icon-paperclip:before { content: \"\\e567\"; }\n.#{$namespace}icon-eye:before { content: \"\\e568\"; }\n\n// 箭头\n.#{$namespace}icon-arrowup:before { content: \"\\e580\"; }\n.#{$namespace}icon-arrowdown:before { content: \"\\e581\"; }\n.#{$namespace}icon-arrowleft:before { content: \"\\e582\"; }\n.#{$namespace}icon-arrowright:before { content: \"\\e583\"; }\n\n.#{$namespace}icon-arrowthinup:before { content: \"\\e584\"; }\n.#{$namespace}icon-arrowthindown:before { content: \"\\e585\"; }\n.#{$namespace}icon-arrowthinleft:before { content: \"\\e586\"; }\n.#{$namespace}icon-arrowthinright:before { content: \"\\e587\"; }\n\n.#{$namespace}icon-pulldown:before { content: \"\\e588\"; }\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sass/iframe.scss",
    "content": ".#{$namespace}iframe-wrapper{\n    -webkit-overflow-scrolling:touch;\n    position: absolute;\n    left: 0;\n    right: 0;\n    iframe{\n      border: 0;\n      width: 100%;\n      height: 100%;  \n    }\n}\n\n"
  },
  {
    "path": "sass/iscroll.scss",
    "content": ".#{$namespace}iscroll-wrapper{\n    position: absolute;\n    z-index: z(\"default\");\n    top: 0;\n    left: 0;\n    bottom: 0;\n    width: 100%;\n    overflow: hidden;\n}\n.#{$namespace}bar-nav ~ .#{$namespace}iscroll-wrapper {\n    top: $bar-base-height;\n    padding:0;\n}\n.#{$namespace}bar-header-secondary ~ .#{$namespace}iscroll-wrapper {\n    top: ($bar-base-height*2);\n}\n.#{$namespace}bar-footer ~ .#{$namespace}iscroll-wrapper {\n    bottom: $bar-base-height;\n    padding:0;\n}\n.#{$namespace}bar-footer-secondary ~ .#{$namespace}iscroll-wrapper {\n    bottom: ($bar-base-height*2);\n}\n.#{$namespace}bar-tab ~ .#{$namespace}iscroll-wrapper{\n    bottom: $bar-tab-height;\n    padding:0;\n}\n.#{$namespace}bar-footer-secondary-tab ~  .#{$namespace}iscroll-wrapper{\n    bottom: ($bar-tab-height+$bar-base-height);\n}\n\n.#{$namespace}iscroll{\n    position: absolute;\n    z-index: z(\"default\");\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    width: 100%;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -webkit-text-size-adjust: none;\n    text-size-adjust: none;\n}\n"
  },
  {
    "path": "sass/loadings.scss",
    "content": ".#{$namespace}loading{\n    .#{$namespace}spinner{\n        margin: 0 auto;\n        display: block;\n    } \n}\n.#{$namespace}spinner {\n  display: inline-block;\n  width: 24px;\n  height: 24px;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: spinner-spin 1s step-end infinite;\n  animation: spinner-spin 1s step-end infinite;\n}\n.#{$namespace}spinner:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><defs><line id='l' x1='60' x2='60' y1='7' y2='27' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round'/></defs><g><use xlink:href='%23l' opacity='.27'/><use xlink:href='%23l' opacity='.27' transform='rotate(30 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(60 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(90 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(120 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(150 60,60)'/><use xlink:href='%23l' opacity='.37' transform='rotate(180 60,60)'/><use xlink:href='%23l' opacity='.46' transform='rotate(210 60,60)'/><use xlink:href='%23l' opacity='.56' transform='rotate(240 60,60)'/><use xlink:href='%23l' opacity='.66' transform='rotate(270 60,60)'/><use xlink:href='%23l' opacity='.75' transform='rotate(300 60,60)'/><use xlink:href='%23l' opacity='.85' transform='rotate(330 60,60)'/></g></svg>\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat;\n}\n.#{$namespace}spinner-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><defs><line id='l' x1='60' x2='60' y1='7' y2='27' stroke='%23fff' stroke-width='11' stroke-linecap='round'/></defs><g><use xlink:href='%23l' opacity='.27'/><use xlink:href='%23l' opacity='.27' transform='rotate(30 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(60 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(90 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(120 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(150 60,60)'/><use xlink:href='%23l' opacity='.37' transform='rotate(180 60,60)'/><use xlink:href='%23l' opacity='.46' transform='rotate(210 60,60)'/><use xlink:href='%23l' opacity='.56' transform='rotate(240 60,60)'/><use xlink:href='%23l' opacity='.66' transform='rotate(270 60,60)'/><use xlink:href='%23l' opacity='.75' transform='rotate(300 60,60)'/><use xlink:href='%23l' opacity='.85' transform='rotate(330 60,60)'/></g></svg>\");\n}\n@-webkit-keyframes spinner-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  8.33333333% {\n    -webkit-transform: rotate(30deg);\n  }\n  16.66666667% {\n    -webkit-transform: rotate(60deg);\n  }\n  25% {\n    -webkit-transform: rotate(90deg);\n  }\n  33.33333333% {\n    -webkit-transform: rotate(120deg);\n  }\n  41.66666667% {\n    -webkit-transform: rotate(150deg);\n  }\n  50% {\n    -webkit-transform: rotate(180deg);\n  }\n  58.33333333% {\n    -webkit-transform: rotate(210deg);\n  }\n  66.66666667% {\n    -webkit-transform: rotate(240deg);\n  }\n  75% {\n    -webkit-transform: rotate(270deg);\n  }\n  83.33333333% {\n    -webkit-transform: rotate(300deg);\n  }\n  91.66666667% {\n    -webkit-transform: rotate(330deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n  }\n}\n@keyframes spinner-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  8.33333333% {\n    transform: rotate(30deg);\n  }\n  16.66666667% {\n    transform: rotate(60deg);\n  }\n  25% {\n    transform: rotate(90deg);\n  }\n  33.33333333% {\n    transform: rotate(120deg);\n  }\n  41.66666667% {\n    transform: rotate(150deg);\n  }\n  50% {\n    transform: rotate(180deg);\n  }\n  58.33333333% {\n    transform: rotate(210deg);\n  }\n  66.66666667% {\n    transform: rotate(240deg);\n  }\n  75% {\n    transform: rotate(270deg);\n  }\n  83.33333333% {\n    transform: rotate(300deg);\n  }\n  91.66666667% {\n    transform: rotate(330deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n\n"
  },
  {
    "path": "sass/mixins.scss",
    "content": "//\n// Mixins\n// --------------------------------------------------\n\n// General\n// --------------------------------------------------\n\n// Utilities\n// -------------------------\n$z-layers: (\n  \"default\":            1,\n  \"below\":             -1,\n  \"max\":            10000,\n  \"bar\": (\n    \"bar\":           10,\n    \"btn\":           20,\n    \"icon\":          20\n  ),\n  \"backdrop\":         998,\n  \"modal\":            999,\n  \"popover\":(\n    \"popover\":        999,\n    \"arrow\":          1000,\n  ),\n  \"scroll\": (\n    \"scrollbar\":      9998,\n   ),\n  \"toast\":            9999,\n);\n@function map-has-nested-keys($map, $keys...) {\n  @each $key in $keys {\n    @if not map-has-key($map, $key) {\n      @return false;\n    }\n    $map: map-get($map, $key);\n  }\n  \n  @return true;\n}\n\n@function map-deep-get($map, $keys...) {\n  @each $key in $keys {\n    $map: map-get($map, $key);\n  }\n \n  @return $map;\n}\n\n@function z($layers...) {\n  @if not map-has-nested-keys($z-layers, $layers...) {\n    @warn \"No layer found for `#{inspect($layers...)}` in $z-layers map. Property omitted.\";\n  }\n \n  @return map-deep-get($z-layers, $layers...);\n}\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n@mixin clearfix() {\n  &:before,\n  &:after {\n    display: table; // 2\n    content: \" \"; // 1\n  }\n  &:after {\n    clear: both;\n  }\n}\n\n// Box shadow\n@mixin box-shadow($shadow...) {\n  -webkit-box-shadow: $shadow;\n          box-shadow: $shadow;\n}\n\n// Gradients\n@mixin linear-gradient($color-from, $color-to) {\n  background-color: $color-from; // Old browsers\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,$color-from), color-stop(100%,$color-to)); // Chrome, Safari4+\n  background-image: -webkit-linear-gradient(top, $color-from 0%, $color-to 100%);           // Chrome10+, Safari5.1+\n//  background-image:    -moz-linear-gradient(top, $color-from 0%, $color-to 100%);           // FF3.6+\n//  background-image:     -ms-linear-gradient(top, $color-from 0%, $color-to 100%);           // IE10+\n  //background-image:      -o-linear-gradient(top, $color-from 0%, $color-to 100%);           // Opera 11.10+\n  background-image:         linear-gradient(to bottom, $color-from 0%, $color-to 100%);     // W3C\n//  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{$color-from}', endColorstr='#{$color-to}', GradientType=0 ); // IE6-9\n}\n@mixin directional-gradient($color-from, $color-to, $deg: 45deg) {\n  background-color: $color-from; // Old browsers\n  background-image: -webkit-gradient(linear, left bottom, right top, color-stop(0%,$color-from), color-stop(100%,$color-to)); // Chrome, Safari4+\n  background-image: -webkit-linear-gradient(45deg, $color-from 0%, $color-to 100%);           // Chrome10+, Safari5.1+\n//  background-image:    -moz-linear-gradient(45deg, $color-from 0%, $color-to 100%);           // FF3.6+\n//  background-image:     -ms-linear-gradient(45deg, $color-from 0%, $color-to 100%);           // IE10+\n  //background-image:      -o-linear-gradient(45deg, $color-from 0%, $color-to 100%);           // Opera 11.10+\n  background-image:         linear-gradient(45deg, $color-from 0%, $color-to 100%);     // W3C\n//  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{$color-from}', endColorstr='#{$color-to}', GradientType=1 ); // IE6-9\n}\n\n\n// Transforms\n// --------------------------------------------------\n@mixin transform($transform...) {\n  -webkit-transform: $transform;\n//      -ms-transform: $transform;\n          transform: $transform;\n}\n\n\n// Transitions\n// --------------------------------------------------\n@mixin transition($transition...) {\n  -webkit-transition: $transition;\n//     -moz-transition: $transition;\n          transition: $transition;\n}\n@mixin transition-property($property...) {\n  -webkit-transition-property: $property;\n//     -moz-transition-property: $property;\n          transition-property: $property;\n}\n@mixin transition-duration($duration...) {\n  -webkit-transition-duration: $duration;\n//     -moz-transition-duration: $duration;\n          transition-duration: $duration;\n}\n@mixin transition-timing-function($function...) {\n  -webkit-transition-timing-function: $function;\n//     -moz-transition-timing-function: $function;\n          transition-timing-function: $function;\n}\n\n\n// Animations\n// --------------------------------------------------\n@mixin animation-name($name) {\n  -webkit-animation-name: $name;\n//     -moz-animation-name: $name;\n          animation-name: $name;\n}\n@mixin animation-duration($duration) {\n  -webkit-animation-duration: $duration;\n//     -moz-animation-duration: $duration;\n          animation-duration: $duration;\n}\n@mixin animation-direction($direction) {\n  -webkit-animation-direction: $direction;\n//     -moz-animation-direction: $direction;\n          animation-direction: $direction;\n}\n\n\n// Misc\n// --------------------------------------------------\n@mixin hairline($type, $color, $offset) {\n    &:after{\r\n        position: absolute;\r\n        left: $offset;\r\n        right: 0;\r\n        bottom: 0;\r\n        height: 1px;\r\n        background-color: $color;\r\n        content:'';\n        -webkit-transform: scaleY(0.5);\n        transform: scaleY(0.5);\r\n    }\r\n    @if $type == double {\r\n        &:before{\r\n            position: absolute;\r\n            left: $offset;\r\n            right: 0;\r\n            top: 0;\r\n            height: 1px;\r\n            background-color: $color;\r\n            content:'';\n            -webkit-transform: scaleY(0.5);\n            transform: scaleY(0.5);\r\n        }\r\n    }\n//  background: repeat-x bottom left \r\n//  url(data:image/gif;base64,R0lGODlhAQACAPABAMjHzP///yH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAABACwAAAAAAQACAAACAgwKADs=);\r\n//  background-size: 100% 1px;\n//@if $type == single {\r\n//  background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='1'><rect fill='#{$color}' x='0' y='0' width='100%' height='0.5'/></svg>\");\r\n//  background-position: $offset 100%;\r\n//\r\n//} @else if $type == double {\r\n//  background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='1'><rect fill='#{$color}' x='0' y='0' width='100%' height='0.5'/></svg>\"),\r\n//                    url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='1'><rect fill='#{$color}' x='0' y='0' width='100%' height='0.5'/></svg>\");\r\n//  background-position: $offset 100%, $offset 0;\r\n//}\r\n//background-repeat: no-repeat;\n}\n\n//button\n@mixin btn($color){\n    color: #fff;\n    background-color: $color;\n    border: 1px solid $color;\n\n    &:enabled:active,\n        &.#{$namespace}active:enabled {\n        color: #fff;\n        background-color: darken($color, 10%);\n        border: 1px solid darken($color, 10%);\n    }\n}\n"
  },
  {
    "path": "sass/modals.scss",
    "content": "//\n// Modals\n// --------------------------------------------------\n\n.#{$namespace}modal {\n  position: fixed;\n  top: 0;\n  z-index: z(\"modal\");\n  width: 100%;\n  min-height: 100%;\n  overflow: hidden;\n  background-color: #fff;\n  opacity: 0;\n  -webkit-transition: -webkit-transform .25s, opacity 1ms .25s;\n          transition: transform .25s, opacity 1ms .25s;\n  @include transform(translate3d(0, 100%, 0));\n  @include transition-timing-function($timing-fuction);\n\n  // Active modal\n  &.#{$namespace}active {\n    height: 100%;\n    opacity: 1;\n    -webkit-transition: -webkit-transform .25s;\n            transition: transform .25s;\n    @include transform(translate3d(0, 0, 0));\n    @include transition-timing-function($timing-fuction);\n  }\n}\n.#{$namespace}android .#{$namespace}modal .#{$namespace}bar{\n      position: static;\n}\n.#{$namespace}android .#{$namespace}modal .#{$namespace}bar-nav~.#{$namespace}content{\n    padding-top: 0;\n}\n"
  },
  {
    "path": "sass/mui.scss",
    "content": "\n// Variables\n@import \"variables.scss\";\n\n// Mixins\n@import \"mixins.scss\";\n\n// Normalize & Base CSS\n@import \"normalize.scss\";\n@import \"base.scss\";\n@import \"type.scss\";\n@import \"grid.scss\";\n\n// Components\n@import \"scroll.scss\";\n//@import \"iscroll.scss\";\n@import \"off-canvas.scss\";\n@import \"loadings.scss\";\n@import \"buttons.scss\";\n@import \"bars.scss\";\n@import \"badges.scss\";\n@import \"cards.scss\";\n@import \"table-views.scss\";\n@import \"slider-cell.scss\";\n@import \"forms.scss\";\n@import \"segmented-controls.scss\";\n@import \"popovers.scss\";\n@import \"popup.scss\";\n@import \"progressbar.scss\";\n@import \"pagination.scss\";\n\n// Javascript components\n@import \"modals.scss\";\n@import \"sliders.scss\";\n@import \"switches.scss\";\n@import \"push.scss\";\n@import \"pullrefreshs.scss\";\n@import \"toast.scss\";\n\n@import \"number.scss\";\n\n// Muiicons\n@import \"icon.scss\";\n// fullscreen\n@import \"fullscreen.scss\";\n@import \"hack.scss\";\n// os\n@import \"os.scss\";\n//iframe\n@import \"iframe.scss\";"
  },
  {
    "path": "sass/normalize.scss",
    "content": "/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  //-ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\nbody::after {\n  position: fixed;\n  content: '';\n  left: -1000px;\n  top: -1000px;\n  -webkit-animation: shadow-preload 0.1s;\n  -webkit-animation-delay: 3s;\n  animation: shadow-preload 0.1s;\n  animation-delay: 3s;\n}\n\n@-webkit-keyframes shadow-preload {\n  0% {\n    background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);\n  }\n\n  100% {\n    background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);\n  }\n}\n\n@keyframes shadow-preload {\n  0% {\n    background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);\n  }\n\n  100% {\n    background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);\n  }\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n  margin: 0.67em 0;\n  font-size: 2em;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  color: #000;\n  background: #ff0;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -.5em;\n}\n\nsub {\n  bottom: -.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  height: 0;\n  //-moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0; // 3\n  color: inherit; // 1\n  font: inherit; // 2\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n  overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\n//button::-moz-focus-inner,\r\n//input::-moz-focus-inner {\r\n//padding: 0;\r\n//border: 0;\r\n//}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0; // 2\n  box-sizing: border-box; // 1\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box; // 2\n//   -moz-box-sizing: content-box;\n          box-sizing: content-box;         \n  -webkit-appearance: textfield; // 1\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  padding: 0; // 2\n  border: 0; // 1\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
  },
  {
    "path": "sass/number.scss",
    "content": ".#{$namespace}numbox {\n\tborder: solid 1px #bbb;\n\toverflow: hidden ;\n\tdisplay: inline-block;\n\theight: 35px;\n\tborder-radius: 3px;\n\tbackground-color: #efeff4;\n\tvertical-align: top;\n\tposition: relative;\n\tpadding: 0px 40px 0px 40px;\n\twidth: 120px;\n\tvertical-align: middle;\n\n\t//基于.mui-btn扩展，故命名修改为mui-btn-numbox\n\t[class*=numbox-btn],[class*=btn-numbox] {\n\t\twidth: 40px;\n\t\theight: 100%;\n\t\tposition: absolute;\n\t\ttop: 0px;\n\t\tborder: none;\n\t\tborder-radius: 0px;\n\t\tfont-size: 18px;\n\t\tcolor: #555;\n\t\tline-height: 100%;\n\t\tfont-weight: normal;\n\t\toverflow: hidden;\n\t\tpadding: 0px;\n\t\tbackground-color: #f9f9f9;\n\n\t\t&:active{\n\t\t\tbackground-color: #ccc;\n\t\t}\n\t\t&[disabled]{\n\t\t\tcolor: #c0c0c0;\n\t\t}\n\t}\n\n\t.#{$namespace}numbox-btn-plus,.#{$namespace}btn-numbox-plus {\n\t\tright: 0px;\n\t\tborder-top-right-radius:3px;\n\t\tborder-bottom-right-radius:3px;\n\t}\n\t.#{$namespace}numbox-btn-minus,.#{$namespace}btn-numbox-minus {\n\t\tleft: 0px;\n\t\tborder-top-left-radius:3px;\n\t\tborder-bottom-left-radius:3px;\n\t}\n\n\t.#{$namespace}numbox-input,.#{$namespace}input-numbox {\n\t\twidth: 100% !important;\n\t\theight: 100%;\n\t\ttext-align: center;\n\t\tborder: none !important;\n\t\tborder-left: solid 1px #ccc !important;\n\t\tborder-right: solid 1px #ccc !important;\n\t\tmargin: 0px;\n\t\tpadding: 0px 3px !important;\n\t\tdisplay: inline-block;\n\t\tborder-radius: 0px !important;\n\t\ttext-overflow: ellipsis;\n\t\tword-break: normal;\n\t\toverflow: hidden;\n\t}\n\n}\n\n\n.#{$namespace}input-row .#{$namespace}numbox {\n\tmargin: 2px 8px;\n\tfloat: right;\n}"
  },
  {
    "path": "sass/off-canvas.scss",
    "content": "//.#{$namespace}android{\n.#{$namespace}off-canvas-wrap{\n    .#{$namespace}bar{//fix android\n       position: absolute!important;\n       @include transform(translate3d(0, 0, 0));//fix ios(offcanvas scalable的时候,bar会消失)\n       -webkit-box-shadow: none;\n       box-shadow: none;\n    }\n   } \n//}\n\n.#{$namespace}off-canvas-wrap{\n    position: relative;\n    width:100%;\n    height: 100%;\n    overflow: hidden;\n    z-index: z(\"default\");\n    .#{$namespace}inner-wrap{\n        position: relative;\n        width: 100%;\n        height:100%;\n        z-index: z(\"default\");\n        &.#{$namespace}transitioning{\n            -webkit-transition: -webkit-transform 350ms ;\n            transition: transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1);    \n        }\n        .#{$namespace}off-canvas-left {\n            @include transform(translate3d(-100%, 0, 0));\n        }\n        .#{$namespace}off-canvas-right{\n            @include transform(translate3d(100%, 0, 0));\n        }\n    }\n    &.#{$namespace}active{\n         overflow:hidden;\n         height:100%;\n         .#{$namespace}off-canvas-backdrop{\n//           -webkit-backface-visibility: hidden;\n            transition: background 350ms cubic-bezier(0.165, 0.84, 0.44, 1);\n            box-shadow: -4px 0 4px rgba(0, 0, 0, 0.5), 4px 0 4px rgba(0, 0, 0, 0.5);\n            display: block;\n            position: absolute;\n            background: rgba(0, 0, 0, 0.4);\n            top: 0;\n            bottom: 0;\n            left: 0;\n            right: 0;\n            z-index: z(\"backdrop\");\n            -webkit-tap-highlight-color: rgba(0, 0, 0, 0);   \n         } \n    }\n    &.#{$namespace}slide-in{\n        .#{$namespace}off-canvas-right {\n            -webkit-transform: translate3d(100%, 0px, 0px);\n            z-index: z(\"max\")!important;\n        }\n        .#{$namespace}off-canvas-left {\n            -webkit-transform: translate3d(-100%, 0px, 0px);\n            z-index: z(\"max\")!important;\n        }\n    }\n}\n\n\n.#{$namespace}off-canvas-left, .#{$namespace}off-canvas-right {\n//  -webkit-backface-visibility: hidden;\n    width: 70%;\n    min-height:100%;\n    top: 0;\n    bottom: 0;\n    position: absolute;\n    background: #333;\n    box-sizing: content-box;\n    -webkit-overflow-scrolling: touch;\n    z-index: -1;\n    visibility: hidden;\n    &.#{$namespace}transitioning{\n        -webkit-transition: -webkit-transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1);\n        transition: transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1);    \n    }\n}\n.#{$namespace}off-canvas-left {\n    left: 0;\n}\n.#{$namespace}off-canvas-right {\n    right: 0;\n}\n\n//scalable\n.#{$namespace}off-canvas-wrap:not(.#{$namespace}slide-in).#{$namespace}scalable {\n    background-color: #333;\n    >.#{$namespace}off-canvas-left,>.#{$namespace}off-canvas-right{\n        width: 80%;\n        @include transform(scale(0.8));\n        opacity: 0.1;\n        &.#{$namespace}transitioning{\n            -webkit-transition: -webkit-transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1), opacity 350ms cubic-bezier(0.165, 0.84, 0.44, 1);\n            transition: transform 350ms cubic-bezier(0.165, 0.84, 0.44, 1), opacity 350ms cubic-bezier(0.165, 0.84, 0.44, 1);\n        }\n    }\n    >.#{$namespace}off-canvas-left{\n        -webkit-transform-origin: -100%;\n        transform-origin: -100%;\n    }\n    >.#{$namespace}off-canvas-right{\n        -webkit-transform-origin: 200%;\n        transform-origin: 200%;\n    }\n    &.#{$namespace}active{\n         >.#{$namespace}inner-wrap{\n             @include transform(scale(0.8));\n         }\n         >.#{$namespace}off-canvas-left,>.#{$namespace}off-canvas-right{\n             @include transform(scale(1));\n             opacity: 1;\n         }\n    }\n    \n}"
  },
  {
    "path": "sass/os.scss",
    "content": ".#{$namespace}plus-visible,.#{$namespace}wechat-visible{\n    display: none!important;\n}\n.#{$namespace}plus-hidden,.#{$namespace}wechat-hidden{\n    display: block!important;\n}\n.#{$namespace}tab-item.#{$namespace}plus-hidden,.#{$namespace}tab-item.#{$namespace}wechat-hidden{\n    display: table-cell!important;\n}\n.#{$namespace}plus .#{$namespace}plus-visible,.#{$namespace}wechat .#{$namespace}wechat-visible{\n\tdisplay: block!important;\n}\n.#{$namespace}plus .#{$namespace}tab-item.#{$namespace}plus-visible,.#{$namespace}wechat .#{$namespace}tab-item.#{$namespace}wechat-visible{\n    display: table-cell!important;\n}\n.#{$namespace}plus .#{$namespace}plus-hidden,.#{$namespace}wechat .#{$namespace}wechat-hidden{\n    display: none!important;\n}\n\n\n//ios 状态栏\n.#{$namespace}plus.#{$namespace}statusbar.#{$namespace}statusbar-offset{\n    .#{$namespace}bar-nav {\n        padding-top: 20px;\n        height:64px;\n        &~.#{$namespace}content {\n            padding-top: 64px;\n            .#{$namespace}pull-top-pocket {\n                top: 64px;\n            }\n        }\n    }\n    .#{$namespace}bar-header-secondary {\n        top: 64px;\n        &~.#{$namespace}content {\n            padding-top: 94px;\n        }\n    }\n}\n"
  },
  {
    "path": "sass/pagination.scss",
    "content": "//\n// Pagination (multiple pages)\n// --------------------------------------------------\n\n.#{$namespace}pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 0 auto;\n  border-radius: $border-radius;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: 6px 12px;\n      line-height: 1.428571429;\n      text-decoration: none;\n      color: $primary-color;\n      background-color: #fff;\n      border: $border-default;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        border-top-left-radius: $border-radius;\n        border-bottom-left-radius: $border-radius;\n        background-clip: padding-box;\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        border-top-right-radius: $border-radius;\n        border-bottom-right-radius: $border-radius;\n        background-clip: padding-box;\n      }\n    }\n  }\n\n  > li:active > a,\n  > li:active > span,\n  > li.#{$namespace}active > a,\n  > li.#{$namespace}active > span {\n    &,\n    &:active {\n      z-index: z(\"default\")+1;\n      color: #fff;\n      background-color: $primary-color;\n      border-color: $primary-color;\n      cursor: default;\n    }\n  }\n\n  > li.#{$namespace}disabled {\n    > span,\n    > span:active,\n    > a,\n    > a:active {\n      color:#777;\n      opacity: .6;\n      background-color:#fff;\n      border: $border-default;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.#{$namespace}pagination-lg>li {\n    > a,\n    > span {\n      padding: 10px 16px;\n      font-size: 18px;\n    }\n}\n\n// Small\n.#{$namespace}pagination-sm >li{\n    > a,\n    > span {\n      padding: 5px 10px;\n      font-size: 12px;\n    }\n}\n\n\n\n.#{$namespace}pager {\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n  &:before,\n  &:after {\n    content: \" \"; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: #fff;\n      background-clip: padding-box;\n      border: $border-default;\n      border-radius: $border-radius;\n    }\n    &:active>a,\n    &:active>span,\n    &.#{$namespace}active > a ,\n    &.#{$namespace}active > span {\n      text-decoration: none;\n      color: #fff;\n      background-color: $primary-color;\n      border-color: $primary-color;\n      cursor: default;\n    }\n  }\n\n  .#{$namespace}next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .#{$namespace}previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .#{$namespace}disabled {\n    > a,\n    > a:active,\n    > span,\n    > span:active{\n        color:#777;\n        opacity: .6;\n        background-color:#fff;\n        border: $border-default;\n    }\n  }\n\n}"
  },
  {
    "path": "sass/popovers.scss",
    "content": "//\n// Popovers (to be used with popovers.js)\n// --------------------------------------------------\n\n.#{$namespace}popover {\n    position: absolute;\n    z-index: z(\"popover\",\"popover\");\n    display: none;\n    width: 280px;\n    background-color: $chrome-color;\n    border-radius: 7px;\n    opacity: 0;\n    @include box-shadow(0 0 15px rgba(0, 0, 0, .1));\n    -webkit-transition: opacity .3s;\n    transition: opacity .3s;\n    -webkit-transform: none;\n    transform: none;\n    -webkit-transition-property: opacity;\n    transition-property: opacity;\n   .#{$namespace}popover-arrow{\n        width: 26px;\n        height: 26px;\n        position: absolute;\n        left: 0px;\n        top: -25px;\n        z-index: z(\"popover\",\"arrow\");\n        overflow: hidden;\n        &:after {\n            content: ' ';\n            background: $chrome-color;\n            width: 26px;\n            height: 26px;\n            position: absolute;\n            left: 0;\n            top: 19px;\n            border-radius: 3px;\n            -webkit-transform: rotate(45deg);\n            transform: rotate(45deg);\n        }\n        &.#{$namespace}bottom{\n            left:-26px;\n            top: 100%;\n            margin-top: -1px;\n            &:after {\n                left: 0;\n                top: -19px;\n            }\n        }\n   }\n   \n   &.#{$namespace}popover-action{\n        //display: block;//加上后可实现从底部出来动画效果，但会导致html页面高度增加\n        bottom:0;\n        width: 100%;\n        border-radius:0;\n        @include transform(translate3d(0, 100%, 0));\n        -webkit-transition: -webkit-transform .3s, opacity .3s;\n        transition: transform .3s, opacity .3s;\n        background: none;\n        @include box-shadow(none);\n        .#{$namespace}popover-arrow{\n            display: none;\n        }\n\n        &.#{$namespace}popover-bottom{\n            position: fixed;\n        }\n\n        // Active modal\n        &.#{$namespace}active {\n            @include transform(translate3d(0, 0, 0));\n        }\n        .#{$namespace}table-view {\n            margin: 8px;\n            border-radius:4px;\n            text-align: center;\n            color: $primary-color;\n            .#{$namespace}table-view-cell {\n                @include hairline(single, #c8c7cc, 0); // Single grey border with 15px offset.\n            }\n            small{\n                line-height: 1.3;\n                font-weight: 400;\n                display: block;\n            }\n        }\n\n    }\n\n    // Popover transition\n    // --------------------------------------------------\n\n    &.#{$namespace}active {\n        display: block;\n        opacity: 1;\n    }\n\n    // Give correct spacing to the content if there is a bar inside the popover.\n    .#{$namespace}bar ~ .#{$namespace}table-view {\n        padding-top: $bar-base-height;\n    }\n}\n\n// Backdrop (used as invisible touch escape)\n// --------------------------------------------------\n\n.#{$namespace}backdrop {\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: z(\"backdrop\");\n    background-color: rgba(0,0,0,.3);\n}\n\n.#{$namespace}bar-backdrop.#{$namespace}backdrop{\n    bottom: 50px;\n    background:none;\n}\n.#{$namespace}backdrop-action.#{$namespace}backdrop{\n   // bottom:50px;\n    background-color: rgba(0,0,0,.3);\n}\n.#{$namespace}bar-backdrop.#{$namespace}backdrop,.#{$namespace}backdrop-action.#{$namespace}backdrop{\n    opacity:0;\n    &.#{$namespace}active {\n        opacity: 1;\n        @include transition(all 0.4s ease);\n    }\n}\n// Block level buttons in popovers\n// --------------------------------------------------\n\n.#{$namespace}popover .#{$namespace}btn-block {\n    margin-bottom: 5px;\n\n    // Remove extra margin on bottom of last button\n    &:last-child {\n        margin-bottom: 0;\n    }\n}\n\n\n// Popovers with nav bars\n// --------------------------------------------------\n.#{$namespace}popover .#{$namespace}bar {\n    @include box-shadow(none);\n}\n.#{$namespace}popover .#{$namespace}bar-nav {\n    border-bottom: 1px solid rgba(0,0,0,.15);\n    border-top-left-radius: 12px;\n    border-top-right-radius: 12px;\n    @include box-shadow(none);\n}\n\n// scroll in popovers\n.#{$namespace}popover .#{$namespace}scroll-wrapper{\n    background-clip: padding-box;\n    border-radius: 7px;\n    margin: 7px 0;// border radius not work(fixed android)\n}\n// Table views in popovers\n// --------------------------------------------------\n.#{$namespace}popover .#{$namespace}scroll .#{$namespace}table-view{\n    max-height: none;\n}\n.#{$namespace}popover .#{$namespace}table-view {\n    max-height: 300px;\n    margin-bottom: 0;\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    background-color: $chrome-color;\n    background-image: none;\n    border-radius: 7px;\n    &:before,&:after{\n        height: 0;\n    }\n    .#{$namespace}table-view-cell:first-child{\n        &,\n        > a:not(.mui-btn){\n            border-top-right-radius: 12px;\n            border-top-left-radius: 12px;     \n        }\n    }\n    .#{$namespace}table-view-cell:last-child{\n        &,\n        > a:not(.mui-btn){\n            border-bottom-right-radius: 12px;\n            border-bottom-left-radius: 12px;\n        }\n    }\n}\n.#{$namespace}popover.#{$namespace}bar-popover .#{$namespace}table-view{\n    width:106px;\n    .#{$namespace}table-view-cell{\n        padding:11px 15px 11px 15px;\n        background-position:0px 100%;\n    }\n    .#{$namespace}table-view-cell > a:not(.#{$namespace}btn){\n        margin:-11px -15px -11px -15px;\n    }\n}\n"
  },
  {
    "path": "sass/popup.scss",
    "content": ".#{$namespace}popup-backdrop {\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: z(\"backdrop\");\n    background: rgba(0,0,0,.4);\n    opacity: 0;\n    @include transition-duration(400ms);\n    &.#{$namespace}active {\n        opacity: 1;\n    }\n}\n.#{$namespace}popup {\n    width: 270px;\n    position: fixed;\n    z-index: z(\"max\");\n    left: 50%;\n    top: 50%;\n    text-align: center;\n    border-radius: 13px;\n    overflow: hidden;\n    opacity: 0;\n    @include transform(translate3d(-50%,-50%,0) scale(1.185));\n    -webkit-transition-property: -webkit-transform,opacity;\n    transition-property: transform,opacity;\n    color: #000;\n    display: none;\n    &.#{$namespace}popup-in {\n        opacity: 1;\n        @include transition-duration(400ms);\n        @include transform(translate3d(-50%,-50%,0) scale(1));\n        display: block;\n    }\n    &.#{$namespace}popup-out {\n        opacity: 0;\n        //z-index:max-1\n        @include transition-duration(400ms);\n        @include transform(translate3d(-50%,-50%,0) scale(1));\n    }\n}\n.#{$namespace}popup-inner {\n    padding: 15px;\n    border-radius: 13px 13px 0 0;\n    position: relative;\n    background: rgba(255,255,255,.95);\n    &:after {\n        content: '';\n        position: absolute;\n        left: 0;\n        bottom: 0;\n        right: auto;\n        top: auto;\n        height: 1px;\n        width: 100%;\n        background-color: rgba(0,0,0,.2);\n        display: block;\n        z-index: 15;\n        -webkit-transform-origin: 50% 100%;\n        transform-origin: 50% 100%;\n        -webkit-transform: scaleY(.5);\n        transform: scaleY(.5);\n    }\n}\n.#{$namespace}popup-title {\n    font-weight: 500;\n    font-size: 18px;\n    text-align: center;\n}\n.#{$namespace}popup-title+.#{$namespace}popup-text {\n    margin: 5px 0 0;\n    font-family: inherit;\n    font-size: 14px;\n}\n.#{$namespace}popup-buttons {\n    height: 44px;\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: flex;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    justify-content: center;\n}\n.#{$namespace}popup-button {\n    width: 100%;\n    padding: 0 5px;\n    height: 44px;\n    font-size: 17px;\n    line-height: 44px;\n    text-align: center;\n    color: #007aff;\n    display: block;\n    position: relative;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    cursor: pointer;\n    box-sizing: border-box;\n    -webkit-box-flex: 1;\n    background: rgba(255,255,255,.95);\n    &:after {\n        content: '';\n        position: absolute;\n        right: 0;\n        top: 0;\n        left: auto;\n        bottom: auto;\n        width: 1px;\n        height: 100%;\n        background-color: rgba(0,0,0,.2);\n        display: block;\n        z-index: 15;\n        -webkit-transform-origin: 100% 50%;\n        transform-origin: 100% 50%;\n        -webkit-transform: scaleX(.5);\n        transform: scaleX(.5);\n    }\n    &:first-child {\n        border-radius: 0 0 0 13px;\n        &:last-child {\n            border-radius: 0 0 13px 13px;\n        }\n    }\n    &:last-child {\n        border-radius: 0 0 13px 0;\n        &:after {\n            display: none;\n        }\n    }\n    &.#{$namespace}popup-button-bold {\n        font-weight: 600;\n    }\n}\n.#{$namespace}popup-input input {\n    height: 26px;\n    background: #fff;\n    margin: 15px 0 0;\n    padding: 0 5px;\n    border: 1px solid rgba(0,0,0,.3);\n    border-radius: 0;\n    width: 100%;\n    font-size: 14px;\n}\n.#{$namespace}plus.#{$namespace}android .#{$namespace}popup-backdrop {\n    @include transition-duration(1ms);\n}\n.#{$namespace}plus.#{$namespace}android .#{$namespace}popup {\n    @include transition-duration(1ms);\n    @include transform(translate3d(-50%,-50%,0) scale(1));\n}"
  },
  {
    "path": "sass/progressbar.scss",
    "content": "/* === Progress Bar === */\n.#{$namespace}progressbar {\n    height: 2px;\n    width: 100%;\n    overflow: hidden;\n    position: relative;\n    display: block;\n    background: #b6b6b6;\n    border-radius: 2px;\n    -webkit-transform-origin: center top;\n    transform-origin: center top;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    vertical-align: middle;\n    span {\n        width: 100%;\n        background: $primary-color;\n        height: 100%;\n        position: absolute;\n        left: 0;\n        top: 0;\n         @include transform(translate3d(-100%,0,0));\n         @include transition(150ms);\n    }\n    // Infinite\n    &.#{$namespace}progressbar-infinite {\n        &:before {\n            content: '';\n            position: absolute;\n            left: 0;\n            top: 0;\n            width: 100%;\n            height: 100%;\n            background: $primary-color;\n            @include transform(translate3d(0,0,0));\n            -webkit-transform-origin: left center;\n            transform-origin: left center;\n            -webkit-animation: #{$namespace}progressbar-infinite 1s linear infinite;\n            animation: #{$namespace}progressbar-infinite 1s linear infinite;\n        }\n    }\n}\nbody>.#{$namespace}progressbar{\n    position: absolute;\n    left: 0;\n    // top: 0;\n    top: $bar-base-height;//默认应该在title bar下方显示\n    z-index: z(\"max\");\n    border-radius: 0;\n}\n// Animations\n.#{$namespace}progressbar-in {\n     -webkit-animation: #{$namespace}progressbar-in 300ms forwards;\n            animation: #{$namespace}progressbar-in 300ms forwards;\n}\n.#{$namespace}progressbar-out {\n     -webkit-animation: #{$namespace}progressbar-out 300ms forwards;\n            animation: #{$namespace}progressbar-out 300ms forwards;\n}\n\n@-webkit-keyframes #{$namespace}progressbar-in {\n    from {\n        opacity: 0;\n        -webkit-transform: scaleY(0);\n    }\n    to {\n        opacity: 1;\n        -webkit-transform: scaleY(1);\n    }\n}\n@keyframes #{$namespace}progressbar-in {\n    from {\n        opacity: 0;\n        transform: scaleY(0);\n    }\n    to {\n        opacity: 1;\n        transform: scaleY(1);\n    }\n}\n@-webkit-keyframes #{$namespace}progressbar-out {\n    from {\n        opacity: 1;\n        -webkit-transform: scaleY(1);\n    }\n    to {\n        opacity: 0;\n        -webkit-transform: scaleY(0);\n    }\n}\n@keyframes #{$namespace}progressbar-out {\n    from {\n        opacity: 1;\n        transform: scaleY(1);\n    }\n    to {\n        opacity: 0;\n        transform: scaleY(0);\n    }\n}\n@-webkit-keyframes #{$namespace}progressbar-infinite {\n    0% {\n        -webkit-transform: translate3d(-50%, 0, 0) scaleX(0.5);\n    }\n    100% {\n        -webkit-transform: translate3d(100%, 0, 0) scaleX(0.5);\n    }\n}\n@keyframes #{$namespace}progressbar-infinite {\n    0% {\n        transform: translate3d(-50%, 0, 0) scaleX(0.5);\n    }\n    100% {\n        transform: translate3d(100%, 0, 0) scaleX(0.5);\n    }\n}"
  },
  {
    "path": "sass/pullrefreshs.scss",
    "content": ".#{$namespace}pull-top-pocket,.#{$namespace}pull-bottom-pocket{\n    display: block;\n    overflow: hidden;\n    position: absolute;\n    left: 0;\n    width: 100%;\n    height: 50px;\n    visibility:hidden;\n}\n//android 5+\n.#{$namespace}plus-pullrefresh{\r\n    .#{$namespace}pull-top-pocket,.#{$namespace}pull-bottom-pocket{\r\n        display: none;\n        visibility:visible;\r\n    }\r\n}\n.#{$namespace}pull-top-pocket{\n    top:0px;\n}\n.#{$namespace}bar-nav~.#{$namespace}content .#{$namespace}pull-top-pocket{\n    top: 44px;\n}\n.#{$namespace}bar-nav~.#{$namespace}bar-header-secondary~.#{$namespace}content .#{$namespace}pull-top-pocket{\n    top: 88px;\n}\n.#{$namespace}pull-bottom-pocket{\n    bottom:0;\n    height: 40px;\n    position:relative;\n    .#{$namespace}pull-loading{\r\n        visibility:hidden;\r\n        &.#{$namespace}in{\r\n            display: inline-block;\r\n        }\r\n    }   \n}\n//android 5+\n//.#{$namespace}plus-pullrefresh{\r\n//  .#{$namespace}pull-bottom-pocket{\r\n//      position: relative;\r\n//      left: auto;\r\n//      bottom: auto;\r\n//  }\r\n//}\n//.#{$namespace}bar-nav ~ .#{$namespace}content{\n//  .#{$namespace}pull-top-pocket{\n//      top:-445px;\n//  }\n//}\n.#{$namespace}pull{\n    position: absolute;\n    left: 0;\n    bottom: 10px;\n    right: 0;\n    color: #777;\n    text-align: center;\n    //text-shadow: 1px 1px 0 #dfdfdf;\n    font-weight: bold;\n}\n\n//.#{$namespace}pull-loading{\r\n//  \r\n//display: inline-block;\r\n//width: 20px;\r\n//height: 20px;\r\n//background-image: url(\"data:image/GIF;base64,R0lGODlhMAAwAKUAAAQCBISChMTCxERCRKSipOTi5GRiZCQiJJSSlNTS1LSytPTy9HRydDQyNFxaXIyKjMzKzExKTKyqrOzq7GxqbCwqLJyanNza3Ly6vPz6/Hx6fDw6PBwaHISGhMTGxERGRKSmpOTm5GRmZCQmJJSWlNTW1LS2tPT29HR2dDQ2NFxeXIyOjMzOzExOTKyurOzu7GxubCwuLJyenNze3Ly+vPz+/Hx+fDw+PBweHP///wAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCQA5ACwAAAAAMAAwAAAG/sCccEgsGnMsCixxbDqfzoyoFYFloNisceGIRFQnrXiYQKGYxZcq0gIbMZEPZFw82UQixqLIpbqJEzcNDSpXdEIZAQYiBhI1RC9dbWFDNR2DMYWHQwKMIhQzRAtrX5RCCRsxKQ0mm5UBeAYIj0J9pUNSmAaGrjklFIsiLEO2fzkmgw0pw71CNRYGixqGkWx/JxGYAXQZvEQhMHgiGLUOfmHPDaoDBUcnpkQXJCQJ3jk1CosGDC85dgE2AlwpIGiQDCMZQAz4IMDIAxsQLYQikgEFIw1o3mSL0cJbDRofOIhM4TAgxAAu+nGCoWCPkxcIbtAgMoMCDpEjjSTooCFg/s8HNAxlCKHlgqETD0bgFDmC3BYFAHtCRJCA1piEKZZywIFC5ZEaBWQADNCzw4RDLJQudcDCapQEDyE6pVPDBs4ULtxiyUDjwQN4YyZUGLECsJYaLy40M0G0mePD3SJLtrdpgeXLmB8VkCADhAwCnT8TmNurhdalMWiAsGCBBOvWsGc6bgGgtu3bMVa7nvfatexmEW4LBxBjMwEQx0GDQE7alenTIivMrJHhBHXr1bs9XvCiu3fveh+LN3KisasQhrVkuGACA2UtJzBguBD+SY0QGBQocKF4U4L9CtAQQn1FIOaBfi6YoIAJLo3xgoIAKuDBAgT6859+GGIw4CEZ9BSAQYIYKpBAevi5gKAJJpRASw0NQkEhIiUoaGKCJpxVRH4YmsACPAWk+N4QJ8RoXg4LsLBghkbIGKBXiOCoYRP46UeDWzVMQMOMvw0RggAC6lVDCQCaEEYGEEDgAQSPLAAhf0aARYMANhaRQX1qYjhRBhCaQMsFJi6Y3pxj1GDkflMiIqN7TQLIjGMThGkenvrpOUSPGMbpykcYemAVpO3xUoMHCbqgaTMFnMhkBh8u6NYLIbbjCl99qkgRhIhWksCMAlQIBV8muIABYJD6as8JEBZ6nnxDGqqgpEXgh4Gl4xmqX63RZoGpC8ZWm4WVAjB5SBAAIfkECQkAPQAsAAAAADAAMACFBAIEhIKExMLEREJEpKKk5OLkZGJkJCIkFBIUlJKU1NLUVFJUtLK09PL0dHJ0NDI0DAoMjIqMzMrMTEpMrKqs7OrsHBocnJqc3NrcXFpcvLq8/Pr8fHp8PDo8bG5sBAYEhIaExMbEREZEpKak5ObkZGZkLC4sFBYUlJaU1NbUVFZUtLa09Pb0dHZ0NDY0DA4MjI6MzM7MTE5MrK6s7O7sHB4cnJ6c3N7cXF5cvL68/P78fH58PD48////AAAAAAAABv7AnnBILBp7qcDudmw6n84Np1QK6KDYrLHhoDo22vAQE4GljCyHofQ1CnCGmLi4Sex2kUaR5fGCiTQqMhMOLHNDLCh3OytXiGpsf0I6CYMyHpKHMTsBHAEkRFxrbUMpMpY5h0Q6ipwEjj0NfZGIHJYtmaoYnXdnQml+QzmnEwsKqkU6FIsJf6K0PSwGE4MJcxu5QhUgvCFCssE6BJYZoEYbhkYFMxQYsJMai3nRCSj1YCSC1BTnMyoZEowQQHEBxQxzQzZE6AQDQxMB02QYyKQjRIYHGGUILHihYw49Q2KAyJGuSQMbKgQQucHBxQMTLzUWuWGjI8ELNmL82VBBy/6NP4kGYBw6IBUaATY7Xhhx452WDQxkvHzpwgUMGk50kFjBkaANrHMU8BhqwoWHFE6P6MAwgmPAQzoiwHwgI0e2JxtiEBhRcg4NEQNs3M1CowAyITkQHl6sRQe2x5DTHmLRoLJly1cq5NCwQgNnz53lMDZgorRp0wNC5GDAmsGMFa5hi16Mw4Lt27hFaIj9uvUMBrMP1z5xwgJx48ZFaP78ecXmt7Rhln6J2psOx9g3ONbOONrlBpQpS+5OnggLxXN0zDCsagOGzoOxkLCAIEJfLFp3u3aoygGA/wfMEN8QOtAQAmu9rQCSGDG88N+DE8QwXjQKtNaaBiRM6AQLBPfU8OB/HzjQkxEkaPBbbCugNcmCUDTgTAsOfngCA0box9oKMfRVQIoDspDCCgitpcKHABxgBGy/5QBWQvph2ESJrOXwjg4rPPBgDSQKkJhTOqTgGgMrGLKBBBKEIMEVDcC2HxoXlKbBEdxtoSYDTPSwgZqNCIHBiWEeAZ4YOsSAoJRC3OmaBjvt9ltwh1XwJZAJ4QnLjq2NeJgOq7EWAiyGwkdgCK/NsOliBSC4wpJ2mgjmOzRYyF57OZyoYqSsIbqKAr/NIICGeOWwwgwa3GcosLmwoCahyJToJB0rwJZnEcpaWh6tDNg6bWOrzYDstVloJgCqhwQBACH5BAkJADsALAAAAAAwADAAhQQCBISChMTCxERCRKSipOTi5GRiZCQiJJSSlNTS1LSytPTy9HRydFRSVBQSFDQyNIyKjMzKzKyqrOzq7GxqbJyanNza3Ly6vPz6/Hx6fFxaXAwODExOTCwuLBwaHDw6PAQGBISGhMTGxERGRKSmpOTm5GRmZCQmJJSWlNTW1LS2tPT29HR2dFRWVDQ2NIyOjMzOzKyurOzu7GxubJyenNze3Ly+vPz+/Hx+fFxeXBweHP///wAAAAAAAAAAAAAAAAb+wJ1wSCwadzUEqnBsOp9ODAKHQ92g2KxxBaFCMNrwsEAg1baQDO5rhLFYKXERQ6pUaKsi1wsmyhgGJiF9cjs3Eih2IldDewFsQzcEJpQBhIUpFSgoNBNEXBkZkEIWlIERhUQ3MXYVKow7C11rhCsvlCajqTsFmnZnQnu0QxGmFBa7qhebFSSMsmqQKywmgQRyN5dDMgS+CcEhfIYKlBQMnlvaQhM2AgWwQjcRiXd5KyQSZWATM9UGCkZuXKAw41sRFQoUxBCAbgidRCSYHHETKMOlGzBmcNhowMgFhQgVwMgzxAKNkU8WxGCAagyEjTA7FikRMkZCFRb63GgI5V3+MAItYI7goEHEkRUJaiK04VMOBhsGYG5sUGGBkxsyRNRUoMKqHAsNhHLIkBPLjQIfY6iIU+hGBQ5DDURQ9+RGigsq6GaRoUGDBL1YVpRItiMCT8KIoWTDwLgxY3i7VkieTPkKO7wXMGOGkZjBiM+gQWuIYCNhQrUgRXZ+wLq1aw1pVaA+rRrxDNe4O2i4rCJzbxU2LrQk7Dl06BaobmRbjmEx5FQrFkSfLn3B88TY9QxOpmJ7IQwWegOGMqFDBxQktdwo8VEhslQ4PMj/kNds1tMIuxaCccKDA/keaADDdcEkYJppF5RA4BMYSPCAfP95cAAOMhzBnk0grcXIDV70YQFDHyuE0B+AHnRwgUcHqoDSGGuNNwELDpAQSQ0m6OCffx8YgZBNNlRIBAbtJdhEDB4AAMAB6RliwwgAumBECQLYoGARdinEVR4YRBCBCBFcYYEDRgIQwBYkDDCCDUc0d8QCISkADAYhvWIIDmE6AIweSZoFw2k2MAKnQhf0sYAOYeaA3QRWdudQnLCQECYIaBJ2Q2kJLbIoV4E2MkCYH4yHRQH4+SgEkDbJOYQIIIQp4y5PYZgCPH8qkKlDJoT5QJ5hPCXbBXn+GcOsQ5SwgZG3JsOekHOokN9zEniggwrZGRErsNGaVVoMfVYbBjsCiJpKEAAh+QQJCQA4ACwAAAAAMAAwAIUEAgSEgoTEwsREQkTk4uSkoqRkZmQkJiSUkpTU0tT08vRUVlS0srR0dnQ0NjQUFhSMiozMysxMSkzs6uxsbmwsLiycmpzc2tz8+vy8urysqqxcXlx8fnw8PjwcHhyEhoTExsRERkTk5uRsamwsKiyUlpTU1tT09vRcWly0trR8enw8OjwcGhyMjozMzsxMTkzs7ux0cnQ0MjScnpzc3tz8/vy8vrysrqz///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAG/kCccEgsGnEEjUZ0bDqfToymZNHUoNis8VSgFjDa8FCUyTCLmJml9DUmWhCaGG1jMFJgInfd1n84HBZ5czg1dXYJV0NcXoOFDIAcJY5zBDcMNykwRGl8jjQBHAEqCYRENQJ2DCCKOJ0WfYUzkRatpjgiKZkMZziMMzOtCaKicrdDNS6YDDaKGF2weSctHCocDHM1lEIKKarGjBbBhTahHBCbRhjbOBM2AgS2hRfLKSeuKRn5YDAQ1hwC1AkQZcKIN0wCJqDJYMeGwiNvREFwVCNBAAMYVRhhuIuBi3tDaKQwwW6IggwfSg2ZYAGjS41Fctm5dOdCnhoKtIhwdoOC/kuMMVQWOZHg4C4b8QhhANHgp4ERGnI2qQEDhNE7UsXQ8PkTgU0sNQhwHGmqhoaXEUpONaFPLRQYMWIwcPvkRC9TCR4e2xtG27q/f+WZOkG4sOEr7vSVyafYBV8cATZInjx5RIJDM73tcsw3gITPoD+/kEBhbMdlnPcGGP2CNWvSiRnnS2EjQ4THkSlvQCHZciFtwDH4FUyosAIMx5MTf8xcz11CNp6HwXBh360JIQYUAKmlBpmZF261kEH+hQ26hapmxkrIRAcZFcg7oGBiua8EqlSZsR+FgQT45MmwQgvpxJQBTZmMpAhOWpAkxAkldOBAfOQNYMNG+aXwEREE7YzkFgwBHICNEGE1sEJ88b1g0DI2FCgEBgwxYEYTKcjAAgsrcFcICCjA54CKMQkQnTw1mFDPPQpI0NoL9xBwAAsPsNCCETXcsAAKIBwh3BHdfCPEBA8AAAALOdUAAZQskGAMGjqCpQwmzQgBQ5gAPACSAg6gSQFzE9TTC5hikjnEDR5E6UGWexmiCitDzCmmnUNgsMCND7yA3hMEZOaio2NmhUMEhd54wzEY2EBTfUQAWqeONTSAZgiXammDLhm0yamgqT7JAqzHkDFjEZxCWgQDFTgQUHNFqIorsllgcICYFcTKLA4pVFDBhccEAQAh+QQJCQA9ACwAAAAAMAAwAIUEAgSEgoTEwsREQkSkoqTk4uRkYmQkIiSUkpTU0tRUUlS0srT08vQUEhR0dnQ0MjSMiozMysxMSkysqqzs6uxsamycmpzc2txcWly8urz8+vwcGhw8OjwMCgwsLix8fnwEBgSEhoTExsRERkSkpqTk5uRkZmQkJiSUlpTU1tRUVlS0trT09vQUFhR8enw0NjSMjozMzsxMTkysrqzs7uxsbmycnpzc3txcXly8vrz8/vwcHhw8Pjz///8AAAAAAAAG/sCecEgsGnuUXI52bDqfTl1uscjpoNisUbOiZjTa8LCUyZS2mdlidS1eSISCuKiZrsFEVnr1LbJsFhYzeHM9UlQLCW1CXAszfUM6AigWKIOFQwVqMytMQ41riz0lgJQXmJECiCKLGnuQhguVFguimCUrnAtnjF2hQxezFryoQjoxjlVtoJAaJJQWOXM6hEQMvgs3vY6QEdA2DEca1UNJAgW2OhfJKyw9GiIxIhFXNASzMUbHKCjaRb4zBFCgk4FKjoFHbjyzQEKUOhQfAnyAYaSgrgUx3A25sSIFOT8RbPgTQmGCxA8RKRbBRUXNmgt4dITLQmNZjhAoA7j4ACHF/hEWCQB2yYGukIYYECLujLhi5hEdNEQAXOM0TIkQOiMGiGPraQGLHTHpWIFyoiIxOlJkWPFRCwMIEAS0zcKCGKYUVYvpzUJtnF+/XY2yYKFhcGHCV5KsLcNncb69CBxInjw5QAo7LbvoeqwXgQkDoEODNhEA7MVknIshMGCitevPpBU35rMiR4YIe3ugoMzbsiFqwDX0DTzHMAMGGo4nn5u7+ZC6ekUgNHqBD3MoNHBguBRGB5mWpzBZkCBDgglWWKCKyEy10A0V5MnLCHCBeA+giBCZse+kjgEJAAKoAAp5CUGGS5x0tEwCWsAkBAsEqFDehBjgVkRBiKyQERE2/TTwgSdNMAADDxlEUgAEE5JngBGaVQGiEAxsAAAAO6zQRAYSePCADNUcUwOAMqy4kgA5lJCOCzMC0IIcDOBggJPuFMDDCw88YAMaFdSQ2ieBpdBAkiEIQYMHG2zggTs6WPCAjgPIYQRhaGGQ5AkaMeBBC2ZqxIIEaz4QQHMZJAnADEOMuUELD2jUwwpUPvDClkZ5kOQIixia5ycmVOmBAddhYUOSIKRGwZ2XDpFAox6UiAoLks5Ygyh2HvpAVTqEUOULGCg6h50zNjAdSaSeWQQFPOiIg65zLNDCDoQWYSiiBeI4goXOEWGpsNVqoQEHeA7QabZE5DDAAALoFQQAIfkECQkAPgAsAAAAADAAMACFBAIEhIKEREJExMLEZGJk5OLkJCIkpKKkVFJU1NLUdHJ09PL0NDI0tLK0FBIUlJKUTEpMzMrMbGps7OrsLCosrKqsXFpc3NrcfHp8/Pr8PDo8vLq8HBocnJqcDAoMjIqMBAYEhIaEREZExMbEZGZk5ObkJCYkpKakVFZU1NbUdHZ09Pb0NDY0tLa0FBYUlJaUTE5MzM7MbG5s7O7sLC4srK6sXF5c3N7cfH58/P78PD48vL68HB4cnJ6c////AAAABv5An3BILBp9k91udmw6n87crtHY5aDYrDHTom4y2vCwtNmUtptao3UtkjcTcTEzXYOJq3TrW1x1q21yPlJUDQmBPlwNNXxDOQlUNSN3gj4FajUtTEOKa4gzi10FlY4DhSOBGXqNgyOFA4iVJS2ZDWdCnWxDBZEtcaSOMYuAuH+NqrUxcjmURAt/DTfFi40pfy0rRxnNQ0kDBbE5F8PYiSMxIxFXfpEXRjkpFTWjRX81A7+cG1Q7+UUF+2pYIZLjUocXHU4YCfgnRrYhN1qk4NYnhRkiMzZ0OLhRoRt7VFpcuJNjgZYZbTJE6MHx4AFpRlYksNdlBzhB4g5sRPiix/6Ih0dyzBgBsoVJOSVYItzoK1ZQgKFSVMoxguOJG06fwNvQgqKWFQcOxPCaZcUtUjeOAlsbhtm2t2+zysmwgq7duiuuJOFaZg9fZWxPfBhMmPCLAnV6hWoAeO0JHJAjS37BsFYkxmx9HJDMOcCDvX73tNixIUJmwYULP5CWg5nrDG7lirlLO2/m21pvNFgbY5OgBQEc8PAtZ4YCBV1nnzAAoDkOUhVIECCBIYZsRyNENN/uQKqcAhJIiJ++WnYJCR62N+dxguyTFSNUTJdOQkIFtUQqOFAPwAGOOyu4k8UNd2RQgwLTJahAY0O4oB4INggoxAkUfECcEQv0gMIAjviU0EF482FghIPNsbBDHwy4wAELGzQxgg0wQEBCM48EQJ+IRTRAAw0HcJNDCBxw4AINZyxwnAwKgFGCBRDEWMEWA+AQgHd9AEXEBRSoyMELQswgAgMMiJBNDgfECIMFZxGxjRg5kCDkig8tIAANYT60AgEQ5PnAbQPwICQPLXb5ZZ1DDGAmAgmwlYEAWtpAiZwM0CAmJxiYqYJ7WZwQpAsGMCgnDSxAYGUKZkJwIikr6PAmDp8MOqkjLzQJgQyYvscoBxRcCKmkVvqwAApN0grMBmC2YISXYL5KxAA2EMAgbkJ8Sii0WmQAAwsMoHAdtUWMgIIFpgETBAAh+QQJCQA3ACwAAAAAMAAwAIUEAgSEgoTEwsREQkTk4uRkZmSkoqQkIiTU0tRUUlT08vQ0MjR0dnS0srSUlpSMiozMysxMSkzs6uxsbmwsKizc2txcWlz8+vw8Ojy8urwcGhysqqx8fnyEhoTExsRERkTk5uRsamwkJiTU1tRUVlT09vQ0NjR8eny0trScmpyMjozMzsxMTkzs7ux0cnQsLizc3txcXlz8/vw8Pjy8vrwcHhysrqz///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG/sCbcEgsGm8SGq11bDqfThmt0aDJoNis8YKiZi7a8BCUyYC2GVsDdS2SMxJx8TJdg4mlNOpbLHWrbXI3UlQNCIE3XA02fEMyCFQ2HneCNwRqNihMQ4priC2LXQSVjgKFHoEXeo2DHoUCiJUgKJkNZ0KdbEMEkShxpI4ri4C4f42qtStyMpRECn8NMMWLjSN/KCVHF7FCSQIEsTIVw9iJHiseEFd+kRVGMgQ0Ar9EfzbzcxlUNPRFBPo2rBCRkSQSDSMA/6zINgQGihHNjJQYYcaZsEINMhiZFYkKigp3ZCjQ0qLNBWuF1KC41QeBvS40wAmCp68XCgQRB7bwYG/N/kg5LV428FASC81QIyo9KkQDBLcnMiiiyKnFDwoYVLOUYFlJAkNgYMNcUEC2bNmvwC6oXcv2SgYKGuLKlUsi7A0UBvLq1bsBxAEAgAMLrhs2g4PDiBGnsCFCsGMAhMFmSEG5MmUHKTaggDt3bmRgePfutXHmQovTqFGjJaW2hAzXsGU8tUvbEQEUYEf8FFRCBQUTmwQpePBAQNYmFxoskPuAFAoO0FWMmD1wBYnOItzJAdEBegAOAQw4dSKBwYHOL2wcd3JhhYoTHOCDL2ekgQjsKhhekJZFZqIMD8QHHQcPJFXEC51NwJ8QNgzgwG5HKGDDBBA4IsEG3wUAnwpG7yAY1wcH4RHBAi+wIEATKzBQQAEnNCOOA95xWEQGM8ywQTgOvGDCAh/EoUAAHQQQQDYSTLBiAQ28A8Fh2vWxmhAwDLAAiQYI0UIMEbAQQzYyNHCkC/1wst47J+i4AAt3KGBBBBFsiYsLK8ZQpV0eYECiCSHeoCYLbX4FwZEhGJiWBS9MOQElV2bpJi4PHPnAmFDYMOULGAiq55p9ElFBCDGsWCFrJEy5gAqIKEACC1qiJYMBRwYAaRMlhPrCB8EJoQCWmToDZwyuAiPABxHkOYSaij4JgQsnWFqblbguumwWFxTA56HPhgHBBBMgAFYQACH5BAkJADwALAAAAAAwADAAhQQCBISChMTCxERCRKSipOTi5GRiZCQiJJSSlNTS1FRSVLSytPTy9HRydBQSFDQyNIyKjMzKzExKTKyqrOzq7GxqbJyanNza3FxaXLy6vPz6/Hx6fBwaHDw6PAQGBISGhMTGxERGRKSmpOTm5GRmZCwuLJSWlNTW1FRWVLS2tPT29HR2dBQWFDQ2NIyOjMzOzExOTKyurOzu7GxubJyenNze3FxeXLy+vPz+/Hx+fBweHDw+PP///wAAAAAAAAAAAAb+QJ5wSCwaeZTbTXZsOp9O3G2xuOGg2KxRk6JmNNrwcJTJjLaZ2CJ1LZIzFHFRM12Diap06ltUdattcjxSVAsJgTxcCzF8QzgJVDEgd4I8BWoxKUxDimuIMotdBZWOAoUggRp6jYMghQKIlSMpmQtnQp1sQwWRKXGkji+LgLh/jaq1L3IqKkcMfws1xYuNJ38pzVuxQikPJQSUQjgnkRnNGiAvIBFXfpEXRjgFNwK/RCwA+S03cxlet0bIULFCBEeSSPyKcMiXz4MNeLtSnAhnRIU1gDwYCCu0IIMREQ4Y5nMQIBsOBlpktNFgLVIoe0RGkPAgEsABERSzyPPHUWL+TkcRdtR0oEzOM5cpQKjEokGEDoYrKj2qdWPEticMAjjQAVNMnhQXrmLBUSMGMB4jsp1dm0UDg7dw4aoFhkOD3bt3r9wYUKKvX78V2EbYk4Ew4SUdWHBYrHjxYhKCe1HpkklABw6KG2fmEHgtCFqUhy0ScGPH39Odz4IoY/jGnhtxNKhgMJu27bmk6mqoi4P3brbAn+AYIeBsDZSVVFgYIGGTIBUECLz46USVBG8PTJCKYMKEBRE1xBZMQKKFN/M7pMmhQMOCBe8WfImn8KED9gcPYLAKg+MCAe/w0QACbkJkMMB9D+xgQTYaqIcFBXeg89977xHg4BAhnPdACzn+YHQDCiIg10QeH5xAhAw3UPieCEYc6I0NRQ2hggESSGBABE2c4EIOOSAQjjwxwMdiEQKggIIuBREgAQwS2BCHCgiYECUYMkCwQQ4bFFfEOBPEMEpFPxWAQo0wTCCECg2QQEIDYOCQAY85QOAcEXaJgQMES8JAwh0MzECCASvcoYILAVy5AHAvwMAkDCDImKYBbA6RAJwBXFiJBjMwKUEOgTCQJgmBckIDnBaIl0UGiyoA0ZkNGLBmOAUUWmgCwKhQwZISlEpEn3+GyskCWOZgAXVY2LokBnPygKaake76AY8mEIsFCDYY0Ggfrb5qRAIQuLBqcEN46mqz4LaVg5oKnJYbxqQBfCtIEAAh+QQJCQA8ACwAAAAAMAAwAIUEAgSEgoTEwsREQkSkoqTk4uRkYmQcHhyUkpTU0tRUUlS0srT08vR0cnQUEhQsLiyMiozMysxMSkysqqzs6uxsamycmpzc2txcWly8urz8+vx8enwMCgwkJiQcGhw0NjQEBgSEhoTExsRERkSkpqTk5uRkZmSUlpTU1tRUVlS0trT09vR0dnQUFhQ0MjSMjozMzsxMTkysrqzs7uxsbmycnpzc3txcXly8vrz8/vx8fnwsKiz///8AAAAAAAAAAAAG/kCecEgsGnkUHG52bDqfzhxuscDloNisUaOiZjTa8HDhOSy2XdnXWMpkKOLiagcAOODEVYaquua7VX5xPHN1ADSCPFwyC2tDOQkLjAKJcTWGHBF5e2pgQzNUVAWDRBoPhhKeiipdfY8ikiqUpEQZIIYyQ1xeqgWxC3i0Qjkphh0rQrsyOJ5cgDBxK8hGFxyGIcmsC648KGkq00U5qkQ4AwMy5Dw5LIYtoxoiEfJXDIALF0Y5BTgCwUMPPHhoEUOAHA91Dqho0oaKFSI5koTKYCRgi4EHGtggUoODDiZONHgrQYQBjFCMKBZZ0GGgQA87XjRLoIWBH5GAZLQiaYQC/osDLi9+WBAuzL49obYlKCouQoqgHjqgGGRPUiwRMyod0SDjg8AW2AZB2lalhNYnK17s+ABy0ApWNtRp2bdQGAWmwvJiySGtr1+8YjUIHjz4iogUIyQMSLxY8Qa9PCKocDM5Q+UlCly4eKC5s+bHemH9IqtTQIzOnFNvBp03wi9GjCQJEKFghO3EtyWwgCwZR2UVvjPggJODwQrjxo9LgzxOw7gcz51Dnv4kRwlNwkoAzrJiAoYbDGjpUXHhbEgBNySoJ0ErkkOzey9siEE/hgQMG+NUjb1AhE0nM5yggAT2EWjAQ3FoUEAGOvG31BECYKCefTFgQEIzPGFBgR85/ngTCyMq/CNEehQq8EKGPIhAA1FoRVBDfkKYdE8jRpAoQQPQlMKCCQZsQNMRNhBggQUkJBLRFDqpREQENNCA4CMyGMBjA0ysQMKVF/LAQA0nWHBCjhDxM9xWgFFAgwloqrQCBDoEAIEnEQxpAQFtQWReEzlYYICUG3jCAAQbbPCmEFae0CUO06FQgZQVYEcImzoMKsQFQ55QA4qk5BAAmgYgIMiaOkSqSg4LdGmBDHdmIQCPJlQA46OhSipECVwOmQ8tGujA6gSJ/LmBqBAJ0OUJ6YgXgJRUygGprITWMGSx7TXAAphDgApsEUGSMAp1yv7KLLdQaIBAqCekCm4RBxd0eSstQQAAIfkECQkAOQAsAAAAADAAMACFBAIEhIKExMLEREJEpKKk5OLkZGZkJCIklJKU1NLUtLK09PL0NDI0dHZ0XFpcFBYUjIqMzMrMTEpMrKqs7OrsbG5sLCosnJqc3NrcvLq8/Pr8PDo8fH58HB4chIaExMbEREZEpKak5ObkbGpsJCYklJaU1NbUtLa09Pb0NDY0fHp8XF5cHBocjI6MzM7MTE5MrK6s7O7sdHJ0LC4snJ6c3N7cvL68/P78PD48////AAAAAAAAAAAAAAAAAAAAAAAABv7AnHBILBpzNstMcGw6n06UBQCYaaDYrDH2oLIW2vAww0hljJQu4IEyijIZiriIGjxYllgx7QUTUScKCjY3c0MoOCx3HIVDXFRsRDcJgjACjYY5IYosBy5EjwBfoAowCicFmUMaIJwrV0KhkUIaH4IKl6pDNh2KHSeOaqNCBZUncrpCNyN3LBttOXxr0BoZMIGfYiiwRRgknCWxwn4mgafQRTfcRAIODifrOTcenDMiOQsSL/ptgKUnGIzcKGBDADIiIBjMYLAiAh0Gisw0eXMqAyZ5FGxUsmFkAAOFZQKkGhKCBAQ9TjSUuzdkgQtjCs4UyYCjzMcZAy7AUqllQf4jleaunWJZJIaHFB+RzniRAV2YgRlgKkgQT1ICAykWfsQRcE6MQEIVfIhxsYmGEy8UpkCQadItGyLKQkFBYwAIP4YAZTAhN8sNEUx0iXCarDCUGygSK15sWJ2Gx5AfF3IxwsEKy5gvQzAc4QQczxlA24hhQJ/pfag3F44gFewJAaVPy1adzJZQU6ZKCaC8ordv37R1dbYR2sYJ4xlsyLmxAMUCDQueR69qSINj69hv9DXMfcgNCgmSDValQUGFBnjnoAiNYbvZCA0MyFegipIguO6912ghv7+MkWJ8VcotH/jkxAIEjNCffCpEQN1hBUSFWyAJECaECxUsaIAMCvnsdBAUZNFSTlCnfCiEDAuOcMGHLnhgg4VEAEUUPi/dEpMRKMoXQFerQMBBAC3wWARFg1z0nQ24cVREAgEE4GAR1XDAgQon5XBWaBlcscAJuZkgEEEGHbHNERR4EICUHwiBAgEXlEAALOUIcgKM1olxwwRScoAALGuWcMGbtFgjSDaFYSDlmeHRQkObgAohwoAKmGjIDSWcqQIBmKzJKDe1VPJBfli4kGcAM2qwqJvrxPCPAgBWh8CPKpxwkambWlVJLploUMKUEKSXg6YX0FCWP0XqYgIELXgJJQ1+NkrEG3F0Z4SmqEobhgYhtDkBqNYSUcAEMMxoSBAAIfkECQkAOwAsAAAAADAAMACFBAIEhIKExMLEREJE5OLkZGJkpKKkJCIk1NLUVFJU9PL0dHJ0tLK0lJaUFBIUNDI0jIqMzMrMTEpM7OrsbGpsrKqs3NrcXFpc/Pr8fHp8vLq8PDo8DA4MnJ6cHBocBAYEhIaExMbEREZE5ObkZGZkpKakLC4s1NbUVFZU9Pb0dHZ0tLa0nJqcNDY0jI6MzM7MTE5M7O7sbG5srK6s3N7cXF5c/P78fH58vL68PD48HB4c////AAAAAAAAAAAAAAAABv7AnXBILBp3gtwgdGw6n85UzuMZYKDYrDFmoppS2vBQIIIJtiaH52us6HQacTGFejwGsSLXCyaOOAAAD31yOxh1Jg8uNkQKaWuEhhSBgpFyM3YPLSdEE12QRCEflCWFRBgXiQ8yV0JcaoNDGAOULYymQyEtLZo4Q458QwaUH764QzYZD4kwrZ5qbDsKOpQ1chiWQjQDmR2un2w2AZQONEc2rUURMjI4t8gNyy0iE9I19wVgFg6UAUY2BHAIqFekhgQJMBYgmCPCjoQzR2Z4CKQj3Q4bE3AwYDDDGJELMBBKSOBiBBEGORrkcRJDBYcKjV5snLGCQZwiAlCE3HmhRP4rDBa0IPh5oibNjStMbmmQQGTIAgIsagGoYaPVFQiyITuRYWdIFObkxDDKcUWIGO+cYBBQY6cBUzYQMKiJY0RaLCkqoCigAFeKFSto3J06IsKxHSOkHl78xEYKbI9TRFZcCB2Gy5gvMzpxY4EKz6A/s2AcYYUGDaZRn8YRIwMJEgVgv45NYvTiCDNrzi0rwDUJCrRfv7Z9OERZjsg5CuC8oPnn5p6JH4twOvUKHKZx1HM8uTtjdOAxhB/MuDwRGzGCHhuhNctaEC7a40VtgbxaBC5u3Ahws9AJq3XZdx4BHegXQAY3gECQGGMlx0AICgiowAoB7KffDS4MVRkBVfzNkFxWR5wAwoX6QRCVEBhpEaEQGBRlFU0rLDgEBPtlEEAAFchoQQcRyGdIUUoJoYBMutlkBI36sRCWLAaw0EAJBDQxQlUMuHNeRh52ZIQFDTSg4XkRdMmCAX1hEEIEaDIyYZbqDSiQjLJQFkMHLDi50A4pdKhBKxZcpZV4YtiggZMslHALBoDNdShgHr5QHgGEKimLUXsOMYJVDMBZ2QyErvAOonNViqJxNAkgYBYnENqBjHlyJKorMzEQJS4YVNCAkyGkBeoMr15E5Aym0mrrmJYgWpOnRYBa5alQ0FCCAUtOulGvQkypgabm7UqteVDYoNGy3IqREWuHBQEAIfkECQkAPQAsAAAAADAAMACFBAIEhIKExMLEREZEpKKk5OLkZGZkJCIklJKU1NLUVFZUtLK09PL0FBIUdHZ0NDI0jIqMzMrMTE5MrKqs7OrsbG5sLCosnJqc3NrcXF5cvLq8/Pr8HBocDAoMfH58PDo8BAYEhIaExMbETEpMpKak5ObkbGpsJCYklJaU1NbUXFpctLa09Pb0FBYUfHp8NDY0jI6MzM7MVFJUrK6s7O7sdHJ0LC4snJ6c3N7cZGJkvL68/P78HB4c////AAAAAAAABv7AnnBILBp7EZkidmw6n86N5PVQbaDYrJE2eDwGLK14GMnkREZG1wY2LryCcZFlGklUtKLa2yZSThwtI2FyQiwVI4kXO0RcNl+EQjsOgRwDV4VCGnYjMhiNXZBEETwcgTOZQxsVEq0ejEJ7okIbMpUSmKk9MRJ2EmixoX09M6YcPMC6PTsQiSMGmI6zLA+VFXIbuUQFCq0jqD2ybcyVNjhHLJFECR4BIrBDOwScGRThJhU1NWEFFqYtCIxsuPBIgxEHBgzkCPGJCIsMvXJEaPKmBYcP6naseACgIw8jNRImNHHD3hAdCggweEIjxIkF8TCoANGx4wEjESrkSLizxv4KTBvOZUmBiYWLDjU7NgCnh4CJnVBdRNCmhQUBHkkBgKhg8sgODDBEJqxQolAEpEkHxIAXJYKLHDuZjtlRoyaPGVShsFhRwcXKTCVatICgTswOCkxS7ZhRQJljwxtYRJ4sOW+hbJgzb2CEAQWEz6A/h5jwWISGFadTo9ZBA4GH17Bjk3YcYcUC27gX6NYB47UL38BnK4swY0Hx48ZXCOgcurlwXaZP65Au3V42yekiY3+8Y8fmbN43s31M/ggDoalKFBazIcYNEuu1bDiNYTyUryQu6J+YKUHxBTqUYJ8Rhy1wAQoHXnBDHnLQYJtuuonAwICGCJBggiTUd1kBOvkgp1sC8eFAAIIJEhADJjv8hcWEtKRg2wwrFLdCV0OMmOANrG2zAlFPsOBiWUMwEMODuhlUBAH6XTADkKpoUCSTRZTgJIBsHaZDckZuQ8IMGhKxQwrG3RbGBhFEIEIEjDDwIJcE4iCADjTGY5maEAq1wYMrwILBfyvEt9lcMeg2gw6w3GmcBkA5WVxijlEQ5gpMGnobPAUQGWchO1wZITx32oZoPCLAOMM7yhQg6AoM0qKBjGzRAOECjaWyQYe6pcCWpJ/G459xAlCIxawxalCYoTPkOsReu/mKhZQaQEnLCrjZx+yl5eFqWXlOZGocodiOQYEOAqSaSRAAOw==\");\r\n//background-size:contain;\r\n//background-position:center center;\r\n//background-repeat:no-repeat;\r\n//vertical-align: middle;\r\n//}\n.#{$namespace}pull-loading{\n//  -webkit-backface-visibility: hidden;\r\n    -webkit-transition-duration: 400ms;\r\n    transition-duration: 400ms;\n    -webkit-transition:-webkit-transform 0.4s;\n    transition: transform 0.4s;\r\n    vertical-align: middle;\n    margin-right: 10px;\n}\r\n.#{$namespace}pull-loading.#{$namespace}reverse{\r\n    @include transform(rotate(180deg) translateZ(0));\r\n}\n.#{$namespace}pull-caption{\n    display: inline-block;\n    line-height: 24px;\n    font-size: 15px;\n    margin-top: 0;\n    vertical-align: middle;\n    position: relative;\n    overflow: visible;\n    span{\n        display: none;\n        &.#{$namespace}in{\n            display: inline;\n        }\n    }\n}"
  },
  {
    "path": "sass/push.scss",
    "content": "//\n// Push styles (to be used with push.js)\n// --------------------------------------------------\n\n.#{$namespace}content {\n  // Fade animation\n  &.#{$namespace}fade {\n    left: 0;\n    opacity: 0;\n\n    &.#{$namespace}in {\n      opacity: 1;\n    }\n  }\n\n  // Slide animation\n  &.#{$namespace}sliding {\n    z-index: z(\"default\")+1;\n    -webkit-transition: -webkit-transform .4s;\n            transition: transform .4s;\n    @include transform(translate3d(0, 0, 0));\n\n    &.#{$namespace}left {\n      z-index: z(\"default\");\n      @include transform(translate3d(-100%, 0, 0));\n    }\n\n    &.#{$namespace}right {\n      z-index: z(\"default\")+2;\n      @include transform(translate3d(100%, 0, 0));\n    }\n  }\n}\n\n// Add chevrons to elements\n.#{$namespace}navigate-right,\n.#{$namespace}push-left,\n.#{$namespace}push-right {\n  &:after {\n    position: absolute;\n    top: 50%;\n    display: inline-block;\n    font-family: Muiicons;\n    font-size: inherit;\n    line-height: 1;\n    color: #bbb;\n    text-decoration: none;\n    -webkit-font-smoothing: antialiased;\n    @include transform(translateY(-50%));\n  }\n}\n\n.#{$namespace}push-left:after {\n  left: 15px;\n  content: '\\e582';\n}\n.#{$namespace}navigate-right:after,\n.#{$namespace}push-right:after{\n  right: 15px;\n  content: '\\e583';\n}\n"
  },
  {
    "path": "sass/scroll.scss",
    "content": "\r\n.#{$namespace}scroll-wrapper {\r\n//  -webkit-backface-visibility: hidden;\r\n    position: absolute;\r\n    z-index: 2;\r\n    top: 0px;\r\n    bottom: 0px;\r\n    left: 0;\r\n    width: 100%;\r\n    overflow: hidden;\r\n}\r\n.#{$namespace}scroll {\r\n//  -webkit-backface-visibility: hidden;\r\n    position: absolute;\r\n    z-index: z(\"default\");\r\n    width: 100%;\r\n    // -webkit-transform: translateZ(0);\r\n    // transform: translateZ(0);\r\n}\r\n\r\n.#{$namespace}scrollbar{\r\n    position: absolute;\r\n    z-index: z(\"scroll\",\"scrollbar\");\r\n    overflow: hidden;\r\n    transform: translateZ(0px);\r\n    transition: 500ms;\r\n    -webkit-transition: 500ms;\r\n    opacity: 0;\r\n    pointer-events: none;\r\n}\r\n.#{$namespace}scrollbar-vertical{\r\n    width: 4px;\r\n    bottom: 2px;\r\n    top: 0;\r\n    right: 1px;\r\n    .#{$namespace}scrollbar-indicator{\r\n        width:100%;\r\n    }\r\n}\r\n.#{$namespace}scrollbar-horizontal{\r\n    height: 4px;\r\n    left: 2px;\r\n    right: 2px;\r\n    bottom: 0px;\r\n    .#{$namespace}scrollbar-indicator{\r\n        height:100%;\r\n    }\r\n}\r\n\r\n.#{$namespace}scrollbar-indicator{\r\n    box-sizing: border-box;\r\n    position: absolute;\r\n    border: 1px solid rgba(255, 255, 255, 0.801961);\r\n    border-radius: 2px;\r\n    transition: 0.01s cubic-bezier(0.1, 0.57, 0.1, 1);\r\n    -webkit-transition: 0.01s cubic-bezier(0.1, 0.57, 0.1, 1);\r\n    display: block;\r\n    transform: translate(0px, 0px) translateZ(0px);\r\n    background: rgba(0, 0, 0, 0.398039);\r\n}\r\n\r\n//android 5+\r\n.#{$namespace}plus-pullrefresh{\r\n    .#{$namespace}fullscreen{\r\n        .#{$namespace}scroll-wrapper,.#{$namespace}slider-group {\r\n            .#{$namespace}scroll-wrapper {\r\n                position: absolute;\r\n                top: 0px;\r\n                bottom: 0px;\r\n                left: 0;\r\n                width: 100%;\r\n                overflow: hidden;\r\n            }\r\n             .#{$namespace}scroll {\r\n                position: absolute;\r\n                width: 100%;\r\n            }\r\n        }\r\n    }\r\n    .#{$namespace}scroll-wrapper,.#{$namespace}slider-group {\r\n        position: static;\r\n        top: auto;\r\n        bottom: auto;\r\n        left: auto;\r\n        width: auto;\r\n        overflow: auto;\r\n    }\r\n    .#{$namespace}slider-group{\r\n        overflow: visible;\r\n    }\r\n    .#{$namespace}scroll {\r\n        position: static;\r\n        width: auto;\r\n    }\r\n}\r\n"
  },
  {
    "path": "sass/segmented-controls.scss",
    "content": "//\n// Segmented controllers\n// --------------------------------------------------\n\n.#{$namespace}segmented-control {\n    position: relative;\n    display: table;\n    table-layout: fixed;\n    width: 100%;\n    overflow: hidden;\n    font-size: 15px;\n    font-weight: $font-weight-light;\n    background-color: transparent;\n    border: 1px solid $primary-color;\n    border-radius: 3px;\n    -webkit-touch-callout: none;//(iOS平台)分段选择禁止长按弹出菜单；\n    &.#{$namespace}segmented-control-vertical{\n        border-radius:0;\n        border-width: 0;\n        border-collapse: collapse;\n     .#{$namespace}control-item{\n         display: block;\n         border-left-width: 0;\n         border-bottom: 1px solid #c8c7cc;\n     }   \n    }\n    &.#{$namespace}scroll-wrapper{\n        height: 38px;\n        .#{$namespace}scroll{\n            height: 40px;\n            width: auto;\n            white-space: nowrap;\n        }\n        .#{$namespace}control-item{\n            display: inline-block;\n            width: auto;\n            padding: 0 20px;\n            border: 0;\n        }\n    }\n    // Section within controller\n    .#{$namespace}control-item {\n        display: table-cell;\n        width: 1%;\n//      padding-top: 6px;\r\n//      padding-bottom: 7px;\n        overflow: hidden;\n        line-height: 38px;\n        text-align: center;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        border-left: 1px solid $primary-color;\n        color: $primary-color;\n        border-color: $primary-color;\n        @include transition(background-color .1s linear);\n        // Remove border-left and shadow from first section\n        &:first-child {\n            border-left-width: 0;\n        }\n//      &:active {\n//          background-color: lighten($primary-color, 35%);\n//      }\n        // Selected state of segmented controller\n        &.#{$namespace}active {\n            color: #fff;\n            background-color: $primary-color;\n        }\n    }\n    &.#{$namespace}segmented-control-inverted{\n        width:100%;\n        border:0;\n        border-radius:0;\n        &.#{$namespace}segmented-control-vertical{\n             .#{$namespace}control-item{\n                 border-bottom: 1px solid #c8c7cc;\n                 &.#{$namespace}active {\n                   border-bottom: 1px solid #c8c7cc;\n                 }\n             }\n        }\n        .#{$namespace}control-item {\n            border:0;\n            color: inherit;\n            &.#{$namespace}active {\n                color: $primary-color;\n                background: none;\n                border-bottom:2px solid $primary-color;\n            }\n        }\n        ~ .#{$namespace}slider-progress-bar{\n            background-color:$primary-color;\n        }\n    }\n}\n\n// Other segmented controller types\n// --------------------------------------------------\n\n// Positive\n.#{$namespace}segmented-control-positive {\n    border: 1px solid $positive-color;\n\n    .#{$namespace}control-item {\n        color: $positive-color;\n        border-color: inherit;\n\n//      &:active {\n//          background-color: lighten($positive-color, 35%);\n//      }\n        &.#{$namespace}active {\n            color: #fff;\n            background-color: $positive-color;\n        }\n    }\n    &.#{$namespace}segmented-control-inverted{\n        .#{$namespace}control-item {\n            &.#{$namespace}active {\n                color: $positive-color;\n                background: none;\n                border-bottom:2px solid $positive-color;\n            }\n        }\n        ~ .#{$namespace}slider-progress-bar{\n            background-color:$positive-color;\n        }\n    }\n}\n\n// Negative\n.#{$namespace}segmented-control-negative {\n    border: 1px solid $negative-color;\n\n    .#{$namespace}control-item {\n        color: $negative-color;\n        border-color: inherit;\n\n//      &:active {\n//          background-color: lighten($negative-color, 35%);\n//      }\n        &.#{$namespace}active {\n            color: #fff;\n            background-color: $negative-color;\n        }\n    }\n    &.#{$namespace}segmented-control-inverted{\n        .#{$namespace}control-item {\n            &.#{$namespace}active {\n                color: $negative-color;\n                background: none;\n                border-bottom:2px solid $negative-color;\n            }\n        }\n        ~ .#{$namespace}slider-progress-bar{\n            background-color:$negative-color;\n        }\n    }\n}\n\n// This is used to by the js to show and hide content tide to the segmented control.\n.#{$namespace}control-content {\n    position: relative;\n    display: none;\n\n    &.#{$namespace}active {\n        display: block;\n    }\n}\n"
  },
  {
    "path": "sass/slider-cell.scss",
    "content": ".#{$namespace}slider-cell{\n    position:relative;\n    >.#{$namespace}slider-handle{\n        z-index:z(\"default\");\n    }\n    >.#{$namespace}slider-left,>.#{$namespace}slider-right{\n        z-index:0;\n        position:absolute;\n        top:0;\n        bottom:0;\n    }\n    >.#{$namespace}slider-left{\n        left:0;\n    }\n    >.#{$namespace}slider-right{\n        right:z(\"default\")-1;\n    }\n}\n\n    "
  },
  {
    "path": "sass/sliders.scss",
    "content": "//\n// Slider styles (to be used with galleries.js)\n// --------------------------------------------------\n\n// Outer wrapper for slider\n.#{$namespace}slider {\n    //-webkit-backface-visibility: hidden;\n    overflow: hidden;\n    width: 100%;\n    position:relative;\n    z-index:z(\"default\");\n    .#{$namespace}segmented-control.#{$namespace}segmented-control-inverted{\n        .#{$namespace}control-item {\n            &.#{$namespace}active {\n                border-bottom:0;\n            }\n        }\n        ~ .#{$namespace}slider-group{\n            .#{$namespace}slider-item{\n                //@include hairline(double, #c8c7cc, 0); // double grey border.\n                border-top: 1px solid #c8c7cc;\n                border-bottom: 1px solid #c8c7cc;    \n            }\n        }\n     }\n    // Inner wrapper for slider (width of all sliders together)\n    .#{$namespace}slider-group {\n        //加上后好像内嵌轮播时，第一张图片显示有问题\n//      -webkit-backface-visibility: hidden;\n        position: relative;\n        font-size: 0; // Remove spaces from inline-block children\n        white-space: nowrap;\n        @include transition(all 0s linear);\n\n        // Individual slider\n        .#{$namespace}slider-item {\n//          -webkit-backface-visibility: hidden;\n            position: relative;\n            display: inline-block;\n            white-space:normal;\n            width: 100%;\n            height: 100%;\n            font-size: 14px;\n            vertical-align: top; // Ensure that li always aligns to top\n            >a:not(.#{$namespace}control-item){\n                position: relative;\n                line-height: 0;\n                display: block;\n            }\n            img{\n                width: 100%; \n            }\n            .#{$namespace}table-view:before,.#{$namespace}table-view:after{\n                    height:0;\n             }\n//           .#{$namespace}table-view-cell:last-child:after{\r\n//               height: 0;\r\n//           }\n        }\n        &.#{$namespace}slider-loop{\n            @include transform(translate(-100%, 0px));\n        }\n//      &.#{$namespace}slider-loop .#{$namespace}slider-item{\r\n//          &:first-child{\r\n//              margin-left: -100%;\r\n//          }\r\n//          &:last-child{\r\n//              margin-right: -100%;\r\n//          }\r\n//      }\n    }\n}\n.#{$namespace}slider-title{\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 30px;\n    line-height: 30px;\n    width: 100%;\n    text-align: left;\n    text-indent: 12px;\n    background-color: #000;\n    opacity: 0.8;\n    margin: 0;   \n}\n.#{$namespace}slider-indicator{\n    position: absolute;\n    bottom: 8px;\n    width: 100%;\n    text-align:center;\n    background:none;\n    &.#{$namespace}segmented-control{\n        position:relative;\n        bottom:auto;\n//      .#{$namespace}control-item{\r\n//          line-height: 40px;    \r\n//      }\n    }\n    .#{$namespace}indicator{\n        display: inline-block;\n        cursor: pointer;\n        background: #aaa;\n        width: 6px;\n        height: 6px;\n        margin: 1px 6px;\n        border-radius: 50%;\n        @include box-shadow(0 0 1px 1px rgba(130,130,130,.7));\n    }\n    .#{$namespace}active.#{$namespace}indicator{\n        background: #fff;\n    }\n    .#{$namespace}icon{\n        width: 40px;\n        height: 30px;\n        margin: 3px;\n        font-size: 20px;\n        line-height: 30px;\n        text-align: center;\n        border: 1px solid #dddddd;\n    }\n    .#{$namespace}number{\n        display: inline-block;\n        line-height: 32px;\n        width: 58px;\n        span{\n            color: #ff5053;\n        }\n    }\n}\n.#{$namespace}slider-progress-bar{\n//  -webkit-backface-visibility: hidden;\n    @include transform(translateZ(0));\n    height:2px;\n    z-index:z(\"default\");\n}\n"
  },
  {
    "path": "sass/switches.scss",
    "content": "//\n// switch styles (to be used with switchs.js)\n// --------------------------------------------------\n\n.#{$namespace}switch {\n    position: relative;\n    display: block;\n    width: 74px;\n    height: 30px;\n    background-color: #fff;\n    background-clip: padding-box;\n    border: 2px solid #ddd;\n    border-radius: 20px;\n    -webkit-transition-timing-function: ease-in-out;\n    transition-timing-function: ease-in-out;\n    -webkit-transition-duration: 0.2s;\n    transition-duration: 0.2s;\n    -webkit-transition-property: background-color, border;\n    transition-property: background-color, border;\n    &.#{$namespace}disabled {\n        opacity: .3;\n    }\n    // Sliding handle\n    .#{$namespace}switch-handle {\n        position: absolute;\n        top: -1px;\n        left: -1px;\n        z-index: z(\"default\");\n        width: 28px;\n        height: 28px;\n        background-color: #fff;\n        background-clip: padding-box;\n//      border: 1px solid #ddd;\n        -webkit-box-shadow: 0 2px 5px rgba(0,0,0,.4);\n        box-shadow: 0 2px 5px rgba(0,0,0,.4);\n        border-radius: 16px;\n        -webkit-transition-property: -webkit-transform, width,left;\n        transition-property: transform, width,left;\n        -webkit-transition: 0.2s ease-in-out;\n        transition: 0.2s ease-in-out;\n    }\n    &:before {\n        position: absolute;\n        top: 3px;\n        right: 11px;\n        font-size: 13px;\n        color: #999;\n        text-transform: uppercase;\n        content: \"Off\";\n    }\n    &.#{$namespace}dragging {\n        background-color: $chrome-color;\n        border-color: $chrome-color;\n        .#{$namespace}switch-handle {\n           width: 38px;\n        }\n        &.#{$namespace}active{\n            .#{$namespace}switch-handle {\n               width: 38px;\n               left:-11px;\n            }    \n        }\n    }\n    // Active state for switchborder: 2px solid $positive-color;\n    &.#{$namespace}active {\n        background-color: $positive-color;\n        border-color: $positive-color;\n//        @include box-shadow(inset 0 0 0 13px $positive-color);\n        .#{$namespace}switch-handle {\n//          border-color: $positive-color;\n            @include transform(translate(43px,0));\n        }\n        &:before {\n            right: auto;\n            left: 15px;\n            color: #fff;\n            content: \"On\";\n        }\n    }\n    // Hide the checkbox\n    input[type=\"checkbox\"] {\n        display: none;\n    }\n}\n\n.#{$namespace}switch-mini{\n    width: 47px;\n    &:before {\n        display: none;\n    }\n    // Active state for switch\n    &.#{$namespace}active {\n        .#{$namespace}switch-handle {\n            @include transform(translate(16px,0));\n        }\n    }\n}\n\n//增加蓝色开关\n.#{$namespace}switch-blue {\n    // Sliding handle\n    .#{$namespace}switch-handle {\n//      border: 1px solid rgba(0, 0, 0, .2);\n//      @include box-shadow(0 3px 3px rgba(0,0,0,.08));\n    }\n    // Active state for switch\n    &.#{$namespace}active {\n        background-color: $primary-color;\n        border: 2px solid $primary-color;\n//        @include box-shadow(inset 0 0 0 13px $primary-color);\n//      .#{$namespace}switch-handle {\n//          border-color: $primary-color;\n//      }\n    }\n}"
  },
  {
    "path": "sass/table-views.scss",
    "content": "//\n// Table views\n// --------------------------------------------------\n\n.#{$namespace}table-view {\n    position: relative;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n    list-style: none; // Remove usual bullet styles from table view\n    background-color: #fff;\n//  border-color:#c8c7cc;\n//  border-width: 1px 0px 1px 0px;\n//  border-style: solid;\n    @include hairline(double, #c8c7cc, 0); // Double grey border.\n    &:before{\n        top:-1px;//cell 高亮时，保证边框仍旧可见\n    }\n\n}\n//.#{$namespace}table-view-striped>li:nth-child(odd){\n//  background-color: #f9f9f9;\n//  >.#{$namespace}slider-cell{\n//      >.#{$namespace}slider-left ~ .#{$namespace}slider-handle,>.#{$namespace}slider-right ~ .#{$namespace}slider-handle{\n//          background-color:#f9f9f9;\n//      }\n//  }\n//}\n.#{$namespace}table-view-icon .#{$namespace}table-view-cell{\n    .#{$namespace}navigate-right .#{$namespace}icon{\n        font-size: 20px;\n        margin-left: -5px;\n        margin-right: 5px;\n        margin-top: -1px;\n    }\n   &:after{\n       left:40px;\n   }\n}\n.#{$namespace}table-view-chevron .#{$namespace}table-view-cell{\n    padding-right: 65px;\n    > a:not(.#{$namespace}btn) {\n        margin-right: -65px;\n    }\n}\n.#{$namespace}table-view-radio .#{$namespace}table-view-cell{\n    padding-right: 65px;\n    > a:not(.#{$namespace}btn) {\n        margin-right: -65px;\n    }\n    .#{$namespace}navigate-right:after{\n        right:9px;\n        content: '';\n        color:$primary-color;\n        font-size: 30px;\n        font-weight: 600;\n    }\n    &.#{$namespace}selected .#{$namespace}navigate-right:after{\n        content: '\\e472';\n    }\n}\n//.#{$namespace}table-view-slider .#{$namespace}table-view-cell{\n//  padding:11px 0;\n//  > a:not(.#{$namespace}btn) {\n//      margin-right: 0;\n//  }\n//}\n.#{$namespace}table-view-inverted {\n    background: #333;\n    color: #fff;\n    @include hairline(double, #222, 0); // Double grey border.\n    .#{$namespace}table-view-cell{\n        @include hairline(single, #222, 15px); // Single grey border with 15px offset.\n        &.#{$namespace}active {\n                background-color: #242424;\n            } \n        > a:not(.#{$namespace}btn) {\n            &.#{$namespace}active {\n                background-color: #242424;\n            }\n        } \n    }\n}\n// Pad each table view item and add dividers\n.#{$namespace}table-view-cell {\n    position: relative;\n    padding: 11px 15px;\n    overflow: hidden;\n    //background-color: inherit;//应该透明，否则会盖住ul的边框\n    @include hairline(single, #c8c7cc, 15px); // Single grey border with 15px offset.\n    -webkit-touch-callout: none;//禁止长按出现打开菜单；\n    &.#{$namespace}radio input[type=radio],&.#{$namespace}checkbox input[type=checkbox]{\n        top:8px;\n    }\n    &.#{$namespace}radio.#{$namespace}left,&.#{$namespace}checkbox.#{$namespace}left{\n        padding-left: 58px;\n    }\n    &.#{$namespace}active {\n        background-color: #eee;\n//      >.#{$namespace}slider-cell{\n//          >.#{$namespace}slider-left ~ .#{$namespace}slider-handle,>.#{$namespace}slider-right ~ .#{$namespace}slider-handle{\n//              background-color:#eee;\n//          }\n//      }\n    }\n    // Remove the border from the last table view item\n    &:last-child {\n        //background-image: none;\n        &:before,&:after{\n            height:0;\n        }\n    }\n    // If it's a table view of links, make sure the child <a> takes up full table view item tap area (want to avoid selecting child buttons though)\n    > a:not(.#{$namespace}btn) {\n        position: relative;\n        display: block;\n        padding: inherit;\n        margin: -11px -15px; // Make the entire list item tappable.\n        overflow: hidden;\n        color: inherit;\n        white-space: nowrap;        \n        text-overflow: ellipsis;\n        /*&:active {\n            background-color: #eee;\n        }*/\n        &.#{$namespace}active {\n            background-color: #eee;\n        }\n    }\n    p {\n        margin-bottom: 0;\n    }\n//  >.#{$namespace}slider-cell{\n//      margin-top:1px;\n//      margin-bottom:1px;\n//      >.#{$namespace}slider-handle{\n//          position:absolute;\n//          left:0;\n//          right:0;\n//          top:0;\n//          bottom:0;\n//          @include transform(translate3d(100%, 0px, 0px));\n//      }\n//      >.#{$namespace}slider-left ~ .#{$namespace}slider-handle,>.#{$namespace}slider-right ~ .#{$namespace}slider-handle{\n//          position:relative;\n//          z-index:z(\"default\");\n//          background-color:#fff;\n//          padding-left:15px;\n//          left:auto;\n//          right:auto;\n//          top:auto;\n//          bottom:auto;\n//          @include transform(translate3d(0px, 0px, 0px));\n//      }\n//      >.#{$namespace}slider-left,>.#{$namespace}slider-right{\n//          top:1px;\n//          bottom:1px;\n//      }\n//  }\n}\n.#{$namespace}table-view-cell {\n    &.#{$namespace}transitioning{\n    >.#{$namespace}slider-handle,>.#{$namespace}slider-left .#{$namespace}btn,>.#{$namespace}slider-right .#{$namespace}btn{\n        -webkit-transition: -webkit-transform 300ms ease;\n        transition: transform 300ms ease; \n        }\n    }\n    &.#{$namespace}active>.#{$namespace}slider-handle{\n        background-color: #eee;\n    }\n    >.#{$namespace}slider-handle{\n        background-color: #fff;\n        position: relative;\n        &.#{$namespace}navigate-right:after,.#{$namespace}navigate-right:after{\n            right: 0;\n        }\n    }\n    >.#{$namespace}slider-handle,>.#{$namespace}slider-left .#{$namespace}btn,>.#{$namespace}slider-right .#{$namespace}btn{\n        -webkit-transition: -webkit-transform 0ms ease;\n        transition: transform 0ms ease;\n//      -webkit-backface-visibility: hidden;\r\n//      backface-visibility: hidden;\n        }\n     >.#{$namespace}slider-left,>.#{$namespace}slider-right{\n//      -webkit-backface-visibility: hidden;\r\n//      backface-visibility: hidden;\n        position: absolute;\n        top: 0;\n        height: 100%;\n        display: -webkit-box;\n        display: -webkit-flex;\n        display: flex;\n        >.#{$namespace}btn{\n          padding: 0 30px;\n          color: #fff;\n          border-radius:0;\n          border:0;\n//        background: #c7c7cc;\n          display: -webkit-box;\n          display: -webkit-flex;\n          display: flex;\n          -webkit-box-align: center;\n          -webkit-align-items: center;\n          align-items: center;\n          position: relative;\n          left: 0;\n          &:after{\n              content: '';\n              position: absolute;\n              top: 0;\n              width: 600%;\n              height: 100%;\n              background: inherit;\n              z-index: -1;\n          }\n          &.#{$namespace}icon{\n              font-size: 30px;\n          }\n        }   \n     }\n     >.#{$namespace}slider-right{\n      right: 0%;\n      -webkit-transform: translateX(100%);\n      transform: translateX(100%);\n      -webkit-transition: -webkit-transform 0ms ease;\n      transition: transform 0ms ease;\n  }\n  >.#{$namespace}slider-left{\n        left: 0;\n        -webkit-transform: translateX(-100%);\n        transform: translateX(-100%);\n        -webkit-transition: -webkit-transform 0ms ease;\n        transition: transform 0ms ease;\n    > .#{$namespace}btn:after{\n        right: 100%;\n        margin-right: -1px;\n    }\n  }\n  \n}\n\n// Table view dividers\n// --------------------------------------------------\n\n.#{$namespace}table-view-divider {\n    position: relative;\n    padding-top: 6px;\n    padding-bottom: 6px;\n    padding-left: 15px;\n    margin-top: -1px; // Hides the border of the previous list item\n    margin-left: 0;\n    font-weight: $font-weight;\n    color: #999;\n    background-color: #fafafa;\n    @include hairline(double, #c8c7cc, 0);  // Double (top and bottom) grey border with no offset.\n}\n\n\n// Table-views with media (images,avatars, icons)\n// --------------------------------------------------\n\n.#{$namespace}table-view .#{$namespace}media,\n.#{$namespace}table-view .#{$namespace}media-body {\n    overflow: hidden;\n}\n\n.#{$namespace}table-view {\n    .#{$namespace}media-large .#{$namespace}media-object {\n        max-width: 80px;\n        height: 80px;\n        line-height: 80px;\n    }\n    .#{$namespace}media .#{$namespace}subtitle{\n        color: #000;\n    }\n    .#{$namespace}media-object {\n        max-width: 42px;\n        height: 42px;\n        line-height: 42px;\n        &.#{$namespace}pull-left {\n            margin-right: 10px;\n        }\n        &.#{$namespace}pull-right {\n            margin-left: 10px;\n        }\n    }\n    .#{$namespace}table-view-cell.#{$namespace}media-icon{\n       .#{$namespace}media-object {\n            max-width: 29px;\n            height: 29px;\n            line-height: 29px;\n            margin:-4px 0;\n            img{\n                max-width: 29px;\n                height: 29px;\n                line-height: 29px;    \n            }\n            &.#{$namespace}pull-left {\n                margin-right: 10px;\n            }\n            .#{$namespace}icon{\n                font-size: 29px;\n            }\n        }\n        .#{$namespace}media-body{\n            @include hairline(single, #c8c7cc, 55px); // single grey border.\n        }\n       &:after{\n           height:0!important;\n       }  \n    }\n}\n.#{$namespace}table-view.#{$namespace}unfold{\n    .#{$namespace}table-view-cell.#{$namespace}collapse .#{$namespace}table-view{\n        display: block;\n        &:before,&:after{\n            height:0!important;\n        } \n    }\n    .#{$namespace}table-view-cell.#{$namespace}media-icon.#{$namespace}collapse{\n        .#{$namespace}media-body{\n            @include hairline(single, #c8c7cc, 70px); // single grey border.\n        }\n    }\n}\n\n// Table-views with buttons, badges and switchs\n// --------------------------------------------------\n.#{$namespace}table-view-cell,\n.#{$namespace}table-view-cell > a {\n    > .#{$namespace}btn,\n    > .#{$namespace}badge,\n    > .#{$namespace}switch {\n        position: absolute;\n        top: 50%;\n        right: 15px;\n        @include transform(translateY(-50%));\n    }\n\n    // If the cell has a chevron, give some more room.\n    .#{$namespace}navigate-right,\n    .#{$namespace}push-left,\n    .#{$namespace}push-right {\n        > .#{$namespace}btn,\n        > .#{$namespace}badge,\n        > .#{$namespace}switch {\n            right: 35px;\n        }\n    }\n}\n\n// If the table view is the first component, give it extra margin on top.\n.#{$namespace}content > .#{$namespace}table-view:first-child {\n    margin-top: 15px;\n}\n\n//collapse\n.#{$namespace}table-view-cell.#{$namespace}collapse{\n    .#{$namespace}table-view{\n         &:before,&:after{\n            height:0;\n        }\n        .#{$namespace}table-view-cell:last-child:after{\n            height:0;\n        }\n    }\n    //二级列表默认为向下箭头；\n    >.#{$namespace}navigate-right:after, >.#{$namespace}push-right:after {\n        content: '\\e581';\n    }\n\n    &.#{$namespace}active{\n        margin-top: -1px;\n        .#{$namespace}table-view,.#{$namespace}collapse-content{\n            display: block;\n        }\n        //二级列表展开后，变为向上箭头；\n        >.#{$namespace}navigate-right:after, >.#{$namespace}push-right:after {\n            content: '\\e580';\n        }\n        //二级列表展开后，高亮时宽度100%\n        .#{$namespace}table-view-cell>a:not(.#{$namespace}btn).#{$namespace}active{\n            margin-left: -31px;\n            padding-left: 47px;\n        }\n    }\n    .#{$namespace}collapse-content{\n        display:none;\n        padding: 8px 15px;\n        margin: 11px -15px -11px;\n        background: white;\n//      border: 1px solid #ddd;\n        position: relative;\n        overflow: hidden;\n        -webkit-transition: height .35s ease;\n        -o-transition: height .35s ease;\n        transition: height .35s ease;\n        >.#{$namespace}input-group,>.#{$namespace}slider{\n            margin:-8px -15px;\n            width:auto;\n            height:auto;\n        }\n        >.#{$namespace}slider{\n            margin:-8px -16px;\n        }\n    }\n    .#{$namespace}table-view{\n        display: none;\n        margin-bottom: -11px;\n        margin-top: 11px;\n        margin-right: -15px;\n        margin-left:-15px;\n        border: 0;\n        &.#{$namespace}table-view-chevron{\n            margin-right:-65px;\n        }\n        .#{$namespace}table-view-cell{\n            padding-left: 31px;\n            background-position: 31px 100%;\n            @include hairline(single, #c8c7cc, 30px);\n        }\n    }\n}\n//grid\n.#{$namespace}table-view.#{$namespace}grid-view{\n    display:block;\n    padding:0 10px 10px 0;\n    width:100%;\n    white-space:normal;\n    font-size:0;\n    .#{$namespace}table-view-cell{\n        font-size: $font-size-default;\n        display: inline-block;\n        padding:10px 0 0 14px;\n        background:none;\n        text-align:center;\n        vertical-align: middle;\n        margin-right:-4px;\n        .#{$namespace}media-object{\n            width:100%;\n            max-width:100%;\n            height: auto;\n        }\n        > a:not(.#{$namespace}btn){\n            margin:-10px 0 0 -14px;\n            &:active,&.#{$namespace}active{\n                background: none;\n            }\n        }\n        .#{$namespace}media-body{\n            display: block;\n            height: 15px;\n            line-height: 15px;\n            color:#333;\n            font-size: 15px;\n            margin-top:8px;\n            width:100%;\n            text-overflow: ellipsis;\n        }\n        &:before,&:after{\n            height:0;\n        }\n    }\n}\n//grid-9\n.#{$namespace}grid-view.#{$namespace}grid-9{\n    background-color: #f2f2f2;\n    padding: 0;\n    margin:0;\n    border-left:1px solid #EEE;\n    border-top:1px solid #EEE;\n    @include clearfix();\n    &:after{\n        position:static;\n    }\n    .#{$namespace}table-view-cell {\n        vertical-align: top;\n        padding:11px 15px;\n        margin:0;\n        border-right: 1px solid #EEE;\n        border-bottom: 1px solid #EEE;\n        &.#{$namespace}active{\n            background-color:#eee;\n        }\n        > a:not(.#{$namespace}btn){\n              padding: 10px 0;\n              margin: 0;\n        }\n    }\n    &:before{\n        height: 0;\n    }\n    .#{$namespace}media {\n        color: #797979;\n        .#{$namespace}icon{\n            font-size: 2.4em;\n            position: relative;\n        }\n    }\n}"
  },
  {
    "path": "sass/toast.scss",
    "content": ".#{$namespace}toast-container {\n\tline-height:17px;\n\tposition: fixed;\n\tbottom: 50px;\n\tz-index: z(\"toast\");\n\topacity: 0;\n\tleft:50%;\n\t-webkit-transform:translate(-50%,0);\n\ttransform:translate(-50%,0);\n\t-webkit-transition: opacity .3s;\n    transition: opacity .3s;\n\t&.#{$namespace}active{\n\t    opacity: .9;\n\t}\n}\n.#{$namespace}toast-message {\n\tpadding: 10px 25px;\n\tbackground-color: #323232;\n\ttext-align: center;\n\tcolor: #fff;\n\tborder-radius: 6px;\n\tfont-size: 14px;\n}"
  },
  {
    "path": "sass/type.scss",
    "content": "//\n// Typography\n// --------------------------------------------------\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 5px;\n  margin-bottom: 5px;\n  line-height: 1;\n}\nh1, .#{$namespace}h1 { font-size: 36px; }\nh2, .#{$namespace}h2 { font-size: 30px; }\nh3, .#{$namespace}h3 { font-size: 24px; }\nh4, .#{$namespace}h4 { font-size: 18px; }\nh5, .#{$namespace}h5 { font-size: 14px; color: #8f8f94;font-weight: normal; }\nh6, .#{$namespace}h6 { font-size: 12px; color: #8f8f94;font-weight: normal; }\n\n// Paragraphs\np {\n  margin-top: 0;\n  margin-bottom: 10px;\n  font-size: 14px;\n  color: #8f8f94;\n}\n"
  },
  {
    "path": "sass/variables.scss",
    "content": "//\n// Variables\n// --------------------------------------------------\n$namespace: \"mui-\" !default;\n\n// Type\n// --------------------------------------------------\n$font-family-default: \"Helvetica Neue\", Helvetica, sans-serif !default;\n$font-size-default: 17px !default;\n$font-weight: 500 !default;\n$font-weight-light: 400 !default;\n$line-height-default: 21px !default;\n\n\n// Colors\n// --------------------------------------------------\n\n// Main theme colors\n//blue theme\n$primary-color: #007aff !default;\n//green theme\n//$primary-color: #4cd964 !default;\n//$chrome-color:  rgba(247,247,247,.98) !default;\n$chrome-color:  rgb(247,247,247) !default;\n\n// Action colors\n$default-color:  #929292 !default;\n$positive-color: #4cd964 !default;\n$negative-color: #dd524d !default;\n$warning-color: #f0ad4e !default;\n$royal-color: #8a6de9 !default;\n$grey-color:#c7c7cc !default;\n\n\n// Bars\n// --------------------------------------------------\n\n$bar-base-height:  44px !default;\n$bar-tab-height:   50px !default;\n$bar-side-spacing: 10px !default;\n\n\n// Cards\n// --------------------------------------------------\n\n$card-bg: #fff !default;\n$card-margin:10px !default;\n$card-border-radius:2px !default;\n$card-font-size:14px !default;\n$card-media-body-margin-left:44px !default;\n$card-footer-color:#6d6d72 !default;\n\n\n// Buttons\n// --------------------------------------------------\n\n$button-font-size: 14px !default;\n\n\n// Transitions\n// --------------------------------------------------\n\n$timing-fuction: cubic-bezier(.1,.5,.1,1) !default; // Inspired by @c2prods\n\n\n// Borders\n// --------------------------------------------------\n\n$border-default: 1px solid #ddd !default;\n$border-radius: 6px !default;\n"
  },
  {
    "path": "template/feedback/css/feedback.css",
    "content": "/*!\n * ======================================================\n * FeedBack Template For MUI (http://dev.dcloud.net.cn/mui)\n * =======================================================\n * @version:1.0.0\n * @author:cuihongbao@dcloud.io\n */\n\n.feedback body {\n\tbackground-color: #EFEFF4;\n}\n.feedback input,\n.feedback textarea {\n\tborder: none !important;\n}\n.feedback textarea {\n\theight: 100px;\n\tmargin-bottom: 0 !important;\n\tpadding-bottom: 0 !important;\n}\n.feedback .row {\n\twidth: 100%;\n\tbackground-color: #fff;\n}\n.feedback p {\n\tpadding: 10px 15px 0;\n}\n/*.feedback button#submit { \r\n\twidth: 90%;\r\n\theight: 46px;\r\n\tleft: 50%;\r\n\t-webkit-transform: translate(-50%);\r\n}*/\n\ninput::-webkit-input-placeholder,textarea::-webkit-input-placeholder{\n\tfont-size: 14px;\n}\n\n.feedback .hidden {\n\tdisplay: none;\n}\n.feedback .image-list {\n\twidth: 100%;\n\theight: 85px;\n\tbackground-size: cover;\n\tpadding: 10px 10px;\n\toverflow: hidden;\n}\n.feedback .image-item {\n\twidth: 65px;\n\theight: 65px;\n\t/*background-image: url(../images/iconfont-tianjia.png);*/\n\tbackground-size: 100% 100%;\n\tdisplay: inline-block;\n\tposition: relative;\n\tborder-radius: 5px;\n\tmargin-right: 10px;\n\tmargin-bottom: 10px;\n\tborder: solid 1px #e8e8e8;\n\tvertical-align: top;\n}\n.feedback .image-item .file {\n\tposition: absolute;\n\tleft: 0px;\n\ttop: 0px;\n\twidth: 100%;\n\theight: 100%;\n\topacity: 0;\n\tcursor: pointer;\n\tz-index: 0;\n}\n.feedback .image-item.space {\n\tborder: none;\n}\n.feedback .image-item .image-close {\n\tposition: absolute;\n\tdisplay: inline-block;\n\tright: -6px;\n\ttop: -6px;\n\twidth: 20px;\n\theight: 20px;\n\ttext-align: center;\n\tline-height: 20px;\n\tborder-radius: 12px;\n\tbackground-color: #FF5053;\n\tcolor: #f3f3f3;\n\tborder: solid 1px #FF5053;\n\tfont-size: 9px;\n\tfont-weight: 200;\n\tz-index: 1;\n}\n.feedback .image-item .image-up{\n\theight: 65px;\n\twidth: 65px;\n\tborder-radius: 10px;\n\tline-height: 65px;\n\tborder: 1px solid #ccc;\n\tcolor: #ccc; \n\tdisplay: inline-block;\n\ttext-align: center;\n}\n.feedback .image-item .image-up:after{\n\tfont-family: \"微软雅黑\";\n\tcontent: '+';\n\tfont-size: 60px;\n}\n.feedback .image-item.space .image-close {\n\tdisplay: none;\n}\n.feedback .mui-inline{\r\n\tvertical-align: bottom;\n\tfont-size: 14px;\n\tcolor: #8f8f94;\r\n}\n.mui-icon-star{\n\tcolor: #B5B5B5;\n\tfont-size: 22px;\n}\n.mui-icon-star-filled{\n\tcolor: #FFB400;\n\tfont-size: 22px;\n} \n.mui-popover {\n\theight: 180px;\n}\n.stream{\n\tdisplay: none;\n}\n.mui-plus-stream .stream{\n\tdisplay: block;\n}\n"
  },
  {
    "path": "template/feedback/feedback.html",
    "content": "<!doctype html>\n<html lang=\"en\" class=\"feedback\">\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n\t\t<title>问题反馈</title>\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"css/mui.min.css\" />\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"css/feedback.css\" />\n\t</head>\n\n\t<body>\n\t\t<header class=\"mui-bar mui-bar-nav\">\n\t\t\t<a class=\"mui-action-back mui-icon mui-icon-left-nav mui-pull-left\"></a>\n\t\t\t<button id=\"submit\" class=\"mui-btn mui-btn-blue mui-btn-link mui-pull-right\">发送</button>\n\t\t\t<h1 class=\"mui-title\">问题反馈</h1>\n\t\t</header>\n\t\t<div class=\"mui-content\">\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<div class=\"mui-inline\">问题和意见</div>\n\t\t\t\t<a class=\"mui-pull-right mui-inline\" href=\"#popover\">\n\t\t\t\t\t快捷输入\n\t\t\t\t\t<span class=\"mui-icon mui-icon-arrowdown\"></span>\n\t\t\t\t</a>\n\t\t\t\t<!--快捷输入具体内容，开发者可自己替换常用语-->\n\t\t\t\t<div id=\"popover\" class=\"mui-popover\">\n\t\t\t\t\t<div class=\"mui-popover-arrow\"></div>\n\t\t\t\t\t<div class=\"mui-scroll-wrapper\">\n\t\t\t\t\t\t<div class=\"mui-scroll\">\n\t\t\t\t\t\t\t<ul class=\"mui-table-view\">\n\t\t\t\t\t\t\t\t<!--仅流应用环境下显示-->\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell stream\">\n\t\t\t\t\t\t\t\t\t<a href=\"#\">桌面快捷方式创建失败</a>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">界面显示错乱</a></li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">启动缓慢，卡出翔了</a></li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">偶发性崩溃</a></li>\n\t\t\t\t\t\t\t\t<li class=\"mui-table-view-cell\"><a href=\"#\">UI无法直视，丑哭了</a></li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"row mui-input-row\">\n\t\t\t\t<textarea id='question' class=\"mui-input-clear question\" placeholder=\"请详细描述你的问题和意见...\"></textarea>\n\t\t\t</div>\n\t\t\t<p>图片(选填,提供问题截图,总大小10M以下)</p>\n\t\t\t<div id='image-list' class=\"row image-list\"></div>\n\t\t\t<p>QQ/邮箱</p>\n\t\t\t<div class=\"mui-input-row\">\n\t\t\t\t<input id='contact' type=\"text\" class=\"mui-input-clear contact\" placeholder=\"(选填,方便我们联系你 )\" />\n\t\t\t</div>\n\t\t\t<div class=\"mui-content-padded\">\n\t\t\t\t<div class=\"mui-inline\">应用评分</div>\n\t\t\t\t<div class=\"icons mui-inline\" style=\"margin-left: 6px;\">\n\t\t\t\t\t<i data-index=\"1\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t<i data-index=\"2\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t<i data-index=\"3\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t<i data-index=\"4\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t\t<i data-index=\"5\" class=\"mui-icon mui-icon-star\"></i>\n\t\t\t\t</div>\n\t\t\t</div><br />\n\t\t</div>\n\t\t<script src=\"js/mui.min.js\"></script>\n\t\t<script src=\"js/feedback.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tmui.init();\n\t\t\tmui('.mui-scroll-wrapper').scroll();\n\t\t</script>\n\t</body>\n\n</html>"
  },
  {
    "path": "template/feedback/js/feedback.js",
    "content": "/*!\n * ======================================================\n * FeedBack Template For MUI (http://dev.dcloud.net.cn/mui)\n * =======================================================\n * @version:1.0.0\n * @author:cuihongbao@dcloud.io\n */\n(function() {\n\tvar index = 1;\n\tvar size = null;\n\tvar imageIndexIdNum = 0;\n\tvar starIndex = 0;\n\tvar feedback = {\n\t\tquestion: document.getElementById('question'), \n\t\tcontact: document.getElementById('contact'), \n\t\timageList: document.getElementById('image-list'),\n\t\tsubmitBtn: document.getElementById('submit')\n\t};\n\tvar url = 'https://service.dcloud.net.cn/feedback';\n\tfeedback.files = [];\n\tfeedback.uploader = null;  \n\tfeedback.deviceInfo = null; \n\tmui.plusReady(function() {\n\t\t//设备信息，无需修改\n\t\tfeedback.deviceInfo = {\n\t\t\tappid: plus.runtime.appid, \n\t\t\timei: plus.device.imei, //设备标识\n\t\t\timages: feedback.files, //图片文件\n\t\t\tp: mui.os.android ? 'a' : 'i', //平台类型，i表示iOS平台，a表示Android平台。\n\t\t\tmd: plus.device.model, //设备型号\n\t\t\tapp_version: plus.runtime.version,\n\t\t\tplus_version: plus.runtime.innerVersion, //基座版本号\n\t\t\tos:  mui.os.version,\n\t\t\tnet: ''+plus.networkinfo.getCurrentType()\n\t\t}\n\t});\n\t/**\n\t *提交成功之后，恢复表单项 \n\t */\n\tfeedback.clearForm = function() {\n\t\tfeedback.question.value = '';\n\t\tfeedback.contact.value = '';\n\t\tfeedback.imageList.innerHTML = '';\n\t\tfeedback.newPlaceholder();\n\t\tfeedback.files = [];\n\t\tindex = 0;\n\t\tsize = 0;\n\t\timageIndexIdNum = 0;\n\t\tstarIndex = 0;\n\t\t//清除所有星标\n\t\tmui('.icons i').each(function (index,element) {\n\t\t\tif (element.classList.contains('mui-icon-star-filled')) {\n\t\t\t\telement.classList.add('mui-icon-star')\n\t  \t\t\telement.classList.remove('mui-icon-star-filled')\n\t\t\t}\n\t\t})\n\t};\n\tfeedback.getFileInputArray = function() {\n\t\treturn [].slice.call(feedback.imageList.querySelectorAll('.file'));\n\t};\n\tfeedback.addFile = function(path) {\n\t\tfeedback.files.push({name:\"images\"+index,path:path});\n\t\tindex++;\n\t};\n\t/**\n\t * 初始化图片域占位\n\t */\n\tfeedback.newPlaceholder = function() {\n\t\tvar fileInputArray = feedback.getFileInputArray();\n\t\tif (fileInputArray &&\n\t\t\tfileInputArray.length > 0 &&\n\t\t\tfileInputArray[fileInputArray.length - 1].parentNode.classList.contains('space')) {\n\t\t\treturn;\n\t\t};\n\t\timageIndexIdNum++;\n\t\tvar placeholder = document.createElement('div');\n\t\tplaceholder.setAttribute('class', 'image-item space');\n\t\tvar up = document.createElement(\"div\");\n\t\tup.setAttribute('class','image-up')\n\t\t//删除图片\n\t\tvar closeButton = document.createElement('div');\n\t\tcloseButton.setAttribute('class', 'image-close');\n\t\tcloseButton.innerHTML = 'X';\n\t\t//小X的点击事件\n\t\tcloseButton.addEventListener('tap', function(event) {\n\t\t\tsetTimeout(function() {\n\t\t\t\tfeedback.imageList.removeChild(placeholder);\n\t\t\t}, 0);\n\t\t\treturn false;\n\t\t}, false);\n\t\t\n\t\t//\n\t\tvar fileInput = document.createElement('div');\n\t\tfileInput.setAttribute('class', 'file');\n\t\tfileInput.setAttribute('id', 'image-' + imageIndexIdNum);\n\t\tfileInput.addEventListener('tap', function(event) {\n\t\t\tvar self = this;\n\t\t\tvar index = (this.id).substr(-1);\n\t\t\t\n\t\t\tplus.gallery.pick(function(e) {\n//\t\t\t\tconsole.log(\"event:\"+e);\n\t\t\t\tvar name = e.substr(e.lastIndexOf('/') + 1);\n\t\t\t\tconsole.log(\"name:\"+name);\n\t\t\t\t\t\n\t\t\t\tplus.zip.compressImage({\n\t\t\t\t\tsrc: e,\n\t\t\t\t\tdst: '_doc/' + name,\n\t\t\t\t\toverwrite: true,\n\t\t\t\t\tquality: 50\n\t\t\t\t}, function(zip) {\n\t\t\t\t\tsize += zip.size  \n\t\t\t\t\tconsole.log(\"filesize:\"+zip.size+\",totalsize:\"+size);\n\t\t\t\t\tif (size > (10*1024*1024)) {\n\t\t\t\t\t\treturn mui.toast('文件超大,请重新选择~');\n\t\t\t\t\t}\n\t\t\t\t\tif (!self.parentNode.classList.contains('space')) { //已有图片\n\t\t\t\t\t\tfeedback.files.splice(index-1,1,{name:\"images\"+index,path:e});\n\t\t\t\t\t} else { //加号\n\t\t\t\t\t\tplaceholder.classList.remove('space');\n\t\t\t\t\t\tfeedback.addFile(zip.target);\n\t\t\t\t\t\tfeedback.newPlaceholder();\n\t\t\t\t\t}\n\t\t\t\t\tup.classList.remove('image-up');\n\t\t\t\t\tplaceholder.style.backgroundImage = 'url(' + zip.target + ')';\n\t\t\t\t}, function(zipe) {\n\t\t\t\t\tmui.toast('压缩失败！')\n\t\t\t\t});\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t}, function(e) {\n\t\t\t\tmui.toast(e.message);\n\t\t\t},{});\n\t\t}, false);\n\t\tplaceholder.appendChild(closeButton);\n\t\tplaceholder.appendChild(up);\n\t\tplaceholder.appendChild(fileInput);\n\t\tfeedback.imageList.appendChild(placeholder);\n\t};\n\tfeedback.newPlaceholder();\n\tfeedback.submitBtn.addEventListener('tap', function(event) {\n\t\tif (feedback.question.value == '' ||\n\t\t\t(feedback.contact.value != '' &&\n\t\t\t\tfeedback.contact.value.search(/^(\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+)|([1-9]\\d{4,9})$/) != 0)) {\n\t\t\treturn mui.toast('信息填写不符合规范');\n\t\t}\n\t\tif (feedback.question.value.length > 200 || feedback.contact.value.length > 200) {\n\t\t\treturn mui.toast('信息超长,请重新填写~')\n\t\t}\n\t\t//判断网络连接\n\t\tif(plus.networkinfo.getCurrentType()==plus.networkinfo.CONNECTION_NONE){\n\t\t\treturn mui.toast(\"连接网络失败，请稍后再试\");\n\t\t}\n\t\tfeedback.send(mui.extend({}, feedback.deviceInfo, {\n\t\t\tcontent: feedback.question.value,\n\t\t\tcontact: feedback.contact.value,\n\t\t\timages: feedback.files,\n\t\t\tscore:''+starIndex\n\t\t})) \n\t}, false)\n\tfeedback.send = function(content) {\n\t\tfeedback.uploader = plus.uploader.createUpload(url, {\n\t\t\tmethod: 'POST'\n\t\t}, function(upload, status) {\n//\t\t\tplus.nativeUI.closeWaiting()\n\t\t\tconsole.log(\"upload cb:\"+upload.responseText);\n\t\t\tif(status==200){\n\t\t\t\tvar data = JSON.parse(upload.responseText);\n\t\t\t\t//上传成功，重置表单\n\t\t\t\tif (data.ret === 0 && data.desc === 'Success') {\n//\t\t\t\t\tmui.toast('反馈成功~')\n\t\t\t\t\tconsole.log(\"upload success\");\n//\t\t\t\t\tfeedback.clearForm();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.log(\"upload fail\");\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t//添加上传数据\n\t\tmui.each(content, function(index, element) {\n\t\t\tif (index !== 'images') {\n\t\t\t\tconsole.log(\"addData:\"+index+\",\"+element);\n//\t\t\t\tconsole.log(index);\n\t\t\t\tfeedback.uploader.addData(index, element)\n\t\t\t} \n\t\t});\n\t\t//添加上传文件\n\t\tmui.each(feedback.files, function(index, element) {\n\t\t\tvar f = feedback.files[index];\n\t\t\tconsole.log(\"addFile:\"+JSON.stringify(f));\n\t\t\tfeedback.uploader.addFile(f.path, {\n\t\t\t\tkey: f.name\n\t\t\t});\n\t\t});\n\t\t//开始上传任务\n\t\tfeedback.uploader.start();\n\t\tmui.alert(\"感谢反馈，点击确定关闭\",\"问题反馈\",\"确定\",function () {\n\t\t\tfeedback.clearForm();\n\t\t\tmui.back();\n\t\t});\n//\t\tplus.nativeUI.showWaiting();\n\t};\n\t\n\t //应用评分\n\t mui('.icons').on('tap','i',function(){\n\t  \tvar index = parseInt(this.getAttribute(\"data-index\"));\n\t  \tvar parent = this.parentNode;\n\t  \tvar children = parent.children;\n\t  \tif(this.classList.contains(\"mui-icon-star\")){\n\t  \t\tfor(var i=0;i<index;i++){\n  \t\t\t\tchildren[i].classList.remove('mui-icon-star');\n  \t\t\t\tchildren[i].classList.add('mui-icon-star-filled');\n\t  \t\t}\n\t  \t}else{\n\t  \t\tfor (var i = index; i < 5; i++) {\n\t  \t\t\tchildren[i].classList.add('mui-icon-star')\n\t  \t\t\tchildren[i].classList.remove('mui-icon-star-filled')\n\t  \t\t}\n\t  \t}\n\t  \tstarIndex = index;\n  });\n  \t//选择快捷输入\n\tmui('.mui-popover').on('tap','li',function(e){\n\t  document.getElementById(\"question\").value = document.getElementById(\"question\").value + this.children[0].innerHTML;\n\t  mui('.mui-popover').popover('toggle')\n\t}) \n})();"
  },
  {
    "path": "template/feedback/readme.md",
    "content": "# 问题反馈云服务上线\n\n为简化广大开发者的开发工作量，HBuilder 7.2.0版本发布了问题反馈云服务，大家在HBuilder中选择问题反馈模板，直接集成使用，然后登陆DCloud开发者中心，就可以查看用户的反馈情况。整个过程基本无需开发，即可实现问题反馈全流程的功能。\n\n![image](http://7rflw8.com1.z0.glb.clouddn.com//mui/templatefeedback02.png)\n\n## 客户端集成\n在HBuilder中新建HTML页面，选择“问题反馈”模板，如下图所示：\n\n![image](http://7rflw8.com1.z0.glb.clouddn.com/feedback01.png)\n\n会自动生成问题反馈模板所需的html、js、css资源文件；\n\n问题反馈模板依赖mui框架，请注意修改mui.min.js及mui.min.css的引用路径，其它代码无需修改即可直接使用。\n\n###快捷输入\n反馈模板将软件使用中的常见问题，整理成了“快捷输入”功能，如下图所示：\n\n![image](http://7rflw8.com1.z0.glb.clouddn.com//mui/templatefeedback03.png)\n\n用户点击快捷输入中的项，可以直接将该短语插入到“问题和意见”输入框中。开发者可根据实际情况修改常见问题，变成新的常用语，无需其它JS逻辑。\n\n## 云端查看反馈数据\n\n开发者使用 HBuilder 账号或 ASK 社区账号登录 [开发者中心](https://dev.dcloud.net.cn) 。\n\n登录成功后如下图所示：\n\n![image](http://7rflw8.com2.z0.glb.clouddn.com/dev_index.png)\n\n### 问题反馈列表\n\n点击列表中的应用名称进入二级页面，点击左侧导航“问题反馈”，进入问题反馈列表，如下图所示：\n\n![image](http://7rflw8.com2.z0.glb.clouddn.com/feedback_list.png)\n\n说明：列表中内容为**粗体**的表示未读内容。\n\n### 问题详情\n\n点击问题列表中的内容列，可以查看反馈问题的详细信息，如下图所示：\n\n![image](http://7rflw8.com2.z0.glb.clouddn.com/feedback_detail.png)\n\n在详情页面可以设置该问题的解决方案，如图中红框部分所示。\n\n\n\n"
  }
]