To get rid of this ad please Sign up/Login.
Difference between revisions of "MediaWiki:Common.js"
m |
m |
||
| (8 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
/* Analytics */ | |||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | |||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | |||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | |||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); | |||
ga('create', 'UA-63377680-1', 'auto'); | |||
ga('send', 'pageview'); | |||
/** ImageMapEdit ********************************************************* | /** ImageMapEdit ********************************************************* | ||
* http://meta.wikimedia.org/wiki/User_talk:Dapete/ImageMapEdit | * http://meta.wikimedia.org/wiki/User_talk:Dapete/ImageMapEdit | ||
* | |||
* Currently disabled, toolserver seems to have issues, for re-enabling uncomment the importScriptURI line. -Tass | |||
* | |||
* importScriptURI('http://toolserver.org/~dapete/ime/ime.js'); | |||
*/ | */ | ||
/** | /** | ||
| Line 36: | Line 45: | ||
.animate( { width: 4 }, 1200); | .animate( { width: 4 }, 1200); | ||
}); | }); | ||
/** Popup links | |||
* Use <span class="pops">[http://www.entropiaplanets.com EntropiaPlanets]</span> | |||
* or <span class="pops">[[EntropiaPlanets Wiki|Home]]</span> | |||
**/ | |||
addOnloadHook( function() { | |||
var pops = function( elems ) { | |||
for (var i=0; i<elems.length; i++) { | |||
if ( !(' '+elems[i].className+' ').match( / pops / ) ) continue; | |||
var anchs = elems[i].getElementsByTagName('a'); | |||
for (var j=0; j<anchs.length; j++) anchs[j].target = '_blank'; | |||
} | |||
}; | |||
var bc = document.getElementById('bodyContent'); | |||
var tags = ['span', 'div', 'table', 'td', 'th']; | |||
for (var i=0; i<tags.length; i++) pops( bc.getElementsByTagName( tags[i] ) ); | |||
} ); | |||
/** dragable stuff**/ | |||
function Position(x, y) | |||
{ | |||
this.X = x; | |||
this.Y = y; | |||
this.Add = function(val) | |||
{ | |||
var newPos = new Position(this.X, this.Y); | |||
if(val != null) | |||
{ | |||
if(!isNaN(val.X)) | |||
newPos.X += val.X; | |||
if(!isNaN(val.Y)) | |||
newPos.Y += val.Y | |||
} | |||
return newPos; | |||
} | |||
this.Subtract = function(val) | |||
{ | |||
var newPos = new Position(this.X, this.Y); | |||
if(val != null) | |||
{ | |||
if(!isNaN(val.X)) | |||
newPos.X -= val.X; | |||
if(!isNaN(val.Y)) | |||
newPos.Y -= val.Y | |||
} | |||
return newPos; | |||
} | |||
this.Min = function(val) | |||
{ | |||
var newPos = new Position(this.X, this.Y) | |||
if(val == null) | |||
return newPos; | |||
if(!isNaN(val.X) && this.X > val.X) | |||
newPos.X = val.X; | |||
if(!isNaN(val.Y) && this.Y > val.Y) | |||
newPos.Y = val.Y; | |||
return newPos; | |||
} | |||
this.Max = function(val) | |||
{ | |||
var newPos = new Position(this.X, this.Y) | |||
if(val == null) | |||
return newPos; | |||
if(!isNaN(val.X) && this.X < val.X) | |||
newPos.X = val.X; | |||
if(!isNaN(val.Y) && this.Y < val.Y) | |||
newPos.Y = val.Y; | |||
return newPos; | |||
} | |||
this.Bound = function(lower, upper) | |||
{ | |||
var newPos = this.Max(lower); | |||
return newPos.Min(upper); | |||
} | |||
this.Check = function() | |||
{ | |||
var newPos = new Position(this.X, this.Y); | |||
if(isNaN(newPos.X)) | |||
newPos.X = 0; | |||
if(isNaN(newPos.Y)) | |||
newPos.Y = 0; | |||
return newPos; | |||
} | |||
this.Apply = function(element) | |||
{ | |||
if(typeof(element) == "string") | |||
element = document.getElementById(element); | |||
if(element == null) | |||
return; | |||
if(!isNaN(this.X)) | |||
element.style.left = this.X + 'px'; | |||
if(!isNaN(this.Y)) | |||
element.style.top = this.Y + 'px'; | |||
} | |||
} | |||
function hookEvent(element, eventName, callback) | |||
{ | |||
if(typeof(element) == "string") | |||
element = document.getElementById(element); | |||
if(element == null) | |||
return; | |||
if(element.addEventListener) | |||
{ | |||
element.addEventListener(eventName, callback, false); | |||
} | |||
else if(element.attachEvent) | |||
element.attachEvent("on" + eventName, callback); | |||
} | |||
function unhookEvent(element, eventName, callback) | |||
{ | |||
if(typeof(element) == "string") | |||
element = document.getElementById(element); | |||
if(element == null) | |||
return; | |||
if(element.removeEventListener) | |||
element.removeEventListener(eventName, callback, false); | |||
else if(element.detachEvent) | |||
element.detachEvent("on" + eventName, callback); | |||
} | |||
function cancelEvent(e) | |||
{ | |||
e = e ? e : window.event; | |||
if(e.stopPropagation) | |||
e.stopPropagation(); | |||
if(e.preventDefault) | |||
e.preventDefault(); | |||
e.cancelBubble = true; | |||
e.cancel = true; | |||
e.returnValue = false; | |||
return false; | |||
} | |||
function getMousePos(eventObj) | |||
{ | |||
eventObj = eventObj ? eventObj : window.event; | |||
var pos; | |||
if(isNaN(eventObj.layerX)) | |||
pos = new Position(eventObj.offsetX, eventObj.offsetY); | |||
else | |||
pos = new Position(eventObj.layerX, eventObj.layerY); | |||
return correctOffset(pos, pointerOffset, true); | |||
} | |||
function getEventTarget(e) | |||
{ | |||
e = e ? e : window.event; | |||
return e.target ? e.target : e.srcElement; | |||
} | |||
function absoluteCursorPostion(eventObj) | |||
{ | |||
eventObj = eventObj ? eventObj : window.event; | |||
if(isNaN(window.scrollX)) | |||
return new Position(eventObj.clientX + document.documentElement.scrollLeft + document.body.scrollLeft, | |||
eventObj.clientY + document.documentElement.scrollTop + document.body.scrollTop); | |||
else | |||
return new Position(eventObj.clientX + window.scrollX, eventObj.clientY + window.scrollY); | |||
} | |||
function dragObject(element, attachElement, lowerBound, upperBound, startCallback, moveCallback, endCallback, attachLater) | |||
{ | |||
if(typeof(element) == "string") | |||
element = document.getElementById(element); | |||
if(element == null) | |||
return; | |||
var cursorStartPos = null; | |||
var elementStartPos = null; | |||
var dragging = false; | |||
var listening = false; | |||
var disposed = false; | |||
function dragStart(eventObj) | |||
{ | |||
if(dragging || !listening || disposed) return; | |||
dragging = true; | |||
if(startCallback != null) | |||
startCallback(eventObj, element); | |||
cursorStartPos = absoluteCursorPostion(eventObj); | |||
elementStartPos = new Position(parseInt(element.style.left), parseInt(element.style.top)); | |||
elementStartPos = elementStartPos.Check(); | |||
hookEvent(document, "mousemove", dragGo); | |||
hookEvent(document, "mouseup", dragStopHook); | |||
return cancelEvent(eventObj); | |||
} | |||
function dragGo(eventObj) | |||
{ | |||
if(!dragging || disposed) return; | |||
var newPos = absoluteCursorPostion(eventObj); | |||
newPos = newPos.Add(elementStartPos).Subtract(cursorStartPos); | |||
newPos = newPos.Bound(lowerBound, upperBound) | |||
newPos.Apply(element); | |||
if(moveCallback != null) | |||
moveCallback(newPos, element); | |||
return cancelEvent(eventObj); | |||
} | |||
function dragStopHook(eventObj) | |||
{ | |||
dragStop(); | |||
return cancelEvent(eventObj); | |||
} | |||
function dragStop() | |||
{ | |||
if(!dragging || disposed) return; | |||
unhookEvent(document, "mousemove", dragGo); | |||
unhookEvent(document, "mouseup", dragStopHook); | |||
cursorStartPos = null; | |||
elementStartPos = null; | |||
if(endCallback != null) | |||
endCallback(element); | |||
dragging = false; | |||
} | |||
this.Dispose = function() | |||
{ | |||
if(disposed) return; | |||
this.StopListening(true); | |||
element = null; | |||
attachElement = null | |||
lowerBound = null; | |||
upperBound = null; | |||
startCallback = null; | |||
moveCallback = null | |||
endCallback = null; | |||
disposed = true; | |||
} | |||
this.GetLowerBound = function() | |||
{ return lowerBound; } | |||
this.GetUpperBound = function() | |||
{ return upperBound; } | |||
this.StartListening = function() | |||
{ | |||
if(listening || disposed) return; | |||
listening = true; | |||
hookEvent(attachElement, "mousedown", dragStart); | |||
} | |||
this.StopListening = function(stopCurrentDragging) | |||
{ | |||
if(!listening || disposed) return; | |||
unhookEvent(attachElement, "mousedown", dragStart); | |||
listening = false; | |||
if(stopCurrentDragging && dragging) | |||
dragStop(); | |||
} | |||
this.IsDragging = function(){ return dragging; } | |||
this.IsListening = function() { return listening; } | |||
this.IsDisposed = function() { return disposed; } | |||
if(typeof(attachElement) == "string") | |||
attachElement = document.getElementById(attachElement); | |||
if(attachElement == null) | |||
attachElement = element; | |||
if(!attachLater) | |||
this.StartListening(); | |||
} | |||
var el = document.getElementById('draggableElement'); | |||
var leftEdge = el.parentNode.clientWidth - el.clientWidth; | |||
var topEdge = el.parentNode.clientHeight - el.clientHeight; | |||
var dragObj = new dragObject(el, null, new Position(leftEdge, topEdge), new Position(0, 0)); | |||
/** end of dragable stuff**/ | |||
Latest revision as of 03:42, 26 November 2021
/* Any JavaScript here will be loaded for all users on every page load. */
/* Analytics */
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-63377680-1', 'auto');
ga('send', 'pageview');
/** ImageMapEdit *********************************************************
* http://meta.wikimedia.org/wiki/User_talk:Dapete/ImageMapEdit
*
* Currently disabled, toolserver seems to have issues, for re-enabling uncomment the importScriptURI line. -Tass
*
* importScriptURI('http://toolserver.org/~dapete/ime/ime.js');
*/
/**
* Tab/Panel right slide
* @author mwjames
*/
$("#panel-tab").click( function (event) {
event.stopPropagation();
showIfNotVisible( "#panel-content" );
} );
function showIfNotVisible( element ) {
var width = $( '#panel' ).find( 'table').width() + 8;
if ( $(element).css( "width" ) == width + 'px' )
$(element).animate( { width: 4 }, 500);
else
$(element).animate( { width: width }, 500);
};
$(function(){
var element = $("#panel-content");
var width = element.find( 'table').width() + 8;
element
.width( width )
.animate( { width: 4 }, 1200);
});
/** Popup links
* Use <span class="pops">[http://www.entropiaplanets.com EntropiaPlanets]</span>
* or <span class="pops">[[EntropiaPlanets Wiki|Home]]</span>
**/
addOnloadHook( function() {
var pops = function( elems ) {
for (var i=0; i<elems.length; i++) {
if ( !(' '+elems[i].className+' ').match( / pops / ) ) continue;
var anchs = elems[i].getElementsByTagName('a');
for (var j=0; j<anchs.length; j++) anchs[j].target = '_blank';
}
};
var bc = document.getElementById('bodyContent');
var tags = ['span', 'div', 'table', 'td', 'th'];
for (var i=0; i<tags.length; i++) pops( bc.getElementsByTagName( tags[i] ) );
} );
/** dragable stuff**/
function Position(x, y)
{
this.X = x;
this.Y = y;
this.Add = function(val)
{
var newPos = new Position(this.X, this.Y);
if(val != null)
{
if(!isNaN(val.X))
newPos.X += val.X;
if(!isNaN(val.Y))
newPos.Y += val.Y
}
return newPos;
}
this.Subtract = function(val)
{
var newPos = new Position(this.X, this.Y);
if(val != null)
{
if(!isNaN(val.X))
newPos.X -= val.X;
if(!isNaN(val.Y))
newPos.Y -= val.Y
}
return newPos;
}
this.Min = function(val)
{
var newPos = new Position(this.X, this.Y)
if(val == null)
return newPos;
if(!isNaN(val.X) && this.X > val.X)
newPos.X = val.X;
if(!isNaN(val.Y) && this.Y > val.Y)
newPos.Y = val.Y;
return newPos;
}
this.Max = function(val)
{
var newPos = new Position(this.X, this.Y)
if(val == null)
return newPos;
if(!isNaN(val.X) && this.X < val.X)
newPos.X = val.X;
if(!isNaN(val.Y) && this.Y < val.Y)
newPos.Y = val.Y;
return newPos;
}
this.Bound = function(lower, upper)
{
var newPos = this.Max(lower);
return newPos.Min(upper);
}
this.Check = function()
{
var newPos = new Position(this.X, this.Y);
if(isNaN(newPos.X))
newPos.X = 0;
if(isNaN(newPos.Y))
newPos.Y = 0;
return newPos;
}
this.Apply = function(element)
{
if(typeof(element) == "string")
element = document.getElementById(element);
if(element == null)
return;
if(!isNaN(this.X))
element.style.left = this.X + 'px';
if(!isNaN(this.Y))
element.style.top = this.Y + 'px';
}
}
function hookEvent(element, eventName, callback)
{
if(typeof(element) == "string")
element = document.getElementById(element);
if(element == null)
return;
if(element.addEventListener)
{
element.addEventListener(eventName, callback, false);
}
else if(element.attachEvent)
element.attachEvent("on" + eventName, callback);
}
function unhookEvent(element, eventName, callback)
{
if(typeof(element) == "string")
element = document.getElementById(element);
if(element == null)
return;
if(element.removeEventListener)
element.removeEventListener(eventName, callback, false);
else if(element.detachEvent)
element.detachEvent("on" + eventName, callback);
}
function cancelEvent(e)
{
e = e ? e : window.event;
if(e.stopPropagation)
e.stopPropagation();
if(e.preventDefault)
e.preventDefault();
e.cancelBubble = true;
e.cancel = true;
e.returnValue = false;
return false;
}
function getMousePos(eventObj)
{
eventObj = eventObj ? eventObj : window.event;
var pos;
if(isNaN(eventObj.layerX))
pos = new Position(eventObj.offsetX, eventObj.offsetY);
else
pos = new Position(eventObj.layerX, eventObj.layerY);
return correctOffset(pos, pointerOffset, true);
}
function getEventTarget(e)
{
e = e ? e : window.event;
return e.target ? e.target : e.srcElement;
}
function absoluteCursorPostion(eventObj)
{
eventObj = eventObj ? eventObj : window.event;
if(isNaN(window.scrollX))
return new Position(eventObj.clientX + document.documentElement.scrollLeft + document.body.scrollLeft,
eventObj.clientY + document.documentElement.scrollTop + document.body.scrollTop);
else
return new Position(eventObj.clientX + window.scrollX, eventObj.clientY + window.scrollY);
}
function dragObject(element, attachElement, lowerBound, upperBound, startCallback, moveCallback, endCallback, attachLater)
{
if(typeof(element) == "string")
element = document.getElementById(element);
if(element == null)
return;
var cursorStartPos = null;
var elementStartPos = null;
var dragging = false;
var listening = false;
var disposed = false;
function dragStart(eventObj)
{
if(dragging || !listening || disposed) return;
dragging = true;
if(startCallback != null)
startCallback(eventObj, element);
cursorStartPos = absoluteCursorPostion(eventObj);
elementStartPos = new Position(parseInt(element.style.left), parseInt(element.style.top));
elementStartPos = elementStartPos.Check();
hookEvent(document, "mousemove", dragGo);
hookEvent(document, "mouseup", dragStopHook);
return cancelEvent(eventObj);
}
function dragGo(eventObj)
{
if(!dragging || disposed) return;
var newPos = absoluteCursorPostion(eventObj);
newPos = newPos.Add(elementStartPos).Subtract(cursorStartPos);
newPos = newPos.Bound(lowerBound, upperBound)
newPos.Apply(element);
if(moveCallback != null)
moveCallback(newPos, element);
return cancelEvent(eventObj);
}
function dragStopHook(eventObj)
{
dragStop();
return cancelEvent(eventObj);
}
function dragStop()
{
if(!dragging || disposed) return;
unhookEvent(document, "mousemove", dragGo);
unhookEvent(document, "mouseup", dragStopHook);
cursorStartPos = null;
elementStartPos = null;
if(endCallback != null)
endCallback(element);
dragging = false;
}
this.Dispose = function()
{
if(disposed) return;
this.StopListening(true);
element = null;
attachElement = null
lowerBound = null;
upperBound = null;
startCallback = null;
moveCallback = null
endCallback = null;
disposed = true;
}
this.GetLowerBound = function()
{ return lowerBound; }
this.GetUpperBound = function()
{ return upperBound; }
this.StartListening = function()
{
if(listening || disposed) return;
listening = true;
hookEvent(attachElement, "mousedown", dragStart);
}
this.StopListening = function(stopCurrentDragging)
{
if(!listening || disposed) return;
unhookEvent(attachElement, "mousedown", dragStart);
listening = false;
if(stopCurrentDragging && dragging)
dragStop();
}
this.IsDragging = function(){ return dragging; }
this.IsListening = function() { return listening; }
this.IsDisposed = function() { return disposed; }
if(typeof(attachElement) == "string")
attachElement = document.getElementById(attachElement);
if(attachElement == null)
attachElement = element;
if(!attachLater)
this.StartListening();
}
var el = document.getElementById('draggableElement');
var leftEdge = el.parentNode.clientWidth - el.clientWidth;
var topEdge = el.parentNode.clientHeight - el.clientHeight;
var dragObj = new dragObject(el, null, new Position(leftEdge, topEdge), new Position(0, 0));
/** end of dragable stuff**/