Skip to content

Commit

Permalink
feat(binding-mode-behaviors): port from vCurrent
Browse files Browse the repository at this point in the history
  • Loading branch information
EisenbergEffect committed Apr 23, 2018
1 parent 1d3478e commit 7af5c3b
Show file tree
Hide file tree
Showing 7 changed files with 137 additions and 10 deletions.
16 changes: 11 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,17 @@ An experimental re-working of Aurelia, oriented around compile-time reflection a

### Resources

* [x] `attr` Binding Behavior
* [x] `if` Template Controller
* [x] `else` Template Controller
* [ ] `repeat` Template Controller
* [x] `compose` Custom Element
* Binding Behaviors
* [x] `attr`
* [x] `oneTime`
* [x] `oneWay`
* [x] `twoWay`
* Template Controllers
* [x] `if`
* [x] `else`
* [ ] `repeat`
* Custom Elements
* [x] `compose`

### Application Model

Expand Down
80 changes: 78 additions & 2 deletions scripts/app-bundle.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion scripts/app-bundle.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/runtime/binding/binding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export class Binding extends ConnectableBinding implements IBinding {
private sourceExpression: IExpression,
public target: IBindingTarget,
public targetProperty: string,
private mode: number,
public mode: BindingMode,
public container: IContainer) {
super();
}
Expand Down
7 changes: 7 additions & 0 deletions src/runtime/configuration/standard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,22 @@ import { IObserverLocator, ObserverLocator } from "../binding/observer-locator";
import { IAnimator, Animator } from "../templating/animator";
import { Compose } from "../resources/compose";
import { AttrBindingBehavior } from "../resources/attr-binding-behavior";
import { OneTimeBindingBehavior, OneWayBindingBehavior, TwoWayBindingBehavior } from "../resources/binding-mode-behaviors";

export const StandardConfiguration = {
register(container: IContainer) {
container.register(
// Binding Behaviors
AttrBindingBehavior,
OneTimeBindingBehavior,
OneWayBindingBehavior,
TwoWayBindingBehavior,

// Template Controllers
If,
Else,

// Custom Elements
Compose
);

Expand Down
1 change: 0 additions & 1 deletion src/runtime/resources/attr-binding-behavior.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { bindingBehavior } from '../decorators';
import { Binding } from '../binding/binding';
import { IScope } from '../binding/binding-context';

//TODO: extract an interface for use in implementing binding behaviors.
@bindingBehavior('attr')
export class AttrBindingBehavior {
bind(binding: Binding, scope: IScope) {
Expand Down
39 changes: 39 additions & 0 deletions src/runtime/resources/binding-mode-behaviors.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import {BindingMode} from '../binding/binding-mode';
import { bindingBehavior } from '../decorators';
import { Binding } from '../binding/binding';
import { IScope } from '../binding/binding-context';

class BindingModeBehavior {
constructor(private mode: BindingMode) {}

bind(binding: Binding, scope: IScope) {
(<any>binding).originalMode = binding.mode;
binding.mode = this.mode;
}

unbind(binding: Binding, scope: IScope) {
binding.mode = (<any>binding).originalMode;
(<any>binding).originalMode = null;
}
}

@bindingBehavior('oneTime')
export class OneTimeBindingBehavior extends BindingModeBehavior {
constructor() {
super(BindingMode.oneTime);
}
}

@bindingBehavior('oneWay')
export class OneWayBindingBehavior extends BindingModeBehavior {
constructor() {
super(BindingMode.oneWay);
}
}

@bindingBehavior('twoWay')
export class TwoWayBindingBehavior extends BindingModeBehavior {
constructor() {
super(BindingMode.twoWay);
}
}

0 comments on commit 7af5c3b

Please sign in to comment.