/*! * This file is part of the Semantic MediaWiki Extension * @see https://semantic-mediawiki.org/ * * @section LICENSE * This program 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. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * * @since 1.9 * * @file * * @ingroup SMW * * @license GNU GPL v2+ * @author mwjames */ ( function( $, mw, smw ) { 'use strict'; /** * Helper method * @ignore */ var html = mw.html; /** * Inheritance class for the smw.dataItem constructor * * @since 1.9 * * @class smw.dataItem * @abstract */ smw.dataItem = smw.dataItem || {}; /** * Initializes the constructor * * @param {string} fulltext * @param {string} fullurl * @param {number} ns * @param {boolean} exists * * @return {smw.dataItem.wikiPage} this */ var wikiPage = function ( fulltext, fullurl, ns, exists, displaytitle ) { this.fulltext = fulltext !== ''&& fulltext !== undefined ? fulltext : null; this.fullurl = fullurl !== '' && fullurl !== undefined ? fullurl : null; this.ns = ns !== undefined ? ns : 0; this.exists = exists !== undefined ? exists : true; this.displaytitle = displaytitle !== '' && displaytitle !== undefined ? displaytitle : null; // Get mw.Title inheritance if ( this.fulltext !== null ){ this.title = new mw.Title( this.fulltext ); } return this; }; /** * A class that includes methods to create a wikiPage dataItem representation * in JavaScript that resembles the SMW\DIWikiPage object in PHP * * @since 1.9 * * @class * @constructor */ smw.dataItem.wikiPage = function( fulltext, fullurl, ns, exists, displaytitle ) { if ( $.type( fulltext ) === 'string' && $.type( fullurl ) === 'string' ) { this.constructor( fulltext, fullurl, ns, exists, displaytitle ); } else { throw new Error( 'smw.dataItem.wikiPage: fulltext, fullurl must be a string' ); } }; /* Public methods */ var fn = { constructor: wikiPage, /** * Returns type * * @since 1.9 * * @return {string} */ getDIType: function() { return '_wpg'; }, /** * Returns wikiPage text title as full name like "File:Foo bar.jpg" * due to fact that the name is serialized in fulltext * * @since 1.9 * * @return {string} */ getFullText: function() { return this.fulltext; }, /** * Returns main part of the title without any fragment * * @since 1.9 * * @return {string} */ getText: function() { return this.fulltext && this.fulltext.split( '#' )[0]; }, /** * Returns wikiPage uri * * @since 1.9 * * @return {string} */ getUri: function() { return this.fullurl; }, /** * Returns mw.Title object * * @since 1.9 * * @return {mw.Title} */ getTitle: function() { return this.title; }, /** * Returns if the wikiPage is a known entity or not * * @since 1.9 * * @return {boolean} */ isKnown: function(){ return this.exists; }, /** * Returns namespace id * * @since 1.9 * * @return {number} */ getNamespaceId: function() { return this.ns; }, /** * Returns html representation * * @since 1.9 * * @param {boolean} * * @return {string} */ getHtml: function( linker ) { var displaytitle = this.displaytitle; if ( displaytitle === null ) { displaytitle = this.getText(); } if ( linker && this.fullurl !== null ){ var attributes = this.exists ? { 'href': this.fullurl } : { 'href': this.fullurl, 'class': 'new' }; return html.element( 'a', attributes , displaytitle ); } return displaytitle; } }; // Alias fn.exists = fn.isKnown; fn.getPrefixedText = fn.getFullText; fn.getName = fn.getFullText; fn.getValue = fn.getFullText; // Assign methods smw.dataItem.wikiPage.prototype = fn; // For additional methods use // $.extend( smw.dataItem.wikiPage.prototype, { method: function (){ ... } } ); } )( jQuery, mediaWiki, semanticMediaWiki );