Difference between revisions of "User:Chocohead/common.js"
Jump to navigation
Jump to search
m (Fixed the wiki misinterpreting templates being used) |
m (Woo, something fun coming) |
||
| Line 272: | Line 272: | ||
} ); | } ); | ||
} | } | ||
var Elevator = (function() { | |||
'use strict'; | |||
// Elements | |||
var body = null; | |||
// Scroll vars | |||
var animation = null; | |||
var duration = null; // ms | |||
var customDuration = false; | |||
var startTime = null; | |||
var startPosition = null; | |||
var mainAudio; | |||
var endAudio; | |||
var elevating = false; | |||
function extend( target, source ) { | |||
for ( var key in source ) { | |||
if ( !( key in target ) ) { | |||
target[ key ] = source[ key ]; | |||
} | |||
} | |||
return target; | |||
} | |||
function easeInOutQuad( t, b, c, d ) { | |||
t /= d/2; | |||
if (t < 1) return c/2*t*t + b; | |||
t--; | |||
return -c/2 * (t*(t-2) - 1) + b; | |||
} | |||
/** | |||
* Main | |||
*/ | |||
// Time is passed through requestAnimationFrame, what a world! | |||
function animateLoop( time ) { | |||
if (!startTime) { | |||
startTime = time; | |||
} | |||
var timeSoFar = time - startTime; | |||
var easedPosition = easeInOutQuad(timeSoFar, startPosition, -startPosition, duration); | |||
window.scrollTo(0, easedPosition); | |||
if( timeSoFar < duration ) { | |||
animation = requestAnimationFrame(animateLoop); | |||
} else { | |||
animationFinished(); | |||
} | |||
} | |||
// ELEVATE! | |||
// ____ | |||
// .' '=====<0 | |||
// |======| | |||
// |======| | |||
// [IIIIII[\--() | |||
// |_______| | |||
// C O O O D | |||
// C O O O D | |||
// C O O O D | |||
// C__O__O__O__D | |||
// [_____________] | |||
function elevate() { | |||
if( elevating ) { | |||
return; | |||
} | |||
elevating = true; | |||
startPosition = (document.documentElement.scrollTop || body.scrollTop); | |||
// No custom duration set, so we travel at pixels per millisecond. (0.75px per ms) | |||
if( !customDuration ) { | |||
duration = (startPosition * 1.5); | |||
} | |||
requestAnimationFrame( animateLoop ); | |||
// Start music! | |||
if( mainAudio ) { | |||
mainAudio.play(); | |||
} | |||
} | |||
function resetPositions() { | |||
startTime = null; | |||
startPosition = null; | |||
elevating = false; | |||
} | |||
function animationFinished() { | |||
resetPositions(); | |||
// Stop music! | |||
if( mainAudio ) { | |||
mainAudio.pause(); | |||
mainAudio.currentTime = 0; | |||
} | |||
if( endAudio ) { | |||
endAudio.play(); | |||
} | |||
} | |||
function onWindowBlur() { | |||
// If animating, go straight to the top. And play no more music. | |||
if( elevating ) { | |||
cancelAnimationFrame( animation ); | |||
resetPositions(); | |||
if( mainAudio ) { | |||
mainAudio.pause(); | |||
mainAudio.currentTime = 0; | |||
} | |||
window.scrollTo(0, 0); | |||
} | |||
} | |||
function bindElevateToElement( element ) { | |||
element.addEventListener('click', elevate, false); | |||
} | |||
function main( options ) { | |||
// Bind to element click event, if need be. | |||
body = document.body; | |||
if( options.element ) { | |||
bindElevateToElement( options.element ); | |||
} | |||
if( options.duration ) { | |||
customDuration = true; | |||
duration = options.duration; | |||
} | |||
if( options.mainAudio ) { | |||
mainAudio = new Audio( options.mainAudio ); | |||
mainAudio.setAttribute( 'preload', 'true' ); //@TODO: Option to not preload audio. | |||
mainAudio.setAttribute( 'loop', 'true' ); | |||
} | |||
if( options.endAudio ) { | |||
endAudio = new Audio( options.endAudio ); | |||
endAudio.setAttribute( 'preload', 'true' ); | |||
} | |||
window.addEventListener('blur', onWindowBlur, false); | |||
} | |||
return extend(main, { | |||
elevate: elevate | |||
}); | |||
})(); | |||
Revision as of 19:05, 22 April 2015
/******************************************
* Page Edit Bar Improver *
*****************************************/
var customizeToolbar = function() {
// Template subgroup
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'sections': {
'templates': {
'type': 'toolbar', // Can also be 'booklet'
'label': 'Templates'
// or 'labelMsg': 'section-templates-label' for a localized label
}
}
} );
// Infoboxes header
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'groups': {
'infoboxes': {
'label': 'Infoboxes' // or use labelMsg for a localized label, see above
}
}
} );
// [[Template:Block]] for blocks
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'group': 'infoboxes',
'tools': {
'block': {
label: 'Block Infobox',
type: 'button',
icon: '/images/a/a6/Grid_Stone.png',
filters: [ 'body.ns-0' ], //Namespaceless things only - 100, 102, 104 could also fit in
action: {
type: 'encapsulate',
options: {
'pre':
"<onlyinclude>{{\
{{{1|Block}}}\n\
|title=\n\
|image=\n\
|image2=\n\
|image3=\n\
|invimage=\n\
|invimage2=\n\
|invimage3=\n\
|invimage4=\n\
|type=\n\
|dirt=\n\
|maxeu=\n\
|storage=\n\
|eu_use=\n\
|eu_use2=\n\
|tool=\n\
|stackable=\n\
|data=\n\
|fluidspeed=\n\
|movespeed=",
'post': "\n}}</onlyinclude>"
}
}
}
}
} );
//[[Template:Userinfo]]
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'group': 'infoboxes',
'tools': {
'user': {
label: 'User Infobox',
type: 'button',
icon: '/images/a/a6/Grid_Stone.png',
filters: [ 'body.ns-2' ], //User namespaces only
action: {
type: 'encapsulate',
options: {
'pre': "{{\
UserInfo\n\
|width=\n\
|user-avatar=\n\
|user-ig=\n\
|section1=\n\
|stat1=|value1=\n\
|section2=\n\
|stat2=|value2=\n\
|section3=\n\
|stat3=|value3=\n\
|section4=\n\
|stat4=|value4=\n\
|section5=\n\
|stat5=|value5=\n\
|section6=\n\
|stat6=|value6=\n\
|section7=\n\
|stat7=|value7=\n\
|section8=\n\
|stat8=|value8=\n\
|section9=\n\
|stat9=|value9=",
'post': "\n}}"
}
}
}
}
} );
// Solution for items
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'group': 'infoboxes',
'tools': {
'item': {
label: 'Item Infobox',
type: 'button',
icon: '/images/e/e9/Grid_Stick.png',
filters: [ 'body.ns-0' ], //Namespaceless things only - 100, 102, 104 could also fit in
action: {
type: 'encapsulate',
options: {
'peri': "<!-- We don't have one ;) -->"
}
}
}
}
} );
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'groups': {
'craftingtemplates': {
'label': 'Crafting Grids' // or use labelMsg for a localized label, see above
}
}
} );
// [[Template:Grid/Crafting Table]] for simple crafting recipes
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'group': 'craftingtemplates',
'tools': {
'block': {
label: 'Simple Crafting Table',
type: 'button',
icon: '/images/7/79/Grid_Crafting_Table.png',
filters: [ 'body.ns-0' ], //Namespaceless things only - 100, 102, 104 could also fit in
action: {
type: 'encapsulate',
options: {
'pre':
"{{\
Grid/Crafting Table\n\
|A1=\n\
|B1=\n\
|C1=\n\
|A2=\n\
|B2=\n\
|C2=\n\
|A3=\n\
|B3=\n\
|C3=\n\
|Output= |OA=",
'post': "\n}}"
}
}
}
}
} );
// [[Template:Grid/Crafting Table]] for complicated crafting recipes
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'group': 'craftingtemplates',
'tools': {
'block': {
label: 'Full Crafting Table',
type: 'button',
icon: '/images/7/79/Grid_Crafting_Table.png',
filters: [ 'body.ns-0' ], //Namespaceless things only - 100, 102, 104 could also fit in
action: {
type: 'encapsulate',
options: {
'pre':
"{{\
Grid/Crafting Table\n\
|A1= |A1-link= |A1-image=\n\
|B1= |B1-link= |B1-image=\n\
|C1= |C1-link= |C1-image=\n\
|A2= |A2-link= |A2-image=\n\
|B2= |B2-link= |B2-image=\n\
|C2= |C2-link= |C2-image=\n\
|A3= |A3-link= |A3-image=\n\
|B3= |B3-link= |B3-image=\n\
|C3= |C3-link= |C3-image=\n\
|Output= |OA=",
'post': "\n}}"
}
}
}
}
} );
// [[Template:Grid/Furnace]] for simple furnace recipes
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'group': 'craftingtemplates',
'tools': {
'block': {
label: 'Furnace', //Ex "Simple Furnace"
type: 'button',
icon: '/images/2/2e/Grid_Furnace.png',
filters: [ 'body.ns-0' ], //Namespaceless things only - 100, 102, 104 could also fit in
action: {
type: 'encapsulate',
options: {
'pre':
"{{\
Grid/Furnace\n\
|Input=\n\
|Output=\n\
|Fuel=\n\
|Break=\n\
}}",
'post': "\n}}"
}
}
}
}
} );
// [[Template:Grid/Furnace]] for complicated furnace recipes
/*
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'templates',
'group': 'craftingtemplates',
'tools': {
'block': {
label: 'Full Furnace',
type: 'button',
icon: '/images/2/2e/Grid_Furnace.png',
filters: [ 'body.ns-0' ], //Namespaceless things only - 100, 102, 104 could also fit in
action: {
type: 'encapsulate',
options: {
'pre':
"{{\
Grid/Furnace\n\
|Input= |IA= \n\
|Output= |OA= \n\
|Fuel= |FA= \n\
}}",
'post': "\n}}"
}
}
}
}
} );*/
};
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar . . . */
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
mw.loader.using( 'user.options', function () {
if ( mw.user.options.get('usebetatoolbar') && mw.user.options.get( 'showtoolbar' ) ) {
mw.loader.using( 'ext.wikiEditor.toolbar', function () {
$( customizeToolbar );
} );
}
} );
}
var Elevator = (function() {
'use strict';
// Elements
var body = null;
// Scroll vars
var animation = null;
var duration = null; // ms
var customDuration = false;
var startTime = null;
var startPosition = null;
var mainAudio;
var endAudio;
var elevating = false;
function extend( target, source ) {
for ( var key in source ) {
if ( !( key in target ) ) {
target[ key ] = source[ key ];
}
}
return target;
}
function easeInOutQuad( t, b, c, d ) {
t /= d/2;
if (t < 1) return c/2*t*t + b;
t--;
return -c/2 * (t*(t-2) - 1) + b;
}
/**
* Main
*/
// Time is passed through requestAnimationFrame, what a world!
function animateLoop( time ) {
if (!startTime) {
startTime = time;
}
var timeSoFar = time - startTime;
var easedPosition = easeInOutQuad(timeSoFar, startPosition, -startPosition, duration);
window.scrollTo(0, easedPosition);
if( timeSoFar < duration ) {
animation = requestAnimationFrame(animateLoop);
} else {
animationFinished();
}
}
// ELEVATE!
// ____
// .' '=====<0
// |======|
// |======|
// [IIIIII[\--()
// |_______|
// C O O O D
// C O O O D
// C O O O D
// C__O__O__O__D
// [_____________]
function elevate() {
if( elevating ) {
return;
}
elevating = true;
startPosition = (document.documentElement.scrollTop || body.scrollTop);
// No custom duration set, so we travel at pixels per millisecond. (0.75px per ms)
if( !customDuration ) {
duration = (startPosition * 1.5);
}
requestAnimationFrame( animateLoop );
// Start music!
if( mainAudio ) {
mainAudio.play();
}
}
function resetPositions() {
startTime = null;
startPosition = null;
elevating = false;
}
function animationFinished() {
resetPositions();
// Stop music!
if( mainAudio ) {
mainAudio.pause();
mainAudio.currentTime = 0;
}
if( endAudio ) {
endAudio.play();
}
}
function onWindowBlur() {
// If animating, go straight to the top. And play no more music.
if( elevating ) {
cancelAnimationFrame( animation );
resetPositions();
if( mainAudio ) {
mainAudio.pause();
mainAudio.currentTime = 0;
}
window.scrollTo(0, 0);
}
}
function bindElevateToElement( element ) {
element.addEventListener('click', elevate, false);
}
function main( options ) {
// Bind to element click event, if need be.
body = document.body;
if( options.element ) {
bindElevateToElement( options.element );
}
if( options.duration ) {
customDuration = true;
duration = options.duration;
}
if( options.mainAudio ) {
mainAudio = new Audio( options.mainAudio );
mainAudio.setAttribute( 'preload', 'true' ); //@TODO: Option to not preload audio.
mainAudio.setAttribute( 'loop', 'true' );
}
if( options.endAudio ) {
endAudio = new Audio( options.endAudio );
endAudio.setAttribute( 'preload', 'true' );
}
window.addEventListener('blur', onWindowBlur, false);
}
return extend(main, {
elevate: elevate
});
})();