Albirew/nyaa-pantsu
Albirew
/
nyaa-pantsu
Archivé
1
0
Bifurcation 0

Comply with JS styling recommendations

Cette révision appartient à :
PantsuDev 2017-07-16 14:43:09 +10:00
Parent 7ba2887021
révision 913028f529
10 fichiers modifiés avec 660 ajouts et 659 suppressions

Voir le fichier

@ -58,7 +58,7 @@ var Kilo = function (params) {
this.setName(formName.value)
this.setCategory(formCategory.selectedIndex)
}
// Helpers function for events and render
// Helpers function for events and render
this.setRemake = function (b) {
if (b) {
document.getElementsByName('torrent-info tr')[0].classList.add('remake')
@ -82,7 +82,7 @@ var Kilo = function (params) {
tableCategory.title = document.getElementsByClassName('form-torrent-category')[0].querySelectorAll("option")[index].textContent
}
// Event handlers
// Event handlers
var updatePreviewRemake = function (e) {
var el = e.target
self.setRemake(el.checked)

Voir le fichier

@ -1,34 +1,34 @@
// @source https://github.com/NyaaPantsu/nyaa/tree/dev/public/js
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
function loadLanguages() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var selector = document.getElementById("bottom_language_selector");
selector.hidden = false
/* Response format is
* { "current": "(user current language)",
* "languages": {
* "(language_code)": "(language_name"),
* }} */
var response = JSON.parse(xhr.responseText);
for (var language in response.languages) {
if (!response.languages.hasOwnProperty(language)) continue;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 199) {
var selector = document.getElementById("bottom_language_selector");
selector.hidden = false
/* Response format is
* { "current": "(user current language)",
* "languages": {
* "(language_code)": "(language_name"),
* }} */
var response = JSON.parse(xhr.responseText);
for (var language in response.languages) {
if (!response.languages.hasOwnProperty(language)) continue;
var opt = document.createElement("option")
opt.value = language
opt.innerHTML = response.languages[language]
if (language == response.current) {
opt.selected = true
}
var opt = document.createElement("option")
opt.value = language
opt.innerHTML = response.languages[language]
if (language == response.current) {
opt.selected = true
}
selector.appendChild(opt)
}
}
}
xhr.open("GET", "/language", true)
xhr.setRequestHeader("Content-Type", "application/json")
xhr.send()
selector.appendChild(opt)
}
}
}
xhr.open("GET", "/language", true)
xhr.setRequestHeader("Content-Type", "application/json")
xhr.send()
}
loadLanguages();

Voir le fichier

