shopping order sort. maybe needs some fine tuning
This commit is contained in:
@@ -1,3 +1,22 @@
|
|||||||
|
Array.prototype.stableSort = function(cmp) {
|
||||||
|
cmp = !!cmp ? cmp : (a, b) => {
|
||||||
|
if (a < b) return -1;
|
||||||
|
if (a > b) return 1;
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
let stabilizedThis = this.map((el, index) => [el, index]);
|
||||||
|
let stableCmp = (a, b) => {
|
||||||
|
let order = cmp(a[0], b[0]);
|
||||||
|
if (order != 0) return order;
|
||||||
|
return a[1] - b[1];
|
||||||
|
}
|
||||||
|
stabilizedThis.sort(stableCmp);
|
||||||
|
for (let i=0; i<this.length; i++) {
|
||||||
|
this[i] = stabilizedThis[i][0];
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
function insertAtEnd(myField, myValue) {
|
function insertAtEnd(myField, myValue) {
|
||||||
myField.value += myValue;
|
myField.value += myValue;
|
||||||
}
|
}
|
||||||
@@ -76,15 +95,32 @@ window.onclick = function(event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function sortMarkdown() {
|
function sortMarkdown(boughtOrder=false) {
|
||||||
var divs = document.getElementsByClassName("entry");
|
var divs = document.getElementsByClassName("entry");
|
||||||
divs = Array.prototype.slice.call(divs, 0);
|
divs = Array.prototype.slice.call(divs, 0);
|
||||||
divs.sort(function(a, b) {
|
if (boughtOrder) {
|
||||||
return a.children[1].innerHTML.localeCompare(b.children[1].innerHTML);
|
divs.stableSort(orderStringSorter);
|
||||||
});
|
} else {
|
||||||
|
divs.stableSort(fullStringSorter);
|
||||||
|
}
|
||||||
var parent = document.getElementById('entry_loop');
|
var parent = document.getElementById('entry_loop');
|
||||||
parent.innerHTML = "";
|
parent.innerHTML = "";
|
||||||
for(var i = 0, l = divs.length; i < l; i++) {
|
for(var i = 0, l = divs.length; i < l; i++) {
|
||||||
parent.appendChild(divs[i]);
|
parent.appendChild(divs[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function fullStringSorter(a,b) {
|
||||||
|
var aValue=a.children[1].innerHTML;
|
||||||
|
var bValue=b.children[1].innerHTML;
|
||||||
|
if (aValue < bValue) return -1;
|
||||||
|
if (aValue > bValue) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
function orderStringSorter(a,b) {
|
||||||
|
var aValue=a.children[1].innerHTML.substring(0,3);
|
||||||
|
var bValue=b.children[1].innerHTML.substring(0,3);
|
||||||
|
if ( aValue == "[x]" && bValue == "[ ]" ) return 1;
|
||||||
|
if ( aValue == "[ ]" && bValue == "[x]" ) return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,9 +52,9 @@
|
|||||||
<form action="{{ url_for('sort_flip') }}" method=post>
|
<form action="{{ url_for('sort_flip') }}" method=post>
|
||||||
<input type=hidden name=shopid value="{{ shopid }}">
|
<input type=hidden name=shopid value="{{ shopid }}">
|
||||||
{% if autosort %}
|
{% if autosort %}
|
||||||
<input class=submit type=submit name=toggleAll value="Autosort: On">
|
<input class=submit type=submit name=toggleAll value="Auto order: On">
|
||||||
{% else %}
|
{% else %}
|
||||||
<input class=submit type=submit name=toggleAll value="Autosort: Off">
|
<input class=submit type=submit name=toggleAll value="Auto order: Off">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
</span>
|
</span>
|
||||||
@@ -99,6 +99,6 @@
|
|||||||
<dl><input type=hidden name=shopid value={{ shopid }}><input class="submit notify" type=submit value=Delete onclick="return confirm('Do you really want to remove shop {{ shop }}?');">
|
<dl><input type=hidden name=shopid value={{ shopid }}><input class="submit notify" type=submit value=Delete onclick="return confirm('Do you really want to remove shop {{ shop }}?');">
|
||||||
</dl></form>
|
</dl></form>
|
||||||
{% if autosort %}
|
{% if autosort %}
|
||||||
<script language=javascript>sortMarkdown();</script>
|
<script language=javascript>sortMarkdown(boughtOrder=true);</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user