Skip to content

Commit 224dae3

Browse files
authored
Merge pull request #339 from swiety85/201-responsivenes-base-on-container-width
Responsiveness base on container width
2 parents 12d1723 + 3aab09c commit 224dae3

File tree

5 files changed

+34
-15
lines changed

5 files changed

+34
-15
lines changed

projects/angular2gridster/src/lib/GridsterOptions.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export class GridsterOptions {
1010
heightToFontSizeRatio: number;
1111
responsiveView: boolean;
1212
responsiveSizes: boolean;
13+
responsiveToParent: boolean;
1314
dragAndDrop: boolean;
1415
resizable: boolean;
1516
shrink: boolean;
@@ -23,6 +24,7 @@ export class GridsterOptions {
2324
shrink: false,
2425
responsiveView: true,
2526
responsiveSizes: false,
27+
responsiveToParent: false,
2628
dragAndDrop: true,
2729
resizable: false,
2830
useCSSTransforms: false,
@@ -42,16 +44,17 @@ export class GridsterOptions {
4244
xl: 1200 // Extra large
4345
};
4446

45-
constructor(config: IGridsterOptions) {
46-
this.basicOptions = config;
47+
constructor(config: IGridsterOptions, gridsterElement: HTMLElement) {
48+
const responsiveContainer = config.responsiveToParent ? gridsterElement : window;
4749

50+
this.basicOptions = config;
4851
this.responsiveOptions = this.extendResponsiveOptions(config.responsiveOptions || []);
4952

5053
this.change = merge(
51-
of(this.getOptionsByWidth(document.documentElement.clientWidth)),
54+
of(this.getOptionsByWidth(this.getElementWidth(responsiveContainer))),
5255
fromEvent(window, 'resize').pipe(
5356
debounceTime(config.responsiveDebounce || 0),
54-
map((event: Event) => this.getOptionsByWidth(document.documentElement.clientWidth))
57+
map((event: Event) => this.getOptionsByWidth(this.getElementWidth(responsiveContainer)))
5558
)
5659
).pipe(distinctUntilChanged(null, (options: any) => options.minWidth));
5760
}
@@ -83,4 +86,12 @@ export class GridsterOptions {
8386
.sort((curr, next) => curr.minWidth - next.minWidth)
8487
.map((options) => <IGridsterOptions>Object.assign({}, this.defaults, this.basicOptions, options));
8588
}
89+
90+
private getElementWidth($element: any) {
91+
if ($element === window) {
92+
return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
93+
}
94+
95+
return $element.clientWidth;
96+
}
8697
}

projects/angular2gridster/src/lib/IGridsterOptions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export interface IGridsterOptions {
2121
responsiveView?: boolean;
2222
responsiveDebounce?: number;
2323
responsiveSizes?: boolean;
24+
responsiveToParent?: boolean;
2425
lines?: {
2526
visible?: boolean,
2627
color?: string,

projects/angular2gridster/src/lib/gridster.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export class GridsterComponent implements OnInit, AfterContentInit, OnDestroy {
109109
}
110110

111111
ngOnInit() {
112-
this.gridsterOptions = new GridsterOptions(this.options);
112+
this.gridsterOptions = new GridsterOptions(this.options, this.$element);
113113

114114
if (this.options.useCSSTransforms) {
115115
this.$element.classList.add('css-transform');

src/app/app.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,10 @@ <h5 class="panel-title">{{ widget.title }}</h5>
133133
<label>
134134
<input type="checkbox" [(ngModel)]="widget.resizable" value="true"> Resizable
135135
</label>
136-
<button (click)="setWidth(widget, widget.w+1, $event, gridster1)">width +</button>
137-
<button (click)="setWidth(widget, widget.w-1, $event, gridster1)">width -</button>
138-
<button (click)="setHeight(widget, widget.h+1, $event, gridster1)">height +</button>
139-
<button (click)="setHeight(widget, widget.h-1, $event, gridster1)">height -</button>
136+
<button (click)="setWidth(widget, 1, $event, gridster1)">width +</button>
137+
<button (click)="setWidth(widget, -1, $event, gridster1)">width -</button>
138+
<button (click)="setHeight(widget, 1, $event, gridster1)">height +</button>
139+
<button (click)="setHeight(widget, -1, $event, gridster1)">height -</button>
140140
</p>
141141
<p>
142142
<button (click)="remove($event, indx,gridster1)">remove</button>

src/app/app.component.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export class AppComponent implements OnInit {
6464
responsiveView: true, // turn on adopting items sizes on window resize and enable responsiveOptions
6565
responsiveDebounce: 500, // window resize debounce time
6666
responsiveSizes: true,
67+
responsiveToParent: true,
6768
// List of different gridster configurations for different breakpoints.
6869
// Each breakpoint is defined by name stored in "breakpoint" property. There is fixed set of breakpoints
6970
// available to use with default minWidth assign to each.
@@ -183,10 +184,13 @@ export class AppComponent implements OnInit {
183184
setWidth(widget: any, size: number, e: MouseEvent, gridster) {
184185
e.stopPropagation();
185186
e.preventDefault();
186-
if (size < 1) {
187-
size = 1;
187+
188+
const breakpoint = gridster.options.breakpoint;
189+
let newWidth = widget[AppComponent.W_PROPERTY_MAP[breakpoint] || 'w'] + size;
190+
if (newWidth < 1) {
191+
newWidth = 1;
188192
}
189-
widget.w = size;
193+
widget[AppComponent.W_PROPERTY_MAP[breakpoint] || 'w'] = newWidth;
190194

191195
gridster.reload();
192196

@@ -196,10 +200,13 @@ export class AppComponent implements OnInit {
196200
setHeight(widget: any, size: number, e: MouseEvent, gridster) {
197201
e.stopPropagation();
198202
e.preventDefault();
199-
if (size < 1) {
200-
size = 1;
203+
204+
const breakpoint = gridster.options.breakpoint;
205+
let newHeight = widget[AppComponent.H_PROPERTY_MAP[breakpoint] || 'h'] + size;
206+
if (newHeight < 1) {
207+
newHeight = 1;
201208
}
202-
widget.h = size;
209+
widget[AppComponent.H_PROPERTY_MAP[breakpoint] || 'h'] = newHeight;
203210

204211
gridster.reload();
205212

0 commit comments

Comments
 (0)