-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcustom-select.js
126 lines (110 loc) · 3.53 KB
/
custom-select.js
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
118
119
120
121
122
123
124
// (function() {
//cache some essential elements
var select = UTILS.qsa('select');
var iframe = UTILS.qsa('.dynamic-frame');
var expand = UTILS.qsa('.dynamic-expand.expand');
var form = UTILS.qsa('.tabs form');
var settingBtns = UTILS.qsa('.setting-icon');
//loading the local storage selections
window.onload = activateSelect();
//inits of the tabs events
initSettingBtns();
initForms();
function initSettingBtns(){
Array.prototype.forEach.call(settingBtns, function(elem,index,array){
UTILS.addEvent(elem,'click',function(){
UTILS.TraverseUp(this,'tabs-containers is-active',toggleForm);
});
});
}
//toggles the form and reset to the initial state
function toggleForm(node){
var targetNode = node.querySelector('.custom-frame-box');
if (!(targetNode.className === 'custom-frame-box open-box')) {
targetNode.classList.add('open-box');
targetNode.querySelector('input').focus();
var inputs = targetNode.querySelectorAll('input');
for(var j = 0;j < inputs.length;j++){
inputs[j].required = false;
}
}
else {
targetNode.classList.remove('open-box');
}
}
function initForms() {
Array.prototype.forEach.call(form, function (elem, index, array) {
handlerForms(elem);
});
}
function handlerForms(link) {
UTILS.addEvent(link, 'submit',function(e) {
e.preventDefault();
var newObj = {};
var filled = this.elements;
var key = this.id;
for (var i = 1; i <= 3; i++) {
if (filled['title' + i].value && filled['url' + i].value) {
newObj[filled['title' + i].value] = filled['url' + i].value;
}
}
if(Object.keys(newObj).length > 0){
saveOnLocalstorage(newObj,key);
}
UTILS.TraverseUp(this,'tabs-containers is-active',toggleForm);
});
// form validation event
UTILS.addEvent(link, 'keyup', function(e){
var inputTarget = e.target;
var inputIndex = Number(inputTarget.dataset.index);
validate.call(this,inputTarget.type, inputTarget.value)
function validate(text, val){
if(text === 'text'){
this.elements[inputIndex + 1].required = val;
}
else {
this.elements[inputIndex - 1].required = val;
}
}
});
}
function saveOnLocalstorage(obj, key) {
localStorage.removeItem(key);
localStorage.setItem(key, JSON.stringify(obj));
activateSelect();
}
//used also onpage loading
function activateSelect() {
Array.prototype.forEach.call(select, function (el,ind,arr) {
el.length = 0;
var newList = JSON.parse(localStorage.getItem(el.name));
for (var key in newList) {
var opt = document.createElement("option");
opt.value = newList[key];
opt.text = key;
el.add(opt, null);
}
});
displayIframe()
}
function displayIframe() {
Array.prototype.forEach.call(select, function (el,ind,arr) {
if (el.selectedIndex > -1) {
var firstOption = el.options[0].value;
iframe[ind].src = firstOption;
expand[ind].href = firstOption;
}
});
}
//making a closure for the select elements handlers
Array.prototype.forEach.call(select, function (el,ind,arr) {
onChangeHandler(el,ind)
});
function onChangeHandler(el,ind){
UTILS.addEvent(el, 'change', function (e) {
var newReport = e.target.value;
iframe[ind].src = newReport;
expand[ind].href = newReport;
});
}
// })();//end