summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/res/smw/query/ext.smw.query.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/res/smw/query/ext.smw.query.js')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/res/smw/query/ext.smw.query.js198
1 files changed, 198 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/res/smw/query/ext.smw.query.js b/www/wiki/extensions/SemanticMediaWiki/res/smw/query/ext.smw.query.js
new file mode 100644
index 00000000..57fec534
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/res/smw/query/ext.smw.query.js
@@ -0,0 +1,198 @@
+/**
+ * This file is part of the Semantic MediaWiki JavaScript Query module
+ * @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
+ *
+ * @file
+ * @ignore
+ *
+ * @since 1.9
+ * @ingroup SMW
+ *
+ * @licence GNU GPL v2+
+ * @author mwjames
+ */
+( function( $, mw, smw ) {
+ 'use strict';
+
+ /**
+ * Private object and methods
+ * @ignore
+ */
+ var html = mw.html;
+
+ /**
+ * Query constructor
+ *
+ * @since 1.9
+ *
+ * @param {object} printouts
+ * @param {object} parameters
+ * @param {object|string} conditions
+ *
+ * @return {this}
+ */
+ var query = function ( printouts, parameters, conditions ) {
+
+ this.printouts = [];
+ this.conditions = [];
+
+ this.parameters = {};
+ this.linkAttributes = {};
+
+ if ( printouts !== '' && printouts !== undefined ) {
+ this.printouts = printouts;
+ };
+
+ if ( parameters !== '' && parameters !== undefined ) {
+ this.parameters = parameters;
+ };
+
+ if ( conditions !== '' && conditions !== undefined ) {
+ this.conditions = conditions;
+ };
+
+ return this;
+ };
+
+ /**
+ * Constructor to create an object to interact with the Query
+ *
+ * @since 1.9
+ *
+ * @class
+ * @alias smw.Query
+ * @constructor
+ */
+ smw.Query = function( printouts, parameters, conditions ) {
+
+ // You need to have some conditions otherwise jump the right light
+ // because a query one can survive without printouts or parameters
+ if ( conditions !== '' || $.type( this.conditions ) === 'array' ) {
+ this.constructor( printouts, parameters, conditions );
+ } else {
+ throw new Error( 'smw.dataItem.query: conditions are empty' );
+ }
+ };
+
+ /* Public methods */
+
+ var fn = {
+
+ constructor: query,
+
+ /**
+ * Returns query limit parameter (see SMW\Query::getLimit())
+ *
+ * @since 1.9
+ *
+ * @return {number}
+ */
+ getLimit: function() {
+ return this.parameters.limit;
+ },
+
+ /**
+ * @since 3.0
+ *
+ * @param {Object} linkAttributes
+ */
+ setLinkAttributes: function( linkAttributes ) {
+ this.linkAttributes = linkAttributes;
+ },
+
+ /**
+ * Returns query link (see SMW\QueryResult::getLink())
+ *
+ * Caption text is set either by using parameters.searchlabel or by
+ * .getLink( 'myCaption' )
+ *
+ * @since 1.9
+ *
+ * @param {string}
+ * @return {string}
+ */
+ getLink: function( caption ) {
+ var c = caption ? caption : this.parameters.searchlabel !== undefined ? this.parameters.searchlabel : '...' ;
+
+ var args = {
+ title: 'Special:Ask',
+ q: $.type( this.conditions ) === 'string' ? this.conditions : this.conditions.join( '' ),
+ po: this.printouts.join( '\n' ),
+ p: this.parameters
+ };
+
+ var attr = {
+ 'class': 'query-link',
+ 'href' : mw.config.get( 'wgScript' ) + '?' + $.param( args )
+ } ;
+
+ $.extend( attr, this.linkAttributes );
+
+ return html.element( 'a', attr , c );
+ },
+
+ /**
+ * Returns query string (see SMW\Query::getQueryString())
+ *
+ * @since 1.9
+ *
+ * @return {string}
+ */
+ toString: function() {
+
+ var printouts = '';
+ if ( $.type( this.printouts ) === 'array' ){
+ $.each( this.printouts, function( key, value ) {
+ printouts += '|' + value;
+ } );
+ } else {
+ // @see ext.smw.query.test why we are failing here and not earlier
+ throw new Error( 'smw.Api.query: printouts is not an array, it is a + ' + $.type( this.printouts ) );
+ }
+
+ var parameters = '';
+ if ( $.type( this.parameters ) === 'object' ){
+ $.each( this.parameters, function( key, value ) {
+ parameters += '|' + key + '=' + value;
+ } );
+ } else {
+ // @see ext.smw.query.test why we are failing here and not earlier
+ throw new Error( 'smw.Api.query: parameters is not an object, it is a + ' + $.type( this.parameters ) );
+ }
+
+ var conditions = '';
+ if ( $.type( this.conditions ) === 'array' || $.type( this.conditions ) === 'object' ){
+ $.each( this.conditions, function( key, value ) {
+ conditions += value;
+ } );
+ } else if ( $.type( this.conditions ) === 'string' ) {
+ conditions += this.conditions;
+ }
+
+ return conditions + printouts + parameters;
+ }
+ };
+
+ // Alias
+ fn.getQueryString = fn.toString;
+
+ // Assign methods
+ smw.Query.prototype = fn;
+ smw.query = smw.Query;
+
+} )( jQuery, mediaWiki, semanticMediaWiki ); \ No newline at end of file