1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-11-29 10:24:20 +01:00
fab-manager/app/assets/javascripts/directives/directives.coffee
2016-03-23 18:39:41 +01:00

105 lines
2.9 KiB
CoffeeScript

'use strict'
Application.Directives.directive 'fileread', [ ->
{
scope:
fileread: "="
link: (scope, element, attributes) ->
element.bind "change", (changeEvent) ->
scope.$apply ->
scope.fileread = changeEvent.target.files[0]
}
]
# This `bsHolder` angular directive is a workaround for
# an incompatability between angular and the holder.js
# image placeholder library.
#
# To use, simply define `bs-holder` on any element
Application.Directives.directive 'bsHolder', [ ->
{
link: (scope, element, attrs) ->
Holder.addTheme("icon", { background: "white", foreground: "#e9e9e9", size: 80, font: "FontAwesome"})
.addTheme("icon-xs", { background: "white", foreground: "#e0e0e0", size: 20, font: "FontAwesome"})
.addTheme("icon-black-xs", { background: "black", foreground: "white", size: 20, font: "FontAwesome"})
.addTheme("avatar", { background: "#eeeeee", foreground: "#555555", size: 16, font: "FontAwesome"})
.run(element[0])
return
}
]
Application.Directives.directive 'match', [ ->
{
require: 'ngModel'
restrict: 'A'
scope:
match: '='
link: (scope, elem, attrs, ctrl) ->
scope.$watch ->
(ctrl.$pristine && angular.isUndefined(ctrl.$modelValue)) || scope.match == ctrl.$modelValue
, (currentValue) ->
ctrl.$setValidity('match', currentValue)
}
]
Application.Directives.directive 'publishProject', [ ->
{
restrict: 'A'
link: (scope, elem, attrs, ctrl) ->
elem.bind 'click', ($event)->
if ($event)
$event.preventDefault()
$event.stopPropagation()
return if (elem.attr('disabled'))
input = angular.element('<input name="project[state]" type="hidden" value="published">')
form = angular.element('form')
form.append(input)
form.triggerHandler('submit')
form[0].submit()
}
]
Application.Directives.directive "disableAnimation", ($animate) ->
restrict: "A"
link: (scope, elem, attrs) ->
attrs.$observe "disableAnimation", (value) ->
$animate.enabled not value, elem
##
# Isolate a form's scope from its parent : no nested validation
##
Application.Directives.directive 'isolateForm', [ ->
{
restrict: 'A',
require: '?form'
link: (scope, elm, attrs, ctrl) ->
return unless ctrl
# Do a copy of the controller
ctrlCopy = {}
angular.copy(ctrl, ctrlCopy)
# Get the form's parent
parent = elm.parent().controller('form')
# Remove parent link to the controller
parent.$removeControl(ctrl)
# Replace form controller with a "isolated form"
isolatedFormCtrl =
$setValidity: (validationToken, isValid, control) ->
ctrlCopy.$setValidity(validationToken, isValid, control);
parent.$setValidity(validationToken, true, ctrl);
$setDirty: ->
elm.removeClass('ng-pristine').addClass('ng-dirty');
ctrl.$dirty = true;
ctrl.$pristine = false;
angular.extend(ctrl, isolatedFormCtrl)
}
]