diff --git a/build-js.sh b/build-js.sh index 9fc0385..97f9748 100755 --- a/build-js.sh +++ b/build-js.sh @@ -9,13 +9,16 @@ if [ -z "$GOPATH" ]; then fi if [ ! -f $GOPATH/bin/minify ]; then - go get github.com/tdewolff/minify/cmd/minify + echo "set up minifiy" + go get -v github.com/tdewolff/minify/cmd/minify fi echo -e "//For source code and license information please check https://github.com/majestrate/nntpchan \n" > ./contrib/static/nntpchan.js - +echo -n "minify " cat ./contrib/js/main.js_ | $GOPATH/bin/minify --mime=text/javascript >> ./contrib/static/nntpchan.js for f in ./contrib/js/*.js ; do + echo -n "." cat $f | $GOPATH/bin/minify --mime=text/javascript >> ./contrib/static/nntpchan.js done +echo "ok" diff --git a/contrib/js/expand-image.js b/contrib/js/expand-image.js new file mode 100644 index 0000000..32b1c8c --- /dev/null +++ b/contrib/js/expand-image.js @@ -0,0 +1,72 @@ +// +// expand images inline +// +// released into the public domain by Jeff on 2016-04-30 +// + +if (typeof _ == 'undefined') { + var _ = function(a) { return a; } +} + +// is the filename matching an image? +function filenameIsImage(fname) { + return /\.(gif|jpeg|jpg|png|webp)/.test(fname); +} + +// setup image inlining for 1 element +function setupInlineImage(thumb, url) { + if(thumb.inlineIsSetUp) return; + thumb.inlineIsSetUp = true; + var img = thumb.querySelector("img.thumbnail"); + var expanded = false; + var oldurl = img.href; + img.onclick = function(ev) { + if (expanded) { + img.setAttribute("class", "thumbnail"); + img.src = oldurl; + expanded = false; + } else { + img.setAttribute("class", "thumbnail expanded"); + img.src = url; + expanded = true; + } + } +} + +// set up image inlining for all applicable children in an element +function setupInlineImageIn(element) { + var thumbs = element.querySelectorAll("a.file"); + for ( var i = 0 ; i < thumbs.length ; i++ ) { + var url = thumbs[i].children[0].src; + if (filenameIsImage(url)) { + // match + setupInlineImage(thumbs[i], url); + } + } +} + + +onready(function(){ + + // Setup Javascript events for document + setupInlineImageIn(document); + + + // Setup Javascript events via updatoer + 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}); + } + +}) diff --git a/contrib/static/nntpchan.js b/contrib/static/nntpchan.js index 3b55d02..d5d7939 100644 --- a/contrib/static/nntpchan.js +++ b/contrib/static/nntpchan.js @@ -15,7 +15,11 @@ parent.appendChild(wrapper);parent.backlink=false;},function(msg){var wrapper=do parent.backlink=true;}};parent.backlink=true;} function inject_hover_for_element(elem){var elems=elem.getElementsByClassName("backlink");var ls=[];var l=elems.length;for(var idx=0;idxlivechan: "+str+"";};progress("initialize");socket.onopen=function(){progress("streaming (read only)");} socket.onmessage=function(ev){var j=null;try{j=JSON.parse(ev.data);}catch(e){} -if(j){console.log(j);livechan_got_post(parent,j);}} +if(j){livechan_got_post(parent,j);}} socket.onclose=function(ev){progress("connection closed");setTimeout(function(){inject_livechan_widget(prefix,parent);},1000);}}else{parent.innerHTML="
livechan mode requires websocket support
";setTimeout(function(){parent.innerHTML="";},5000);}} function ukko_livechan(prefix){var ukko=document.getElementById("ukko_threads");if(ukko){ukko.innerHTML="";inject_livechan_widget(prefix,ukko);}}function get_storage(){var st=null;if(window.localStorage){st=window.localStorage;}else if(localStorage){st=localStorage;} return st;}function enable_theme(prefix,name){if(prefix&&name){var theme=document.getElementById("current_theme");if(theme){theme.href=prefix+"static/"+name+".css";var st=get_storage();st.nntpchan_prefix=prefix;st.nntpchan_theme=name;}}} diff --git a/contrib/static/site.css b/contrib/static/site.css index 0153365..0766f45 100644 --- a/contrib/static/site.css +++ b/contrib/static/site.css @@ -366,7 +366,13 @@ input, textarea { float: left; } -.file-thumbnail { +.expanded { + display: block; + max-width: 100%; + max-height: 100%; +} + +.thumbnail { display: block; margin: 5px 20px 10px; border: medium none;