File size: 4,743 Bytes
c6e833c
 
 
 
 
 
 
 
 
 
a98f3fa
c6e833c
 
 
 
 
 
 
 
 
 
a98f3fa
c6e833c
a98f3fa
c6e833c
a98f3fa
 
 
c6e833c
a98f3fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c6e833c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a98f3fa
c6e833c
 
 
 
 
 
 
 
 
 
 
 
a98f3fa
 
c6e833c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a98f3fa
c6e833c
 
a98f3fa
c6e833c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// UI: Method for selecting all search engines
function selectAllHandler(elem) {
    let span = elem.parentElement.querySelector('span');
    let mainInput = document.getElementsByName('searchEng')[0];
    let prevStateSelectAll = span.innerText == 'Select all' ? true : false;
    document.querySelectorAll('.searchEng-elem').forEach(engine => {
        if (prevStateSelectAll) {
            engine.querySelector('input[type="checkbox"]').checked = true;
        } else {
            engine.querySelector('input[type="checkbox"]').checked = false;
        }
    })
    if (prevStateSelectAll) {
        let getValues = () => {
            let value = ""
            document.querySelectorAll('[data-isCheckbox]:not([data-value="all"])').forEach(elem => {
                value += elem.getAttribute("data-value") + ",";
            });
            return value;
        }
        mainInput.value = getValues();
    } else {
        mainInput.value = '';
    }
    span.innerText =  prevStateSelectAll ? 'Deselect all' : 'Select all';
}


// UI: Filter settings as per category
document.querySelectorAll('.settings-sidebar .set-name').forEach(filter => {
    let target = filter.getAttribute('data-detailId');
    filter.addEventListener('click', () => {
        try {document.querySelector('.set-name.active').classList.remove('active');} catch(e){}
        filter.classList.add('active');
        if (target == 'all') {
            document.querySelectorAll('.set-item').forEach((elem) => {
                elem.style.display = 'block';
            })
            return;
        }
        document.querySelectorAll('.set-item[data-id="'+target+'"]').forEach((elem) => {
            elem.style.display = 'block'
        })
        document.querySelectorAll('.set-item:not([data-id="'+target+'"])').forEach((elem) => {
            elem.style.display = 'none'
        })
    })
})


// On settings form submit
function submitSettings() {
    let form = document.settings;
    let stopProceeding = false;
    document.querySelectorAll('.errTxt').forEach(e => e.remove());
    for(let i = 0; i < form.elements.length; i++) {
        let input = form.elements[i];
        if (input.value == "" && input.hasAttribute('required')) {
            stopProceeding = true;
            let elem = input.parentElement.querySelector('[takeInput]')
            let errTxt = document.createElement('p')
            errTxt.classList.add('errTxt')
            errTxt.innerText = 'This setting can\'t be empty!!'
            elem.classList.add('invalid');
            elem.parentElement.insertBefore(errTxt, elem);
            let sidebarElement = input.closest('.set-item').getAttribute('data-id')
            document.querySelector(`.settings-sidebar .set-name[data-detailId="${sidebarElement}`).click();
            stopProceeding = true;
        }
    }
    if (!stopProceeding) {
        var expiration_date = new Date();
        expiration_date.setFullYear(expiration_date.getFullYear() + 1);
        let formData = new FormData(document.querySelector('form'));
        for (var [key, value] of formData.entries()) { 
            document.cookie = `${key}=${value}; expires=${expiration_date.toUTCString()}`
        }
    } else { return false; }
    // On settings saved successfully
    alert("Settings saved succssfully!");
    window.location.reload();
}

// Autoload existing settings
function loadUserSettings() {
    let inputs = ["searchEng", "theme", "color-sch"]
    var keyValuePairs = document.cookie.split(';');
    for(var i = 0; i < keyValuePairs.length; i++) {
        var name = keyValuePairs[i].substring(0, keyValuePairs[i].indexOf('='));
        var value = keyValuePairs[i].substring(keyValuePairs[i].indexOf('=')+1);
        name = name.trim();
        if (!inputs.includes(name)) { return; }
        let input = document.getElementsByName(name)[0];
        input.value = value;
        if (name == "searchEng") {
            // Unload all checked engine
            document.querySelectorAll(".searchEng-elem input[type=checkbox]").forEach(e => {
                e.checked = false;
            })
            value = value.replace(" ", "");
            value.split(",").forEach(val => {
                if (!val) {return}
                document.querySelector(`[data-isCheckbox][data-value="${val}"]`).
                parentElement.querySelector('input').checked = true
            })
        } else {
            // Unload all selected options
            document.querySelector(`[data-input="${name}"] .options span[data-value="${value}"]`).
                removeAttribute('selected');
            singleSelectClickHandler(document.querySelector(`.options span[data-value="${value}"]`));
        }
    }

}

loadUserSettings();