Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
3a64490
chore(action-strip): Initial stucture of action strip for POC
dkamburov Mar 25, 2020
8a40f5e
feat(action-strip): Implement POC #6941
dkamburov Mar 26, 2020
f4f021d
Merge remote-tracking branch 'origin/master' into dkamburov/action-strip
dkamburov Mar 26, 2020
540ae50
chore(*): Add POC for grid actions component
dkamburov Apr 2, 2020
42534ba
chore(grid-actions): Add POC for grid pinning actions
dkamburov Apr 2, 2020
28f078f
chore(grid-actions): Add POC for grid editing action
dkamburov Apr 2, 2020
a568c75
chore(*): Polish some samples
dkamburov Apr 2, 2020
24bad5e
chore(action-stip): Fix pinning icon and add delete icon
dkamburov Apr 2, 2020
b005dc7
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 2, 2020
2af9d4e
chore(action-strip): Fix build errors with imports
dkamburov Apr 2, 2020
af4eaa5
feat(action-strip): Implement isMenu option #6941
dkamburov Apr 3, 2020
a4bae33
chore(action-strip): Remove grid actions component
dkamburov Apr 3, 2020
ed2669f
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 6, 2020
02a503f
chore(grid-action): Overlap the container of action strip
dkamburov Apr 6, 2020
8668c40
chore(action-strip): Polish the dev samples on action strip
dkamburov Apr 7, 2020
9487c4d
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 8, 2020
b3dd844
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 8, 2020
62a7104
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 9, 2020
271dea5
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 10, 2020
8580056
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 10, 2020
5aeb146
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 14, 2020
6c5b9e0
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 14, 2020
b386f04
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 14, 2020
2d11b18
feat(action-strip): Implement IgxGridActionsBaseDirective #6941
dkamburov Apr 14, 2020
9cd71a9
chore(row-pinning): Populate grid actions as ContentChildren
dkamburov Apr 14, 2020
4c42ea4
chore(action-strip): Remove id input
dkamburov Apr 14, 2020
4883b2a
chore(action-strip): remove isMenu and use igxActionStripMenuItem dir…
dkamburov Apr 14, 2020
1a0920e
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 14, 2020
f28ba0d
chore(*): Fix build error
dkamburov Apr 15, 2020
995174a
chore(action-strip): Remove unused part of the template
dkamburov Apr 15, 2020
8ce3f9b
chore(action-strip): Add buttons for the actions icons
dkamburov Apr 15, 2020
25db780
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 15, 2020
ceb05a1
test(action-strip): Add automation for action-strip #6941
dkamburov Apr 15, 2020
4e0f48f
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 16, 2020
c60939f
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 16, 2020
1a5de6b
test(action-strip): Add automation for action-strip #6941
dkamburov Apr 16, 2020
f7a4d15
fix(action-strip): initial styling
Apr 16, 2020
7fea9eb
Merge branch 'dkamburov/action-strip' of https://github.com/IgniteUI/…
Apr 16, 2020
152f5b4
docs(action-strip): Add changelog about IgxActionStrip
dkamburov Apr 16, 2020
8f058af
docs(action-strip): Add readme for Action Strip
dkamburov Apr 16, 2020
9722fa1
fix(action-strip): final styling
Apr 16, 2020
a045159
Merge branch 'dkamburov/action-strip' of https://github.com/IgniteUI/…
Apr 16, 2020
2a257fd
fix(action-strip): fix sample cell template
Apr 16, 2020
4d56779
chore(action-stip): Fix lint for action strip
dkamburov Apr 16, 2020
d659060
chore(action-strip): Add displayDensity to Action Strip
dkamburov Apr 16, 2020
6916589
chore(action-strip): Do not show the strip for cell template
dkamburov Apr 16, 2020
7f41887
Merge remote-tracking branch 'origin/master' into dkamburov/action-strip
dkamburov Apr 16, 2020
3500db0
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 21, 2020
c0fcdd3
chore(action-strip): Fix failing build for test
dkamburov Apr 21, 2020
6f62be6
chore(action-strip): Fix tests due to restructuring of the template
dkamburov Apr 21, 2020
77cae17
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 21, 2020
dde5a94
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 21, 2020
af45642
chore(action-strip): follow api docs guidelines
dkamburov Apr 21, 2020
61f9f9e
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 21, 2020
e5b4791
chore(action-strip): close menu when hiding ActionStrip and improve s…
dkamburov Apr 21, 2020
7996006
fix(action-strip): remove backdrop-blur since it is not supported in …
Apr 22, 2020
36c72ab
Merge branch 'dkamburov/action-strip' of https://github.com/IgniteUI/…
Apr 22, 2020
fa6e92b
fix(action-strip): Fix sass lint errors
Apr 22, 2020
7d13e73
fix(action-strip): use rem function instead of px val
Apr 22, 2020
0695aaa
feat(action-strip): remove action @Inputs and inject strip to actions…
dkamburov Apr 22, 2020
31454ac
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 22, 2020
fe11a6e
chore(*): Fix build error
dkamburov Apr 22, 2020
4a9d9a6
chore(action-strip): Fix broken build
dkamburov Apr 22, 2020
307c168
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 23, 2020
22d1a5e
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 23, 2020
2cec154
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 23, 2020
7b95234
chore(action-strip): apply review notes
dkamburov Apr 23, 2020
fcd4022
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 23, 2020
31bb73d
chore(action-strip): Remove grid Input in tests
dkamburov Apr 23, 2020
4d66b4c
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 23, 2020
5a61e3d
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 24, 2020
9b07a22
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 24, 2020
d1a0c63
chore(action-strip): Apply review notes
dkamburov Apr 24, 2020
8cea7a8
chore(action-strip): Rename input class
dkamburov Apr 24, 2020
3e272c7
chore(*): fix failing tslint
dkamburov Apr 27, 2020
834498e
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 27, 2020
8f60394
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 27, 2020
61fb0dd
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 27, 2020
49a4942
chore(action-strip): Apply igx-action-strip always
dkamburov Apr 27, 2020
3b49ad8
chore(*): Don't allow editing actions for disabled rows
dkamburov Apr 28, 2020
1d8f893
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 28, 2020
b118281
chore(action-strip): Add @input decorator to the context property
dkamburov Apr 28, 2020
96dfb72
chore(action-strip): Add z-index to overlap column pinning
dkamburov Apr 28, 2020
0a1b043
chore(*): Use CloseScrollStrategy to close the menu when scrolling
dkamburov Apr 28, 2020
200c9dc
chore(*): Remove not needed exports
dkamburov Apr 28, 2020
fd6d6e1
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 28, 2020
1e7b867
chore(*): Revert - "Remove not needed exports"
dkamburov Apr 29, 2020
732df79
chore(*): Fix failing build and typo in tests
dkamburov Apr 29, 2020
6f3f7fe
Merge remote-tracking branch 'origin/master' into dkamburov/action-strip
dkamburov Apr 29, 2020
acb6de5
chore(action-strip): Disable editing actions for ghost rows
dkamburov Apr 29, 2020
638f03d
chore(action-strip): stop propagating click event
dkamburov Apr 29, 2020
b3adfd6
Merge branch 'master' into dkamburov/action-strip
ChronosSF Apr 29, 2020
2ed06bc
chore(action-strip): Close the strip after action from actions component
dkamburov Apr 29, 2020
7c4294a
Merge branch 'master' into dkamburov/action-strip
dkamburov Apr 29, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ All notable changes for each version of this project will be documented in this

