Skip to content

Instantly share code, notes, and snippets.

View beyond-code-github's full-sized avatar

Pete Smith beyond-code-github

View GitHub Profile
@beyond-code-github
beyond-code-github / subpipeline.cs
Created November 29, 2013 20:26
Sub-pipeline example
if (routeData.Pipeline.Any())
{
IAppBuilder branch = builder.New();
foreach (var middleware in routeData.Pipeline)
{
branch.Use(middleware);
}
branch.Use(typeof(RedirectMiddleware), this.next);
ʃ.Route(ʅ => ʅ / "Hello" * Pipeline.Action<FirstComponent>() / (
ʅ / "World" * Pipeline.Action<SecondComponent>()
| ʅ / "Foobar" * Pipeline.Action<ThirdComponent>()));
public class MyMiddleware
{
public Func<IDictionary<string, object>, Task> GetAppFunc(Func<IDictionary<string, object>, Task> next)
{
return (env) => {
// do stuff
await next(env);
// do more stuff
}
}
@beyond-code-github
beyond-code-github / flatchangetracking.js
Last active January 3, 2016 00:49
Change tracking for flat viewmodels, all properties must be observables
var getObjProperties = function (obj) {
var objProperties = [];
var val = ko.utils.unwrapObservable(obj);
if (val !== null && typeof val === 'object') {
for (var i in val) {
if (val.hasOwnProperty(i)) objProperties.push({ "name": i, "value": val[i] });
}
}
@beyond-code-github
beyond-code-github / simpleexample.js
Last active January 3, 2016 00:49
Using the simple change tracking
var viewModel = {
Name: ko.observable("Pete"),
Age: ko.observable(29),
Occupation: ko.observable("Developer")
};
applyChangeTracking(viewModel);
viewModel.Occupation("Unemployed");
@beyond-code-github
beyond-code-github / complextracker.js
Last active January 3, 2016 00:49
Modified track changes knockout extended that can handle detection of changes to complex objects
var traverseObservables = function (obj, action) {
ko.utils.arrayForEach(getObjProperties(obj), function (observable) {
if (observable && observable.value && !observable.value.nodeType && ko.isObservable(observable.value)) {
action(observable);
}
});
};
ko.extenders.trackChange = function (target, track) {
if (track) {
@beyond-code-github
beyond-code-github / complexdetectionexample.js
Last active January 3, 2016 00:49
Example of change tracking behavior after applying complex object detection
var viewModel = {
Name: ko.observable("Pete"),
Age: ko.observable(29),
Skills: {
Tdd: ko.observable(true),
Knockout: ko.observable(true),
ChangeTracking: ko.observable(false),
},
Occupation: ko.observable("Developer")
};
@beyond-code-github
beyond-code-github / complexchangetracking.js
Last active January 3, 2016 00:59
Changes required to trackChange and getChangesFromModel methods to support change tracking as well as detection
ko.extenders.trackChange = function (target, track) {
if (track) {
// ...
// ...
if (!target.getChanges) {
target.getChanges = function (newObject) {
var obj = target();
if ((typeof obj == "object") && (obj !== null)) {
if (target.hasValueChanged()) {
@beyond-code-github
beyond-code-github / highlight.js
Created January 12, 2014 15:07
Highlighted portion of example illustrating how we deal with wholesale replacement of a complex object within an observable
if ((typeof obj == "object") && (obj !== null)) {
if (target.hasValueChanged()) {
return ko.mapping.toJS(obj);
}
return getChangesFromModel(obj);
}
@beyond-code-github
beyond-code-github / complexexamplemultilevel.js
Last active January 3, 2016 00:58
Example use case demonstrating complex object change tracking at multiple levels
var viewModel = {
Name: ko.observable("Pete"),
Age: ko.observable(29),
Skills: ko.observable({
Tdd: ko.observable(true),
Knockout: ko.observable(true),
ChangeTracking: ko.observable(false),
Languages: ko.observable({
Csharp: ko.observable(false),
Javascript: ko.observable(false)