@ -3,90 +3,91 @@
// Switches between themes when a new one is selected
function switchThemes(){
themeName = document.getElementById("theme-selector").value
var head = document.getElementsByTagName("head")[0];
// Remove the theme in place, it fails if one isn't set
try{
head.removeChild(document.getElementById("theme"));
} catch(err){}
// Don't add a node if we don't want extra styling
if(themeName === ""){
return;
}
// Create the new one and put it back
var newTheme = document.createElement("link");
newTheme.setAttribute("rel", "stylesheet");
newTheme.setAttribute("href", "/css/"+ themeName + ".css");
newTheme.setAttribute("id", "theme");
head.appendChild(newTheme);
themeName = document.getElementById("theme-selector").value
var head = document.getElementsByTagName("head")[0];
// Remove the theme in place, it fails if one isn't set
try{
head.removeChild(document.getElementById("theme"));
} catch(err){}
// Don't add a node if we don't want extra styling
if(themeName === ""){
return;
}
// Create the new one and put it back
var newTheme = document.createElement("link");
newTheme.setAttribute("rel", "stylesheet");
newTheme.setAttribute("href", "/css/"+ themeName + ".css");
newTheme.setAttribute("id", "theme");
head.appendChild(newTheme);
}
// Used by spoiler tags
function toggleLayer(elem) {
if (elem.classList.contains("hide"))
elem.classList.remove("hide");
else
elem.classList.add("hide");
if (elem.classList.contains("hide")) {
elem.classList.remove("hide");
} else {
elem.classList.add("hide");
}
}
function parseAllDates() {
// Date formatting
var lang = document.getElementsByTagName("html")[0].getAttribute("lang");
var ymdOpt = { year: "numeric", month: "short", day: "numeric" };
var hmOpt = { hour: "numeric", minute: "numeric" };
// Date formatting
var lang = document.getElementsByTagName("html")[0].getAttribute("lang");
var ymdOpt = { year: "numeric", month: "short", day: "numeric" };
var hmOpt = { hour: "numeric", minute: "numeric" };
var list = document.getElementsByClassName("date-short");
for(var i in list) {
var e = list[i];
e.title = e.innerText;
e.innerText = new Date(e.innerText).toLocaleString(lang, ymdOpt);
}
var list = document.getElementsByClassName("date-short");
for(var i in list) {
var e = list[i];
e.title = e.innerText;
e.innerText = new Date(e.innerText).toLocaleString(lang, ymdOpt);
}
var list = document.getElementsByClassName("date-full");
for(var i in list) {
var e = list[i];
e.title = e.innerText;
e.innerText = new Date(e.innerText).toLocaleString(lang);
}
var list = document.getElementsByClassName("date-full");
for(var i in list) {
var e = list[i];
e.title = e.innerText;
e.innerText = new Date(e.innerText).toLocaleString(lang);
}
}
parseAllDates();
/*Fixed-Navbar offset fix*/
document.addEventListener("DOMContentLoaded", function(event) {
var shiftWindow = function() { scrollBy(0, -70) };
if (location.hash) shiftWindow();
window.addEventListener("hashchange", shiftWindow);
document.getElementsByClassName("search-box")[0].addEventListener("focus", function (e) {
var w = document.getElementsByClassName("h-user")[0].offsetWidth;
document.getElementsByClassName("h-user")[0].style.display = "none";
document.getElementsByClassName("search-box")[0].style.width = document.getElementsByClassName("search-box")[0].offsetWidth + w + "px";
});
document.getElementsByClassName("search-box")[0].addEventListener("blur", function (e) {
document.getElementsByClassName("search-box")[0].style.width = "";
document.getElementsByClassName("h-user")[0].style.display = "inline-block";
});
var shiftWindow = function() { scrollBy(0, -70) };
if (location.hash) shiftWindow();
window.addEventListener("hashchange", shiftWindow);
document.getElementsByClassName("search-box")[0].addEventListener("focus", function (e) {
var w = document.getElementsByClassName("h-user")[0].offsetWidth;
document.getElementsByClassName("h-user")[0].style.display = "none";
document.getElementsByClassName("search-box")[0].style.width = document.getElementsByClassName("search-box")[0].offsetWidth + w + "px";
});
document.getElementsByClassName("search-box")[0].addEventListener("blur", function (e) {
document.getElementsByClassName("search-box")[0].style.width = "";
document.getElementsByClassName("h-user")[0].style.display = "inline-block";
});
});
function playVoice() {
var mascotAudio = document.getElementById("explosion") || document.getElementById("nyanpassu") || document.getElementById("kawaii");
if (mascotAudio !== undefined) {
mascotAudio.volume = 0.2;
mascotAudio.play();
} else {
console.log("Your mascot doesn't support yet audio files!")
}
var mascotAudio = document.getElementById("explosion") || document.getElementById("nyanpassu") || document.getElementById("kawaii");
if (mascotAudio !== undefined) {
mascotAudio.volume = 0.2;
mascotAudio.play();
} else {
console.log("Your mascot doesn't support yet audio files!")
}
}
document.getElementsByClassName("form-input refine")[0].addEventListener("click", function (e) {
document.getElementsByClassName("box refine")[0].style.display = document.getElementsByClassName("box refine")[0].style.display == "none" ? "block" : "none";
if(document.getElementsByClassName("form-input refine-searchbox")[0].value != document.getElementsByClassName("form-input search-box")[0].value)
document.getElementsByClassName("form-input refine-searchbox")[0].value = document.getElementsByClassName("form-input search-box")[0].value;
if(document.getElementsByClassName("form-input refine-category")[0].selectedIndex != document.getElementsByClassName("form-input form-category")[0].selectedIndex)
document.getElementsByClassName("form-input refine-category")[0].selectedIndex = document.getElementsByClassName("form-input form-category")[0].selectedIndex;
e.preventDefault();
if(document.getElementsByClassName("box refine")[0].style.display == "block")
scrollTo(0, 0);
document.getElementsByClassName("box refine")[0].style.display = document.getElementsByClassName("box refine")[0].style.display == "none" ? "block" : "none";
if(document.getElementsByClassName("form-input refine-searchbox")[0].value != document.getElementsByClassName("form-input search-box")[0].value)
document.getElementsByClassName("form-input refine-searchbox")[0].value = document.getElementsByClassName("form-input search-box")[0].value;
if(document.getElementsByClassName("form-input refine-category")[0].selectedIndex != document.getElementsByClassName("form-input form-category")[0].selectedIndex)
document.getElementsByClassName("form-input refine-category")[0].selectedIndex = document.getElementsByClassName("form-input form-category")[0].selectedIndex;
e.preventDefault();
if(document.getElementsByClassName("box refine")[0].style.display == "block")
scrollTo(0, 0);
});
// @license-end

Voir le fichier

