Comply with JS styling recommendations
Cette révision appartient à :
Parent
7ba2887021
révision
913028f529
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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, '&').
|
||||
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, '<').
|
||||
replace(/>/g, '>');
|
||||
}
|
||||
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, '&').
|
||||
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, '<').
|
||||
replace(/>/g, '>');
|
||||
}
|
||||
};
|
||||
// @license-end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
Référencer dans un nouveau ticket