Add:
templates/index.html
-Add compartmental `div` structure for the advanced-search form.
static/sass/index.sass
-Add layout style rules to the advanced-search form.
app.py, templates/(about, developers).html
-Add `Flask` routes and skeleton files for pages to be developed later.
Ref:
static/js/index.js
-Substitute some verbose `JavaScript` calls with their `jQuery`
equivalents.
tags/v1.0^2
| @@ -6,8 +6,8 @@ from flask import Flask | |||
| from flask import render_template, session | |||
| from bitshift import assets | |||
| from bitshift.database import Database | |||
| from bitshift.query import parse_query | |||
| # from bitshift.database import Database | |||
| # from bitshift.query import parse_query | |||
| app = Flask(__name__) | |||
| app.config.from_object("bitshift.config") | |||
| @@ -16,7 +16,7 @@ app_env = app.jinja_env | |||
| app_env.line_statement_prefix = "=" | |||
| app_env.globals.update(assets=assets) | |||
| database = Database() | |||
| # database = Database() | |||
| @app.route("/") | |||
| def index(): | |||
| @@ -24,9 +24,17 @@ def index(): | |||
| @app.route("/search/<query>") | |||
| def search(query): | |||
| tree = parse_query(query) | |||
| database.search(tree) | |||
| # tree = parse_query(query) | |||
| # database.search(tree) | |||
| pass | |||
| @app.route("/about") | |||
| def about(): | |||
| return render_template("about.html") | |||
| @app.route("/developers") | |||
| def developers(): | |||
| return render_template("developers.html") | |||
| if __name__ == "__main__": | |||
| app.run() | |||
| app.run(debug=True) | |||
| @@ -4,26 +4,42 @@ | |||
| */ | |||
| FINISH_TYPING_INTERVAL = 650; | |||
| searchBar = document.querySelectorAll("form#search-bar input[type='text']")[0]; | |||
| resultsDiv = document.querySelectorAll("div#results")[0]; | |||
| searchBar = $("form#search-bar input[type='text']")[0]; | |||
| resultsDiv = $("div#results")[0]; | |||
| var typingTimer, lastValue; | |||
| searchBar.onkeyup = typingTimer; | |||
| // Enable infinite scrolling down the results page. | |||
| $(window).scroll(function() { | |||
| if($(window).scrollTop() + $(window).height() == $(document).height()) { | |||
| if($(window).scrollTop() + $(window).height() == $(document).height()){ | |||
| loadMoreResults(); | |||
| } | |||
| }); | |||
| // Enable capturing the `enter` key. | |||
| $("form#search-bar").submit(function(event){ | |||
| event.preventDefault(); | |||
| return false; | |||
| }); | |||
| /* | |||
| * Clear the existing timer and set a new one the the user types text into the | |||
| * search bar. | |||
| */ | |||
| function typingTimer(){ | |||
| function typingTimer(event){ | |||
| clearTimeout(typingTimer); | |||
| if(lastValue != searchBar.value) | |||
| typingTimer = setTimeout(finishedTyping, FINISH_TYPING_INTERVAL); | |||
| var enterKeyCode = 13; | |||
| if(event.keyCode != enterKeyCode){ | |||
| if(lastValue != searchBar.value) | |||
| typingTimer = setTimeout(finishedTyping, FINISH_TYPING_INTERVAL); | |||
| } | |||
| else { | |||
| event.preventDefault(); | |||
| finishedTyping(); | |||
| return false; | |||
| } | |||
| }; | |||
| /* | |||
| @@ -35,17 +51,17 @@ function typingTimer(){ | |||
| */ | |||
| function finishedTyping(){ | |||
| lastValue = searchBar.value; | |||
| var searchField = document.querySelectorAll("div#search-field")[0] | |||
| var searchField = $("div#search-field"); | |||
| clearResults(); | |||
| if(searchBar.value){ | |||
| if(!searchField.classList.contains("partly-visible")) | |||
| searchField.classList.add("partly-visible"); | |||
| if(!searchField.hasClass("partly-visible")) | |||
| searchField.addClass("partly-visible"); | |||
| populateResults(); | |||
| } | |||
| else | |||
| searchField.classList.remove("partly-visible"); | |||
| searchField.removeClass("partly-visible"); | |||
| } | |||
| /* | |||
| @@ -73,8 +89,6 @@ function populateResults(){ | |||
| }; | |||
| }(newDiv)), result * 20); | |||
| } | |||
| for(var result = 0; result < results.length; result++); | |||
| } | |||
| /* | |||
| @@ -13,6 +13,7 @@ div#search-field | |||
| left: 0 | |||
| margin: auto | |||
| margin-top: 15% | |||
| max-height: 100px | |||
| position: absolute | |||
| right: 0 | |||
| top: 0 | |||
| @@ -33,15 +34,73 @@ div#search-field | |||
| color: $baseColor2 | |||
| font-style: italic | |||
| form input[type="text"] | |||
| border: 1px solid $baseColor1 | |||
| font-size: 1.1em | |||
| padding: 3px | |||
| width: 100% | |||
| form#search-bar | |||
| input[type="text"] | |||
| @include vendor(box-sizing, border-box) | |||
| border: 1px solid $baseColor1 | |||
| font-size: 1.1em | |||
| margin-bottom: 0px | |||
| padding: 3px | |||
| width: 100% | |||
| div#advanced-search | |||
| background-color: white | |||
| border: 1px solid $baseColor2 | |||
| margin: 0px | |||
| overflow: auto | |||
| >div | |||
| float: left | |||
| height: 100% | |||
| >#col1 | |||
| background-color: red | |||
| width: 10% | |||
| >#col2 | |||
| background-color: yellow | |||
| width: 15% | |||
| >#col3 | |||
| background-color: blue | |||
| width: 75% | |||
| div | |||
| width: 100% | |||
| #upper-half | |||
| background-color: brown | |||
| div | |||
| float: left | |||
| height: 100% | |||
| #col1 | |||
| background-color: red | |||
| width: 40% | |||
| #col2 | |||
| background-color: magenta | |||
| width: 20% | |||
| #col3 | |||
| background-color: pink | |||
| width: 40% | |||
| #lower-half | |||
| background-color: purple | |||
| input[type="text"] | |||
| border-color: $baseColor3 | |||
| font-size: 1em | |||
| width: 30% | |||
| &.partly-visible | |||
| height: 1% | |||
| margin-top: 3% | |||
| width: 46% | |||
| width: 60% | |||
| #title | |||
| display: none | |||
| @@ -0,0 +1,11 @@ | |||
| = extends "layout.html" | |||
| = block title | |||
| About | |||
| = endblock | |||
| = block body | |||
| <div> | |||
| About us, son. | |||
| </div> | |||
| = endblock | |||
| @@ -0,0 +1,11 @@ | |||
| = extends "layout.html" | |||
| = block title | |||
| About | |||
| = endblock | |||
| = block body | |||
| <div> | |||
| For developers, son. | |||
| </div> | |||
| = endblock | |||
| @@ -10,12 +10,40 @@ | |||
| = endblock | |||
| = block body | |||
| <div id="search-field"> | |||
| <div id="search-field" class="partly-visible"> | |||
| <div id="title"> | |||
| <span id="title-bit">bit</span><span id="title-angle">«</span><span id="title-shift">shift</span> | |||
| </div> | |||
| <form id="search-bar"> | |||
| <input type="text"> | |||
| <input type="text" name="query"> | |||
| <div id="advanced-search"> | |||
| <!-- Tags are closed on the following line to remove whitespace between divs. --> | |||
| <div id="col1"> | |||
| H | |||
| </div><div id="col2"> | |||
| H | |||
| </div><div id="col3"> | |||
| <div id="upper-half"> | |||
| <div id="col1"> | |||
| A | |||
| </div><div id="col2"> | |||
| B | |||
| </div><div id="col3"> | |||
| C | |||
| </div> | |||
| </div> | |||
| <div id="lower-half"> | |||
| Z | |||
| </div> | |||
| </div> | |||
| <!-- Languages <input type="text" name="languages"><br> --> | |||
| <!-- Authors <input type="text" name="authors"><br> --> | |||
| <!-- Symbols <input type="text" name="symbols"><br> --> | |||
| <!-- Functions <input type="text" name="functions"><br> --> | |||
| <!-- Classes <input type="text" name="classes"><br> --> | |||
| <!-- Variables <input type="text" name="variables"><br> --> | |||
| </div> | |||
| </form> | |||
| </div> | |||