### New Features

- `IgxActionStrip` component added.
- Provides a template area for one or more actions. In its simplest form the Action Strip
is an overlay of any container and shows additional content over that container.

```html
<igx-action-strip #actionstrip>
<igx-icon (click)="doSomeAction()"></igx-icon>
</igx-action-strip>
```

- `igxSplitter` component added.
- Allows rendering a vertical or horizontal splitter with multiple splitter panes with templatable content.
Panes can be resized or collapsed/expanded via the UI. Splitter orientation is defined via the `type` input.
Expand Down
78 changes: 78 additions & 0 deletions projects/igniteui-angular/src/lib/action-strip/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# igx-action-strip

The **igx-action-strip** provides a template area for one or more actions.
In its simplest form the Action Strip is an overlay of any container and shows additional content over that container.
A walk-through of how to get started can be found [here](https://www.infragistics.com/products/ignite-ui-angular/angular/components/action_strip.html)

# Usage
The Action Strip can be initialized in any HTML element that can contain elements. This parent element should be with a relative position as the action strip is trying to overlay it. Interactions with the parent and its content are available while the action strip is shown.
```html
<igx-action-strip #actionstrip>
<igx-icon (click)="doSomeAction()"></igx-icon>
</igx-action-strip>
```

# Grid Action Components
Action strip provides functionality and UI for IgxGrid. All that can be utilized with grid action components. These components inherit `IgxGridActionsBaseDirective` and when creating a custom grid action component, this component should also inherit `IgxGridActionsBaseDirective`.

```html
<igx-action-strip #actionstrip>
<igx-grid-editing-actions [grid]="grid1"></igx-grid-editing-actions>
<igx-grid-pinning-actions [grid]="grid1"></igx-grid-pinning-actions>
</igx-action-strip>
```

# IgxActionStripMenuItem

The Action Strip can show items as menu. This is achieved with `igxActionStripMenuItem` directive applied to its content. Action strip will render three-dot button that toggles a drop down. And the content will be those items that are marked with `igxActionStripMenuItem` directive.

```html
<igx-action-strip #actionStrip1>
<span *IgxActionStripMenuItem>Copy</span>
<span *IgxActionStripMenuItem>Paste</span>
<span *IgxActionStripMenuItem>Edit</span>
</igx-action-strip>
```
# API Summary

## Inputs
`IgxActionStripComponent`

| Name | Description | Type | Default value |
|-----------------|---------------------------------------------------|-----------------------------|---------------|
| hidden | An @Input property that sets the visibility of the Action Strip. | boolean | `false` |
| context | Sets the context of an action strip. The context should be an instance of a @Component, that has element property. This element will be the placeholder of the action strip. | any | |

`IgxGridActionsBaseDirective` ( `IgxGridPinningActionsComponent`, `IgxGridEditingActionsComponent`)

| Name | Description | Type | Default value |
|-----------------|---------------------------------------------------|-----------------------------|---------------|
| grid | Set an instance of the grid for which to display the actions. | any | |
| context | Sets the context of an action strip. The context is expected to be grid cell or grid row | any | |

## Outputs
|Name|Description|Cancelable|Parameters|
|--|--|--|--|
| onMenuOpening | Emitted before the menu is opened | true | |
| onMenuOpened | Emitted after the menu is opened | false | |

## Methods

`IgxActionStripComponent`

| Name | Description | Return type | Parameters |
|----------|----------------------------|---------------------------------------------------|----------------------|
| show | Showing the Action Strip and appending it the specified context element. | void | context |
| hide | Hiding the Action Strip and removing it from its current context element. | void | |

`IgxGridPinningActionsComponent`
| Name | Description | Return type | Parameters |
|----------|----------------------------|---------------------------------------------------|----------------------|
| pin | Pin the row according to the context. | void | |
| unpin | Unpin the row according to the context. | void | |

`IgxGridPinningActionsComponent`
| Name | Description | Return type | Parameters |
|----------|----------------------------|---------------------------------------------------|----------------------|
| startEdit | Enter row or cell edit mode depending the grid `rowEdibable` option | void | |
| deleteRow | Delete a row according to the context | void | |
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<div class="igx-action-strip__actions">
<ng-content #content></ng-content>
<ng-container *ngIf="menuItems.length > 0">
<button igxButton="icon" igxRipple [igxToggleAction]="dropdown"
[overlaySettings]="menuOverlaySettings" (click)="$event.stopPropagation()"
[igxDropDownItemNavigation]="dropdown">
<igx-icon>more_vert</igx-icon>
</button>
<igx-drop-down #dropdown>
<igx-drop-down-item *ngFor="let item of menuItems">
<div class="igx-drop-down__item-template">
<ng-container *ngTemplateOutlet="item.templateRef; context: {$implicit: item}"></ng-container>
</div>
</igx-drop-down-item>
</igx-drop-down>
</ng-container>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
import { IgxActionStripComponent } from './action-strip.component';
import { Component, ViewChild, ElementRef, ViewContainerRef } from '@angular/core';
import { configureTestSuite } from '../test-utils/configure-suite';
import { TestBed, async } from '@angular/core/testing';
import { IgxIconModule } from '../icon';
import { By } from '@angular/platform-browser';
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { IgxToggleModule } from '../directives/toggle/toggle.directive';
import { IgxActionStripModule } from './action-strip.module';

const ACTION_STRIP_CONTAINER_CSS = 'igx-action-strip__actions';
const DROP_DOWN_LIST = 'igx-drop-down__list';

describe('igxActionStrip', () => {
let fixture;
let actionStrip: IgxActionStripComponent;
let actionStripElement: ElementRef;
let parentContainer: ElementRef;
let innerContainer: ViewContainerRef;

describe('Unit tests: ', () => {
const mockViewContainerRef = jasmine.createSpyObj('ViewContainerRef', ['element']);
const mockRenderer2 = jasmine.createSpyObj('Renderer2', ['appendChild', 'removeChild']);
const mockContext = jasmine.createSpyObj('context', ['element']);
const mockDisplayDensity = jasmine.createSpyObj('IDisplayDensityOptions', ['displayDensity']);

it('should properly get/set hidden', () => {
actionStrip = new IgxActionStripComponent(mockViewContainerRef, mockRenderer2, mockDisplayDensity);
expect(actionStrip.hidden).toBeFalsy();
actionStrip.hidden = true;
expect(actionStrip.hidden).toBeTruthy();
});

it('should properly show and hide using API', () => {
actionStrip = new IgxActionStripComponent(mockViewContainerRef, mockRenderer2, mockDisplayDensity);
actionStrip.show(mockContext);
expect(actionStrip.hidden).toBeFalsy();
expect(actionStrip.context).toBe(mockContext);
actionStrip.hide();
expect(actionStrip.hidden).toBeTruthy();
});
});

describe('Initialization and rendering tests: ', () => {
configureTestSuite();
beforeAll(async(() => {
TestBed.configureTestingModule({
declarations: [
IgxActionStripTestingComponent
],
imports: [
IgxActionStripModule,
IgxIconModule
]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(IgxActionStripTestingComponent);
fixture.detectChanges();
actionStrip = fixture.componentInstance.actionStrip;
actionStripElement = fixture.componentInstance.actionStripElement;
parentContainer = fixture.componentInstance.parentContainer;
innerContainer = fixture.componentInstance.innerContainer;
});
it('should be overlapping its parent container when no context is applied', () => {
const parentBoundingRect = parentContainer.nativeElement.getBoundingClientRect();
const actionStripBoundingRect = actionStripElement.nativeElement.getBoundingClientRect();
expect(parentBoundingRect.top).toBe(actionStripBoundingRect.top);
expect(parentBoundingRect.bottom).toBe(actionStripBoundingRect.bottom);
expect(parentBoundingRect.left).toBe(actionStripBoundingRect.left);
expect(parentBoundingRect.right).toBe(actionStripBoundingRect.right);
});

it('should be overlapping context.element when context is applied', () => {
actionStrip.show(innerContainer);
fixture.detectChanges();
const innerBoundingRect = innerContainer.element.nativeElement.getBoundingClientRect();
const actionStripBoundingRect = actionStripElement.nativeElement.getBoundingClientRect();
expect(innerBoundingRect.top).toBe(actionStripBoundingRect.top);
expect(innerBoundingRect.bottom).toBe(actionStripBoundingRect.bottom);
expect(innerBoundingRect.left).toBe(actionStripBoundingRect.left);
expect(innerBoundingRect.right).toBe(actionStripBoundingRect.right);
});

it('should allow interacting with the content elements', () => {
const asIcon = fixture.debugElement.query(By.css('.asIcon'));
asIcon.triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
expect(fixture.componentInstance.flag).toBeTruthy();
});

it('should not display the action strip when setting it hidden', () => {
actionStrip.hidden = true;
fixture.detectChanges();
const asQuery = fixture.debugElement.query(By.css('igx-action-strip'));
expect(asQuery.nativeElement.style.display).toBe('none');
});
});

describe('render content as menu', () => {
configureTestSuite();
beforeAll(async(() => {
TestBed.configureTestingModule({
declarations: [
IgxActionStripMenuTestingComponent,
IgxActionStripCombinedMenuTestingComponent
],
imports: [
IgxActionStripModule,
IgxIconModule,
NoopAnimationsModule,
IgxToggleModule
]
}).compileComponents();
}));

it('should render tree-dot button which toggles the content as menu', () => {
fixture = TestBed.createComponent(IgxActionStripMenuTestingComponent);
fixture.detectChanges();
actionStrip = fixture.componentInstance.actionStrip;
const actionStripContainer = fixture.debugElement.query(By.css(`.${ACTION_STRIP_CONTAINER_CSS}`));
// there should be one rendered child and one hidden dropdown
expect(actionStripContainer.nativeElement.children.length).toBe(2);
let dropDownList = fixture.debugElement.query(By.css(`.${DROP_DOWN_LIST}`));
expect(dropDownList.nativeElement.getAttribute('aria-hidden')).toBe('true');
const icon = fixture.debugElement.query(By.css(`igx-icon`));
icon.parent.triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
dropDownList = fixture.debugElement.query(By.css(`.${DROP_DOWN_LIST}`));
expect(dropDownList.nativeElement.getAttribute('aria-hidden')).toBe('false');
const dropDownItems = dropDownList.queryAll(By.css('igx-drop-down-item'));
expect(dropDownItems.length).toBe(3);
});

it('should emit onMenuOpen/onMenuOpening when toggling the menu', () => {
pending('implementation');
});

it('should allow combining content outside and inside the menu', () => {
fixture = TestBed.createComponent(IgxActionStripCombinedMenuTestingComponent);
fixture.detectChanges();
actionStrip = fixture.componentInstance.actionStrip;
const actionStripContainer = fixture.debugElement.query(By.css(`.${ACTION_STRIP_CONTAINER_CSS}`));
// there should be one rendered child and one hidden dropdown and one additional icon
expect(actionStripContainer.nativeElement.children.length).toBe(3);
let dropDownList = fixture.debugElement.query(By.css(`.${DROP_DOWN_LIST}`));
expect(dropDownList.nativeElement.getAttribute('aria-hidden')).toBe('true');
const icon = fixture.debugElement.query(By.css(`igx-icon`));
icon.parent.triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
dropDownList = fixture.debugElement.query(By.css(`.${DROP_DOWN_LIST}`));
expect(dropDownList.nativeElement.getAttribute('aria-hidden')).toBe('false');
const dropDownItems = dropDownList.queryAll(By.css('igx-drop-down-item'));
expect(dropDownItems.length).toBe(2);
});

it('should close the menu when hiding action strip', async() => {
fixture = TestBed.createComponent(IgxActionStripCombinedMenuTestingComponent);
fixture.detectChanges();
actionStrip = fixture.componentInstance.actionStrip;
// there should be one rendered child and one hidden dropdown and one additional icon
const icon = fixture.debugElement.query(By.css(`igx-icon`));
icon.parent.triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
let dropDownList = fixture.debugElement.query(By.css(`.${DROP_DOWN_LIST}`));
expect(dropDownList.nativeElement.getAttribute('aria-hidden')).toBe('false');
actionStrip.hide();
await wait();
fixture.detectChanges();
dropDownList = fixture.debugElement.query(By.css(`.${DROP_DOWN_LIST}`));
expect(dropDownList.nativeElement.getAttribute('aria-hidden')).toBe('true');
});
});
});

@Component({
template: `
<div #parent style="position:relative; height: 200px; width: 400px;">
<div #inner style="position:relative; height: 100px; width: 200px;">
<p>
Lorem ipsum dolor sit
</p>
</div>
<igx-action-strip #actionStrip>
<igx-icon class="asIcon" (click)="onIconClick()">alarm</igx-icon>
</igx-action-strip>
</div>
`
})
class IgxActionStripTestingComponent {
@ViewChild('actionStrip', { read: IgxActionStripComponent, static: true })
public actionStrip: IgxActionStripComponent;

@ViewChild('actionStrip', { read: ElementRef, static: true })
public actionStripElement: ElementRef;

@ViewChild('parent', { static: true })
public parentContainer: ElementRef;

@ViewChild('inner', { read: ViewContainerRef, static: true })
public innerContainer: ViewContainerRef;

public flag = false;

onIconClick() {
this.flag = true;
}
}

@Component({
template: `
<div #parent style="position:relative; height: 200px; width: 400px;">
<div>
<p>
Lorem ipsum dolor sit
</p>
</div>
<igx-action-strip #actionStrip>
<span *igxActionStripMenuItem>Mark</span>
<span *igxActionStripMenuItem>Favorite</span>
<span *igxActionStripMenuItem>Download</span>
</igx-action-strip>
</div>
`
})
class IgxActionStripMenuTestingComponent {
@ViewChild('actionStrip', { read: IgxActionStripComponent, static: true })
public actionStrip: IgxActionStripComponent;
}

@Component({
template: `
<div #parent style="position:relative; height: 200px; width: 400px;">
<div>
<p>
Lorem ipsum dolor sit
</p>
</div>
<igx-action-strip #actionStrip>
<span>Mark</span>
<span *igxActionStripMenuItem>Favorite</span>
<span *igxActionStripMenuItem>Download</span>
</igx-action-strip>
</div>
`
})
class IgxActionStripCombinedMenuTestingComponent {
@ViewChild('actionStrip', { read: IgxActionStripComponent, static: true })
public actionStrip: IgxActionStripComponent;
}
Loading