livescript operation-overload.ls

operation-overload.ls
# when the left one is an array literal
['a' 'b'] * 2 # array repetition
# when the right one is a string literal
<[ foo bar ]> * ', ' # array joining

# or when the left one is a string
y = 2
'z' * y # string repetition
words = text / ' ' # string division

# or even when the right one is either a string or a regexp
unspaced = text - /\s+/
[\a to \e] * '' - 'b'

livescript #JS对象

#JS对象

vehicle.ls
var vehicle1 = {type: "Motorboat", capacity: 6, storedAt: "Ammunition Depot"};
var vehicle2 = {type: "Jet Ski", capacity: 1, storedAt: "Reef Dock"};
var vehicle3 = {type: "Submarine", capacity: 8, storedAt: "Underwater Outpost"};

var vehicles = [vehicle1, vehicle2, vehicle3];
var findVehicle = function (name, list){
  for(var i = 0; i<list.length; i++){
    if(list[i].type == name){
      return list[i].storedAt;
    }
  }
};
findVehicle("Submarine", vehicles);

livescript 惰性(科里化).ls

惰性(科里化).ls
# var xs = [1,2,3]
# doubleMe(doubleMe(doubleMe(xs)))
#這樣寫法有很多缺點,太多層次要把全部層次讀完才能知道最後結果。

#在墮性語言之中
#我們要做到調用 doubleMe 時並不會立即求值,它會說“嗯嗯,待會兒再做!”
#在真正執行時只會是一個平面,像 xs *2 *2 *2;

(a, b, c) --> a * b * c
#代替了
(a) -> (b) -> (c) -> a * b * c

#舉例
#var times = function(x) {
#  return function(y) {
#    return x*y;
#  }
#}
#console.log(time(2)(3)) // 6  

times = (x, y) --> x * y
times 2, 3       #=> 6 (参数足够时是一个普通的函数,返回计算后的结果)
double = times 2 #参数不够时,会返回一个部分应用函数.相当于JavaScript中的double = times.bind(null,2)
double 5         #=> 10 (相当于times(2)(5))

look at p.69
http://www.slideshare.net/ihower/fp-osdc2012v2

livescript gistfile1.ls

gistfile1.ls
uploader = $fileUploader.create(
    scope: $scope                      
    url: "http://#{$rootScope.api}/proposal/upload"
    formData: [{
      key: \value
    }]
    filters: [ 
      (item) ->  
        if item.size >10000000
          alert \size不得超過10mb
          false
        else  
          true
    ]
  )
  uploader.filters.push (item) ->  
    true
  $scope.picPool = []
  
  uploader.bind \progress, (event, item, progress) ->
    console.info \Progress:  + progress, item
  
  uploader.bind \beforeupload, (event, item)->
    console.info 'Before upload', item
  
  uploader.bind \complete, (event, xhr, item)-> 
    _x = angular.fromJson xhr.response 
    $scope.change = true
    if _x.n == \error
      alert \上傳圖片需為2000x1500px
    else
      $scope.picPool.push {u:_x.n,m:0}
      $scope.oi = false
      $scope.mainpic = $scope.picPool[0].u
      _ym = 0
      for v in $scope.picPool
        if v.m == 1 
          _ym = 1
      if _ym == 0
        $scope.picPool[0].m = 1
        
  uploader.bind \completeall, (event, items) !->
    $scope.oi = false
  
  $scope.uploader = uploader