/*! * VisualEditor MediaWiki Initialization Platform class. * * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt * @license The MIT License (MIT); see LICENSE.txt */ /** * Initialization MediaWiki platform. * * @class * @extends ve.init.Platform * * @constructor */ ve.init.mw.Platform = function VeInitMwPlatform() { // Parent constructor ve.init.Platform.call( this ); // Properties this.externalLinkUrlProtocolsRegExp = new RegExp( '^(' + mw.config.get( 'wgUrlProtocols' ) + ')' ); this.parsedMessages = {}; this.linkCache = new ve.init.mw.LinkCache(); this.imageInfoCache = new ve.init.mw.ImageInfoCache(); }; /* Inheritance */ OO.inheritClass( ve.init.mw.Platform, ve.init.Platform ); /* Methods */ /** @inheritdoc */ ve.init.mw.Platform.prototype.getExternalLinkUrlProtocolsRegExp = function () { return this.externalLinkUrlProtocolsRegExp; }; /** @inheritdoc */ ve.init.mw.Platform.prototype.addMessages = function ( messages ) { return mw.messages.set( messages ); }; /** * @method * @inheritdoc */ ve.init.mw.Platform.prototype.getMessage = mw.msg.bind( mw ); /** @inheritdoc */ ve.init.mw.Platform.prototype.addParsedMessages = function ( messages ) { for ( var key in messages ) { this.parsedMessages[key] = messages[key]; } }; /** @inheritdoc */ ve.init.mw.Platform.prototype.getParsedMessage = function ( key ) { if ( Object.prototype.hasOwnProperty.call( this.parsedMessages, key ) ) { // Prefer parsed results from VisualEditorDataModule if available. return this.parsedMessages[key]; } // Fallback to regular messages, with mw.message html escaping applied. return mw.message( key ).escaped(); }; /** @inheritdoc */ ve.init.mw.Platform.prototype.getLanguageCodes = function () { return Object.keys( mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'languageNames' ) || $.uls.data.getAutonyms() ); }; /** @inheritdoc */ ve.init.mw.Platform.prototype.getLanguageName = function ( code ) { var languageNames = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'languageNames' ) || $.uls.data.getAutonyms(); return languageNames[code] || ''; }; /** * @method * @inheritdoc */ ve.init.mw.Platform.prototype.getLanguageAutonym = $.uls.data.getAutonym; /** * @method * @inheritdoc */ ve.init.mw.Platform.prototype.getLanguageDirection = $.uls.data.getDir; /** @inheritdoc */ ve.init.mw.Platform.prototype.getUserLanguages = function () { return mw.language.getFallbackLanguageChain(); }; /** * @inheritdoc */ ve.init.mw.Platform.prototype.fetchSpecialCharList = function () { var characters = {}, otherGroupName = mw.msg( 'visualeditor-special-characters-group-other' ), otherMsg = mw.msg( 'visualeditor-quick-access-characters.json' ), groupObject; if ( otherMsg !== '' ) { try { characters[otherGroupName] = JSON.parse( otherMsg ); } catch ( err ) { ve.log( 've.init.mw.Platform: Could not parse the Special Character list.' ); ve.log( err ); } } $.each( mw.language.specialCharacters, function ( groupName, groupCharacters ) { groupObject = {}; // button label => character data to insert $.each( groupCharacters, function ( charKey, charVal ) { // VE has a different format and it would be a pain to change it now if ( typeof charVal === 'string' ) { groupObject[charVal] = charVal; } else if ( typeof charVal === 'object' && 0 in charVal && 1 in charVal ) { groupObject[charVal[0]] = charVal[1]; } else { groupObject[charVal.label] = charVal; } } ); characters[mw.msg( 'special-characters-group-' + groupName )] = groupObject; } ); // This implementation always resolves instantly return $.Deferred().resolve( characters ).promise(); };