Commit 19575856 authored by hbcui1984's avatar hbcui1984

提交sass源码、模块js源码

parent 74d7910c
.sass-cache
node_modules
sass/.csscomb.json
sass/.csslintrc
js/.jscsrc
js/.jshintrc
\ No newline at end of file
/*!
* 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.target.js',
'js/mui.fixed.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.event.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.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/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/input.plugin.js',
'js/mui.number.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: true,
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);
});
};
\ No newline at end of file
...@@ -1099,6 +1099,7 @@ input[type="submit"]:enabled:active, input[type="submit"].mui-active:enabled, ...@@ -1099,6 +1099,7 @@ input[type="submit"]:enabled:active, input[type="submit"].mui-active:enabled,
.mui-bar .mui-title { .mui-bar .mui-title {
right: 40px; right: 40px;
left: 40px; left: 40px;
display: inline-block;
width: auto; width: auto;
margin: 0; margin: 0;
overflow: hidden; overflow: hidden;
...@@ -1462,6 +1463,16 @@ input[type="submit"]:enabled:active, input[type="submit"].mui-active:enabled, ...@@ -1462,6 +1463,16 @@ input[type="submit"]:enabled:active, input[type="submit"].mui-active:enabled,
transform: scaleY(.5); transform: scaleY(.5);
} }
.mui-table-view-icon .mui-table-view-cell .mui-navigate-right .mui-icon {
margin-top: -1px;
margin-right: 5px;
margin-left: -5px;
font-size: 20px;
}
.mui-table-view-icon .mui-table-view-cell:after {
left: 40px;
}
.mui-table-view-chevron .mui-table-view-cell { .mui-table-view-chevron .mui-table-view-cell {
padding-right: 65px; padding-right: 65px;
} }
...@@ -3708,3 +3719,19 @@ select:focus { ...@@ -3708,3 +3719,19 @@ select:focus {
-webkit-transform-style: preserve-3d; -webkit-transform-style: preserve-3d;
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-plus .mui-plus-visible, .mui-wechat .mui-wechat-visible {
display: block !important;
}
.mui-plus .mui-plus-hidden, .mui-wechat .mui-wechat-hidden {
display: none !important;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
File added
/*!
* Mui Grunt task for namespace generation
*/
/* jshint node: true */'use strict';
var fs = require('fs');
module.exports = function generateNamespace() {
var dir = fs.readdirSync('dist/js/');
dir.forEach(function(file) {
if (~file.indexOf('.js') && !~file.indexOf('.min')) {
var source = fs.readFileSync('dist/js/' + file, 'utf8');
var name = file.replace('.js', '').split('.')[0];
source = source.toString().replace(/\$\.className\(([\'|"])([^\'|"]*)[\'|"]\)/g, '$1' + name + '-$2$1').replace(/\$\.classSelector\(([\'|"])([^\'|"]*)[\'|"]\)/g, function(match, p1, p2) {
return p1 + p2.replace(/\./g, '.' + name + '-') + p1;
});
fs.writeFileSync('dist/js/' + file, source);
}
});
};
/**
* actions
* @param {type} $
* @param {type} name
* @returns {undefined}
*/
(function($, name) {
var CLASS_ACTION = $.className('action');
var handle = function(event, target) {
if (target.className && ~target.className.indexOf(CLASS_ACTION)) {
event.preventDefault();
return target;
}
return false;
};
$.registerTarget({
name: name,
index: 50,
handle: handle,
target: false,
isContinue: true
});
})(mui, 'action');
\ No newline at end of file
(function($) {
//TODO
})(mui);
\ No newline at end of file
/**
* Input(TODO resize)
* @param {type} $
* @param {type} window
* @param {type} document
* @returns {undefined}
*/
(function($, window, document) {
var CLASS_ICON = $.className('icon');
var CLASS_ICON_CLEAR = $.className('icon-clear');
var CLASS_ICON_SPEECH = $.className('icon-speech');
var CLASS_ICON_SEARCH = $.className('icon-search');
var CLASS_INPUT_ROW = $.className('input-row');
var CLASS_PLACEHOLDER = $.className('placeholder');
var CLASS_TOOLTIP = $.className('tooltip');
var CLASS_HIDDEN = $.className('hidden');
var CLASS_FOCUSIN = $.className('focusin');
var SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR;
var SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH;
var SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER;
var SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP;
var findRow = function(target) {
for (; target && target !== document; target = target.parentNode) {
if (target.classList && target.classList.contains(CLASS_INPUT_ROW)) {
return target;
}
}
return null;
};
var Input = function(element, options) {
this.element = element;
this.options = options || {
actions: 'clear'
};
if (~this.options.actions.indexOf('slider')) { //slider
this.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN;
this.sliderActionSelector = SELECTOR_TOOLTIP;
} else { //clear,speech,search
if (~this.options.actions.indexOf('clear')) {
this.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + (element.value ? '' : (' ' + CLASS_HIDDEN));
this.clearActionSelector = SELECTOR_ICON_CLOSE;
}
if (~this.options.actions.indexOf('speech')) { //only for 5+
this.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH;
this.speechActionSelector = SELECTOR_ICON_SPEECH;
}
if (~this.options.actions.indexOf('search')) {
this.searchActionClass = CLASS_PLACEHOLDER;
this.searchActionSelector = SELECTOR_PLACEHOLDER;
}
}
this.init();
};
Input.prototype.init = function() {
this.initAction();
this.initElementEvent();
};
Input.prototype.initAction = function() {
var self = this;
var row = self.element.parentNode;
if (row) {
if (self.sliderActionClass) {
self.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector);
} else {
if (self.searchActionClass) {
self.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector);
self.searchAction.addEventListener('tap', function(e) {
$.focus(self.element);
e.stopPropagation();
});
}
if (self.speechActionClass) {
self.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector);
self.speechAction.addEventListener('click', $.stopPropagation);
self.speechAction.addEventListener('tap', function(event) {
self.speechActionClick(event);
});
}
if (self.clearActionClass) {
self.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector);
self.clearAction.addEventListener('tap', function(event) {
self.clearActionClick(event);
});
}
}
}
};
Input.prototype.createAction = function(row, actionClass, actionSelector) {
var action = row.querySelector(actionSelector);
if (!action) {
var action = document.createElement('span');
action.className = actionClass;
if (actionClass === this.searchActionClass) {
action.innerHTML = '<span class="' + CLASS_ICON + ' ' + CLASS_ICON_SEARCH + '"></span>' + this.element.getAttribute('placeholder');
this.element.setAttribute('placeholder', '');
if (this.element.value.trim()) {
row.classList.add($.className('active'));
}
}
row.insertBefore(action, this.element.nextSibling);
}
return action;
};
Input.prototype.initElementEvent = function() {
var element = this.element;
if (this.sliderActionClass) {
var tooltip = this.sliderAction;
//TODO resize
var offsetLeft = element.offsetLeft;
var width = element.offsetWidth - 28;
var tooltipWidth = tooltip.offsetWidth;
var distince = Math.abs(element.max - element.min);
var timer = null;
var showTip = function() {
tooltip.classList.remove(CLASS_HIDDEN);
tooltipWidth = tooltipWidth || tooltip.offsetWidth;
var scaleWidth = Math.abs(element.value) / distince * width;
tooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px';
tooltip.innerText = element.value;
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function() {
tooltip.classList.add(CLASS_HIDDEN);
}, 1000);
};
element.addEventListener('input', showTip);
element.addEventListener('tap', showTip);
element.addEventListener('touchmove', function(e) {
e.stopPropagation();
});
} else {
if (this.clearActionClass) {
var action = this.clearAction;
if (!action) {
return;
}
$.each(['keyup', 'change', 'input', 'focus', 'blur', 'cut', 'paste'], function(index, type) {
(function(type) {
element.addEventListener(type, function() {
action.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN);
});
})(type);
});
}
if (this.searchActionClass) {
element.addEventListener('focus', function() {
element.parentNode.classList.add($.className('active'));
});
element.addEventListener('blur', function() {
if (!element.value.trim()) {
element.parentNode.classList.remove($.className('active'));
}
});
}
}
};
Input.prototype.clearActionClick = function(event) {
var self = this;
self.element.value = '';
$.focus(self.element);
self.clearAction.classList.add(CLASS_HIDDEN);
event.preventDefault();
};
Input.prototype.speechActionClick = function(event) {
if (window.plus) {
var self = this;
var oldValue = self.element.value;
self.element.value = '';
document.body.classList.add(CLASS_FOCUSIN);
plus.speech.startRecognize({
engine: 'iFly'
}, function(s) {
self.element.value += s;
$.focus(self.element);
plus.speech.stopRecognize();
$.trigger(self.element, 'recognized', {
value: self.element.value
});
if (oldValue !== self.element.value) {
$.trigger(self.element, 'change');
$.trigger(self.element, 'input');
}
// document.body.classList.remove(CLASS_FOCUSIN);
}, function(e) {
document.body.classList.remove(CLASS_FOCUSIN);
});
} else {
alert('only for 5+');
}
event.preventDefault();
};
$.fn.input = function(options) {
this.each(function() {
var actions = [];
var row = findRow(this.parentNode);
if (this.type === 'range' && row.classList.contains($.className('input-range'))) {
actions.push('slider');
} else {
var classList = this.classList;
if (classList.contains($.className('input-clear'))) {
actions.push('clear');
}
if (classList.contains($.className('input-speech'))) {
actions.push('speech');
}
if (this.type === 'search' && row.classList.contains($.className('search'))) {
actions.push('search');
}
}
var id = this.getAttribute('data-input-' + actions[0]);
if (!id) {
id = ++$.uuid;
$.data[id] = new Input(this, {
actions: actions.join(',')
});
for (var i = 0, len = actions.length; i < len; i++) {
this.setAttribute('data-input-' + actions[i], id);
}
}
});
};
$.ready(function() {
$($.classSelector('.input-row input')).input();
});
})(mui, window, document);
\ No newline at end of file
/**
* Modals
* @param {type} $
* @param {type} window
* @param {type} document
* @param {type} name
* @returns {undefined}
*/
(function($, window, document, name) {
var CLASS_MODAL = $.className('modal');
var handle = function(event, target) {
if (target.tagName === 'A' && target.hash) {
var modal = document.getElementById(target.hash.replace('#', ''));
if (modal && modal.classList.contains(CLASS_MODAL)) {
return modal;
}
}
return false;
};
$.registerTarget({
name: name,
index: 50,
handle: handle,
target: false,
isReset: false,
isContinue: true
});
window.addEventListener('tap', function(event) {
if ($.targets.modal) {
event.detail.gesture.preventDefault(); //fixed hashchange
$.targets.modal.classList.toggle($.className('active'));
}
});
})(mui, window, document, 'modal');
\ No newline at end of file
/**
* TODO mui active
*/
(function(window) {
var active;
window.addEventListener('touchstart', function(event) {
var target = event.target;
var isCellDisabled = false;
for (; target && target !== document; target = target.parentNode) {
if (target.classList) {
var classList = target.classList;
if (classList.contains(CLASS_DISABLED)) { //normal
isCellDisabled = true;
} else if (target.tagName === 'INPUT' || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN)) {
isCellDisabled = true;
}
if (classList.contains(CLASS_TABLE_VIEW_CELL)) {
if (!isCellDisabled) {
active = target;
var link = cell.querySelector('a');
if (link && link.parentNode === cell) { //li>a
active = link;
}
}
break;
}
}
}
});
})(window);
\ No newline at end of file
/**
* 5+ ajax
*/
(function($) {
var originAnchor = document.createElement('a');
originAnchor.href = window.location.href;
$.plusReady(function() {
$.ajaxSettings = $.extend($.ajaxSettings, {
xhr: function(settings) {
if (settings.crossDomain) { //强制使用plus跨域
return new plus.net.XMLHttpRequest();
}
//仅在webview的url为远程文件,且ajax请求的资源不同源下使用plus.net.XMLHttpRequest
if (originAnchor.protocol !== 'file:') {
var urlAnchor = document.createElement('a');
urlAnchor.href = settings.url;
urlAnchor.href = urlAnchor.href;
settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host);
if (settings.crossDomain) {
return new plus.net.XMLHttpRequest();
}
}
return new window.XMLHttpRequest();
}
});
});
})(mui);
\ No newline at end of file
This diff is collapsed.
/**
* mui animation
*/
(function($, window) {
/**
* scrollTo
*/
$.scrollTo = function(scrollTop, duration, callback) {
duration = duration || 1000;
var scroll = function(duration) {
if (duration <= 0) {
window.scrollTo(0, scrollTop);
callback && callback();
return;
}
var distaince = scrollTop - window.scrollY;
setTimeout(function() {
window.scrollTo(0, window.scrollY + distaince / duration * 10);
scroll(duration - 10);
}, 16.7);
};
scroll(duration);
};
$.animationFrame = function(cb) {
var args, isQueued, context;
return function() {
args = arguments;
context = this;
if (!isQueued) {
isQueued = true;
requestAnimationFrame(function() {
cb.apply(context, args);
isQueued = false;
});
}
};
};
})(mui, window);
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/**
* $.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($.className('plus'));
});
}
}
detect.call($, navigator.userAgent);
})(mui, document);
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment