so mamy things...

This commit is contained in:
didier amyot committed 2015-07-05 17:17:01 -04:00
1 parent f7a8d416c1
commit 78d50d9a6d
24 files changed
+516 -173

No files matched your search

+21 -1
View File
@@ -1,9 +1,11 @@
define [
"angularAMD"
"lodash"
"angular-route"
"foundation"
], (angularAMD) ->
], (angularAMD, _) ->
app = angular.module("webapp", ["ngRoute", "mm.foundation"])
app.config ($routeProvider) ->
$routeProvider.when("/", angularAMD.route(
@@ -39,6 +41,24 @@ define [
document.getElementsByTagName("body")[0].style.visibility = ""
return
app.controller "topbarCtrl", ["$scope", "$rootScope", "$location", ($scope, $rootScope, $location) ->
$scope.init = () ->
$scope.email = localStorage.getItem("email")
$scope.loggedIn = !!$scope.email
if !$scope.loggedIn
$location.path('/').replace()
$scope.logout = () ->
localStorage.setItem("email", "")
$scope.email = ""
$scope.loggedIn = false
$scope.$emit("logout")
$scope.init()
$rootScope.$on('login', $scope.init)
return
]
angularAMD.bootstrap(app)
+4 -4
View File
@@ -25,8 +25,8 @@ define ["app", "angularAMD"], (app, angularAMD) ->
angularAMD.directive "wabApi", () ->
directive =
restrict: 'E',
scope:
endpoint: '@'
template: '<a>/api{{ endpoint }}</a>'
restrict: 'E',
scope:
endpoint: '@'
template: '<a>/api{{ endpoint }}</a>'
return directive
+12 -2
View File
@@ -1,6 +1,8 @@
define ["app", "lodash"], (app, _) ->
define ["app", "lodash", "directives/ratinput"], (app, _, ratinput) ->
app.controller "DoormanCtrl", ["$scope", "$http","$routeParams","$location", ($scope, $http, $routeParams, $location) ->
$scope.doorman = {values: []}
$scope.somevalue = "2/6"
$scope.apiurl = "/api/doormen/#{$routeParams.id}"
$scope.user = localStorage.getItem("email")
@@ -20,10 +22,18 @@ define ["app", "lodash"], (app, _) ->
$scope.initEmails = () ->
[$scope.leftEmailColumns, $scope.rightEmailColumns] = _.chunk($scope.doorman.emails, 2)
$scope.rationalToFloat = (rat) ->
if _.contains(rat, "/")
num = Number(rat.substr(0, rat.indexOf("/")))
denum = Number(rat.substr(rat.indexOf("/") + 1))
return num / denum
Number(rat)
$scope.validate = ()->
ret = 0
for val in $scope.doorman.values
ret += val.probability
ret += $scope.rationalToFloat(val.probability)
return Math.abs(ret - 1.0) < 0.000001
$scope.addNewAuthorEmail = () ->
+8 -4
View File
@@ -1,11 +1,15 @@
define ["app"], (app) ->
app.controller "HomeCtrl", ($scope) ->
$scope.message = "message from home ctrl"
$scope.loggedEmail = localStorage.getItem("email")
app.controller "HomeCtrl", ['$scope', '$rootScope', ($scope, $rootScope) ->
$scope.init = () ->
$scope.loggedEmail = localStorage.getItem("email")
$scope.login = () ->
if $scope.email
localStorage.setItem("email", $scope.email)
$scope.loggedEmail = $scope.email
$scope.email = ""
$scope.$emit("login")
return
$scope.init()
$rootScope.$on('logout', $scope.init)
]
+22 -12
View File
@@ -1,10 +1,10 @@
epsilon = 0.0001
define ["app", "../filters"], (app, filters) ->
app.controller "NewDoormanCtrl", ["$scope", "$http", "$location", ($scope, $http, $location) ->
define ["app", "lodash", "../filters", "directives/ratinput"], (app, _, filters, ratinput) ->
app.controller "NewDoormanCtrl", ["$scope", "$http", "$location", "rationals", ($scope, $http, $location, rationals) ->
$scope.error = ""
$scope.user = localStorage.getItem("email")
$scope.value = {probability: 0, name: ""}
$scope.value = {probability: "1", name: ""}
$scope.payload =
name: ""
values: []
@@ -17,27 +17,34 @@ define ["app", "../filters"], (app, filters) ->
if !$scope.isValidValue()
return
$scope.payload.values.push($scope.value)
$scope.value = {name: "", probability: 0}
$scope.value =
name: ""
probability: $scope.getProbabilityRemaining()
$scope.removeValue = (idx) ->
$scope.payload.values.splice(idx, 1);
$scope.getProbabilityRemaining = () ->
ret = 0
for v in $scope.payload.values
ret += v.probability
return 1 - ret
sum = rationals.sum(_.pluck($scope.payload.values, "probability")...)
return rationals.minus("1", sum)
$scope.redirectToDoorman = (doormanLocation) ->
$http.get(doormanLocation).then (res) ->
id = res.data.id
return $location.url("/doormen/#{id}")
$scope.getPayload = () ->
payload = _.cloneDeep($scope.payload)
for value in payload.values
value.probability = value.probability
return payload
$scope.createDoorman = () ->
if not $scope.isDoormanValid()
return
params = {params: {user: $scope.user}}
$http.post("/api/doormen", $scope.payload, params).
$http.post("/api/doormen", $scope.getPayload(), params).
then((res, s) ->
$scope.redirectToDoorman(res.headers("location"))
).catch((res) ->
@@ -49,9 +56,8 @@ define ["app", "../filters"], (app, filters) ->
return false
if $scope.payload.values.length < 2
return false
if Math.abs($scope.getProbabilityRemaining()) > epsilon
return false
return true
rationals.equal($scope.getProbabilityRemaining(), "0" )
$scope.addEmail = () ->
if not $scope.newEmail
@@ -64,6 +70,10 @@ define ["app", "../filters"], (app, filters) ->
return
$scope.payload.emails.splice(idx, 1);
$scope.getSum = () ->
probs = _.pluck($scope.payload.values, "probability")
return rationals.pp(rationals.sum(probs...))
return
+64
View File
@@ -0,0 +1,64 @@
template = """
<div class="row rat-input">
<div class="row" ng-show="!edit" >
<div class="columns large-12" style="text-align: center;">
<span class="fraction-box" ng-click="enableEdit()">
<span ng-bind="nominator"></span> &frasl; <span ng-bind="denominator" ></span>
<i class="fa fa-pencil-square-o" ng-show="!ngDisabled"></i>
</span>
</div>
</div>
<div ng-show="edit" class="edit">
<form ng-submit="edit=false">
<div class="large-12 columns" style="text-align: center;">
<input ng-model="nominator" type="text" ng-change="changeModel()" ng-disabled="ngDisabled">
<span style="text-align: center;">&frasl;<span>
<input ng-model="denominator" type="text" ng-change="changeModel()" ng-disabled="ngDisabled">
<i class="fa fa-check" ng-click="edit=false"></i>
<input type="submit" style="display:none;">
</div>
</form>
</div>
</div>
"""
define ["app", "angularAMD", "lodash", "services/rationals"], (app, angularAMD, _, rationals) ->
angularAMD.directive "ratInput", () ->
directive =
restrict: 'E',
template: template
scope:
ngModel: "="
ngDisabled: "="
controller: [ '$scope', "rationals", ($scope, rationals) ->
$scope.getNominator = ()->
if _.contains($scope.ngModel, "/")
return Number($scope.ngModel.substr(0, $scope.ngModel.indexOf("/")))
Number($scope.ngModel)
$scope.getDenominator = () ->
if _.contains($scope.ngModel, "/")
return Number($scope.ngModel.substr($scope.ngModel.indexOf("/") + 1))
1
$scope.changeModel = ()->
$scope.ngModel = rationals.newRat($scope.nominator, $scope.denominator)
$scope.enableEdit = () ->
if not $scope.ngDisabled
$scope.edit = true
$scope.init = () ->
$scope.nominator = rationals.getNominator($scope.ngModel)
$scope.denominator = $scope.getDenominator()
$scope.$watch 'ngModel', () ->
$scope.init()
$scope.init()
]
return directive
+80
View File
@@ -0,0 +1,80 @@
define ["app", "angularAMD", "lodash"], (app, angularAMD, _) ->
app.service "rationals", () ->
service =
getNominator: (rat) ->
if _.contains(rat, "/")
return Number(rat.substr(0, rat.indexOf("/")))
Number(rat)
getDenominator: (rat) ->
if _.contains(rat, "/")
return Number(rat.substr(rat.indexOf("/") + 1))
1
getNomDenom: (rat) ->
return [service.getNominator(rat), service.getDenominator(rat)]
gcd: (a, b) ->
if b == 0
return a
return service.gcd(b, a % b)
lcm: (a, b) ->
return a * b / service.gcd(a, b)
changeDenominator: (rat, newDenom) ->
[nom, denom] = service.getNomDenom(rat)
return service.newRat( nom * newDenom / denom, newDenom)
add: (rat1, rat2) ->
[nom, denom] = service.getNomDenom(rat2)
[nNom, nDenom] = service.getNomDenom(rat1)
gcd = service.gcd(nDenom, denom)
rNom = nom*nDenom + nNom * denom
rDenom = denom * nDenom
return service.newRat(rNom/gcd , rDenom/gcd)
minus: (rat1, rat2) ->
return service.add(rat1, service.opposite(rat2))
reduce: (rat) ->
[nom, denom] = service.getNomDenom(rat)
gcd = service.gcd(nom, denom)
return service.newRat(nom/gcd, denom/gcd)
opposite: (rat) ->
[nom, denom] = service.getNomDenom(rat)
return service.newRat(-nom, denom)
sum: (rats...) ->
ret = "0/1"
for rat in rats
ret = service.add(ret, rat)
return service.reduce(ret)
equal: (rat1, rat2) ->
[nom1, denom1] = service.getNomDenom(rat1)
[nom2, denom2] = service.getNomDenom(rat2)
return nom1 * denom2 == nom2 * denom1
pp: (x) ->
[num, denum] = service.getNomDenom(service.reduce(x))
if denum == 1
return num
return "#{num}/#{denum}"
newRat: (nom , denom) ->
if nom * denom >= 0
return "#{Math.abs(nom)}/#{Math.abs(denom)}"
return "#{-Math.abs(nom)}/#{Math.abs(denom)}"
return service
app.filter "ratpp", ["rationals", (rationals) ->
filter = (n) ->
return rationals.pp(n)
]