Add: static/js/index.js -Add ability to select an existing search group to edit. -Add ability to remove search groups with a button. static/sass/index.sass -Add styling for `div#header`, which contains the titles of both columns ("fields" and "search groups") in the advanced search form.tags/v1.0^2
@@ -172,20 +172,51 @@ function loadMoreResults(){ | |||
} | |||
var searchGroups = $("div#search-groups"); | |||
// Create a new search group. | |||
// Create a new search group, and update the `#sidebar` checklist accordingly. | |||
$("button#add-group").click(function(){ | |||
var searchGroup = $("<div/>", {class : "search-group"}); | |||
$("div#sidebar input[type=checkbox]").prop("checked", false); | |||
searchGroups.children("#selected").removeAttr("id"); | |||
var searchGroup = $("<div/>", {class : "search-group", id : "selected"}); | |||
searchGroups.append(searchGroup.append(createSearchGroupInput("language"))); | |||
$("div#sidebar input[type=checkbox]#language").prop("checked", true); | |||
}); | |||
$("div#advanced-search #sidebar input[type=checkbox]").click(function(){ | |||
var fieldId = $(this).attr("id"); | |||
$("button#remove-group").click(function(){ | |||
var currentGroup = $("div.search-group#selected"); | |||
if($("div.search-group").length == 1) | |||
return; | |||
else { | |||
var nextGroup = currentGroup.prev(); | |||
if(nextGroup.size() == 0) | |||
nextGroup = currentGroup.next(); | |||
} | |||
currentGroup.remove(); | |||
nextGroup.click(); | |||
}); | |||
// Select a search group, and update the `#sidebar` checklist accordingly. | |||
$(document).on("click", "div.search-group", function(){ | |||
searchGroups.children("#selected").removeAttr("id"); | |||
$(this).attr("id", "selected"); | |||
$("div#sidebar input[type=checkbox]").prop("checked", false); | |||
$(this).find("input[type=text]").each(function(){ | |||
var checkBoxSelector = "div#sidebar input[type=checkbox]"; | |||
$(checkBoxSelector + "#" + $(this).attr("id")).prop("checked", true); | |||
}) | |||
}); | |||
// Add an input field to the currently selected search group. | |||
$("div#sidebar input[type=checkbox]").click(function(){ | |||
var fieldId = $(this).prop("id"); | |||
if($(this).is(":checked")) | |||
$("div.search-group#selected").append( | |||
$.parseHTML(createSearchGroupInput(fieldId))); | |||
else | |||
$("div.search-group#selected #" + fieldId).remove() | |||
}) | |||
}); | |||
/* | |||
* Return an HTML string representing a new input field div in a search group. | |||
@@ -195,8 +226,8 @@ $("div#advanced-search #sidebar input[type=checkbox]").click(function(){ | |||
function createSearchGroupInput(fieldId){ | |||
return [ | |||
"<div id='" + fieldId + "'>", | |||
"<div>" + fieldId + "</div>", | |||
"<input id='" + "'type='text'>", | |||
"<div>" + fieldId.replace(/-/g, " ") + "</div>", | |||
"<input id='" + fieldId + "'type='text'/>", | |||
"<input type='checkbox' name='regex'><span>Regex</span>", | |||
"</div>" | |||
].join(""); | |||
@@ -69,7 +69,11 @@ div#search-field | |||
color: $baseColor2 | |||
font-style: italic | |||
$minSearchFieldsWidth: 490px | |||
form#search-bar | |||
min-width: $minSearchFieldsWidth | |||
input[type="text"], button | |||
@extend .t3 | |||
@include vendor(box-sizing, border-box) | |||
@@ -113,11 +117,29 @@ div#search-field | |||
background-color: white | |||
border: 1px solid $baseColor3 | |||
font-size: 96% | |||
min-width: 490px | |||
min-width: $minSearchFieldsWidth | |||
padding-top: 0px | |||
overflow-x: auto | |||
height: 400px | |||
#heading | |||
color: $baseColor2 | |||
display: block | |||
font-size: 120% | |||
padding-left: 1% | |||
padding-top: 1% | |||
width: 100% | |||
div | |||
display: inline-block | |||
font-size: 110% | |||
&#col1 | |||
width: 25% | |||
&#col2 | |||
width: 75% | |||
>div | |||
@include vendor(box-sizing, border-box) | |||
@@ -128,11 +150,6 @@ div#search-field | |||
padding-left: 1% | |||
width: 25% | |||
>div | |||
color: $baseColor2 | |||
font-size: 120% | |||
padding-top: 5% | |||
>ul | |||
list-style: none | |||
padding-left: 0 | |||
@@ -175,8 +192,9 @@ div#search-field | |||
background-color: $lightBlue | |||
border: none | |||
color: white | |||
display: block | |||
height: 40px | |||
margin-bottom: 10% | |||
margin-bottom: 2% | |||
overflow: hidden | |||
white-space: nowrap | |||
width: 40px | |||
@@ -185,7 +203,7 @@ div#search-field | |||
font-size: 150% | |||
font-weight: bold | |||
margin-left: 6px | |||
margin-right: 10px | |||
margin-right: 14px | |||
&:hover | |||
@extend .t3 | |||
@@ -194,23 +212,39 @@ div#search-field | |||
cursor: pointer | |||
width: 90% | |||
button#remove-group | |||
@extend button#add-group | |||
background-color: #D82D48 | |||
span | |||
padding-left: 3px | |||
&:hover | |||
@extend .t3 | |||
background-color: #F11437 | |||
#search-groups | |||
margin-top: 2% | |||
margin-top: 1% | |||
max-height: 93% | |||
overflow-y: auto | |||
width: 75% | |||
.search-group | |||
@include vendor(transition, all 0.6s ease-out) | |||
background-color: $lightGray | |||
padding: 1% | |||
margin-bottom: 1% | |||
margin-bottom: 2% | |||
width: 97% | |||
>div | |||
margin-bottom: 0.7% | |||
div | |||
display: inline-block | |||
width: 20% | |||
width: 18% | |||
input[type=text] | |||
padding: 2px | |||
@@ -228,6 +262,9 @@ div#search-field | |||
span | |||
font-size: 80% | |||
&#selected | |||
background-color: #CACACA | |||
&.partly-visible | |||
margin-top: 0% | |||
padding-bottom: 3% | |||
@@ -34,48 +34,50 @@ | |||
</button> | |||
<div id="advanced-search"> | |||
<div id="heading"> | |||
<div id="col1">Fields</div | |||
><div id="col2">Search groups</div> | |||
</div> | |||
<div id="sidebar"> | |||
<div> | |||
Fields | |||
</div> | |||
<ul> | |||
<li> | |||
<input type="checkbox" id="language" checked/> | |||
<input type="checkbox" id="language" checked="true"> | |||
<label for="language"><div>languages</div></label> | |||
</li> | |||
<li> | |||
<input type="checkbox" id="author"/> | |||
<input type="checkbox" id="author"> | |||
<label for="author"><div>authors</div></label> | |||
</li> | |||
<li> | |||
<input type="checkbox" id="modified"/> | |||
<label for="modified"><div>date last modified</div></label> | |||
<input type="checkbox" id="date-last-modified"> | |||
<label for="date-last-modified"><div>date last modified</div></label> | |||
</li> | |||
<li> | |||
<input type="checkbox" id="created"/> | |||
<label for="created"><div>date created</div></label> | |||
<input type="checkbox" id="date-created"> | |||
<label for="date-created"><div>date created</div></label> | |||
</li> | |||
<li> | |||
<input type="checkbox" id="symbol"/> | |||
<input type="checkbox" id="symbol"> | |||
<label for="symbol"><div>symbols</div></label> | |||
</li> | |||
<li> | |||
<input type="checkbox" id="function"/> | |||
<input type="checkbox" id="function"> | |||
<label for="function"><div>functions</div></label> | |||
</li> | |||
<li> | |||
<input type="checkbox" id="class"/> | |||
<input type="checkbox" id="class"> | |||
<label for="class"><div>classes</div></label> | |||
</li> | |||
<li> | |||
<input type="checkbox" id="variable"/> | |||
<input type="checkbox" id="variable"> | |||
<label for="variable"><div>variables</div></label> | |||
</li> | |||
</ul> | |||
<button id="add-group"> | |||
<div> | |||
<span>+</span> Add group | |||
</div> | |||
<div><span>+</span> Add</div> | |||
</button> | |||
<button id="remove-group"> | |||
<div><span>-</span> Remove</div> | |||
</button> | |||
</div> | |||
<div id="search-groups"> | |||