Viewing File: /home/omtekel/www/wp-content/upgrade/backup/sa.tar
ve.init.sa.SafeStorage.js 0000666 00000011651 15133502065 0011272 0 ustar 00 ( function () {
// Copied from mediawiki.requestIdleCallback
var requestIdleCallbackInternal = function ( callback ) {
setTimeout( function () {
var start = ve.now();
callback( {
didTimeout: false,
timeRemaining: function () {
// Hard code a target maximum busy time of 50 milliseconds
return Math.max( 0, 50 - ( ve.now() - start ) );
}
} );
}, 1 );
};
var requestIdleCallback = window.requestIdleCallback ?
// Bind because it throws TypeError if context is not window
window.requestIdleCallback.bind( window ) :
requestIdleCallbackInternal;
var EXPIRY_PREFIX = '_EXPIRY_';
/**
* Implementation of ve.init.SafeStorage
*
* Duplicate of mediawiki.storage.
*
* @class ve.init.sa.SafeStorage
* @extends ve.init.SafeStorage
*
* @constructor
* @param {Storage|undefined} store The Storage instance to wrap around
*/
ve.init.sa.SafeStorage = function ( store ) {
this.store = store;
// Purge expired items once per page session
var storage = this;
setTimeout( function () {
storage.clearExpired();
}, 2000 );
};
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.get = function ( key ) {
if ( this.isExpired( key ) ) {
return null;
}
try {
return this.store.getItem( key );
} catch ( e ) {}
return false;
};
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.set = function ( key, value, expiry ) {
if ( key.slice( 0, EXPIRY_PREFIX.length ) === EXPIRY_PREFIX ) {
throw new Error( 'Key can\'t have a prefix of ' + EXPIRY_PREFIX );
}
try {
this.store.setItem( key, value );
this.setExpires( key, expiry );
return true;
} catch ( e ) {}
return false;
};
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.remove = function ( key ) {
try {
this.store.removeItem( key );
this.setExpires( key );
return true;
} catch ( e ) {}
return false;
};
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.getObject = function ( key ) {
var json = this.get( key );
if ( json === false ) {
return false;
}
try {
return JSON.parse( json );
} catch ( e ) {}
return null;
};
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.setObject = function ( key, value, expiry ) {
var json;
try {
json = JSON.stringify( value );
return this.set( key, json, expiry );
} catch ( e ) {}
return false;
};
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.setExpires = function ( key, expiry ) {
if ( expiry ) {
try {
this.store.setItem(
EXPIRY_PREFIX + key,
Math.floor( Date.now() / 1000 ) + expiry
);
} catch ( e ) {}
} else {
try {
this.store.removeItem( EXPIRY_PREFIX + key );
} catch ( e ) {}
}
};
// Minimum amount of time (in milliseconds) for an iteration involving localStorage access.
var MIN_WORK_TIME = 3;
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.clearExpired = function () {
var storage = this;
return this.getExpiryKeys().then( function ( keys ) {
return $.Deferred( function ( d ) {
requestIdleCallback( function iterate( deadline ) {
while ( keys[ 0 ] !== undefined && deadline.timeRemaining() > MIN_WORK_TIME ) {
var key = keys.shift();
if ( storage.isExpired( key ) ) {
storage.remove( key );
}
}
if ( keys[ 0 ] !== undefined ) {
// Ran out of time with keys still to remove, continue later
requestIdleCallback( iterate );
} else {
return d.resolve();
}
} );
} );
} );
};
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.getExpiryKeys = function () {
var store = this.store;
return $.Deferred( function ( d ) {
requestIdleCallback( function ( deadline ) {
var prefixLength = EXPIRY_PREFIX.length;
var keys = [];
var length = 0;
try {
length = store.length;
} catch ( e ) {}
// Optimization: If time runs out, degrade to checking fewer keys.
// We will get another chance during a future page view. Iterate forward
// so that older keys are checked first and increase likelihood of recovering
// from key exhaustion.
//
// We don't expect to have more keys than we can handle in 50ms long-task window.
// But, we might still run out of time when other tasks run before this,
// or when the device receives UI events (especially on low-end devices).
for ( var i = 0; ( i < length && deadline.timeRemaining() > MIN_WORK_TIME ); i++ ) {
var key = null;
try {
key = store.key( i );
} catch ( e ) {}
if ( key !== null && key.slice( 0, prefixLength ) === EXPIRY_PREFIX ) {
keys.push( key.slice( prefixLength ) );
}
}
d.resolve( keys );
} );
} ).promise();
};
/**
* @inheritdoc
*/
ve.init.sa.SafeStorage.prototype.isExpired = function ( key ) {
var expiry;
try {
expiry = this.store.getItem( EXPIRY_PREFIX + key );
} catch ( e ) {
return false;
}
return !!expiry && expiry < Math.floor( Date.now() / 1000 );
};
}() );
ve.init.sa.Target.js 0000666 00000003741 15133502065 0010316 0 ustar 00 /*!
* VisualEditor Standalone Initialization Target class.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
/**
* Initialization Standalone target.
*
* A platform must be constructed first. See ve.init.sa.Platform for an example.
*
* @example
* ve.init.platform.initialize().done( function () {
* var target = new ve.init.sa.DesktopTarget();
* target.addSurface(
* ve.dm.converter.getModelFromDom(
* ve.createDocumentFromHtml( '<p>Hello, World!</p>' )
* )
* );
* $( document.body ).append( target.$element );
* } );
*
* @abstract
* @class
* @extends ve.init.Target
*
* @constructor
* @param {Object} [config] Configuration options
* @cfg {Object} [toolbarConfig] Configuration options for the toolbar
*/
ve.init.sa.Target = function VeInitSaTarget( config ) {
config = config || {};
config.toolbarConfig = ve.extendObject( { shadow: true, floatable: true }, config.toolbarConfig );
// Parent constructor
ve.init.sa.Target.super.call( this, config );
this.$element
.addClass( 've-init-sa-target' )
.attr( 'lang', ve.init.platform.getUserLanguages()[ 0 ] );
};
/* Inheritance */
OO.inheritClass( ve.init.sa.Target, ve.init.Target );
/* Methods */
/**
* @inheritdoc
* @fires surfaceReady
*/
ve.init.sa.Target.prototype.addSurface = function () {
// Parent method
var surface = ve.init.sa.Target.super.prototype.addSurface.apply( this, arguments );
this.$element.append( $( '<div>' ).addClass( 've-init-sa-target-surfaceWrapper' ).append( surface.$element ) );
if ( !this.getSurface() ) {
this.setSurface( surface );
}
surface.initialize();
this.emit( 'surfaceReady' );
return surface;
};
/**
* @inheritdoc
*/
ve.init.sa.Target.prototype.setupToolbar = function ( surface ) {
// Parent method
ve.init.sa.Target.super.prototype.setupToolbar.call( this, surface );
this.getToolbar().$element.addClass( 've-init-sa-target-toolbar' );
};
ve.init.sa.DesktopTarget.js 0000666 00000001256 15133502065 0011647 0 ustar 00 /*!
* VisualEditor Standalone Initialization Desktop Target class.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
/**
* Initialization standalone desktop target.
*
* @class
* @extends ve.init.sa.Target
*
* @constructor
* @param {Object} [config] Configuration options
* @cfg {Object} [toolbarConfig] Configuration options for the toolbar
*/
ve.init.sa.DesktopTarget = function VeInitSaDesktopTarget( config ) {
// Parent constructor
ve.init.sa.DesktopTarget.super.call( this, config );
this.$element.addClass( 've-init-sa-desktopTarget' );
};
/* Inheritance */
OO.inheritClass( ve.init.sa.DesktopTarget, ve.init.sa.Target );
styles/ve.init.sa.Platform.css 0000666 00000001645 15133502065 0012354 0 ustar 00 /*!
* VisualEditor Standalone Platform styles.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
.ve-init-notifications {
position: fixed;
top: 1em;
right: 1em;
width: 20em;
z-index: 2;
}
.ve-init-notification-wrapper {
opacity: 0;
-webkit-transform: translateX( 50% );
transform: translateX( 50% );
overflow: hidden;
transition: opacity 250ms ease, transform 250ms ease, height 250ms ease;
}
.ve-init-notification {
cursor: pointer;
background: #fff;
border: 1px solid #ccc;
border-radius: 2px;
box-shadow: 0 2px 2px 0 rgba( 0, 0, 0, 0.25 );
padding: 0.75em 1.5em;
margin-bottom: 1em;
}
.ve-init-notification-title {
font-weight: bold;
}
.ve-init-notification-open {
opacity: 1;
-webkit-transform: translateX( 0 );
transform: translateX( 0 );
}
.ve-init-notification-collapse {
/* stylelint-disable-next-line declaration-no-important */
height: 0 !important;
}
styles/ve.init.sa.css 0000666 00000001047 15133502065 0010565 0 ustar 00 /*!
* VisualEditor Standalone Initialization styles.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
code {
font-family: monospace, monospace;
background: #eee;
}
figure {
display: table;
}
figcaption {
display: table-caption;
caption-side: bottom;
}
/* @noflip */
.ve-align-right {
float: right;
clear: right;
margin: 0.5em 0 1em 1em;
}
/* @noflip */
.ve-align-left {
float: left;
clear: left;
margin: 0.5em 1em 1em 0;
}
.ve-align-center {
margin: 0.5em auto 1em auto;
display: table;
}
ve.init.sa.js 0000666 00000000472 15133502065 0007067 0 ustar 00 /*!
* VisualEditor stand-alone Initialization namespace.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
/**
* Namespace for all VisualEditor stand-alone Initialization classes, static methods and static
* properties.
*
* @class
* @singleton
*/
ve.init.sa = {
};
ve.init.sa.Platform.js 0000666 00000021064 15133502065 0010652 0 ustar 00 /*!
* VisualEditor Standalone Initialization Platform class.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
/**
* Initialization Standalone platform.
*
* @example
* var platform = new ve.init.sa.Platform( ve.messagePaths );
* platform.initialize().done( function () {
* $( document.body ).append( $( '<p>' ).text(
* platform.getMessage( 'visualeditor' )
* ) );
* } );
*
* @class
* @extends ve.init.Platform
*
* @constructor
* @param {string[]} [messagePaths] Message folder paths
*/
ve.init.sa.Platform = function VeInitSaPlatform( messagePaths ) {
// Parent constructor
ve.init.Platform.call( this );
// Properties
this.externalLinkUrlProtocolsRegExp = /^https?:\/\//i;
this.unanchoredExternalLinkUrlProtocolsRegExp = /https?:\/\//i;
this.messagePaths = messagePaths || [];
this.parsedMessages = {};
this.userLanguages = [ 'en' ];
};
/* Inheritance */
OO.inheritClass( ve.init.sa.Platform, ve.init.Platform );
/* Methods */
/** @inheritdoc */
ve.init.sa.Platform.prototype.getExternalLinkUrlProtocolsRegExp = function () {
return this.externalLinkUrlProtocolsRegExp;
};
/** @inheritdoc */
ve.init.sa.Platform.prototype.getUnanchoredExternalLinkUrlProtocolsRegExp = function () {
return this.unanchoredExternalLinkUrlProtocolsRegExp;
};
/** @inheritdoc */
ve.init.sa.Platform.prototype.notify = function ( message, title ) {
var $notification = $( '<div>' ).addClass( 've-init-notification' );
if ( title ) {
$notification.append(
// Never appends strings directly
// eslint-disable-next-line no-jquery/no-append-html
$( '<div>' ).addClass( 've-init-notification-title' ).append(
typeof title === 'string' ? document.createTextNode( title ) : title
)
);
}
$notification.append(
// Never appends strings directly
// eslint-disable-next-line no-jquery/no-append-html
$( '<div>' ).addClass( 've-init-notification-message' ).append(
typeof message === 'string' ? document.createTextNode( message ) : message
)
);
var $notificationWrapper = $( '<div>' ).addClass( 've-init-notification-wrapper' );
$notificationWrapper.append( $notification );
if ( !this.$notifications ) {
this.$notifications = $( '<div>' ).addClass( 've-init-notifications' );
$( document.body ).append( this.$notifications );
}
var closeId;
function remove() {
$notificationWrapper.remove();
}
function collapse() {
$notificationWrapper.addClass( 've-init-notification-collapse' );
setTimeout( remove, 250 );
}
function close() {
clearTimeout( closeId );
$notificationWrapper.removeClass( 've-init-notification-open' );
$notificationWrapper.css( 'height', $notificationWrapper[ 0 ].clientHeight );
setTimeout( collapse, 250 );
}
function open() {
$notificationWrapper.addClass( 've-init-notification-open' );
closeId = setTimeout( close, 5000 );
}
var rAF = window.requestAnimationFrame || setTimeout;
rAF( open );
$notification.on( 'click', close );
this.$notifications.append( $notificationWrapper );
};
/**
* Get message folder paths
*
* @return {string[]} Message folder paths
*/
ve.init.sa.Platform.prototype.getMessagePaths = function () {
return this.messagePaths;
};
/** @inheritdoc */
ve.init.sa.Platform.prototype.addMessages = function ( messages ) {
$.i18n().load( messages, $.i18n().locale );
};
/**
* @method
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getMessage = $.i18n;
/**
* @method
* @inheritdoc
*/
ve.init.sa.Platform.prototype.parseNumber = function ( value ) {
// TODO: Support separated numbers such as (en)123,456.78 or (fr)123.456,78
return parseFloat( value );
};
/**
* @method
* @inheritdoc
*/
ve.init.sa.Platform.prototype.formatNumber = function ( number ) {
return number.toLocaleString();
};
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getHtmlMessage = function ( key ) {
var $message = $( [] ),
lastOffset = 0,
args = arguments,
message = this.getMessage( key );
message.replace( /\$[0-9]+/g, function ( placeholder, offset ) {
$message = $message.add( ve.sanitizeHtml( message.slice( lastOffset, offset ) ) );
var placeholderIndex = +( placeholder.slice( 1 ) );
var arg = args[ placeholderIndex ];
$message = $message.add(
typeof arg === 'string' ?
// Arguments come from the code so shouldn't be sanitized
document.createTextNode( arg ) :
arg
);
lastOffset = offset + placeholder.length;
} );
$message = $message.add( ve.sanitizeHtml( message.slice( lastOffset ) ) );
return $message.toArray();
};
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getConfig = function () {
/* Standalone has no config yet */
return null;
};
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getUserConfig = function ( keys ) {
if ( Array.isArray( keys ) ) {
var values = {};
for ( var i = 0, l = keys.length; i < l; i++ ) {
values[ keys[ i ] ] = this.getUserConfig( keys[ i ] );
}
return values;
} else {
try {
return JSON.parse( localStorage.getItem( 've-' + keys ) );
} catch ( e ) {
return null;
}
}
};
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.setUserConfig = function ( keyOrValueMap, value ) {
if ( typeof keyOrValueMap === 'object' ) {
for ( var i in keyOrValueMap ) {
if ( Object.prototype.hasOwnProperty.call( keyOrValueMap, i ) ) {
if ( !this.setUserConfig( i, keyOrValueMap[ i ] ) ) {
// localStorage will fail if the quota is full, so further
// sets won't work anyway.
return false;
}
}
}
} else {
try {
localStorage.setItem( 've-' + keyOrValueMap, JSON.stringify( value ) );
} catch ( e ) {
return false;
}
}
return true;
};
ve.init.sa.Platform.prototype.createSafeStorage = function ( storage ) {
return new ve.init.sa.SafeStorage( storage );
};
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.addParsedMessages = function ( messages ) {
for ( var key in messages ) {
this.parsedMessages[ key ] = messages[ key ];
}
};
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getParsedMessage = function ( key ) {
if ( Object.prototype.hasOwnProperty.call( this.parsedMessages, key ) ) {
return this.parsedMessages[ key ];
}
// Fallback to regular messages, html escaping applied.
return this.getMessage( key ).replace( /['"<>&]/g, function ( char ) {
return {
'\'': ''',
'"': '"',
'<': '<',
'>': '>',
'&': '&'
}[ char ];
} );
};
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getLanguageCodes = function () {
return Object.keys( $.uls.data.getAutonyms() );
};
/**
* @method
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getLanguageName = $.uls.data.getAutonym;
/**
* @method
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getLanguageAutonym = $.uls.data.getAutonym;
/**
* @method
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getLanguageDirection = $.uls.data.getDir;
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.getUserLanguages = function () {
return this.userLanguages;
};
/**
* @inheritdoc
*/
ve.init.sa.Platform.prototype.initialize = function () {
var messagePaths = this.getMessagePaths(),
locale = $.i18n().locale,
languages = [ locale, 'en' ], // Always use 'en' as the final fallback
languagesCovered = {},
promises = [],
fallbacks = $.i18n.fallbacks[ locale ];
if ( !VisualEditorSupportCheck() ) {
return ve.createDeferred().reject().promise();
}
if ( !fallbacks ) {
// Try to find something that has fallbacks (which means it's a language we know about)
// by stripping things from the end. But collect all the intermediate ones in case we
// go past languages that don't have fallbacks but do exist.
var localeParts = locale.split( '-' );
localeParts.pop();
while ( localeParts.length && !fallbacks ) {
var partialLocale = localeParts.join( '-' );
languages.push( partialLocale );
fallbacks = $.i18n.fallbacks[ partialLocale ];
localeParts.pop();
}
}
if ( fallbacks ) {
languages = languages.concat( fallbacks );
}
this.userLanguages = languages;
for ( var i = 0, iLen = languages.length; i < iLen; i++ ) {
if ( languagesCovered[ languages[ i ] ] ) {
continue;
}
languagesCovered[ languages[ i ] ] = true;
// Lower-case the language code for the filename. jQuery.i18n does not case-fold
// language codes, so we should not case-fold the second argument in #load.
var filename = languages[ i ].toLowerCase() + '.json';
for ( var j = 0, jLen = messagePaths.length; j < jLen; j++ ) {
var deferred = ve.createDeferred();
$.i18n().load( messagePaths[ j ] + filename, languages[ i ] )
.always( deferred.resolve );
promises.push( deferred.promise() );
}
}
return ve.promiseAll( promises );
};
ve.init.sa.MobileTarget.js 0000666 00000003640 15133502065 0011444 0 ustar 00 /*!
* VisualEditor Standalone Initialization Mobile Target class.
*
* @copyright 2011-2020 VisualEditor Team and others; see http://ve.mit-license.org
*/
/**
* Initialization standalone mobile target.
*
* @class
* @extends ve.init.sa.Target
*
* @constructor
* @param {Object} [config] Configuration options
* @cfg {Object} [toolbarConfig] Configuration options for the toolbar
*/
ve.init.sa.MobileTarget = function VeInitSaMobileTarget( config ) {
// Parent constructor
ve.init.sa.MobileTarget.super.call( this, config );
this.$element.addClass( 've-init-mobileTarget' );
};
/* Inheritance */
OO.inheritClass( ve.init.sa.MobileTarget, ve.init.sa.Target );
/* Static Properties */
ve.init.sa.MobileTarget.static.toolbarGroups = [
{
name: 'history',
include: [ 'undo' ]
},
{
name: 'style',
header: OO.ui.deferMsg( 'visualeditor-toolbar-text-style' ),
title: OO.ui.deferMsg( 'visualeditor-toolbar-style-tooltip' ),
label: OO.ui.deferMsg( 'visualeditor-toolbar-style-tooltip' ),
invisibleLabel: true,
type: 'list',
icon: 'textStyle',
include: [ { group: 'textStyle' }, 'language', 'clear' ],
forceExpand: [ 'bold', 'italic', 'clear' ],
promote: [ 'bold', 'italic' ],
demote: [ 'strikethrough', 'code', 'underline', 'language', 'clear' ]
},
{
name: 'link',
include: [ 'link' ]
},
{
name: 'structure',
header: OO.ui.deferMsg( 'visualeditor-toolbar-structure' ),
title: OO.ui.deferMsg( 'visualeditor-toolbar-structure' ),
label: OO.ui.deferMsg( 'visualeditor-toolbar-structure' ),
invisibleLabel: true,
type: 'list',
icon: 'listBullet',
include: [ { group: 'structure' } ],
demote: [ 'outdent', 'indent' ]
},
{
name: 'insert',
header: OO.ui.deferMsg( 'visualeditor-toolbar-insert' ),
title: OO.ui.deferMsg( 'visualeditor-toolbar-insert' ),
label: OO.ui.deferMsg( 'visualeditor-toolbar-insert' ),
invisibleLabel: true,
type: 'list',
icon: 'add',
include: '*'
}
];
Back to Directory
File Manager