Repository: dcloudio/mui
Branch: master
Commit: e216655901e5
Files: 281
Total size: 3.9 MB
Directory structure:
gitextract_066cprrn/
├── .gitignore
├── Gruntfile.js
├── LICENSE
├── README.md
├── dist/
│ ├── css/
│ │ └── mui.css
│ └── js/
│ └── mui.js
├── examples/
│ ├── hello-mui/
│ │ ├── .project
│ │ ├── css/
│ │ │ ├── app.css
│ │ │ ├── feedback.css
│ │ │ ├── icons-extra.css
│ │ │ ├── mui.dtpicker.css
│ │ │ ├── mui.imageviewer.css
│ │ │ ├── mui.indexedlist.css
│ │ │ ├── mui.listpicker.css
│ │ │ ├── mui.picker.all.css
│ │ │ ├── mui.picker.css
│ │ │ └── mui.poppicker.css
│ │ ├── examples/
│ │ │ ├── accordion.html
│ │ │ ├── actionsheet-plus.html
│ │ │ ├── actionsheet.html
│ │ │ ├── ad.html
│ │ │ ├── ajax.html
│ │ │ ├── badges.html
│ │ │ ├── best-practices/
│ │ │ │ └── list-to-detail/
│ │ │ │ ├── detail.html
│ │ │ │ ├── list-to-detail.css
│ │ │ │ └── listview.html
│ │ │ ├── buttons-with-badges.html
│ │ │ ├── buttons-with-block.html
│ │ │ ├── buttons-with-icons.html
│ │ │ ├── buttons-with-loading.html
│ │ │ ├── buttons.html
│ │ │ ├── card.html
│ │ │ ├── checkbox.html
│ │ │ ├── date.html
│ │ │ ├── dialog.html
│ │ │ ├── dtpicker.html
│ │ │ ├── echarts.html
│ │ │ ├── feedback.html
│ │ │ ├── grid-default.html
│ │ │ ├── grid-pagination.html
│ │ │ ├── guide.html
│ │ │ ├── icons-extra.html
│ │ │ ├── icons.html
│ │ │ ├── im-chat.html
│ │ │ ├── imageviewer-native.html
│ │ │ ├── imageviewer.html
│ │ │ ├── indexed-list-select.html
│ │ │ ├── indexed-list.html
│ │ │ ├── info.html
│ │ │ ├── input.html
│ │ │ ├── lazyload-image.html
│ │ │ ├── list-triplex-row.html
│ │ │ ├── list-with-input.html
│ │ │ ├── locker-dom.html
│ │ │ ├── login.html
│ │ │ ├── media-list.html
│ │ │ ├── message-bottom.html
│ │ │ ├── modals.html
│ │ │ ├── nav-nativeObj.html
│ │ │ ├── nav.html
│ │ │ ├── nav_transparent.html
│ │ │ ├── nav_transparent_native.html
│ │ │ ├── numbox.html
│ │ │ ├── offcanvas-drag-down.html
│ │ │ ├── offcanvas-drag-left-plus-main.html
│ │ │ ├── offcanvas-drag-left-plus-menu.html
│ │ │ ├── offcanvas-drag-left.html
│ │ │ ├── offcanvas-drag-right-plus-main.html
│ │ │ ├── offcanvas-drag-right-plus-menu.html
│ │ │ ├── offcanvas-drag-right.html
│ │ │ ├── pagination.html
│ │ │ ├── picker.html
│ │ │ ├── popovers.html
│ │ │ ├── progressbar.html
│ │ │ ├── pullrefresh.html
│ │ │ ├── pullrefresh_main.html
│ │ │ ├── pullrefresh_sub.html
│ │ │ ├── pullrefresh_with_tab.html
│ │ │ ├── radio.html
│ │ │ ├── range.html
│ │ │ ├── setting.html
│ │ │ ├── slider-default.html
│ │ │ ├── slider-native.html
│ │ │ ├── slider-table-default.html
│ │ │ ├── slider-table-pagination.html
│ │ │ ├── slider-with-title.html
│ │ │ ├── switches.html
│ │ │ ├── tab-top-subpage-1.html
│ │ │ ├── tab-top-subpage-2.html
│ │ │ ├── tab-top-subpage-3.html
│ │ │ ├── tab-top-subpage-4.html
│ │ │ ├── tab-top-subpage-5.html
│ │ │ ├── tab-top-webview-main.html
│ │ │ ├── tab-vertical-scroll.html
│ │ │ ├── tab-webview-main.html
│ │ │ ├── tab-webview-subpage-about.html
│ │ │ ├── tab-webview-subpage-chat.html
│ │ │ ├── tab-webview-subpage-contact.html
│ │ │ ├── tab-webview-subpage-setting.html
│ │ │ ├── tab-with-segmented-control-vertical.html
│ │ │ ├── tab-with-segmented-control.html
│ │ │ ├── tab-with-viewpagerindicator.html
│ │ │ ├── tabbar-labels-only.html
│ │ │ ├── tabbar-with-submenus.html
│ │ │ ├── tabbar.html
│ │ │ ├── tableviews-with-badges.html
│ │ │ ├── tableviews-with-collapses.html
│ │ │ ├── tableviews-with-swipe.html
│ │ │ ├── tableviews.html
│ │ │ └── typography.html
│ │ ├── index-menu.html
│ │ ├── index.html
│ │ ├── js/
│ │ │ ├── 95516.js
│ │ │ ├── arttmpl.js
│ │ │ ├── beecloud.js
│ │ │ ├── city.data-3.js
│ │ │ ├── city.data.js
│ │ │ ├── feedback.js
│ │ │ ├── mui.dtpicker.js
│ │ │ ├── mui.imageViewer.js
│ │ │ ├── mui.indexedlist.js
│ │ │ ├── mui.js
│ │ │ ├── mui.lazyload.img.js
│ │ │ ├── mui.lazyload.js
│ │ │ ├── mui.listpicker.js
│ │ │ ├── mui.locker.js
│ │ │ ├── mui.picker.all.js
│ │ │ ├── mui.picker.js
│ │ │ ├── mui.poppicker.js
│ │ │ ├── mui.previewimage.js
│ │ │ ├── mui.pullToRefresh.js
│ │ │ ├── mui.pullToRefresh.material.js
│ │ │ ├── mui.view.js
│ │ │ ├── mui.zoom.js
│ │ │ ├── update.js
│ │ │ └── webviewGroup.js
│ │ ├── libs/
│ │ │ └── echarts-all.js
│ │ └── manifest.json
│ ├── login/
│ │ ├── .project
│ │ ├── README.md
│ │ ├── css/
│ │ │ ├── feedback-page.css
│ │ │ └── style.css
│ │ ├── forget_password.html
│ │ ├── js/
│ │ │ ├── app.js
│ │ │ ├── feedback-page.js
│ │ │ ├── feedback.js
│ │ │ ├── mui.enterfocus.js
│ │ │ ├── mui.locker.js
│ │ │ └── mui.view.js
│ │ ├── libs/
│ │ │ └── easymob-webim-sdk/
│ │ │ ├── easemob.im-1.0.5.js
│ │ │ ├── jquery-1.11.1.js
│ │ │ ├── json2.js
│ │ │ ├── quickstart.md
│ │ │ └── strophe-custom-2.0.0.js
│ │ ├── login.html
│ │ ├── main.html
│ │ ├── manifest.json
│ │ ├── reg.html
│ │ ├── setting.html
│ │ └── unlock.html
│ └── nativeTab/
│ ├── README.md
│ ├── css/
│ │ └── mui.css
│ ├── html/
│ │ ├── new-webview.html
│ │ ├── tab-webview-subpage-chat.html
│ │ └── tab-webview-subpage-contact.html
│ ├── index.html
│ ├── js/
│ │ ├── mui.js
│ │ └── util.js
│ ├── manifest.json
│ └── unpackage/
│ ├── .confirmed_dependencies
│ └── .dependencies
├── grunt/
│ └── mui-namespace-generator.js
├── js/
│ ├── actions.js
│ ├── ajax.plugin.js
│ ├── input.plugin.js
│ ├── modals.js
│ ├── mui.active.js
│ ├── mui.ajax.5+.js
│ ├── mui.ajax.js
│ ├── mui.animation.js
│ ├── mui.animationframe.js
│ ├── mui.back.5+.js
│ ├── mui.back.js
│ ├── mui.button.js
│ ├── mui.class.js
│ ├── mui.class.scroll.js
│ ├── mui.class.scroll.pullrefresh.js
│ ├── mui.class.scroll.slider.js
│ ├── mui.detect.5+.js
│ ├── mui.detect.js
│ ├── mui.dialog.alert.js
│ ├── mui.dialog.confirm.js
│ ├── mui.dialog.prompt.js
│ ├── mui.dialog.toast.js
│ ├── mui.event.js
│ ├── mui.fixed.animation.js
│ ├── mui.fixed.bind.js
│ ├── mui.fixed.classlist.js
│ ├── mui.fixed.fastclick.js
│ ├── mui.fixed.js
│ ├── mui.fixed.keyboard.js
│ ├── mui.gestures.drag.js
│ ├── mui.gestures.flick.js
│ ├── mui.gestures.hold.js
│ ├── mui.gestures.js
│ ├── mui.gestures.longtap.js
│ ├── mui.gestures.pinch.js
│ ├── mui.gestures.swipe.js
│ ├── mui.gestures.tap.js
│ ├── mui.init.5+.js
│ ├── mui.init.js
│ ├── mui.init.pullrefresh.js
│ ├── mui.js
│ ├── mui.jsonp.js
│ ├── mui.layout.js
│ ├── mui.namespace.js
│ ├── mui.number.js
│ ├── mui.offcanvas.js
│ ├── mui.popup.js
│ ├── mui.progressbar.js
│ ├── mui.pullrefresh.5+.js
│ ├── mui.pullrefresh.js
│ ├── mui.target.js
│ ├── mui.transparent.js
│ ├── popovers.js
│ ├── segmented-controllers.js
│ ├── sliders.js
│ ├── switches.js
│ └── tableviews.js
├── mui_snippets.rb
├── package.json
├── plugin/
│ ├── picker/
│ │ ├── css/
│ │ │ ├── mui.dtpicker.css
│ │ │ ├── mui.picker.css
│ │ │ └── mui.poppicker.css
│ │ ├── dist/
│ │ │ ├── css/
│ │ │ │ └── mui.picker.all.css
│ │ │ └── js/
│ │ │ └── mui.picker.all.js
│ │ ├── gulpfile.js
│ │ ├── js/
│ │ │ ├── mui.dtpicker.js
│ │ │ ├── mui.picker.js
│ │ │ └── mui.poppicker.js
│ │ └── package.json
│ └── share/
│ └── plusShare.js
├── sass/
│ ├── badges.scss
│ ├── bars.scss
│ ├── base.scss
│ ├── buttons.scss
│ ├── cards.scss
│ ├── forms.scss
│ ├── fullscreen.scss
│ ├── grid.scss
│ ├── hack.scss
│ ├── icon.scss
│ ├── iframe.scss
│ ├── iscroll.scss
│ ├── loadings.scss
│ ├── mixins.scss
│ ├── modals.scss
│ ├── mui.scss
│ ├── normalize.scss
│ ├── number.scss
│ ├── off-canvas.scss
│ ├── os.scss
│ ├── pagination.scss
│ ├── popovers.scss
│ ├── popup.scss
│ ├── progressbar.scss
│ ├── pullrefreshs.scss
│ ├── push.scss
│ ├── scroll.scss
│ ├── segmented-controls.scss
│ ├── slider-cell.scss
│ ├── sliders.scss
│ ├── switches.scss
│ ├── table-views.scss
│ ├── toast.scss
│ ├── type.scss
│ └── variables.scss
└── template/
└── feedback/
├── css/
│ └── feedback.css
├── feedback.html
├── js/
│ └── feedback.js
└── readme.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
.sass-cache
node_modules
sass/.csscomb.json
sass/.csslintrc
js/.jscsrc
js/.jshintrc
================================================
FILE: Gruntfile.js
================================================
/*!
* Mui's Gruntfile
*/
/* jshint node: true */
module.exports = function(grunt) {
'use strict';
// Force use of Unix newlines
grunt.util.linefeed = '\n';
RegExp.quote = function(string) {
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
};
var generateNamespace = require('./grunt/mui-namespace-generator.js');
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
// Metadata.
meta: {
libPath: 'lib/',
distPath: 'dist/',
jsPath: 'js/',
sassPath: 'sass/',
examplesPath: 'examples/hello-mui/'
},
banner: '/*!\n' +
' * =====================================================\n' +
' * Mui v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
' * =====================================================\n' +
' */\n',
clean: {
all: ['<%= meta.distPath %>'],
sourceMap: ['<%= meta.distPath %>css/*.map']
},
concat: {
mui: {
options: {
banner: '<%= banner %>'
},
src: [
'js/mui.js',
'js/mui.detect.js',
'js/mui.detect.5+.js',
'js/mui.event.js',
'js/mui.target.js',
'js/mui.fixed.js',
'js/mui.fixed.bind.js',
'js/mui.fixed.classlist.js',
'js/mui.fixed.animation.js',
'js/mui.fixed.fastclick.js',
'js/mui.fixed.keyboard.js',
'js/mui.namespace.js',
'js/mui.gestures.js',
'js/mui.gestures.flick.js',
'js/mui.gestures.swipe.js',
'js/mui.gestures.drag.js',
'js/mui.gestures.tap.js',
'js/mui.gestures.longtap.js',
'js/mui.gestures.hold.js',
'js/mui.gestures.pinch.js',
'js/mui.init.js',
'js/mui.init.5+.js',
'js/mui.back.js',
'js/mui.back.5+.js',
'js/mui.init.pullrefresh.js',
'js/mui.ajax.js',
'js/mui.ajax.5+.js',
'js/mui.layout.js',
'js/mui.animation.js',
'js/mui.class.js',
'js/mui.pullrefresh.js',
'js/mui.class.scroll.js',
'js/mui.class.scroll.pullrefresh.js',
'js/mui.class.scroll.slider.js',
'js/mui.pullrefresh.5+.js',
'js/mui.offcanvas.js',
'js/actions.js',
'js/modals.js',
'js/popovers.js',
'js/segmented-controllers.js',
'js/switches.js',
'js/tableviews.js',
'js/mui.dialog.alert.js',
'js/mui.dialog.confirm.js',
'js/mui.dialog.prompt.js',
'js/mui.dialog.toast.js',
'js/mui.popup.js',
'js/mui.progressbar.js',
'js/input.plugin.js',
'js/mui.transparent.js',
'js/mui.number.js',
'js/mui.button.js'
],
dest: '<%= meta.distPath %>js/<%= pkg.name %>.js',
}
},
sass: {
options: {
banner: '<%= banner %>',
style: 'expanded',
unixNewlines: true
},
dist: {
files: {
'<%= meta.distPath %>css/<%= pkg.name %>.css': 'sass/mui.scss',
}
}
},
csscomb: {
options: {
config: 'sass/.csscomb.json'
},
dist: {
files: {
'<%= meta.distPath %>/css/<%= pkg.name %>.css': '<%= meta.distPath %>/css/<%= pkg.name %>.css'
}
},
},
copy: {
fonts: {
expand: true,
src: 'fonts/mui*.ttf',
dest: '<%= meta.distPath %>/'
},
examples: {
expand: true,
cwd: '<%= meta.distPath %>',
src: ['**/mui*'],
dest: '<%= meta.examplesPath %>'
}
},
cssmin: {
options: {
banner: '', // set to empty; see bellow
keepSpecialComments: '*', // set to '*' because we already add the banner in sass
sourceMap: false
},
mui: {
src: '<%= meta.distPath %>css/<%= pkg.name %>.css',
dest: '<%= meta.distPath %>css/<%= pkg.name %>.min.css'
}
},
uglify: {
options: {
banner: '<%= banner %>',
compress: {},
mangle: true,
preserveComments: false
},
mui: {
src: '<%= concat.mui.dest %>',
dest: '<%= meta.distPath %>js/<%= pkg.name %>.min.js'
}
},
watch: {
options: {
dateFormat: function(time) {
grunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString());
grunt.log.writeln('Waiting for more changes...');
},
livereload: true
},
scripts: {
files: [
'<%= meta.sassPath %>/**/*.scss',
'<%= meta.jsPath %>/**/*.js',
],
tasks: 'dist'
}
},
jshint: {
options: {
jshintrc: 'js/.jshintrc'
},
grunt: {
src: ['Gruntfile.js', 'grunt/*.js']
},
src: {
src: 'js/*.js'
}
},
jscs: {
options: {
config: 'js/.jscsrc'
},
grunt: {
src: '<%= jshint.grunt.src %>'
},
src: {
src: '<%= jshint.src.src %>'
},
docs: {
src: '<%= jshint.docs.src %>'
}
},
csslint: {
options: {
csslintrc: 'sass/.csslintrc'
},
src: [
'<%= meta.distPath %>/css/<%= pkg.name %>.css',
]
},
sed: {
versionNumber: {
pattern: (function() {
var old = grunt.option('oldver');
return old ? RegExp.quote(old) : old;
})(),
replacement: grunt.option('newver'),
recursive: true
}
}
});
// Load the plugins
require('load-grunt-tasks')(grunt, {
scope: 'devDependencies'
});
require('time-grunt')(grunt);
// Default task(s).
grunt.registerTask('cleanAll', ['clean']);
grunt.registerTask('dist-css', ['sass', 'csscomb', 'cssmin', 'clean:sourceMap']);
grunt.registerTask('dist-js', ['concat', 'build-namespace', 'uglify']);
grunt.registerTask('dist', ['clean:all', 'dist-css', 'dist-js', 'copy']);
grunt.registerTask('build', ['dist']);
grunt.registerTask('default', ['dist']);
grunt.registerTask('build-namespace', generateNamespace);
grunt.registerTask('server', ['dist','watch']);
// Version numbering task.
// grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
// This can be overzealous, so its changes should always be manually reviewed!
grunt.registerTask('change-version-number', 'sed');
grunt.event.on('watch', function(action, filepath, target) {
grunt.log.writeln(target + ': ' + filepath + ' has ' + action);
});
};
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2014 connors and other contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================
mui
===
性能和体验的差距,一直是mobile app开发者放弃HTML5的首要原因。 浏览器天生的切页白屏、不忍直视的转页动画、浮动元素的抖动、无法流畅下拉刷新等问题,这些都让HTML5开发者倍感挫败,尤其拿到Android低端机运行,摔手机的心都有; 另一方面,浏览器默认控件样式又少又丑,制作一个漂亮的控件非常麻烦,也有一些制作简单的ui框架但性能低下。
mui框架有效的解决了这些问题,这是一个可以方便开发出高性能App的框架,也是目前最接近原生App效果的框架。
赞助我们
------
一个手艺人需要3万个粉丝养活,希望你能成为其中之一,[前往赞助](https://dev.dcloud.net.cn/sponsor/?channel=mui)
参考文档
------
[mui官网](http://dev.dcloud.net.cn/mui/)文档使用[Jekyll](http://jekyllrb.com) 构建,[立即查看](http://dev.dcloud.net.cn/mui/)。
快速体验
--------
[在线下载](http://www.dcloud.io/hellomui)或扫描如下二维码下载Hello MUI,可在手机上体验MUI的控件UI及能力展示;
在线交流
--------
若你在使用过程中有任何经验、想法、疑惑,都可以在[问答社区](http://ask.dcloud.net.cn/topic/mui) 发起文章,和其它mui用户一起交流;
License
-------
mui遵循MIT License;
开发工具
-------
mui组件已被封装成[HBuilder](http://www.dcloud.io)代码块,只需要简单几个字符,就可以快速生成各个组件对应的HTML代码,因此和[Hbuilder](http://www.dcloud.io)两个一起用,效果会更好;
================================================
FILE: dist/css/mui.css
================================================
/*!
* =====================================================
* Mui v3.7.3 (http://dev.dcloud.net.cn/mui)
* =====================================================
*/
/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
html
{
font-family: sans-serif;
-webkit-text-size-adjust: 100%;
}
body
{
margin: 0;
}
body::after
{
position: fixed;
top: -1000px;
left: -1000px;
content: '';
-webkit-animation: shadow-preload .1s;
animation: shadow-preload .1s;
-webkit-animation-delay: 3s;
animation-delay: 3s;
}
@-webkit-keyframes shadow-preload
{
0%
{
background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);
}
100%
{
background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);
}
}
@keyframes shadow-preload
{
0%
{
background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);
}
100%
{
background-image: url(https://cdn.dcloud.net.cn/img/mui-shadow-grey.png);
}
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary
{
display: block;
}
audio,
canvas,
progress,
video
{
display: inline-block;
vertical-align: baseline;
}
audio:not([controls])
{
display: none;
height: 0;
}
[hidden],
template
{
display: none;
}
a
{
background: transparent;
}
a:active,
a:hover
{
outline: 0;
}
abbr[title]
{
border-bottom: 1px dotted;
}
b,
strong
{
font-weight: bold;
}
dfn
{
font-style: italic;
}
h1
{
font-size: 2em;
margin: .67em 0;
}
mark
{
color: #000;
background: #ff0;
}
small
{
font-size: 80%;
}
sub,
sup
{
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup
{
top: -.5em;
}
sub
{
bottom: -.25em;
}
img
{
border: 0;
}
svg:not(:root)
{
overflow: hidden;
}
figure
{
margin: 1em 40px;
}
hr
{
box-sizing: content-box;
height: 0;
}
pre
{
overflow: auto;
}
code,
kbd,
pre,
samp
{
font-family: monospace, monospace;
font-size: 1em;
}
button,
input,
optgroup,
select,
textarea
{
font: inherit;
margin: 0;
color: inherit;
}
button
{
overflow: visible;
}
button,
select
{
text-transform: none;
}
button,
html input[type='button'],
input[type='reset'],
input[type='submit']
{
cursor: pointer;
-webkit-appearance: button;
}
button[disabled],
html input[disabled]
{
cursor: default;
}
input
{
line-height: normal;
}
input[type='checkbox'],
input[type='radio']
{
box-sizing: border-box;
padding: 0;
}
input[type='number']::-webkit-inner-spin-button,
input[type='number']::-webkit-outer-spin-button
{
height: auto;
}
input[type='search']
{
-webkit-box-sizing: content-box;
box-sizing: content-box;
-webkit-appearance: textfield;
}
input[type='search']::-webkit-search-cancel-button,
input[type='search']::-webkit-search-decoration
{
-webkit-appearance: none;
}
fieldset
{
margin: 0 2px;
padding: .35em .625em .75em;
border: 1px solid #c0c0c0;
}
legend
{
padding: 0;
border: 0;
}
textarea
{
overflow: auto;
}
optgroup
{
font-weight: bold;
}
table
{
border-spacing: 0;
border-collapse: collapse;
}
td,
th
{
padding: 0;
}
*
{
-webkit-box-sizing: border-box;
box-sizing: border-box;
-webkit-user-select: none;
outline: none;
-webkit-tap-highlight-color: transparent;
-webkit-tap-highlight-color: transparent;
}
body
{
font-family: 'Helvetica Neue', Helvetica, sans-serif;
font-size: 17px;
line-height: 21px;
color: #000;
background-color: #efeff4;
-webkit-overflow-scrolling: touch;
}
a
{
text-decoration: none;
color: #007aff;
}
a:active
{
color: #0062cc;
}
.mui-content
{
background-color: #efeff4;
-webkit-overflow-scrolling: touch;
}
.mui-bar-nav ~ .mui-content
{
padding-top: 44px;
}
.mui-bar-nav ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical
{
top: 44px;
}
.mui-bar-header-secondary ~ .mui-content
{
padding-top: 88px;
}
.mui-bar-header-secondary ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical
{
top: 88px;
}
.mui-bar-footer ~ .mui-content
{
padding-bottom: 44px;
}
.mui-bar-footer ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical
{
bottom: 44px;
}
.mui-bar-footer-secondary ~ .mui-content
{
padding-bottom: 88px;
}
.mui-bar-footer-secondary ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical
{
bottom: 88px;
}
.mui-bar-tab ~ .mui-content
{
padding-bottom: 50px;
}
.mui-bar-tab ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical
{
bottom: 50px;
}
.mui-bar-footer-secondary-tab ~ .mui-content
{
padding-bottom: 94px;
}
.mui-bar-footer-secondary-tab ~ .mui-content.mui-scroll-wrapper .mui-scrollbar-vertical
{
bottom: 94px;
}
.mui-content-padded
{
margin: 10px;
}
.mui-inline
{
display: inline-block;
vertical-align: top;
}
.mui-block
{
display: block !important;
}
.mui-visibility
{
visibility: visible !important;
}
.mui-hidden
{
display: none !important;
}
.mui-ellipsis
{
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.mui-ellipsis-2
{
display: -webkit-box;
overflow: hidden;
white-space: normal !important;
text-overflow: ellipsis;
word-wrap: break-word;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.mui-table
{
display: table;
width: 100%;
table-layout: fixed;
}
.mui-table-cell
{
position: relative;
display: table-cell;
}
.mui-text-left
{
text-align: left !important;
}
.mui-text-center
{
text-align: center !important;
}
.mui-text-justify
{
text-align: justify !important;
}
.mui-text-right
{
text-align: right !important;
}
.mui-pull-left
{
float: left;
}
.mui-pull-right
{
float: right;
}
.mui-list-unstyled
{
padding-left: 0;
list-style: none;
}
.mui-list-inline
{
margin-left: -5px;
padding-left: 0;
list-style: none;
}
.mui-list-inline > li
{
display: inline-block;
padding-right: 5px;
padding-left: 5px;
}
.mui-clearfix:before, .mui-clearfix:after
{
display: table;
content: ' ';
}
.mui-clearfix:after
{
clear: both;
}
.mui-bg-primary
{
background-color: #007aff;
}
.mui-bg-positive
{
background-color: #4cd964;
}
.mui-bg-negative
{
background-color: #dd524d;
}
.mui-error
{
margin: 88px 35px;
padding: 10px;
border-radius: 6px;
background-color: #bbb;
}
.mui-subtitle
{
font-size: 15px;
}
h1, h2, h3, h4, h5, h6
{
line-height: 1;
margin-top: 5px;
margin-bottom: 5px;
}
h1, .mui-h1
{
font-size: 36px;
}
h2, .mui-h2
{
font-size: 30px;
}
h3, .mui-h3
{
font-size: 24px;
}
h4, .mui-h4
{
font-size: 18px;
}
h5, .mui-h5
{
font-size: 14px;
font-weight: normal;
color: #8f8f94;
}
h6, .mui-h6
{
font-size: 12px;
font-weight: normal;
color: #8f8f94;
}
p
{
font-size: 14px;
margin-top: 0;
margin-bottom: 10px;
color: #8f8f94;
}
.mui-row:before, .mui-row:after
{
display: table;
content: ' ';
}
.mui-row:after
{
clear: both;
}
.mui-col-xs-1, .mui-col-sm-1, .mui-col-xs-2, .mui-col-sm-2, .mui-col-xs-3, .mui-col-sm-3, .mui-col-xs-4, .mui-col-sm-4, .mui-col-xs-5, .mui-col-sm-5, .mui-col-xs-6, .mui-col-sm-6, .mui-col-xs-7, .mui-col-sm-7, .mui-col-xs-8, .mui-col-sm-8, .mui-col-xs-9, .mui-col-sm-9, .mui-col-xs-10, .mui-col-sm-10, .mui-col-xs-11, .mui-col-sm-11, .mui-col-xs-12, .mui-col-sm-12
{
position: relative;
min-height: 1px;
}
.mui-row > [class*='mui-col-']
{
float: left;
}
.mui-col-xs-12
{
width: 100%;
}
.mui-col-xs-11
{
width: 91.66666667%;
}
.mui-col-xs-10
{
width: 83.33333333%;
}
.mui-col-xs-9
{
width: 75%;
}
.mui-col-xs-8
{
width: 66.66666667%;
}
.mui-col-xs-7
{
width: 58.33333333%;
}
.mui-col-xs-6
{
width: 50%;
}
.mui-col-xs-5
{
width: 41.66666667%;
}
.mui-col-xs-4
{
width: 33.33333333%;
}
.mui-col-xs-3
{
width: 25%;
}
.mui-col-xs-2
{
width: 16.66666667%;
}
.mui-col-xs-1
{
width: 8.33333333%;
}
@media (min-width: 400px)
{
.mui-col-sm-12
{
width: 100%;
}
.mui-col-sm-11
{
width: 91.66666667%;
}
.mui-col-sm-10
{
width: 83.33333333%;
}
.mui-col-sm-9
{
width: 75%;
}
.mui-col-sm-8
{
width: 66.66666667%;
}
.mui-col-sm-7
{
width: 58.33333333%;
}
.mui-col-sm-6
{
width: 50%;
}
.mui-col-sm-5
{
width: 41.66666667%;
}
.mui-col-sm-4
{
width: 33.33333333%;
}
.mui-col-sm-3
{
width: 25%;
}
.mui-col-sm-2
{
width: 16.66666667%;
}
.mui-col-sm-1
{
width: 8.33333333%;
}
}
.mui-scroll-wrapper
{
position: absolute;
z-index: 2;
top: 0;
bottom: 0;
left: 0;
overflow: hidden;
width: 100%;
}
.mui-scroll
{
position: absolute;
z-index: 1;
width: 100%;
}
.mui-scrollbar
{
position: absolute;
z-index: 9998;
overflow: hidden;
-webkit-transition: 500ms;
transition: 500ms;
transform: translateZ(0px);
pointer-events: none;
opacity: 0;
}
.mui-scrollbar-vertical
{
top: 0;
right: 1px;
bottom: 2px;
width: 4px;
}
.mui-scrollbar-vertical .mui-scrollbar-indicator
{
width: 100%;
}
.mui-scrollbar-horizontal
{
right: 2px;
bottom: 0;
left: 2px;
height: 4px;
}
.mui-scrollbar-horizontal .mui-scrollbar-indicator
{
height: 100%;
}
.mui-scrollbar-indicator
{
position: absolute;
display: block;
box-sizing: border-box;
-webkit-transition: .01s cubic-bezier(.1, .57, .1, 1);
transition: .01s cubic-bezier(.1, .57, .1, 1);
transform: translate(0px, 0px) translateZ(0px);
border: 1px solid rgba(255, 255, 255, .80196);
border-radius: 2px;
background: rgba(0, 0, 0, .39804);
}
.mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll-wrapper, .mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll-wrapper
{
position: absolute;
top: 0;
bottom: 0;
left: 0;
overflow: hidden;
width: 100%;
}
.mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll, .mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll
{
position: absolute;
width: 100%;
}
.mui-plus-pullrefresh .mui-scroll-wrapper, .mui-plus-pullrefresh .mui-slider-group
{
position: static;
top: auto;
bottom: auto;
left: auto;
overflow: auto;
width: auto;
}
.mui-plus-pullrefresh .mui-slider-group
{
overflow: visible;
}
.mui-plus-pullrefresh .mui-scroll
{
position: static;
width: auto;
}
.mui-off-canvas-wrap .mui-bar
{
position: absolute !important;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-box-shadow: none;
box-shadow: none;
}
.mui-off-canvas-wrap
{
position: relative;
z-index: 1;
overflow: hidden;
width: 100%;
height: 100%;
}
.mui-off-canvas-wrap .mui-inner-wrap
{
position: relative;
z-index: 1;
width: 100%;
height: 100%;
}
.mui-off-canvas-wrap .mui-inner-wrap.mui-transitioning
{
-webkit-transition: -webkit-transform 350ms;
transition: transform 350ms cubic-bezier(.165, .84, .44, 1);
}
.mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-left
{
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
.mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-right
{
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
}
.mui-off-canvas-wrap.mui-active
{
overflow: hidden;
height: 100%;
}
.mui-off-canvas-wrap.mui-active .mui-off-canvas-backdrop
{
position: absolute;
z-index: 998;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: block;
transition: background 350ms cubic-bezier(.165, .84, .44, 1);
background: rgba(0, 0, 0, .4);
box-shadow: -4px 0 4px rgba(0, 0, 0, .5), 4px 0 4px rgba(0, 0, 0, .5);
-webkit-tap-highlight-color: transparent;
}
.mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-right
{
z-index: 10000 !important;
-webkit-transform: translate3d(100%, 0px, 0px);
}
.mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-left
{
z-index: 10000 !important;
-webkit-transform: translate3d(-100%, 0px, 0px);
}
.mui-off-canvas-left, .mui-off-canvas-right
{
position: absolute;
z-index: -1;
top: 0;
bottom: 0;
visibility: hidden;
box-sizing: content-box;
width: 70%;
min-height: 100%;
background: #333;
-webkit-overflow-scrolling: touch;
}
.mui-off-canvas-left.mui-transitioning, .mui-off-canvas-right.mui-transitioning
{
-webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1);
transition: transform 350ms cubic-bezier(.165, .84, .44, 1);
}
.mui-off-canvas-left
{
left: 0;
}
.mui-off-canvas-right
{
right: 0;
}
.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable
{
background-color: #333;
}
.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-left, .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-right
{
width: 80%;
-webkit-transform: scale(.8);
transform: scale(.8);
opacity: .1;
}
.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-left.mui-transitioning, .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-right.mui-transitioning
{
-webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1);
transition: transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1);
}
.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-left
{
-webkit-transform-origin: -100%;
transform-origin: -100%;
}
.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable > .mui-off-canvas-right
{
-webkit-transform-origin: 200%;
transform-origin: 200%;
}
.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active > .mui-inner-wrap
{
-webkit-transform: scale(.8);
transform: scale(.8);
}
.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active > .mui-off-canvas-left, .mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active > .mui-off-canvas-right
{
-webkit-transform: scale(1);
transform: scale(1);
opacity: 1;
}
.mui-loading .mui-spinner
{
display: block;
margin: 0 auto;
}
.mui-spinner
{
display: inline-block;
width: 24px;
height: 24px;
-webkit-transform-origin: 50%;
transform-origin: 50%;
-webkit-animation: spinner-spin 1s step-end infinite;
animation: spinner-spin 1s step-end infinite;
}
.mui-spinner:after
{
display: block;
width: 100%;
height: 100%;
content: '';
background-image: url('data:image/svg+xml;charset=utf-8,');
background-repeat: no-repeat;
background-position: 50%;
background-size: 100%;
}
.mui-spinner-white:after
{
background-image: url('data:image/svg+xml;charset=utf-8,');
}
@-webkit-keyframes spinner-spin
{
0%
{
-webkit-transform: rotate(0deg);
}
8.33333333%
{
-webkit-transform: rotate(30deg);
}
16.66666667%
{
-webkit-transform: rotate(60deg);
}
25%
{
-webkit-transform: rotate(90deg);
}
33.33333333%
{
-webkit-transform: rotate(120deg);
}
41.66666667%
{
-webkit-transform: rotate(150deg);
}
50%
{
-webkit-transform: rotate(180deg);
}
58.33333333%
{
-webkit-transform: rotate(210deg);
}
66.66666667%
{
-webkit-transform: rotate(240deg);
}
75%
{
-webkit-transform: rotate(270deg);
}
83.33333333%
{
-webkit-transform: rotate(300deg);
}
91.66666667%
{
-webkit-transform: rotate(330deg);
}
100%
{
-webkit-transform: rotate(360deg);
}
}
@keyframes spinner-spin
{
0%
{
transform: rotate(0deg);
}
8.33333333%
{
transform: rotate(30deg);
}
16.66666667%
{
transform: rotate(60deg);
}
25%
{
transform: rotate(90deg);
}
33.33333333%
{
transform: rotate(120deg);
}
41.66666667%
{
transform: rotate(150deg);
}
50%
{
transform: rotate(180deg);
}
58.33333333%
{
transform: rotate(210deg);
}
66.66666667%
{
transform: rotate(240deg);
}
75%
{
transform: rotate(270deg);
}
83.33333333%
{
transform: rotate(300deg);
}
91.66666667%
{
transform: rotate(330deg);
}
100%
{
transform: rotate(360deg);
}
}
input[type='button'],
input[type='submit'],
input[type='reset'],
button,
.mui-btn
{
font-size: 14px;
font-weight: 400;
line-height: 1.42;
position: relative;
display: inline-block;
margin-bottom: 0;
padding: 6px 12px;
cursor: pointer;
-webkit-transition: all;
transition: all;
-webkit-transition-timing-function: linear;
transition-timing-function: linear;
-webkit-transition-duration: .2s;
transition-duration: .2s;
text-align: center;
vertical-align: top;
white-space: nowrap;
color: #333;
border: 1px solid #ccc;
border-radius: 3px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
background-color: #fff;
background-clip: padding-box;
}
input[type='button']:enabled:active, input[type='button'].mui-active:enabled,
input[type='submit']:enabled:active,
input[type='submit'].mui-active:enabled,
input[type='reset']:enabled:active,
input[type='reset'].mui-active:enabled,
button:enabled:active,
button.mui-active:enabled,
.mui-btn:enabled:active,
.mui-btn.mui-active:enabled
{
color: #fff;
background-color: #929292;
}
input[type='button']:disabled, input[type='button'].mui-disabled,
input[type='submit']:disabled,
input[type='submit'].mui-disabled,
input[type='reset']:disabled,
input[type='reset'].mui-disabled,
button:disabled,
button.mui-disabled,
.mui-btn:disabled,
.mui-btn.mui-disabled
{
opacity: .6;
}
input[type='submit'],
.mui-btn-primary,
.mui-btn-blue
{
color: #fff;
border: 1px solid #007aff;
background-color: #007aff;
}
input[type='submit']:enabled:active, input[type='submit'].mui-active:enabled,
.mui-btn-primary:enabled:active,
.mui-btn-primary.mui-active:enabled,
.mui-btn-blue:enabled:active,
.mui-btn-blue.mui-active:enabled
{
color: #fff;
border: 1px solid #0062cc;
background-color: #0062cc;
}
.mui-btn-positive,
.mui-btn-success,
.mui-btn-green
{
color: #fff;
border: 1px solid #4cd964;
background-color: #4cd964;
}
.mui-btn-positive:enabled:active, .mui-btn-positive.mui-active:enabled,
.mui-btn-success:enabled:active,
.mui-btn-success.mui-active:enabled,
.mui-btn-green:enabled:active,
.mui-btn-green.mui-active:enabled
{
color: #fff;
border: 1px solid #2ac845;
background-color: #2ac845;
}
.mui-btn-warning,
.mui-btn-yellow
{
color: #fff;
border: 1px solid #f0ad4e;
background-color: #f0ad4e;
}
.mui-btn-warning:enabled:active, .mui-btn-warning.mui-active:enabled,
.mui-btn-yellow:enabled:active,
.mui-btn-yellow.mui-active:enabled
{
color: #fff;
border: 1px solid #ec971f;
background-color: #ec971f;
}
.mui-btn-negative,
.mui-btn-danger,
.mui-btn-red
{
color: #fff;
border: 1px solid #dd524d;
background-color: #dd524d;
}
.mui-btn-negative:enabled:active, .mui-btn-negative.mui-active:enabled,
.mui-btn-danger:enabled:active,
.mui-btn-danger.mui-active:enabled,
.mui-btn-red:enabled:active,
.mui-btn-red.mui-active:enabled
{
color: #fff;
border: 1px solid #cf2d28;
background-color: #cf2d28;
}
.mui-btn-royal,
.mui-btn-purple
{
color: #fff;
border: 1px solid #8a6de9;
background-color: #8a6de9;
}
.mui-btn-royal:enabled:active, .mui-btn-royal.mui-active:enabled,
.mui-btn-purple:enabled:active,
.mui-btn-purple.mui-active:enabled
{
color: #fff;
border: 1px solid #6641e2;
background-color: #6641e2;
}
.mui-btn-grey
{
color: #fff;
border: 1px solid #c7c7cc;
background-color: #c7c7cc;
}
.mui-btn-grey:enabled:active, .mui-btn-grey.mui-active:enabled
{
color: #fff;
border: 1px solid #acacb4;
background-color: #acacb4;
}
.mui-btn-outlined
{
background-color: transparent;
}
.mui-btn-outlined.mui-btn-primary, .mui-btn-outlined.mui-btn-blue
{
color: #007aff;
}
.mui-btn-outlined.mui-btn-positive, .mui-btn-outlined.mui-btn-success, .mui-btn-outlined.mui-btn-green
{
color: #4cd964;
}
.mui-btn-outlined.mui-btn-warning, .mui-btn-outlined.mui-btn-yellow
{
color: #f0ad4e;
}
.mui-btn-outlined.mui-btn-negative, .mui-btn-outlined.mui-btn-danger, .mui-btn-outlined.mui-btn-red
{
color: #dd524d;
}
.mui-btn-outlined.mui-btn-royal, .mui-btn-outlined.mui-btn-purple
{
color: #8a6de9;
}
.mui-btn-outlined.mui-btn-primary:enabled:active, .mui-btn-outlined.mui-btn-blue:enabled:active, .mui-btn-outlined.mui-btn-positive:enabled:active, .mui-btn-outlined.mui-btn-success:enabled:active, .mui-btn-outlined.mui-btn-green:enabled:active, .mui-btn-outlined.mui-btn-warning:enabled:active, .mui-btn-outlined.mui-btn-yellow:enabled:active, .mui-btn-outlined.mui-btn-negative:enabled:active, .mui-btn-outlined.mui-btn-danger:enabled:active, .mui-btn-outlined.mui-btn-red:enabled:active, .mui-btn-outlined.mui-btn-royal:enabled:active, .mui-btn-outlined.mui-btn-purple:enabled:active
{
color: #fff;
}
.mui-btn-link
{
padding-top: 6px;
padding-bottom: 6px;
color: #007aff;
border: 0;
background-color: transparent;
}
.mui-btn-link:enabled:active, .mui-btn-link.mui-active:enabled
{
color: #0062cc;
background-color: transparent;
}
.mui-btn-block
{
font-size: 18px;
display: block;
width: 100%;
margin-bottom: 10px;
padding: 15px 0;
}
.mui-btn .mui-badge
{
font-size: 14px;
margin: -2px -4px -2px 4px;
background-color: rgba(0, 0, 0, .15);
}
.mui-btn .mui-badge-inverted,
.mui-btn:enabled:active .mui-badge-inverted
{
background-color: transparent;
}
.mui-btn-primary:enabled:active .mui-badge-inverted,
.mui-btn-positive:enabled:active .mui-badge-inverted,
.mui-btn-negative:enabled:active .mui-badge-inverted
{
color: #fff;
}
.mui-btn-block .mui-badge
{
position: absolute;
right: 0;
margin-right: 10px;
}
.mui-btn .mui-icon
{
font-size: inherit;
}
.mui-btn.mui-icon
{
font-size: 14px;
line-height: 1.42;
}
.mui-btn.mui-fab
{
width: 56px;
height: 56px;
padding: 16px;
border-radius: 50%;
outline: none;
}
.mui-btn.mui-fab.mui-btn-mini
{
width: 40px;
height: 40px;
padding: 8px;
}
.mui-btn.mui-fab .mui-icon
{
font-size: 24px;
line-height: 24px;
width: 24px;
height: 24px;
}
.mui-btn .mui-spinner
{
width: 14px;
height: 14px;
vertical-align: text-bottom;
}
.mui-btn-block .mui-spinner
{
width: 22px;
height: 22px;
}
.mui-bar
{
position: fixed;
z-index: 10;
right: 0;
left: 0;
height: 44px;
padding-right: 10px;
padding-left: 10px;
border-bottom: 0;
background-color: #f7f7f7;
-webkit-box-shadow: 0 0 1px rgba(0, 0, 0, .85);
box-shadow: 0 0 1px rgba(0, 0, 0, .85);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.mui-bar .mui-title
{
right: 40px;
left: 40px;
display: inline-block;
overflow: hidden;
width: auto;
margin: 0;
text-overflow: ellipsis;
}
.mui-bar .mui-backdrop
{
background: none;
}
.mui-bar-header-secondary
{
top: 44px;
}
.mui-bar-footer
{
bottom: 0;
}
.mui-bar-footer-secondary
{
bottom: 44px;
}
.mui-bar-footer-secondary-tab
{
bottom: 50px;
}
.mui-bar-footer,
.mui-bar-footer-secondary,
.mui-bar-footer-secondary-tab
{
border-top: 0;
}
.mui-bar-transparent
{
top: 0;
background-color: rgba(247, 247, 247, 0);
-webkit-box-shadow: none;
box-shadow: none;
}
.mui-bar-nav
{
top: 0;
-webkit-box-shadow: 0 1px 6px #ccc;
box-shadow: 0 1px 6px #ccc;
}
.mui-bar-nav ~ .mui-content .mui-anchor
{
display: block;
visibility: hidden;
height: 45px;
margin-top: -45px;
}
.mui-bar-nav.mui-bar .mui-icon
{
margin-right: -10px;
margin-left: -10px;
padding-right: 10px;
padding-left: 10px;
}
.mui-title
{
font-size: 17px;
font-weight: 500;
line-height: 44px;
position: absolute;
display: block;
width: 100%;
margin: 0 -10px;
padding: 0;
text-align: center;
white-space: nowrap;
color: #000;
}
.mui-title a
{
color: inherit;
}
.mui-bar-tab
{
bottom: 0;
display: table;
width: 100%;
height: 50px;
padding: 0;
table-layout: fixed;
border-top: 0;
border-bottom: 0;
-webkit-touch-callout: none;
}
.mui-bar-tab .mui-tab-item
{
display: table-cell;
overflow: hidden;
width: 1%;
height: 50px;
text-align: center;
vertical-align: middle;
white-space: nowrap;
text-overflow: ellipsis;
color: #929292;
}
.mui-bar-tab .mui-tab-item.mui-active
{
color: #007aff;
}
.mui-bar-tab .mui-tab-item .mui-icon
{
top: 3px;
width: 24px;
height: 24px;
padding-top: 0;
padding-bottom: 0;
}
.mui-bar-tab .mui-tab-item .mui-icon ~ .mui-tab-label
{
font-size: 11px;
display: block;
overflow: hidden;
text-overflow: ellipsis;
}
.mui-bar-tab .mui-tab-item .mui-icon:active
{
background: none;
}
.mui-focusin > .mui-bar-nav,
.mui-focusin > .mui-bar-header-secondary
{
position: absolute;
}
.mui-focusin > .mui-bar ~ .mui-content
{
padding-bottom: 0;
}
.mui-bar .mui-btn
{
font-weight: 400;
position: relative;
z-index: 20;
top: 7px;
margin-top: 0;
padding: 6px 12px 7px;
}
.mui-bar .mui-btn.mui-pull-right
{
margin-left: 10px;
}
.mui-bar .mui-btn.mui-pull-left
{
margin-right: 10px;
}
.mui-bar .mui-btn-link
{
font-size: 16px;
line-height: 44px;
top: 0;
padding: 0;
color: #007aff;
border: 0;
}
.mui-bar .mui-btn-link:active, .mui-bar .mui-btn-link.mui-active
{
color: #0062cc;
}
.mui-bar .mui-btn-block
{
font-size: 16px;
top: 6px;
margin-bottom: 0;
padding: 5px 0;
}
.mui-bar .mui-btn-nav.mui-pull-left
{
margin-left: -5px;
}
.mui-bar .mui-btn-nav.mui-pull-left .mui-icon-left-nav
{
margin-right: -3px;
}
.mui-bar .mui-btn-nav.mui-pull-right
{
margin-right: -5px;
}
.mui-bar .mui-btn-nav.mui-pull-right .mui-icon-right-nav
{
margin-left: -3px;
}
.mui-bar .mui-btn-nav:active
{
opacity: .3;
}
.mui-bar .mui-icon
{
font-size: 24px;
position: relative;
z-index: 20;
padding-top: 10px;
padding-bottom: 10px;
}
.mui-bar .mui-icon:active
{
opacity: .3;
}
.mui-bar .mui-btn .mui-icon
{
top: 1px;
margin: 0;
padding: 0;
}
.mui-bar .mui-title .mui-icon
{
margin: 0;
padding: 0;
}
.mui-bar .mui-title .mui-icon.mui-icon-caret
{
top: 4px;
margin-left: -5px;
}
.mui-bar input[type='search']
{
height: 29px;
margin: 6px 0;
}
.mui-bar .mui-input-row .mui-btn
{
padding: 12px 10px;
}
.mui-bar .mui-search:before
{
margin-top: -10px;
}
.mui-bar .mui-input-row .mui-input-clear ~ .mui-icon-clear,
.mui-bar .mui-input-row .mui-input-speech ~ .mui-icon-speech
{
top: 0;
right: 12px;
}
.mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-clear ~ .mui-icon-clear,
.mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-speech ~ .mui-icon-speech
{
top: 0;
right: 0;
}
.mui-bar .mui-segmented-control
{
top: 7px;
width: auto;
margin: 0 auto;
}
.mui-bar.mui-bar-header-secondary .mui-segmented-control
{
top: 0;
}
.mui-badge
{
font-size: 12px;
line-height: 1;
display: inline-block;
padding: 3px 6px;
color: #333;
border-radius: 100px;
background-color: rgba(0, 0, 0, .15);
}
.mui-badge.mui-badge-inverted
{
padding: 0 5px 0 0;
color: #929292;
background-color: transparent;
}
.mui-badge-primary, .mui-badge-blue
{
color: #fff;
background-color: #007aff;
}
.mui-badge-primary.mui-badge-inverted, .mui-badge-blue.mui-badge-inverted
{
color: #007aff;
background-color: transparent;
}
.mui-badge-success, .mui-badge-green
{
color: #fff;
background-color: #4cd964;
}
.mui-badge-success.mui-badge-inverted, .mui-badge-green.mui-badge-inverted
{
color: #4cd964;
background-color: transparent;
}
.mui-badge-warning, .mui-badge-yellow
{
color: #fff;
background-color: #f0ad4e;
}
.mui-badge-warning.mui-badge-inverted, .mui-badge-yellow.mui-badge-inverted
{
color: #f0ad4e;
background-color: transparent;
}
.mui-badge-danger, .mui-badge-red
{
color: #fff;
background-color: #dd524d;
}
.mui-badge-danger.mui-badge-inverted, .mui-badge-red.mui-badge-inverted
{
color: #dd524d;
background-color: transparent;
}
.mui-badge-royal, .mui-badge-purple
{
color: #fff;
background-color: #8a6de9;
}
.mui-badge-royal.mui-badge-inverted, .mui-badge-purple.mui-badge-inverted
{
color: #8a6de9;
background-color: transparent;
}
.mui-icon .mui-badge
{
font-size: 10px;
line-height: 1.4;
position: absolute;
top: -2px;
left: 100%;
margin-left: -10px;
padding: 1px 5px;
color: white;
background: red;
}
.mui-card
{
font-size: 14px;
position: relative;
overflow: hidden;
margin: 10px;
border-radius: 2px;
background-color: white;
background-clip: padding-box;
box-shadow: 0 1px 2px rgba(0, 0, 0, .3);
}
.mui-content > .mui-card:first-child
{
margin-top: 15px;
}
.mui-card .mui-input-group:before, .mui-card .mui-input-group:after
{
height: 0;
}
.mui-card .mui-input-group .mui-input-row:last-child:before, .mui-card .mui-input-group .mui-input-row:last-child:after
{
height: 0;
}
.mui-card .mui-table-view
{
margin-bottom: 0;
border-top: 0;
border-bottom: 0;
border-radius: 6px;
}
.mui-card .mui-table-view .mui-table-view-divider:first-child, .mui-card .mui-table-view .mui-table-view-cell:first-child
{
top: 0;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
.mui-card .mui-table-view .mui-table-view-divider:last-child, .mui-card .mui-table-view .mui-table-view-cell:last-child
{
border-bottom-right-radius: 6px;
border-bottom-left-radius: 6px;
}
.mui-card .mui-table-view:before, .mui-card .mui-table-view:after
{
height: 0;
}
.mui-card > .mui-table-view > .mui-table-view-cell:last-child:before, .mui-card > .mui-table-view > .mui-table-view-cell:last-child:after
{
height: 0;
}
.mui-card-header,
.mui-card-footer
{
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: flex;
min-height: 44px;
padding: 10px 15px;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
justify-content: space-between;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.mui-card-header .mui-card-link,
.mui-card-footer .mui-card-link
{
line-height: 44px;
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: flex;
height: 44px;
margin-top: -10px;
margin-bottom: -10px;
-webkit-transition-duration: .3s;
transition-duration: .3s;
text-decoration: none;
-webkit-box-pack: start;
-webkit-justify-content: flex-start;
justify-content: flex-start;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.mui-card-header:after,
.mui-card-footer:before
{
position: absolute;
top: 0;
right: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-card-header
{
font-size: 17px;
border-radius: 2px 2px 0 0;
}
.mui-card-header:after
{
top: auto;
bottom: 0;
}
.mui-card-header > img:first-child
{
font-size: 0;
line-height: 0;
float: left;
width: 34px;
height: 34px;
}
.mui-card-footer
{
color: #6d6d72;
border-radius: 0 0 2px 2px;
}
.mui-card-content
{
font-size: 14px;
position: relative;
}
.mui-card-content-inner
{
position: relative;
padding: 15px;
}
.mui-card-media
{
vertical-align: bottom;
color: #fff;
background-position: center;
background-size: cover;
}
.mui-card-header.mui-card-media
{
display: block;
padding: 10px;
}
.mui-card-header.mui-card-media .mui-media-body
{
font-size: 14px;
font-weight: 500;
line-height: 17px;
margin-bottom: 0;
margin-left: 44px;
color: #333;
}
.mui-card-header.mui-card-media .mui-media-body p
{
font-size: 13px;
margin-bottom: 0;
}
.mui-table-view
{
position: relative;
margin-top: 0;
margin-bottom: 0;
padding-left: 0;
list-style: none;
background-color: #fff;
}
.mui-table-view:after
{
position: absolute;
right: 0;
bottom: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-table-view:before
{
position: absolute;
top: 0;
right: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-table-view:before
{
top: -1px;
}
.mui-table-view-icon .mui-table-view-cell .mui-navigate-right .mui-icon
{
font-size: 20px;
margin-top: -1px;
margin-right: 5px;
margin-left: -5px;
}
.mui-table-view-icon .mui-table-view-cell:after
{
left: 40px;
}
.mui-table-view-chevron .mui-table-view-cell
{
padding-right: 65px;
}
.mui-table-view-chevron .mui-table-view-cell > a:not(.mui-btn)
{
margin-right: -65px;
}
.mui-table-view-radio .mui-table-view-cell
{
padding-right: 65px;
}
.mui-table-view-radio .mui-table-view-cell > a:not(.mui-btn)
{
margin-right: -65px;
}
.mui-table-view-radio .mui-table-view-cell .mui-navigate-right:after
{
font-size: 30px;
font-weight: 600;
right: 9px;
content: '';
color: #007aff;
}
.mui-table-view-radio .mui-table-view-cell.mui-selected .mui-navigate-right:after
{
content: '\e472';
}
.mui-table-view-inverted
{
color: #fff;
background: #333;
}
.mui-table-view-inverted:after
{
position: absolute;
right: 0;
bottom: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #222;
}
.mui-table-view-inverted:before
{
position: absolute;
top: 0;
right: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #222;
}
.mui-table-view-inverted .mui-table-view-cell:after
{
position: absolute;
right: 0;
bottom: 0;
left: 15px;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #222;
}
.mui-table-view-inverted .mui-table-view-cell.mui-active
{
background-color: #242424;
}
.mui-table-view-inverted .mui-table-view-cell > a:not(.mui-btn).mui-active
{
background-color: #242424;
}
.mui-table-view-cell
{
position: relative;
overflow: hidden;
padding: 11px 15px;
-webkit-touch-callout: none;
}
.mui-table-view-cell:after
{
position: absolute;
right: 0;
bottom: 0;
left: 15px;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-table-view-cell.mui-radio input[type=radio], .mui-table-view-cell.mui-checkbox input[type=checkbox]
{
top: 8px;
}
.mui-table-view-cell.mui-radio.mui-left, .mui-table-view-cell.mui-checkbox.mui-left
{
padding-left: 58px;
}
.mui-table-view-cell.mui-active
{
background-color: #eee;
}
.mui-table-view-cell:last-child:before, .mui-table-view-cell:last-child:after
{
height: 0;
}
.mui-table-view-cell > a:not(.mui-btn)
{
position: relative;
display: block;
overflow: hidden;
margin: -11px -15px;
padding: inherit;
white-space: nowrap;
text-overflow: ellipsis;
color: inherit;
/*&:active {
background-color: #eee;
}*/
}
.mui-table-view-cell > a:not(.mui-btn).mui-active
{
background-color: #eee;
}
.mui-table-view-cell p
{
margin-bottom: 0;
}
.mui-table-view-cell.mui-transitioning > .mui-slider-handle, .mui-table-view-cell.mui-transitioning > .mui-slider-left .mui-btn, .mui-table-view-cell.mui-transitioning > .mui-slider-right .mui-btn
{
-webkit-transition: -webkit-transform 300ms ease;
transition: transform 300ms ease;
}
.mui-table-view-cell.mui-active > .mui-slider-handle
{
background-color: #eee;
}
.mui-table-view-cell > .mui-slider-handle
{
position: relative;
background-color: #fff;
}
.mui-table-view-cell > .mui-slider-handle.mui-navigate-right:after, .mui-table-view-cell > .mui-slider-handle .mui-navigate-right:after
{
right: 0;
}
.mui-table-view-cell > .mui-slider-handle, .mui-table-view-cell > .mui-slider-left .mui-btn, .mui-table-view-cell > .mui-slider-right .mui-btn
{
-webkit-transition: -webkit-transform 0ms ease;
transition: transform 0ms ease;
}
.mui-table-view-cell > .mui-slider-left, .mui-table-view-cell > .mui-slider-right
{
position: absolute;
top: 0;
display: -webkit-box;
display: -webkit-flex;
display: flex;
height: 100%;
}
.mui-table-view-cell > .mui-slider-left > .mui-btn, .mui-table-view-cell > .mui-slider-right > .mui-btn
{
position: relative;
left: 0;
display: -webkit-box;
display: -webkit-flex;
display: flex;
padding: 0 30px;
color: #fff;
border: 0;
border-radius: 0;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.mui-table-view-cell > .mui-slider-left > .mui-btn:after, .mui-table-view-cell > .mui-slider-right > .mui-btn:after
{
position: absolute;
z-index: -1;
top: 0;
width: 600%;
height: 100%;
content: '';
background: inherit;
}
.mui-table-view-cell > .mui-slider-left > .mui-btn.mui-icon, .mui-table-view-cell > .mui-slider-right > .mui-btn.mui-icon
{
font-size: 30px;
}
.mui-table-view-cell > .mui-slider-right
{
right: 0;
-webkit-transition: -webkit-transform 0ms ease;
transition: transform 0ms ease;
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
.mui-table-view-cell > .mui-slider-left
{
left: 0;
-webkit-transition: -webkit-transform 0ms ease;
transition: transform 0ms ease;
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
.mui-table-view-cell > .mui-slider-left > .mui-btn:after
{
right: 100%;
margin-right: -1px;
}
.mui-table-view-divider
{
font-weight: 500;
position: relative;
margin-top: -1px;
margin-left: 0;
padding-top: 6px;
padding-bottom: 6px;
padding-left: 15px;
color: #999;
background-color: #fafafa;
}
.mui-table-view-divider:after
{
position: absolute;
right: 0;
bottom: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-table-view-divider:before
{
position: absolute;
top: 0;
right: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-table-view .mui-media,
.mui-table-view .mui-media-body
{
overflow: hidden;
}
.mui-table-view .mui-media-large .mui-media-object
{
line-height: 80px;
max-width: 80px;
height: 80px;
}
.mui-table-view .mui-media .mui-subtitle
{
color: #000;
}
.mui-table-view .mui-media-object
{
line-height: 42px;
max-width: 42px;
height: 42px;
}
.mui-table-view .mui-media-object.mui-pull-left
{
margin-right: 10px;
}
.mui-table-view .mui-media-object.mui-pull-right
{
margin-left: 10px;
}
.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object
{
line-height: 29px;
max-width: 29px;
height: 29px;
margin: -4px 0;
}
.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object img
{
line-height: 29px;
max-width: 29px;
height: 29px;
}
.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object.mui-pull-left
{
margin-right: 10px;
}
.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object .mui-icon
{
font-size: 29px;
}
.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-body:after
{
position: absolute;
right: 0;
bottom: 0;
left: 55px;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-table-view .mui-table-view-cell.mui-media-icon:after
{
height: 0 !important;
}
.mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view
{
display: block;
}
.mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view:before, .mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view:after
{
height: 0 !important;
}
.mui-table-view.mui-unfold .mui-table-view-cell.mui-media-icon.mui-collapse .mui-media-body:after
{
position: absolute;
right: 0;
bottom: 0;
left: 70px;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-table-view-cell > .mui-btn,
.mui-table-view-cell > .mui-badge,
.mui-table-view-cell > .mui-switch,
.mui-table-view-cell > a > .mui-btn,
.mui-table-view-cell > a > .mui-badge,
.mui-table-view-cell > a > .mui-switch
{
position: absolute;
top: 50%;
right: 15px;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.mui-table-view-cell .mui-navigate-right > .mui-btn,
.mui-table-view-cell .mui-navigate-right > .mui-badge,
.mui-table-view-cell .mui-navigate-right > .mui-switch,
.mui-table-view-cell .mui-push-left > .mui-btn,
.mui-table-view-cell .mui-push-left > .mui-badge,
.mui-table-view-cell .mui-push-left > .mui-switch,
.mui-table-view-cell .mui-push-right > .mui-btn,
.mui-table-view-cell .mui-push-right > .mui-badge,
.mui-table-view-cell .mui-push-right > .mui-switch,
.mui-table-view-cell > a .mui-navigate-right > .mui-btn,
.mui-table-view-cell > a .mui-navigate-right > .mui-badge,
.mui-table-view-cell > a .mui-navigate-right > .mui-switch,
.mui-table-view-cell > a .mui-push-left > .mui-btn,
.mui-table-view-cell > a .mui-push-left > .mui-badge,
.mui-table-view-cell > a .mui-push-left > .mui-switch,
.mui-table-view-cell > a .mui-push-right > .mui-btn,
.mui-table-view-cell > a .mui-push-right > .mui-badge,
.mui-table-view-cell > a .mui-push-right > .mui-switch
{
right: 35px;
}
.mui-content > .mui-table-view:first-child
{
margin-top: 15px;
}
.mui-table-view-cell.mui-collapse .mui-table-view:before, .mui-table-view-cell.mui-collapse .mui-table-view:after
{
height: 0;
}
.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:last-child:after
{
height: 0;
}
.mui-table-view-cell.mui-collapse > .mui-navigate-right:after, .mui-table-view-cell.mui-collapse > .mui-push-right:after
{
content: '\e581';
}
.mui-table-view-cell.mui-collapse.mui-active
{
margin-top: -1px;
}
.mui-table-view-cell.mui-collapse.mui-active .mui-table-view, .mui-table-view-cell.mui-collapse.mui-active .mui-collapse-content
{
display: block;
}
.mui-table-view-cell.mui-collapse.mui-active > .mui-navigate-right:after, .mui-table-view-cell.mui-collapse.mui-active > .mui-push-right:after
{
content: '\e580';
}
.mui-table-view-cell.mui-collapse.mui-active .mui-table-view-cell > a:not(.mui-btn).mui-active
{
margin-left: -31px;
padding-left: 47px;
}
.mui-table-view-cell.mui-collapse .mui-collapse-content
{
position: relative;
display: none;
overflow: hidden;
margin: 11px -15px -11px;
padding: 8px 15px;
-webkit-transition: height .35s ease;
-o-transition: height .35s ease;
transition: height .35s ease;
background: white;
}
.mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-input-group, .mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-slider
{
width: auto;
height: auto;
margin: -8px -15px;
}
.mui-table-view-cell.mui-collapse .mui-collapse-content > .mui-slider
{
margin: -8px -16px;
}
.mui-table-view-cell.mui-collapse .mui-table-view
{
display: none;
margin-top: 11px;
margin-right: -15px;
margin-bottom: -11px;
margin-left: -15px;
border: 0;
}
.mui-table-view-cell.mui-collapse .mui-table-view.mui-table-view-chevron
{
margin-right: -65px;
}
.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell
{
padding-left: 31px;
background-position: 31px 100%;
}
.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after
{
position: absolute;
right: 0;
bottom: 0;
left: 30px;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-table-view.mui-grid-view
{
font-size: 0;
display: block;
width: 100%;
padding: 0 10px 10px 0;
white-space: normal;
}
.mui-table-view.mui-grid-view .mui-table-view-cell
{
font-size: 17px;
display: inline-block;
margin-right: -4px;
padding: 10px 0 0 14px;
text-align: center;
vertical-align: middle;
background: none;
}
.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-object
{
width: 100%;
max-width: 100%;
height: auto;
}
.mui-table-view.mui-grid-view .mui-table-view-cell > a:not(.mui-btn)
{
margin: -10px 0 0 -14px;
}
.mui-table-view.mui-grid-view .mui-table-view-cell > a:not(.mui-btn):active, .mui-table-view.mui-grid-view .mui-table-view-cell > a:not(.mui-btn).mui-active
{
background: none;
}
.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-body
{
font-size: 15px;
line-height: 15px;
display: block;
width: 100%;
height: 15px;
margin-top: 8px;
text-overflow: ellipsis;
color: #333;
}
.mui-table-view.mui-grid-view .mui-table-view-cell:before, .mui-table-view.mui-grid-view .mui-table-view-cell:after
{
height: 0;
}
.mui-grid-view.mui-grid-9
{
margin: 0;
padding: 0;
border-top: 1px solid #eee;
border-left: 1px solid #eee;
background-color: #f2f2f2;
}
.mui-grid-view.mui-grid-9:before, .mui-grid-view.mui-grid-9:after
{
display: table;
content: ' ';
}
.mui-grid-view.mui-grid-9:after
{
clear: both;
}
.mui-grid-view.mui-grid-9:after
{
position: static;
}
.mui-grid-view.mui-grid-9 .mui-table-view-cell
{
margin: 0;
padding: 11px 15px;
vertical-align: top;
border-right: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.mui-grid-view.mui-grid-9 .mui-table-view-cell.mui-active
{
background-color: #eee;
}
.mui-grid-view.mui-grid-9 .mui-table-view-cell > a:not(.mui-btn)
{
margin: 0;
padding: 10px 0;
}
.mui-grid-view.mui-grid-9:before
{
height: 0;
}
.mui-grid-view.mui-grid-9 .mui-media
{
color: #797979;
}
.mui-grid-view.mui-grid-9 .mui-media .mui-icon
{
font-size: 2.4em;
position: relative;
}
.mui-slider-cell
{
position: relative;
}
.mui-slider-cell > .mui-slider-handle
{
z-index: 1;
}
.mui-slider-cell > .mui-slider-left, .mui-slider-cell > .mui-slider-right
{
position: absolute;
z-index: 0;
top: 0;
bottom: 0;
}
.mui-slider-cell > .mui-slider-left
{
left: 0;
}
.mui-slider-cell > .mui-slider-right
{
right: 0;
}
input,
textarea,
select
{
font-family: 'Helvetica Neue', Helvetica, sans-serif;
font-size: 17px;
-webkit-tap-highlight-color: transparent;
-webkit-tap-highlight-color: transparent;
}
input:focus,
textarea:focus,
select:focus
{
-webkit-tap-highlight-color: transparent;
-webkit-tap-highlight-color: transparent;
-webkit-user-modify: read-write-plaintext-only;
}
select,
textarea,
input[type='text'],
input[type='search'],
input[type='password'],
input[type='datetime'],
input[type='datetime-local'],
input[type='date'],
input[type='month'],
input[type='time'],
input[type='week'],
input[type='number'],
input[type='email'],
input[type='url'],
input[type='tel'],
input[type='color']
{
line-height: 21px;
width: 100%;
height: 40px;
margin-bottom: 15px;
padding: 10px 15px;
-webkit-user-select: text;
border: 1px solid rgba(0, 0, 0, .2);
border-radius: 3px;
outline: none;
background-color: #fff;
-webkit-appearance: none;
}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button
{
margin: 0;
-webkit-appearance: none;
}
input[type='search']
{
font-size: 16px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
height: 34px;
text-align: center;
border: 0;
border-radius: 6px;
background-color: rgba(0, 0, 0, .1);
}
input[type='search']:focus
{
text-align: left;
}
textarea
{
height: auto;
resize: none;
}
select
{
font-size: 14px;
height: auto;
margin-top: 1px;
border: 0 !important;
background-color: #fff;
}
select:focus
{
-webkit-user-modify: read-only;
}
.mui-input-group
{
position: relative;
padding: 0;
border: 0;
background-color: #fff;
}
.mui-input-group:after
{
position: absolute;
right: 0;
bottom: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-input-group:before
{
position: absolute;
top: 0;
right: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-input-group input,
.mui-input-group textarea
{
margin-bottom: 0;
border: 0;
border-radius: 0;
background-color: transparent;
-webkit-box-shadow: none;
box-shadow: none;
}
.mui-input-group input[type='search']
{
background: none;
}
.mui-input-group input:last-child
{
background-image: none;
}
.mui-input-row
{
clear: left;
overflow: hidden;
}
.mui-input-row select
{
font-size: 17px;
height: 37px;
padding: 0;
}
.mui-input-row:last-child,
.mui-input-row label + input, .mui-input-row .mui-btn + input
{
background: none;
}
.mui-input-group .mui-input-row
{
height: 40px;
}
.mui-input-group .mui-input-row:after
{
position: absolute;
right: 0;
bottom: 0;
left: 15px;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-input-row label
{
font-family: 'Helvetica Neue', Helvetica, sans-serif;
line-height: 1.1;
float: left;
width: 35%;
padding: 11px 15px;
}
.mui-input-row label ~ input, .mui-input-row label ~ select, .mui-input-row label ~ textarea
{
float: right;
width: 65%;
margin-bottom: 0;
padding-left: 0;
border: 0;
}
.mui-input-row .mui-btn
{
line-height: 1.1;
float: right;
width: 15%;
padding: 10px 15px;
}
.mui-input-row .mui-btn ~ input, .mui-input-row .mui-btn ~ select, .mui-input-row .mui-btn ~ textarea
{
float: left;
width: 85%;
margin-bottom: 0;
padding-left: 0;
border: 0;
}
.mui-button-row
{
position: relative;
padding-top: 5px;
text-align: center;
}
.mui-input-group .mui-button-row
{
height: 45px;
}
.mui-input-row
{
position: relative;
}
.mui-input-row.mui-input-range
{
overflow: visible;
padding-right: 20px;
}
.mui-input-row .mui-inline
{
padding: 8px 0;
}
.mui-input-row .mui-input-clear ~ .mui-icon-clear, .mui-input-row .mui-input-speech ~ .mui-icon-speech, .mui-input-row .mui-input-password ~ .mui-icon-eye
{
font-size: 20px;
position: absolute;
z-index: 1;
top: 10px;
right: 0;
width: 38px;
height: 38px;
text-align: center;
color: #999;
}
.mui-input-row .mui-input-clear ~ .mui-icon-clear.mui-active, .mui-input-row .mui-input-speech ~ .mui-icon-speech.mui-active, .mui-input-row .mui-input-password ~ .mui-icon-eye.mui-active
{
color: #007aff;
}
.mui-input-row .mui-input-speech ~ .mui-icon-speech
{
font-size: 24px;
top: 8px;
}
.mui-input-row .mui-input-clear ~ .mui-icon-clear ~ .mui-icon-speech
{
display: none;
}
.mui-input-row .mui-input-clear ~ .mui-icon-clear.mui-hidden ~ .mui-icon-speech
{
display: inline-block;
}
.mui-input-row .mui-icon-speech ~ .mui-placeholder
{
right: 38px;
}
.mui-input-row.mui-search .mui-icon-clear
{
top: 7px;
}
.mui-input-row.mui-search .mui-icon-speech
{
top: 5px;
}
.mui-radio, .mui-checkbox
{
position: relative;
}
.mui-radio label, .mui-checkbox label
{
display: inline-block;
float: none;
width: 100%;
padding-right: 58px;
}
.mui-radio.mui-left input[type='radio'], .mui-checkbox.mui-left input[type='checkbox']
{
left: 20px;
}
.mui-radio.mui-left label, .mui-checkbox.mui-left label
{
padding-right: 15px;
padding-left: 58px;
}
.mui-radio input[type='radio'], .mui-checkbox input[type='checkbox']
{
position: absolute;
top: 4px;
right: 20px;
display: inline-block;
width: 28px;
height: 26px;
border: 0;
outline: 0 !important;
background-color: transparent;
-webkit-appearance: none;
}
.mui-radio input[type='radio'][disabled]:before, .mui-checkbox input[type='checkbox'][disabled]:before
{
opacity: .3;
}
.mui-radio input[type='radio']:before, .mui-checkbox input[type='checkbox']:before
{
font-family: Muiicons;
font-size: 28px;
font-weight: normal;
line-height: 1;
text-decoration: none;
color: #aaa;
border-radius: 0;
background: none;
-webkit-font-smoothing: antialiased;
}
.mui-radio input[type='radio']:checked:before, .mui-checkbox input[type='checkbox']:checked:before
{
color: #007aff;
}
.mui-radio.mui-disabled label, .mui-radio label.mui-disabled, .mui-checkbox.mui-disabled label, .mui-checkbox label.mui-disabled
{
opacity: .4;
}
.mui-radio input[type='radio']:before
{
content: '\e411';
}
.mui-radio input[type='radio']:checked:before
{
content: '\e441';
}
.mui-checkbox input[type='checkbox']:before
{
content: '\e411';
}
.mui-checkbox input[type='checkbox']:checked:before
{
content: '\e442';
}
.mui-select
{
position: relative;
}
.mui-select:before
{
font-family: Muiicons;
position: absolute;
top: 8px;
right: 21px;
content: '\e581';
color: rgba(170, 170, 170, .6);
}
.mui-input-row .mui-switch
{
float: right;
margin-top: 5px;
margin-right: 20px;
}
.mui-input-range
{
/*input[type="range"] {
-webkit-appearance: none;
background: #999;
height: 36px;
border-radius: 1px;
overflow: hidden;
margin-top: 2px;
margin-bottom: 2px;
outline:none;
position:relative;
width:100%;
}*/
/*input[type='range']::-webkit-slider-thumb {
-webkit-appearance: none!important;
opacity: 0.5;
height:28px;
width:28px;
border-radius: 50%;
background:#00b7fb;
position: relative;
pointer-events: none;
-webkit-box-sizing: border-box;
box-sizing: border-box;
&:before{
position: absolute;
top: 13px;
left: -2000px;
width: 2000px;
height: 2px;
background: #00b7fb;
content:' ';
}
}*/
}
.mui-input-range input[type='range']
{
position: relative;
width: 100%;
height: 2px;
margin: 17px 0;
padding: 0;
cursor: pointer;
border: 0;
border-radius: 3px;
outline: none;
background-color: #999;
-webkit-appearance: none !important;
}
.mui-input-range input[type='range']::-webkit-slider-thumb
{
width: 28px;
height: 28px;
border-color: #0062cc;
border-radius: 50%;
background-color: #007aff;
background-clip: padding-box;
-webkit-appearance: none !important;
}
.mui-input-range label ~ input[type='range']
{
width: 65%;
}
.mui-input-range .mui-tooltip
{
font-size: 36px;
line-height: 64px;
position: absolute;
z-index: 1;
top: -70px;
width: 64px;
height: 64px;
text-align: center;
opacity: .8;
color: #333;
border: 1px solid #ddd;
border-radius: 6px;
background-color: #fff;
text-shadow: 0 1px 0 #f3f3f3;
}
.mui-search
{
position: relative;
}
.mui-search input[type='search']
{
padding-left: 30px;
}
.mui-search .mui-placeholder
{
font-size: 16px;
line-height: 34px;
position: absolute;
z-index: 1;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: inline-block;
height: 34px;
text-align: center;
color: #999;
border: 0;
border-radius: 6px;
background: none;
}
.mui-search .mui-placeholder .mui-icon
{
font-size: 20px;
color: #333;
}
.mui-search:before
{
font-family: Muiicons;
font-size: 20px;
font-weight: normal;
position: absolute;
top: 50%;
right: 50%;
display: none;
margin-top: -18px;
margin-right: 31px;
content: '\e466';
}
.mui-search.mui-active:before
{
font-size: 20px;
right: auto;
left: 5px;
display: block;
margin-right: 0;
}
.mui-search.mui-active input[type='search']
{
text-align: left;
}
.mui-search.mui-active .mui-placeholder
{
display: none;
}
.mui-segmented-control
{
font-size: 15px;
font-weight: 400;
position: relative;
display: table;
overflow: hidden;
width: 100%;
table-layout: fixed;
border: 1px solid #007aff;
border-radius: 3px;
background-color: transparent;
-webkit-touch-callout: none;
}
.mui-segmented-control.mui-segmented-control-vertical
{
border-collapse: collapse;
border-width: 0;
border-radius: 0;
}
.mui-segmented-control.mui-segmented-control-vertical .mui-control-item
{
display: block;
border-bottom: 1px solid #c8c7cc;
border-left-width: 0;
}
.mui-segmented-control.mui-scroll-wrapper
{
height: 38px;
}
.mui-segmented-control.mui-scroll-wrapper .mui-scroll
{
width: auto;
height: 40px;
white-space: nowrap;
}
.mui-segmented-control.mui-scroll-wrapper .mui-control-item
{
display: inline-block;
width: auto;
padding: 0 20px;
border: 0;
}
.mui-segmented-control .mui-control-item
{
line-height: 38px;
display: table-cell;
overflow: hidden;
width: 1%;
-webkit-transition: background-color .1s linear;
transition: background-color .1s linear;
text-align: center;
white-space: nowrap;
text-overflow: ellipsis;
color: #007aff;
border-color: #007aff;
border-left: 1px solid #007aff;
}
.mui-segmented-control .mui-control-item:first-child
{
border-left-width: 0;
}
.mui-segmented-control .mui-control-item.mui-active
{
color: #fff;
background-color: #007aff;
}
.mui-segmented-control.mui-segmented-control-inverted
{
width: 100%;
border: 0;
border-radius: 0;
}
.mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item
{
border-bottom: 1px solid #c8c7cc;
}
.mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item.mui-active
{
border-bottom: 1px solid #c8c7cc;
}
.mui-segmented-control.mui-segmented-control-inverted .mui-control-item
{
color: inherit;
border: 0;
}
.mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active
{
color: #007aff;
border-bottom: 2px solid #007aff;
background: none;
}
.mui-segmented-control.mui-segmented-control-inverted ~ .mui-slider-progress-bar
{
background-color: #007aff;
}
.mui-segmented-control-positive
{
border: 1px solid #4cd964;
}
.mui-segmented-control-positive .mui-control-item
{
color: #4cd964;
border-color: inherit;
}
.mui-segmented-control-positive .mui-control-item.mui-active
{
color: #fff;
background-color: #4cd964;
}
.mui-segmented-control-positive.mui-segmented-control-inverted .mui-control-item.mui-active
{
color: #4cd964;
border-bottom: 2px solid #4cd964;
background: none;
}
.mui-segmented-control-positive.mui-segmented-control-inverted ~ .mui-slider-progress-bar
{
background-color: #4cd964;
}
.mui-segmented-control-negative
{
border: 1px solid #dd524d;
}
.mui-segmented-control-negative .mui-control-item
{
color: #dd524d;
border-color: inherit;
}
.mui-segmented-control-negative .mui-control-item.mui-active
{
color: #fff;
background-color: #dd524d;
}
.mui-segmented-control-negative.mui-segmented-control-inverted .mui-control-item.mui-active
{
color: #dd524d;
border-bottom: 2px solid #dd524d;
background: none;
}
.mui-segmented-control-negative.mui-segmented-control-inverted ~ .mui-slider-progress-bar
{
background-color: #dd524d;
}
.mui-control-content
{
position: relative;
display: none;
}
.mui-control-content.mui-active
{
display: block;
}
.mui-popover
{
position: absolute;
z-index: 999;
display: none;
width: 280px;
-webkit-transition: opacity .3s;
transition: opacity .3s;
-webkit-transition-property: opacity;
transition-property: opacity;
-webkit-transform: none;
transform: none;
opacity: 0;
border-radius: 7px;
background-color: #f7f7f7;
-webkit-box-shadow: 0 0 15px rgba(0, 0, 0, .1);
box-shadow: 0 0 15px rgba(0, 0, 0, .1);
}
.mui-popover .mui-popover-arrow
{
position: absolute;
z-index: 1000;
top: -25px;
left: 0;
overflow: hidden;
width: 26px;
height: 26px;
}
.mui-popover .mui-popover-arrow:after
{
position: absolute;
top: 19px;
left: 0;
width: 26px;
height: 26px;
content: ' ';
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
border-radius: 3px;
background: #f7f7f7;
}
.mui-popover .mui-popover-arrow.mui-bottom
{
top: 100%;
left: -26px;
margin-top: -1px;
}
.mui-popover .mui-popover-arrow.mui-bottom:after
{
top: -19px;
left: 0;
}
.mui-popover.mui-popover-action
{
bottom: 0;
width: 100%;
-webkit-transition: -webkit-transform .3s, opacity .3s;
transition: transform .3s, opacity .3s;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
border-radius: 0;
background: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.mui-popover.mui-popover-action .mui-popover-arrow
{
display: none;
}
.mui-popover.mui-popover-action.mui-popover-bottom
{
position: fixed;
}
.mui-popover.mui-popover-action.mui-active
{
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.mui-popover.mui-popover-action .mui-table-view
{
margin: 8px;
text-align: center;
color: #007aff;
border-radius: 4px;
}
.mui-popover.mui-popover-action .mui-table-view .mui-table-view-cell:after
{
position: absolute;
right: 0;
bottom: 0;
left: 0;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
background-color: #c8c7cc;
}
.mui-popover.mui-popover-action .mui-table-view small
{
font-weight: 400;
line-height: 1.3;
display: block;
}
.mui-popover.mui-active
{
display: block;
opacity: 1;
}
.mui-popover .mui-bar ~ .mui-table-view
{
padding-top: 44px;
}
.mui-backdrop
{
position: fixed;
z-index: 998;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(0, 0, 0, .3);
}
.mui-bar-backdrop.mui-backdrop
{
bottom: 50px;
background: none;
}
.mui-backdrop-action.mui-backdrop
{
background-color: rgba(0, 0, 0, .3);
}
.mui-bar-backdrop.mui-backdrop, .mui-backdrop-action.mui-backdrop
{
opacity: 0;
}
.mui-bar-backdrop.mui-backdrop.mui-active, .mui-backdrop-action.mui-backdrop.mui-active
{
-webkit-transition: all .4s ease;
transition: all .4s ease;
opacity: 1;
}
.mui-popover .mui-btn-block
{
margin-bottom: 5px;
}
.mui-popover .mui-btn-block:last-child
{
margin-bottom: 0;
}
.mui-popover .mui-bar
{
-webkit-box-shadow: none;
box-shadow: none;
}
.mui-popover .mui-bar-nav
{
border-bottom: 1px solid rgba(0, 0, 0, .15);
border-top-left-radius: 12px;
border-top-right-radius: 12px;
-webkit-box-shadow: none;
box-shadow: none;
}
.mui-popover .mui-scroll-wrapper
{
margin: 7px 0;
border-radius: 7px;
background-clip: padding-box;
}
.mui-popover .mui-scroll .mui-table-view
{
max-height: none;
}
.mui-popover .mui-table-view
{
overflow: auto;
max-height: 300px;
margin-bottom: 0;
border-radius: 7px;
background-color: #f7f7f7;
background-image: none;
-webkit-overflow-scrolling: touch;
}
.mui-popover .mui-table-view:before, .mui-popover .mui-table-view:after
{
height: 0;
}
.mui-popover .mui-table-view .mui-table-view-cell:first-child,
.mui-popover .mui-table-view .mui-table-view-cell:first-child > a:not(.mui-btn)
{
border-top-left-radius: 12px;
border-top-right-radius: 12px;
}
.mui-popover .mui-table-view .mui-table-view-cell:last-child,
.mui-popover .mui-table-view .mui-table-view-cell:last-child > a:not(.mui-btn)
{
border-bottom-right-radius: 12px;
border-bottom-left-radius: 12px;
}
.mui-popover.mui-bar-popover .mui-table-view
{
width: 106px;
}
.mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell
{
padding: 11px 15px 11px 15px;
background-position: 0 100%;
}
.mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell > a:not(.mui-btn)
{
margin: -11px -15px -11px -15px;
}
.mui-popup-backdrop
{
position: fixed;
z-index: 998;
top: 0;
right: 0;
bottom: 0;
left: 0;
-webkit-transition-duration: 400ms;
transition-duration: 400ms;
opacity: 0;
background: rgba(0, 0, 0, .4);
}
.mui-popup-backdrop.mui-active
{
opacity: 1;
}
.mui-popup
{
position: fixed;
z-index: 10000;
top: 50%;
left: 50%;
display: none;
overflow: hidden;
width: 270px;
-webkit-transition-property: -webkit-transform,opacity;
transition-property: transform,opacity;
-webkit-transform: translate3d(-50%, -50%, 0) scale(1.185);
transform: translate3d(-50%, -50%, 0) scale(1.185);
text-align: center;
opacity: 0;
color: #000;
border-radius: 13px;
}
.mui-popup.mui-popup-in
{
display: block;
-webkit-transition-duration: 400ms;
transition-duration: 400ms;
-webkit-transform: translate3d(-50%, -50%, 0) scale(1);
transform: translate3d(-50%, -50%, 0) scale(1);
opacity: 1;
}
.mui-popup.mui-popup-out
{
-webkit-transition-duration: 400ms;
transition-duration: 400ms;
-webkit-transform: translate3d(-50%, -50%, 0) scale(1);
transform: translate3d(-50%, -50%, 0) scale(1);
opacity: 0;
}
.mui-popup-inner
{
position: relative;
padding: 15px;
border-radius: 13px 13px 0 0;
background: rgba(255, 255, 255, .95);
}
.mui-popup-inner:after
{
position: absolute;
z-index: 15;
top: auto;
right: auto;
bottom: 0;
left: 0;
display: block;
width: 100%;
height: 1px;
content: '';
-webkit-transform: scaleY(.5);
transform: scaleY(.5);
-webkit-transform-origin: 50% 100%;
transform-origin: 50% 100%;
background-color: rgba(0, 0, 0, .2);
}
.mui-popup-title
{
font-size: 18px;
font-weight: 500;
text-align: center;
}
.mui-popup-title + .mui-popup-text
{
font-family: inherit;
font-size: 14px;
margin: 5px 0 0;
}
.mui-popup-buttons
{
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: flex;
height: 44px;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
.mui-popup-button
{
font-size: 17px;
line-height: 44px;
position: relative;
display: block;
overflow: hidden;
box-sizing: border-box;
width: 100%;
height: 44px;
padding: 0 5px;
cursor: pointer;
text-align: center;
white-space: nowrap;
text-overflow: ellipsis;
color: #007aff;
background: rgba(255, 255, 255, .95);
-webkit-box-flex: 1;
}
.mui-popup-button:after
{
position: absolute;
z-index: 15;
top: 0;
right: 0;
bottom: auto;
left: auto;
display: block;
width: 1px;
height: 100%;
content: '';
-webkit-transform: scaleX(.5);
transform: scaleX(.5);
-webkit-transform-origin: 100% 50%;
transform-origin: 100% 50%;
background-color: rgba(0, 0, 0, .2);
}
.mui-popup-button:first-child
{
border-radius: 0 0 0 13px;
}
.mui-popup-button:first-child:last-child
{
border-radius: 0 0 13px 13px;
}
.mui-popup-button:last-child
{
border-radius: 0 0 13px 0;
}
.mui-popup-button:last-child:after
{
display: none;
}
.mui-popup-button.mui-popup-button-bold
{
font-weight: 600;
}
.mui-popup-input input
{
font-size: 14px;
width: 100%;
height: 26px;
margin: 15px 0 0;
padding: 0 5px;
border: 1px solid rgba(0, 0, 0, .3);
border-radius: 0;
background: #fff;
}
.mui-plus.mui-android .mui-popup-backdrop
{
-webkit-transition-duration: 1ms;
transition-duration: 1ms;
}
.mui-plus.mui-android .mui-popup
{
-webkit-transition-duration: 1ms;
transition-duration: 1ms;
-webkit-transform: translate3d(-50%, -50%, 0) scale(1);
transform: translate3d(-50%, -50%, 0) scale(1);
}
/* === Progress Bar === */
.mui-progressbar
{
position: relative;
display: block;
overflow: hidden;
width: 100%;
height: 2px;
-webkit-transform-origin: center top;
transform-origin: center top;
vertical-align: middle;
border-radius: 2px;
background: #b6b6b6;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.mui-progressbar span
{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
-webkit-transition: 150ms;
transition: 150ms;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
background: #007aff;
}
.mui-progressbar.mui-progressbar-infinite:before
{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
content: '';
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-transform-origin: left center;
transform-origin: left center;
-webkit-animation: mui-progressbar-infinite 1s linear infinite;
animation: mui-progressbar-infinite 1s linear infinite;
background: #007aff;
}
body > .mui-progressbar
{
position: absolute;
z-index: 10000;
top: 44px;
left: 0;
border-radius: 0;
}
.mui-progressbar-in
{
-webkit-animation: mui-progressbar-in 300ms forwards;
animation: mui-progressbar-in 300ms forwards;
}
.mui-progressbar-out
{
-webkit-animation: mui-progressbar-out 300ms forwards;
animation: mui-progressbar-out 300ms forwards;
}
@-webkit-keyframes mui-progressbar-in
{
from
{
-webkit-transform: scaleY(0);
opacity: 0;
}
to
{
-webkit-transform: scaleY(1);
opacity: 1;
}
}
@keyframes mui-progressbar-in
{
from
{
transform: scaleY(0);
opacity: 0;
}
to
{
transform: scaleY(1);
opacity: 1;
}
}
@-webkit-keyframes mui-progressbar-out
{
from
{
-webkit-transform: scaleY(1);
opacity: 1;
}
to
{
-webkit-transform: scaleY(0);
opacity: 0;
}
}
@keyframes mui-progressbar-out
{
from
{
transform: scaleY(1);
opacity: 1;
}
to
{
transform: scaleY(0);
opacity: 0;
}
}
@-webkit-keyframes mui-progressbar-infinite
{
0%
{
-webkit-transform: translate3d(-50%, 0, 0) scaleX(.5);
}
100%
{
-webkit-transform: translate3d(100%, 0, 0) scaleX(.5);
}
}
@keyframes mui-progressbar-infinite
{
0%
{
transform: translate3d(-50%, 0, 0) scaleX(.5);
}
100%
{
transform: translate3d(100%, 0, 0) scaleX(.5);
}
}
.mui-pagination
{
display: inline-block;
margin: 0 auto;
padding-left: 0;
border-radius: 6px;
}
.mui-pagination > li
{
display: inline;
}
.mui-pagination > li > a,
.mui-pagination > li > span
{
line-height: 1.428571429;
position: relative;
float: left;
margin-left: -1px;
padding: 6px 12px;
text-decoration: none;
color: #007aff;
border: 1px solid #ddd;
background-color: #fff;
}
.mui-pagination > li:first-child > a,
.mui-pagination > li:first-child > span
{
margin-left: 0;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
background-clip: padding-box;
}
.mui-pagination > li:last-child > a,
.mui-pagination > li:last-child > span
{
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
background-clip: padding-box;
}
.mui-pagination > li:active > a, .mui-pagination > li:active > a:active,
.mui-pagination > li:active > span,
.mui-pagination > li:active > span:active,
.mui-pagination > li.mui-active > a,
.mui-pagination > li.mui-active > a:active,
.mui-pagination > li.mui-active > span,
.mui-pagination > li.mui-active > span:active
{
z-index: 2;
cursor: default;
color: #fff;
border-color: #007aff;
background-color: #007aff;
}
.mui-pagination > li.mui-disabled > span,
.mui-pagination > li.mui-disabled > span:active,
.mui-pagination > li.mui-disabled > a,
.mui-pagination > li.mui-disabled > a:active
{
opacity: .6;
color: #777;
border: 1px solid #ddd;
background-color: #fff;
}
.mui-pagination-lg > li > a,
.mui-pagination-lg > li > span
{
font-size: 18px;
padding: 10px 16px;
}
.mui-pagination-sm > li > a,
.mui-pagination-sm > li > span
{
font-size: 12px;
padding: 5px 10px;
}
.mui-pager
{
padding-left: 0;
list-style: none;
text-align: center;
}
.mui-pager:before, .mui-pager:after
{
display: table;
content: ' ';
}
.mui-pager:after
{
clear: both;
}
.mui-pager li
{
display: inline;
}
.mui-pager li > a,
.mui-pager li > span
{
display: inline-block;
padding: 5px 14px;
border: 1px solid #ddd;
border-radius: 6px;
background-color: #fff;
background-clip: padding-box;
}
.mui-pager li:active > a, .mui-pager li:active > span, .mui-pager li.mui-active > a, .mui-pager li.mui-active > span
{
cursor: default;
text-decoration: none;
color: #fff;
border-color: #007aff;
background-color: #007aff;
}
.mui-pager .mui-next > a,
.mui-pager .mui-next > span
{
float: right;
}
.mui-pager .mui-previous > a,
.mui-pager .mui-previous > span
{
float: left;
}
.mui-pager .mui-disabled > a,
.mui-pager .mui-disabled > a:active,
.mui-pager .mui-disabled > span,
.mui-pager .mui-disabled > span:active
{
opacity: .6;
color: #777;
border: 1px solid #ddd;
background-color: #fff;
}
.mui-modal
{
position: fixed;
z-index: 999;
top: 0;
overflow: hidden;
width: 100%;
min-height: 100%;
-webkit-transition: -webkit-transform .25s, opacity 1ms .25s;
transition: transform .25s, opacity 1ms .25s;
-webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1);
transition-timing-function: cubic-bezier(.1, .5, .1, 1);
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
opacity: 0;
background-color: #fff;
}
.mui-modal.mui-active
{
height: 100%;
-webkit-transition: -webkit-transform .25s;
transition: transform .25s;
-webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1);
transition-timing-function: cubic-bezier(.1, .5, .1, 1);
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
opacity: 1;
}
.mui-android .mui-modal .mui-bar
{
position: static;
}
.mui-android .mui-modal .mui-bar-nav ~ .mui-content
{
padding-top: 0;
}
.mui-slider
{
position: relative;
z-index: 1;
overflow: hidden;
width: 100%;
}
.mui-slider .mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active
{
border-bottom: 0;
}
.mui-slider .mui-segmented-control.mui-segmented-control-inverted ~ .mui-slider-group .mui-slider-item
{
border-top: 1px solid #c8c7cc;
border-bottom: 1px solid #c8c7cc;
}
.mui-slider .mui-slider-group
{
font-size: 0;
position: relative;
-webkit-transition: all 0s linear;
transition: all 0s linear;
white-space: nowrap;
}
.mui-slider .mui-slider-group .mui-slider-item
{
font-size: 14px;
position: relative;
display: inline-block;
width: 100%;
height: 100%;
vertical-align: top;
white-space: normal;
}
.mui-slider .mui-slider-group .mui-slider-item > a:not(.mui-control-item)
{
line-height: 0;
position: relative;
display: block;
}
.mui-slider .mui-slider-group .mui-slider-item img
{
width: 100%;
}
.mui-slider .mui-slider-group .mui-slider-item .mui-table-view:before, .mui-slider .mui-slider-group .mui-slider-item .mui-table-view:after
{
height: 0;
}
.mui-slider .mui-slider-group.mui-slider-loop
{
-webkit-transform: translate(-100%, 0px);
transform: translate(-100%, 0px);
}
.mui-slider-title
{
line-height: 30px;
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 30px;
margin: 0;
text-align: left;
text-indent: 12px;
opacity: .8;
background-color: #000;
}
.mui-slider-indicator
{
position: absolute;
bottom: 8px;
width: 100%;
text-align: center;
background: none;
}
.mui-slider-indicator.mui-segmented-control
{
position: relative;
bottom: auto;
}
.mui-slider-indicator .mui-indicator
{
display: inline-block;
width: 6px;
height: 6px;
margin: 1px 6px;
cursor: pointer;
border-radius: 50%;
background: #aaa;
-webkit-box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7);
box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7);
}
.mui-slider-indicator .mui-active.mui-indicator
{
background: #fff;
}
.mui-slider-indicator .mui-icon
{
font-size: 20px;
line-height: 30px;
width: 40px;
height: 30px;
margin: 3px;
text-align: center;
border: 1px solid #ddd;
}
.mui-slider-indicator .mui-number
{
line-height: 32px;
display: inline-block;
width: 58px;
}
.mui-slider-indicator .mui-number span
{
color: #ff5053;
}
.mui-slider-progress-bar
{
z-index: 1;
height: 2px;
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
.mui-switch
{
position: relative;
display: block;
width: 74px;
height: 30px;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out;
-webkit-transition-duration: .2s;
transition-duration: .2s;
-webkit-transition-property: background-color, border;
transition-property: background-color, border;
border: 2px solid #ddd;
border-radius: 20px;
background-color: #fff;
background-clip: padding-box;
}
.mui-switch.mui-disabled
{
opacity: .3;
}
.mui-switch .mui-switch-handle
{
position: absolute;
z-index: 1;
top: -1px;
left: -1px;
width: 28px;
height: 28px;
-webkit-transition: .2s ease-in-out;
transition: .2s ease-in-out;
-webkit-transition-property: -webkit-transform, width,left;
transition-property: transform, width,left;
border-radius: 16px;
background-color: #fff;
background-clip: padding-box;
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .4);
box-shadow: 0 2px 5px rgba(0, 0, 0, .4);
}
.mui-switch:before
{
font-size: 13px;
position: absolute;
top: 3px;
right: 11px;
content: 'Off';
text-transform: uppercase;
color: #999;
}
.mui-switch.mui-dragging
{
border-color: #f7f7f7;
background-color: #f7f7f7;
}
.mui-switch.mui-dragging .mui-switch-handle
{
width: 38px;
}
.mui-switch.mui-dragging.mui-active .mui-switch-handle
{
left: -11px;
width: 38px;
}
.mui-switch.mui-active
{
border-color: #4cd964;
background-color: #4cd964;
}
.mui-switch.mui-active .mui-switch-handle
{
-webkit-transform: translate(43px, 0);
transform: translate(43px, 0);
}
.mui-switch.mui-active:before
{
right: auto;
left: 15px;
content: 'On';
color: #fff;
}
.mui-switch input[type='checkbox']
{
display: none;
}
.mui-switch-mini
{
width: 47px;
}
.mui-switch-mini:before
{
display: none;
}
.mui-switch-mini.mui-active .mui-switch-handle
{
-webkit-transform: translate(16px, 0);
transform: translate(16px, 0);
}
.mui-switch-blue.mui-active
{
border: 2px solid #007aff;
background-color: #007aff;
}
.mui-content.mui-fade
{
left: 0;
opacity: 0;
}
.mui-content.mui-fade.mui-in
{
opacity: 1;
}
.mui-content.mui-sliding
{
z-index: 2;
-webkit-transition: -webkit-transform .4s;
transition: transform .4s;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.mui-content.mui-sliding.mui-left
{
z-index: 1;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
.mui-content.mui-sliding.mui-right
{
z-index: 3;
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
}
.mui-navigate-right:after,
.mui-push-left:after,
.mui-push-right:after
{
font-family: Muiicons;
font-size: inherit;
line-height: 1;
position: absolute;
top: 50%;
display: inline-block;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
text-decoration: none;
color: #bbb;
-webkit-font-smoothing: antialiased;
}
.mui-push-left:after
{
left: 15px;
content: '\e582';
}
.mui-navigate-right:after,
.mui-push-right:after
{
right: 15px;
content: '\e583';
}
.mui-pull-top-pocket, .mui-pull-bottom-pocket
{
position: absolute;
left: 0;
display: block;
visibility: hidden;
overflow: hidden;
width: 100%;
height: 50px;
}
.mui-plus-pullrefresh .mui-pull-top-pocket, .mui-plus-pullrefresh .mui-pull-bottom-pocket
{
display: none;
visibility: visible;
}
.mui-pull-top-pocket
{
top: 0;
}
.mui-bar-nav ~ .mui-content .mui-pull-top-pocket
{
top: 44px;
}
.mui-bar-nav ~ .mui-bar-header-secondary ~ .mui-content .mui-pull-top-pocket
{
top: 88px;
}
.mui-pull-bottom-pocket
{
position: relative;
bottom: 0;
height: 40px;
}
.mui-pull-bottom-pocket .mui-pull-loading
{
visibility: hidden;
}
.mui-pull-bottom-pocket .mui-pull-loading.mui-in
{
display: inline-block;
}
.mui-pull
{
font-weight: bold;
position: absolute;
right: 0;
bottom: 10px;
left: 0;
text-align: center;
color: #777;
}
.mui-pull-loading
{
margin-right: 10px;
-webkit-transition: -webkit-transform .4s;
transition: transform .4s;
-webkit-transition-duration: 400ms;
transition-duration: 400ms;
vertical-align: middle;
}
.mui-pull-loading.mui-reverse
{
-webkit-transform: rotate(180deg) translateZ(0);
transform: rotate(180deg) translateZ(0);
}
.mui-pull-caption
{
font-size: 15px;
line-height: 24px;
position: relative;
display: inline-block;
overflow: visible;
margin-top: 0;
vertical-align: middle;
}
.mui-pull-caption span
{
display: none;
}
.mui-pull-caption span.mui-in
{
display: inline;
}
.mui-toast-container
{
line-height: 17px;
position: fixed;
z-index: 9999;
bottom: 50px;
left: 50%;
-webkit-transition: opacity .3s;
transition: opacity .3s;
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
opacity: 0;
}
.mui-toast-container.mui-active
{
opacity: .9;
}
.mui-toast-message
{
font-size: 14px;
padding: 10px 25px;
text-align: center;
color: #fff;
border-radius: 6px;
background-color: #323232;
}
.mui-numbox
{
position: relative;
display: inline-block;
overflow: hidden;
width: 120px;
height: 35px;
padding: 0 40px 0 40px;
vertical-align: top;
vertical-align: middle;
border: solid 1px #bbb;
border-radius: 3px;
background-color: #efeff4;
}
.mui-numbox [class*=numbox-btn], .mui-numbox [class*=btn-numbox]
{
font-size: 18px;
font-weight: normal;
line-height: 100%;
position: absolute;
top: 0;
overflow: hidden;
width: 40px;
height: 100%;
padding: 0;
color: #555;
border: none;
border-radius: 0;
background-color: #f9f9f9;
}
.mui-numbox [class*=numbox-btn]:active, .mui-numbox [class*=btn-numbox]:active
{
background-color: #ccc;
}
.mui-numbox [class*=numbox-btn][disabled], .mui-numbox [class*=btn-numbox][disabled]
{
color: #c0c0c0;
}
.mui-numbox .mui-numbox-btn-plus, .mui-numbox .mui-btn-numbox-plus
{
right: 0;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
.mui-numbox .mui-numbox-btn-minus, .mui-numbox .mui-btn-numbox-minus
{
left: 0;
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
}
.mui-numbox .mui-numbox-input, .mui-numbox .mui-input-numbox
{
display: inline-block;
overflow: hidden;
width: 100% !important;
height: 100%;
margin: 0;
padding: 0 3px !important;
text-align: center;
text-overflow: ellipsis;
word-break: normal;
border: none !important;
border-right: solid 1px #ccc !important;
border-left: solid 1px #ccc !important;
border-radius: 0 !important;
}
.mui-input-row .mui-numbox
{
float: right;
margin: 2px 8px;
}
@font-face {
font-family: Muiicons;
font-weight: normal;
font-style: normal;
src: url('../fonts/mui.ttf') format('truetype');
}
.mui-icon
{
font-family: Muiicons;
font-size: 24px;
font-weight: normal;
font-style: normal;
line-height: 1;
display: inline-block;
text-decoration: none;
-webkit-font-smoothing: antialiased;
}
.mui-icon.mui-active
{
color: #007aff;
}
.mui-icon.mui-right:before
{
float: right;
padding-left: .2em;
}
.mui-icon-contact:before
{
content: '\e100';
}
.mui-icon-person:before
{
content: '\e101';
}
.mui-icon-personadd:before
{
content: '\e102';
}
.mui-icon-contact-filled:before
{
content: '\e130';
}
.mui-icon-person-filled:before
{
content: '\e131';
}
.mui-icon-personadd-filled:before
{
content: '\e132';
}
.mui-icon-phone:before
{
content: '\e200';
}
.mui-icon-email:before
{
content: '\e201';
}
.mui-icon-chatbubble:before
{
content: '\e202';
}
.mui-icon-chatboxes:before
{
content: '\e203';
}
.mui-icon-phone-filled:before
{
content: '\e230';
}
.mui-icon-email-filled:before
{
content: '\e231';
}
.mui-icon-chatbubble-filled:before
{
content: '\e232';
}
.mui-icon-chatboxes-filled:before
{
content: '\e233';
}
.mui-icon-weibo:before
{
content: '\e260';
}
.mui-icon-weixin:before
{
content: '\e261';
}
.mui-icon-pengyouquan:before
{
content: '\e262';
}
.mui-icon-chat:before
{
content: '\e263';
}
.mui-icon-qq:before
{
content: '\e264';
}
.mui-icon-videocam:before
{
content: '\e300';
}
.mui-icon-camera:before
{
content: '\e301';
}
.mui-icon-mic:before
{
content: '\e302';
}
.mui-icon-location:before
{
content: '\e303';
}
.mui-icon-mic-filled:before, .mui-icon-speech:before
{
content: '\e332';
}
.mui-icon-location-filled:before
{
content: '\e333';
}
.mui-icon-micoff:before
{
content: '\e360';
}
.mui-icon-image:before
{
content: '\e363';
}
.mui-icon-map:before
{
content: '\e364';
}
.mui-icon-compose:before
{
content: '\e400';
}
.mui-icon-trash:before
{
content: '\e401';
}
.mui-icon-upload:before
{
content: '\e402';
}
.mui-icon-download:before
{
content: '\e403';
}
.mui-icon-close:before
{
content: '\e404';
}
.mui-icon-redo:before
{
content: '\e405';
}
.mui-icon-undo:before
{
content: '\e406';
}
.mui-icon-refresh:before
{
content: '\e407';
}
.mui-icon-star:before
{
content: '\e408';
}
.mui-icon-plus:before
{
content: '\e409';
}
.mui-icon-minus:before
{
content: '\e410';
}
.mui-icon-circle:before, .mui-icon-checkbox:before
{
content: '\e411';
}
.mui-icon-close-filled:before, .mui-icon-clear:before
{
content: '\e434';
}
.mui-icon-refresh-filled:before
{
content: '\e437';
}
.mui-icon-star-filled:before
{
content: '\e438';
}
.mui-icon-plus-filled:before
{
content: '\e439';
}
.mui-icon-minus-filled:before
{
content: '\e440';
}
.mui-icon-circle-filled:before
{
content: '\e441';
}
.mui-icon-checkbox-filled:before
{
content: '\e442';
}
.mui-icon-closeempty:before
{
content: '\e460';
}
.mui-icon-refreshempty:before
{
content: '\e461';
}
.mui-icon-reload:before
{
content: '\e462';
}
.mui-icon-starhalf:before
{
content: '\e463';
}
.mui-icon-spinner:before
{
content: '\e464';
}
.mui-icon-spinner-cycle:before
{
content: '\e465';
}
.mui-icon-search:before
{
content: '\e466';
}
.mui-icon-plusempty:before
{
content: '\e468';
}
.mui-icon-forward:before
{
content: '\e470';
}
.mui-icon-back:before, .mui-icon-left-nav:before
{
content: '\e471';
}
.mui-icon-checkmarkempty:before
{
content: '\e472';
}
.mui-icon-home:before
{
content: '\e500';
}
.mui-icon-navigate:before
{
content: '\e501';
}
.mui-icon-gear:before
{
content: '\e502';
}
.mui-icon-paperplane:before
{
content: '\e503';
}
.mui-icon-info:before
{
content: '\e504';
}
.mui-icon-help:before
{
content: '\e505';
}
.mui-icon-locked:before
{
content: '\e506';
}
.mui-icon-more:before
{
content: '\e507';
}
.mui-icon-flag:before
{
content: '\e508';
}
.mui-icon-home-filled:before
{
content: '\e530';
}
.mui-icon-gear-filled:before
{
content: '\e532';
}
.mui-icon-info-filled:before
{
content: '\e534';
}
.mui-icon-help-filled:before
{
content: '\e535';
}
.mui-icon-more-filled:before
{
content: '\e537';
}
.mui-icon-settings:before
{
content: '\e560';
}
.mui-icon-list:before
{
content: '\e562';
}
.mui-icon-bars:before
{
content: '\e563';
}
.mui-icon-loop:before
{
content: '\e565';
}
.mui-icon-paperclip:before
{
content: '\e567';
}
.mui-icon-eye:before
{
content: '\e568';
}
.mui-icon-arrowup:before
{
content: '\e580';
}
.mui-icon-arrowdown:before
{
content: '\e581';
}
.mui-icon-arrowleft:before
{
content: '\e582';
}
.mui-icon-arrowright:before
{
content: '\e583';
}
.mui-icon-arrowthinup:before
{
content: '\e584';
}
.mui-icon-arrowthindown:before
{
content: '\e585';
}
.mui-icon-arrowthinleft:before
{
content: '\e586';
}
.mui-icon-arrowthinright:before
{
content: '\e587';
}
.mui-icon-pulldown:before
{
content: '\e588';
}
.mui-fullscreen
{
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.mui-fullscreen.mui-slider .mui-slider-group
{
height: 100%;
}
.mui-fullscreen .mui-segmented-control ~ .mui-slider-group
{
position: absolute;
top: 40px;
bottom: 0;
width: 100%;
height: auto;
}
.mui-fullscreen.mui-slider .mui-slider-item > a
{
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.mui-fullscreen .mui-off-canvas-wrap .mui-slider-item > a
{
top: auto;
-webkit-transform: none;
transform: none;
}
.mui-bar-nav ~ .mui-content .mui-slider.mui-fullscreen
{
top: 44px;
}
.mui-bar-tab ~ .mui-content .mui-slider.mui-fullscreen .mui-segmented-control ~ .mui-slider-group
{
bottom: 50px;
}
.mui-android.mui-android-4-0 input:focus,
.mui-android.mui-android-4-0 textarea:focus
{
-webkit-user-modify: inherit;
}
.mui-android.mui-android-4-2 input,
.mui-android.mui-android-4-2 textarea, .mui-android.mui-android-4-3 input,
.mui-android.mui-android-4-3 textarea
{
-webkit-user-select: text;
}
.mui-ios .mui-table-view-cell
{
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.mui-plus-visible, .mui-wechat-visible
{
display: none !important;
}
.mui-plus-hidden, .mui-wechat-hidden
{
display: block !important;
}
.mui-tab-item.mui-plus-hidden, .mui-tab-item.mui-wechat-hidden
{
display: table-cell !important;
}
.mui-plus .mui-plus-visible, .mui-wechat .mui-wechat-visible
{
display: block !important;
}
.mui-plus .mui-tab-item.mui-plus-visible, .mui-wechat .mui-tab-item.mui-wechat-visible
{
display: table-cell !important;
}
.mui-plus .mui-plus-hidden, .mui-wechat .mui-wechat-hidden
{
display: none !important;
}
.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav
{
height: 64px;
padding-top: 20px;
}
.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav ~ .mui-content
{
padding-top: 64px;
}
.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav ~ .mui-content .mui-pull-top-pocket
{
top: 64px;
}
.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary
{
top: 64px;
}
.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary ~ .mui-content
{
padding-top: 94px;
}
.mui-iframe-wrapper
{
position: absolute;
right: 0;
left: 0;
-webkit-overflow-scrolling: touch;
}
.mui-iframe-wrapper iframe
{
width: 100%;
height: 100%;
border: 0;
}
================================================
FILE: dist/js/mui.js
================================================
/*!
* =====================================================
* Mui v3.7.3 (http://dev.dcloud.net.cn/mui)
* =====================================================
*/
/**
* MUI核心JS
* @type _L4.$|Function
*/
var mui = (function(document, undefined) {
var readyRE = /complete|loaded|interactive/;
var idSelectorRE = /^#([\w-]+)$/;
var classSelectorRE = /^\.([\w-]+)$/;
var tagSelectorRE = /^[\w-]+$/;
var translateRE = /translate(?:3d)?\((.+?)\)/;
var translateMatrixRE = /matrix(3d)?\((.+?)\)/;
var $ = function(selector, context) {
context = context || document;
if (!selector)
return wrap();
if (typeof selector === 'object')
if ($.isArrayLike(selector)) {
return wrap($.slice.call(selector), null);
} else {
return wrap([selector], null);
}
if (typeof selector === 'function')
return $.ready(selector);
if (typeof selector === 'string') {
try {
selector = selector.trim();
if (idSelectorRE.test(selector)) {
var found = document.getElementById(RegExp.$1);
return wrap(found ? [found] : []);
}
return wrap($.qsa(selector, context), selector);
} catch (e) {}
}
return wrap();
};
var wrap = function(dom, selector) {
dom = dom || [];
Object.setPrototypeOf(dom, $.fn);
dom.selector = selector || '';
return dom;
};
$.uuid = 0;
$.data = {};
/**
* extend(simple)
* @param {type} target
* @param {type} source
* @param {type} deep
* @returns {unresolved}
*/
$.extend = function() { //from jquery2
var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
if (typeof target === "boolean") {
deep = target;
target = arguments[i] || {};
i++;
}
if (typeof target !== "object" && !$.isFunction(target)) {
target = {};
}
if (i === length) {
target = this;
i--;
}
for (; i < length; i++) {
if ((options = arguments[i]) != null) {
for (name in options) {
src = target[name];
copy = options[name];
if (target === copy) {
continue;
}
if (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {
if (copyIsArray) {
copyIsArray = false;
clone = src && $.isArray(src) ? src : [];
} else {
clone = src && $.isPlainObject(src) ? src : {};
}
target[name] = $.extend(deep, clone, copy);
} else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
};
/**
* mui noop(function)
*/
$.noop = function() {};
/**
* mui slice(array)
*/
$.slice = [].slice;
/**
* mui filter(array)
*/
$.filter = [].filter;
$.type = function(obj) {
return obj == null ? String(obj) : class2type[{}.toString.call(obj)] || "object";
};
/**
* mui isArray
*/
$.isArray = Array.isArray ||
function(object) {
return object instanceof Array;
};
/**
* mui isArrayLike
* @param {Object} obj
*/
$.isArrayLike = function(obj) {
var length = !!obj && "length" in obj && obj.length;
var type = $.type(obj);
if (type === "function" || $.isWindow(obj)) {
return false;
}
return type === "array" || length === 0 ||
typeof length === "number" && length > 0 && (length - 1) in obj;
};
/**
* mui isWindow(需考虑obj为undefined的情况)
*/
$.isWindow = function(obj) {
return obj != null && obj === obj.window;
};
/**
* mui isObject
*/
$.isObject = function(obj) {
return $.type(obj) === "object";
};
/**
* mui isPlainObject
*/
$.isPlainObject = function(obj) {
return $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype;
};
/**
* mui isEmptyObject
* @param {Object} o
*/
$.isEmptyObject = function(o) {
for (var p in o) {
if (p !== undefined) {
return false;
}
}
return true;
};
/**
* mui isFunction
*/
$.isFunction = function(value) {
return $.type(value) === "function";
};
/**
* mui querySelectorAll
* @param {type} selector
* @param {type} context
* @returns {Array}
*/
$.qsa = function(selector, context) {
context = context || document;
return $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector));
};
/**
* ready(DOMContentLoaded)
* @param {type} callback
* @returns {_L6.$}
*/
$.ready = function(callback) {
if (readyRE.test(document.readyState)) {
callback($);
} else {
document.addEventListener('DOMContentLoaded', function() {
callback($);
}, false);
}
return this;
};
/**
* 将 fn 缓存一段时间后, 再被调用执行
* 此方法为了避免在 ms 段时间内, 执行 fn 多次. 常用于 resize , scroll , mousemove 等连续性事件中;
* 当 ms 设置为 -1, 表示立即执行 fn, 即和直接调用 fn 一样;
* 调用返回函数的 stop 停止最后一次的 buffer 效果
* @param {Object} fn
* @param {Object} ms
* @param {Object} context
*/
$.buffer = function(fn, ms, context) {
var timer;
var lastStart = 0;
var lastEnd = 0;
var ms = ms || 150;
function run() {
if (timer) {
timer.cancel();
timer = 0;
}
lastStart = $.now();
fn.apply(context || this, arguments);
lastEnd = $.now();
}
return $.extend(function() {
if (
(!lastStart) || // 从未运行过
(lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒
(lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成,后8*ms毫秒
) {
run.apply(this, arguments);
} else {
if (timer) {
timer.cancel();
}
timer = $.later(run, ms, null, $.slice.call(arguments));
}
}, {
stop: function() {
if (timer) {
timer.cancel();
timer = 0;
}
}
});
};
/**
* each
* @param {type} elements
* @param {type} callback
* @returns {_L8.$}
*/
$.each = function(elements, callback, hasOwnProperty) {
if (!elements) {
return this;
}
if (typeof elements.length === 'number') {
[].every.call(elements, function(el, idx) {
return callback.call(el, idx, el) !== false;
});
} else {
for (var key in elements) {
if (hasOwnProperty) {
if (elements.hasOwnProperty(key)) {
if (callback.call(elements[key], key, elements[key]) === false) return elements;
}
} else {
if (callback.call(elements[key], key, elements[key]) === false) return elements;
}
}
}
return this;
};
$.focus = function(element) {
if ($.os.ios) {
setTimeout(function() {
element.focus();
}, 10);
} else {
element.focus();
}
};
/**
* trigger event
* @param {type} element
* @param {type} eventType
* @param {type} eventData
* @returns {_L8.$}
*/
$.trigger = function(element, eventType, eventData) {
element.dispatchEvent(new CustomEvent(eventType, {
detail: eventData,
bubbles: true,
cancelable: true
}));
return this;
};
/**
* getStyles
* @param {type} element
* @param {type} property
* @returns {styles}
*/
$.getStyles = function(element, property) {
var styles = element.ownerDocument.defaultView.getComputedStyle(element, null);
if (property) {
return styles.getPropertyValue(property) || styles[property];
}
return styles;
};
/**
* parseTranslate
* @param {type} translateString
* @param {type} position
* @returns {Object}
*/
$.parseTranslate = function(translateString, position) {
var result = translateString.match(translateRE || '');
if (!result || !result[1]) {
result = ['', '0,0,0'];
}
result = result[1].split(",");
result = {
x: parseFloat(result[0]),
y: parseFloat(result[1]),
z: parseFloat(result[2])
};
if (position && result.hasOwnProperty(position)) {
return result[position];
}
return result;
};
/**
* parseTranslateMatrix
* @param {type} translateString
* @param {type} position
* @returns {Object}
*/
$.parseTranslateMatrix = function(translateString, position) {
var matrix = translateString.match(translateMatrixRE);
var is3D = matrix && matrix[1];
if (matrix) {
matrix = matrix[2].split(",");
if (is3D === "3d")
matrix = matrix.slice(12, 15);
else {
matrix.push(0);
matrix = matrix.slice(4, 7);
}
} else {
matrix = [0, 0, 0];
}
var result = {
x: parseFloat(matrix[0]),
y: parseFloat(matrix[1]),
z: parseFloat(matrix[2])
};
if (position && result.hasOwnProperty(position)) {
return result[position];
}
return result;
};
$.hooks = {};
$.addAction = function(type, hook) {
var hooks = $.hooks[type];
if (!hooks) {
hooks = [];
}
hook.index = hook.index || 1000;
hooks.push(hook);
hooks.sort(function(a, b) {
return a.index - b.index;
});
$.hooks[type] = hooks;
return $.hooks[type];
};
$.doAction = function(type, callback) {
if ($.isFunction(callback)) { //指定了callback
$.each($.hooks[type], callback);
} else { //未指定callback,直接执行
$.each($.hooks[type], function(index, hook) {
return !hook.handle();
});
}
};
/**
* setTimeout封装
* @param {Object} fn
* @param {Object} when
* @param {Object} context
* @param {Object} data
*/
$.later = function(fn, when, context, data) {
when = when || 0;
var m = fn;
var d = data;
var f;
var r;
if (typeof fn === 'string') {
m = context[fn];
}
f = function() {
m.apply(context, $.isArray(d) ? d : [d]);
};
r = setTimeout(f, when);
return {
id: r,
cancel: function() {
clearTimeout(r);
}
};
};
$.now = Date.now || function() {
return +new Date();
};
var class2type = {};
$.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) {
class2type["[object " + name + "]"] = name.toLowerCase();
});
if (window.JSON) {
$.parseJSON = JSON.parse;
}
/**
* $.fn
*/
$.fn = {
each: function(callback) {
[].every.call(this, function(el, idx) {
return callback.call(el, idx, el) !== false;
});
return this;
}
};
/**
* 兼容 AMD 模块
**/
if (typeof define === 'function' && define.amd) {
define('mui', [], function() {
return $;
});
}
return $;
})(document);
//window.mui = mui;
//'$' in window || (window.$ = mui);
/**
* $.os
* @param {type} $
* @returns {undefined}
*/
(function($, window) {
function detect(ua) {
this.os = {};
var funcs = [
function() { //wechat
var wechat = ua.match(/(MicroMessenger)\/([\d\.]+)/i);
if (wechat) { //wechat
this.os.wechat = {
version: wechat[2].replace(/_/g, '.')
};
}
return false;
},
function() { //android
var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
if (android) {
this.os.android = true;
this.os.version = android[2];
this.os.isBadAndroid = !(/Chrome\/\d/.test(window.navigator.appVersion));
}
return this.os.android === true;
},
function() { //ios
var iphone = ua.match(/(iPhone\sOS)\s([\d_]+)/);
if (iphone) { //iphone
this.os.ios = this.os.iphone = true;
this.os.version = iphone[2].replace(/_/g, '.');
} else {
var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
if (ipad) { //ipad
this.os.ios = this.os.ipad = true;
this.os.version = ipad[2].replace(/_/g, '.');
}
}
return this.os.ios === true;
}
];
[].every.call(funcs, function(func) {
return !func.call($);
});
}
detect.call($, navigator.userAgent);
})(mui, window);
/**
* $.os.plus
* @param {type} $
* @returns {undefined}
*/
(function($, document) {
function detect(ua) {
this.os = this.os || {};
var plus = ua.match(/Html5Plus/i); //TODO 5\+Browser?
if (plus) {
this.os.plus = true;
$(function() {
document.body.classList.add('mui-plus');
});
if (ua.match(/StreamApp/i)) { //TODO 最好有流应用自己的标识
this.os.stream = true;
$(function() {
document.body.classList.add('mui-plus-stream');
});
}
}
}
detect.call($, navigator.userAgent);
})(mui, document);
/**
* 仅提供简单的on,off(仅支持事件委托,不支持当前元素绑定,当前元素绑定请直接使用addEventListener,removeEventListener)
* @param {Object} $
*/
(function($) {
if ('ontouchstart' in window) {
$.isTouchable = true;
$.EVENT_START = 'touchstart';
$.EVENT_MOVE = 'touchmove';
$.EVENT_END = 'touchend';
} else {
$.isTouchable = false;
$.EVENT_START = 'mousedown';
$.EVENT_MOVE = 'mousemove';
$.EVENT_END = 'mouseup';
}
$.EVENT_CANCEL = 'touchcancel';
$.EVENT_CLICK = 'click';
var _mid = 1;
var delegates = {};
//需要wrap的函数
var eventMethods = {
preventDefault: 'isDefaultPrevented',
stopImmediatePropagation: 'isImmediatePropagationStopped',
stopPropagation: 'isPropagationStopped'
};
//默认true返回函数
var returnTrue = function() {
return true
};
//默认false返回函数
var returnFalse = function() {
return false
};
//wrap浏览器事件
var compatible = function(event, target) {
if (!event.detail) {
event.detail = {
currentTarget: target
};
} else {
event.detail.currentTarget = target;
}
$.each(eventMethods, function(name, predicate) {
var sourceMethod = event[name];
event[name] = function() {
this[predicate] = returnTrue;
return sourceMethod && sourceMethod.apply(event, arguments)
}
event[predicate] = returnFalse;
}, true);
return event;
};
//简单的wrap对象_mid
var mid = function(obj) {
return obj && (obj._mid || (obj._mid = _mid++));
};
//事件委托对象绑定的事件回调列表
var delegateFns = {};
//返回事件委托的wrap事件回调
var delegateFn = function(element, event, selector, callback) {
return function(e) {
//same event
var callbackObjs = delegates[element._mid][event];
var handlerQueue = [];
var target = e.target;
var selectorAlls = {};
for (; target && target !== document; target = target.parentNode) {
if (target === element) {
break;
}
if (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) {
break;
}
var matches = {};
$.each(callbackObjs, function(selector, callbacks) { //same selector
selectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element));
if (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) {
if (!matches[selector]) {
matches[selector] = callbacks;
}
}
}, true);
if (!$.isEmptyObject(matches)) {
handlerQueue.push({
element: target,
handlers: matches
});
}
}
selectorAlls = null;
e = compatible(e); //compatible event
$.each(handlerQueue, function(index, handler) {
target = handler.element;
var tagName = target.tagName;
if (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) {
e.preventDefault();
e.detail && e.detail.gesture && e.detail.gesture.preventDefault();
}
$.each(handler.handlers, function(index, handler) {
$.each(handler, function(index, callback) {
if (callback.call(target, e) === false) {
e.preventDefault();
e.stopPropagation();
}
}, true);
}, true)
if (e.isPropagationStopped()) {
return false;
}
}, true);
};
};
var findDelegateFn = function(element, event) {
var delegateCallbacks = delegateFns[mid(element)];
var result = [];
if (delegateCallbacks) {
result = [];
if (event) {
var filterFn = function(fn) {
return fn.type === event;
}
return delegateCallbacks.filter(filterFn);
} else {
result = delegateCallbacks;
}
}
return result;
};
var preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;
/**
* mui delegate events
* @param {type} event
* @param {type} selector
* @param {type} callback
* @returns {undefined}
*/
$.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用,类似mouse,focus之类暂不封装支持
return this.each(function() {
var element = this;
mid(element);
mid(callback);
var isAddEventListener = false;
var delegateEvents = delegates[element._mid] || (delegates[element._mid] = {});
var delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {}));
if ($.isEmptyObject(delegateCallbackObjs)) {
isAddEventListener = true;
}
var delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []);
delegateCallbacks.push(callback);
if (isAddEventListener) {
var delegateFnArray = delegateFns[mid(element)];
if (!delegateFnArray) {
delegateFnArray = [];
}
var delegateCallback = delegateFn(element, event, selector, callback);
delegateFnArray.push(delegateCallback);
delegateCallback.i = delegateFnArray.length - 1;
delegateCallback.type = event;
delegateFns[mid(element)] = delegateFnArray;
element.addEventListener(event, delegateCallback);
if (event === 'tap') { //TODO 需要找个更好的解决方案
element.addEventListener('click', function(e) {
if (e.target) {
var tagName = e.target.tagName;
if (!preventDefaultException.test(tagName)) {
if (tagName === 'A') {
var href = e.target.href;
if (!(href && ~href.indexOf('tel:'))) {
e.preventDefault();
}
} else {
e.preventDefault();
}
}
}
});
}
}
});
};
$.fn.off = function(event, selector, callback) {
return this.each(function() {
var _mid = mid(this);
if (!event) { //mui(selector).off();
delegates[_mid] && delete delegates[_mid];
} else if (!selector) { //mui(selector).off(event);
delegates[_mid] && delete delegates[_mid][event];
} else if (!callback) { //mui(selector).off(event,selector);
delegates[_mid] && delegates[_mid][event] && delete delegates[_mid][event][selector];
} else { //mui(selector).off(event,selector,callback);
var delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector];
$.each(delegateCallbacks, function(index, delegateCallback) {
if (mid(delegateCallback) === mid(callback)) {
delegateCallbacks.splice(index, 1);
return false;
}
}, true);
}
if (delegates[_mid]) {
//如果off掉了所有当前element的指定的event事件,则remove掉当前element的delegate回调
if ((!delegates[_mid][event] || $.isEmptyObject(delegates[_mid][event]))) {
findDelegateFn(this, event).forEach(function(fn) {
this.removeEventListener(fn.type, fn);
delete delegateFns[_mid][fn.i];
}.bind(this));
}
} else {
//如果delegates[_mid]已不存在,删除所有
findDelegateFn(this).forEach(function(fn) {
this.removeEventListener(fn.type, fn);
delete delegateFns[_mid][fn.i];
}.bind(this));
}
});
};
})(mui);
/**
* mui target(action>popover>modal>tab>toggle)
*/
(function($, window, document) {
/**
* targets
*/
$.targets = {};
/**
* target handles
*/
$.targetHandles = [];
/**
* register target
* @param {type} target
* @returns {$.targets}
*/
$.registerTarget = function(target) {
target.index = target.index || 1000;
$.targetHandles.push(target);
$.targetHandles.sort(function(a, b) {
return a.index - b.index;
});
return $.targetHandles;
};
window.addEventListener($.EVENT_START, function(event) {
var target = event.target;
var founds = {};
for (; target && target !== document; target = target.parentNode) {
var isFound = false;
$.each($.targetHandles, function(index, targetHandle) {
var name = targetHandle.name;
if (!isFound && !founds[name] && targetHandle.hasOwnProperty('handle')) {
$.targets[name] = targetHandle.handle(event, target);
if ($.targets[name]) {
founds[name] = true;
if (targetHandle.isContinue !== true) {
isFound = true;
}
}
} else {
if (!founds[name]) {
if (targetHandle.isReset !== false)
$.targets[name] = false;
}
}
});
if (isFound) {
break;
}
}
});
window.addEventListener('click', function(event) { //解决touch与click的target不一致的问题(比如链接边缘点击时,touch的target为html,而click的target为A)
var target = event.target;
var isFound = false;
for (; target && target !== document; target = target.parentNode) {
if (target.tagName === 'A') {
$.each($.targetHandles, function(index, targetHandle) {
var name = targetHandle.name;
if (targetHandle.hasOwnProperty('handle')) {
if (targetHandle.handle(event, target)) {
isFound = true;
event.preventDefault();
return false;
}
}
});
if (isFound) {
break;
}
}
}
});
})(mui, window, document);
/**
* fixed trim
* @param {type} undefined
* @returns {undefined}
*/
(function(undefined) {
if (String.prototype.trim === undefined) { // fix for iOS 3.2
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
};
}
Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {
obj['__proto__'] = proto;
return obj;
};
})();
/**
* fixed CustomEvent
*/
(function() {
if (typeof window.CustomEvent === 'undefined') {
function CustomEvent(event, params) {
params = params || {
bubbles: false,
cancelable: false,
detail: undefined
};
var evt = document.createEvent('Events');
var bubbles = true;
for (var name in params) {
(name === 'bubbles') ? (bubbles = !!params[name]) : (evt[name] = params[name]);
}
evt.initEvent(event, bubbles, true);
return evt;
};
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
}
})();
/*
A shim for non ES5 supporting browsers.
Adds function bind to Function prototype, so that you can do partial application.
Works even with the nasty thing, where the first word is the opposite of extranet, the second one is the profession of Columbus, and the version number is 9, flipped 180 degrees.
*/
Function.prototype.bind = Function.prototype.bind || function(to) {
// Make an array of our arguments, starting from second argument
var partial = Array.prototype.splice.call(arguments, 1),
// We'll need the original function.
fn = this;
var bound = function() {
// Join the already applied arguments to the now called ones (after converting to an array again).
var args = partial.concat(Array.prototype.splice.call(arguments, 0));
// If not being called as a constructor
if (!(this instanceof bound)) {
// return the result of the function called bound to target and partially applied.
return fn.apply(to, args);
}
// If being called as a constructor, apply the function bound to self.
fn.apply(this, args);
}
// Attach the prototype of the function to our newly created function.
bound.prototype = fn.prototype;
return bound;
};
/**
* mui fixed classList
* @param {type} document
* @returns {undefined}
*/
(function(document) {
if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {
Object.defineProperty(HTMLElement.prototype, 'classList', {
get: function() {
var self = this;
function update(fn) {
return function(value) {
var classes = self.className.split(/\s+/),
index = classes.indexOf(value);
fn(classes, index, value);
self.className = classes.join(" ");
};
}
var ret = {
add: update(function(classes, index, value) {
~index || classes.push(value);
}),
remove: update(function(classes, index) {
~index && classes.splice(index, 1);
}),
toggle: update(function(classes, index, value) {
~index ? classes.splice(index, 1) : classes.push(value);
}),
contains: function(value) {
return !!~self.className.split(/\s+/).indexOf(value);
},
item: function(i) {
return self.className.split(/\s+/)[i] || null;
}
};
Object.defineProperty(ret, 'length', {
get: function() {
return self.className.split(/\s+/).length;
}
});
return ret;
}
});
}
})(document);
/**
* mui fixed requestAnimationFrame
* @param {type} window
* @returns {undefined}
*/
(function(window) {
if (!window.requestAnimationFrame) {
var lastTime = 0;
window.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));
var id = window.setTimeout(function() {
callback(currTime + timeToCall);
}, timeToCall);
lastTime = currTime + timeToCall;
return id;
};
window.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) {
clearTimeout(id);
};
};
}(window));
/**
* fastclick(only for radio,checkbox)
*/
(function($, window, name) {
if (!$.os.android && !$.os.ios) { //目前仅识别android和ios
return;
}
if (window.FastClick) {
return;
}
var handle = function(event, target) {
if (target.tagName === 'LABEL') {
if (target.parentNode) {
target = target.parentNode.querySelector('input');
}
}
if (target && (target.type === 'radio' || target.type === 'checkbox')) {
if (!target.disabled) { //disabled
return target;
}
}
return false;
};
$.registerTarget({
name: name,
index: 40,
handle: handle,
target: false
});
var dispatchEvent = function(event) {
var targetElement = $.targets.click;
if (targetElement) {
var clickEvent, touch;
// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect
if (document.activeElement && document.activeElement !== targetElement) {
document.activeElement.blur();
}
touch = event.detail.gesture.changedTouches[0];
// Synthesise a click event, with an extra attribute so it can be tracked
clickEvent = document.createEvent('MouseEvents');
clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
clickEvent.forwardedTouchEvent = true;
targetElement.dispatchEvent(clickEvent);
event.detail && event.detail.gesture.preventDefault();
}
};
window.addEventListener('tap', dispatchEvent);
window.addEventListener('doubletap', dispatchEvent);
//捕获
window.addEventListener('click', function(event) {
if ($.targets.click) {
if (!event.forwardedTouchEvent) { //stop click
if (event.stopImmediatePropagation) {
event.stopImmediatePropagation();
} else {
// Part of the hack for browsers that don't support Event#stopImmediatePropagation
event.propagationStopped = true;
}
event.stopPropagation();
event.preventDefault();
return false;
}
}
}, true);
})(mui, window, 'click');
(function($, document) {
$(function() {
if (!$.os.ios) {
return;
}
var CLASS_FOCUSIN = 'mui-focusin';
var CLASS_BAR_TAB = 'mui-bar-tab';
var CLASS_BAR_FOOTER = 'mui-bar-footer';
var CLASS_BAR_FOOTER_SECONDARY = 'mui-bar-footer-secondary';
var CLASS_BAR_FOOTER_SECONDARY_TAB = 'mui-bar-footer-secondary-tab';
// var content = document.querySelector('.' + CLASS_CONTENT);
// if (content) {
// document.body.insertBefore(content, document.body.firstElementChild);
// }
document.addEventListener('focusin', function(e) {
if ($.os.plus) { //在父webview里边不fix
if (window.plus) {
if (plus.webview.currentWebview().children().length > 0) {
return;
}
}
}
var target = e.target;
//TODO 需考虑所有键盘弹起的情况
if (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) {
if (target.disabled || target.readOnly) {
return;
}
document.body.classList.add(CLASS_FOCUSIN);
var isFooter = false;
for (; target && target !== document; target = target.parentNode) {
var classList = target.classList;
if (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) {
isFooter = true;
break;
}
}
if (isFooter) {
var scrollTop = document.body.scrollHeight;
var scrollLeft = document.body.scrollLeft;
setTimeout(function() {
window.scrollTo(scrollLeft, scrollTop);
}, 20);
}
}
});
document.addEventListener('focusout', function(e) {
var classList = document.body.classList;
if (classList.contains(CLASS_FOCUSIN)) {
classList.remove(CLASS_FOCUSIN);
setTimeout(function() {
window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
}, 20);
}
});
});
})(mui, document);
/**
* mui namespace(optimization)
* @param {type} $
* @returns {undefined}
*/
(function($) {
$.namespace = 'mui';
$.classNamePrefix = $.namespace + '-';
$.classSelectorPrefix = '.' + $.classNamePrefix;
/**
* 返回正确的className
* @param {type} className
* @returns {String}
*/
$.className = function(className) {
return $.classNamePrefix + className;
};
/**
* 返回正确的classSelector
* @param {type} classSelector
* @returns {String}
*/
$.classSelector = function(classSelector) {
return classSelector.replace(/\./g, $.classSelectorPrefix);
};
/**
* 返回正确的eventName
* @param {type} event
* @param {type} module
* @returns {String}
*/
$.eventName = function(event, module) {
return event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : '');
};
})(mui);
/**
* mui gestures
* @param {type} $
* @param {type} window
* @returns {undefined}
*/
(function($, window) {
$.gestures = {
session: {}
};
/**
* Gesture preventDefault
* @param {type} e
* @returns {undefined}
*/
$.preventDefault = function(e) {
e.preventDefault();
};
/**
* Gesture stopPropagation
* @param {type} e
* @returns {undefined}
*/
$.stopPropagation = function(e) {
e.stopPropagation();
};
/**
* register gesture
* @param {type} gesture
* @returns {$.gestures}
*/
$.addGesture = function(gesture) {
return $.addAction('gestures', gesture);
};
var round = Math.round;
var abs = Math.abs;
var sqrt = Math.sqrt;
var atan = Math.atan;
var atan2 = Math.atan2;
/**
* distance
* @param {type} p1
* @param {type} p2
* @returns {Number}
*/
var getDistance = function(p1, p2, props) {
if(!props) {
props = ['x', 'y'];
}
var x = p2[props[0]] - p1[props[0]];
var y = p2[props[1]] - p1[props[1]];
return sqrt((x * x) + (y * y));
};
/**
* scale
* @param {Object} starts
* @param {Object} moves
*/
var getScale = function(starts, moves) {
if(starts.length >= 2 && moves.length >= 2) {
var props = ['pageX', 'pageY'];
return getDistance(moves[1], moves[0], props) / getDistance(starts[1], starts[0], props);
}
return 1;
};
/**
* angle
* @param {type} p1
* @param {type} p2
* @returns {Number}
*/
var getAngle = function(p1, p2, props) {
if(!props) {
props = ['x', 'y'];
}
var x = p2[props[0]] - p1[props[0]];
var y = p2[props[1]] - p1[props[1]];
return atan2(y, x) * 180 / Math.PI;
};
/**
* direction
* @param {Object} x
* @param {Object} y
*/
var getDirection = function(x, y) {
if(x === y) {
return '';
}
if(abs(x) >= abs(y)) {
return x > 0 ? 'left' : 'right';
}
return y > 0 ? 'up' : 'down';
};
/**
* rotation
* @param {Object} start
* @param {Object} end
*/
var getRotation = function(start, end) {
var props = ['pageX', 'pageY'];
return getAngle(end[1], end[0], props) - getAngle(start[1], start[0], props);
};
/**
* px per ms
* @param {Object} deltaTime
* @param {Object} x
* @param {Object} y
*/
var getVelocity = function(deltaTime, x, y) {
return {
x: x / deltaTime || 0,
y: y / deltaTime || 0
};
};
/**
* detect gestures
* @param {type} event
* @param {type} touch
* @returns {undefined}
*/
var detect = function(event, touch) {
if($.gestures.stoped) {
return;
}
$.doAction('gestures', function(index, gesture) {
if(!$.gestures.stoped) {
if($.options.gestureConfig[gesture.name] !== false) {
gesture.handle(event, touch);
}
}
});
};
/**
* 暂时无用
* @param {Object} node
* @param {Object} parent
*/
var hasParent = function(node, parent) {
while(node) {
if(node == parent) {
return true;
}
node = node.parentNode;
}
return false;
};
var uniqueArray = function(src, key, sort) {
var results = [];
var values = [];
var i = 0;
while(i < src.length) {
var val = key ? src[i][key] : src[i];
if(values.indexOf(val) < 0) {
results.push(src[i]);
}
values[i] = val;
i++;
}
if(sort) {
if(!key) {
results = results.sort();
} else {
results = results.sort(function sortUniqueArray(a, b) {
return a[key] > b[key];
});
}
}
return results;
};
var getMultiCenter = function(touches) {
var touchesLength = touches.length;
if(touchesLength === 1) {
return {
x: round(touches[0].pageX),
y: round(touches[0].pageY)
};
}
var x = 0;
var y = 0;
var i = 0;
while(i < touchesLength) {
x += touches[i].pageX;
y += touches[i].pageY;
i++;
}
return {
x: round(x / touchesLength),
y: round(y / touchesLength)
};
};
var multiTouch = function() {
return $.options.gestureConfig.pinch;
};
var copySimpleTouchData = function(touch) {
var touches = [];
var i = 0;
while(i < touch.touches.length) {
touches[i] = {
pageX: round(touch.touches[i].pageX),
pageY: round(touch.touches[i].pageY)
};
i++;
}
return {
timestamp: $.now(),
gesture: touch.gesture,
touches: touches,
center: getMultiCenter(touch.touches),
deltaX: touch.deltaX,
deltaY: touch.deltaY
};
};
var calDelta = function(touch) {
var session = $.gestures.session;
var center = touch.center;
var offset = session.offsetDelta || {};
var prevDelta = session.prevDelta || {};
var prevTouch = session.prevTouch || {};
if(touch.gesture.type === $.EVENT_START || touch.gesture.type === $.EVENT_END) {
prevDelta = session.prevDelta = {
x: prevTouch.deltaX || 0,
y: prevTouch.deltaY || 0
};
offset = session.offsetDelta = {
x: center.x,
y: center.y
};
}
touch.deltaX = prevDelta.x + (center.x - offset.x);
touch.deltaY = prevDelta.y + (center.y - offset.y);
};
var calTouchData = function(touch) {
var session = $.gestures.session;
var touches = touch.touches;
var touchesLength = touches.length;
if(!session.firstTouch) {
session.firstTouch = copySimpleTouchData(touch);
}
if(multiTouch() && touchesLength > 1 && !session.firstMultiTouch) {
session.firstMultiTouch = copySimpleTouchData(touch);
} else if(touchesLength === 1) {
session.firstMultiTouch = false;
}
var firstTouch = session.firstTouch;
var firstMultiTouch = session.firstMultiTouch;
var offsetCenter = firstMultiTouch ? firstMultiTouch.center : firstTouch.center;
var center = touch.center = getMultiCenter(touches);
touch.timestamp = $.now();
touch.deltaTime = touch.timestamp - firstTouch.timestamp;
touch.angle = getAngle(offsetCenter, center);
touch.distance = getDistance(offsetCenter, center);
calDelta(touch);
touch.offsetDirection = getDirection(touch.deltaX, touch.deltaY);
touch.scale = firstMultiTouch ? getScale(firstMultiTouch.touches, touches) : 1;
touch.rotation = firstMultiTouch ? getRotation(firstMultiTouch.touches, touches) : 0;
calIntervalTouchData(touch);
};
var CAL_INTERVAL = 25;
var calIntervalTouchData = function(touch) {
var session = $.gestures.session;
var last = session.lastInterval || touch;
var deltaTime = touch.timestamp - last.timestamp;
var velocity;
var velocityX;
var velocityY;
var direction;
if(touch.gesture.type != $.EVENT_CANCEL && (deltaTime > CAL_INTERVAL || last.velocity === undefined)) {
var deltaX = last.deltaX - touch.deltaX;
var deltaY = last.deltaY - touch.deltaY;
var v = getVelocity(deltaTime, deltaX, deltaY);
velocityX = v.x;
velocityY = v.y;
velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
direction = getDirection(deltaX, deltaY) || last.direction;
session.lastInterval = touch;
} else {
velocity = last.velocity;
velocityX = last.velocityX;
velocityY = last.velocityY;
direction = last.direction;
}
touch.velocity = velocity;
touch.velocityX = velocityX;
touch.velocityY = velocityY;
touch.direction = direction;
};
var targetIds = {};
var convertTouches = function(touches) {
for(var i = 0; i < touches.length; i++) {
!touches['identifier'] && (touches['identifier'] = 0);
}
return touches;
};
var getTouches = function(event, touch) {
var allTouches = convertTouches($.slice.call(event.touches || [event]));
var type = event.type;
var targetTouches = [];
var changedTargetTouches = [];
//当touchstart或touchmove且touches长度为1,直接获得all和changed
if((type === $.EVENT_START || type === $.EVENT_MOVE) && allTouches.length === 1) {
targetIds[allTouches[0].identifier] = true;
targetTouches = allTouches;
changedTargetTouches = allTouches;
touch.target = event.target;
} else {
var i = 0;
var targetTouches = [];
var changedTargetTouches = [];
var changedTouches = convertTouches($.slice.call(event.changedTouches || [event]));
touch.target = event.target;
var sessionTarget = $.gestures.session.target || event.target;
targetTouches = allTouches.filter(function(touch) {
return hasParent(touch.target, sessionTarget);
});
if(type === $.EVENT_START) {
i = 0;
while(i < targetTouches.length) {
targetIds[targetTouches[i].identifier] = true;
i++;
}
}
i = 0;
while(i < changedTouches.length) {
if(targetIds[changedTouches[i].identifier]) {
changedTargetTouches.push(changedTouches[i]);
}
if(type === $.EVENT_END || type === $.EVENT_CANCEL) {
delete targetIds[changedTouches[i].identifier];
}
i++;
}
if(!changedTargetTouches.length) {
return false;
}
}
targetTouches = uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true);
var touchesLength = targetTouches.length;
var changedTouchesLength = changedTargetTouches.length;
if(type === $.EVENT_START && touchesLength - changedTouchesLength === 0) { //first
touch.isFirst = true;
$.gestures.touch = $.gestures.session = {
target: event.target
};
}
touch.isFinal = ((type === $.EVENT_END || type === $.EVENT_CANCEL) && (touchesLength - changedTouchesLength === 0));
touch.touches = targetTouches;
touch.changedTouches = changedTargetTouches;
return true;
};
var handleTouchEvent = function(event) {
var touch = {
gesture: event
};
var touches = getTouches(event, touch);
if(!touches) {
return;
}
calTouchData(touch);
detect(event, touch);
$.gestures.session.prevTouch = touch;
if(event.type === $.EVENT_END && !$.isTouchable) {
$.gestures.touch = $.gestures.session = {};
}
};
var supportsPassive = (function checkPassiveListener() {
var supportsPassive = false;
try {
var opts = Object.defineProperty({}, 'passive', {
get: function get() {
supportsPassive = true;
},
});
window.addEventListener('testPassiveListener', null, opts);
} catch(e) {
// No support
}
return supportsPassive;
}())
window.addEventListener($.EVENT_START, handleTouchEvent);
window.addEventListener($.EVENT_MOVE, handleTouchEvent, supportsPassive ? {
passive: false,
capture: false
} : false);
window.addEventListener($.EVENT_END, handleTouchEvent);
window.addEventListener($.EVENT_CANCEL, handleTouchEvent);
//fixed hashchange(android)
window.addEventListener($.EVENT_CLICK, function(e) {
//TODO 应该判断当前target是不是在targets.popover内部,而不是非要相等
if(($.os.android || $.os.ios) && (($.targets.popover && e.target === $.targets.popover) || ($.targets.tab) || $.targets.offcanvas || $.targets.modal)) {
e.preventDefault();
}
}, true);
//增加原生滚动识别
$.isScrolling = false;
var scrollingTimeout = null;
window.addEventListener('scroll', function() {
$.isScrolling = true;
scrollingTimeout && clearTimeout(scrollingTimeout);
scrollingTimeout = setTimeout(function() {
$.isScrolling = false;
}, 250);
});
})(mui, window);
/**
* mui gesture flick[left|right|up|down]
* @param {type} $
* @param {type} name
* @returns {undefined}
*/
(function($, name) {
var flickStartTime = 0;
var handle = function(event, touch) {
var session = $.gestures.session;
var options = this.options;
var now = $.now();
switch (event.type) {
case $.EVENT_MOVE:
if (now - flickStartTime > 300) {
flickStartTime = now;
session.flickStart = touch.center;
}
break;
case $.EVENT_END:
case $.EVENT_CANCEL:
touch.flick = false;
if (session.flickStart && options.flickMaxTime > (now - flickStartTime) && touch.distance > options.flickMinDistince) {
touch.flick = true;
touch.flickTime = now - flickStartTime;
touch.flickDistanceX = touch.center.x - session.flickStart.x;
touch.flickDistanceY = touch.center.y - session.flickStart.y;
$.trigger(session.target, name, touch);
$.trigger(session.target, name + touch.direction, touch);
}
break;
}
};
/**
* mui gesture flick
*/
$.addGesture({
name: name,
index: 5,
handle: handle,
options: {
flickMaxTime: 200,
flickMinDistince: 10
}
});
})(mui, 'flick');
/**
* mui gesture swipe[left|right|up|down]
* @param {type} $
* @param {type} name
* @returns {undefined}
*/
(function($, name) {
var handle = function(event, touch) {
var session = $.gestures.session;
if (event.type === $.EVENT_END || event.type === $.EVENT_CANCEL) {
var options = this.options;
touch.swipe = false;
//TODO 后续根据velocity计算
if (touch.direction && options.swipeMaxTime > touch.deltaTime && touch.distance > options.swipeMinDistince) {
touch.swipe = true;
$.trigger(session.target, name, touch);
$.trigger(session.target, name + touch.direction, touch);
}
}
};
/**
* mui gesture swipe
*/
$.addGesture({
name: name,
index: 10,
handle: handle,
options: {
swipeMaxTime: 300,
swipeMinDistince: 18
}
});
})(mui, 'swipe');
/**
* mui gesture drag[start|left|right|up|down|end]
* @param {type} $
* @param {type} name
* @returns {undefined}
*/
(function($, name) {
var handle = function(event, touch) {
var session = $.gestures.session;
switch (event.type) {
case $.EVENT_START:
break;
case $.EVENT_MOVE:
if (!touch.direction || !session.target) {
return;
}
//修正direction,可在session期间自行锁定拖拽方向,方便开发scroll类不同方向拖拽插件嵌套
if (session.lockDirection && session.startDirection) {
if (session.startDirection && session.startDirection !== touch.direction) {
if (session.startDirection === 'up' || session.startDirection === 'down') {
touch.direction = touch.deltaY < 0 ? 'up' : 'down';
} else {
touch.direction = touch.deltaX < 0 ? 'left' : 'right';
}
}
}
if (!session.drag) {
session.drag = true;
$.trigger(session.target, name + 'start', touch);
}
$.trigger(session.target, name, touch);
$.trigger(session.target, name + touch.direction, touch);
break;
case $.EVENT_END:
case $.EVENT_CANCEL:
if (session.drag && touch.isFinal) {
$.trigger(session.target, name + 'end', touch);
}
break;
}
};
/**
* mui gesture drag
*/
$.addGesture({
name: name,
index: 20,
handle: handle,
options: {
fingers: 1
}
});
})(mui, 'drag');
/**
* mui gesture tap and doubleTap
* @param {type} $
* @param {type} name
* @returns {undefined}
*/
(function($, name) {
var lastTarget;
var lastTapTime;
var handle = function(event, touch) {
var session = $.gestures.session;
var options = this.options;
switch (event.type) {
case $.EVENT_END:
if (!touch.isFinal) {
return;
}
var target = session.target;
if (!target || (target.disabled || (target.classList && target.classList.contains('mui-disabled')))) {
return;
}
if (touch.distance < options.tapMaxDistance && touch.deltaTime < options.tapMaxTime) {
if ($.options.gestureConfig.doubletap && lastTarget && (lastTarget === target)) { //same target
if (lastTapTime && (touch.timestamp - lastTapTime) < options.tapMaxInterval) {
$.trigger(target, 'doubletap', touch);
lastTapTime = $.now();
lastTarget = target;
return;
}
}
$.trigger(target, name, touch);
lastTapTime = $.now();
lastTarget = target;
}
break;
}
};
/**
* mui gesture tap
*/
$.addGesture({
name: name,
index: 30,
handle: handle,
options: {
fingers: 1,
tapMaxInterval: 300,
tapMaxDistance: 5,
tapMaxTime: 250
}
});
})(mui, 'tap');
/**
* mui gesture longtap
* @param {type} $
* @param {type} name
* @returns {undefined}
*/
(function($, name) {
var timer;
var handle = function(event, touch) {
var session = $.gestures.session;
var options = this.options;
switch (event.type) {
case $.EVENT_START:
clearTimeout(timer);
timer = setTimeout(function() {
$.trigger(session.target, name, touch);
}, options.holdTimeout);
break;
case $.EVENT_MOVE:
if (touch.distance > options.holdThreshold) {
clearTimeout(timer);
}
break;
case $.EVENT_END:
case $.EVENT_CANCEL:
clearTimeout(timer);
break;
}
};
/**
* mui gesture longtap
*/
$.addGesture({
name: name,
index: 10,
handle: handle,
options: {
fingers: 1,
holdTimeout: 500,
holdThreshold: 2
}
});
})(mui, 'longtap');
/**
* mui gesture hold
* @param {type} $
* @param {type} name
* @returns {undefined}
*/
(function($, name) {
var timer;
var handle = function(event, touch) {
var session = $.gestures.session;
var options = this.options;
switch (event.type) {
case $.EVENT_START:
if ($.options.gestureConfig.hold) {
timer && clearTimeout(timer);
timer = setTimeout(function() {
touch.hold = true;
$.trigger(session.target, name, touch);
}, options.holdTimeout);
}
break;
case $.EVENT_MOVE:
break;
case $.EVENT_END:
case $.EVENT_CANCEL:
if (timer) {
clearTimeout(timer) && (timer = null);
$.trigger(session.target, 'release', touch);
}
break;
}
};
/**
* mui gesture hold
*/
$.addGesture({
name: name,
index: 10,
handle: handle,
options: {
fingers: 1,
holdTimeout: 0
}
});
})(mui, 'hold');
/**
* mui gesture pinch
* @param {type} $
* @param {type} name
* @returns {undefined}
*/
(function($, name) {
var handle = function(event, touch) {
var options = this.options;
var session = $.gestures.session;
switch (event.type) {
case $.EVENT_START:
break;
case $.EVENT_MOVE:
if ($.options.gestureConfig.pinch) {
if (touch.touches.length < 2) {
return;
}
if (!session.pinch) { //start
session.pinch = true;
$.trigger(session.target, name + 'start', touch);
}
$.trigger(session.target, name, touch);
var scale = touch.scale;
var rotation = touch.rotation;
var lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale;
var scaleDiff = 0.000000000001; //防止scale与lastScale相等,不触发事件的情况。
if (scale > lastScale) { //out
lastScale = scale - scaleDiff;
$.trigger(session.target, name + 'out', touch);
} //in
else if (scale < lastScale) {
lastScale = scale + scaleDiff;
$.trigger(session.target, name + 'in', touch);
}
if (Math.abs(rotation) > options.minRotationAngle) {
$.trigger(session.target, 'rotate', touch);
}
}
break;
case $.EVENT_END:
case $.EVENT_CANCEL:
if ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) {
session.pinch = false;
$.trigger(session.target, name + 'end', touch);
}
break;
}
};
/**
* mui gesture pinch
*/
$.addGesture({
name: name,
index: 10,
handle: handle,
options: {
minRotationAngle: 0
}
});
})(mui, 'pinch');
/**
* mui.init
* @param {type} $
* @returns {undefined}
*/
(function($) {
$.global = $.options = {
gestureConfig: {
tap: true,
doubletap: false,
longtap: false,
hold: false,
flick: true,
swipe: true,
drag: true,
pinch: false
}
};
/**
*
* @param {type} options
* @returns {undefined}
*/
$.initGlobal = function(options) {
$.options = $.extend(true, $.global, options);
return this;
};
var inits = {};
/**
* 单页配置 初始化
* @param {object} options
*/
$.init = function(options) {
$.options = $.extend(true, $.global, options || {});
$.ready(function() {
$.doAction('inits', function(index, init) {
var isInit = !!(!inits[init.name] || init.repeat);
if (isInit) {
init.handle.call($);
inits[init.name] = true;
}
});
});
return this;
};
/**
* 增加初始化执行流程
* @param {function} init
*/
$.addInit = function(init) {
return $.addAction('inits', init);
};
/**
* 处理html5版本subpages
*/
$.addInit({
name: 'iframe',
index: 100,
handle: function() {
var options = $.options;
var subpages = options.subpages || [];
if (!$.os.plus && subpages.length) {
//暂时只处理单个subpage。后续可以考虑支持多个subpage
createIframe(subpages[0]);
}
}
});
var createIframe = function(options) {
var wrapper = document.createElement('div');
wrapper.className = 'mui-iframe-wrapper';
var styles = options.styles || {};
if (typeof styles.top !== 'string') {
styles.top = '0px';
}
if (typeof styles.bottom !== 'string') {
styles.bottom = '0px';
}
wrapper.style.top = styles.top;
wrapper.style.bottom = styles.bottom;
var iframe = document.createElement('iframe');
iframe.src = options.url;
iframe.id = options.id || options.url;
iframe.name = iframe.id;
wrapper.appendChild(iframe);
document.body.appendChild(wrapper);
//目前仅处理微信
$.os.wechat && handleScroll(wrapper, iframe);
};
function handleScroll(wrapper, iframe) {
var key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src;
var scrollTop = (parseFloat(localStorage.getItem(key)) || 0);
if (scrollTop) {
(function(y) {
iframe.onload = function() {
window.scrollTo(0, y);
};
})(scrollTop);
}
setInterval(function() {
var _scrollTop = window.scrollY;
if (scrollTop !== _scrollTop) {
localStorage.setItem(key, _scrollTop + '');
scrollTop = _scrollTop;
}
}, 100);
};
$(function() {
var classList = document.body.classList;
var os = [];
if ($.os.ios) {
os.push({
os: 'ios',
version: $.os.version
});
classList.add('mui-ios');
} else if ($.os.android) {
os.push({
os: 'android',
version: $.os.version
});
classList.add('mui-android');
}
if ($.os.wechat) {
os.push({
os: 'wechat',
version: $.os.wechat.version
});
classList.add('mui-wechat');
}
if (os.length) {
$.each(os, function(index, osObj) {
var version = '';
var classArray = [];
if (osObj.version) {
$.each(osObj.version.split('.'), function(i, v) {
version = version + (version ? '-' : '') + v;
classList.add($.className(osObj.os + '-' + version));
});
}
});
}
});
})(mui);
/**
* mui.init 5+
* @param {type} $
* @returns {undefined}
*/
(function($) {
var defaultOptions = {
swipeBack: false,
preloadPages: [], //5+ lazyLoad webview
preloadLimit: 10, //预加载窗口的数量限制(一旦超出,先进先出)
keyEventBind: {
backbutton: true,
menubutton: true
},
titleConfig: {
height: "44px",
backgroundColor: "#f7f7f7", //导航栏背景色
bottomBorderColor: "#cccccc", //底部边线颜色
title: { //标题配置
text: "", //标题文字
position: {
top: 0,
left: 0,
width: "100%",
height: "100%"
},
styles: {
color: "#000000",
align: "center",
family: "'Helvetica Neue',Helvetica,sans-serif",
size: "17px",
style: "normal",
weight: "normal",
fontSrc: ""
}
},
back: {
image: {
base64Data: '',
imgSrc: '',
sprite: {
top: '0px',
left: '0px',
width: '100%',
height: '100%'
},
position: {
top: "10px",
left: "10px",
width: "24px",
height: "24px"
}
}
}
}
};
//默认页面动画
var defaultShow = {
event:"titleUpdate",
autoShow: true,
duration: 300,
aniShow: 'slide-in-right',
extras:{}
};
//若执行了显示动画初始化操作,则要覆盖默认配置
if($.options.show) {
defaultShow = $.extend(true, defaultShow, $.options.show);
}
$.currentWebview = null;
$.extend(true, $.global, defaultOptions);
$.extend(true, $.options, defaultOptions);
/**
* 等待动画配置
* @param {type} options
* @returns {Object}
*/
$.waitingOptions = function(options) {
return $.extend(true, {}, {
autoShow: true,
title: '',
modal: false
}, options);
};
/**
* 窗口显示配置
* @param {type} options
* @returns {Object}
*/
$.showOptions = function(options) {
return $.extend(true, {}, defaultShow, options);
};
/**
* 窗口默认配置
* @param {type} options
* @returns {Object}
*/
$.windowOptions = function(options) {
return $.extend({
scalable: false,
bounce: "" //vertical
}, options);
};
/**
* plusReady
* @param {type} callback
* @returns {_L6.$}
*/
$.plusReady = function(callback) {
if(window.plus) {
setTimeout(function() { //解决callback与plusready事件的执行时机问题(典型案例:showWaiting,closeWaiting)
callback();
}, 0);
} else {
document.addEventListener("plusready", function() {
callback();
}, false);
}
return this;
};
/**
* 5+ event(5+没提供之前我自己实现)
* @param {type} webview
* @param {type} eventType
* @param {type} data
* @returns {undefined}
*/
$.fire = function(webview, eventType, data) {
if(webview) {
if(typeof data === 'undefined') {
data = '';
} else if(typeof data === 'boolean' || typeof data === 'number') {
webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "'," + data + ")");
return;
} else if($.isPlainObject(data) || $.isArray(data)) {
data = JSON.stringify(data || {}).replace(/\'/g, "\\u0027").replace(/\\/g, "\\u005c");
}
webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "','" + data + "')");
}
};
/**
* 5+ event(5+没提供之前我自己实现)
* @param {type} eventType
* @param {type} data
* @returns {undefined}
*/
$.receive = function(eventType, data) {
if(eventType) {
try {
if(data && typeof data === 'string') {
data = JSON.parse(data);
}
} catch(e) {}
$.trigger(document, eventType, data);
}
};
var triggerPreload = function(webview) {
if(!webview.preloaded) { //保证仅触发一次
$.fire(webview, 'preload');
var list = webview.children();
for(var i = 0; i < list.length; i++) {
$.fire(list[i], 'preload');
}
webview.preloaded = true;
}
};
var trigger = function(webview, eventType, timeChecked) {
if(timeChecked) {
if(!webview[eventType + 'ed']) {
$.fire(webview, eventType);
var list = webview.children();
for(var i = 0; i < list.length; i++) {
$.fire(list[i], eventType);
}
webview[eventType + 'ed'] = true;
}
} else {
$.fire(webview, eventType);
var list = webview.children();
for(var i = 0; i < list.length; i++) {
$.fire(list[i], eventType);
}
}
};
/**
* 打开新窗口
* @param {string} url 要打开的页面地址
* @param {string} id 指定页面ID
* @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}}
*/
$.openWindow = function(url, id, options) {
if(typeof url === 'object') {
options = url;
url = options.url;
id = options.id || url;
} else {
if(typeof id === 'object') {
options = id;
id = options.id || url;
} else {
id = id || url;
}
}
if(!$.os.plus) {
//TODO 先临时这么处理:手机上顶层跳,PC上parent跳
if($.os.ios || $.os.android) {
window.top.location.href = url;
} else {
window.parent.location.href = url;
}
return;
}
if(!window.plus) {
return;
}
options = options || {};
var params = options.params || {};
var webview = null,
webviewCache = null,
nShow, nWaiting;
if($.webviews[id]) {
webviewCache = $.webviews[id];
//webview真实存在,才能获取
if(plus.webview.getWebviewById(id)) {
webview = webviewCache.webview;
}
} else if(options.createNew !== true) {
webview = plus.webview.getWebviewById(id);
}
if(webview) { //已缓存
//每次show都需要传递动画参数;
//预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置;
nShow = webviewCache ? webviewCache.show : defaultShow;
nShow = options.show ? $.extend(nShow, options.show) : nShow;
nShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {
triggerPreload(webview);
trigger(webview, 'pagebeforeshow', false);
});
if(webviewCache) {
webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')');
}
return webview;
} else { //新窗口
if(!url) {
throw new Error('webview[' + id + '] does not exist');
}
//显示waiting
var waitingConfig = $.waitingOptions(options.waiting);
if(waitingConfig.autoShow) {
nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);
}
//创建页面
options = $.extend(options, {
id: id,
url: url
});
webview = $.createWindow(options);
//显示
nShow = $.showOptions(options.show);
if(nShow.autoShow) {
var showWebview = function() {
//关闭等待框
if(nWaiting) {
nWaiting.close();
}
//显示页面
webview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);
options.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')');
};
//titleUpdate触发时机早于loaded,更换为titleUpdate后,可以更早的显示webview
webview.addEventListener(nShow.event, showWebview, false);
//loaded事件发生后,触发预加载和pagebeforeshow事件
webview.addEventListener("loaded", function() {
triggerPreload(webview);
trigger(webview, 'pagebeforeshow', false);
}, false);
}
}
return webview;
};
$.openWindowWithTitle = function(options, titleConfig) {
options = options || {};
var url = options.url;
var id = options.id || url;
if(!$.os.plus) {
//TODO 先临时这么处理:手机上顶层跳,PC上parent跳
if($.os.ios || $.os.android) {
window.top.location.href = url;
} else {
window.parent.location.href = url;
}
return;
}
if(!window.plus) {
return;
}
var params = options.params || {};
var webview = null,
webviewCache = null,
nShow, nWaiting;
if($.webviews[id]) {
webviewCache = $.webviews[id];
//webview真实存在,才能获取
if(plus.webview.getWebviewById(id)) {
webview = webviewCache.webview;
}
} else if(options.createNew !== true) {
webview = plus.webview.getWebviewById(id);
}
if(webview) { //已缓存
//每次show都需要传递动画参数;
//预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置;
nShow = webviewCache ? webviewCache.show : defaultShow;
nShow = options.show ? $.extend(nShow, options.show) : nShow;
nShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {
triggerPreload(webview);
trigger(webview, 'pagebeforeshow', false);
});
if(webviewCache) {
webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')');
}
return webview;
} else { //新窗口
if(!url) {
throw new Error('webview[' + id + '] does not exist');
}
//显示waiting
var waitingConfig = $.waitingOptions(options.waiting);
if(waitingConfig.autoShow) {
nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);
}
//创建页面
options = $.extend(options, {
id: id,
url: url
});
webview = $.createWindow(options);
if(titleConfig) { //处理原生头
$.extend(true, $.options.titleConfig, titleConfig);
var tid = $.options.titleConfig.id ? $.options.titleConfig.id : id + "_title";
var view = new plus.nativeObj.View(tid, {
top: 0,
height: $.options.titleConfig.height,
width: "100%",
dock: "top",
position: "dock"
});
view.drawRect($.options.titleConfig.backgroundColor); //绘制背景色
var _b = parseInt($.options.titleConfig.height) - 1;
view.drawRect($.options.titleConfig.bottomBorderColor, {
top: _b + "px",
left: "0px"
}); //绘制底部边线
//绘制文字
if($.options.titleConfig.title.text){
var _title = $.options.titleConfig.title;
view.drawText(_title.text,_title.position , _title.styles);
}
//返回图标绘制
var _back = $.options.titleConfig.back;
var backClick = null;
//优先字体
//其次是图片
var _backImage = _back.image;
if(_backImage.base64Data || _backImage.imgSrc) {
//TODO 此处需要处理百分比的情况
backClick = {
left:parseInt(_backImage.position.left),
right:parseInt(_backImage.position.left) + parseInt(_backImage.position.width)
};
var bitmap = new plus.nativeObj.Bitmap(id + "_back");
if(_backImage.base64Data) { //优先base64编码字符串
bitmap.loadBase64Data(_backImage.base64Data);
} else { //其次加载图片文件
bitmap.load(_backImage.imgSrc);
}
view.drawBitmap(bitmap,_backImage.sprite , _backImage.position);
}
//处理点击事件
view.setTouchEventRect({
top: "0px",
left: "0px",
width: "100%",
height: "100%"
});
view.interceptTouchEvent(true);
view.addEventListener("click", function(e) {
var x = e.clientX;
//返回按钮点击
if(backClick&& x > backClick.left && x < backClick.right){
if( _back.click && $.isFunction(_back.click)){
_back.click();
}else{
webview.evalJS("window.mui&&mui.back();");
}
}
}, false);
webview.append(view);
}
//显示
nShow = $.showOptions(options.show);
if(nShow.autoShow) {
//titleUpdate触发时机早于loaded,更换为titleUpdate后,可以更早的显示webview
webview.addEventListener(nShow.event, function () {
//关闭等待框
if(nWaiting) {
nWaiting.close();
}
//显示页面
webview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);
}, false);
}
}
return webview;
};
/**
* 根据配置信息创建一个webview
* @param {type} options
* @param {type} isCreate
* @returns {webview}
*/
$.createWindow = function(options, isCreate) {
if(!window.plus) {
return;
}
var id = options.id || options.url;
var webview;
if(options.preload) {
if($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache
webview = $.webviews[id].webview;
} else { //新增预加载窗口
//判断是否携带createNew参数,默认为false
if(options.createNew !== true) {
webview = plus.webview.getWebviewById(id);
}
//之前没有,那就新创建
if(!webview) {
webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({
preload: true
}, options.extras));
if(options.subpages) {
$.each(options.subpages, function(index, subpage) {
var subpageId = subpage.id || subpage.url;
if(subpageId) { //过滤空对象
var subWebview = plus.webview.getWebviewById(subpageId);
if(!subWebview) { //如果该webview不存在,则创建
subWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), $.extend({
preload: true
}, subpage.extras));
}
webview.append(subWebview);
}
});
}
}
}
//TODO 理论上,子webview也应该计算到预加载队列中,但这样就麻烦了,要退必须退整体,否则可能出现问题;
$.webviews[id] = {
webview: webview, //目前仅preload的缓存webview
preload: true,
show: $.showOptions(options.show),
afterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯
};
//索引该预加载窗口
var preloads = $.data.preloads;
var index = preloads.indexOf(id);
if(~index) { //删除已存在的(变相调整插入位置)
preloads.splice(index, 1);
}
preloads.push(id);
if(preloads.length > $.options.preloadLimit) {
//先进先出
var first = $.data.preloads.shift();
var webviewCache = $.webviews[first];
if(webviewCache && webviewCache.webview) {
//需要将自己打开的所有页面,全部close;
//关闭该预加载webview
$.closeAll(webviewCache.webview);
}
//删除缓存
delete $.webviews[first];
}
} else {
if(isCreate !== false) { //直接创建非预加载窗口
webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras);
if(options.subpages) {
$.each(options.subpages, function(index, subpage) {
var subpageId = subpage.id || subpage.url;
var subWebview = plus.webview.getWebviewById(subpageId);
if(!subWebview) {
subWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), subpage.extras);
}
webview.append(subWebview);
});
}
}
}
return webview;
};
/**
* 预加载
*/
$.preload = function(options) {
//调用预加载函数,不管是否传递preload参数,强制变为true
if(!options.preload) {
options.preload = true;
}
return $.createWindow(options);
};
/**
*关闭当前webview打开的所有webview;
*/
$.closeOpened = function(webview) {
var opened = webview.opened();
if(opened) {
for(var i = 0, len = opened.length; i < len; i++) {
var openedWebview = opened[i];
var open_open = openedWebview.opened();
if(open_open && open_open.length > 0) {
//关闭打开的webview
$.closeOpened(openedWebview);
//关闭自己
openedWebview.close("none");
} else {
//如果直接孩子节点,就不用关闭了,因为父关闭的时候,会自动关闭子;
if(openedWebview.parent() !== webview) {
openedWebview.close('none');
}
}
}
}
};
$.closeAll = function(webview, aniShow) {
$.closeOpened(webview);
if(aniShow) {
webview.close(aniShow);
} else {
webview.close();
}
};
/**
* 批量创建webview
* @param {type} options
* @returns {undefined}
*/
$.createWindows = function(options) {
$.each(options, function(index, option) {
//初始化预加载窗口(创建)和非预加载窗口(仅配置,不创建)
$.createWindow(option, false);
});
};
/**
* 创建当前页面的子webview
* @param {type} options
* @returns {webview}
*/
$.appendWebview = function(options) {
if(!window.plus) {
return;
}
var id = options.id || options.url;
var webview;
if(!$.webviews[id]) { //保证执行一遍
//TODO 这里也有隐患,比如某个webview不是作为subpage创建的,而是作为target webview的话;
if(!plus.webview.getWebviewById(id)) {
webview = plus.webview.create(options.url, id, options.styles, options.extras);
}
//之前的实现方案:子窗口loaded之后再append到父窗口中;
//问题:部分子窗口loaded事件发生较晚,此时执行父窗口的children方法会返回空,导致父子通讯失败;
// 比如父页面执行完preload事件后,需触发子页面的preload事件,此时未append的话,就无法触发;
//修改方式:不再监控loaded事件,直接append
//by chb@20150521
// webview.addEventListener('loaded', function() {
plus.webview.currentWebview().append(webview);
// });
$.webviews[id] = options;
}
return webview;
};
//全局webviews
$.webviews = {};
//预加载窗口索引
$.data.preloads = [];
//$.currentWebview
$.plusReady(function() {
$.currentWebview = plus.webview.currentWebview();
});
$.addInit({
name: '5+',
index: 100,
handle: function() {
var options = $.options;
var subpages = options.subpages || [];
if($.os.plus) {
$.plusReady(function() {
//TODO 这里需要判断一下,最好等子窗口加载完毕后,再调用主窗口的show方法;
//或者:在openwindow方法中,监听实现;
$.each(subpages, function(index, subpage) {
$.appendWebview(subpage);
});
//判断是否首页
if(plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) {
//首页需要自己激活预加载;
//timeout因为子页面loaded之后才append的,防止子页面尚未append、从而导致其preload未触发的问题;
setTimeout(function() {
triggerPreload(plus.webview.currentWebview());
}, 300);
}
//设置ios顶部状态栏颜色;
if($.os.ios && $.options.statusBarBackground) {
plus.navigator.setStatusBarBackground($.options.statusBarBackground);
}
if($.os.android && parseFloat($.os.version) < 4.4) {
//解决Android平台4.4版本以下,resume后,父窗体标题延迟渲染的问题;
if(plus.webview.currentWebview().parent() == null) {
document.addEventListener("resume", function() {
var body = document.body;
body.style.display = 'none';
setTimeout(function() {
body.style.display = '';
}, 10);
});
}
}
});
} else {
//已支持iframe嵌入
// if (subpages.length > 0) {
// var err = document.createElement('div');
// err.className = 'mui-error';
// //文字描述
// var span = document.createElement('span');
// span.innerHTML = '在该浏览器下,不支持创建子页面,具体参考';
// err.appendChild(span);
// var a = document.createElement('a');
// a.innerHTML = '"mui框架适用场景"';
// a.href = 'http://ask.dcloud.net.cn/article/113';
// err.appendChild(a);
// document.body.appendChild(err);
// console.log('在该浏览器下,不支持创建子页面');
// }
}
}
});
window.addEventListener('preload', function() {
//处理预加载部分
var webviews = $.options.preloadPages || [];
$.plusReady(function() {
$.each(webviews, function(index, webview) {
$.createWindow($.extend(webview, {
preload: true
}));
});
});
});
$.supportStatusbarOffset = function() {
return $.os.plus && $.os.ios && parseFloat($.os.version) >= 7;
};
$.ready(function() {
//标识当前环境支持statusbar
if($.supportStatusbarOffset()) {
document.body.classList.add('mui-statusbar');
}
});
})(mui);
/**
* mui back
* @param {type} $
* @param {type} window
* @returns {undefined}
*/
(function($, window) {
/**
* register back
* @param {type} back
* @returns {$.gestures}
*/
$.addBack = function(back) {
return $.addAction('backs', back);
};
/**
* default
*/
$.addBack({
name: 'browser',
index: 100,
handle: function() {
if (window.history.length > 1) {
window.history.back();
return true;
}
return false;
}
});
/**
* 后退
*/
$.back = function() {
if (typeof $.options.beforeback === 'function') {
if ($.options.beforeback() === false) {
return;
}
}
$.doAction('backs');
};
window.addEventListener('tap', function(e) {
var action = $.targets.action;
if (action && action.classList.contains('mui-action-back')) {
$.back();
$.targets.action = false;
}
});
window.addEventListener('swiperight', function(e) {
var detail = e.detail;
if ($.options.swipeBack === true && Math.abs(detail.angle) < 3) {
$.back();
}
});
})(mui, window);
/**
* mui back 5+
* @param {type} $
* @param {type} window
* @returns {undefined}
*/
(function($, window) {
if ($.os.plus && $.os.android) {
$.addBack({
name: 'mui',
index: 5,
handle: function() {
//后续重新设计此处,将back放到各个空间内部实现
//popover
if ($.targets._popover && $.targets._popover.classList.contains('mui-active')) {
$($.targets._popover).popover('hide');
return true;
}
//offcanvas
var offCanvas = document.querySelector('.mui-off-canvas-wrap.mui-active');
if (offCanvas) {
$(offCanvas).offCanvas('close');
return true;
}
var previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage();
if (previewImage && previewImage.isShown()) {
previewImage.close();
return true;
}
//popup
return $.closePopup();
}
});
}
//首次按下back按键的时间
$.__back__first = null;
/**
* 5+ back
*/
$.addBack({
name: '5+',
index: 10,
handle: function() {
if (!window.plus) {
return false;
}
var wobj = plus.webview.currentWebview();
var parent = wobj.parent();
if (parent) {
parent.evalJS('mui&&mui.back();');
} else {
wobj.canBack(function(e) {
//by chb 暂时注释,在碰到类似popover之类的锚点的时候,需多次点击才能返回;
if (e.canBack) { //webview history back
window.history.back();
} else { //webview close or hide
//fixed by fxy 此处不应该用opener判断,因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了,导致不能执行close
if (wobj.id === plus.runtime.appid) { //首页
//首页不存在opener的情况下,后退实际上应该是退出应用;
//首次按键,提示‘再按一次退出应用’
if (!$.__back__first) {
$.__back__first = new Date().getTime();
mui.toast('再按一次退出应用');
setTimeout(function() {
$.__back__first = null;
}, 2000);
} else {
if (new Date().getTime() - $.__back__first < 2000) {
plus.runtime.quit();
}
}
} else { //其他页面,
if (wobj.preload) {
wobj.hide("auto");
} else {
//关闭页面时,需要将其打开的所有子页面全部关闭;
$.closeAll(wobj);
}
}
}
});
}
return true;
}
});
$.menu = function() {
var menu = document.querySelector('.mui-action-menu');
if (menu) {
$.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话,找不到当前targets的问题
$.trigger(menu, 'tap');
} else { //执行父窗口的menu
if (window.plus) {
var wobj = $.currentWebview;
var parent = wobj.parent();
if (parent) { //又得evalJS
parent.evalJS('mui&&mui.menu();');
}
}
}
};
var __back = function() {
$.back();
};
var __menu = function() {
$.menu();
};
//默认监听
$.plusReady(function() {
if ($.options.keyEventBind.backbutton) {
plus.key.addEventListener('backbutton', __back, false);
}
if ($.options.keyEventBind.menubutton) {
plus.key.addEventListener('menubutton', __menu, false);
}
});
//处理按键监听事件
$.addInit({
name: 'keyEventBind',
index: 1000,
handle: function() {
$.plusReady(function() {
//如果不为true,则移除默认监听
if (!$.options.keyEventBind.backbutton) {
plus.key.removeEventListener('backbutton', __back);
}
if (!$.options.keyEventBind.menubutton) {
plus.key.removeEventListener('menubutton', __menu);
}
});
}
});
})(mui, window);
/**
* mui.init pulldownRefresh
* @param {type} $
* @returns {undefined}
*/
(function($) {
$.addInit({
name: 'pullrefresh',
index: 1000,
handle: function() {
var options = $.options;
var pullRefreshOptions = options.pullRefresh || {};
var hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback');
var hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback');
if(hasPulldown || hasPullup) {
var container = pullRefreshOptions.container;
if(container) {
var $container = $(container);
if($container.length === 1) {
if($.os.plus) { //5+环境
if(hasPulldown && pullRefreshOptions.down.style == "circle") { //原生转圈
$.plusReady(function() {
//这里改写$.fn.pullRefresh
$.fn.pullRefresh = $.fn.pullRefresh_native;
$container.pullRefresh(pullRefreshOptions);
});
} else if($.os.android) { //非原生转圈,但是Android环境
$.plusReady(function() {
//这里改写$.fn.pullRefresh
$.fn.pullRefresh = $.fn.pullRefresh_native
var webview = plus.webview.currentWebview();
if(window.__NWin_Enable__ === false) { //不支持多webview
$container.pullRefresh(pullRefreshOptions);
} else {
if(hasPullup) {
//当前页面初始化pullup
var upOptions = {};
upOptions.up = pullRefreshOptions.up;
upOptions.webviewId = webview.id || webview.getURL();
$container.pullRefresh(upOptions);
}
if(hasPulldown) {
var parent = webview.parent();
var id = webview.id || webview.getURL();
if(parent) {
if(!hasPullup) { //如果没有上拉加载,需要手动初始化一个默认的pullRefresh,以便当前页面容器可以调用endPulldownToRefresh等方法
$container.pullRefresh({
webviewId: id
});
}
var downOptions = {
webviewId: id//子页面id
};
downOptions.down = $.extend({}, pullRefreshOptions.down);
downOptions.down.callback = '_CALLBACK';
//改写父页面的$.fn.pullRefresh
parent.evalJS("mui.fn.pullRefresh=mui.fn.pullRefresh_native");
//父页面初始化pulldown
parent.evalJS("mui&&mui(document.querySelector('.mui-content')).pullRefresh('" + JSON.stringify(downOptions) + "')");
}
}
}
});
} else { //非原生转圈,iOS环境
$container.pullRefresh(pullRefreshOptions);
}
} else {
$container.pullRefresh(pullRefreshOptions);
}
}
}
}
}
});
})(mui);
/**
* mui ajax
* @param {type} $
* @returns {undefined}
*/
(function($, window, undefined) {
var jsonType = 'application/json';
var htmlType = 'text/html';
var rscript = /