| Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/resources/parsers/getApiBasedValueParserConstructor.js |
/**
* @license GPL-2.0+
* @author Daniel Werner < danweetz@web.de >
*/
( function( $, wb, vp, dv, util ) {
'use strict';
wb.parsers = wb.parsers || {};
var PARENT = vp.ValueParser;
/**
* Returns a constructor for a ValueParser which parses using the given wb.api.ParseValueCaller.
*
* @since 0.5
*
* This is necessary since valueParser.ValueParserStore returns a constructor, not an instance, and
* we have to pass in the RepoApi wrapped in a wikibase.api.ParseValueCaller.
*
* @param {wikibase.api.ParseValueCaller} apiValueParser
* @return {Function}
*/
wb.parsers.getApiBasedValueParserConstructor = function( apiValueParser ) {
/**
* Base constructor for objects representing a value parser which is doing an API request to the
* 'parseValue' API module.
* @constructor
* @extends valueParsers.ValueParser
* @since 0.5
*/
return util.inherit( 'WbApiBasedValueParser', PARENT, {
/**
* The key of the related API parser.
* @type {string}
*/
API_VALUE_PARSER_ID: null,
/**
* @see valueParsers.ValueParser.parse
* @since 0.5
*
* @param {string} rawValue
* @return {Object} jQuery Promise
* Resolved parameters:
* - {dataValues.DataValues}
* Rejected parameters:
* - {string} HTML error message.
*/
parse: function( rawValue ) {
var deferred = $.Deferred();
apiValueParser.parseValues( this.API_VALUE_PARSER_ID, [rawValue], this._options )
.done( function( results ) {
var result;
if ( results.length === 0 ) {
deferred.reject( 'Parse API returned an empty result set.' );
return;
}
try {
result = dv.newDataValue( results[0].type, results[0].value );
deferred.resolve( result );
} catch ( error ) {
deferred.reject( error.message );
}
} )
.fail( function( error ) {
deferred.reject( error.detailedMessage || error.code );
} );
return deferred.promise();
}
} );
};
}( jQuery, wikibase, valueParsers, dataValues, util ) );