/*
* This file is part of the MediaWiki extension MultimediaViewer.
*
* MultimediaViewer is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* MultimediaViewer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MultimediaViewer. If not, see .
*/
( function () {
// Shortcut for prototype later
var EP;
/**
* UI component that provides the user html/wikitext snippets needed to share
* and/or embed a media asset.
*
* @class mw.mmv.ui.reuse.Embed
* @extends mw.mmv.ui.reuse.Tab
* @constructor
* @param {jQuery} $container
*/
function Embed( $container ) {
mw.mmv.ui.reuse.Tab.call( this, $container );
/**
* Formatter converting image data into formats needed for output
*
* @property {mw.mmv.EmbedFileFormatter}
*/
this.formatter = new mw.mmv.EmbedFileFormatter();
/** @property {mw.mmv.ui.Utils} utils - */
this.utils = new mw.mmv.ui.Utils();
/**
* Indicates whether or not the default option has been reset for both size menus.
*
* @property {boolean}
*/
this.isSizeMenuDefaultReset = false;
this.$pane.addClass( 'mw-mmv-embed-pane' );
this.$pane.appendTo( this.$container );
this.createSnippetTextAreas( this.$pane );
this.$explanation = $( '
' )
.addClass( 'mw-mmv-shareembed-explanation mw-mmv-embed-explanation' )
.text( mw.message( 'multimediaviewer-embed-explanation' ).text() )
.appendTo( this.$pane );
this.createSnippetSelectionButtons( this.$pane );
this.createSizePulldownMenus( this.$pane );
/**
* Currently selected embed snippet.
*
* @property {jQuery}
*/
this.$currentMainEmbedText = mw.user.isAnon() ? this.embedTextHtml.$element : this.embedTextWikitext.$element;
/**
* Default item for the html size menu.
*
* @property {OO.ui.MenuOptionWidget}
*/
this.defaultHtmlItem = this.embedSizeSwitchHtml.getMenu().findSelectedItem();
/**
* Default item for the wikitext size menu.
*
* @property {OO.ui.MenuOptionWidget}
*/
this.defaultWikitextItem = this.embedSizeSwitchWikitext.getMenu().findSelectedItem();
/**
* Currently selected size menu.
*
* @property {OO.ui.MenuSelectWidget}
*/
this.currentSizeMenu = mw.user.isAnon() ? this.embedSizeSwitchHtml.getMenu() : this.embedSizeSwitchWikitext.getMenu();
/**
* Current default item.
*
* @property {OO.ui.MenuOptionWidget}
*/
this.currentDefaultItem = mw.user.isAnon() ? this.defaultHtmlItem : this.defaultWikitextItem;
}
OO.inheritClass( Embed, mw.mmv.ui.reuse.Tab );
EP = Embed.prototype;
/** @property {number} Width threshold at which an image is to be considered "large" */
EP.LARGE_IMAGE_WIDTH_THRESHOLD = 1200;
/** @property {number} Height threshold at which an image is to be considered "large" */
EP.LARGE_IMAGE_HEIGHT_THRESHOLD = 900;
/**
* Creates text areas for html and wikitext snippets.
*
* @param {jQuery} $container
*/
EP.createSnippetTextAreas = function ( $container ) {
var wikitextClasses = [ 'mw-mmv-embed-text-wikitext' ],
htmlClasses = [ 'mw-mmv-embed-text-html' ];
( mw.user.isAnon() ? htmlClasses : wikitextClasses ).push( 'active' );
this.embedTextHtml = new OO.ui.MultilineTextInputWidget( {
classes: htmlClasses,
readOnly: true
} );
this.embedTextHtml.$element.find( 'textarea' )
.prop( 'placeholder', mw.message( 'multimediaviewer-reuse-loading-placeholder' ).text() );
this.embedTextHtml.$input.on( 'copy', function () {
mw.mmv.actionLogger.log( 'embed-html-copied' );
} );
this.embedTextWikitext = new OO.ui.MultilineTextInputWidget( {
classes: wikitextClasses,
readOnly: true
} );
this.embedTextWikitext.$element.find( 'textarea' )
.prop( 'placeholder', mw.message( 'multimediaviewer-reuse-loading-placeholder' ).text() );
this.embedTextWikitext.$input.on( 'copy', function () {
mw.mmv.actionLogger.log( 'embed-wikitext-copied' );
} );
this.$copyButton = $( '