From f6b9a614d1994d55a768bd20f9caee44a2722f4b Mon Sep 17 00:00:00 2001 From: Gabriel Axel Date: Tue, 9 Aug 2016 10:03:33 +0300 Subject: [PATCH 1/4] Update README.md --- README.md | 2 ++ ng-polymer-elements.js | 19 ++++++++++--------- ng-polymer-elements.min.js | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d020dd6..fd3f417 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +**Looking for maintainers, please contact me if you are interested.** + # ng-polymer-elements [Documentation and examples](https://gabiaxel.github.io/ng-polymer-elements/) diff --git a/ng-polymer-elements.js b/ng-polymer-elements.js index e9f894e..a05c3d5 100644 --- a/ng-polymer-elements.js +++ b/ng-polymer-elements.js @@ -43,19 +43,20 @@ var allMappings = { ironSelector: multiSelectableMappings, - paperInput: inputMappings, - paperTextarea: inputMappings, - paperRadioGroup: selectorMappings, - paperTabs: selectorMappings, - paperMenu: multiSelectableMappings, - paperCheckbox: checkMappings, - paperToggleButton: checkMappings, - paperDialog: { + ndInput: inputMappings, + ndTextarea: inputMappings, + ndRadioGroup: selectorMappings, + ndTabs: selectorMappings, + ndMenu: multiSelectableMappings, + ndCheckbox: checkMappings, + ndRadioButton: checkMappings, + ndToggleButton: checkMappings, + ndDialog: { ngOpened: '=opened', ngOverlayOpened: '&iron-overlay-opened', ngOverlayClosed: '&iron-overlay-closed' }, - paperSlider: { + ndSlider: { ngModel: '=value', ngChange: '&value-change', ngDisabled: '=disabled' diff --git a/ng-polymer-elements.min.js b/ng-polymer-elements.min.js index f2931b1..4fa0e24 100644 --- a/ng-polymer-elements.min.js +++ b/ng-polymer-elements.min.js @@ -1 +1 @@ -!function(angular){angular.module("ng-polymer-elements",[]).config(["$compileProvider","$injector",function($compileProvider,$injector){"use strict";var inputMappings={ngModel:"=value",ngDisabled:"=disabled",ngFocused:"=focused"},selectorMappings={ngModel:"=selected"},multiSelectableMappings={ngModel:function(element){return element.hasAttribute("multi")?"selectedValues":"selected"}},checkMappings={ngModel:"=checked",ngDisabled:"=disabled",ngChange:"&iron-change"},allMappings={ironSelector:multiSelectableMappings,paperInput:inputMappings,paperTextarea:inputMappings,paperRadioGroup:selectorMappings,paperTabs:selectorMappings,paperMenu:multiSelectableMappings,paperCheckbox:checkMappings,paperToggleButton:checkMappings,paperDialog:{ngOpened:"=opened",ngOverlayOpened:"&iron-overlay-opened",ngOverlayClosed:"&iron-overlay-closed"},paperSlider:{ngModel:"=value",ngChange:"&value-change",ngDisabled:"=disabled"},goldEmailInput:inputMappings,goldPhoneInput:inputMappings,goldCcInput:{ngModel:"=value",ngDisabled:"=disabled",ngFocused:"=focused",ngCardType:"=cardType"},goldCcExpirationInput:inputMappings,goldCcCvcInput:inputMappings,goldZipInput:inputMappings,googleFeeds:{ngModel:"=results",loading:"=loading",ngError:"&google-feeds-error",ngQueryError:"&google-feeds-queryerror",ngQueryResponse:"&google-feeds-queryresponse",ngResponse:"&google-feeds-response",ngMultiResponse:"&google-multi-feeds-response"},googleMap:{ngMap:"=map",ngLatitude:"=latitude",ngLongitude:"=longitude"},googleSheets:{ngRows:"=rows",ngSheet:"=sheet",ngTab:"=tab"}};if($injector.has("$ngPolymerMappings")){var extendedMappings=$injector.get("$ngPolymerMappings");angular.extend(allMappings,extendedMappings)}Object.keys(allMappings).forEach(function(tag){var mappings=allMappings[tag];$compileProvider.directive(tag,["$parse","$window",function($parse,$window){var scopeDefinition={},keys=Object.keys(mappings);return keys.forEach(function(attr){var mappingType,mapped=mappings[attr];switch(typeof mapped){case"string":if(mappingType=mapped.charAt(0),"="!==mappingType&&"&"!==mappingType)throw'Invalid mapping: "'+mapped+'" - must begin with "=" or "&"';mapped=mapped.substr(1);break;case"function":switch(mapped.name){case"property":mappingType="=";break;case"event":mappingType="&";break;default:throw'Invalid mapping for "'+attr+'" - function name must be "property" or "event"'}break;default:throw'Invalid mapped type for "'+attr+'" - must be string or function'}scopeDefinition[attr]=mappingType}),{restrict:"E",scope:scopeDefinition,link:function(scope,element,attrs){var el=element[0],observers={};scope.$on("$destroy",function(){Object.keys(observers).forEach(function(key){var observer=observers[key];Object.unobserve(el[key],observer)})}),keys.forEach(function(attr){if(attrs[attr]){var mappingType,mapped=mappings[attr];if("function"==typeof mapped?(mappingType="property"===mapped.name?"=":"&",mapped=mapped(el)):(mappingType=mapped.charAt(0),mapped=mapped.substr(1)),"&"===mappingType){var fn=$parse(attrs[attr]);el.addEventListener(mapped,function(e){scope.$apply(function(){fn(scope.$parent,{$event:e})})})}else{var propertyName=mapped,propertyInfo=el.getPropertyInfo(mapped),propertyType=propertyInfo.type,readOnly=propertyInfo.readOnly;if(!readOnly&&!el[propertyName])switch(propertyType){case Array:el[propertyName]=[];break;case Object:el[propertyName]={}}var attachObserver=function(){if(!readOnly)switch(observers[propertyName]&&(Object.unobserve(el[propertyName],observers[propertyName]),delete observers[propertyName]),propertyType){case Array:case Object:observers[propertyName]=function(){scope.$apply(function(){scope[attr]||(scope[attr]=propertyType===Array?[]:{}),angular.copy(el[propertyName],scope[attr])})},Object.observe(el[propertyName],observers[propertyName])}};attachObserver();var handler=function(){setTimeout(function(){var value=scope[attr];propertyType!=Array&&propertyType!=Object?void 0!==value&&(el[propertyName]=value):value&&(el[propertyName]=angular.copy(value),attachObserver())})};readOnly||(scope.$watch(attr,handler,!0),handler(scope[attr]));var eventName=propertyName.replace(/([A-Z])/g,function($1){return"-"+$1.toLowerCase()})+"-changed";el.addEventListener(eventName,function(event){var value=el[propertyName];el.async(function(){scope.$apply(function(){propertyType===Array||propertyType===Object?scope[attr]=angular.copy(value):scope[attr]!=value&&(scope[attr]=value)}),attachObserver()})})}}})}}}])})}])}(angular); \ No newline at end of file +!function(angular){angular.module("ng-polymer-elements",[]).config(["$compileProvider","$injector",function($compileProvider,$injector){"use strict";var inputMappings={ngModel:"=value",ngDisabled:"=disabled",ngFocused:"=focused"},selectorMappings={ngModel:"=selected"},multiSelectableMappings={ngModel:function(element){return element.hasAttribute("multi")?"selectedValues":"selected"}},checkMappings={ngModel:"=checked",ngDisabled:"=disabled",ngChange:"&iron-change"},allMappings={ironSelector:multiSelectableMappings,ndInput:inputMappings,ndTextarea:inputMappings,ndRadioGroup:selectorMappings,ndTabs:selectorMappings,ndMenu:multiSelectableMappings,ndCheckbox:checkMappings,ndRadioButton:checkMappings,ndToggleButton:checkMappings,ndDialog:{ngOpened:"=opened",ngOverlayOpened:"&iron-overlay-opened",ngOverlayClosed:"&iron-overlay-closed"},ndSlider:{ngModel:"=value",ngChange:"&value-change",ngDisabled:"=disabled"},goldEmailInput:inputMappings,goldPhoneInput:inputMappings,goldCcInput:{ngModel:"=value",ngDisabled:"=disabled",ngFocused:"=focused",ngCardType:"=cardType"},goldCcExpirationInput:inputMappings,goldCcCvcInput:inputMappings,goldZipInput:inputMappings,googleFeeds:{ngModel:"=results",loading:"=loading",ngError:"&google-feeds-error",ngQueryError:"&google-feeds-queryerror",ngQueryResponse:"&google-feeds-queryresponse",ngResponse:"&google-feeds-response",ngMultiResponse:"&google-multi-feeds-response"},googleMap:{ngMap:"=map",ngLatitude:"=latitude",ngLongitude:"=longitude"},googleSheets:{ngRows:"=rows",ngSheet:"=sheet",ngTab:"=tab"}};if($injector.has("$ngPolymerMappings")){var extendedMappings=$injector.get("$ngPolymerMappings");angular.extend(allMappings,extendedMappings)}Object.keys(allMappings).forEach(function(tag){var mappings=allMappings[tag];$compileProvider.directive(tag,["$parse","$window",function($parse,$window){var scopeDefinition={},keys=Object.keys(mappings);return keys.forEach(function(attr){var mappingType,mapped=mappings[attr];switch(typeof mapped){case"string":if(mappingType=mapped.charAt(0),"="!==mappingType&&"&"!==mappingType)throw'Invalid mapping: "'+mapped+'" - must begin with "=" or "&"';mapped=mapped.substr(1);break;case"function":switch(mapped.name){case"property":mappingType="=";break;case"event":mappingType="&";break;default:throw'Invalid mapping for "'+attr+'" - function name must be "property" or "event"'}break;default:throw'Invalid mapped type for "'+attr+'" - must be string or function'}scopeDefinition[attr]=mappingType}),{restrict:"E",scope:scopeDefinition,link:function(scope,element,attrs){var el=element[0],observers={};scope.$on("$destroy",function(){Object.keys(observers).forEach(function(key){var observer=observers[key];Object.unobserve(el[key],observer)})}),keys.forEach(function(attr){if(attrs[attr]){var mappingType,mapped=mappings[attr];if("function"==typeof mapped?(mappingType="property"===mapped.name?"=":"&",mapped=mapped(el)):(mappingType=mapped.charAt(0),mapped=mapped.substr(1)),"&"===mappingType){var fn=$parse(attrs[attr]);el.addEventListener(mapped,function(e){scope.$apply(function(){fn(scope.$parent,{$event:e})})})}else{var propertyName=mapped,propertyInfo=el.getPropertyInfo(mapped),propertyType=propertyInfo.type,readOnly=propertyInfo.readOnly;if(!readOnly&&!el[propertyName])switch(propertyType){case Array:el[propertyName]=[];break;case Object:el[propertyName]={}}var attachObserver=function(){if(!readOnly)switch(observers[propertyName]&&(Object.unobserve(el[propertyName],observers[propertyName]),delete observers[propertyName]),propertyType){case Array:case Object:observers[propertyName]=function(){scope.$apply(function(){scope[attr]||(scope[attr]=propertyType===Array?[]:{}),angular.copy(el[propertyName],scope[attr])})},Object.observe(el[propertyName],observers[propertyName])}};attachObserver();var handler=function(){setTimeout(function(){var value=scope[attr];propertyType!=Array&&propertyType!=Object?void 0!==value&&(el[propertyName]=value):value&&(el[propertyName]=angular.copy(value),attachObserver())})};readOnly||(scope.$watch(attr,handler,!0),handler(scope[attr]));var eventName=propertyName.replace(/([A-Z])/g,function($1){return"-"+$1.toLowerCase()})+"-changed";el.addEventListener(eventName,function(event){var value=el[propertyName];el.async(function(){scope.$apply(function(){propertyType===Array||propertyType===Object?scope[attr]=angular.copy(value):scope[attr]!=value&&(scope[attr]=value)}),attachObserver()})})}}})}}}])})}])}(angular); \ No newline at end of file From 18434573b9f851c351be6eac414a32fae9acc88d Mon Sep 17 00:00:00 2001 From: Gabriel Axel Date: Wed, 19 Oct 2016 21:10:03 +0300 Subject: [PATCH 2/4] Added "maintainers wanted" badge --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fd3f417..1ac86a7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ **Looking for maintainers, please contact me if you are interested.** -# ng-polymer-elements +# ng-polymer-elements [![Maintainers Wanted](https://img.shields.io/badge/maintainers-wanted-red.svg)](https://github.com/pickhardt/maintainers-wanted) + [Documentation and examples](https://gabiaxel.github.io/ng-polymer-elements/) From 7493aa9a6a7e7595bc7150583b595da424142c8c Mon Sep 17 00:00:00 2001 From: Jai Chandra Date: Wed, 26 Apr 2017 13:48:44 -0400 Subject: [PATCH 3/4] Add polymer 2.0 support --- ng-polymer-elements.js | 26 +++++++++++++++----------- ng-polymer-elements.min.js | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/ng-polymer-elements.js b/ng-polymer-elements.js index a05c3d5..20844d9 100644 --- a/ng-polymer-elements.js +++ b/ng-polymer-elements.js @@ -43,20 +43,19 @@ var allMappings = { ironSelector: multiSelectableMappings, - ndInput: inputMappings, - ndTextarea: inputMappings, - ndRadioGroup: selectorMappings, - ndTabs: selectorMappings, - ndMenu: multiSelectableMappings, - ndCheckbox: checkMappings, - ndRadioButton: checkMappings, - ndToggleButton: checkMappings, - ndDialog: { + paperInput: inputMappings, + paperTextarea: inputMappings, + paperRadioGroup: selectorMappings, + paperTabs: selectorMappings, + paperMenu: multiSelectableMappings, + paperCheckbox: checkMappings, + paperToggleButton: checkMappings, + paperDialog: { ngOpened: '=opened', ngOverlayOpened: '&iron-overlay-opened', ngOverlayClosed: '&iron-overlay-closed' }, - ndSlider: { + paperSlider: { ngModel: '=value', ngChange: '&value-change', ngDisabled: '=disabled' @@ -194,7 +193,12 @@ // Property mapping var propertyName = mapped; - var propertyInfo = el.getPropertyInfo(mapped); + var propertyInfo; + if(el.getPropertyInfo) { + propertyInfo = el.getPropertyInfo(mapped); + } else { + propertyInfo = el.constructor.__classProperties[mapped]; + } var propertyType = propertyInfo.type; var readOnly = propertyInfo.readOnly; diff --git a/ng-polymer-elements.min.js b/ng-polymer-elements.min.js index 4fa0e24..f2931b1 100644 --- a/ng-polymer-elements.min.js +++ b/ng-polymer-elements.min.js @@ -1 +1 @@ -!function(angular){angular.module("ng-polymer-elements",[]).config(["$compileProvider","$injector",function($compileProvider,$injector){"use strict";var inputMappings={ngModel:"=value",ngDisabled:"=disabled",ngFocused:"=focused"},selectorMappings={ngModel:"=selected"},multiSelectableMappings={ngModel:function(element){return element.hasAttribute("multi")?"selectedValues":"selected"}},checkMappings={ngModel:"=checked",ngDisabled:"=disabled",ngChange:"&iron-change"},allMappings={ironSelector:multiSelectableMappings,ndInput:inputMappings,ndTextarea:inputMappings,ndRadioGroup:selectorMappings,ndTabs:selectorMappings,ndMenu:multiSelectableMappings,ndCheckbox:checkMappings,ndRadioButton:checkMappings,ndToggleButton:checkMappings,ndDialog:{ngOpened:"=opened",ngOverlayOpened:"&iron-overlay-opened",ngOverlayClosed:"&iron-overlay-closed"},ndSlider:{ngModel:"=value",ngChange:"&value-change",ngDisabled:"=disabled"},goldEmailInput:inputMappings,goldPhoneInput:inputMappings,goldCcInput:{ngModel:"=value",ngDisabled:"=disabled",ngFocused:"=focused",ngCardType:"=cardType"},goldCcExpirationInput:inputMappings,goldCcCvcInput:inputMappings,goldZipInput:inputMappings,googleFeeds:{ngModel:"=results",loading:"=loading",ngError:"&google-feeds-error",ngQueryError:"&google-feeds-queryerror",ngQueryResponse:"&google-feeds-queryresponse",ngResponse:"&google-feeds-response",ngMultiResponse:"&google-multi-feeds-response"},googleMap:{ngMap:"=map",ngLatitude:"=latitude",ngLongitude:"=longitude"},googleSheets:{ngRows:"=rows",ngSheet:"=sheet",ngTab:"=tab"}};if($injector.has("$ngPolymerMappings")){var extendedMappings=$injector.get("$ngPolymerMappings");angular.extend(allMappings,extendedMappings)}Object.keys(allMappings).forEach(function(tag){var mappings=allMappings[tag];$compileProvider.directive(tag,["$parse","$window",function($parse,$window){var scopeDefinition={},keys=Object.keys(mappings);return keys.forEach(function(attr){var mappingType,mapped=mappings[attr];switch(typeof mapped){case"string":if(mappingType=mapped.charAt(0),"="!==mappingType&&"&"!==mappingType)throw'Invalid mapping: "'+mapped+'" - must begin with "=" or "&"';mapped=mapped.substr(1);break;case"function":switch(mapped.name){case"property":mappingType="=";break;case"event":mappingType="&";break;default:throw'Invalid mapping for "'+attr+'" - function name must be "property" or "event"'}break;default:throw'Invalid mapped type for "'+attr+'" - must be string or function'}scopeDefinition[attr]=mappingType}),{restrict:"E",scope:scopeDefinition,link:function(scope,element,attrs){var el=element[0],observers={};scope.$on("$destroy",function(){Object.keys(observers).forEach(function(key){var observer=observers[key];Object.unobserve(el[key],observer)})}),keys.forEach(function(attr){if(attrs[attr]){var mappingType,mapped=mappings[attr];if("function"==typeof mapped?(mappingType="property"===mapped.name?"=":"&",mapped=mapped(el)):(mappingType=mapped.charAt(0),mapped=mapped.substr(1)),"&"===mappingType){var fn=$parse(attrs[attr]);el.addEventListener(mapped,function(e){scope.$apply(function(){fn(scope.$parent,{$event:e})})})}else{var propertyName=mapped,propertyInfo=el.getPropertyInfo(mapped),propertyType=propertyInfo.type,readOnly=propertyInfo.readOnly;if(!readOnly&&!el[propertyName])switch(propertyType){case Array:el[propertyName]=[];break;case Object:el[propertyName]={}}var attachObserver=function(){if(!readOnly)switch(observers[propertyName]&&(Object.unobserve(el[propertyName],observers[propertyName]),delete observers[propertyName]),propertyType){case Array:case Object:observers[propertyName]=function(){scope.$apply(function(){scope[attr]||(scope[attr]=propertyType===Array?[]:{}),angular.copy(el[propertyName],scope[attr])})},Object.observe(el[propertyName],observers[propertyName])}};attachObserver();var handler=function(){setTimeout(function(){var value=scope[attr];propertyType!=Array&&propertyType!=Object?void 0!==value&&(el[propertyName]=value):value&&(el[propertyName]=angular.copy(value),attachObserver())})};readOnly||(scope.$watch(attr,handler,!0),handler(scope[attr]));var eventName=propertyName.replace(/([A-Z])/g,function($1){return"-"+$1.toLowerCase()})+"-changed";el.addEventListener(eventName,function(event){var value=el[propertyName];el.async(function(){scope.$apply(function(){propertyType===Array||propertyType===Object?scope[attr]=angular.copy(value):scope[attr]!=value&&(scope[attr]=value)}),attachObserver()})})}}})}}}])})}])}(angular); \ No newline at end of file +!function(angular){angular.module("ng-polymer-elements",[]).config(["$compileProvider","$injector",function($compileProvider,$injector){"use strict";var inputMappings={ngModel:"=value",ngDisabled:"=disabled",ngFocused:"=focused"},selectorMappings={ngModel:"=selected"},multiSelectableMappings={ngModel:function(element){return element.hasAttribute("multi")?"selectedValues":"selected"}},checkMappings={ngModel:"=checked",ngDisabled:"=disabled",ngChange:"&iron-change"},allMappings={ironSelector:multiSelectableMappings,paperInput:inputMappings,paperTextarea:inputMappings,paperRadioGroup:selectorMappings,paperTabs:selectorMappings,paperMenu:multiSelectableMappings,paperCheckbox:checkMappings,paperToggleButton:checkMappings,paperDialog:{ngOpened:"=opened",ngOverlayOpened:"&iron-overlay-opened",ngOverlayClosed:"&iron-overlay-closed"},paperSlider:{ngModel:"=value",ngChange:"&value-change",ngDisabled:"=disabled"},goldEmailInput:inputMappings,goldPhoneInput:inputMappings,goldCcInput:{ngModel:"=value",ngDisabled:"=disabled",ngFocused:"=focused",ngCardType:"=cardType"},goldCcExpirationInput:inputMappings,goldCcCvcInput:inputMappings,goldZipInput:inputMappings,googleFeeds:{ngModel:"=results",loading:"=loading",ngError:"&google-feeds-error",ngQueryError:"&google-feeds-queryerror",ngQueryResponse:"&google-feeds-queryresponse",ngResponse:"&google-feeds-response",ngMultiResponse:"&google-multi-feeds-response"},googleMap:{ngMap:"=map",ngLatitude:"=latitude",ngLongitude:"=longitude"},googleSheets:{ngRows:"=rows",ngSheet:"=sheet",ngTab:"=tab"}};if($injector.has("$ngPolymerMappings")){var extendedMappings=$injector.get("$ngPolymerMappings");angular.extend(allMappings,extendedMappings)}Object.keys(allMappings).forEach(function(tag){var mappings=allMappings[tag];$compileProvider.directive(tag,["$parse","$window",function($parse,$window){var scopeDefinition={},keys=Object.keys(mappings);return keys.forEach(function(attr){var mappingType,mapped=mappings[attr];switch(typeof mapped){case"string":if(mappingType=mapped.charAt(0),"="!==mappingType&&"&"!==mappingType)throw'Invalid mapping: "'+mapped+'" - must begin with "=" or "&"';mapped=mapped.substr(1);break;case"function":switch(mapped.name){case"property":mappingType="=";break;case"event":mappingType="&";break;default:throw'Invalid mapping for "'+attr+'" - function name must be "property" or "event"'}break;default:throw'Invalid mapped type for "'+attr+'" - must be string or function'}scopeDefinition[attr]=mappingType}),{restrict:"E",scope:scopeDefinition,link:function(scope,element,attrs){var el=element[0],observers={};scope.$on("$destroy",function(){Object.keys(observers).forEach(function(key){var observer=observers[key];Object.unobserve(el[key],observer)})}),keys.forEach(function(attr){if(attrs[attr]){var mappingType,mapped=mappings[attr];if("function"==typeof mapped?(mappingType="property"===mapped.name?"=":"&",mapped=mapped(el)):(mappingType=mapped.charAt(0),mapped=mapped.substr(1)),"&"===mappingType){var fn=$parse(attrs[attr]);el.addEventListener(mapped,function(e){scope.$apply(function(){fn(scope.$parent,{$event:e})})})}else{var propertyName=mapped,propertyInfo=el.getPropertyInfo(mapped),propertyType=propertyInfo.type,readOnly=propertyInfo.readOnly;if(!readOnly&&!el[propertyName])switch(propertyType){case Array:el[propertyName]=[];break;case Object:el[propertyName]={}}var attachObserver=function(){if(!readOnly)switch(observers[propertyName]&&(Object.unobserve(el[propertyName],observers[propertyName]),delete observers[propertyName]),propertyType){case Array:case Object:observers[propertyName]=function(){scope.$apply(function(){scope[attr]||(scope[attr]=propertyType===Array?[]:{}),angular.copy(el[propertyName],scope[attr])})},Object.observe(el[propertyName],observers[propertyName])}};attachObserver();var handler=function(){setTimeout(function(){var value=scope[attr];propertyType!=Array&&propertyType!=Object?void 0!==value&&(el[propertyName]=value):value&&(el[propertyName]=angular.copy(value),attachObserver())})};readOnly||(scope.$watch(attr,handler,!0),handler(scope[attr]));var eventName=propertyName.replace(/([A-Z])/g,function($1){return"-"+$1.toLowerCase()})+"-changed";el.addEventListener(eventName,function(event){var value=el[propertyName];el.async(function(){scope.$apply(function(){propertyType===Array||propertyType===Object?scope[attr]=angular.copy(value):scope[attr]!=value&&(scope[attr]=value)}),attachObserver()})})}}})}}}])})}])}(angular); \ No newline at end of file From 3875050532d727fccc545e6cdcef5a265e0d5e48 Mon Sep 17 00:00:00 2001 From: Jai Chandra Date: Thu, 13 Jul 2017 12:32:38 -0400 Subject: [PATCH 4/4] fix binding issues with Polymer 2 --- ng-polymer-elements.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ng-polymer-elements.js b/ng-polymer-elements.js index 20844d9..3209c7d 100644 --- a/ng-polymer-elements.js +++ b/ng-polymer-elements.js @@ -197,7 +197,14 @@ if(el.getPropertyInfo) { propertyInfo = el.getPropertyInfo(mapped); } else { - propertyInfo = el.constructor.__classProperties[mapped]; + var behaviorProps = el.behaviors.map(function(x) { + return x.properties; + }); + var classProps = Object.assign({}, el.constructor.properties, behaviorProps.reduce(function(o, val) { + return Object.assign(o, val); + })); + + propertyInfo = classProps[mapped]; } var propertyType = propertyInfo.type; var readOnly = propertyInfo.readOnly;