MCPcopy Create free account
hub / github.com/aurelia/binding / createPropertyObserver

Method createPropertyObserver

src/observer-locator.js:108–188  ·  view source on GitHub ↗
(obj, propertyName)

Source from the content-addressed store, hash-verified

106 }
107
108 createPropertyObserver(obj, propertyName) {
109 let descriptor;
110 let handler;
111 let xlinkResult;
112
113 if (!(obj instanceof Object)) {
114 return new PrimitiveObserver(obj, propertyName);
115 }
116
117 if (obj instanceof DOM.Element) {
118 if (propertyName === 'class') {
119 return new ClassObserver(obj);
120 }
121 if (propertyName === 'style' || propertyName === 'css') {
122 return new StyleObserver(obj, propertyName);
123 }
124 handler = this.eventManager.getElementHandler(obj, propertyName);
125 if (propertyName === 'value' && obj.tagName.toLowerCase() === 'select') {
126 return new SelectValueObserver(obj, handler, this);
127 }
128 if (propertyName === 'checked' && obj.tagName.toLowerCase() === 'input') {
129 return new CheckedObserver(obj, handler, this);
130 }
131 if (handler) {
132 return new ValueAttributeObserver(obj, propertyName, handler);
133 }
134 xlinkResult = /^xlink:(.+)$/.exec(propertyName);
135 if (xlinkResult) {
136 return new XLinkAttributeObserver(obj, propertyName, xlinkResult[1]);
137 }
138 if (propertyName === 'role' && (obj instanceof DOM.Element || obj instanceof DOM.SVGElement)
139 || /^\w+:|^data-|^aria-/.test(propertyName)
140 || obj instanceof DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName)) {
141 return new DataAttributeObserver(obj, propertyName);
142 }
143 }
144
145 descriptor = Object.getPropertyDescriptor(obj, propertyName);
146
147 if (hasDeclaredDependencies(descriptor)) {
148 return createComputedObserver(obj, propertyName, descriptor, this);
149 }
150
151 if (descriptor) {
152 const existingGetterOrSetter = descriptor.get || descriptor.set;
153 if (existingGetterOrSetter) {
154 if (existingGetterOrSetter.getObserver) {
155 return existingGetterOrSetter.getObserver(obj);
156 }
157
158 // attempt to use an adapter before resorting to dirty checking.
159 let adapterObserver = this.getAdapterObserver(obj, propertyName, descriptor);
160 if (adapterObserver) {
161 return adapterObserver;
162 }
163 return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);
164 }
165 }

Callers 3

getObserverMethod · 0.95
aurelia-binding.jsFile · 0.80
aurelia-binding.jsFile · 0.80

Calls 10

getAdapterObserverMethod · 0.95
getArrayObserverMethod · 0.95
getMapObserverMethod · 0.95
getSetObserverMethod · 0.95
hasDeclaredDependenciesFunction · 0.90
createComputedObserverFunction · 0.90
getElementHandlerMethod · 0.80
getObserverMethod · 0.65
getLengthObserverMethod · 0.65

Tested by

no test coverage detected