Last active
August 22, 2016 16:38
-
-
Save mrosata/0e2fb1c97e9a30420b4bbfc46bf0d163 to your computer and use it in GitHub Desktop.
Partial Application Get/Set
This file contains hidden or 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
| import Ember from 'ember'; | |
| import '../prism'; | |
| import getSetDecorator from '../ember-getsetter'; | |
| import exampleSlides from '../example-slides'; | |
| let {get, set} = getSetDecorator(); | |
| let examples = []; | |
| exampleSlides.forEach(function(item) { | |
| examples.push(item); | |
| }); | |
| export default Ember.Controller.extend({ | |
| appName: 'Ember Twiddle', | |
| testValue: examples[0], | |
| actions: { | |
| testSetFunctions() { | |
| switch (get(this, 'testValue')[0]) { | |
| case 0: | |
| return set(this, 'testValue', examples[1]); | |
| case 1: | |
| return set(this)('testValue', examples[2]); | |
| case 2: | |
| return set(this, 'testValue')(examples[3]); | |
| case 3: | |
| return set(this)('testValue')(examples[4]); | |
| case 4: | |
| return this.set('testValue', examples[0]); | |
| default: | |
| this.set('testValue', 'click me!'); | |
| alert('If you see this alert, then we have failed ...'); | |
| } | |
| } | |
| } | |
| }); |
This file contains hidden or 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
| /** | |
| * Decorate an object/namespace with a more functional | |
| * styles of Ember.{set,get} that allow partial execution. | |
| * | |
| * @param namespace | |
| * @returns {{}} | |
| */ | |
| export default function emberGetsetterDecorator(namespace = {}) { | |
| namespace.get = partialEmberGetter; | |
| namespace.set = partialEmberSetter; | |
| return namespace; | |
| } | |
| function partialEmberGetter (context, property) { | |
| return (arguments.length !== 1) ? | |
| Ember.get.call(context, context, property) : (prop) => Ember.get.call(context, context, prop); | |
| } | |
| function partialEmberSetter (context, property, value) { | |
| switch (arguments.length) { | |
| case 1: | |
| return partialEmberSetter.bind(null, context); | |
| case 2: | |
| return partialEmberSetter.bind(null, context, property); | |
| default: | |
| return Ember.set.call(null, context, property, value); | |
| } | |
| } |
This file contains hidden or 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
| export default [ | |
| [0, 'click me!', ` | |
| function explaination () { | |
| return \`All of these examples are | |
| set using the same style set as | |
| displayed below in the code preview..`], | |
| [1, 'All at once!', ` | |
| export default Ember.Component({ | |
| weCanDo() { | |
| let item = get(this, 'item'); | |
| set( this, 'parsedItem', parse( item ) ); | |
| } | |
| });`], | |
| [2, 'Prepare the context!', ` | |
| export default Ember.Component({ | |
| settingToThis() { | |
| let setThis = set( this ); | |
| setThis('item1', item1); | |
| setThis('item2', item2); | |
| } | |
| });`], | |
| [3, 'Specific property setter!', ` | |
| export default Ember.Component({ | |
| settingSpecific() { | |
| let setThing = set( this, 'thing' ); | |
| if (get(this, 'sale') { | |
| setThing( 200.00 ); | |
| } | |
| else { | |
| setThing( 300.00 ); | |
| } | |
| } | |
| });`], | |
| [4, 'Unary Unary Unary!', ` | |
| export default Ember.Component({ | |
| settingLikeLoco() { | |
| let setThis = set( this ), | |
| setThing1 = setThis( 'thing1' ); | |
| set( this )( 'thing2' )( 199 ); | |
| } | |
| });`] | |
| ]; |
This file contains hidden or 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
| /* http://prismjs.com/download.html?themes=prism-twilight */ | |
| var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function(e){var t=n.util.type(e);switch(t){case"Object":var a={};for(var r in e)e.hasOwnProperty(r)&&(a[r]=n.util.clone(e[r]));return a;case"Array":return e.map&&e.map(function(e){return n.util.clone(e)})}return e}},languages:{extend:function(e,t){var a=n.util.clone(n.languages[e]);for(var r in t)a[r]=t[r];return a},insertBefore:function(e,t,a,r){r=r||n.languages;var i=r[e];if(2==arguments.length){a=arguments[1];for(var l in a)a.hasOwnProperty(l)&&(i[l]=a[l]);return i}var o={};for(var s in i)if(i.hasOwnProperty(s)){if(s==t)for(var l in a)a.hasOwnProperty(l)&&(o[l]=a[l]);o[s]=i[s]}return n.languages.DFS(n.languages,function(t,n){n===r[e]&&t!=e&&(this[t]=o)}),r[e]=o},DFS:function(e,t,a,r){r=r||{};for(var i in e)e.hasOwnProperty(i)&&(t.call(e,i,e[i],a||i),"Object"!==n.util.type(e[i])||r[n.util.objId(e[i])]?"Array"!==n.util.type(e[i])||r[n.util.objId(e[i])]||(r[n.util.objId(e[i])]=!0,n.languages.DFS(e[i],t,i,r)):(r[n.util.objId(e[i])]=!0,n.languages.DFS(e[i],t,null,r)))}},plugins:{},highlightAll:function(e,t){var a={callback:t,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};n.hooks.run("before-highlightall",a);for(var r,i=a.elements||document.querySelectorAll(a.selector),l=0;r=i[l++];)n.highlightElement(r,e===!0,a.callback)},highlightElement:function(t,a,r){for(var i,l,o=t;o&&!e.test(o.className);)o=o.parentNode;o&&(i=(o.className.match(e)||[,""])[1].toLowerCase(),l=n.languages[i]),t.className=t.className.replace(e,"").replace(/\s+/g," ")+" language-"+i,o=t.parentNode,/pre/i.test(o.nodeName)&&(o.className=o.className.replace(e,"").replace(/\s+/g," ")+" language-"+i);var s=t.textContent,u={element:t,language:i,grammar:l,code:s};if(n.hooks.run("before-sanity-check",u),!u.code||!u.grammar)return n.hooks.run("complete",u),void 0;if(n.hooks.run("before-highlight",u),a&&_self.Worker){var c=new Worker(n.filename);c.onmessage=function(e){u.highlightedCode=e.data,n.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,r&&r.call(u.element),n.hooks.run("after-highlight",u),n.hooks.run("complete",u)},c.postMessage(JSON.stringify({language:u.language,code:u.code,immediateClose:!0}))}else u.highlightedCode=n.highlight(u.code,u.grammar,u.language),n.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,r&&r.call(t),n.hooks.run("after-highlight",u),n.hooks.run("complete",u)},highlight:function(e,t,r){var i=n.tokenize(e,t);return a.stringify(n.util.encode(i),r)},tokenize:function(e,t){var a=n.Token,r=[e],i=t.rest;if(i){for(var l in i)t[l]=i[l];delete t.rest}e:for(var l in t)if(t.hasOwnProperty(l)&&t[l]){var o=t[l];o="Array"===n.util.type(o)?o:[o];for(var s=0;s<o.length;++s){var u=o[s],c=u.inside,g=!!u.lookbehind,h=!!u.greedy,f=0,d=u.alias;if(h&&!u.pattern.global){var p=u.pattern.toString().match(/[imuy]*$/)[0];u.pattern=RegExp(u.pattern.source,p+"g")}u=u.pattern||u;for(var m=0,y=0;m<r.length;y+=(r[m].matchedStr||r[m]).length,++m){var v=r[m];if(r.length>e.length)break e;if(!(v instanceof a)){u.lastIndex=0;var b=u.exec(v),k=1;if(!b&&h&&m!=r.length-1){if(u.lastIndex=y,b=u.exec(e),!b)break;for(var w=b.index+(g?b[1].length:0),_=b.index+b[0].length,A=m,S=y,P=r.length;P>A&&_>S;++A)S+=(r[A].matchedStr||r[A]).length,w>=S&&(++m,y=S);if(r[m]instanceof a||r[A-1].greedy)continue;k=A-m,v=e.slice(y,S),b.index-=y}if(b){g&&(f=b[1].length);var w=b.index+f,b=b[0].slice(f),_=w+b.length,x=v.slice(0,w),O=v.slice(_),j=[m,k];x&&j.push(x);var N=new a(l,c?n.tokenize(b,c):b,d,b,h);j.push(N),O&&j.push(O),Array.prototype.splice.apply(r,j)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,i=0;r=a[i++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.matchedStr=a||null,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var i={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var l="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,l)}n.hooks.run("wrap",i);var o="";for(var s in i.attributes)o+=(o?" ":"")+s+'="'+(i.attributes[s]||"")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+(o?" "+o:"")+">"+i.content+"</"+i.tag+">"},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,i=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),i&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); |
This file contains hidden or 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
| body { | |
| margin: 12px 16px; | |
| font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; | |
| font-size: 12pt; | |
| } | |
| h2.btn { | |
| background: #AEFCDE; | |
| color: #464D4A; | |
| padding: .5rem .25rem .33rem; | |
| text-align: center; | |
| border: .1175rem solid #3A3E3C; | |
| border-radius: .15rem; | |
| cursor: pointer; | |
| -webkit-touch-callout: none; | |
| -webkit-user-select: none; | |
| -khtml-user-select: none; | |
| -moz-user-select: none; | |
| -ms-user-select: none; | |
| user-select: none; | |
| } | |
| /** PRISM CSS */ | |
| /* http://prismjs.com/download.html?themes=prism-twilight */ | |
| /** | |
| * prism.js Twilight theme | |
| * Based (more or less) on the Twilight theme originally of Textmate fame. | |
| * @author Remy Bach | |
| */ | |
| code[class*="language-"], | |
| pre[class*="language-"] { | |
| color: white; | |
| background: none; | |
| font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; | |
| text-align: left; | |
| text-shadow: 0 -.1em .2em black; | |
| white-space: pre; | |
| word-spacing: normal; | |
| word-break: normal; | |
| word-wrap: normal; | |
| line-height: 1.5; | |
| -moz-tab-size: 4; | |
| -o-tab-size: 4; | |
| tab-size: 4; | |
| -webkit-hyphens: none; | |
| -moz-hyphens: none; | |
| -ms-hyphens: none; | |
| hyphens: none; | |
| } | |
| pre[class*="language-"], | |
| :not(pre) > code[class*="language-"] { | |
| background: hsl(0, 0%, 8%); /* #141414 */ | |
| } | |
| /* Code blocks */ | |
| pre[class*="language-"] { | |
| border-radius: .5em; | |
| border: .3em solid hsl(0, 0%, 33%); /* #282A2B */ | |
| box-shadow: 1px 1px .5em black inset; | |
| margin: .5em 0; | |
| overflow: auto; | |
| padding: 1em; | |
| } | |
| pre[class*="language-"]::-moz-selection { | |
| /* Firefox */ | |
| background: hsl(200, 4%, 16%); /* #282A2B */ | |
| } | |
| pre[class*="language-"]::selection { | |
| /* Safari */ | |
| background: hsl(200, 4%, 16%); /* #282A2B */ | |
| } | |
| /* Text Selection colour */ | |
| pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, | |
| code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { | |
| text-shadow: none; | |
| background: hsla(0, 0%, 93%, 0.15); /* #EDEDED */ | |
| } | |
| pre[class*="language-"]::selection, pre[class*="language-"] ::selection, | |
| code[class*="language-"]::selection, code[class*="language-"] ::selection { | |
| text-shadow: none; | |
| background: hsla(0, 0%, 93%, 0.15); /* #EDEDED */ | |
| } | |
| /* Inline code */ | |
| :not(pre) > code[class*="language-"] { | |
| border-radius: .3em; | |
| border: .13em solid hsl(0, 0%, 33%); /* #545454 */ | |
| box-shadow: 1px 1px .3em -.1em black inset; | |
| padding: .15em .2em .05em; | |
| white-space: normal; | |
| } | |
| .token.comment, | |
| .token.prolog, | |
| .token.doctype, | |
| .token.cdata { | |
| color: hsl(0, 0%, 47%); /* #777777 */ | |
| } | |
| .token.punctuation { | |
| opacity: .7; | |
| } | |
| .namespace { | |
| opacity: .7; | |
| } | |
| .token.tag, | |
| .token.boolean, | |
| .token.number, | |
| .token.deleted { | |
| color: hsl(14, 58%, 55%); /* #CF6A4C */ | |
| } | |
| .token.keyword, | |
| .token.property, | |
| .token.selector, | |
| .token.constant, | |
| .token.symbol, | |
| .token.builtin { | |
| color: hsl(53, 89%, 79%); /* #F9EE98 */ | |
| } | |
| .token.attr-name, | |
| .token.attr-value, | |
| .token.string, | |
| .token.char, | |
| .token.operator, | |
| .token.entity, | |
| .token.url, | |
| .language-css .token.string, | |
| .style .token.string, | |
| .token.variable, | |
| .token.inserted { | |
| color: hsl(76, 21%, 52%); /* #8F9D6A */ | |
| } | |
| .token.atrule { | |
| color: hsl(218, 22%, 55%); /* #7587A6 */ | |
| } | |
| .token.regex, | |
| .token.important { | |
| color: hsl(42, 75%, 65%); /* #E9C062 */ | |
| } | |
| .token.important, | |
| .token.bold { | |
| font-weight: bold; | |
| } | |
| .token.italic { | |
| font-style: italic; | |
| } | |
| .token.entity { | |
| cursor: help; | |
| } | |
| pre[data-line] { | |
| padding: 1em 0 1em 3em; | |
| position: relative; | |
| } | |
| /* Markup */ | |
| .language-markup .token.tag, | |
| .language-markup .token.attr-name, | |
| .language-markup .token.punctuation { | |
| color: hsl(33, 33%, 52%); /* #AC885B */ | |
| } | |
| /* Make the tokens sit above the line highlight so the colours don't look faded. */ | |
| .token { | |
| position: relative; | |
| z-index: 1; | |
| } | |
| .line-highlight { | |
| background: hsla(0, 0%, 33%, 0.25); /* #545454 */ | |
| background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */ | |
| border-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */ | |
| border-top: 1px dashed hsl(0, 0%, 33%); /* #545454 */ | |
| left: 0; | |
| line-height: inherit; | |
| margin-top: 0.75em; /* Same as .prism’s padding-top */ | |
| padding: inherit 0; | |
| pointer-events: none; | |
| position: absolute; | |
| right: 0; | |
| white-space: pre; | |
| z-index: 0; | |
| } | |
| .line-highlight:before, | |
| .line-highlight[data-end]:after { | |
| background-color: hsl(215, 15%, 59%); /* #8794A6 */ | |
| border-radius: 999px; | |
| box-shadow: 0 1px white; | |
| color: hsl(24, 20%, 95%); /* #F5F2F0 */ | |
| content: attr(data-start); | |
| font: bold 65%/1.5 sans-serif; | |
| left: .6em; | |
| min-width: 1em; | |
| padding: 0 .5em; | |
| position: absolute; | |
| text-align: center; | |
| text-shadow: none; | |
| top: .4em; | |
| vertical-align: .3em; | |
| } | |
| .line-highlight[data-end]:after { | |
| bottom: .4em; | |
| content: attr(data-end); | |
| top: auto; | |
| } |
This file contains hidden or 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
| { | |
| "version": "0.10.4", | |
| "EmberENV": { | |
| "FEATURES": {} | |
| }, | |
| "options": { | |
| "use_pods": false, | |
| "enable-testing": false | |
| }, | |
| "dependencies": { | |
| "jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js", | |
| "ember": "2.7.0", | |
| "ember-data": "2.7.0", | |
| "ember-template-compiler": "2.7.0" | |
| }, | |
| "addons": {} | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment