Skip to content

Instantly share code, notes, and snippets.

@adzialocha
Created July 2, 2013 19:17
Show Gist options
  • Save adzialocha/5912224 to your computer and use it in GitHub Desktop.
Save adzialocha/5912224 to your computer and use it in GitHub Desktop.
simple text truncation directive (using truncate="text" in dom) - sketch for angular
'use strict'
angular.module('angular-truncate')
.directive 'truncate', [ () ->
restrict: 'A'
link: (scope, element, attrs) ->
# wait until text is available
attrs.$observe 'truncate', (text) ->
_truncate(text)
_truncate = (dText) ->
clone = element[0].cloneNode(true)
angular.element(clone).css('visibility', 'hidden')
angular.element(clone).css('position', 'absolute')
angular.element(clone).css('overflow', 'visible')
angular.element(clone).css('width', element[0].offsetWidth)
angular.element(clone).css('height', 'auto')
angular.element(clone).text(dText)
angular.element(element[0]).after(clone)
height = () ->
clone.offsetHeight > element[0].offsetHeight
weight = () -> clone.offsetWidth > element[0].offsetWidth
while dText.length > 0 && height()
dText = dText.substr(0, dText.length - 1)
angular.element(clone).text(dText + '...')
angular.element(element[0]).html(angular.element(clone).html())
angular.element(clone).remove()
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment