### # Copyright (C) 2014 Andrey Antukh # Copyright (C) 2014 Jesús Espino Garcia # Copyright (C) 2014 David Barragán Merino # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # File: utils.coffee ### bindOnce = (scope, attr, continuation) => val = scope.$eval(attr) if val != undefined return continuation(val) delBind = null delBind = scope.$watch attr, (val) -> return if val is undefined continuation(val) delBind() if delBind mixOf = (base, mixins...) -> class Mixed extends base for mixin in mixins by -1 #earlier mixins override later ones for name, method of mixin:: Mixed::[name] = method Mixed trim = (data, char) -> return _.str.trim(data, char) toggleText = (element, texts) -> nextTextPosition = element.data('nextTextPosition') nextTextPosition = 0 if not nextTextPosition? or nextTextPosition >= texts.length text = texts[nextTextPosition] element.data('nextTextPosition', nextTextPosition + 1) element.text(text) groupBy = (coll, pred) -> result = {} for item in coll result[pred(item)] = item return result taiga = @.taiga taiga.bindOnce = bindOnce taiga.mixOf = mixOf taiga.trim = trim taiga.toggleText = toggleText taiga.groupBy = groupBy