Albirew/nyaa-pantsu
Archivé
1
0
Bifurcation 0

Added translations support to mass edit api + improvements

* new translation strings
* new Translations object which can be used to translate string in js
* fix a the disappearance of checkboxes on new item loaded by ajax
Cette révision appartient à :
akuma06 2017-06-02 15:42:53 +02:00
Parent 68a9453c68
révision e9002ee638
4 fichiers modifiés avec 141 ajouts et 21 suppressions

Voir le fichier

@ -19,6 +19,7 @@ var TorrentsMod = {
progress_count: 0,
progress_max: 0,
pause: false,
enabled: false,
// Init method
Create: function() {
@ -47,17 +48,17 @@ var TorrentsMod = {
checkbox.addEventListener("change", this.checkboxEventHandler)
}
sh_btn.addEventListener("click", function(e) {
var display = "inline"
var divActions = this.nextElementSibling;
console.log(divActions)
if (divActions.style.display == "inline") {
display = "none";
TorrentsMod.enabled = false;
} else {
TorrentsMod.enabled = true;
}
divActions.style.display = display;
divActions.style.display = (TorrentsMod.enabled) ? "inline" : "none";
var td_cbs = document.getElementsByClassName("tr-cb")
for (var i=0; i < td_cbs.length; i++) {
td_cb = td_cbs[i];
td_cb.style.display = (display == "inline") ? "table-cell" : "none";
td_cb.style.display = (TorrentsMod.enabled) ? "table-cell" : "none";
}
var toggleText = this.dataset.toggleText;
this.dataset.toggleText = this.innerText;
@ -229,17 +230,17 @@ var TorrentsMod = {
TorrentsMod.addToLog("error", errorMsg);
TorrentsMod.error_count++;
if (TorrentsMod.error_count < 2) {
TorrentsMod.addToLog("success", "Trying a new attempt...");
TorrentsMod.addToLog("success", T.r("try_new_attempt"));
TorrentsMod.newQueryAttempt(queryUrl, queryPost, callback)
} else {
TorrentsMod.addToLog("error", "The query ("+queryUrl+"?"+queryPost+") seems broken!");
TorrentsMod.addToLog("error", T.r("query_is_broken", queryUrl, queryPost));
if (callback != undefined) {
TorrentsMod.addToLog("error", "Passing to the next query...");
callback(response) // So we can query only one item
}
}
} else {
var succesMsg = (response.infos != null) ? response.infos.join("<br>") : "Query executed with success!";
var succesMsg = (response.infos != null) ? response.infos.join("<br>") : T.r("query_executed_success");
TorrentsMod.addToLog("success", succesMsg)
if (callback != undefined) callback(response) // So we can query only one item
}
@ -266,9 +267,9 @@ var TorrentsMod = {
}
TorrentsMod.newQueryAttempt(queryUrl, queryPost, callback)
} else {
TorrentsMod.addToLog("success", "All operations are done!")
TorrentsMod.addToLog("success", T.r("all_operations_done"))
if (TorrentsMod.refreshTimeout > 0) {
TorrentsMod.addToLog("success", "Refreshing the page in 3 seconds...")
TorrentsMod.addToLog("success", T.r("refreshing_in", TorrentsMod.refreshTimeout/1000))
setTimeout(function(){
window.location.reload()
}, TorrentsMod.refreshTimeout);
@ -300,20 +301,20 @@ var TorrentsMod = {
// Action Methods
DeleteHandler: function(locked) {
var withReport = confirm("Do you want to delete the reports along the selected torrents?")
var withReport = confirm(T.r("delete_reports_with_torrents"))
var selection = TorrentsMod.selected;
if (locked)
TorrentsMod.AddToQueue({ action: "delete",
withReport: withReport,
selection: selection,
queryPost: "",
infos: "with lock"+ ((withReport) ? " and reports" : ""),
infos: T.r("with_lock")+ ((withReport) ? T.r("and_reports") : ""),
status: "5" });
else TorrentsMod.AddToQueue({
action: "delete",
withReport: withReport,
selection: selection,
infos: (withReport) ? "with reports" : "",
infos: (withReport) ? T.r("with_reports") : "",
queryPost: ""});
for (i in selection) document.getElementById("torrent_"+i).style.display="none";
TorrentsMod.selected = []
@ -333,14 +334,14 @@ var TorrentsMod = {
var owner_id = document.querySelector(".modtools *[name='"+TorrentsMod.owner_input_name+"']").value;
var category = document.querySelector(".modtools *[name='"+TorrentsMod.category_input_name+"']").value;
var infos = "";
infos += (status != "") ? "status: "+status : "";
infos += (owner_id != "") ? " owner_id: "+owner_id : "";
infos += (category != "") ? " category: "+category : "";
infos += (status != "") ? T.r("status_js", status) : "";
infos += (owner_id != "") ? T.r("owner_id_js", owner_id) : "";
infos += (category != "") ? T.r("category_js", category) : "";
TorrentsMod.AddToQueue({
action: "edit",
selection: selection,
queryPost: "", // We don't format now, we wait until the query is sent
infos: (infos != "" ) ? "with "+infos : "No changes",
infos: (infos != "" ) ? T.r("with_st", infos) : T.r("no_changes"),
status: status,
category: category,
owner: owner_id });

29
public/js/translation.js Fichier normal
Voir le fichier

@ -0,0 +1,29 @@
function Translations() {
var translations = {};
this.Add = function(tr, val) {
if (val != undefined) {
tr[tr] = val;
}
Object.assign(translations, tr);
};
this.r = function(string, ...args) {
if ((string != undefined) && (translations[string] != undefined)) {
if (args != undefined) {
return this.format(translations[string], ...args);
}
return translations[string];
}
console.error("No translation string for %s! Please check!", string);
return "";
};
this.format = function(format, ...args) {
return format.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
}
var T = new Translations();

Voir le fichier

@ -107,7 +107,7 @@ Your browser does not support the audio element.
<option value="{{ $id_cat }}">{{call $.T $name_cat }}</option>
{{ end }}
</select>
<input class="cb_action" type="text" name="owner_id" placeholder="Owner ID (eg. Renchon = 0)">
<input class="cb_action" type="text" name="owner_id" placeholder="{{ call $.T "owner_id_placeholder" }}">
<select class="cb_action" name="status_id">
<option value="">{{call $.T "torrent_status"}}</option>
<option value="5">{{ call $.T "torrent_status_blocked" }}</option>
@ -160,8 +160,28 @@ Your browser does not support the audio element.
<script type="text/javascript" src="{{ $.URL.Parse "/js/modal.js" }}"></script>
<script type="text/javascript" src="{{ $.URL.Parse "/js/torrents.js" }}"></script>
{{ if HasAdmin $.User }}
<script type="text/javascript" src="{{ $.URL.Parse "/js/translation.js" }}"></script>
<script type="text/javascript" src="{{ $.URL.Parse "/js/torrentsMod.js" }}"></script>
<script type="text/javascript">
// We add translations string
T.Add({
try_new_attempt: "{{ call $.T "try_new_attempt" }}",
query_is_broken: "{{ call $.T "query_is_broken" }}",
query_executed_success: "{{ call $.T "query_executed_success" }}",
all_operations_done: "{{ call $.T "all_operations_done" }}",
refreshing_in: "{{ call $.T "refreshing_in" }}",
delete_reports_with_torrents: "{{ call $.T "delete_reports_with_torrents" }}",
with_st: "{{ call $.T "with_st" }}",
and_reports: "{{ call $.T "and_reports" }}",
reports: "{{ call $.T "reports" }}",
lock: "{{ call $.T "lock" }}",
status_js: "{{ call $.T "status_js" }}",
owner_id_js: "{{ call $.T "owner_id_js" }}",
category_js: "{{ call $.T "category_js" }}",
no_changes: "{{ call $.T "no_changes" }}",
query_nb: "{{ call $.T "query_nb" }}"
});
// Modal initialization
Modal.Init({elements: document.getElementsByClassName("modal"),
button: "#modal_active",
before: function() {
@ -171,13 +191,14 @@ Your browser does not support the audio element.
TorrentsMod.resetModal();
}
});
// Templates initialization
Templates.Add("torrents.delete.item", function(torrent) {
return '<div class="delete_item" id="list_item_'+torrent.id+'"><span>'+Templates.EncodeEntities(torrent.name)+'</span>'+
'<a href="#" onclick="return TorrentsMod.RemoveItemFromQueue('+torrent.key+', '+torrent.id+')"><i class="trash-icon"></i></a></div>'
});
Templates.Add("torrents.delete.block", function(torrentQuery){
return '<div class="delete_list" id="list_'+torrentQuery.unique_id+'"><div class="title">'+
'<h3 style="display:inline-block;" onclick="TorrentsMod.toggleList(this);">Query #'+torrentQuery.unique_id+
'<h3 style="display:inline-block;" onclick="TorrentsMod.toggleList(this);">'+T.r("query_nb", torrentQuery.unique_id)+
'</h3>'+
'<span class="infos">'+torrentQuery.infos+'<a href="#" class="icon" onclick="return TorrentsMod.RemoveFromQueue('+torrentQuery.key+')"><div class="trash-icon"></div></a>'+
'</span></div>'+
@ -189,7 +210,7 @@ Your browser does not support the audio element.
});
Templates.Add("torrents.edit.block", function(torrentQuery){
return '<div class="edit_list" id="list_'+torrentQuery.unique_id+'"><div class="title">'+
'<h3 style="display:inline-block;" onclick="TorrentsMod.toggleList(this);">Query #'+torrentQuery.unique_id+
'<h3 style="display:inline-block;" onclick="TorrentsMod.toggleList(this);">'+T.r("query_nb", torrentQuery.unique_id)+
'</h3>'+
'<span class="infos">'+torrentQuery.infos+'<a href="#" class="icon" onclick="return TorrentsMod.RemoveFromQueue('+torrentQuery.key+')"><div class="trash-icon"></div></a>'+
'</span></div>'+
@ -203,10 +224,15 @@ Your browser does not support the audio element.
});
</script>
{{end}}
<!-- JS Template -->
<!-- JS Template for torrents ajax -->
<script type="text/javascript">
Templates.Add("torrents.item", function(torrent) {
return "<tr class=\"torrent-info"+ ((torrent.status == 2) ? " remake" : ((torrent.status == 3) ? " trusted" : ((torrent.status == 3) ? " aplus" : "" )))+"\">"+
{{ if HasAdmin $.User }}
"<td class=\"tr-cb\""+ ((TorrentsMod.enabled) ? "style=\"display:table-cell;\"" : "") +">"+
"<input data-name=\""+Templates.EncodeEntities(torrent.name)+"\" type=\"checkbox\" id=\"torrent_cb_"+torrent.id+"\" name=\"torrent_id\" value=\""+torrent.id+"\">"+
"</td>"+
{{ end }}
"<td class=\"tr-cat home-td\">"+
"<a href=\"{{$.URL.Parse "/search?c=" }}"+ torrent.category + "_" + torrent.sub_category +"\">"+
{{ if Sukebei }}

Voir le fichier

@ -1038,5 +1038,69 @@
{
"id": "delete_changes",
"translation": "Delete Changes"
},
{
"id": "owner_id_placeholder",
"translation": "Owner ID (eg. Renchon = 0)"
},
{
"id": "try_new_attempt",
"translation": "Trying a new attempt..."
},
{
"id": "query_is_broken",
"translation": "The query ({0}?{1}) seems broken!"
},
{
"id": "query_executed_success",
"translation": "Query executed with success!"
},
{
"id": "all_operations_done",
"translation": "All operations are done!"
},
{
"id": "refreshing_in",
"translation": "Refreshing the page in {0} seconds..."
},
{
"id": "delete_reports_with_torrents",
"translation": "Do you want to delete the reports along the selected torrents?"
},
{
"id": "with_st",
"translation": "with {0}"
},
{
"id": "and_reports",
"translation": " and reports"
},
{
"id": "reports",
"translation": "reports"
},
{
"id": "lock",
"translation": "lock"
},
{
"id": "status_js",
"translation": "status: {0}"
},
{
"id": "owner_id_js",
"translation": "owner_id: {0}"
},
{
"id": "category_js",
"translation": "category: {0}"
},
{
"id": "no_changes",
"translation": "No changes"
},
{
"id": "query_nb",
"translation": "Query #{0}"
}
]