api.js 3.83 KB
/**
 * 登录注册公用API
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/10/8
 */
var $ = require('yoho.zepto');

var trim = $.trim;

//邮箱验证规则
var emailRegx = /^([a-zA-Z0-9]+[_|\_|\.|-]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.|-]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;

//手机号码验证规则
var phoneRegx = {
    '+86': /^1[35847]{1}[0-9]{9}$/,
    '+852': /^[965]{1}[0-9]{7}$/,
    '+853': /^[0-9]{8}$/,
    '+886': /^[0-9]{10}$/,
    '+65': /^[98]{1}[0-9]{7}$/,
    '+60': /^1[1234679]{1}[0-9]{8}$/,
    '+1': /^[0-9]{10}$/,
    '+82': /^01[0-9]{9}$/,
    '+44': /^7[789][0-9]{8}$/,
    '+81': /^0[9|8|7][0-9]{9}$/,
    '+61': /^[0-9]{11}$/
};

//错误验证
var $errTip,
    tipTime;

/**
 * 初始化错误提示
 */
function initErrTip() {
    var errTipHtml = '<div id="err-tip" class="err-tip"></div>';

    //插入错误提示HTML
    $('.passport-page').append(errTipHtml);

    $errTip = $('#err-tip');
    $errTip.on('touchstart', function() {
        $errTip.fadeOut();

        //清除Timeout
        clearTimeout(tipTime);
    });
}

/**
 * 显示错误提示
 */
function showErrTip(content) {
    if (typeof $errTip === 'undefined') {
        return;
    }

    $errTip.text(content).show();

    //若2秒内未点击则自动消失
    tipTime = setTimeout(function() {
        if ($errTip.css('display') === 'block') {
            $errTip.fadeOut();
        }
    }, 2000);
}

//密码显示隐藏
function bindEyesEvt() {
    var $hasEye = $('.has-eye'),
        $eye;

    $hasEye.append('<div class="eye close"></div>');
    $eye = $hasEye.children('.eye');

    $eye.on('touchstart', function(e) {
        var $this = $(this),
            $pwd = $this.siblings('.pwd');

        e.preventDefault();
        $this.toggleClass('close');

        //切换密码显示和文本显示
        if ($this.hasClass('close')) {
            $pwd.attr('type', 'password');
        } else {
            $pwd.attr('type', 'text');
        }
        $pwd.focus();
    });
}

// 清空账号显示
function bindClearEvt() {
    var $hasClear = $('.has-clear'),
        $clear;

    $hasClear.append('<div class="clear-input"></div>');
    $clear = $hasClear.children('.clear');

    $clear.on('touchstart', function(e) {
        var $input = $clear.siblings('.input');

        $input.val('').trigger('input').focus();
        e.preventDefault();
    });

    //反向逻辑
    $hasClear.children('.input').bind('input', function() {
        var $this = $(this),
            $thisClear = $this.siblings('.clear'),
            val = trim($this.val());

        if (val === '') {
            $thisClear.hide();
        } else {
            $thisClear.show();
        }
    });
}

// 密码长度验证
function pwdValidate(pwd) {
    if (pwd.length >= 6 && pwd.length <= 20) {
        return true;
    }
    return false;
}

// hack for resolving direction:rtl didn't work in android uc
function selectCssHack($countrySelect) {
    var u = navigator.userAgent;

    function autoSelectWidth() {
        var wordCount = $countrySelect.find('option:selected').text().length;

        switch (wordCount) {

            //分别有2,3,4个汉字的情况
            case 2:
                $countrySelect.outerWidth(90);
                break;
            case 3:
                $countrySelect.outerWidth(110);
                break;
            default:
                $countrySelect.outerWidth(130);
        }
    }

    if (u.match(/uc/i) && u.match(/android/i)) {
        $countrySelect.change(function() {
            autoSelectWidth();
        });
    } else {
        $countrySelect.removeClass('in-android-uc');
    }
}

//Exports APIs
module.exports = {
    emailRegx: emailRegx,
    phoneRegx: phoneRegx,
    initErrTip: initErrTip,
    showErrTip: showErrTip,
    bindEyesEvt: bindEyesEvt,
    bindClearEvt: bindClearEvt,
    pwdValidate: pwdValidate,
    selectCssHack: selectCssHack
};