Skip to content

Commit ead8907

Browse files
committed
[feature] add group and bookmark header dropdown
1 parent a19d201 commit ead8907

File tree

13 files changed

+612
-277
lines changed

13 files changed

+612
-277
lines changed

‎gulpfile.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ const jsFiles = [
9494
path.src+'/js/auto-suggest.js',
9595
path.src+'/js/pagelock.js',
9696
path.src+'/js/edge.js',
97+
path.src+'/js/dropdown.js',
9798
path.src+'/js/init.js'
9899
]
99100

‎src/css/form.css‎

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1207,7 +1207,6 @@ input[type="range"]:disabled::-moz-range-progress{
12071207

12081208
.form-group .form-group-text{
12091209
margin-bottom:0;
1210-
/* margin-left: calc(-1px * var(--form-input-border)); */
12111210
border-radius:0;
12121211
z-index:1;
12131212
position: relative;
@@ -1300,6 +1299,48 @@ input[type="range"]:disabled::-moz-range-progress{
13001299
border-radius:0var(--theme-radius) var(--theme-radius) 0;
13011300
}
13021301

1302+
.form-dropdown{
1303+
position: relative;
1304+
}
1305+
1306+
.form-dropdown-menu{
1307+
background-color:rgb(var(--theme-gray-02));
1308+
border-radius:var(--theme-radius);
1309+
padding:0.5em0;
1310+
position: absolute;
1311+
top:calc(100%+calc(var(--layout-line-width) *2));
1312+
left:0;
1313+
width:100%;
1314+
min-width:12em;
1315+
box-shadow:var(--layout-shadow-large);
1316+
display: none;
1317+
z-index:var(--z-index-dropdown);
1318+
}
1319+
1320+
.form-dropdown-open .form-dropdown-menu{
1321+
display: flex;
1322+
flex-direction: column;
1323+
}
1324+
1325+
.form-dropdown-menubutton,
1326+
.form-dropdown-menu .button{
1327+
border:0;
1328+
border-radius:0;
1329+
margin-bottom:0;
1330+
justify-content: flex-start;
1331+
}
1332+
1333+
.form-group.nested-button .form-dropdown-menu*:first-child .button,
1334+
.form-group.nested-button .form-dropdown-menu*:last-child .button,
1335+
.form-group.nested-button .form-dropdown-menu*:first-childinput[type="checkbox"]+label,
1336+
.form-group.nested-button .form-dropdown-menu*:last-childinput[type="checkbox"]+label,
1337+
.form-group.nested-button .form-dropdown-menu*:first-childinput[type="radio"]+label,
1338+
.form-group.nested-button .form-dropdown-menu*:last-childinput[type="radio"]+label,
1339+
.form-group.nested-button .form-dropdown-menu*:first-childinput[type="color"]+label,
1340+
.form-group.nested-button .form-dropdown-menu*:last-childinput[type="color"]+label{
1341+
border-radius:0;
1342+
}
1343+
13031344
.feedback-wrap{
13041345
padding:0.5em0;
13051346
position: relative;

‎src/css/utilities.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
list-style-type: none;
88
}
99

10+
.list-unstyledli:not(:last-child){
11+
margin-bottom:0;
12+
}
13+
1014
.list-inlineli{
1115
display: inline-block;
1216
}

‎src/css/variables.css‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@
118118
--z-index-modal:6000;
119119
--z-index-menu:7000;
120120
--z-index-auto-suggest-list:8000;
121-
--z-index-edge:9000;
121+
--z-index-dropdown:9000;
122+
--z-index-edge:10000;
122123
/* breakpoint */
123124
/* can not be used in @media as of yet */
124125
--breakpoint-sm:550px;

‎src/index.html‎

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,19 @@
8080
<inputid="control-link-edit" class="control-link-edit" type="checkbox" tabindex="1">
8181
<labelfor="control-link-edit" class="mb-0">Edit</label>
8282
</div>
83-
<buttonclass="control-link-add button" tabindex="1">
84-
<spanclass="button-text">Add</span>
85-
</button>
83+
<divclass="form-dropdown">
84+
<buttonclass="form-dropdown-toggle button" tabindex="1">
85+
<spanclass="button-text">Add</span>
86+
</button>
87+
<ulclass="list-unstyled form-dropdown-menu">
88+
<li>
89+
<buttonclass="button button-block text-left form-dropdown-menu-item control-group-add" tabindex="1"><spanclass="button-text">New Group</span></button>
90+
</li>
91+
<li>
92+
<buttonclass="button button-block text-left form-dropdown-menu-item control-link-add" tabindex="1"><spanclass="button-text">New Bookmark</span></button>
93+
</li>
94+
</ul>
95+
</div>
8696
</div>
8797
</div>
8898
<divclass="header-item header-button header-accent">
@@ -628,7 +638,8 @@ <h1 class="menu-item-header-text">Search</h1>
628638
<divclass="form-indent">
629639
<divclass="input-wrap">
630640
<labelfor="control-header-search-engine-custom-name">Name</label>
631-
<inputid="control-header-search-engine-custom-name" class="control-header-search-engine-custom-name mb-0" type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search engine name" tabindex="-1">
641+
<inputid="control-header-search-engine-custom-name" class="control-header-search-engine-custom-name mb-0" type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search engine name"
642+
tabindex="-1">
632643
</div>
633644
<divclass="input-wrap">
634645
<labelfor="control-header-search-engine-custom-url">URL</label>
@@ -1028,7 +1039,8 @@ <h1 class="menu-item-header-text">Accent</h1>
10281039
<labelfor="control-theme-accent-current-picker">Colour</label>
10291040
<divclass="form-group mb-0">
10301041
<inputid="control-theme-accent-current-picker" class="form-group-item-half control-theme-accent-current-picker mb-0" type="color" value="#000000" tabindex="1">
1031-
<inputid="control-theme-accent-current-hex" class="form-group-item-half control-theme-accent-current-hex mb-0" type="text" placeholder="Hex code" value="#000000" tabindex="1" maxlength="7" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">
1042+
<inputid="control-theme-accent-current-hex" class="form-group-item-half control-theme-accent-current-hex mb-0" type="text" placeholder="Hex code" value="#000000" tabindex="1" maxlength="7" autocomplete="off" autocorrect="off"
1043+
autocapitalize="off" spellcheck="false">
10321044
</div>
10331045
</div>
10341046
<pclass="control-theme-style-light-helper form-helper small">Accent Colour can also be changed from the Header area.</p>
@@ -1109,7 +1121,8 @@ <h1 class="menu-item-header-text">Colour</h1>
11091121
<divclass="input-wrap">
11101122
<divclass="form-group mb-0">
11111123
<inputid="control-background-color-custom-current-picker" class="form-group-item-half control-background-color-custom-current-picker mb-0" type="color" value="#000000" tabindex="1">
1112-
<inputid="control-background-color-custom-current-hex" class="form-group-item-half control-background-color-custom-current-hex mb-0" type="text" placeholder="Hex code" value="#000000" tabindex="1" maxlength="7" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">
1124+
<inputid="control-background-color-custom-current-hex" class="form-group-item-half control-background-color-custom-current-hex mb-0" type="text" placeholder="Hex code" value="#000000" tabindex="1" maxlength="7" autocomplete="off"
1125+
autocorrect="off" autocapitalize="off" spellcheck="false">
11131126
</div>
11141127
</div>
11151128
<pclass="control-background-color-theme-helper form-helper small">Take care as some colours may make the Clock, Date and other text unreadable.</p>
@@ -1276,6 +1289,7 @@ <h1 class="menu-item-header-text">nightTab</h1>
12761289
<scriptsrc="js/auto-suggest.js"></script>
12771290
<scriptsrc="js/pagelock.js"></script>
12781291
<scriptsrc="js/edge.js"></script>
1292+
<scriptsrc="js/dropdown.js"></script>
12791293
<scriptsrc="js/init.js"></script>
12801294
<!-- end-js-block -->
12811295

‎src/js/bookmarks.js‎

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -192,23 +192,31 @@ var bookmarks = (function(){
192192
mod.add={
193193
link: function(data){
194194
if(data.position.group.new){
195-
mod.add.group(data);
195+
mod.add.group();
196196
};
197197
mod.all[data.position.destination.group].items.splice(data.position.destination.item,0,data.link);
198198
},
199199
group: function(data){
200-
varname=data.position.group.name;
201-
if(name!=null&&typeofname=="string"){
202-
name=name.trim();
203-
};
204-
if(name==""||name==null||name==undefined){
200+
varmakeName=function(){
205201
varcount=get().length+1;
206-
name="Group "+count;
202+
return"Group "+count;
203+
};
204+
if(data){
205+
if(data.group.name==null){
206+
data.group.name=makeName();
207+
}elseif(typeofdata.group.name=="string"){
208+
data.group.name=data.group.name.trim();
209+
if(data.group.name==""){
210+
data.group.name=makeName();
211+
};
212+
};
213+
mod.all.splice(data.position.destination,0,data.group);
214+
}else{
215+
mod.all.push({
216+
name: makeName(),
217+
items: []
218+
});
207219
};
208-
mod.all.push({
209-
name: name,
210-
items: []
211-
});
212220
}
213221
};
214222

‎src/js/control.js‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ var control = (function(){
6464
element: helper.e(".control-link-add"),
6565
type: "button",
6666
func: function(){
67-
link.add.open();
67+
link.add.item.open();
68+
}
69+
},{
70+
element: helper.e(".control-group-add"),
71+
type: "button",
72+
func: function(){
73+
link.add.group.open();
6874
}
6975
},{
7076
element: helper.e(".control-link-edit"),

‎src/js/dropdown.js‎

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
vardropdown=(function(){
2+
3+
varmod={};
4+
5+
mod.open=function(){
6+
helper.setObject({
7+
object: state.get(),
8+
path: "dropdown",
9+
newValue: true
10+
});
11+
};
12+
13+
mod.close=function(){
14+
helper.setObject({
15+
object: state.get(),
16+
path: "dropdown",
17+
newValue: false
18+
});
19+
};
20+
21+
mod.toggle=function(){
22+
if(state.get().dropdown){
23+
helper.setObject({
24+
object: state.get(),
25+
path: "dropdown",
26+
newValue: false
27+
});
28+
}else{
29+
helper.setObject({
30+
object: state.get(),
31+
path: "dropdown",
32+
newValue: true
33+
});
34+
};
35+
};
36+
37+
varbind={};
38+
39+
bind.formDropdown=function(){
40+
varallFormDropdown=helper.eA(".form-dropdown");
41+
allFormDropdown.forEach(function(arrayItem,index){
42+
varformDropdown=arrayItem;
43+
varformDropdownToggle=formDropdown.querySelector(".form-dropdown-toggle");
44+
varallFormDropdownMenuItem=formDropdown.querySelectorAll(".form-dropdown-menu-item");
45+
formDropdownToggle.addEventListener("click",function(){
46+
mod.toggle();
47+
render.toggle(formDropdown);
48+
render.offset(formDropdown);
49+
},false);
50+
allFormDropdownMenuItem.forEach(function(arrayItem,index){
51+
arrayItem.addEventListener("click",function(){
52+
mod.close();
53+
render.close(formDropdown);
54+
},false);
55+
});
56+
});
57+
};
58+
59+
varrender={};
60+
61+
render.offset=function(formDropdown){
62+
varformDropdownMenu=formDropdown.querySelector(".form-dropdown-menu");
63+
varbox=formDropdownMenu.getBoundingClientRect();
64+
if(box.left+box.width>window.innerWidth){
65+
formDropdownMenu.style.right="0";
66+
formDropdownMenu.style.left="inherit";
67+
}else{
68+
formDropdownMenu.removeAttribute("style");
69+
};
70+
};
71+
72+
render.toggle=function(formDropdown){
73+
if(formDropdown.classList.contains("form-dropdown-open")){
74+
mod.close();
75+
helper.removeClass(formDropdown,"form-dropdown-open");
76+
}else{
77+
mod.open();
78+
helper.addClass(formDropdown,"form-dropdown-open");
79+
};
80+
};
81+
82+
render.close=function(formDropdown){
83+
mod.close();
84+
helper.removeClass(formDropdown,"form-dropdown-open");
85+
};
86+
87+
render.open=function(formDropdown){
88+
mod.open();
89+
helper.addClass(formDropdown,"form-dropdown-open");
90+
};
91+
92+
varclose=function(){
93+
mod.close();
94+
varallFormDropdown=helper.eA(".form-dropdown");
95+
allFormDropdown.forEach(function(arrayItem,index){
96+
helper.removeClass(arrayItem,"form-dropdown-open");
97+
});
98+
};
99+
100+
varinit=function(){
101+
mod.close();
102+
bind.formDropdown();
103+
};
104+
105+
// exposed methods
106+
return{
107+
init: init,
108+
bind: bind,
109+
render: render,
110+
close: close
111+
};
112+
113+
})();

‎src/js/init.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ search.init();
1818
header.init();
1919
modal.init();
2020
shade.init();
21+
dropdown.init();
2122
version.init();

‎src/js/keyboard.js‎

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@ var keyboard = (function(){
1111
}elseif(state.get().menu){
1212
menu.close();
1313
shade.close();
14+
}elseif(state.get().dropdown){
15+
dropdown.close();
1416
}elseif(state.get().autoSuggest){
1517
autoSuggest.close();
1618
}elseif(state.get().link.add){
17-
link.add.close();
19+
link.add.item.close();
20+
shade.close();
21+
}elseif(state.get().group.add){
22+
link.add.group.close();
1823
shade.close();
1924
}elseif(state.get().link.edit){
2025
link.add.close();
@@ -34,14 +39,37 @@ var keyboard = (function(){
3439
window.addEventListener("keydown",function(event){
3540
// ctrl+alt+a
3641
if(event.ctrlKey&&event.altKey&&event.keyCode==65){
42+
if(state.get().group.add){
43+
link.add.group.close();
44+
};
3745
if(!state.get().link.add){
3846
if(state.get().menu){
3947
menu.close();
4048
};
4149
if(state.get().modal){
4250
modal.close();
4351
};
44-
link.add.open();
52+
link.add.item.open();
53+
};
54+
};
55+
},false);
56+
};
57+
58+
bind.ctrAltG=function(){
59+
window.addEventListener("keydown",function(event){
60+
// ctrl+alt+g
61+
if(event.ctrlKey&&event.altKey&&event.keyCode==71){
62+
if(state.get().link.add){
63+
link.add.item.close();
64+
};
65+
if(!state.get().group.add){
66+
if(state.get().menu){
67+
menu.close();
68+
};
69+
if(state.get().modal){
70+
modal.close();
71+
};
72+
link.add.group.open();
4573
};
4674
};
4775
},false);
@@ -63,7 +91,8 @@ var keyboard = (function(){
6391
// ctrl+alt+m
6492
if(event.ctrlKey&&event.altKey&&event.keyCode==77){
6593
if(state.get().link.add){
66-
link.add.close();
94+
link.add.item.close();
95+
link.add.group.close();
6796
shade.close();
6897
}elseif(state.get().modal){
6998
modal.close();
@@ -102,6 +131,7 @@ var keyboard = (function(){
102131
varinit=function(){
103132
bind.esc();
104133
bind.ctrAltA();
134+
bind.ctrAltG();
105135
bind.ctrAltD();
106136
bind.ctrAltM();
107137
bind.ctrAltE();

0 commit comments

Comments
(0)