/* * 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 ( mw, $ ) { /** * Contains information needed to embed and share files. * @class mw.mmv.model.EmbedFileInfo * @constructor * @param {mw.Title} title * @param {string} src * @param {string} url * @param {string} [siteName] * @param {Object} [license] * @param {string} [license.plain] * @param {string} [license.html] * @param {Object} [author] * @param {string} [author.plain] * @param {string} [author.html] * @param {Object} [source] * @param {string} [source.plain] * @param {string} [source.html] * @param {Object} [caption] * @param {string} [caption.plain] * @param {string} [caption.html] */ function EmbedFileInfo( title, src, url, siteName, license, author, source, caption ) { if ( !title || !src || !url ) { throw 'title, src and url are required and must have a value'; } /** @property {mw.Title} title The title of the file */ this.title = title; /** @property {string} src The URL to the original file */ this.src = src; /** @property {string} url The URL to the file description page */ this.url = url; /** @property {string} [siteName] Human-readable name of the site the file is on */ this.siteName = siteName; /** @property {Object} [license] Description of the license of the file - with links */ this.license = license; /** @property {Object} [author] Author of the file - with links */ this.author = author; /** @property {Object} [source] Source for the file - with links */ this.source = source; /** @property {Object} [caption] Image caption, if any */ this.caption = caption; } /** * Helper function to turn HTML to plaintext * @private * @param {string} html * @return {{plain: string, html: string}|null} */ function htmlToObject ( html ) { if ( html && html.length ) { return { plain: $( '
' + html + '
' ).text(), html: html }; } else { return null; } } /** * Factory method for creating an info object from html * @param {mw.Title} title * @param {string} src * @param {string} url * @param {string} [siteName] * @param {string} [licenseHtml] * @param {string} [authorHtml] * @param {string} [sourceHtml] * @param {string} [captionHtml] * @return {mw.mmv.model.EmbedFileInfo} */ EmbedFileInfo.fromHtml = function ( title, src, url, siteName, licenseHtml, authorHtml, sourceHtml, captionHtml ) { return new EmbedFileInfo( title, src, url, siteName, htmlToObject( licenseHtml ), htmlToObject( authorHtml ), htmlToObject( sourceHtml ), htmlToObject( captionHtml ) ); }; /** * Turns image info into EmbedFileInfo * @param {mw.mmv.model.Image} imageInfo * @param {string} [siteName] * @param {string} [caption] * @return {mw.mmv.model.EmbedFileInfo} */ EmbedFileInfo.fromImageInfo = function ( imageInfo, siteName, caption ) { var title = imageInfo.title, src = imageInfo.url, url = imageInfo.descriptionUrl, license = imageInfo.license && imageInfo.license.internalName, author = imageInfo.author, source = imageInfo.source; return EmbedFileInfo.fromHtml( title, src, url, siteName, license, author, source, caption ); }; /** * Turns a jQuery object into a plaintext/HTML pair * @param $jq * @return {{plain: string, html:string}|null} */ EmbedFileInfo.jqueryToObject = function ( $jq ) { if ( $jq && $jq.length ) { return { plain: $jq.text(), html: $jq.get( 0 ).outerHTML }; } else { return null; } }; mw.mmv.model.EmbedFileInfo = EmbedFileInfo; }( mediaWiki, jQuery ) );