From 1ef33bc785b9d0b01e40cb08c4ba6521f5e1286d Mon Sep 17 00:00:00 2001 From: zevav Date: Fri, 22 Sep 2017 16:30:49 -0600 Subject: [PATCH] a lot of changes, including moving most view data into the board object. --- .routes.py.swo | Bin 0 -> 12288 bytes boards.db | Bin 8192 -> 12288 bytes config.py | 25 +++++++++++++ models.py | 76 ++++++++++++++++++++++++++++++++++++-- routes.py | 54 +++++++++++---------------- static/css/100_blocks.css | 11 ++++-- templates/100_blocks.html | 47 +++++++++++++++++------ 7 files changed, 161 insertions(+), 52 deletions(-) create mode 100644 .routes.py.swo create mode 100644 config.py diff --git a/.routes.py.swo b/.routes.py.swo new file mode 100644 index 0000000000000000000000000000000000000000..2f5127a09ad611f4ad938a83b706604f193d2002 GIT binary patch literal 12288 zcmeI2O>7%Q6vw9s@tqbyB{**5!`hW&J0B!Gu6NR?4Toy4is11g%4e%|cc_h#Pw z=gnAFwpKZH)N_&TVm^S>?p0zalSToT<}uB z>onLJ_C7i+F9_bQ@rz}_+FX{$D;2i}_cd7-yrY;bwYysbjm0Qn6nHQNI;t^N9XUBU zF<#LfJvyF|Nl>a|KHh1 z$gkigxC|}<2FjoWUIZ_IzxEPx2mA>(z%}p<_#Au)I^Z4fI+y{YUpKSRhL;1>8D+yGyKE_fRhz`dslxeh)8Yv3GM0>{88`1>hBeg;>- zS+D}mfN5|L{PQFs--D0AWpE1Y2lt@MkKhKl4z7W(f!6B^I0GDz0~^rsC-58i3cLqS zgMHxcW3Yqoz*X=8SO!brG%(F5U=%P4{4W%+HXCiXOQI9zJyz>9ofD$N3dC<%t{c)8 zb6v}EEL%JG{IYjDN4ai`?&3S_@ea>+Fz=FclBEt#+itlrD$m!hQ$*wG(Ft4#x@ z6mybmA?`s>WFRHaud6&0f(s}5?DK33KTMwW!XqaOTSTq;G8)mMfne0@TI`}Pl{{ca z$zn&PlNgw7pqOxL-TY>@n-a`Mk^Qs5K!PD&s#23FSL+C+)@c9}RPh)_q3bMPm?f`9 ztFB+z%-dycw2M}Ysa5VtXW2gf##<-sl>&}3NU&3*LEzT(qDZIrXK(7;gw=V#g&THS zuGZ1X-WJI=5veJ1m2rfOJ(HCYEcBp|Vy$*S^=x`Cq?T4yE3jklUWO29TdCoZXrya- zi$*roNVD1I8VTVypYxmgwk@XW5(1{mB{^OkX$7 zF&?tPdVIMz%qv=VLZqTX`C&7TPg7FyuCP(N$=TXg72 z@06@DAIB6(&SJE_YN5Xx6BafwUU^2REL6<1YF&$3>H;70{HCugY<|{+msB_hnwg!m z(pNZkZvODZOm#jf%ea#4T%|HSh1B~C!Okr%&cC+BSe>h&4S3EkzBIYTI2pA8PaRwx z3?Dx{J~weF>&XQTn>ZCRxi227E>st?##%t@YgtonVt!(3d^&4v3dX{$smp?ZU&z{O zIIOZ3!8{n^HNko<6VkW9Fw}Y2@SDqapVeL=1P2@*E(TPt<3nP~4^>;;49_G%CJJI&A1+(kIcFMHEZsWYUJ{Y%Zo>aN6Seg4I>g>WIK? eaFKKu7g5?Dm37~Dp%fE!Dj7-A#sYb~Mg9eN^D5gQ7zc3K>6RwLb76;)LqVWRLdS5NG;Y#8QOqML-6#QbvK2IL_C0SG_<0uX=z1Rwwb2tWV= ze?#DGTgxsN3flQW%KMS%$2$E~+~I$NW~d~OiZX1n8W`2lUe>Ckq! z)p|cS*1J4h)?2i`ZHa#t9SFCc_dO1?t%;iG-Q%5J%CuQPR^W3kFKnAcdVSQc~YYMC_} zo-YT>s>#}md9MB3@vc5-Sz=rd@wOBZVtxX1`^59|@1{S#A?7#PAs_$&2tWV=5P$## eAOHafKmY>&qQLo!h09ZIepUJZb&{UR7`gAX3wsv; literal 8192 zcmeHKOK;Oa5MH+pA!$qDLKPvTddc`6||MuT?Le|rXe`Ea0WO7oB_@NXMi)n8Q=_X1~>zp0nPwt z;3hNh{=Sf0&twEUX%e}k$~rNWfp=cmlPcv}1=q^Ysuk?%@Mb#IRPe!Jt+HQ{@ZnJn zAHJr=lklHm3wJ5RZM=n^*OP=_*3`+>i=5o%yI%>NuSyc=|x*g3ldv+$t_c22mX*OE*(WKQ; zTe>aXN}vyG{wHvU!IfYuIg)2|IXb4MZK@DqV~3G>cr|=+j8~^cYQJK3z(uFjdg3l- z(4b|kVXzycYc0{`AuuSxFMT@dDZqk;F00d}?3tTxs#u0-F z`6{^HBKUIO_y9+57;+XdFlT@JPx#k?Mey}!an(&?nG@2{P8*v2U;!%9qq!AnM*8QJ ssTnKgsQ;<6Irq8VBoF%vX`6=99**pcz<(exlucxLaHgBRev|Zm0WKLk9RL6T diff --git a/config.py b/config.py new file mode 100644 index 0000000..a57afc5 --- /dev/null +++ b/config.py @@ -0,0 +1,25 @@ + + + +config = dict(num_squares=312) + +colors = [ + 'red', + 'blue', + 'yellow', + 'green', + '#2C2416', + 'black', + '#F98D8D', + 'orange', + '#1A1B29', + '#000080', + '#333333', + '#CF5300', + '#8B0000', + '#FFCE00', + '#006400', + '#CA278C', + ] + + diff --git a/models.py b/models.py index 19bcf65..9e86feb 100644 --- a/models.py +++ b/models.py @@ -1,11 +1,15 @@ +from collections import namedtuple + from sqlalchemy import create_engine, Column, String, Integer -from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import sessionmaker, scoped_session from sqlalchemy.ext.declarative import declarative_base +from config import config, colors + Base = declarative_base() engine = create_engine('sqlite:///boards.db') -session = sessionmaker(bind=engine)() +session = scoped_session(sessionmaker(bind=engine)) @@ -14,8 +18,72 @@ class Board(Base): __tablename__ = 'boards' id = Column(Integer, primary_key=True) - layout = Column(String(528), nullable=False) - name = Column(String(50), nullable=False) + name = Column(String(50), unique=True, nullable=False) + layout = Column(String(config['num_squares'] * 2), nullable=False) + palette = Column(String(400), nullable=False) def __repr__(self): return f' name: {self.name} {self.layout}' + + def update(self, layout): + self.layout = layout + session.commit() + + @property + def color_list(self): + return get_colors_from_palette(self.palette) + + @property + def color_num_dict(self): + return get_color_num_dict(self.color_list) + + +def get_boards(**kwargs): + return session.query(Board).filter_by(**kwargs).all() + + +def get_board(**kwargs): + one = get_boards(**kwargs) + if len(one) > 0: + return one[0] + + +def create_board(name, layout, colors): + new_board = Board(name=name, + layout=layout, + palette=prep_colors_for_table(colors)) + + session.add(new_board) + session.commit() + return new_board + + +def get_colors_from_palette(a_palette: str): + parsed_colors = [] + palette_list = a_palette.split('#')[1:] + for color in palette_list: + if color[0].islower(): + parsed_colors.append(color) + else: + parsed_colors.append('#' + color) + return parsed_colors + + +def get_color_num_dict(color_list): + return {color: str(idx + 1).zfill(2) + for idx, color in enumerate(color_list)} + + +def prep_colors_for_table(some_colors): + palette = '' + for color in some_colors: + if not color.startswith('#'): + color = '#' + color + palette += color + return palette + + +base_board = get_board(name='') or create_board('', '00' * num_squares, colors) + +# each number is represented by a two-digit integer string +color_num_dict = get_color_num_dict(colors) diff --git a/routes.py b/routes.py index c65e322..0be5eef 100644 --- a/routes.py +++ b/routes.py @@ -1,50 +1,40 @@ import random from string import ascii_lowercase -from flask import Flask, render_template, request, jsonify +from flask import Flask, render_template, request, jsonify, redirect, url_for -from models import Board, session +from config import config +from models import session, get_color_num_dict, base_board, colors, color_num_dict, get_board, get_boards, \ + create_board app = Flask(__name__) +num_squares = config['num_squares'] + + + +@app.route('/') +def main_board(board_name=None): + return render_template('100_blocks.html', + all_boards=get_boards(), + board=get_board(name=board_name) or base_board) @app.route('/') def main(): - color_label_dict = {'red':'exercise', - 'blue':'work', - 'yellow':'admin', - 'green':'finance', - '#2C2416':'', - 'black':'', - '#F98D8D':'', - 'orange':'', - 'white': '', - '#1a1b29': '', - '#000080': '', - '#333333':'', - '#CF5300': '', - '#8B0000': '', - } - - colors = list(color_label_dict.keys()) - color_num_dict = {'': 0} - color_num_dict = {color: str(idx + 1).zfill(2) for idx, color in enumerate(colors)} - return render_template('100_blocks.html', - colors=colors, - color_label_dict=color_label_dict, - color_num_dict=color_num_dict) + all_boards=get_boards(), + board=base_board) @app.route('/save', methods=['POST']) def save(): - name = '' - for i in range(12): - name += random.choice(ascii_lowercase) - layout = list(request.get_json().values())[0] - session.add(Board(layout=layout, name=name)) - session.commit() - return jsonify(session.query(Board).first().layout) + layout, board_name = request.get_json().values() + board = get_board(name=board_name) + if board is not None: + board.update(layout) + else: + board = create_board(layout, board_name, colors) + return jsonify(board.layout) diff --git a/static/css/100_blocks.css b/static/css/100_blocks.css index 6c2195f..55d99e3 100644 --- a/static/css/100_blocks.css +++ b/static/css/100_blocks.css @@ -1,6 +1,6 @@ :root { font-family: Arial, sans-serif; - background: #333; + background: rgb(250,250,250); } @@ -17,13 +17,13 @@ width: 70px; height: 70px; margin-left: -4px; - background: #AAA; + background: rgb(250,250,250); } .palette { display: inline-block; - margin-top: 30px; + margin-top: 10px; width: 70px; height: 70px; @@ -34,10 +34,13 @@ width: 90px; height: 90px; float: right; - margin: 20px 60px 30px; + margin: 10px 10px 10px; } +#load { +} + #palettes { diff --git a/templates/100_blocks.html b/templates/100_blocks.html index b0e573c..382032e 100644 --- a/templates/100_blocks.html +++ b/templates/100_blocks.html @@ -8,6 +8,17 @@ + {% if all_boards %} +
+ + + +
+ {% endif %}
@@ -16,9 +27,12 @@ /// begin JavaScript +board_name = "{{board.name}}"; +num_clicks = ''; + function changeColor(o){ - o.style.backgroundColor = o.style.backgroundColor == paletteColor ? '#AAA' : paletteColor; + o.style.backgroundColor = o.style.backgroundColor == paletteColor ? 'rgb(250,250,250)' : paletteColor; } @@ -26,7 +40,6 @@ function changeColor(o){ function setPalette(o) { paletteColor = o.style.backgroundColor; - currentPaletteDiv.style.backgroundColor = paletteColor; } @@ -42,13 +55,17 @@ function save() { layout += num } - console.log(layout); + while (board_name == '') { + board_name = prompt('what would you like to name it?'); + } + fetch("/save", { headers: {'Accept': 'application/json', 'Content-Type': 'application/json'}, method: "POST", - body: JSON.stringify({layout: layout}) + body: JSON.stringify({layout: layout, + board_name: board_name}) }) @@ -57,15 +74,13 @@ function save() { window.onload = function () { - paletteColors = {{ colors | tojson }}; - colorLabelLookup = {{ color_label_dict | tojson }}; - colorNumLookup = {{ color_num_dict | tojson }}; - console.log(colorNumLookup); + paletteColors = {{ board.color_list | tojson }}; + colorNumLookup = {{ board.color_num_dict | tojson }}; paletteColor = paletteColors[0]; gridContainer = document.getElementById('gridcontainer'); palettesDiv = document.getElementById('palettes'); - for (i=0; i<264; i++) { + for (i=0; i<312; i++) { box = document.createElement('div'); box.className = 'griditem'; @@ -73,6 +88,10 @@ window.onload = function () { box.addEventListener('click', function () { changeColor(this); + num_clicks++; + if (board_name != '' || board_name == '' && num_clicks > 25) { + save(); + } }); @@ -96,9 +115,13 @@ window.onload = function () { } - currentPaletteDiv = document.getElementById('current-palette') - currentPaletteDiv.style.backgroundColor = paletteColor; - +loader = document.getElementById('load'); +loader.onchange = function() { + + window.open('http://0.0.0.0:5000/' + loader.options[loader.selectedIndex].id ) + +} + }