Archived
1
0
This commit is contained in:
Jeff Becker 2017-09-30 16:55:22 -04:00
parent 54fde6ae2e
commit b3d65dc5b9
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

View File

@ -2,33 +2,33 @@
var _onreadyfuncs = []; var _onreadyfuncs = [];
var onready = function(f) { var onready = function(f) {
_onreadyfuncs.push(function() {f();}); _onreadyfuncs.push(function() {f();});
}; };
var ready = function() { var ready = function() {
for(var idx = 0; idx < _onreadyfuncs.length; idx++) _onreadyfuncs[idx](); for(var idx = 0; idx < _onreadyfuncs.length; idx++) _onreadyfuncs[idx]();
}; };
var quickreply = function(shorthash, longhash, url) { var quickreply = function(shorthash, longhash, url) {
if (!window.location.pathname.startsWith("/t/")) if (!window.location.pathname.startsWith("/t/"))
{ {
window.location.href = url; window.location.href = url;
return; return;
} }
var elem = document.getElementById("comment"); var elem = document.getElementById("comment");
if(!elem) return; if(!elem) return;
elem.value += ">>" + shorthash + "\n"; elem.value += ">>" + shorthash + "\n";
}; };
var get_storage = function() { var get_storage = function() {
var st = null; var st = null;
if (window.localStorage) { if (window.localStorage) {
st = window.localStorage; st = window.localStorage;
} else if (localStorage) { } else if (localStorage) {
st = localStorage; st = localStorage;
} }
return st; return st;
}; };
var setSrcQuery = function(e, q) { var setSrcQuery = function(e, q) {
@ -166,258 +166,258 @@ onready(function(){
// rewrite all images to add inline expand // rewrite all images to add inline expand
onready(function() { onready(function() {
// is the filename matching an image? // is the filename matching an image?
var filenameIsImage = function(fname) { var filenameIsImage = function(fname) {
return /\.(gif|jpeg|jpg|png|webp)/.test(fname.toLowerCase()); return /\.(gif|jpeg|jpg|png|webp)/.test(fname.toLowerCase());
}; };
// setup image inlining for 1 element // setup image inlining for 1 element
var setupInlineImage = function(thumb, url) { var setupInlineImage = function(thumb, url) {
if(thumb.inlineIsSetUp) return; if(thumb.inlineIsSetUp) return;
thumb.inlineIsSetUp = true; thumb.inlineIsSetUp = true;
var img = thumb.querySelector("img.image"); var img = thumb.querySelector("img.image");
var expanded = false; var expanded = false;
var oldurl = img.src; var oldurl = img.src;
thumb.onclick = function() { thumb.onclick = function() {
if (expanded) { if (expanded) {
img.setAttribute("class", "image"); img.setAttribute("class", "image");
img.src = oldurl; img.src = oldurl;
expanded = false; expanded = false;
} else { } else {
img.setAttribute("class", "expanded-thumbnail"); img.setAttribute("class", "expanded-thumbnail");
img.src = url; img.src = url;
expanded = true; expanded = true;
} }
return false; return false;
};
}; };
};
// set up image inlining for all applicable children in an element // set up image inlining for all applicable children in an element
var setupInlineImageIn = function(element) { var setupInlineImageIn = function(element) {
var thumbs = element.querySelectorAll("a.image_link"); var thumbs = element.querySelectorAll("a.image_link");
for ( var i = 0 ; i < thumbs.length ; i++ ) { for ( var i = 0 ; i < thumbs.length ; i++ ) {
var url = thumbs[i].href; var url = thumbs[i].href;
if (filenameIsImage(url)) { if (filenameIsImage(url)) {
// match // match
setupInlineImage(thumbs[i], url); setupInlineImage(thumbs[i], url);
} }
}
};
// Setup Javascript events for document
setupInlineImageIn(document);
// Setup Javascript events via updater
if (window.MutationObserver) {
var observer = new MutationObserver(function(mutations) {
for (var i = 0; i < mutations.length; i++) {
var additions = mutations[i].addedNodes;
if (additions == null) continue;
for (var j = 0; j < additions.length; j++) {
var node = additions[j];
if (node.nodeType == 1) {
setupInlineImageIn(node);
}
}
}
});
observer.observe(document.body, {childList: true, subtree: true});
} }
};
// Setup Javascript events for document
setupInlineImageIn(document);
// Setup Javascript events via updater
if (window.MutationObserver) {
var observer = new MutationObserver(function(mutations) {
for (var i = 0; i < mutations.length; i++) {
var additions = mutations[i].addedNodes;
if (additions == null) continue;
for (var j = 0; j < additions.length; j++) {
var node = additions[j];
if (node.nodeType == 1) {
setupInlineImageIn(node);
}
}
}
});
observer.observe(document.body, {childList: true, subtree: true});
}
}); });
// set up post hider // set up post hider
onready(function() { onready(function() {
var get_hidden_posts = function() { var get_hidden_posts = function() {
var st = get_storage(); var st = get_storage();
var prefix = "nntpchan_hide_post_"; var prefix = "nntpchan_hide_post_";
return { return {
all : function() { all : function() {
var msgids = []; var msgids = [];
for ( var k in st) { for ( var k in st) {
if (k.indexOf(prefix) == 0) { if (k.indexOf(prefix) == 0) {
var m = k.substring(prefix.length); var m = k.substring(prefix.length);
msgids.push(m); msgids.push(m);
} }
} }
return msgids; return msgids;
}, },
add : function (msg) { add : function (msg) {
st[prefix+msg] = "post"; st[prefix+msg] = "post";
}, },
del : function (msg) { del : function (msg) {
st.removeItem(prefix+msg); st.removeItem(prefix+msg);
} }
};
}; };
};
// is a post elem an OP? // is a post elem an OP?
var postIsOP = function(elem) { var postIsOP = function(elem) {
var ds = elem.dataset; var ds = elem.dataset;
return ds && ds.rootmsgid == ds.msgid ; return ds && ds.rootmsgid == ds.msgid ;
}; };
var hide_elem = function(elem, fade) { var hide_elem = function(elem, fade) {
if (elem.style) { if (elem.style) {
elem.style.display = "none"; elem.style.display = "none";
} else { } else {
elem.style = {display: "none" }; elem.style = {display: "none" };
}
elem.dataset.userhide = "yes";
};
var unhide_elem = function(elem) {
elem.style = "";
elem.dataset.userhide = "no";
};
// return true if element is hidden
var elemIsHidden = function(elem) {
return elem.dataset && elem.dataset.userhide == "yes";
};
// hide a post
var hidepost = function(elem, nofade) {
console.log("hidepost("+elem.dataset.msgid+")");
var posts = get_hidden_posts();
if (posts) {
// add to persitant hide
posts.add(elem.dataset.msgidhash);
}
if(postIsOP(elem)) {
// hide thread it's an OP
var thread = document.getElementById("thread_"+elem.dataset.rootmsgidhash);
if (thread) {
var e = thread.getElementsByClassName("post");
for ( var idx = 0; idx < e.length ; idx ++ ) {
if (e[idx].dataset.msgid == elem.dataset.msgid) continue; // don't apply
hidepost(e[idx]);
}
}
}
// hide attachments and post body
var es = elem.getElementsByClassName("image");
for (var idx = 0; idx < es.length ; idx ++ ) {
hide_elem(es[idx]);
}
es = elem.getElementsByClassName("message_span");
for (var idx = 0; idx < es.length ; idx ++ ) {
hide_elem(es[idx]);
}
es = elem.getElementsByClassName("topicline");
for (var idx = 0; idx < es.length ; idx ++ ) {
hide_elem(es[idx]);
}
elem.dataset.userhide = "yes";
elem.setHideLabel("[show]");
};
// unhide a post
var unhidepost = function(elem) {
console.log("unhidepost("+elem.dataset.msgid+")");
var posts = get_hidden_posts();
if (posts) {
// remove from persiting hide
posts.del(elem.dataset.msgidhash);
}
if(postIsOP(elem)) {
var thread = document.getElementById("thread_"+elem.dataset.rootmsgidhash);
if(thread) {
var e = thread.getElementsByClassName("post");
for ( var idx = 0; idx < e.length ; idx ++ ) {
if(e[idx].dataset.msgid == elem.dataset.msgid) continue;
unhidepost(e[idx]);
}
}
}
// unhide attachments and post body
var es = elem.getElementsByClassName("image");
for (var idx = 0; idx < es.length ; idx ++ ) {
unhide_elem(es[idx]);
}
es = elem.getElementsByClassName("message_span");
for (var idx = 0; idx < es.length ; idx ++ ) {
unhide_elem(es[idx]);
}
es = elem.getElementsByClassName("topicline");
for (var idx = 0; idx < es.length ; idx ++ ) {
unhide_elem(es[idx]);
}
elem.dataset.userhide = "no";
elem.setHideLabel("[hide]");
};
// hide a post given a callback that checks each post
var hideposts = function(check_func) {
var es = document.getElementsByClassName("post");
for ( var idx = 0; idx < es.length ; idx ++ ) {
var elem = es[idx];
if(check_func && elem && check_func(elem)) {
hidepost(elem);
}
}
};
// unhide all posts given callback
// if callback is null unhide all
var unhideall = function(check_func) {
var es = document.getElementsByClassName("post");
for (var idx=0 ; idx < es.length; idx ++ ) {
var elem = es[idx];
if(!check_func) { unhide(elem); }
else if(check_func(elem)) { unhide(elem); }
}
};
// inject posthide into page
var posts = document.getElementsByClassName("post");
for (var idx = 0 ; idx < posts.length; idx++ ) {
var inject = function (elem) {
var hider = document.createElement("a");
hider.setAttribute("class", "hider");
elem.setHideLabel = function (txt) {
var e_hider = hider;
e_hider.innerHTML = txt;
};
elem.hidepost = function() {
var e_self = elem;
var e_hider = hider;
hidepost(e_self);
};
elem.unhidepost = function() {
var e_self = elem;
var e_hider = hider;
unhidepost(e_self);
};
elem.isHiding = function() {
var e_self = elem;
return elemIsHidden(e_self);
};
hider.appendChild(document.createTextNode("[hide]"));
hider.onclick = function() {
var e_self = elem;
if(e_self.isHiding()) {
e_self.unhidepost();
} else {
e_self.hidepost();
}
};
elem.appendChild(hider);
};
inject(posts[idx]);
} }
// apply persiting hidden posts elem.dataset.userhide = "yes";
posts = get_hidden_posts(); };
if(posts) {
var all = posts.all(); var unhide_elem = function(elem) {
for ( var idx = 0 ; idx < all.length; idx ++ ) { elem.style = "";
var id = all[idx]; elem.dataset.userhide = "no";
var elem = document.getElementById(id); };
if(elem)
hidepost(elem, true); // return true if element is hidden
} var elemIsHidden = function(elem) {
return elem.dataset && elem.dataset.userhide == "yes";
};
// hide a post
var hidepost = function(elem, nofade) {
console.log("hidepost("+elem.dataset.msgid+")");
var posts = get_hidden_posts();
if (posts) {
// add to persitant hide
posts.add(elem.dataset.msgidhash);
} }
if(postIsOP(elem)) {
// hide thread it's an OP
var thread = document.getElementById("thread_"+elem.dataset.rootmsgidhash);
if (thread) {
var e = thread.getElementsByClassName("post");
for ( var idx = 0; idx < e.length ; idx ++ ) {
if (e[idx].dataset.msgid == elem.dataset.msgid) continue; // don't apply
hidepost(e[idx]);
}
}
}
// hide attachments and post body
var es = elem.getElementsByClassName("image");
for (var idx = 0; idx < es.length ; idx ++ ) {
hide_elem(es[idx]);
}
es = elem.getElementsByClassName("message_span");
for (var idx = 0; idx < es.length ; idx ++ ) {
hide_elem(es[idx]);
}
es = elem.getElementsByClassName("topicline");
for (var idx = 0; idx < es.length ; idx ++ ) {
hide_elem(es[idx]);
}
elem.dataset.userhide = "yes";
elem.setHideLabel("[show]");
};
// unhide a post
var unhidepost = function(elem) {
console.log("unhidepost("+elem.dataset.msgid+")");
var posts = get_hidden_posts();
if (posts) {
// remove from persiting hide
posts.del(elem.dataset.msgidhash);
}
if(postIsOP(elem)) {
var thread = document.getElementById("thread_"+elem.dataset.rootmsgidhash);
if(thread) {
var e = thread.getElementsByClassName("post");
for ( var idx = 0; idx < e.length ; idx ++ ) {
if(e[idx].dataset.msgid == elem.dataset.msgid) continue;
unhidepost(e[idx]);
}
}
}
// unhide attachments and post body
var es = elem.getElementsByClassName("image");
for (var idx = 0; idx < es.length ; idx ++ ) {
unhide_elem(es[idx]);
}
es = elem.getElementsByClassName("message_span");
for (var idx = 0; idx < es.length ; idx ++ ) {
unhide_elem(es[idx]);
}
es = elem.getElementsByClassName("topicline");
for (var idx = 0; idx < es.length ; idx ++ ) {
unhide_elem(es[idx]);
}
elem.dataset.userhide = "no";
elem.setHideLabel("[hide]");
};
// hide a post given a callback that checks each post
var hideposts = function(check_func) {
var es = document.getElementsByClassName("post");
for ( var idx = 0; idx < es.length ; idx ++ ) {
var elem = es[idx];
if(check_func && elem && check_func(elem)) {
hidepost(elem);
}
}
};
// unhide all posts given callback
// if callback is null unhide all
var unhideall = function(check_func) {
var es = document.getElementsByClassName("post");
for (var idx=0 ; idx < es.length; idx ++ ) {
var elem = es[idx];
if(!check_func) { unhide(elem); }
else if(check_func(elem)) { unhide(elem); }
}
};
// inject posthide into page
var inject = function (elem) {
var hider = document.createElement("a");
hider.setAttribute("class", "hider");
elem.setHideLabel = function (txt) {
var e_hider = hider;
e_hider.innerHTML = txt;
};
elem.hidepost = function() {
var e_self = elem;
var e_hider = hider;
hidepost(e_self);
};
elem.unhidepost = function() {
var e_self = elem;
var e_hider = hider;
unhidepost(e_self);
};
elem.isHiding = function() {
var e_self = elem;
return elemIsHidden(e_self);
};
hider.appendChild(document.createTextNode("[hide]"));
hider.onclick = function() {
var e_self = elem;
if(e_self.isHiding()) {
e_self.unhidepost();
} else {
e_self.hidepost();
}
};
elem.appendChild(hider);
};
var posts = document.getElementsByClassName("post");
for (var idx = 0 ; idx < posts.length; idx++ ) {
inject(posts[idx]);
}
// apply persiting hidden posts
posts = get_hidden_posts();
if(posts) {
var all = posts.all();
for ( var idx = 0 ; idx < all.length; idx ++ ) {
var id = all[idx];
var elem = document.getElementById(id);
if(elem)
hidepost(elem, true);
}
}
}); });