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 }); })();