mirror of
https://gitea.tendokyu.moe/Hay1tsme/artemis.git
synced 2026-02-15 20:27:29 +08:00
userbox, avatar, mapicon, and voice ui configuration
This commit is contained in:
@@ -69,9 +69,48 @@
|
||||
<td>Last Play Date:</td>
|
||||
<td>{{ profile.lastPlayDate }}</td>
|
||||
</tr>
|
||||
{% if cur_version >= 6 %} <!-- MAP ICON and SYSTEM VOICE introduced in AMAZON -->
|
||||
<tr>
|
||||
<td>Map Icon:</td>
|
||||
<td><div id="map-icon-name">{{ map_icons[profile.mapIconId]["name"] }}</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>System Voice:</td>
|
||||
<td><div id="system-voice-name">{{ system_voices[profile.voiceId]["name"] }}</div></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if cur_version >= 6 %} <!-- MAP ICON and SYSTEM VOICE introduced in AMAZON -->
|
||||
<!-- MAP ICON SELECTION -->
|
||||
<div class="col-lg-8 m-auto mt-3 scrolling-lists">
|
||||
<div class="card bg-card rounded">
|
||||
<button class="collapsible">Map Icon: {{ map_icons|length }}/{{ total_map_icons }}</button>
|
||||
<div id="scrollable-map-icon" class="collapsible-content">
|
||||
{% for item in map_icons.values() %}
|
||||
<img id="map-icon-{{ item["id"] }}" style="padding: 8px 8px;" onclick="saveItem('map-icon', '{{ item["id"] }}', '{{ item["name"] }}')" src="img/mapIcon/{{ item["iconPath"] }}" alt="{{ item["name"] }}">
|
||||
<span id="map-icon-br-{{ loop.index }}"></span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SYSTEM VOICE SELECTION -->
|
||||
<div class="col-lg-8 m-auto mt-3 scrolling-lists">
|
||||
<div class="card bg-card rounded">
|
||||
<button class="collapsible">System Voice: {{ system_voices|length }}/{{ total_system_voices }}</button>
|
||||
<div id="scrollable-system-voice" class="collapsible-content">
|
||||
{% for item in system_voices.values() %}
|
||||
<img id="system-voice-{{ item["id"] }}" style="padding: 8px 8px;" onclick="saveItem('system-voice', '{{ item["id"] }}', '{{ item["name"] }}')" src="img/systemVoice/{{ item["imagePath"] }}" alt="{{ item["name"] }}">
|
||||
<span id="system-voice-br-{{ loop.index }}"></span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-lg-8 m-auto mt-3">
|
||||
<div class="card bg-card rounded">
|
||||
<table class="table-large table-rowdistinct">
|
||||
@@ -147,4 +186,93 @@
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
{% if cur_version >= 6 %} <!-- MAP ICON and SYSTEM VOICE introduced in AMAZON -->
|
||||
<script>
|
||||
{% include 'titles/chuni/templates/scripts/collapsibles.js' %}
|
||||
|
||||
///
|
||||
/// This script handles all updates to the map icon and system voice
|
||||
///
|
||||
total_items = 0;
|
||||
curr_id = 1;
|
||||
items = {
|
||||
// [total_items, curr_id]
|
||||
"map-icon": ["{{ map_icons|length }}", "{{ profile.mapIconId }}"],
|
||||
"system-voice":["{{ system_voices|length }}", "{{ profile.voiceId }}"]
|
||||
};
|
||||
types = Object.keys(items);
|
||||
|
||||
function changeItem(type, id, name) {
|
||||
// clear select style for old selection
|
||||
var element = document.getElementById(type + "-" + items[type][curr_id]);
|
||||
if (element) {
|
||||
element.style.backgroundColor="inherit";
|
||||
}
|
||||
|
||||
// set new item
|
||||
items[type][curr_id] = id;
|
||||
document.getElementById(type + "-name").innerHTML = name;
|
||||
|
||||
// update select style for new accessory
|
||||
element = document.getElementById(type + "-" + id);
|
||||
if (element) {
|
||||
element.style.backgroundColor="#5F5";
|
||||
}
|
||||
}
|
||||
|
||||
function saveItem(type, id, name) {
|
||||
$.post("/game/chuni/update." + type, { id: id })
|
||||
.done(function (data) {
|
||||
changeItem(type, id, name);
|
||||
})
|
||||
.fail(function () {
|
||||
alert("Failed to set " + type + " to " + name);
|
||||
});
|
||||
}
|
||||
|
||||
function resizePage() {
|
||||
//
|
||||
// Handles item organization in the collapsible scrollables to try to keep the items-per-row presentable
|
||||
//
|
||||
// @note Yes, we could simply let the div overflow like usual. This could however get really nasty looking
|
||||
// when dealing with something like userbox characters where there are 1000s of possible items being
|
||||
// display. This approach gives us full control over where items in the div wrap, allowing us to try
|
||||
// to keep things presentable.
|
||||
//
|
||||
for (const type of types) {
|
||||
var numPerRow = Math.floor(document.getElementById("scrollable-" + type).offsetWidth / 132);
|
||||
|
||||
// Dont put fewer than 4 per row
|
||||
numPerRow = Math.max(numPerRow, 4);
|
||||
|
||||
// Dont populate more than 6 rows
|
||||
numPerRow = Math.max(numPerRow, Math.ceil(items[type][total_items] / 6));
|
||||
|
||||
// update the locations of the <br>
|
||||
for (var i = 1; document.getElementById(type + "-br-" + i) != null; i++) {
|
||||
var spanBr = document.getElementById(type + "-br-" + i);
|
||||
if ( i % numPerRow == 0 ) {
|
||||
spanBr.innerHTML = "<br>";
|
||||
} else {
|
||||
spanBr.innerHTML = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
// update the max height for any currently visible containers
|
||||
Collapsibles.updateAllHeights();
|
||||
}
|
||||
resizePage();
|
||||
window.addEventListener('resize', resizePage);
|
||||
|
||||
// Set initial style for current and scroll to selected
|
||||
for (const type of types) {
|
||||
changeItem(type, items[type][curr_id], document.getElementById(type + "-name").innerHTML);
|
||||
document.getElementById("scrollable-" + type).scrollLeft = document.getElementById(type + "-" + items[type][curr_id]).offsetLeft;
|
||||
}
|
||||
|
||||
Collapsibles.expandAll();
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% endblock content %}
|
||||
Reference in New Issue
Block a user