Skip to content

Commit 0420729

Browse files
jelbournmmalerba
authored andcommitted
chore: make compatibility mode work for apps with multiple modules (#2093)
1 parent 9b644c7 commit 0420729

File tree

32 files changed

+328
-240
lines changed

32 files changed

+328
-240
lines changed

src/lib/autocomplete/index.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
import {ModuleWithProviders, NgModule} from '@angular/core';
2-
import {
3-
MdOptionModule, OverlayModule, OVERLAY_PROVIDERS, DefaultStyleCompatibilityModeModule
4-
} from '../core';
2+
import {MdOptionModule, OverlayModule, OVERLAY_PROVIDERS, CompatibilityModule} from '../core';
53
import {MdAutocomplete} from './autocomplete';
64
import {MdAutocompleteTrigger} from './autocomplete-trigger';
75
export * from './autocomplete';
86
export * from './autocomplete-trigger';
97

108
@NgModule({
11-
imports: [MdOptionModule, OverlayModule, DefaultStyleCompatibilityModeModule],
12-
exports: [
13-
MdAutocomplete, MdOptionModule, MdAutocompleteTrigger, DefaultStyleCompatibilityModeModule
14-
],
9+
imports: [MdOptionModule, OverlayModule, CompatibilityModule],
10+
exports: [MdAutocomplete, MdOptionModule, MdAutocompleteTrigger, CompatibilityModule],
1511
declarations: [MdAutocomplete, MdAutocompleteTrigger],
1612
})
1713
export class MdAutocompleteModule {

src/lib/button-toggle/button-toggle.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import {Observable} from 'rxjs/Observable';
2323
import {
2424
UniqueSelectionDispatcher,
2525
coerceBooleanProperty,
26-
DefaultStyleCompatibilityModeModule,
2726
UNIQUE_SELECTION_DISPATCHER_PROVIDER,
27+
CompatibilityModule,
2828
} from '../core';
2929

3030
/** Acceptable types for a button toggle. */
@@ -53,7 +53,7 @@ export class MdButtonToggleChange {
5353

5454
/** Exclusive selection button toggle group that behaves like a radio-button group. */
5555
@Directive({
56-
selector: 'md-button-toggle-group:not([multiple])',
56+
selector: 'md-button-toggle-group:not([multiple]), mat-button-toggle-group:not([multiple])',
5757
providers: [MD_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],
5858
host: {
5959
'role': 'radiogroup',
@@ -242,7 +242,7 @@ export class MdButtonToggleGroup implements AfterViewInit, ControlValueAccessor
242242

243243
/** Multiple selection button-toggle group. `ngModel` is not supported in this mode. */
244244
@Directive({
245-
selector: 'md-button-toggle-group[multiple]',
245+
selector: 'md-button-toggle-group[multiple], mat-button-toggle-group[multiple]',
246246
exportAs: 'mdButtonToggleGroup',
247247
host: {
248248
'[class.md-button-toggle-vertical]': 'vertical'
@@ -464,12 +464,12 @@ export class MdButtonToggle implements OnInit {
464464

465465

466466
@NgModule({
467-
imports: [FormsModule, DefaultStyleCompatibilityModeModule],
467+
imports: [FormsModule, CompatibilityModule],
468468
exports: [
469469
MdButtonToggleGroup,
470470
MdButtonToggleGroupMultiple,
471471
MdButtonToggle,
472-
DefaultStyleCompatibilityModeModule,
472+
CompatibilityModule,
473473
],
474474
declarations: [MdButtonToggleGroup, MdButtonToggleGroupMultiple, MdButtonToggle],
475475
providers: [UNIQUE_SELECTION_DISPATCHER_PROVIDER]

src/lib/button/button.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
ModuleWithProviders,
1111
} from '@angular/core';
1212
import {CommonModule} from '@angular/common';
13-
import {MdRippleModule, coerceBooleanProperty, DefaultStyleCompatibilityModeModule} from '../core';
13+
import {MdRippleModule, coerceBooleanProperty, CompatibilityModule} from '../core';
1414

1515

1616
// TODO(jelbourn): Make the `isMouseDown` stuff done with one global listener.
@@ -21,8 +21,10 @@ import {MdRippleModule, coerceBooleanProperty, DefaultStyleCompatibilityModeModu
2121
*/
2222
@Component({
2323
moduleId: module.id,
24-
selector: 'button[md-button], button[md-raised-button], button[md-icon-button], ' +
25-
'button[md-fab], button[md-mini-fab]',
24+
selector: 'button[md-button], button[md-raised-button], button[md-icon-button],' +
25+
'button[md-fab], button[md-mini-fab],' +
26+
'button[mat-button], button[mat-raised-button], button[mat-icon-button],' +
27+
'button[mat-fab], button[mat-mini-fab]',
2628
host: {
2729
'[disabled]': 'disabled',
2830
'[class.md-button-focus]': '_isKeyboardFocused',
@@ -120,7 +122,8 @@ export class MdButton {
120122
*/
121123
@Component({
122124
moduleId: module.id,
123-
selector: 'a[md-button], a[md-raised-button], a[md-icon-button], a[md-fab], a[md-mini-fab]',
125+
selector: `a[md-button], a[md-raised-button], a[md-icon-button], a[md-fab], a[md-mini-fab],
126+
a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab]`,
124127
inputs: ['color', 'disabled', 'disableRipple'],
125128
host: {
126129
'[attr.disabled]': 'disabled',
@@ -161,8 +164,8 @@ export class MdAnchor extends MdButton {
161164

162165

163166
@NgModule({
164-
imports: [CommonModule, MdRippleModule, DefaultStyleCompatibilityModeModule],
165-
exports: [MdButton, MdAnchor, DefaultStyleCompatibilityModeModule],
167+
imports: [CommonModule, MdRippleModule, CompatibilityModule],
168+
exports: [MdButton, MdAnchor, CompatibilityModule],
166169
declarations: [MdButton, MdAnchor],
167170
})
168171
export class MdButtonModule {

src/lib/card/card.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
ChangeDetectionStrategy,
77
Directive
88
} from '@angular/core';
9-
import {DefaultStyleCompatibilityModeModule} from '../core';
9+
import {CompatibilityModule} from '../core';
1010

1111

1212
/**
@@ -101,7 +101,7 @@ export class MdCardTitleGroup {}
101101

102102

103103
@NgModule({
104-
imports: [DefaultStyleCompatibilityModeModule],
104+
imports: [CompatibilityModule],
105105
exports: [
106106
MdCard,
107107
MdCardHeader,
@@ -111,7 +111,7 @@ export class MdCardTitleGroup {}
111111
MdCardSubtitle,
112112
MdCardActions,
113113
MdCardFooter,
114-
DefaultStyleCompatibilityModeModule,
114+
CompatibilityModule,
115115
],
116116
declarations: [
117117
MdCard, MdCardHeader, MdCardTitleGroup, MdCardContent, MdCardTitle, MdCardSubtitle,

src/lib/checkbox/checkbox.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
import {CommonModule} from '@angular/common';
1717
import {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';
1818
import {coerceBooleanProperty} from '../core/coercion/boolean-property';
19-
import {MdRippleModule, DefaultStyleCompatibilityModeModule} from '../core';
19+
import {MdRippleModule, CompatibilityModule} from '../core';
2020

2121

2222
/** Monotonically increasing integer used to auto-generate unique ids for checkbox components. */
@@ -403,8 +403,8 @@ export class MdCheckbox implements ControlValueAccessor {
403403

404404

405405
@NgModule({
406-
imports: [CommonModule, MdRippleModule, DefaultStyleCompatibilityModeModule],
407-
exports: [MdCheckbox, DefaultStyleCompatibilityModeModule],
406+
imports: [CommonModule, MdRippleModule, CompatibilityModule],
407+
exports: [MdCheckbox, CompatibilityModule],
408408
declarations: [MdCheckbox],
409409
})
410410
export class MdCheckboxModule {

src/lib/chips/chip-list.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {SPACE, LEFT_ARROW, RIGHT_ARROW} from '../core/keyboard/keycodes';
2828
*/
2929
@Component({
3030
moduleId: module.id,
31-
selector: 'md-chip-list',
31+
selector: 'md-chip-list, mat-chip-list',
3232
template: `<div class="md-chip-list-wrapper"><ng-content></ng-content></div>`,
3333
host: {
3434
// Properties

src/lib/chips/chip.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export interface MdChipEvent {
2020
* Material design styled Chip component. Used inside the MdChipList component.
2121
*/
2222
@Component({
23-
selector: 'md-basic-chip, [md-basic-chip], md-chip, [md-chip]',
23+
selector: `md-basic-chip, [md-basic-chip], md-chip, [md-chip],
24+
mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]`,
2425
template: `<ng-content></ng-content>`,
2526
host: {
2627
'tabindex': '-1',

src/lib/core/compatibility/compatibility.spec.ts

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
1-
import {Component} from '@angular/core';
1+
import {Component, NgModule} from '@angular/core';
22
import {async, TestBed} from '@angular/core/testing';
33
import {MdCheckboxModule} from '../../checkbox/checkbox';
4-
import {NoConflictStyleCompatibilityMode} from './no-conflict-mode';
4+
import {
5+
NoConflictStyleCompatibilityMode,
6+
MAT_ELEMENTS_SELECTOR,
7+
MD_ELEMENTS_SELECTOR
8+
} from './compatibility';
59

610

711
describe('Style compatibility', () => {
812

13+
describe('selectors', () => {
14+
it('should have the same selectors in the same order for compatibility mode', () => {
15+
expect(MAT_ELEMENTS_SELECTOR.replace(/(\s|\[)mat/g, '$1md').trim())
16+
.toBe(MD_ELEMENTS_SELECTOR.trim());
17+
expect(MD_ELEMENTS_SELECTOR.replace(/(\s|\[)md/g, '$1mat').trim())
18+
.toBe(MAT_ELEMENTS_SELECTOR.trim());
19+
});
20+
});
21+
922
describe('in default mode', () => {
1023
beforeEach(async(() => {
1124
TestBed.configureTestingModule({
@@ -45,6 +58,26 @@ describe('Style compatibility', () => {
4558
}).toThrowError(/The "md-" prefix cannot be used in ng-material v1 compatibility mode/);
4659
});
4760
});
61+
62+
describe('with no-conflict mode at root and component module imported in app sub-module', () => {
63+
beforeEach(async(() => {
64+
TestBed.configureTestingModule({
65+
imports: [TestAppSubModule, NoConflictStyleCompatibilityMode],
66+
});
67+
68+
TestBed.compileComponents();
69+
}));
70+
71+
it('should throw an error when using the "md-" prefix', () => {
72+
expect(() => {
73+
TestBed.createComponent(ComponentWithMdCheckbox);
74+
}).toThrowError(/The "md-" prefix cannot be used in ng-material v1 compatibility mode/);
75+
});
76+
77+
it('should not throw an error when using the "mat-" prefix', () => {
78+
TestBed.createComponent(ComponentWithMatCheckbox);
79+
});
80+
});
4881
});
4982

5083

@@ -53,3 +86,11 @@ class ComponentWithMdCheckbox { }
5386

5487
@Component({ template: `<mat-checkbox>Hungry</mat-checkbox>` })
5588
class ComponentWithMatCheckbox { }
89+
90+
91+
@NgModule({
92+
imports: [MdCheckboxModule.forRoot()],
93+
exports: [ComponentWithMdCheckbox, ComponentWithMatCheckbox],
94+
declarations: [ComponentWithMdCheckbox, ComponentWithMatCheckbox],
95+
})
96+
export class TestAppSubModule {}

0 commit comments

Comments
 (0)