Skip to content

Commit 2b8ab35

Browse files
committed
Merge branch 'develop'
2 parents 10ef222 + cc8476d commit 2b8ab35

15 files changed

+307
-582
lines changed

CHANGELOG.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
# Changelog
22

3-
## 1.0
3+
## 0.1
44
* Inital Version
55

6-
## 1.0.1
6+
## 0.1.1
77
* Fixes in javascript version and a few code cleanups
88

9-
## 1.1
9+
## 0.2
1010
* Now supports and prefers standalone `@inject`, so you can inject seperately from the `@register` method.
1111
* Old `@register` syntax is still supported
1212

13-
## 1.1.1
14-
* Added shortcut to `module.classyController`, you can now use `module.cC` if you prefer.
13+
## 0.2.1
14+
* Added shortcut to `module.classyController`, you can now use `module.cC` if you prefer.
15+
16+
## 0.3
17+
* Coffeescript `class extends` syntax is no longer supported
18+
* classyController now maps to classyController.create
19+
* The previous `JS` API (classyController.create) is now the universal API
20+
* Create a classy controller with app.classyController(controllerName, classObj)
21+
* Moved version numbers to pre-1.0 because API stability is not important for the moment and test coverage isn't as good as I'd like it to be.

angular-classy.coffee

Lines changed: 40 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -82,45 +82,43 @@ classFns =
8282
# Add the `deps` to the controller's $inject annotations.
8383
parent.$inject = deps
8484

85-
# compileController: (el, controllerName) ->
86-
# el.setAttribute('data-ng-controller', controllerName);
87-
# window.setTimeout ->
88-
# angular.element(document).injector().invoke ($compile) ->
89-
# scope = angular.element(el).scope()
90-
# $compile(el)(scope)
91-
# , 0
92-
93-
registerSelector: (appInstance, selectorString, parent) ->
85+
registerSelector: (appInstance, selector, parent) ->
9486
@selectorControllerCount++
95-
controllerName =
96-
"#{selectorString.replace(/\W/g, '')}ClassySelector#{@selectorControllerCount}Controller"
87+
controllerName = "ClassySelector#{@selectorControllerCount}Controller"
9788
appInstance.controller controllerName, parent
9889

99-
els = window.jQuery?(selectorString) or document.querySelectorAll(selectorString)
100-
el.setAttribute('data-ng-controller', controllerName) for el in els
90+
if angular.isElement(selector)
91+
selector.setAttribute('data-ng-controller', controllerName)
92+
return
10193

102-
register: (appInstance, name, deps, parent) ->
103-
if name.indexOf('$') is 0
104-
# If first character of `name` is '$' then treat it as a selector
105-
@registerSelector(appInstance, name.slice(1), parent)
106-
else
107-
# Register the controller
108-
appInstance.controller name, parent
94+
if angular.isString(selector)
95+
# Query the dom using jQuery if available, otherwise fallback to qSA
96+
els = window.jQuery?(selector) or document.querySelectorAll(selector)
97+
else if angular.isArray(selector)
98+
els = selector
99+
else return
100+
101+
for el in els
102+
if angular.isElement(el)
103+
el.setAttribute('data-ng-controller', controllerName)
104+
105+
create: (appInstance, classObj, parent) ->
106+
if classObj.el || classObj.selector
107+
# Register the controller using selector
108+
@registerSelector(appInstance, classObj.el || classObj.selector, parent)
109+
110+
if angular.isString(classObj.name)
111+
# Register the controller using name
112+
appInstance.controller classObj.name, parent
113+
114+
deps = classObj.inject
109115

110116
# Inject the `deps` if it's passed in as an array
111117
if angular.isArray(deps) then @inject(parent, deps)
112118

113119
# If `deps` is object: Wrap object in array and then inject
114120
else if angular.isObject(deps) then @inject(parent, [deps])
115121

116-
create: (module, name, deps, proto, parent) ->
117-
# Helper function that allows us to use an object literal instead of coffeescript classes (or prototype messiness)
118-
c = class extends parent
119-
@register(name, deps, module)
120-
for own key,value of proto
121-
c::[key] = value
122-
return c
123-
124122

125123
origMethod = angular.module
126124
angular.module = (name, reqs, configFn) ->
@@ -133,30 +131,26 @@ angular.module = (name, reqs, configFn) ->
133131

134132
# If this module has required 'classy' then we're going to add `classyController`
135133
if reqs and 'classy' in reqs
136-
class classyController
137-
# `classyController` is only a set of proxy functions for `classFns`,
138-
# this is because I suspect that performance is better this way.
139-
# TODO: Test performance to see if this is the best way to do it.
134+
module.cC = module.classyController = (classObj) ->
135+
c = class classyController
136+
# `classyController` is only a set of proxy functions for `classFns`,
137+
# this is because I suspect that performance is better this way.
138+
# TODO: Test performance to see if this is the most performant way to do it.
140139

141-
__classyControllerScopeName: '$scope'
140+
__classyControllerScopeName: '$scope'
142141

143-
@register: (name, deps) ->
144-
# Registers controller and optionally inject dependencies
145-
classFns.register(module, name, deps, @)
142+
# Create the Classy Controller
143+
classFns.create(module, classObj, @)
146144

147-
@inject: (deps...) ->
148-
# Injects the `dep`s
149-
classFns.inject(@, deps)
145+
constructor: ->
146+
# Where the magic happens
147+
classFns.construct(@, arguments)
150148

151-
@create: (name, deps, proto) ->
152-
# This method allows for nicer syntax for those not using CoffeeScript
153-
classFns.create(module, name, deps, proto, @)
149+
for own key,value of classObj
150+
c::[key] = value
154151

155-
constructor: ->
156-
# Where the magic happens
157-
classFns.construct(@, arguments)
152+
return c
158153

159-
module.cC = module.classyController = classyController
160154

161155
return module
162156

0 commit comments

Comments
 (0)