Skip to content

Commit

Permalink
Added demo, use Vulcanize as build process, hopefully ready for use
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew Green committed Jun 17, 2015
1 parent 4efc60d commit 737b8fd
Show file tree
Hide file tree
Showing 16 changed files with 65 additions and 40 deletions.
7 changes: 4 additions & 3 deletions bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@
"Polymer",
"web-components"
],
"main": "elements.html",
"main": "build.html",
"license": "Apache-2.0",
"ignore": [
"bower_components",
"demo.html"
"demo"
],
"devDependencies": {
"iron-elements": "~1.0.0"
"iron-elements": "~1.0.0",
"polymer": "Polymer/polymer#~1.0.3"
},
"respository": {
"type": "git",
Expand Down
4 changes: 4 additions & 0 deletions components.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<link rel="import" href="bower_components/iron-ajax/iron-ajax.html">
<link rel="import" href="components/nap-product.html">
<link rel="import" href="components/nap-product-ajax.html">
<link rel="import" href="components/nap-product-list.html">
1 change: 1 addition & 0 deletions components.min.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<html><head><link rel="import" href="bower_components/polymer/polymer.html"><script>function MakePromise(asap){function Promise(fn){if(typeof this!=="object"||typeof fn!=="function")throw new TypeError;this._state=null;this._value=null;this._deferreds=[];doResolve(fn,resolve.bind(this),reject.bind(this))}function handle(deferred){var me=this;if(this._state===null){this._deferreds.push(deferred);return}asap(function(){var cb=me._state?deferred.onFulfilled:deferred.onRejected;if(typeof cb!=="function"){(me._state?deferred.resolve:deferred.reject)(me._value);return}var ret;try{ret=cb(me._value)}catch(e){deferred.reject(e);return}deferred.resolve(ret)})}function resolve(newValue){try{if(newValue===this)throw new TypeError;if(newValue&&(typeof newValue==="object"||typeof newValue==="function")){var then=newValue.then;if(typeof then==="function"){doResolve(then.bind(newValue),resolve.bind(this),reject.bind(this));return}}this._state=true;this._value=newValue;finale.call(this)}catch(e){reject.call(this,e)}}function reject(newValue){this._state=false;this._value=newValue;finale.call(this)}function finale(){for(var i=0,len=this._deferreds.length;i<len;i++){handle.call(this,this._deferreds[i])}this._deferreds=null}function doResolve(fn,onFulfilled,onRejected){var done=false;try{fn(function(value){if(done)return;done=true;onFulfilled(value)},function(reason){if(done)return;done=true;onRejected(reason)})}catch(ex){if(done)return;done=true;onRejected(ex)}}Promise.prototype["catch"]=function(onRejected){return this.then(null,onRejected)};Promise.prototype.then=function(onFulfilled,onRejected){var me=this;return new Promise(function(resolve,reject){handle.call(me,{onFulfilled:onFulfilled,onRejected:onRejected,resolve:resolve,reject:reject})})};Promise.resolve=function(value){if(value&&typeof value==="object"&&value.constructor===Promise){return value}return new Promise(function(resolve){resolve(value)})};Promise.reject=function(value){return new Promise(function(resolve,reject){reject(value)})};return Promise}if(typeof module!=="undefined"){module.exports=MakePromise}</script><script>if(!window.Promise){window.Promise=MakePromise(Polymer.Base.async)}</script><script>Polymer({is:"iron-request",properties:{xhr:{type:Object,notify:true,readOnly:true,value:function(){return new XMLHttpRequest}},response:{type:Object,notify:true,readOnly:true,value:function(){return null}},completes:{type:Object,readOnly:true,notify:true,value:function(){return new Promise(function(resolve,reject){this.resolveCompletes=resolve;this.rejectCompletes=reject}.bind(this))}},progress:{type:Object,notify:true,readOnly:true,value:function(){return{}}},aborted:{type:Boolean,notify:true,readOnly:true,value:false}},get succeeded(){var status=this.xhr.status||0;return status===0||status>=200&&status<300},send:function(options){var xhr=this.xhr;if(xhr.readyState>0){return null}xhr.addEventListener("readystatechange",function(){if(xhr.readyState===4&&!this.aborted){if(!this.succeeded){this.rejectCompletes(new Error("The request failed with status code: "+this.xhr.status));return}this._setResponse(this.parseResponse());this.resolveCompletes(this)}}.bind(this));xhr.addEventListener("progress",function(progress){this._setProgress({lengthComputable:progress.lengthComputable,loaded:progress.loaded,total:progress.total})}.bind(this));xhr.addEventListener("error",function(error){this.rejectCompletes(error)}.bind(this));xhr.addEventListener("abort",function(){this.rejectCompletes(new Error("Request aborted."))}.bind(this));xhr.open(options.method||"GET",options.url,options.async!==false);if(options.headers){Object.keys(options.headers).forEach(function(requestHeader){xhr.setRequestHeader(requestHeader,options.headers[requestHeader])},this)}xhr.responseType=xhr._responseType=options.handleAs||"text";xhr.withCredentials=!!options.withCredentials;xhr.send(options.body);return this.completes},parseResponse:function(){var xhr=this.xhr;var responseType=this.xhr.responseType||this.xhr._responseType;var preferResponseText=!this.xhr.responseType;try{switch(responseType){case"json":if(preferResponseText||xhr.response===undefined){try{xhr.responseText}catch(e){return xhr.response}if(xhr.responseText){return JSON.parse(xhr.responseText)}}return xhr.response;case"xml":return xhr.responseXML;case"blob":case"document":case"arraybuffer":return xhr.response;case"text":default:return xhr.responseText}}catch(e){this.rejectCompletes(new Error("Could not parse response. "+e.message))}},abort:function(){this._setAborted(true);this.xhr.abort()}});</script><script>Polymer({is:"iron-ajax",properties:{url:{type:String,value:""},params:{type:Object,value:function(){return{}}},method:{type:String,value:"GET"},headers:{type:Object,value:function(){return{}}},contentType:{type:String,value:"application/x-www-form-urlencoded"},body:{type:String,value:""},sync:{type:Boolean,value:false},handleAs:{type:String,value:"json"},withCredentials:{type:Boolean,value:false},auto:{type:Boolean,value:false},verbose:{type:Boolean,value:false},loading:{type:Boolean,notify:true,readOnly:true},lastRequest:{type:Object,notify:true,readOnly:true},lastResponse:{type:Object,notify:true,readOnly:true},lastError:{type:Object,notify:true,readOnly:true},activeRequests:{type:Array,notify:true,readOnly:true,value:function(){return[]}},debounceDuration:{type:Number,value:0,notify:true},_boundHandleResponse:{type:Function,value:function(){return this._handleResponse.bind(this)}}},observers:["_requestOptionsChanged(url, method, params, headers,"+"contentType, body, sync, handleAs, withCredentials, auto)"],get queryString(){var queryParts=[];var param;var value;for(param in this.params){value=this.params[param];param=window.encodeURIComponent(param);if(value!==null){param+="="+window.encodeURIComponent(value)}queryParts.push(param)}return queryParts.join("&")},get requestUrl(){var queryString=this.queryString;if(queryString){return this.url+"?"+queryString}return this.url},get requestHeaders(){var headers={"Content-Type":this.contentType};var header;if(this.headers instanceof Object){for(header in this.headers){headers[header]=this.headers[header].toString()}}return headers},toRequestOptions:function(){return{url:this.requestUrl,method:this.method,headers:this.requestHeaders,body:this.body,async:!this.sync,handleAs:this.handleAs,withCredentials:this.withCredentials}},generateRequest:function(){var request=document.createElement("iron-request");var requestOptions=this.toRequestOptions();this.activeRequests.push(request);request.completes.then(this._boundHandleResponse).catch(this._handleError.bind(this,request)).then(this._discardRequest.bind(this,request));request.send(requestOptions);this._setLastRequest(request);this._setLoading(true);this.fire("request",{request:request,options:requestOptions});return request},_handleResponse:function(request){this._setLastResponse(request.response);this.fire("response",request)},_handleError:function(request,error){if(this.verbose){console.error(error)}this._setLastError({request:request,error:error});this.fire("error",{request:request,error:error})},_discardRequest:function(request){var requestIndex=this.activeRequests.indexOf(request);if(requestIndex>-1){this.activeRequests.splice(requestIndex,1)}if(this.activeRequests.length===0){this._setLoading(false)}},_requestOptionsChanged:function(){this.debounce("generate-request",function(){if(!this.url&&this.url!==""){return}if(this.auto){this.generateRequest()}},this.debounceDuration)}});</script></head><body><div hidden=""><dom-module id="nap-product"><template><img src="{{_imgUrl(pid)}}/"><div>{{designer}}</div><div>{{description}}</div><div>{{price}}</div></template><script>Polymer({is:"nap-product",properties:{designer:String,pid:String,description:String,price:String},_imgUrl:function(pid){return"//cache.net-a-porter.com/images/products/"+pid+"/"+pid+"_in_sl.jpg"}});</script></dom-module><dom-module id="nap-product-ajax"><template><iron-ajax auto="" url="{{_productUrl(pid)}}" handle-as="json" last-response="{{data}}"></iron-ajax><nap-product pid="{{data.id}}" description="{{data.name}}" price="{{displayPrice(data.price)}}" designer="{{data.brand.name}}"></nap-product></template><script>Polymer({is:"nap-product-ajax",properties:{pid:String},_productUrl:function(pid){return"/demo/pids/"+pid+".json"},displayPrice:function(priceObj){return"£"+priceObj.amount/priceObj.divisor}});</script></dom-module><dom-module id="nap-product-list"><style> :host { width: 100%; display:flex; display:-webkit-flex; } nap-product-ajax { display: inline-block; width: 16.66%; } </style><template><iron-ajax auto="" url="/demo/ymal.json" handle-as="json" last-response="{{data}}"></iron-ajax><template is="dom-repeat" items="{{data.ymalPids}}"><nap-product-ajax pid="{{item}}"></nap-product-ajax></template></template><script>Polymer({is:"nap-product-list",properties:{pids:Array}});</script></dom-module></div></body></html>
5 changes: 3 additions & 2 deletions components/nap-product.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<polymer-element name="nap-product">
<link rel="import" href="../bower_components/polymer/polymer.html">
<dom-module id="nap-product">
<template>
<img src={{_imgUrl(pid)}}/>
<div>{{designer}}</div>
Expand All @@ -19,4 +20,4 @@
}
});
</script>
</polymer-element>
</dom-module>
15 changes: 15 additions & 0 deletions demo/demo.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<!doctype html>
<html>
<head>
<script src="../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="../components.html">
<style>
body: {
margin: 0;
}
</style>
</head>
<body>
<nap-product-list></nap-product-list>
</body>
</html>
1 change: 1 addition & 0 deletions demo/pids/508770.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"longDescription":"- Black leather \r\n- Asymmetric zip fastening through front\r\n- 100% leather (Mutton); lining: 100% silk\r\n- Specialist clean","name":"Leather biker jacket","sizeFit":"- Fits true to size, take your normal size \r\n- Tailored for a slightly loose fit\r\n- Use the belt to adjust the fit\r\n- Mid-weight, slightly stretchy leather\r\n- Model is 175cm/ 5'9\" and is wearing a IT size 40\r\n\r\n","visible":true,"price":{"currency":"GBP","divisor":100,"amount":269500},"onSale":false,"brand":{"id":250,"name":"Alexander McQueen","urlKey":"Alexander_McQueen"},"analyticsKey":"Leather biker jacket","id":508770,"skus":[{"id":"508770-015","displaySize":"IT48","stockLevel":"Low_Stock","measurements":[{"id":6,"name":"Bust","value":102.0},{"id":3,"name":"Length","value":61.0},{"id":7,"name":"Shoulder","value":42.0},{"id":8,"name":"Sleeve","value":48.0},{"id":9,"name":"Waist","value":92.0}]},{"id":"508770-014","displaySize":"IT46","stockLevel":"Low_Stock","measurements":[{"id":6,"name":"Bust","value":98.0},{"id":3,"name":"Length","value":60.0},{"id":7,"name":"Shoulder","value":41.0},{"id":8,"name":"Sleeve","value":47.0},{"id":9,"name":"Waist","value":88.0}]},{"id":"508770-013","displaySize":"IT44","stockLevel":"Low_Stock","measurements":[{"id":6,"name":"Bust","value":94.0},{"id":3,"name":"Length","value":59.0},{"id":7,"name":"Shoulder","value":40.0},{"id":8,"name":"Sleeve","value":46.0},{"id":9,"name":"Waist","value":84.0}]},{"id":"508770-012","displaySize":"IT42","stockLevel":"In_Stock","measurements":[{"id":6,"name":"Bust","value":90.0},{"id":3,"name":"Length","value":58.0},{"id":7,"name":"Shoulder","value":39.0},{"id":8,"name":"Sleeve","value":45.0},{"id":9,"name":"Waist","value":80.0}]},{"id":"508770-011","displaySize":"IT40","stockLevel":"Low_Stock","measurements":[{"id":6,"name":"Bust","value":86.0},{"id":3,"name":"Length","value":57.0},{"id":7,"name":"Shoulder","value":38.0},{"id":8,"name":"Sleeve","value":45.0},{"id":9,"name":"Waist","value":76.0}]},{"id":"508770-010","displaySize":"IT38","stockLevel":"Out_of_Stock","measurements":[{"id":6,"name":"Bust","value":84.0},{"id":3,"name":"Length","value":56.0},{"id":7,"name":"Shoulder","value":37.0},{"id":8,"name":"Sleeve","value":44.0},{"id":9,"name":"Waist","value":74.0}]},{"id":"508770-009","displaySize":"IT36","stockLevel":"Low_Stock","measurements":[{"id":6,"name":"Bust","value":82.0},{"id":3,"name":"Length","value":55.0},{"id":7,"name":"Shoulder","value":36.0},{"id":8,"name":"Sleeve","value":44.0},{"id":9,"name":"Waist","value":72.0}]}],"designerShippingRestriction":false,"categories":[{"id":2,"name":"Clothing","urlKey":"Clothing","children":[{"id":44,"name":"Jackets","urlKey":"Jackets","children":[{"id":6594,"name":"Biker Jackets","urlKey":"Biker_Jackets"},{"id":6581,"name":"Leather","urlKey":"Leather"}]}]}],"colourIds":[2],"nonReturnable":false,"images":{"shots":["in","fr","bk","cu","ou","e1"],"sizes":["dl","headerbag","idl_cf","im_cf","is_cf","ivs_cf","l","m","m2","mt","mt2","pp","s","sl","xl","xs","xxl"],"mediaType":"image/jpeg","urlTemplate":"{{scheme}}//cache.net-a-porter.com/images/products/508770/508770_{{shot}}_{{size}}.jpg"},"editorsComments":"A <b>leather</b> biker jacket is a timeless wardrobe essential - Alexander McQueen's <b>silk</b>-lined version is luxurious and at the same time cool. It's accented with <b>silver</b> zipped hardware and has a buckled back so you can add feminine shape to the loose cut. <br><br>Shown here with: [The Row Sweater id461355], [Altuzarra Pants id505845], [Givenchy Clutch id472734], [Gianvito Rossi Pumps id496474], [IAM by Ileana Makri Ring id472191], [Eddie Borgo Bracelet id486294].","badges":["In_Stock"]}
1 change: 1 addition & 0 deletions demo/pids/538734.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"longDescription":"- Off-white shearling, dark-blue denim\r\n- Button fastenings through front\r\n- Fabric1: 100% shearling (Lamb); fabric2: 57% cotton, 43% ramie\r\n- Specialist clean","name":"Denim-paneled shearling jacket ","sizeFit":"- Fits true to size, take your normal size\r\n- Cut for a close fit \r\n- Mid-weight, non-stretchy fabric \r\n- Those with a large bust may wish to take the next size up \r\n- Model is 177cm/ 5'10\" and is wearing an IT size 40 ","visible":true,"price":{"currency":"GBP","divisor":100,"amount":249500},"onSale":false,"brand":{"id":220,"name":"Burberry Prorsum","urlKey":"Burberry_Prorsum"},"analyticsKey":"Denim-paneled shearling jacket ","id":538734,"skus":[{"id":"538734-014","displaySize":"IT46","stockLevel":"Low_Stock","measurements":[{"id":6,"name":"Bust","value":86.0},{"id":3,"name":"Length","value":60.0},{"id":7,"name":"Shoulder","value":41.0},{"id":8,"name":"Sleeve","value":48.0},{"id":9,"name":"Waist","value":92.0}]},{"id":"538734-013","displaySize":"IT44","stockLevel":"In_Stock","measurements":[{"id":6,"name":"Bust","value":84.0},{"id":3,"name":"Length","value":59.0},{"id":7,"name":"Shoulder","value":40.0},{"id":8,"name":"Sleeve","value":47.0},{"id":9,"name":"Waist","value":90.0}]},{"id":"538734-012","displaySize":"IT42","stockLevel":"In_Stock","measurements":[{"id":6,"name":"Bust","value":82.0},{"id":3,"name":"Length","value":58.0},{"id":7,"name":"Shoulder","value":39.0},{"id":8,"name":"Sleeve","value":46.0},{"id":9,"name":"Waist","value":88.0}]},{"id":"538734-011","displaySize":"IT40","stockLevel":"In_Stock","measurements":[{"id":6,"name":"Bust","value":80.0},{"id":3,"name":"Length","value":57.0},{"id":7,"name":"Shoulder","value":38.0},{"id":8,"name":"Sleeve","value":45.0},{"id":9,"name":"Waist","value":86.0}]},{"id":"538734-010","displaySize":"IT38","stockLevel":"In_Stock","measurements":[{"id":6,"name":"Bust","value":78.0},{"id":3,"name":"Length","value":56.0},{"id":7,"name":"Shoulder","value":37.0},{"id":8,"name":"Sleeve","value":44.0},{"id":9,"name":"Waist","value":84.0}]},{"id":"538734-009","displaySize":"IT36","stockLevel":"In_Stock","measurements":[{"id":6,"name":"Bust","value":76.0},{"id":3,"name":"Length","value":55.0},{"id":7,"name":"Shoulder","value":36.0},{"id":8,"name":"Sleeve","value":43.0},{"id":9,"name":"Waist","value":82.0}]},{"id":"538734-008","displaySize":"IT34","stockLevel":"In_Stock","measurements":[{"id":6,"name":"Bust","value":74.0},{"id":3,"name":"Length","value":54.0},{"id":7,"name":"Shoulder","value":35.0},{"id":8,"name":"Sleeve","value":42.0},{"id":9,"name":"Waist","value":80.0}]}],"designerShippingRestriction":false,"categories":[{"id":2,"name":"Clothing","urlKey":"Clothing","children":[{"id":44,"name":"Jackets","urlKey":"Jackets","children":[{"id":552,"name":"Casual Jackets","urlKey":"Casual_Jackets"},{"id":6580,"name":"Fur and Shearling","urlKey":"Fur_and_Shearling"}]},{"id":15502,"name":"Denim","urlKey":"Denim","children":[{"id":15565,"name":"Jackets","urlKey":"Jackets"}]}]}],"colourIds":[100],"nonReturnable":false,"images":{"shots":["in","rw","fr","bk","cu","ou","e1"],"sizes":["dl","headerbag","idl_cf","im_cf","is_cf","ivs_cf","l","m","m2","mt","mt2","pp","s","sl","xl","xs","xxl"],"mediaType":"image/jpeg","urlTemplate":"{{scheme}}//cache.net-a-porter.com/images/products/538734/538734_{{shot}}_{{size}}.jpg"},"editorsComments":"Burberry Prorsum's Italian-made <b>shearling</b> jacket has a curly collar, <b>denim</b> panels and angled pockets that are inspired by field designs from the Burberry Heritage archives. This slim-fit runway piece nips in at the waist and flares out slightly at the hem to flatter. Wear yours with a tonal skirt. <br><br>Shown here with: [The Row Shoulder Bag id513132], [Splendid T-shirt id521216], [Maria Rudman Ring id512059], [Maria Rudman Cuff id512061], [Arme De L'Amour Ring id491256], [Maison Martin Margiela Rings id497678], [Tomas Maier Skirt id503379], [Rochas Sandals id503951].","badges":["In_Stock"]}
Loading

0 comments on commit 737b8fd

Please sign in to comment.