%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/vendor/oojs/oojs-ui/demos/classes/ |
| Current File : /www/varak.net/wiki.varak.net/vendor/oojs/oojs-ui/demos/classes/FloatableTest.js |
Demo.FloatableTest = function DemoFloatableTest( config ) {
// Parent constructor
Demo.FloatableTest.parent.call( this, config );
// Properties
// Must be equal to dialog width and height
this.viewportSize = 500;
// Width and height of scrollable area
this.outerSize = 1000;
// Width and height of scrollable container
this.innerSize = 400;
};
OO.inheritClass( Demo.FloatableTest, OO.ui.ProcessDialog );
Demo.FloatableTest.static.title = 'FloatableElement test';
Demo.FloatableTest.static.actions = [
{ action: '', label: 'Cancel', flags: [ 'safe', 'back' ] },
{ action: 'center', label: 'Center view' }
];
Demo.FloatableTest.prototype.getBodyHeight = function () {
return this.viewportSize;
};
Demo.FloatableTest.prototype.initialize = function () {
Demo.FloatableTest.parent.prototype.initialize.apply( this, arguments );
this.$container = $( '<div>' ).css( { width: this.outerSize, height: this.outerSize } );
this.selectWidget = new Demo.PositionSelectWidget();
this.toggleOverlayWidget = new OO.ui.ToggleSwitchWidget( { value: true } );
this.toggleClippingWidget = new OO.ui.ToggleSwitchWidget( { value: false } );
this.$floatableContainer = $( '<div>' ).css( { width: this.innerSize, height: this.innerSize } );
this.floatable = new Demo.FloatableWidget( { $floatableContainer: this.$floatableContainer } );
this.floatable.toggle( false );
this.floatable.$element.addClass( 'demo-floatableTest-floatable' );
this.$floatableContainer.addClass( 'demo-floatableTest-container' );
this.selectWidget.connect( this, { select: 'onSelectPosition' } );
this.toggleOverlayWidget.connect( this, { change: 'onToggleOverlay' } );
this.toggleClippingWidget.connect( this, { change: 'onToggleClipping' } );
this.fieldset = new OO.ui.FieldsetLayout( {
items: [
new OO.ui.FieldLayout( this.selectWidget, {
align: 'top',
label: 'Floatable position'
} ),
new OO.ui.FieldLayout( this.toggleClippingWidget, {
align: 'inline',
label: 'Enable clipping'
} ),
new OO.ui.FieldLayout( this.toggleOverlayWidget, {
align: 'inline',
label: 'Use overlay'
} )
]
} );
this.$body.append(
this.$container.append(
this.$floatableContainer.append( this.fieldset.$element )
)
);
this.$overlay.append( this.floatable.$element );
};
Demo.FloatableTest.prototype.onSelectPosition = function ( option ) {
this.floatable.setHorizontalPosition( option.getData().horizontalPosition );
this.floatable.setVerticalPosition( option.getData().verticalPosition );
};
Demo.FloatableTest.prototype.onToggleOverlay = function ( useOverlay ) {
this.floatable.togglePositioning( false );
this.floatable.toggleClipping( false );
( useOverlay ? this.$overlay : this.$container ).append( this.floatable.$element );
this.floatable.togglePositioning( true );
this.floatable.toggleClipping( this.toggleClippingWidget.getValue() );
};
Demo.FloatableTest.prototype.onToggleClipping = function ( useClipping ) {
this.floatable.toggleClipping( useClipping );
};
Demo.FloatableTest.prototype.centerView = function () {
var offset = ( this.outerSize - this.viewportSize ) / 2;
this.$body[ 0 ].scrollTop = offset;
// Different browsers count scrollLeft in RTL differently,
// see <https://github.com/othree/jquery.rtl-scroll-type>.
// This isn't correct for arbitrary offsets, but works for centering.
this.$body[ 0 ].scrollLeft = offset;
if ( this.$body[ 0 ].scrollLeft === 0 ) {
this.$body[ 0 ].scrollLeft = -offset;
}
};
Demo.FloatableTest.prototype.getSetupProcess = function () {
return Demo.FloatableTest.parent.prototype.getSetupProcess.call( this ).next( function () {
var offset, side;
offset = ( this.outerSize - this.innerSize ) / 2;
side = this.getDir() === 'rtl' ? 'right' : 'left';
this.$floatableContainer.css( 'top', offset );
this.$floatableContainer.css( side, offset );
this.selectWidget.selectItemByData( {
horizontalPosition: 'start',
verticalPosition: 'below'
} );
}, this );
};
Demo.FloatableTest.prototype.getReadyProcess = function () {
return new OO.ui.Process( function () {
this.centerView();
this.floatable.toggle( true );
this.floatable.togglePositioning( true );
this.floatable.toggleClipping( this.toggleClippingWidget.getValue() );
}, this );
};
Demo.FloatableTest.prototype.getHoldProcess = function () {
return new OO.ui.Process( function () {
this.floatable.toggleClipping( false );
this.floatable.togglePositioning( false );
this.floatable.toggle( false );
}, this );
};
Demo.FloatableTest.prototype.getActionProcess = function ( action ) {
if ( action === 'center' ) {
return new OO.ui.Process( function () {
this.centerView();
}, this );
}
return Demo.FloatableTest.parent.prototype.getActionProcess.call( this, action );
};