From 6ee942f8dc4ed4cc2e62487b60390d4143ec3a72 Mon Sep 17 00:00:00 2001 From: Neill Cox Date: Sat, 10 Aug 2024 14:26:12 +1000 Subject: [PATCH] WIP: Cleanup --- .gitignore | 4 + .run/django_gurps.run.xml | 39 + .../__pycache__/settings.cpython-312.pyc | Bin 3366 -> 0 bytes django_gurps/__pycache__/urls.cpython-312.pyc | Bin 1663 -> 0 bytes django_gurps/settings.py | 46 +- django_gurps/urls.py | 5 +- django_gurps/views.py | 1 + gurps_character/TestData/characters.py | 19 + .../__pycache__/admin.cpython-312.pyc | Bin 444 -> 0 bytes .../__pycache__/models.cpython-312.pyc | Bin 20008 -> 0 bytes .../__pycache__/urls.cpython-312.pyc | Bin 613 -> 0 bytes .../__pycache__/views.cpython-312.pyc | Bin 3465 -> 0 bytes gurps_character/admin.py | 3 +- .../management}/__init__.py | 0 .../management/commands/__init__.py | 0 .../management/commands/clear_data.py | 24 + .../management/commands/load_data.py | 24 + ...gurpscharacter_player_campaign_and_more.py | 57 + .../migrations/0005_campaign_gm.py | 20 + gurps_character/models.py | 236 ++- .../templates/allauth/layouts/base.html | 89 + .../templates/base.html | 0 gurps_character/templates/home.html | 35 +- gurps_character/templates/navbar.html | 38 +- gurps_character/urls.py | 2 + gurps_character/views.py | 25 +- requirements.txt | 2 + theme/__pycache__/__init__.cpython-312.pyc | Bin 156 -> 0 bytes theme/__pycache__/apps.cpython-312.pyc | Bin 399 -> 0 bytes theme/apps.py | 5 - theme/static/css/dist/styles.css | 841 --------- theme/static_src/.gitignore | 1 - theme/static_src/package-lock.json | 1527 ----------------- theme/static_src/package.json | 28 - theme/static_src/postcss.config.js | 7 - theme/static_src/src/styles.css | 3 - theme/static_src/tailwind.config.js | 57 - 37 files changed, 547 insertions(+), 2591 deletions(-) create mode 100644 .run/django_gurps.run.xml delete mode 100644 django_gurps/__pycache__/settings.cpython-312.pyc delete mode 100644 django_gurps/__pycache__/urls.cpython-312.pyc create mode 100644 gurps_character/TestData/characters.py delete mode 100644 gurps_character/__pycache__/admin.cpython-312.pyc delete mode 100644 gurps_character/__pycache__/models.cpython-312.pyc delete mode 100644 gurps_character/__pycache__/urls.cpython-312.pyc delete mode 100644 gurps_character/__pycache__/views.cpython-312.pyc rename {theme => gurps_character/management}/__init__.py (100%) create mode 100644 gurps_character/management/commands/__init__.py create mode 100644 gurps_character/management/commands/clear_data.py create mode 100644 gurps_character/management/commands/load_data.py create mode 100644 gurps_character/migrations/0004_gurpscharacter_player_campaign_and_more.py create mode 100644 gurps_character/migrations/0005_campaign_gm.py create mode 100644 gurps_character/templates/allauth/layouts/base.html rename {theme => gurps_character}/templates/base.html (100%) delete mode 100644 theme/__pycache__/__init__.cpython-312.pyc delete mode 100644 theme/__pycache__/apps.cpython-312.pyc delete mode 100644 theme/apps.py delete mode 100644 theme/static/css/dist/styles.css delete mode 100644 theme/static_src/.gitignore delete mode 100644 theme/static_src/package-lock.json delete mode 100644 theme/static_src/package.json delete mode 100644 theme/static_src/postcss.config.js delete mode 100644 theme/static_src/src/styles.css delete mode 100644 theme/static_src/tailwind.config.js diff --git a/.gitignore b/.gitignore index b2d3c5b..7a0a341 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ db.sqlite3 .idea/ .venv/ .hidden_notes.txt +env/ +*pyc +__pycache__/ +xxxthemexxx/ diff --git a/.run/django_gurps.run.xml b/.run/django_gurps.run.xml new file mode 100644 index 0000000..e80fdeb --- /dev/null +++ b/.run/django_gurps.run.xml @@ -0,0 +1,39 @@ + + + + + \ No newline at end of file diff --git a/django_gurps/__pycache__/settings.cpython-312.pyc b/django_gurps/__pycache__/settings.cpython-312.pyc deleted file mode 100644 index 5dae05865aac1183b864886896eb2efd30e72667..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3366 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 diff --git a/gurps_character/__pycache__/urls.cpython-312.pyc b/gurps_character/__pycache__/urls.cpython-312.pyc deleted file mode 100644 index 39ad7176b925fa4b381fb3167aef4a91df14af05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmZvYziSjh6vyA(%--#0vnn|S3ptxWxF*vmh=hZbHX)557vvajo_D*<{$OU;OVZh$ zm3CStjY)__{sem)g#*cgm83`)Nta6IHiusDTYP!%J0IQ~-q#>l00209`3YADz%Sd( zbmP3FdxP_k zMvL=|mGo|K3rM3||Ka?<+<^9d(J_yADld!u+AxS$M@eq{?T0i-dsL>GGULV$iuyR2d(|qNi<>W O7oKyw_QuzD0N@V{0hVn5 diff --git a/gurps_character/__pycache__/views.cpython-312.pyc b/gurps_character/__pycache__/views.cpython-312.pyc deleted file mode 100644 index 1d91d593cd9e80a4f58cdc22fe5c57fb09f00fc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3465 zcmbtWOKcm*8UAN?mJcn(hsDTNWLdJDNTE`TaGTh&{3;?@vW!MHEawoSs6cZ@(lSdf zJG;~i%YX(1L_z~tK@V1n0!c5e3=61^Jtpa)1$rS%wIVhOYM{*_H$(0ra4*H|a+k88 zwrKkUTJFw{{+XTc@&A8lZEXPn_{a1wX@3CVul&Icp>gvp3jhy+06{9G_^+U%oRAU_ zzZX?8hf_Ewr6l_qtG=8+7B)9^pR?@NpsW6dO zAQd5@6-Y&wP@?r4zVKuMSw2SdgtCNSg>D!|;SSXcT3)AC{NU3aN)$#jMgm!WM&~Kh z={E=f637aVzjNpI)W}?#r85R)eB_;is-?-8qS7&q_hRm@mxX#nMgq;!Gx^u&?EpL!h5d)upb&h_niq@8;2Legly==5gv~lyD5pL zn2j9qzA?nk8!`9o(V2+Y!SglF0D;lw&Np6i?+A9^yT4P=+_$?H--{^_=`sKq$KC%m zf%r_}F+WoPn1Y0V(rU@LXy_KceQWBjg=Z9%T9T3{bkV{y8p|!mo0F2Nq8o#AMovwH zSO5SlzjiN6Glp)7X;rm+Icm&lgz=+f{Io1-Y~lykr>uaYPtT`Sg;?>qbe^bmx@bdB z$uwV(ar_tuhw=R-FelHCi&Qt5Y_F2h@&;Wr7(Zbh13*ttPtWtWl5<*)Ci59>F?pM5 z_C}JoDbuxlT1}E{IzOvT&lXuhPukaM?@N;N3SH0#3rj4_7v&cYx&9LXD8pW?dpFi! zjrH%wUa!Vpuf@)mZ`LE78#gQA{_^+}fB1v<@4vs%{zrfJUZiVd_7nAEb#wgJZ$Emw z78zc}bvg3j%G#9=ukD3;K0W@cu3vO*&R0*L-w9pVYwO?gZ~JSn4b|E%Rzes57U`-* zx>xa&_Ls}!t7G?X?a8tA{z~V$?F%*eQUzan#-Yj_B)lgJV%xxfFAEcGA(uQQfe5Cc zppt0#9a;dViD-%kXo4pnAqy9a3bBIT`7NLDZuKP1-J^t1;t&Jd#9&d5n>b622BNH; zAM{Cn>Eaj8OAkqQ!bX`;Bdw@9>jnTW2K|BqNA%Qgw67ZN+l>xXqXXNx5*?^T-z-l& ziM+fqQ3>~z$N%nw&@p~=Z*DKtcM`r?e(!)WJ?FLguLnr(| zvYc>-;%G1N+yI#<>-kADT!pf;2IsXMM`t3!Avb7s=M&L|Zwi{bbTgNb;kl3r1QUsS z-vKy%leRD!&$rx~)Qg!6)%9eNsmbN`1E4zkv>~-smk6+995+wejQbOd^9%PUN5Zyx z1qW+etDL(%4SZ!Mr=$4O0MN@Z&e#~&{~u9pMrv(CmC%r@r-qEaw>|S4vi+l)JX*n{ z|Ar4gvnvci1XQq*^RRD*d%lR{bwsrxo~RHs#gye9c_>WCde}F^&F^Ac5=_D2K#6;~ zT^k7IoG9TS7+xjHa_c%2S+CMG!xXn9FSle0rZnyG)5NAU?NvNe%6c`U8SefNEWw$B z>vQEEidTT0M$lxeDVo?6wtOxNOVWQ@<6T&S1y~f{g$0!GPcqITOHhdAFEGunP&l8? zQP#dkte{SfX@jLR)WSNY?^!sjYk5oJJ%?^#M$@F}RqT}e z|8^z|>*;xFg+?{1Pin^XMMXCfJ`2sTKE4-B(nk8gy4=!qZZNzqHTdqxf@|YD{OzXA z^Dl8^9X||z6yAyU)Uouz*!{89b1M^ja^%7A+VFb%;mk)fKb@<|-R03Ia%3H^4VOpj za%4TYc5UN)Rqid1KK1#fj=gyAZhW8`AJ~l#R^x-)qm}qzEq-w|SU=gb8r%tV)H}LX zgCBc0jylTEU!>qxQ-+*Q@|*wBI^6qbBLB0MQomoZ;*|09@tFyX!b?w7)#@ zFH7lOr1R&apWOWT=BG=${X^CMq1wrdzYp$2?v!uT`$j%fewY6|U+ueFzENrIt>QCv zxvhN5w$wz-`Gly`ZVl>l8Z$CQL$_;zB{zoW45Q$DFyF5?Tx6 user # campaign => campaign + def __str__(self): + return self.name + " Player " + str(self.player) + " Campaign " + str(self.campaign) + def adv_points(self): - return sum([ a['calc']['points'] for a in self.details.get('advantages',[]) if a['calc']['points'] > 0 ]) + return sum([a['calc']['points'] for a in self.details.get('advantages', []) if a['calc']['points'] > 0]) def disadv_points(self): - return sum([ a['calc']['points'] for a in self.details.get('advantages', []) if a['calc']['points'] < -1 ]) + return sum([a['calc']['points'] for a in self.details.get('advantages', []) if a['calc']['points'] < -1]) def quirks_points(self): - return sum([ a['calc']['points'] for a in self.details.get('advantages',[]) if a['calc']['points'] == -1 ]) + return sum([a['calc']['points'] for a in self.details.get('advantages', []) if a['calc']['points'] == -1]) def attr_points(self): - return sum([ a['calc']['points'] for a in self.details['attributes'] ]) + return sum([a['calc']['points'] for a in self.details['attributes']]) def skills_points(self): - return sum([ s['points'] for s in self.details.get('skills',[]) ]) + return sum([s['points'] for s in self.details.get('skills', [])]) def spells_points(self): - return 0 + return sum([s['points'] for s in self.details.get('spells', [])]) def race_points(self): - return 0 + return sum([s['points'] for s in self.details.get('race', [])]) # Are we sure? def unspent_points(self): - return self.details['total_points'] - self.adv_points() - \ + return self.details['total_points'] - self.adv_points() - \ self.disadv_points() - self.attr_points() - \ self.skills_points() - self.spells_points() - \ self.race_points() - self.quirks_points() def get_primary_attr(self, attr_id): - return [ a['calc'] for a in self.details['attributes'] if a['attr_id'] == attr_id ][0] + return [a['calc'] for a in self.details['attributes'] if a['attr_id'] == attr_id][0] def st(self): return self.get_primary_attr('st') @@ -91,7 +125,7 @@ class GURPSCharacter(models.Model): return self.get_primary_attr('fp') def weight_carried(self): - items = [ i['calc']['extended_weight'] for i in self.details['equipment'] ] + items = [i['calc']['extended_weight'] for i in self.details['equipment']] total_weight = 0 for i in items: @@ -116,11 +150,36 @@ class GURPSCharacter(models.Model): dodge = self.details["calc"]["dodge"][0] basic_move = self.basic_move()["value"] return [ - { "max_load": round(self.basic_lift()), "move": basic_move, "dodge": dodge, "current": "current" * (enc_level == 0) }, - { "max_load": round(self.basic_lift()) * 2, "move": basic_move -2, "dodge": dodge -1, "current": "current" * (enc_level == 1) }, - { "max_load": round(self.basic_lift()) * 3, "move": basic_move -3, "dodge": dodge -2, "current": "current" * (enc_level == 2) }, - { "max_load": round(self.basic_lift()) * 6, "move": basic_move -4, "dodge": dodge -3, "current": "current" * (enc_level == 3) }, - { "max_load": round(self.basic_lift()) * 10, "move": basic_move -5, "dodge": dodge -4, "current": "current" * (enc_level == 4) }, + { + "max_load": round(self.basic_lift()), + "move": basic_move, + "dodge": dodge, + "current": "current" * (enc_level == 0) + }, + { + "max_load": round(self.basic_lift()) * 2, + "move": basic_move - 2, + "dodge": dodge - 1, + "current": "current" * (enc_level == 1) + }, + { + "max_load": round(self.basic_lift()) * 3, + "move": basic_move - 3, + "dodge": dodge - 2, + "current": "current" * (enc_level == 2) + }, + { + "max_load": round(self.basic_lift()) * 6, + "move": basic_move - 4, + "dodge": dodge - 3, + "current": "current" * (enc_level == 3) + }, + { + "max_load": round(self.basic_lift()) * 10, + "move": basic_move - 5, + "dodge": dodge - 4, + "current": "current" * (enc_level == 4) + }, ] def basic_lift(self): @@ -131,25 +190,26 @@ class GURPSCharacter(models.Model): def lift_table(self): return [ - {"value": round(self.basic_lift()), "label":"Basic Lift"}, - {"value": round(self.basic_lift()) * 2, "label": "One-Handed Lift" }, - {"value": round(self.basic_lift()) * 8, "label":"Two-Handed Lift"}, - {"value": round(self.basic_lift()) * 12, "label":"Shove &ersand; Knock Over"}, - {"value": round(self.basic_lift()) * 24, "label":"Running Shove & Knock Over"}, - {"value": round(self.basic_lift()) * 15, "label":"Carry on Back"}, - {"value": round(self.basic_lift()) * 50, "label":"Shift Slightly"}, + {"value": round(self.basic_lift()), "label": "Basic Lift"}, + {"value": round(self.basic_lift()) * 2, "label": "One-Handed Lift"}, + {"value": round(self.basic_lift()) * 8, "label": "Two-Handed Lift"}, + {"value": round(self.basic_lift()) * 12, "label": "Shove &ersand; Knock Over"}, + {"value": round(self.basic_lift()) * 24, "label": "Running Shove & Knock Over"}, + {"value": round(self.basic_lift()) * 15, "label": "Carry on Back"}, + {"value": round(self.basic_lift()) * 50, "label": "Shift Slightly"}, ] def reaction_modifiers(self): modifiers = [] - for a in self.details.get('advantages',[]): + for a in self.details.get('advantages', []): if "features" in a: for f in a["features"]: if f["type"] == "reaction_bonus": modifiers.append(f) return modifiers + def conditional_modifiers(self): modifiers = [] @@ -162,10 +222,10 @@ class GURPSCharacter(models.Model): return modifiers def weapons(self): - return [ w for w in self.details['equipment'] if "weapons" in w] + \ - [ a for a in self.details.get("advantages",[]) if "weapons" in a ] + \ - [ a for a in self.details.get("traits",[]) if "weapons" in a ] + \ - [ s for s in self.details.get("spells", []) if "weapons" in s ] + return [w for w in self.details['equipment'] if "weapons" in w] + \ + [a for a in self.details.get("advantages", []) if "weapons" in a] + \ + [a for a in self.details.get("traits", []) if "weapons" in a] + \ + [s for s in self.details.get("spells", []) if "weapons" in s] def melee_weapons(self): mw = [] @@ -178,14 +238,14 @@ class GURPSCharacter(models.Model): name = item["name"] mw.append( { - "name":name, + "name": name, "usage": weapon["usage"], - "skill_level":weapon["calc"].get("level", 0), - "parry":weapon["calc"].get("parry", "No"), - "block":weapon["calc"].get("block", "No"), - "damage":weapon["calc"]["damage"], - "reach":weapon["calc"].get("reach", ""), - "strength":weapon.get("strength", " ") + "skill_level": weapon["calc"].get("level", 0), + "parry": weapon["calc"].get("parry", "No"), + "block": weapon["calc"].get("block", "No"), + "damage": weapon["calc"]["damage"], + "reach": weapon["calc"].get("reach", ""), + "strength": weapon.get("strength", " ") } ) @@ -207,7 +267,6 @@ class GURPSCharacter(models.Model): else: return wpn_range - rw = [] for item in self.weapons(): for weapon in item["weapons"]: @@ -218,13 +277,13 @@ class GURPSCharacter(models.Model): name = item["name"] rw.append( { - "name":name, + "name": name, "bulk": weapon.get("bulk", " "), "usage": weapon.get("usage", " "), - "skill_level":weapon["calc"]["level"], - "damage":weapon["calc"]["damage"], - "strength":weapon.get("strength", " "), - "acc":weapon.get("accuracy", 0), + "skill_level": weapon["calc"]["level"], + "damage": weapon["calc"]["damage"], + "strength": weapon.get("strength", " "), + "acc": weapon.get("accuracy", 0), "range": muscle_range(weapon.get("range", " ")), "rof": weapon.get("rate_of_fire", " "), "shots": weapon.get("shots", " "), @@ -236,12 +295,12 @@ class GURPSCharacter(models.Model): def traits(self): traits = [] - for advantage in self.details.get("advantages",[]): + for advantage in self.details.get("advantages", []): cost = advantage["calc"]["points"] name = advantage["name"] if "categories" in advantage and "Language" in advantage["categories"]: - levels = [ m for m in advantage['modifiers'] if "disabled" not in m ] + levels = [m for m in advantage['modifiers'] if "disabled" not in m] notes = "" for level in levels: @@ -256,24 +315,24 @@ class GURPSCharacter(models.Model): elif "notes" in advantage: notes = advantage["notes"] elif "modifiers" in advantage: - notes = [ m for m in advantage['modifiers'] if m["cost"] == cost ][0]["name"] + notes = [m for m in advantage['modifiers'] if m["cost"] == cost][0]["name"] else: notes = "" - traits.append({"name":name, "notes":notes, "points":cost, "reference":advantage["reference"]}) + traits.append({"name": name, "notes": notes, "points": cost, "reference": advantage["reference"]}) return traits def spells(self): - def get_casting_details(spell): - level = spell['calc']['level'] + def get_casting_details(spell_details): + level = spell_details['calc']['level'] if level < 10: descr = ( "Ritual: Need both hands and both feet " "free, and must speak .Time: 2x." ) - elif level <15: + elif level < 15: descr = ( "Ritual: Must speak a few quiet words " "and make a gesture." @@ -287,13 +346,13 @@ class GURPSCharacter(models.Model): elif level < 25: descr = "Ritual: None. Time: / 2 (round up). Cost: -2." elif level < 30: - descr = ( + descr = ( "Ritual: None. Time: / 4 (round up). Cost: -3." ) else: delta = int((level - 25) / 5) power = 2 + delta - divisor = 2**power + # divisor = 2**power cost = 3 + delta descr = ( f"Ritual: None. Time: / {power} round up. Cost: " @@ -302,56 +361,62 @@ class GURPSCharacter(models.Model): return descr - spells = [] - for spell in self.details.get('spells',[]): + for spell in self.details.get('spells', []): notes = ( f"{get_casting_details(spell)}
Class: {spell['spell_class']}; " - f"Cost: {spell['casting_cost']}; Maintain: {spell['maintenance_cost']}; Time: {spell['casting_time']}; Duration: {spell['duration']}; " + f"Cost: {spell['casting_cost']}; Maintain: {spell['maintenance_cost']};" + f" Time: {spell['casting_time']}; Duration: {spell['duration']}; " ) spells.append( { 'name': spell["name"], - "college":", ".join(spell["college"]), + "college": ", ".join(spell["college"]), "level": spell["calc"]["level"], - "rsl":spell["calc"]["rsl"], - "points":spell["points"], - "reference":spell["reference"], - "notes":notes + "rsl": spell["calc"]["rsl"], + "points": spell["points"], + "reference": spell["reference"], + "notes": notes } ) return spells def skills(self): skills = [] - for skill in self.details.get('skills',[]): - skills.append({'name': skill["name"], "level": skill["calc"]["level"], "rsl":skill["calc"]["rsl"], "points":skill["points"], "reference":skill["reference"] }) + for skill in self.details.get('skills', []): + skills.append({ + 'name': skill["name"], + "level": skill["calc"]["level"], + "rsl": skill["calc"]["rsl"], + "points": skill["points"], + "reference": skill["reference"] + }) return skills def equipment(self): def get_children(parent, level=1): children = [] - for item in parent["children"]: - equipment = { - "name": item["description"], - "uses":"", - "tech_level":item["tech_level"], - "lc":"", - "value":item["value"], - "weight":item["weight"], - "quantity":item.get("quantity",1), - "ref":item["reference"], - "ext_weight": item["calc"]["extended_weight"], - "ext_value": item["calc"]["extended_value"], - "notes": item.get("notes",""), - "equipped": item["equipped"], + for item_details in parent["children"]: + equipment_details = { + "name": item_details["description"], + "uses": "", + "tech_level": item_details["tech_level"], + "lc": "", + "value": item_details["value"], + "weight": item_details["weight"], + "quantity": item_details.get("quantity", 1), + "ref": item_details["reference"], + "ext_weight": item_details["calc"]["extended_weight"], + "ext_value": item_details["calc"]["extended_value"], + "notes": item_details.get("notes", ""), + "equipped": item_details["equipped"], "level": level } - children.append(equipment) + children.append(equipment_details) - if "children" in item: - children += get_children(item, level +1) + if "children" in item_details: + children += get_children(item_details, level + 1) return children equipment = self.details['equipment'] @@ -361,17 +426,17 @@ class GURPSCharacter(models.Model): equipment_list.append( { "name": item["description"], - "uses":"", - "tech_level":item["tech_level"], - "lc":"", + "uses": "", + "tech_level": item["tech_level"], + "lc": "", "level": 0, - "value":item["value"], - "weight":item["weight"], - "quantity":item.get("quantity",1), - "ref":item.get("reference",""), + "value": item["value"], + "weight": item["weight"], + "quantity": item.get("quantity", 1), + "ref": item.get("reference", ""), "ext_weight": item["calc"]["extended_weight"], "ext_value": item["calc"]["extended_value"], - "notes": item.get("notes",""), + "notes": item.get("notes", ""), "equipped": item["equipped"] } ) @@ -388,4 +453,3 @@ class GURPSCharacter(models.Model): except KeyError: # v4 return self.details["settings"]["body_type"]["locations"] - diff --git a/gurps_character/templates/allauth/layouts/base.html b/gurps_character/templates/allauth/layouts/base.html new file mode 100644 index 0000000..472583e --- /dev/null +++ b/gurps_character/templates/allauth/layouts/base.html @@ -0,0 +1,89 @@ +{% load i18n %} +{% load bootstrap_icons %} + + + + + + + {% block head_title %} + {% endblock head_title %} + + {% block extra_head %} + {% endblock extra_head %} + + + +... + + + {% block body %} + {% include "navbar.html" %} + {% if messages %} +
+ {% trans "Messages:" %} +
    + {% for message in messages %}
  • {{ message }}
  • {% endfor %} +
+
+ {% endif %} +
+
+ Modified template + {% trans "Menu:" %} + + {% block content %} + {% endblock content %} +
+
+ {% endblock body %} + {% block extra_body %} + {% endblock extra_body %} + + diff --git a/theme/templates/base.html b/gurps_character/templates/base.html similarity index 100% rename from theme/templates/base.html rename to gurps_character/templates/base.html diff --git a/gurps_character/templates/home.html b/gurps_character/templates/home.html index f10f8d5..9668191 100644 --- a/gurps_character/templates/home.html +++ b/gurps_character/templates/home.html @@ -1,8 +1,37 @@ {% extends "base.html" %} +{% load bootstrap_icons %} {% block content %} -

Welcome to the character store

+

Welcome to the character store

- +

This is a webapp for storing characters.

+ + {% if user.is_authenticated %} +

Welcome {% if user.first_name %}{{ user.first_name }}{% else %}{{ user.username }}{% endif %}

+ + {% if user.campaign_set.all %} +

Campaigns you run

+ + {% endif %} + +

Characters you play

+ + {% else %} +

Please sign in to see your characters and campaigns

+ {% endif %} + Add a character? -

Currently it works with GURPS, specifically characters created by GCS

{% endblock %} diff --git a/gurps_character/templates/navbar.html b/gurps_character/templates/navbar.html index 3e018b3..fb7425e 100644 --- a/gurps_character/templates/navbar.html +++ b/gurps_character/templates/navbar.html @@ -1,17 +1,18 @@