metro4
Version:
The front-end framework for Build responsive, mobile-first projects on the web with the first front-end component library in Metro Style
91 lines (75 loc) • 2.49 kB
JavaScript
var Gravatar = {
init: function( options, elem ) {
this.options = $.extend( {}, this.options, options );
this.elem = elem;
this.element = $(elem);
this._setOptionsFromDOM();
this._create();
Utils.exec(this.options.onGravatarCreate, [this.element]);
return this;
},
options: {
email: "",
size: 80,
default: "404",
onGravatarCreate: Metro.noop
},
_setOptionsFromDOM: function(){
var that = this, element = this.element, o = this.options;
$.each(element.data(), function(key, value){
if (key in o) {
try {
o[key] = JSON.parse(value);
} catch (e) {
o[key] = value;
}
}
});
},
_create: function(){
this.get();
},
getImage: function(email, size, def, is_jquery_object){
var image = $("<img>");
image.attr("src", this.getImageSrc(email, size));
return is_jquery_object === true ? image : image[0];
},
getImageSrc: function(email, size, def){
if (email === undefined || email.trim() === '') {
return "";
}
size = size || 80;
def = Utils.encodeURI(def) || '404';
return "//www.gravatar.com/avatar/" + Utils.md5((email.toLowerCase()).trim()) + '?size=' + size + '&d=' + def;
},
get: function(){
var that = this, element = this.element, o = this.options;
var img = element[0].tagName === 'IMG' ? element : element.find("img");
if (img.length === 0) {
return;
}
img.attr("src", this.getImageSrc(o.email, o.size, o.default));
return this;
},
resize: function(new_size){
this.options.size = new_size !== undefined ? new_size : this.element.attr("data-size");
this.get();
},
email: function(new_email){
this.options.email = new_email !== undefined ? new_email : this.element.attr("data-email");
this.get();
},
changeAttribute: function(attributeName){
switch (attributeName) {
case 'data-size': this.resize(); break;
case 'data-email': this.email(); break;
}
},
destroy: function(){
var element = this.element;
if (element[0].tagName.toLowerCase() !== "img") {
element.html("");
}
}
};
Metro.plugin('gravatar', Gravatar);