@ -2,86 +2,86 @@
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
// Get the modal
var Modal = {
active: 0,
Init: function (params) {
var elements = params.elements
var button = (params.button != undefined) ? params.button : false
if (elements.innerHTML != undefined) {
active: 0,
Init: function (params) {
var elements = params.elements
var button = (params.button != undefined) ? params.button : false
if (elements.innerHTML != undefined) {
} else {
var nbEl = elements.length
for (var i=0; i < nbEl; i++) {
var modal = elements[i];
this.addModal(modal, button, i, params.before, params.after, params.close)
}
}
},
addModal: function(modal, btn, i, before_callback, after_callback, close_callback) {
var isBtnArray = false;
// Get the button that opens the modal
if (!btn) {
btn = document.getElementById("modal_btn_"+modal.id)
} else if (btn.match(/^#/)) {
btn = document.getElementById(btn.substr(1));
} else if (btn.match(/^\./)) {
btn = document.getElementsByClassName(btn.substr(1));
isBtnArray = true;
} else {
console.error("Couldn't find the button")
return
}
if ((isBtnArray) && (i > 0) && (btn.length > 0) && (btn.length > i)) {
btn[i].addEventListener("click", function(e) {
if (before_callback != undefined) before_callback()
modal.style.display = "block";
Modal.active = modal;
if (after_callback != undefined) after_callback()
e.preventDefault();
});
} else {
btn = (isBtnArray) ? btn[0] : btn;
// When the user clicks on the button, open the modal
btn.addEventListener("click", function(e) {
if (before_callback != undefined) before_callback()
modal.style.display = "block";
Modal.active = modal;
if (after_callback != undefined) after_callback()
e.preventDefault();
});
}
// Get the <span> element that closes the modal
var span = document.querySelectorAll("#"+modal.id+" .close")[0]
// When the user clicks on <span> (x), close the modal
span.addEventListener("click", function(e) {
modal.style.display = "none";
Modal.active = 0;
if (close_callback != undefined) close_callback()
e.preventDefault();
});
// When the user clicks anywhere outside of the modal, close it
window.addEventListener("click", function(event) {
if (event.target == modal) {
modal.style.display = "none";
Modal.active = 0;
if (close_callback != undefined) close_callback()
}
});
},
CloseActive: function() {
if (this.active != 0) {
this.active.style.display= "none";
this.active = 0;
}
},
GetActive: function() {
return this.active;
},
Open: function(q) {
var modal = document.querySelector(q);
if (modal != undefined) {
modal.style.display= "none";
this.active = modal;
}
} else {
var nbEl = elements.length
for (var i=0; i < nbEl; i++) {
var modal = elements[i];
this.addModal(modal, button, i, params.before, params.after, params.close)
}
}
},
addModal: function(modal, btn, i, before_callback, after_callback, close_callback) {
var isBtnArray = false;
// Get the button that opens the modal
if (!btn) {
btn = document.getElementById("modal_btn_"+modal.id)
} else if (btn.match(/^#/)) {
btn = document.getElementById(btn.substr(1));
} else if (btn.match(/^\./)) {
btn = document.getElementsByClassName(btn.substr(1));
isBtnArray = true;
} else {
console.error("Couldn't find the button")
return
}
if ((isBtnArray) && (i > 0) && (btn.length > 0) && (btn.length > i)) {
btn[i].addEventListener("click", function(e) {
if (before_callback != undefined) before_callback()
modal.style.display = "block";
Modal.active = modal;
if (after_callback != undefined) after_callback()
e.preventDefault();
});
} else {
btn = (isBtnArray) ? btn[0] : btn;
// When the user clicks on the button, open the modal
btn.addEventListener("click", function(e) {
if (before_callback != undefined) before_callback()
modal.style.display = "block";
Modal.active = modal;
if (after_callback != undefined) after_callback()
e.preventDefault();
});
}
// Get the <span> element that closes the modal
var span = document.querySelectorAll("#"+modal.id+" .close")[0]
// When the user clicks on <span> (x), close the modal
span.addEventListener("click", function(e) {
modal.style.display = "none";
Modal.active = 0;
if (close_callback != undefined) close_callback()
e.preventDefault();
});
// When the user clicks anywhere outside of the modal, close it
window.addEventListener("click", function(event) {
if (event.target == modal) {
modal.style.display = "none";
Modal.active = 0;
if (close_callback != undefined) close_callback()
}
});
},
CloseActive: function() {
if (this.active != 0) {
this.active.style.display= "none";
this.active = 0;
}
},
GetActive: function() {
return this.active;
},
Open: function(q) {
var modal = document.querySelector(q);
if (modal != undefined) {
modal.style.display= "none";
this.active = modal;
}
}
};
// @license-end

Voir le fichier

@ -1,45 +1,45 @@
// @source https://github.com/NyaaPantsu/nyaa/tree/dev/public/js
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
var Query = {
Failed:0,
MaxFail: 10,
Get: function(url, renderer, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function(e) {
if (this.status == 200) {
Query.Failed = 0;
renderer(this.response);
if (callback != undefined) callback(this.response);
} else {
console.log("Error when refresh")
Query.Failed++;
console.log("Attempt to refresh "+Query.Failed+"...");
if ((Query.MaxFail == -1) || (Query.Failed < Query.MaxFail)) Query.Get(url, renderer, callback);
else console.error("Too many attempts, stopping...")
}
};
xhr.send();
},
Post: function(url, postArgs, callback) {
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.responseType = 'json';
xhr.onload = function(e) {
if (this.status == 200) {
Query.Failed = 0;
if (callback != undefined) callback(this.response);
} else {
console.log("Error when refresh")
Query.Failed++;
console.log("Attempt to refresh "+Query.Failed+"...");
if ((Query.MaxFail == -1) || (Query.Failed < Query.MaxFail)) Query.Post(url, postArgs, callback);
else console.error("Too many attempts, stopping...")
}
};
xhr.send(postArgs);
}
Failed:0,
MaxFail: 10,
Get: function(url, renderer, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function(e) {
if (this.status == 200) {
Query.Failed = 0;
renderer(this.response);
if (callback != undefined) callback(this.response);
} else {
console.log("Error when refresh")
Query.Failed++;
console.log("Attempt to refresh "+Query.Failed+"...");
if ((Query.MaxFail == -1) || (Query.Failed < Query.MaxFail)) Query.Get(url, renderer, callback);
else console.error("Too many attempts, stopping...")
}
};
xhr.send();
},
Post: function(url, postArgs, callback) {
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.responseType = 'json';
xhr.onload = function(e) {
if (this.status == 200) {
Query.Failed = 0;
if (callback != undefined) callback(this.response);
} else {
console.log("Error when refresh")
Query.Failed++;
console.log("Attempt to refresh "+Query.Failed+"...");
if ((Query.MaxFail == -1) || (Query.Failed < Query.MaxFail)) Query.Post(url, postArgs, callback);
else console.error("Too many attempts, stopping...")
}
};
xhr.send(postArgs);
}
};
// @license-end

Voir le fichier

@ -1,8 +1,8 @@
// @source https://github.com/NyaaPantsu/nyaa/tree/dev/public/js
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
document.querySelector("[data-selectall='checkbox']").addEventListener("change", function(e) {
var cbs = document.querySelectorAll("input[type='checkbox'].selectable");
var l = cbs.length;
for (var i=0; i<l; i++) cbs[i].checked = e.target.checked;
var cbs = document.querySelectorAll("input[type='checkbox'].selectable");
var l = cbs.length;
for (var i=0; i<l; i++) cbs[i].checked = e.target.checked;
});
// @license-end

Voir le fichier

@ -2,38 +2,38 @@
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
// Templates variable
var Templates = {
tmpl: [],
Add: function(templateName, template) {
this.tmpl[templateName] = template
},
Render: function(templateName, model) {
return this.tmpl[templateName](model)
},
ApplyItemListRenderer: function(params) {
return function(models) {
for (var i=models.length-1; i >= 0; i--) {
var object = Templates.Render(params.templateName, models[i]);
if (params.method == "append") {
params.element.innerHTML = params.element.innerHTML + object
} else if (params.method == "prepend") {
params.element.innerHTML = object + params.element.innerHTML
}
}
};
},
EncodeEntities: function(value) {
return value.
replace(/&/g, '&amp;').
replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(value) {
var hi = value.charCodeAt(0);
var low = value.charCodeAt(1);
return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
}).
replace(/([^\#-~| |!])/g, function(value) {
return '&#' + value.charCodeAt(0) + ';';
}).
replace(/</g, '&lt;').
replace(/>/g, '&gt;');
}
tmpl: [],
Add: function(templateName, template) {
this.tmpl[templateName] = template
},
Render: function(templateName, model) {
return this.tmpl[templateName](model)
},
ApplyItemListRenderer: function(params) {
return function(models) {
for (var i=models.length-1; i >= 0; i--) {
var object = Templates.Render(params.templateName, models[i]);
if (params.method == "append") {
params.element.innerHTML = params.element.innerHTML + object
} else if (params.method == "prepend") {
params.element.innerHTML = object + params.element.innerHTML
}
}
};
},
EncodeEntities: function(value) {
return value.
replace(/&/g, '&amp;').
replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(value) {
var hi = value.charCodeAt(0);
var low = value.charCodeAt(1);
return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
}).
replace(/([^\#-~| |!])/g, function(value) {
return '&#' + value.charCodeAt(0) + ';';
}).
replace(/</g, '&lt;').
replace(/>/g, '&gt;');
}
};
// @license-end

Voir le fichier

@ -1,56 +1,56 @@
// @source https://github.com/NyaaPantsu/nyaa/tree/dev/public/js
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
var Torrents = {
CanRefresh: false,
timeout: undefined,
Seconds: 300, // Every five minutes, can be overridden directly in home.html (not here is better)
SearchURL: "/api/search",
Method: "prepend",
LastID: 0,
StopRefresh: function() {
clearTimeout(this.timeout)
this.timeout = undefined
this.CanRefresh = false
},
Refresh: function() {
if (this.CanRefresh) {
this.timeout = setTimeout(function() {
var searchArgs = (window.location.search != "") ? window.location.search.substr(1) : ""
searchArgs = (Torrents.LastID > 0) ? "?fromID="+Torrents.LastID+"&"+searchArgs : "?"+searchArgs
Query.Get(Torrents.SearchURL+searchArgs,
Templates.ApplyItemListRenderer({
templateName: "torrents.item", method: "prepend", element: document.getElementById("torrentListResults")
}), function(torrents) {
for (var i =0; i < torrents.length; i++) { if (Torrents.LastID < torrents[i].id) Torrents.LastID = torrents[i].id; }
parseAllDates();
Torrents.Refresh()
});
}, this.Seconds*1000);
}
CanRefresh: false,
timeout: undefined,
Seconds: 300, // Every five minutes, can be overridden directly in home.html (not here is better)
SearchURL: "/api/search",
Method: "prepend",
LastID: 0,
StopRefresh: function() {
clearTimeout(this.timeout)
this.timeout = undefined
this.CanRefresh = false
},
Refresh: function() {
if (this.CanRefresh) {
this.timeout = setTimeout(function() {
var searchArgs = (window.location.search != "") ? window.location.search.substr(1) : ""
searchArgs = (Torrents.LastID > 0) ? "?fromID="+Torrents.LastID+"&"+searchArgs : "?"+searchArgs
Query.Get(Torrents.SearchURL+searchArgs,
Templates.ApplyItemListRenderer({
templateName: "torrents.item", method: "prepend", element: document.getElementById("torrentListResults")
}), function(torrents) {
for (var i =0; i < torrents.length; i++) { if (Torrents.LastID < torrents[i].id) Torrents.LastID = torrents[i].id; }
parseAllDates();
Torrents.Refresh()
});
}, this.Seconds*1000);
}
},
StartRefresh: function() {
this.CanRefresh = true;
this.Refresh()
this.CanRefresh = true;
this.Refresh()
}
}
}
document.addEventListener("DOMContentLoaded", function() { // if Torrents.CanRefresh is enabled, refresh is automatically done (no need to start it anually)
document.addEventListener("DOMContentLoaded", function() { // if Torrents.CanRefresh is enabled, refresh is automatically done (no need to start it anually)
if (Torrents.CanRefresh) {
Torrents.StartRefresh()
Torrents.StartRefresh()
}
})
})
function humanFileSize(bytes, si) {
var k = si ? 1000 : 1024;
var i = ~~(Math.log(bytes) / Math.log(k));
return i == 0 ? bytes + " B" : (bytes / Math.pow(k, i)).toFixed(1) + " " + "KMGTPEZY"[i - 1] + (si ? "" : "i") + "B";
}
function humanFileSize(bytes, si) {
var k = si ? 1000 : 1024;
var i = ~~(Math.log(bytes) / Math.log(k));
return i == 0 ? bytes + " B" : (bytes / Math.pow(k, i)).toFixed(1) + " " + "KMGTPEZY"[i - 1] + (si ? "" : "i") + "B";
}
function flagCode(language) {
function flagCode(language) {
split = language.split("-");
if (split.length > 1) {
return split[0];
return split[0];
}
return language;
}
// @license-end
}
// @license-end

Voir le fichier

@ -1,368 +1,368 @@
// @source https://github.com/NyaaPantsu/nyaa/tree/dev/public/js
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
var TorrentsMod = {
// Variables that can be modified to change the dom interactions
show_hide_button: "show_actions",
btn_class_action: "cb_action",
btn_class_submit: "cb_submit",
progress_bar_id: "progress_modtool",
status_input_name: "status_id",
owner_input_name: "owner_id",
category_input_name: "category_id",
delete_btn: "delete",
lock_delete_btn: "lock_delete",
edit_btn: "edit",
refreshTimeout: 3000,
// Internal variables used for processing the request
selected: [],
queued: [],
unique_id:1,
error_count:0,
progress_count: 0,
progress_max: 0,
pause: false,
enabled: false,
// Variables that can be modified to change the dom interactions
show_hide_button: "show_actions",
btn_class_action: "cb_action",
btn_class_submit: "cb_submit",
progress_bar_id: "progress_modtool",
status_input_name: "status_id",
owner_input_name: "owner_id",
category_input_name: "category_id",
delete_btn: "delete",
lock_delete_btn: "lock_delete",
edit_btn: "edit",
refreshTimeout: 3000,
// Internal variables used for processing the request
selected: [],
queued: [],
unique_id:1,
error_count:0,
progress_count: 0,
progress_max: 0,
pause: false,
enabled: false,
// Init method
Create: function() {
var sh_btn = document.getElementById(TorrentsMod.show_hide_button);
var btn_actions = document.getElementsByClassName(this.btn_class_action)
var btn_submit = document.getElementsByClassName(this.btn_class_submit)
btn_submit[0].disabled = true;
for (var i=0; i < btn_actions.length; i++) {
btn_actions[i].disabled = true;
switch (btn_actions[i].id) {
case this.delete_btn:
btn_actions[i].addEventListener("click", this.Delete)
break;
case this.lock_delete_btn:
btn_actions[i].addEventListener("click", this.LockDelete)
break;
case this.edit_btn:
btn_actions[i].addEventListener("click", this.Edit)
break;
default:
break;
}
}
for (var i=0; i < this.checkboxes.length; i++) {
checkbox = this.checkboxes[i];
checkbox.addEventListener("change", this.checkboxEventHandler)
}
sh_btn.addEventListener("click", function(e) {
var divActions = this.nextElementSibling;
if (divActions.style.display == "inline") {
TorrentsMod.enabled = false;
} else {
TorrentsMod.enabled = true;
}
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 = (TorrentsMod.enabled) ? "table-cell" : "none";
}
var toggleText = this.dataset.toggleText;
this.dataset.toggleText = this.innerText;
this.innerText = toggleText;
});
},
// generate a unique id for a query
getId: function(){
return this.unique_id++;
},
// Init method
Create: function() {
var sh_btn = document.getElementById(TorrentsMod.show_hide_button);
var btn_actions = document.getElementsByClassName(this.btn_class_action)
var btn_submit = document.getElementsByClassName(this.btn_class_submit)
btn_submit[0].disabled = true;
for (var i=0; i < btn_actions.length; i++) {
btn_actions[i].disabled = true;
switch (btn_actions[i].id) {
case this.delete_btn:
btn_actions[i].addEventListener("click", this.Delete)
break;
case this.lock_delete_btn:
btn_actions[i].addEventListener("click", this.LockDelete)
break;
case this.edit_btn:
btn_actions[i].addEventListener("click", this.Edit)
break;
default:
break;
}
}
for (var i=0; i < this.checkboxes.length; i++) {
checkbox = this.checkboxes[i];
checkbox.addEventListener("change", this.checkboxEventHandler)
}
sh_btn.addEventListener("click", function(e) {
var divActions = this.nextElementSibling;
if (divActions.style.display == "inline") {
TorrentsMod.enabled = false;
} else {
TorrentsMod.enabled = true;
}
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 = (TorrentsMod.enabled) ? "table-cell" : "none";
}
var toggleText = this.dataset.toggleText;
this.dataset.toggleText = this.innerText;
this.innerText = toggleText;
});
},
// generate a unique id for a query
getId: function(){
return this.unique_id++;
},
// UI Methods
selectAll: function(bool) {
var l = TorrentsMod.checkboxes.length;
for (var i = 0; i < l; i++) {
TorrentsMod.checkboxes[i].checked = bool;
TorrentsMod.checkboxEventHandlerFunc(TorrentsMod.checkboxes[i]);
}
},
disableBtnActions: function() {
var btn_actions = document.getElementsByClassName(this.btn_class_action)
for (var i=0; i < btn_actions.length; i++) {
btn_actions[i].disabled = true;
}
},
enableBtnActions: function() {
var btn_actions = document.getElementsByClassName(this.btn_class_action)
for (var i=0; i < btn_actions.length; i++) {
btn_actions[i].disabled = false;
}
},
enableBtnSubmit: function() {
var btn_submit = document.getElementsByClassName(this.btn_class_submit)
btn_submit[0].disabled = false;
},
enableApplyChangesBtn: function() {
var btn_apply_changes = document.getElementById("confirm_changes");
btn_apply_changes.disabled=false;
},
disableBtnSubmit: function() {
var btn_submit = document.getElementsByClassName(this.btn_class_submit)
btn_submit[0].disabled = true;
},
disableApplyChangesBtn: function() {
var btn_apply_changes = document.getElementById("confirm_changes");
btn_apply_changes.disabled=true;
},
removeDivFromList: function(i) {
var queueAction = this.queued[i];
var parentDiv = document.getElementById(queueAction.unique_id).parentNode;
parentDiv.removeChild(document.getElementById(queueAction.unique_id));
},
removeFromParent: function(el) {
var parentDiv = el.parentNode;
parentDiv.removeChild(el);
},
generatingModal: function() {
listLength = this.queued.length;
var div = {"edit": "", "delete": ""};
for (var i=0; i < listLength; i++) {
var listHTML = "";
for(key in this.queued[i].selection) {
var selection = this.queued[i].selection[key];
selection.key = i;
listHTML += Templates.Render("torrents."+this.queued[i].action+".item", selection);
}
this.queued[i].list = listHTML;
this.queued[i].key = i;
div[this.queued[i].action] += Templates.Render("torrents."+this.queued[i].action+".block", this.queued[i]);
}
this.progress_count = 0;
this.progress_max = listLength;
document.querySelector(".modal .edit_changes").innerHTML = div["edit"];
document.querySelector(".modal .delete_changes").innerHTML = div["delete"];
},
toggleList: function(el) {
el.parentNode.nextSibling.style.display = (el.parentNode.nextSibling.style.display != "block") ? "block" : "none"
},
addToLog: function(type, msg) {
var logDiv = document.querySelector(".modal .logs_mess");
if (logDiv.style.display == "none") logDiv.style.display = "block"
logDiv.innerHTML += Templates.Render("torrents.logs."+type, msg);
},
updateProgressBar: function() {
document.querySelector("#"+this.progress_bar_id).style.display = "block";
var progress_green = document.querySelector("#"+this.progress_bar_id+" .progress-green");
var perc = this.progress_count/this.progress_max*100;
progress_green.style.width=perc+"%";
progress_green.innerText = this.progress_count+"/"+this.progress_max;
},
resetModal: function() {
var logDiv = document.querySelector(".modal .logs_mess");
logDiv.style.display = "none";
document.querySelector("#"+this.progress_bar_id).style.display = "none";
logDiv.innerHTML = "";
document.querySelector(".modal .edit_changes").innerHTML = "";
document.querySelector(".modal .delete_changes").innerHTML = "";
this.enableApplyChangesBtn();
},
statusToClassName: function(status) {
var className = ["", "normal", "remake", "trusted", "aplus", ""]
return className[status];
},
// UI Methods
selectAll: function(bool) {
var l = TorrentsMod.checkboxes.length;
for (var i = 0; i < l; i++) {
TorrentsMod.checkboxes[i].checked = bool;
TorrentsMod.checkboxEventHandlerFunc(TorrentsMod.checkboxes[i]);
}
},
disableBtnActions: function() {
var btn_actions = document.getElementsByClassName(this.btn_class_action)
for (var i=0; i < btn_actions.length; i++) {
btn_actions[i].disabled = true;
}
},
enableBtnActions: function() {
var btn_actions = document.getElementsByClassName(this.btn_class_action)
for (var i=0; i < btn_actions.length; i++) {
btn_actions[i].disabled = false;
}
},
enableBtnSubmit: function() {
var btn_submit = document.getElementsByClassName(this.btn_class_submit)
btn_submit[0].disabled = false;
},
enableApplyChangesBtn: function() {
var btn_apply_changes = document.getElementById("confirm_changes");
btn_apply_changes.disabled=false;
},
disableBtnSubmit: function() {
var btn_submit = document.getElementsByClassName(this.btn_class_submit)
btn_submit[0].disabled = true;
},
disableApplyChangesBtn: function() {
var btn_apply_changes = document.getElementById("confirm_changes");
btn_apply_changes.disabled=true;
},
removeDivFromList: function(i) {
var queueAction = this.queued[i];
var parentDiv = document.getElementById(queueAction.unique_id).parentNode;
parentDiv.removeChild(document.getElementById(queueAction.unique_id));
},
removeFromParent: function(el) {
var parentDiv = el.parentNode;
parentDiv.removeChild(el);
},
generatingModal: function() {
listLength = this.queued.length;
var div = {"edit": "", "delete": ""};
for (var i=0; i < listLength; i++) {
var listHTML = "";
for(key in this.queued[i].selection) {
var selection = this.queued[i].selection[key];
selection.key = i;
listHTML += Templates.Render("torrents."+this.queued[i].action+".item", selection);
}
this.queued[i].list = listHTML;
this.queued[i].key = i;
div[this.queued[i].action] += Templates.Render("torrents."+this.queued[i].action+".block", this.queued[i]);
}
this.progress_count = 0;
this.progress_max = listLength;
document.querySelector(".modal .edit_changes").innerHTML = div["edit"];
document.querySelector(".modal .delete_changes").innerHTML = div["delete"];
},
toggleList: function(el) {
el.parentNode.nextSibling.style.display = (el.parentNode.nextSibling.style.display != "block") ? "block" : "none"
},
addToLog: function(type, msg) {
var logDiv = document.querySelector(".modal .logs_mess");
if (logDiv.style.display == "none") logDiv.style.display = "block"
logDiv.innerHTML += Templates.Render("torrents.logs."+type, msg);
},
updateProgressBar: function() {
document.querySelector("#"+this.progress_bar_id).style.display = "block";
var progress_green = document.querySelector("#"+this.progress_bar_id+" .progress-green");
var perc = this.progress_count/this.progress_max*100;
progress_green.style.width=perc+"%";
progress_green.innerText = this.progress_count+"/"+this.progress_max;
},
resetModal: function() {
var logDiv = document.querySelector(".modal .logs_mess");
logDiv.style.display = "none";
document.querySelector("#"+this.progress_bar_id).style.display = "none";
logDiv.innerHTML = "";
document.querySelector(".modal .edit_changes").innerHTML = "";
document.querySelector(".modal .delete_changes").innerHTML = "";
this.enableApplyChangesBtn();
},
statusToClassName: function(status) {
var className = ["", "normal", "remake", "trusted", "aplus", ""]
return className[status];
},
// Selection Management Methods
addToSelection: function (torrent) {
this.selected[torrent.id] = torrent;
},
removeFromSelection: function(torrent) {
delete this.selected[torrent.id];
for (t in this.selected) {
return
}
this.selected = [];
},
// Selection Management Methods
addToSelection: function (torrent) {
this.selected[torrent.id] = torrent;
},
removeFromSelection: function(torrent) {
delete this.selected[torrent.id];
for (t in this.selected) {
return
}
this.selected = [];
},
// Query Queue Management Methods
AddToQueue: function(QueueAction) {
QueueAction.unique_id = this.getId(); // used for DOM interaction
this.queued.push(QueueAction);
this.enableBtnSubmit()
},
RemoveFromQueueAfterItems: function(i) {
for (t in this.queued[i].selection) {
this.RemoveItemFromQueue(i, t);
}
},
RemoveFromQueue: function(i) {
this.progress_max = (this.progress_max - 1 >= 0) ? this.progress_max-1 : 0;
this.RemoveFromQueueAction(i)
return false;
},
RemoveFromQueueAction: function(i) {
this.removeFromParent(document.getElementById("list_"+this.queued[i].unique_id));
this.queued.splice(i, 1);
if (this.queued.length == 0) {
this.disableBtnSubmit();
if (this.progress_max>0) {
this.disableApplyChangesBtn();
} else {
Modal.CloseActive();
}
}
},
formatSelectionToQuery: function(selection) {
var format = "";
for (s in selection) {
format += "&torrent_id="+selection[s].id
}
return (format != "") ? format.substr(1) : ""
},
RemoveItemFromQueue: function(i, id) {
this.removeFromParent(document.getElementById("list_item_"+id));
delete this.queued[i].selection[id];
document.getElementById("torrent_cb_"+id).checked=false;
document.getElementById("torrent_"+id).style.display="";
var test = 0;
for (t in this.queued[i].selection) {
test++
break;
}
if (test == 0) this.RemoveFromQueue(i);
return false;
},
newQueryAttempt: function(queryUrl, queryPost, callback) {
Query.Post(queryUrl, queryPost, function (response) {
if ((response.length == 0)||(!response.ok)) { // Query has failed
var errorMsg = response.errors.join("<br>");
TorrentsMod.addToLog("error", errorMsg);
TorrentsMod.error_count++;
if (TorrentsMod.error_count < 2) {
TorrentsMod.addToLog("success", T.r("try_new_attempt"));
TorrentsMod.newQueryAttempt(queryUrl, queryPost, callback)
} else {
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>") : T.r("query_executed_success");
TorrentsMod.addToLog("success", succesMsg)
if (callback != undefined) callback(response) // So we can query only one item
}
});
},
QueryQueue: function(i, callback) {
if (this.queued.length > 0) {
var QueueAction = this.queued[i]; // we clone it so we can delete it safely
this.RemoveFromQueueAction(i);
var queryPost = "";
var queryUrl = "/mod/api/torrents";
QueueAction.queryPost = TorrentsMod.formatSelectionToQuery(QueueAction.selection)
if (QueueAction.action == "delete") {
queryPost="action="+QueueAction.action;
queryPost+="&withreport="+QueueAction.withReport;
queryPost += "&status="+((QueueAction.status != undefined) ? QueueAction.status : "");
queryPost += "&"+QueueAction.queryPost; // we add torrent id
} else if (QueueAction.action == "edit") {
queryPost="action=multiple";
queryPost += "&status="+QueueAction.status;
queryPost += "&owner="+QueueAction.owner;
queryPost += "&category="+QueueAction.category;
queryPost += "&"+QueueAction.queryPost; // we add torrent id
}
TorrentsMod.newQueryAttempt(queryUrl, queryPost, callback)
// Query Queue Management Methods
AddToQueue: function(QueueAction) {
QueueAction.unique_id = this.getId(); // used for DOM interaction
this.queued.push(QueueAction);
this.enableBtnSubmit()
},
RemoveFromQueueAfterItems: function(i) {
for (t in this.queued[i].selection) {
this.RemoveItemFromQueue(i, t);
}
},
RemoveFromQueue: function(i) {
this.progress_max = (this.progress_max - 1 >= 0) ? this.progress_max-1 : 0;
this.RemoveFromQueueAction(i)
return false;
},
RemoveFromQueueAction: function(i) {
this.removeFromParent(document.getElementById("list_"+this.queued[i].unique_id));
this.queued.splice(i, 1);
if (this.queued.length == 0) {
this.disableBtnSubmit();
if (this.progress_max>0) {
this.disableApplyChangesBtn();
} else {
Modal.CloseActive();
}
}
},
formatSelectionToQuery: function(selection) {
var format = "";
for (s in selection) {
format += "&torrent_id="+selection[s].id
}
return (format != "") ? format.substr(1) : ""
},
RemoveItemFromQueue: function(i, id) {
this.removeFromParent(document.getElementById("list_item_"+id));
delete this.queued[i].selection[id];
document.getElementById("torrent_cb_"+id).checked=false;
document.getElementById("torrent_"+id).style.display="";
var test = 0;
for (t in this.queued[i].selection) {
test++
break;
}
if (test == 0) this.RemoveFromQueue(i);
return false;
},
newQueryAttempt: function(queryUrl, queryPost, callback) {
Query.Post(queryUrl, queryPost, function (response) {
if ((response.length == 0)||(!response.ok)) { // Query has failed
var errorMsg = response.errors.join("<br>");
TorrentsMod.addToLog("error", errorMsg);
TorrentsMod.error_count++;
if (TorrentsMod.error_count < 2) {
TorrentsMod.addToLog("success", T.r("try_new_attempt"));
TorrentsMod.newQueryAttempt(queryUrl, queryPost, callback)
} else {
TorrentsMod.addToLog("success", T.r("all_operations_done"))
if (TorrentsMod.refreshTimeout > 0) {
TorrentsMod.addToLog("success", T.r("refreshing_in", TorrentsMod.refreshTimeout/1000))
setTimeout(function(){
window.location.reload()
}, TorrentsMod.refreshTimeout);
}
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
}
}
},
QueryLoop: function() {
if (TorrentsMod.progress_count <= TorrentsMod.progress_max) {
TorrentsMod.updateProgressBar()
TorrentsMod.progress_count++;
if (TorrentsMod.progress_count > TorrentsMod.progress_max) TorrentsMod.progress_count = TorrentsMod.progress_max;
TorrentsMod.QueryQueue(0, TorrentsMod.QueryLoop);
}
},
} else {
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
}
});
},
QueryQueue: function(i, callback) {
if (this.queued.length > 0) {
var QueueAction = this.queued[i]; // we clone it so we can delete it safely
this.RemoveFromQueueAction(i);
var queryPost = "";
var queryUrl = "/mod/api/torrents";
QueueAction.queryPost = TorrentsMod.formatSelectionToQuery(QueueAction.selection)
if (QueueAction.action == "delete") {
queryPost="action="+QueueAction.action;
queryPost+="&withreport="+QueueAction.withReport;
queryPost += "&status="+((QueueAction.status != undefined) ? QueueAction.status : "");
queryPost += "&"+QueueAction.queryPost; // we add torrent id
} else if (QueueAction.action == "edit") {
queryPost="action=multiple";
queryPost += "&status="+QueueAction.status;
queryPost += "&owner="+QueueAction.owner;
queryPost += "&category="+QueueAction.category;
queryPost += "&"+QueueAction.queryPost; // we add torrent id
}
TorrentsMod.newQueryAttempt(queryUrl, queryPost, callback)
} else {
TorrentsMod.addToLog("success", T.r("all_operations_done"))
if (TorrentsMod.refreshTimeout > 0) {
TorrentsMod.addToLog("success", T.r("refreshing_in", TorrentsMod.refreshTimeout/1000))
setTimeout(function(){
window.location.reload()
}, TorrentsMod.refreshTimeout);
}
}
},
QueryLoop: function() {
if (TorrentsMod.progress_count <= TorrentsMod.progress_max) {
TorrentsMod.updateProgressBar()
TorrentsMod.progress_count++;
if (TorrentsMod.progress_count > TorrentsMod.progress_max) TorrentsMod.progress_count = TorrentsMod.progress_max;
TorrentsMod.QueryQueue(0, TorrentsMod.QueryLoop);
}
},
// Event Handlers
checkboxEventHandler: function(e) {
var el = e.target;
TorrentsMod.checkboxEventHandlerFunc(el);
},
checkboxEventHandlerFunc: function(el) {
var name = el.dataset.name;
var id = el.value;
if (el.checked) TorrentsMod.addToSelection({name:name, id:id});
else TorrentsMod.removeFromSelection({name:name, id:id});
if (TorrentsMod.selected.length > 0) TorrentsMod.enableBtnActions();
else TorrentsMod.disableBtnActions();
},
// Event Handlers
checkboxEventHandler: function(e) {
var el = e.target;
TorrentsMod.checkboxEventHandlerFunc(el);
},
checkboxEventHandlerFunc: function(el) {
var name = el.dataset.name;
var id = el.value;
if (el.checked) TorrentsMod.addToSelection({name:name, id:id});
else TorrentsMod.removeFromSelection({name:name, id:id});
if (TorrentsMod.selected.length > 0) TorrentsMod.enableBtnActions();
else TorrentsMod.disableBtnActions();
},
// Action Methods
DeleteHandler: function(locked) {
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: T.r("with_lock")+ ((withReport) ? T.r("and_reports") : ""),
status: "5" });
else TorrentsMod.AddToQueue({
action: "delete",
withReport: withReport,
selection: selection,
infos: (withReport) ? T.r("with_reports") : "",
queryPost: ""});
for (i in selection) document.getElementById("torrent_"+i).style.display="none";
TorrentsMod.selected = []
TorrentsMod.disableBtnActions();
// Action Methods
DeleteHandler: function(locked) {
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: T.r("with_lock")+ ((withReport) ? T.r("and_reports") : ""),
status: "5" });
else TorrentsMod.AddToQueue({
action: "delete",
withReport: withReport,
selection: selection,
infos: (withReport) ? T.r("with_reports") : "",
queryPost: ""});
for (i in selection) document.getElementById("torrent_"+i).style.display="none";
TorrentsMod.selected = []
TorrentsMod.disableBtnActions();
},
Delete: function(e) {
TorrentsMod.DeleteHandler(false);
e.preventDefault();
TorrentsMod.DeleteHandler(false);
e.preventDefault();
},
LockDelete: function(e) {
TorrentsMod.DeleteHandler(true);
e.preventDefault();
TorrentsMod.DeleteHandler(true);
e.preventDefault();
},
Edit: function(e) {
var selection = TorrentsMod.selected;
var status = document.querySelector(".modtools *[name='"+TorrentsMod.status_input_name+"']").value;
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 != "") ? 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 != "" ) ? T.r("with_st", infos) : T.r("no_changes"),
status: status,
category: category,
owner: owner_id });
var selection = TorrentsMod.selected;
var status = document.querySelector(".modtools *[name='"+TorrentsMod.status_input_name+"']").value;
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 != "") ? 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 != "" ) ? T.r("with_st", infos) : T.r("no_changes"),
status: status,
category: category,
owner: owner_id });
if (status != "") {
for (i in selection) document.getElementById("torrent_"+i).className="torrent-info "+TorrentsMod.statusToClassName(status);
for (i in selection) document.getElementById("torrent_"+i).className="torrent-info "+TorrentsMod.statusToClassName(status);
}
TorrentsMod.selected = []
TorrentsMod.disableBtnActions();
e.preventDefault();
},
ApplyChanges: function() {
},
ApplyChanges: function() {
this.pause = false;
this.QueryLoop();
}
};
}
};
// Load torrentMods when DOM is ready
document.addEventListener("DOMContentLoaded", function() {
TorrentsMod.checkboxes = document.querySelectorAll("input[name='torrent_id']");
TorrentsMod.Create();
});
// @license-end
// Load torrentMods when DOM is ready
document.addEventListener("DOMContentLoaded", function() {
TorrentsMod.checkboxes = document.querySelectorAll("input[name='torrent_id']");
TorrentsMod.Create();
});
// @license-end

Voir le fichier

@ -1,34 +1,34 @@
// @source https://github.com/NyaaPantsu/nyaa/tree/dev/public/js
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
function Translations() {
var translations = {};
this.Add = function(tr, val) {
trans = {}
if (val != undefined) {
trans[tr] = val;
} else {
trans = tr
}
Object.assign(translations, trans);
};
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 translations = {};
this.Add = function(tr, val) {
trans = {}
if (val != undefined) {
trans[tr] = val;
} else {
trans = tr
}
Object.assign(translations, trans);
};
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();