diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.dataItem.wikiPage.js')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.dataItem.wikiPage.js | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.dataItem.wikiPage.js b/www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.dataItem.wikiPage.js new file mode 100644 index 00000000..3a2e6546 --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.dataItem.wikiPage.js @@ -0,0 +1,211 @@ +/*! + * 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 ); |