search.js 1.71 KB

let termString = document.querySelector('[name=searchTerm]').value;
let terms = termString.split(' ');

let data = {
    terms: terms,
        termString : termString,
        search: {
        type: {
            page: true,
            chapter: true,
            book: true
        }
    }
};

let computed = {

};

let methods = {

    appendTerm(term) {
        if (this.termString.slice(-1) !== " ") this.termString += ' ';
        this.termString += term;
    },

    typeParse(searchString) {
        let typeFilter = /{\s?type:\s?(.*?)\s?}/;
        let match = searchString.match(typeFilter);
        let type = this.search.type;
        if (!match) {
            type.page = type.book = type.chapter = true;
            return;
        }
        let splitTypes = match[1].replace(/ /g, '').split('|');
        type.page = (splitTypes.indexOf('page') !== -1);
        type.chapter = (splitTypes.indexOf('chapter') !== -1);
        type.book = (splitTypes.indexOf('book') !== -1);
    },

    typeChange() {
        let typeFilter = /{\s?type:\s?(.*?)\s?}/;
        let type = this.search.type;
        if (type.page === type.chapter && type.page === type.book) {
            this.termString = this.termString.replace(typeFilter, '');
            return;
        }
        let selectedTypes = Object.keys(type).filter(type => {return this.search.type[type];}).join('|');
        let typeTerm = '{type:'+selectedTypes+'}';
        if (this.termString.match(typeFilter)) {
            this.termString = this.termString.replace(typeFilter, typeTerm);
            return;
        }
        this.appendTerm(typeTerm);
    }

};

function created() {
    this.typeParse(this.termString);
}

module.exports = {
    data, computed, methods, created
};