-
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9782547
commit a0171d9
Showing
24 changed files
with
1,497 additions
and
1,230 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// check if window exists and actually is the global | ||
export default typeof self === 'object' && | ||
self !== null && | ||
(self as Window['self']).Object === Object && | ||
typeof Window !== 'undefined' && | ||
self.constructor === Window && | ||
typeof document === 'object' && | ||
document !== null && | ||
self.document === document && | ||
typeof location === 'object' && | ||
location !== null && | ||
self.location === location && | ||
typeof history === 'object' && | ||
history !== null && | ||
self.history === history && | ||
typeof navigator === 'object' && | ||
navigator !== null && | ||
self.navigator === navigator && | ||
typeof navigator.userAgent === 'string'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
function intern(str: string): string { | ||
let obj = {}; | ||
//@ts-ignore | ||
obj[str] = 1; | ||
for (let key in obj) { | ||
if (key === str) { | ||
return key; | ||
} | ||
} | ||
return str; | ||
} | ||
|
||
const GUID_KEY = intern(`__ember${Date.now()}`); | ||
|
||
// `enumerableSymbol` copied from https://github.com/emberjs/ember.js/blob/master/packages/@ember/-internals/utils/lib/symbol.ts | ||
// for not exported code these legacy components are dependant on. | ||
|
||
// Some legacy symbols still need to be enumerable for a variety of reasons. | ||
// This code exists for that, and as a fallback in IE11. In general, prefer | ||
// `symbol` below when creating a new symbol. | ||
function enumerableSymbol(debugName: string): string { | ||
let id = GUID_KEY + Math.floor(Math.random() * Date.now()); | ||
let symbol = intern(`__${debugName}${id}__`); | ||
return symbol; | ||
} | ||
|
||
export const HAS_BLOCK = enumerableSymbol('HAS_BLOCK'); | ||
|
||
export function isSimpleClick(event: MouseEvent): boolean { | ||
let modifier = | ||
event.shiftKey || event.metaKey || event.altKey || event.ctrlKey; | ||
let secondaryClick = event.which > 1; // IE9 may return undefined | ||
|
||
return !modifier && !secondaryClick; | ||
} | ||
|
||
// export interface GlobalContext { | ||
// imports: object; | ||
// exports: object; | ||
// lookup: object; | ||
// } | ||
|
||
// /* globals global, window, self */ | ||
// declare const mainContext: object | undefined; | ||
|
||
// // from lodash to catch fake globals | ||
// function checkGlobal(value: any | null | undefined): value is object { | ||
// return value && value.Object === Object ? value : undefined; | ||
// } | ||
|
||
// // element ids can ruin global miss checks | ||
// function checkElementIdShadowing(value: any | null | undefined) { | ||
// return value && value.nodeType === undefined ? value : undefined; | ||
// } | ||
|
||
// // export real global | ||
// export default checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) || | ||
// checkGlobal(typeof self === 'object' && self) || | ||
// checkGlobal(typeof window === 'object' && window) || | ||
// (typeof mainContext !== 'undefined' && mainContext) || // set before strict mode in Ember loader/wrapper | ||
// new Function('return this')(); // eval outside of strict mode | ||
|
||
// // legacy imports/exports/lookup stuff (should we keep this??) | ||
// export const context = (function ( | ||
// global: object, | ||
// Ember: Partial<GlobalContext> | undefined | ||
// ): GlobalContext { | ||
// return Ember === undefined | ||
// ? { imports: global, exports: global, lookup: global } | ||
// : { | ||
// // import jQuery | ||
// imports: Ember.imports || global, | ||
// // export Ember | ||
// exports: Ember.exports || global, | ||
// // search for Namespaces | ||
// lookup: Ember.lookup || global, | ||
// }; | ||
// })(global, global.Ember); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{{yield}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
/* eslint-disable ember/no-get */ | ||
/* eslint-disable ember/no-new-mixins */ | ||
/** | ||
@module ember | ||
*/ | ||
|
||
import { context } from '../components/_internals'; | ||
import { get, computed } from '@ember/object'; | ||
import Mixin from '@ember/object/mixin'; | ||
import { assert } from '@ember/debug'; | ||
/** | ||
`Ember.TargetActionSupport` is a mixin that can be included in a class | ||
to add a `triggerAction` method with semantics similar to the Handlebars | ||
`{{action}}` helper. In normal Ember usage, the `{{action}}` helper is | ||
usually the best choice. This mixin is most often useful when you are | ||
doing more complex event handling in Components. | ||
@class TargetActionSupport | ||
@namespace Ember | ||
@extends Mixin | ||
@private | ||
*/ | ||
export default Mixin.create({ | ||
target: null, | ||
action: null, | ||
actionContext: null, | ||
|
||
actionContextObject: computed('actionContext', function () { | ||
let actionContext = get(this, 'actionContext'); | ||
|
||
if (typeof actionContext === 'string') { | ||
let value = get(this, actionContext); | ||
if (value === undefined) { | ||
value = get(context.lookup, actionContext); | ||
} | ||
return value; | ||
} else { | ||
return actionContext; | ||
} | ||
}), | ||
|
||
/** | ||
Send an `action` with an `actionContext` to a `target`. The action, actionContext | ||
and target will be retrieved from properties of the object. For example: | ||
```javascript | ||
import { alias } from '@ember/object/computed'; | ||
App.SaveButtonView = Ember.View.extend(Ember.TargetActionSupport, { | ||
target: alias('controller'), | ||
action: 'save', | ||
actionContext: alias('context'), | ||
click() { | ||
this.triggerAction(); // Sends the `save` action, along with the current context | ||
// to the current controller | ||
} | ||
}); | ||
``` | ||
The `target`, `action`, and `actionContext` can be provided as properties of | ||
an optional object argument to `triggerAction` as well. | ||
```javascript | ||
App.SaveButtonView = Ember.View.extend(Ember.TargetActionSupport, { | ||
click() { | ||
this.triggerAction({ | ||
action: 'save', | ||
target: this.get('controller'), | ||
actionContext: this.get('context') | ||
}); // Sends the `save` action, along with the current context | ||
// to the current controller | ||
} | ||
}); | ||
``` | ||
The `actionContext` defaults to the object you are mixing `TargetActionSupport` into. | ||
But `target` and `action` must be specified either as properties or with the argument | ||
to `triggerAction`, or a combination: | ||
```javascript | ||
import { alias } from '@ember/object/computed'; | ||
App.SaveButtonView = Ember.View.extend(Ember.TargetActionSupport, { | ||
target: alias('controller'), | ||
click() { | ||
this.triggerAction({ | ||
action: 'save' | ||
}); // Sends the `save` action, along with a reference to `this`, | ||
// to the current controller | ||
} | ||
}); | ||
``` | ||
@method triggerAction | ||
@param opts {Object} (optional, with the optional keys action, target and/or actionContext) | ||
@return {Boolean} true if the action was sent successfully and did not return false | ||
@private | ||
*/ | ||
triggerAction(opts = {}) { | ||
let { action, target, actionContext } = opts; | ||
action = action || get(this, 'action'); | ||
target = target || getTarget(this); | ||
|
||
if (actionContext === undefined) { | ||
actionContext = get(this, 'actionContextObject') || this; | ||
} | ||
|
||
if (target && action) { | ||
let ret; | ||
|
||
if (target.send) { | ||
ret = target.send(...[action].concat(actionContext)); | ||
} else { | ||
assert( | ||
`The action '${action}' did not exist on ${target}`, | ||
typeof target[action] === 'function' | ||
); | ||
ret = target[action](...[].concat(actionContext)); | ||
} | ||
|
||
if (ret !== false) { | ||
return true; | ||
} | ||
} | ||
|
||
return false; | ||
}, | ||
}); | ||
|
||
function getTarget(instance) { | ||
let target = get(instance, 'target'); | ||
if (target) { | ||
if (typeof target === 'string') { | ||
let value = get(instance, target); | ||
if (value === undefined) { | ||
value = get(context.lookup, target); | ||
} | ||
|
||
return value; | ||
} else { | ||
return target; | ||
} | ||
} | ||
|
||
if (instance._target) { | ||
return instance._target; | ||
} | ||
|
||
return null; | ||
} |
Oops, something went wrong.