User content directive for AngularJS
HTML
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script src="http://code.angularjs.org/1.0.0/angular-1.0.0.js"></script>
<div ng-controller="MyCtrl">
<div class="test" text-direction-on="ltrMessage">{{ltrMessage}}</div>
<div class="test" text-direction>{{ltrMessage}}</div>
<div class="test" text-direction-on="rtlMessage">{{rtlMessage}}</div>
<div class="test" text-direction>{{rtlMessage}}</div>
</div>
CSS
.test {
width: 115px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
border: 1px blue solid;
padding: 4px;
margin: 5px;
}
JavaScript
var app=angular.module('myApp', []);
function MyCtrl($scope) {
$scope.ltrMessage = "all you need is love";
$scope.rtlMessage = "כל מה שאתה צריך היא אהבה";
}
// Полностью см. https://github.com/twitter/RTLtextarea/blob/master/src/RTLText.module.js
function getDirection(plainText) {
var rtlChar = /[\u0590-\u083F]|[\u08A0-\u08FF]|[\uFB1D-\uFDFF]|[\uFE70-\uFEFF]/mg;
return plainText.match(rtlChar) ? "rtl" : "ltr";
}
app.directive('textDirectionOn', [function() {
return {
link: function(scope, element, attr) {
var text = scope.$eval(attr.textDirectionOn);
element[0].style.direction = getDirection(text);
if (!element[0].title) {
element[0].title = text;
}
}
};
}])
.directive('textDirection', ['$timeout', function($timeout) {
return {
link: function(scope, element, attr) {
// timeout to take time
// to angular to resolve template
$timeout(function() {
var text = element[0].innerText;
element[0].style.direction = getDirection(text);
if (!element[0].title) {
element[0].title = text;
}
}, 0);
}
};
}]);