summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.data.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.data.js')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.data.js183
1 files changed, 183 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.data.js b/www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.data.js
new file mode 100644
index 00000000..75644105
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/res/smw/data/ext.smw.data.js
@@ -0,0 +1,183 @@
+/**
+ * This file is part of the Semantic MediaWiki JavaScript DataItem 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';
+
+ /**
+ * Constructor to create an object to interact with data objects and Api
+ *
+ * @since 1.9
+ *
+ * @class
+ * @alias smw.data
+ * @constructor
+ */
+ smw.Data = function() {};
+
+ /* Public methods */
+
+ smw.Data.prototype = {
+
+ /**
+ * List of properties used
+ *
+ * @property
+ * @static
+ */
+ properties: null,
+
+ /**
+ * Factory methods that maps an JSON.parse key/value to an dataItem object
+ * This function is normally only called during smw.Api.parse/fetch()
+ *
+ * Structure will be similar to
+ *
+ * Subject (if exists is of type smw.dataItem.wikiPage otherwise a simple object)
+ * |--> property -> smw.dataItem.property
+ * |--> smw.dataItem.wikiPage
+ * |--> ...
+ * |--> property -> smw.dataItem.property
+ * |--> smw.dataItem.uri
+ * |--> ...
+ * |--> property -> smw.dataItem.property
+ * |--> smw.dataItem.time
+ * |--> ...
+ *
+ * @since 1.9
+ *
+ * @param {string} key
+ * @param {mixed} value
+ *
+ * @return {object}
+ */
+ factory: function( key, value ) {
+ var self = this;
+
+ // Map printrequests in order to be used as key accessible reference object
+ // which enables type hinting for all items that exists within in this list
+ if ( key === 'printrequests' && value !== undefined ){
+ var list = {};
+ $.map( value, function( key, index ) {
+ list[key.label] = { typeid: key.typeid, position: index };
+ } );
+ self.properties = list;
+ }
+
+ // Map the entire result object, for objects that have a subject as
+ // full fledged head item and rebuild the entire object to ensure
+ // that wikiPage is invoked at the top as well
+ if ( key === 'results' ){
+ var nResults = {};
+
+ $.each( value, function( subjectName, subject ) {
+ if( subject.hasOwnProperty( 'fulltext' ) ){
+ var nSubject = new smw.dataItem.wikiPage( subject.fulltext, subject.fullurl, subject.namespace, subject.exists, subject.displaytitle );
+ nSubject.printouts = subject.printouts;
+ nResults[subjectName] = nSubject;
+ } else {
+ // Headless entry without a subject
+ nResults = value;
+ }
+ } );
+
+ return nResults;
+ }
+
+ // Map individual properties according to its type
+ if ( typeof value === 'object' && self.properties !== null ){
+ if ( key !== '' && value.length > 0 && self.properties.hasOwnProperty( key ) ){
+ var property = new smw.dataItem.property( key ),
+ typeid = self.properties[key].typeid,
+ factoredValue = [];
+
+ // Assignment of individual classes
+ switch ( typeid ) {
+ case '_wpg':
+ $.map( value, function( w ) {
+ factoredValue.push( new smw.dataItem.wikiPage( w.fulltext, w.fullurl, w.namespace, w.exists, w.displaytitle ) );
+ } );
+ break;
+ case '_uri':
+ $.map( value, function( u ) {
+ factoredValue.push( new smw.dataItem.uri( u ) );
+ } );
+ break;
+ case '_dat':
+ $.map( value, function( t ) {
+ // API 2.4+
+ if ( t.hasOwnProperty( 'raw' ) ) {
+ var time = new smw.dataItem.time( t.timestamp, t.raw );
+ } else {
+ var time = new smw.dataItem.time( t, undefined );
+ }
+
+ factoredValue.push( time );
+ } );
+ break;
+ case '_num':
+ $.map( value, function( n ) {
+ factoredValue.push( new smw.dataItem.number( n ) );
+ } );
+ break;
+ case '_qty':
+ $.map( value, function( q ) {
+ factoredValue.push( new smw.dataValue.quantity( q.value, q.unit ) );
+ } );
+ break;
+ case '_str':
+ case '_txt':
+ $.map( value, function( s ) {
+ factoredValue.push( new smw.dataItem.text( s, typeid ) );
+ } );
+ break;
+ case '_geo':
+ $.map( value, function( g ) {
+ factoredValue.push( new smw.dataItem.geo( g, typeid ) );
+ } );
+ break;
+ default:
+ // Register all non identifiable types as unknown
+ $.map( value, function( v ) {
+ factoredValue.push( new smw.dataItem.unknown( v, typeid ) );
+ } );
+ }
+
+ return $.extend( property, factoredValue );
+ }
+ }
+
+ // Return all other values
+ return value;
+ }
+ };
+
+ // Alias
+ smw.data = smw.Data;
+
+} )( jQuery, mediaWiki, semanticMediaWiki );