User:Bradv/Scripts/MetaPagePreview.js

/* m_zIndex=101; metapreview = { enabled:  true };
 * Meta Page Preview
 * Author: User:Bradv
 * Version: 0.9
 * TODO: Update this whole script to use jQuery
 * TODO: Update this whole script to use jQuery

metapreview.init = function { if (!metapreview.enabled) return; handler = function (evt) { if (evt.target.tagName=='A' && evt.altKey && evt.button===0) { var title = evt.target.innerHTML; var titlehref = evt.target.href; console.log(evt.target.href); if (titlehref.indexOf(mw.config.get('wgServer'))<0 || titlehref.indexOf('&action=')>=0           || titlehref.indexOf('/wiki/Special:')>=0 || titlehref.indexOf('/wiki/Wikipedia:')>=0            || titlehref.indexOf('?title=Special:')>=0 || titlehref.indexOf('?title=Wikipedia:')>=0) { console.log('aborting'); return; }          var url = evt.target.href.replace('/wiki/', '/w/index.php?title='); if (!title) title = 'Untitled';

showPreviewWindow(title, titlehref, url); evt.returnValue=false; }   };    window.addEventListener('click', handler, true); };

showPreviewWindow = function(title, titlehref, url) { console.log('showPreviewWindow('+title+','+titlehref+','+url);

$('body').css('overflow','hidden');

var cover = document.createElement('div'); cover.id='meta_cover'; cover.style.position='fixed'; cover.style.zIndex=++m_zIndex; cover.style.opacity='0.1'; cover.style.backgroundColor='black'; cover.style.width='100%'; cover.style.height='100%'; cover.style.left='0px'; cover.style.top='0px'; var wnd = document.createElement('div'); wnd.id='meta_previewWindow'; wnd.style.position='fixed'; wnd.style.padding='10px'; wnd.style.zIndex=++m_zIndex; wnd.style.backgroundColor='white'; wnd.style.border='5px solid #aaaaaa'; wnd.style.width='90%'; wnd.style.height='90%'; wnd.style.minWidth='20em'; wnd.style.minHeight='10em';

//This is where we place the preview window - TODO: Check for modern skin //var obj = document.getElementById('column-one'); //Monobook var obj = document.body; obj.appendChild(cover); obj.appendChild(wnd);

wnd.style.left=parseInt(window.innerWidth-wnd.clientWidth)/2 + 'px'; wnd.style.top=parseInt(window.innerHeight-wnd.clientHeight)/2 + 'px';

closePreview = function { cover.parentNode.removeChild(cover); wnd.parentNode.removeChild(wnd); $('body').css('overflow',''); return false; };

cover.onclick = closePreview;

var hdr = document.createElement('div'); hdr.style.position='relative'; hdr.style.width='100%'; hdr.style.height='2em'; hdr.style.borderBottom='1px solid #aaaaaa'; hdr.style.cursor='move'; wnd.appendChild(hdr);

var closeButton = document.createElement('a'); closeButton.href='#'; closeButton.style.position='absolute'; closeButton.style.top='10px'; closeButton.style.right='10px'; closeButton.onclick = closePreview; //closeButton.innerHTML = ''; var img = document.createElement('img'); img.src = 'https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Nuvola_apps_error.png/18px-Nuvola_apps_error.png'; closeButton.appendChild(img); wnd.appendChild(closeButton);

var content = document.createElement('div'); content.id='sprint_previewContent'; content.style.position='relative'; content.style.clear='both'; content.style.overflow='scroll'; content.style.height=parseInt(wnd.clientHeight - hdr.offsetHeight - parseInt(wnd.style.padding)*2)+'px'; //content.style.lineHeight='1.5em'; wnd.appendChild(content);

wnd.onmousedown=function(event) { if (wnd.style.zIndex < m_zIndex) { wnd.style.zIndex=++m_zIndex; }   };

hdr.onmousedown=function(event) { wnd.initialX = parseInt( event.clientX - wnd.offsetLeft ); wnd.initialY = parseInt( event.clientY - wnd.offsetTop ); window.onmouseup=function(event) { window.onmousemove=null; window.onmouseup=null; wnd.style.opacity=''; content.style.display=''; };       window.onmousemove=function(event) { if (!content.style.display) { wnd.style.opacity='.8'; content.style.display='none'; }           wnd.style.left=event.clientX-wnd.initialX+'px'; wnd.style.top=event.clientY-wnd.initialY+'px'; };   };

var resize = document.createElement('div'); resize.id='sprint_previewResize'; resize.style.position='absolute'; resize.style.bottom='0px'; resize.style.right='0px'; resize.style.height='20px'; resize.style.width='20px'; resize.style.cursor='se-resize'; wnd.appendChild(resize);

resize.onmousedown=function(event) { wnd.initialWidth = parseInt( event.clientX - wnd.offsetWidth ); wnd.initialHeight = parseInt( event.clientY - wnd.offsetHeight ); window.onmouseup=function(event) { window.onmousemove=null; window.onmouseup=null; wnd.style.opacity=''; content.style.height=parseInt(wnd.clientHeight - hdr.offsetHeight - parseInt(wnd.style.padding)*2)+'px'; content.style.display=''; };       window.onmousemove=function(event) { if (!content.style.display) { wnd.style.opacity='.8'; content.style.display='none'; }           wnd.style.width=event.clientX-wnd.initialWidth-parseInt(wnd.style.padding)*2+'px'; wnd.style.height=event.clientY-wnd.initialHeight-parseInt(wnd.style.padding)*2+'px'; };   };

//hdr.innerHTML=''+title+''; var aTitle = document.createElement('a'); aTitle.href = titlehref; aTitle.style.fontSize = '1.5em'; aTitle.appendChild(document.createTextNode(title)); hdr.appendChild(aTitle); //content.innerHTML='Loading...'; content.className = 'mw-body-content'; while (content.firstChild) { content.removeChild(content.firstChild) }; content.appendChild(document.createTextNode('Loading...'));

/*	aj.onreadystatechange = function { if(aj.readyState == 4 && aj.status == 200) { var htm; htm = aj.responseText; content.innerHTML = htm; content.id = 'bodyContent'; //TODO: Find a better way to make the page format correctly if (ajaxPatrolLinks) { ajaxPatrolLinks(closeButton.onclick); }       };                          };    aj.open("GET", url, true); aj.send(null);*/ //	$( '#mybox' ).load( 'url #bodyContent' ); $.get(		url, {			action: 'render'		},		function( data ) {			/* Call was successful do something with "data" */			content.innerHTML = data;			content.className = 'mw-body-content';		}	); };

$(metapreview.init);