search.js 4.74 KB
/**
 * 搜索JS
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/10/19
 */

var $ = require('jquery'),
    security = require('../plugin/security'),
    tip = require('../plugin/tip'),
    Hammer = require('yoho.hammer'),
    dialog = require('../me/dialog');

var $input = $('#search-input input');

var $clear = $('#search-input .clear-input');

var $form = $('#search-form');

var $history = $('.history');
var $historySearch = $('.history-search');
var $clearHistory = $('#clear-history');
var $buriedpoint = $('.buriedpoint');
var $search = $('#search');

var writeSearch = require('./write-search');

var ranToken = writeSearch.getRanToken();

var chHammer, cHammer;

chHammer = new Hammer($clearHistory[0]);

function isLocalStorageSupported() {
    var testKey = 'test',
        storage = Window.prototype.localStorage;

    try {
        storage.setItem(testKey, 'testValue');
        storage.removeItem(testKey);
        return true;
    } catch (error) {
        return false;
    }
}

chHammer.on('tap', function() {
    dialog.showDialog({
        dialogText: '您确定要删除您的最近搜索吗?',
        hasFooter: {
            leftBtnText: '取消',
            rightBtnText: '确定'
        }
    }, function() {
        if (isLocalStorageSupported()) {
            localStorage.removeItem('historys');
        }

        $history.html('');
        $historySearch.hide();
        $clearHistory.hide();

        window.rePosFooter();

        dialog.showDialog({
            dialogText: '删除成功',
            autoHide: true,
            fast: true
        });
    });
});

// 搜索输入联动
function inputAction() {
    var $searchAssociate = $('.search-associate');
    var $icon = $('.search-icon');
    var $searchItems = $('.search-items');

    $input.on('input', function() {
        if ($input.val() === '') {
            $icon.css('color', '#b2b2b2');
            $clear.addClass('hide');
            $searchAssociate.html('');
            $searchItems.show();
            $searchAssociate.hide();
        } else {
            $icon.css('color', '#666');
            $clear.removeClass('hide');
            $searchAssociate.show();
        }

        // 联动搜索
        $.ajax({
            url: '/index/search/fuzzyDatas',
            data: {
                keyword: $input.val()
            },
            dataType: 'json',
            success: function(data) {
                var ajaxHtml = '';
                var i;

                if (data.length > 0) {
                    for (i = 0; i < data.length; i++) {
                        ajaxHtml += '<li><span class="keyword">' + data[i].keyword + '</span><span class="count">' +
                        data[i].count + ' items<i class="iconfont">&#xe614;</i></span></li>';
                    }

                    $searchAssociate.html(ajaxHtml);
                    $searchItems.hide();
                } else {
                    $searchAssociate.html('');
                }

                $searchAssociate.find('li').on('touchend', function() {
                    $buriedpoint.val($(this).find('.keyword').html());
                    $search.closest('form').submit();
                });
            },
            error: function() {
                tip.show('网络断开连接了~');
            }
        });
    });
}

inputAction();

cHammer = new Hammer($clear[0]);
cHammer.on('tap', function() {
    $input.val('').trigger('input');
});

$search.on('touchend', function() {
    if ($buriedpoint.val() === '' && $('#default-terms').val() !== '') {
        $buriedpoint.val($('#default-terms').val());
    }

    if (security.hasDangerInput()) {
        return false;
    }
    $(this).closest('form').submit();
    return false;
});

//初始化历史搜索的内容
(function() {
    var html = '',
        history,
        historys, i, num = 1, searchUrl = '';

    if (localStorage) {
        if (isLocalStorageSupported()) {
            historys = localStorage.getItem('historys');
        }
        searchUrl = $form.attr('action');

        if (historys && historys.length > 0) {
            historys = historys.split(ranToken);
            for (i = historys.length; i > 0; i--) {
                history = historys[i - 1];

                if (history === '') {
                    continue;
                }

                if (num++ > 10) {
                    break;
                }

                html += '<li><a href="' + searchUrl + '/?query=' + history + '">' + history + '</li>';
            }

            $history.html(html);
            if (html !== '') {
                $clearHistory.removeClass('hide');
                $historySearch.removeClass('hide');
            }
            window.rePosFooter();
        }
    }
}());

if (isLocalStorageSupported()) {
    writeSearch.bindWirteLocal($form);
}