Merge pull request #101 from ThomasRubini/traits

This commit is contained in:
Thomas Rubini 2023-03-18 18:45:53 +01:00 committed by GitHub
commit a945eb9f6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 94 additions and 3 deletions

View File

@ -159,7 +159,10 @@ class Trait(Base):
self.DESC_LID = DESC_LID self.DESC_LID = DESC_LID
def __str__(self) -> str: def __str__(self) -> str:
return f"{self.TRAIT_ID} {self.NAME_LID}" return f"Trait(TRAIT_ID={self.TRAIT_ID}, NAME_LID={self.NAME_LID}, DESC_LID={self.DESC_LID})"
def __repr__(self) -> str:
return self.__str__()
class Reaction(Base): class Reaction(Base):

View File

@ -40,3 +40,9 @@ def places():
places_objs = db.session.query(Place).all() places_objs = db.session.query(Place).all()
places_dicts = [{"id": place_obj.PLACE_ID, "name": place_obj.LOCALE.TEXTS[0].TEXT} for place_obj in places_objs] places_dicts = [{"id": place_obj.PLACE_ID, "name": place_obj.LOCALE.TEXTS[0].TEXT} for place_obj in places_objs]
return flask.render_template("admin/places.html", places=places_dicts) return flask.render_template("admin/places.html", places=places_dicts)
@routes_admin.route("/traits")
def traits():
traits_objs = db.session.query(Trait).all()
traits_dicts = [{"id": trait_obj.TRAIT_ID, "name": trait_obj.Name.TEXTS[0].TEXT, "desc": trait_obj.Desc.TEXTS[0].TEXT} for trait_obj in traits_objs]
return flask.render_template("admin/traits.html", traits=traits_dicts)

View File

@ -71,3 +71,45 @@ def set_questions():
db.session.commit() db.session.commit()
return {"error": 0} return {"error": 0}
@routes_api_admin.route("/setTraits", methods=["GET", "POST"])
def set_traits():
input_lang = flask.request.json["lang"]
input_traits = flask.request.json["traits"]
db_traits = db.session.query(Trait).all()
modified_db_traits = []
for input_trait in input_traits:
if input_trait["id"]:
# modify
db_trait = list(filter(lambda db_trait: db_trait.TRAIT_ID == int(input_trait["id"]), db_traits))[0]
db.session.delete(db_trait.Name.TEXTS[0])
db.session.delete(db_trait.Desc.TEXTS[0])
db_trait.Name.TEXTS = [Text(None, None, input_lang, input_trait["name"])]
db_trait.Desc.TEXTS = [Text(None, None, input_lang, input_trait["desc"])]
db.session.add(db_trait)
modified_db_traits.append(db_trait)
else:
# add
new_trait = Trait(None, None, None)
new_trait.Name = Locale(None)
new_trait.Desc = Locale(None)
new_trait.Name.TEXTS.append(Text(None, None, input_lang, input_trait["name"]))
new_trait.Desc.TEXTS.append(Text(None, None, input_lang, input_trait["desc"]))
db.session.add(new_trait)
# delete
for db_trait in db_traits:
if db_trait not in modified_db_traits:
db.session.remove()
db.session.commit()
return {"error": 0}

View File

@ -2,7 +2,7 @@
<br> <br>
<a href="/admin/places"> Places </a> <a href="/admin/places"> Places </a>
<br> <br>
<a href="/admin/reactions"> Reactions </a> <a href="/admin/traits"> Traits </a>
<section> <section>
<p> NPC list :</p> <p> NPC list :</p>
{%for npc in npcs%} {%for npc in npcs%}

View File

@ -1 +0,0 @@
<a href="/admin"> go Back </a> <br>

View File

@ -0,0 +1,41 @@
<a href="/admin"> go Back </a> <br>
<section id="traits">
{%for trait in traits%}
<section id="{{trait['id']}}">
<p> Name: </p>
<input class="name_input" value="{{trait['name']}}">
<p> Description: </p>
<input class="desc_input" value="{{trait['desc']}}">
</section>
{%endfor%}
</section>
<button onclick="addNewInput()">Add new</button>
<button onclick="saveForm()">Save changes</button>
<p>Images are viewable in the npc views</p>
<script src="/static/js/api.js"></script>
<script>
function addNewInput(){
let newTrait = traits.lastElementChild.cloneNode(true);
newTrait.id = "";
newTrait.querySelector(".name_input").value = "";
newTrait.querySelector(".desc_input").value = "";
traits.appendChild(newTrait);
}
function saveForm(){
let data = [];
for(let section of traits.querySelectorAll("section")){
let trait = {};
trait["id"] = section.id
trait["name"] = section.querySelector(".name_input").value
trait["desc"] = section.querySelector(".desc_input").value
data.push(trait);
}
makeAPIRequest("admin/setTraits", {"traits": data, "lang": "FR"}, {"content": "json"})
}
</script>