%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/extensions/Translate/resources/js/ |
| Current File : //www/varak.net/wiki.varak.net/extensions/Translate/resources/js/ext.translate.base.js |
( function ( $, mw ) {
'use strict';
mw.translate = mw.translate || {};
mw.translate = $.extend( mw.translate, {
dirty: false,
// A cache for language stats loaded from API,
// indexed by language code
languagestats: {},
/**
* Checks if the input placeholder attribute
* is supported on this element in this browser.
*
* @param {jQuery} $element
* @return {boolean}
*/
isPlaceholderSupported: function ( $element ) {
return ( 'placeholder' in $element[ 0 ] );
},
// Storage for language stats loader functions from API,
// indexed by language code
languageStatsLoader: {},
/**
* Get language stats for a language from the API.
*
* @param {string} language Language code.
* @return {deferred}
*/
loadLanguageStats: function ( language ) {
if ( !mw.translate.languageStatsLoader[ language ] ) {
mw.translate.languageStatsLoader[ language ] = new mw.Api().get( {
action: 'query',
meta: 'languagestats',
lslanguage: language
} );
}
mw.translate.languageStatsLoader[ language ].done( function ( result ) {
mw.translate.languagestats[ language ] = result.query.languagestats;
} );
return mw.translate.languageStatsLoader[ language ];
},
/**
* Load message group information asynchronously.
*
* @param {string} id Message group id
* @param {string|Array} [props] List of properties to load
* @return {jQuery.Promise} Object containing the requested properties on success.
*/
getMessageGroup: function ( id, props ) {
var params, api;
if ( Array.isArray( props ) ) {
props = props.join( '|' );
} else if ( props === undefined ) {
props = 'id|label|description|icon|priority|prioritylangs|priorityforce|workflowstates';
}
params = {
meta: 'messagegroups',
mgformat: 'flat',
mgprop: props,
mgroot: id
};
api = new mw.Api();
return api.get( params ).then( function ( result ) {
return result.query.messagegroups[ 0 ];
} );
},
/**
* Find a group from an array of message groups as returned by web api
* and recurse it through sub groups.
*
* @param {string} id Group id to search for.
* @param {Array} groups Array of message grous
* @return {Object} Message group object
*/
findGroup: function ( id, groups ) {
var result = null;
if ( !id ) {
return groups;
}
$.each( groups, function ( index, group ) {
if ( group.id === id ) {
result = group;
return false;
}
if ( group.groups ) {
group = mw.translate.findGroup( id, group.groups );
if ( group ) {
result = group;
return false;
}
}
} );
return result;
},
/**
* Check if the current user is allowed to translate on this wiki.
*
* @return {boolean}
*/
canTranslate: function () {
return mw.config.get( 'TranslateRight' );
},
/**
* Check if the current user is allowed to proofread on this wiki.
*
* @return {boolean}
*/
canProofread: function () {
return mw.config.get( 'TranslateMessageReviewRight' );
},
/**
* Check if the current user can delete translations on this wiki.
*
* @return {boolean}
*/
canDelete: function () {
return mw.config.get( 'DeleteRight' ) && mw.config.get( 'TranslateRight' );
},
/**
* Adds missing languages to the language database so that they can be used in ULS.
*
* @param {Object} languages Language tags mapped to language names
* @param {Array} regions Which regions to add the languages.
*/
addExtraLanguagesToLanguageData: function ( languages, regions ) {
var code;
for ( code in languages ) {
if ( code in $.uls.data.languages ) {
continue;
}
$.uls.data.addLanguage( code, {
script: 'Zyyy',
regions: regions,
autonym: languages[ code ]
} );
}
},
isDirty: function () {
return $( '.mw-ajax-dialog:visible' ).length || // For old Translate
// For new Translate, something being typed in the current editor.
mw.translate.dirty ||
// For new translate, previous editors has some unsaved edits
$( '.tux-status-unsaved' ).length;
}
} );
function pageShowHandler() {
$( window ).on( 'beforeunload.translate', function () {
if ( mw.translate.isDirty() ) {
// Return our message
return mw.msg( 'translate-js-support-unsaved-warning' );
}
} );
}
/**
* A warning to be shown if a user tries to close the page or navigate away
* from it without saving the written translation.
*/
function translateOnBeforeUnloadRegister() {
pageShowHandler();
$( window ).on( 'pageshow.translate', pageShowHandler );
}
$( function () {
translateOnBeforeUnloadRegister();
} );
}( jQuery, mediaWiki ) );