Skip to content

Commit

Permalink
play with animation
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Apr 6, 2020
1 parent 6f68bf0 commit 7183324
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 8 deletions.
1 change: 1 addition & 0 deletions src/styles/_vars.scss
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ $lu_hist_color: #c1c1c1;
$lu_engine_grip_gap: 5px !default;
$lu_engine_row_outline_width: 2px !default;
$lu_engine_resize_space: 50px !default;
$lu_engine_resize_animation_duration: 1000ms !default;

$lu_missing_dash_height: 3px !default;
$lu_missing_dash_width: 10px !default;
Expand Down
5 changes: 4 additions & 1 deletion src/styles/engine/_index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@

.#{$lu_css_prefix}-resize-helper {
display: none;
transition: transform 1s linear !important;
}

.#{$lu_css_prefix}-resize-helper.#{$lu_css_prefix}-resize-animated {
transition: transform $lu_engine_resize_animation_duration linear !important;
}

.#{$lu_css_prefix}-resize-helper.#{$lu_css_prefix}-resizing {
Expand Down
5 changes: 5 additions & 0 deletions src/styles/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ export const CSS_PREFIX = getStyle('lu_css_prefix', 'lu');
/** @internal */
export const ENGINE_CSS_PREFIX = 'le';

/** @internal */
export const RESIZE_SPACE = parseInt(getStyle('lu_engine_resize_space', '50px'), 10);
/** @internal */
export const RESIZE_ANIMATION_DURATION = parseInt(getStyle('lu_engine_resize_animation_duration', '1000ms'), 10);

/** @internal */
export function cssClass(suffix?: string) {
return suffix? `${CSS_PREFIX}-${suffix}` : CSS_PREFIX;
Expand Down
7 changes: 5 additions & 2 deletions src/ui/EngineRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,11 @@ export default class EngineRenderer extends AEventDispatcher {
this.table = new MultiTableRowRenderer(this.node, this.idPrefix);

{
const footer = this.table.node.querySelector(`.${engineCssClass('body')} .${engineCssClass('footer')}`);
footer!.insertAdjacentHTML('afterend', `<div class="${engineCssClass('footer')} ${cssClass('resize-helper')}">&nbsp;</div>`);
// helper object for better resizing experience
const footer = this.table.node.querySelector(`.${engineCssClass('body')} .${engineCssClass('footer')}`)!;
const copy = <HTMLElement>footer.cloneNode(true);
copy.classList.add(cssClass('resize-helper'));
footer!.insertAdjacentElement('afterend', copy);
}

//apply rules
Expand Down
12 changes: 7 additions & 5 deletions src/ui/header.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {MIN_LABEL_WIDTH} from '../constants';
import {equalArrays, dragAble, dropAble, hasDnDType, IDropResult} from '../internal';
import {categoryOf, getSortType} from '../model';
import {createNestedDesc, createReduceDesc, createStackDesc, IColumnDesc, isArrayColumn, isBoxPlotColumn, isCategoricalColumn, isMapColumn, isNumberColumn, isNumbersColumn, Column, ImpositionCompositeColumn, ImpositionCompositesColumn, createImpositionDesc, createImpositionsDesc, ImpositionBoxPlotColumn, createImpositionBoxPlotDesc, CompositeColumn, IMultiLevelColumn, isMultiLevelColumn} from '../model';
import {aria, cssClass, engineCssClass} from '../styles';
import {aria, cssClass, engineCssClass, RESIZE_ANIMATION_DURATION, RESIZE_SPACE} from '../styles';
import MoreColumnOptionsDialog from './dialogs/MoreColumnOptionsDialog';
import {IRankingHeaderContext, IToolbarAction, IOnClickHandler} from './interfaces';
import {getToolbar} from './toolbar';
Expand Down Expand Up @@ -308,7 +308,9 @@ export function dragWidth(col: Column, node: HTMLElement) {
start = end;
const width = Math.max(0, col.getWidth() + delta);

sizeHelper.style.transform = `${currentFooterTransformation} translate(${width - originalWidth}px,0)`;
sizeHelper.classList.toggle(cssClass('resize-animated'), width < originalWidth);
// no idea why shifted by the size compared to the other footer element
sizeHelper.style.transform = `${currentFooterTransformation} translate(${width - originalWidth - RESIZE_SPACE}px, 0px)`;

node.style.width = `${width}px`;
col.setWidth(width);
Expand All @@ -327,8 +329,8 @@ export function dragWidth(col: Column, node: HTMLElement) {
ueberElement.classList.remove(cssClass('resizing'));
node.style.width = null;
setTimeout(() => {
sizeHelper.classList.remove(cssClass('resizing'));
}, 1200); // after animation ended
sizeHelper.classList.remove(cssClass('resizing'), cssClass('resize-animated'));
}, RESIZE_ANIMATION_DURATION * 1.2); // after animation ended

if (Math.abs(start - end) < 2) {
//ignore
Expand All @@ -354,7 +356,7 @@ export function dragWidth(col: Column, node: HTMLElement) {

sizeHelper = <HTMLElement>node.closest(`.${engineCssClass()}`)!.querySelector<HTMLElement>(`.${cssClass('resize-helper')}`);
currentFooterTransformation = (<HTMLElement>sizeHelper.previousElementSibling!).style.transform!;
sizeHelper.style.transform = currentFooterTransformation;
sizeHelper.style.transform = `${currentFooterTransformation} translate(${-RESIZE_SPACE}px, 0px)`;
sizeHelper.classList.add(cssClass('resizing'));
};
handle.onclick = (evt) => {
Expand Down

0 comments on commit 7183324

Please sign in to comment.