just having a backup of the libraries Admin/vendor (angularjs & some libraries) api/system (codeigniter framework libraries) Student/vendor (angularjs & some libraries) api/application/third_party (two heavy useless libraries)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

228 lines
8.6 KiB

/**
* NG Letter Avatar is directive for AngularJS apps
* @version v4.0.2 - 2016-04-16 * @link https://github.com/uttesh/ngletteravatar
* @author Uttesh Kumar T.H. <uttesh@gmail.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
'use strict';
var nla = angular.module('ngLetterAvatar', []);
nla.constant('defaultSettings', {
alphabetcolors: ["#5A8770", "#B2B7BB", "#6FA9AB", "#F5AF29", "#0088B9", "#F18636", "#D93A37", "#A6B12E", "#5C9BBC", "#F5888D", "#9A89B5", "#407887", "#9A89B5", "#5A8770", "#D33F33", "#A2B01F", "#F0B126", "#0087BF", "#F18636", "#0087BF", "#B2B7BB", "#72ACAE", "#9C8AB4", "#5A8770", "#EEB424", "#407887"],
textColor: '#ffffff',
defaultBorder: 'border:5px solid white',
triangleup: 'width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid;',
fontsize: 30, // unit in pixels
height: 50, // unit in pixels
width: 50, // unit in pixels
fontWeight: 400, //
charCount: 1,
fontFamily: 'HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica, Arial,Lucida Grande, sans-serif',
base: 'data:image/svg+xml;base64,',
radius: 'border-radius:50%;',
custombgcolor: '',
dynamic: 'false',
rotatedeg: '0'
});
/**
* directive to create the avatar
* @param {type} param1
* @param {type} param2
*/
nla.directive('ngLetterAvatar', ['defaultSettings', function (defaultSettings) {
return {
restrict: 'AE',
replace: true,
scope: {
alphabetcolors: '=alphabetcolors',
data: '@'
},
link: function (scope, element, attrs) {
/**
* Populate the attribute values to params object
* @type type
*/
var params = {
charCount: attrs.charcount || defaultSettings.charCount,
data: attrs.data,
textColor: defaultSettings.textColor,
height: attrs.height || defaultSettings.height,
width: attrs.width || defaultSettings.width,
fontsize: attrs.fontsize || defaultSettings.fontsize,
fontWeight: attrs.fontweight || defaultSettings.fontWeight,
fontFamily: attrs.fontfamily || defaultSettings.fontFamily,
avatarBorderStyle: attrs.avatarcustomborder,
avatardefaultBorder: attrs.avatarborder,
defaultBorder: defaultSettings.defaultBorder,
shape: attrs.shape,
alphabetcolors: scope.alphabetcolors || defaultSettings.alphabetcolors,
avatarCustomBGColor: attrs.avatarcustombgcolor || defaultSettings.custombgcolor,
dynamic: attrs.dynamic || defaultSettings.dynamic,
rotatedeg: attrs.rotatedeg || defaultSettings.rotatedeg
};
/**
* to generate the avatar dynamically on data change, enable the below function to watch the event
*/
if (params.dynamic === 'true') {
scope.$watch('data', function () {
_generateLetterAvatar();
});
} else {
_generateLetterAvatar();
}
function _generateLetterAvatar() {
var c = '';
if (params.charCount == 2) {
var _data = getFirstAndLastName(scope.data.toUpperCase());
if (_data) {
c = _data;
} else {
c = scope.data.substr(0, params.charCount).toUpperCase();
}
} else {
c = scope.data.substr(0, params.charCount).toUpperCase();
}
var cobj = getCharacterObject(c, params.textColor, params.fontFamily, params.fontWeight, params.fontsize);
var colorIndex = '';
var color = '';
/**
* Populate the colors according to attributes
*/
if (c.charCodeAt(0) < 65) {
color = getRandomColors();
} else {
colorIndex = Math.floor((c.charCodeAt(0) - 65) % params.alphabetcolors.length);
color = params.alphabetcolors[colorIndex];
}
if (params.avatarCustomBGColor) {
color = params.avatarCustomBGColor;
}
var svg = getImgTag(params.width, params.height, color);
svg.append(cobj);
var lvcomponent = angular.element('<div>').append(svg.clone()).html();
var svgHtml = window.btoa(unescape(encodeURIComponent(lvcomponent)));
var component;
var base = defaultSettings.base;
var _style = '';
if (params.avatarBorderStyle) {
_style = params.avatarBorderStyle;
} else if (params.avatardefaultBorder) {
_style = params.defaultBorder;
}
if(params.rotatedeg != '0'){
_style = '-ms-transform: rotate('+params.rotatedeg+'deg); -webkit-transform: rotate('+params.rotatedeg+'deg); transform: rotate('+params.rotatedeg+'deg)';
}
if (params.shape) {
if (params.shape === 'round') {
var round_style = defaultSettings.radius + _style;
component = "<img src=" + base + svgHtml + " style='" + round_style + "' title='"+scope.data+"' />";
}
} else {
component = "<img src=" + base + svgHtml + " style='" + _style + "' title='"+scope.data+"' />";
}
if (params.dynamic === 'true') {
element.empty();
element.append(component);
} else {
element.replaceWith(component);
}
}
}
};
}]);
/**
* Get the random colors
* @returns {String}
*/
function getRandomColors() {
var letters = '0123456789ABCDEF'.split('');
var _color = '#';
for (var i = 0; i < 6; i++) {
_color += letters[Math.floor(Math.random() * 16)];
}
return _color;
}
/**
* get the first name and last name first letters and combined and form the letter avatar
* @param {type} data
* @returns {unresolved}
*/
function getFirstAndLastName(data) {
var names = data.split(" ");
if (names && names.length >= 2) {
var firstName = names[0];
var lastName = names[1];
if (firstName && lastName) {
var text = firstName.substr(0, 1) + lastName.substr(0, 1);
return text;
} else {
return data.substr(0, 2);
}
}
}
/**
* Populate the svg tag which will used for the avatar generation
* @param {type} width
* @param {type} height
* @param {type} color
* @returns {unresolved}
*/
function getImgTag(width, height, color) {
var svgTag = angular.element('<svg></svg>')
.attr({
'xmlns': 'http://www.w3.org/2000/svg',
'pointer-events': 'none',
'width': width,
'height': height
})
.css({
'background-color': color,
'width': width + 'px',
'height': height + 'px'
});
return svgTag;
}
/**
* Generate the Letter tag by using the svg text element
* @param {type} character
* @param {type} textColor
* @param {type} fontFamily
* @param {type} fontWeight
* @param {type} fontsize
* @returns {unresolved}
*/
function getCharacterObject(character, textColor, fontFamily, fontWeight, fontsize) {
var textTag = angular.element('<text text-anchor="middle"></text>')
.attr({
'y': '50%',
'x': '50%',
'dy': '0.35em',
//'stroke': '#000000',
'pointer-events': 'auto',
'fill': textColor,
'font-family': fontFamily
})
.html(character)
.css({
'font-weight': fontWeight,
'font-size': fontsize + 'px',
});
return textTag;
}