Skip to content

Instantly share code, notes, and snippets.

@cuonghuynh
Created November 6, 2016 15:09
Show Gist options
  • Save cuonghuynh/c124ec2bf12d1cf8b15aed0b9faef522 to your computer and use it in GitHub Desktop.
Save cuonghuynh/c124ec2bf12d1cf8b15aed0b9faef522 to your computer and use it in GitHub Desktop.
/*
|----------------------------------------------
| ReadMore Jquery Plugin
|----------------------------------------------
|
| Created by Cuong Huynh
|
*/
(function($) {
$.fn.readMore = function(method) {
var self = this;
var methods = {
init : function(options) {
self.readMore.settings = $.extend({}, self.readMore.defaults, options);
return self.each(function() {
var $element = $(this), // reference to the jQuery version of the current DOM element
element = this; // reference to the actual DOM element
helpers.handleReadMore($element);
helpers.handleJsReadMoreLink($element);
});
},
}
var helpers = {
handleReadMore: function ($element) {
var content = $element.html();
if (content.length > self.readMore.settings.limit) {
var showedContent = content.substr(0, self.readMore.settings.limit);
var hiddenContent = content.substr(self.readMore.settings.limit, content.length - self.readMore.settings.limit);
var html = showedContent + '<span class="more-ellipsis">' + self.readMore.settings.ellipsis_text + '</span>';
html += '<span class="more-content"><span style="display: none;">' + hiddenContent + '</span>';
html += ' <a href="" class="jsReadMoreLink">' + self.readMore.settings.more_text + '</a></span>';
console.log(html);
$element.html(html);
}
},
handleJsReadMoreLink: function ($element) {
$element.on('click', '.jsReadMoreLink', function(event) {
event.preventDefault();
if ($(this).hasClass('less')) {
$(this).removeClass('less');
$(this).html(self.readMore.settings.more_text);
} else {
$(this).addClass("less");
$(this).html(self.readMore.settings.less_text);
}
$(this).parent().prev().toggle();
$(this).prev().toggle();
return false;
});
}
}
if (methods[method]) {
return methods[method].apply(self, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(self, arguments);
} else {
$.error( 'Method "' + method + '" does not exist in readMore plugin!');
}
}
$.fn.readMore.defaults = {
limit: 100,
more_text: 'Read More',
less_text: 'Show Less',
ellipsis_text: '...'
}
$.fn.readMore.settings = {}
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment