Skip to content

Instantly share code, notes, and snippets.

@islanddog
Created October 18, 2016 13:47
Show Gist options
  • Save islanddog/60253e8cedb18db26743dc99c896d96c to your computer and use it in GitHub Desktop.
Save islanddog/60253e8cedb18db26743dc99c896d96c to your computer and use it in GitHub Desktop.
SproutApps - HelpScout Desk
jQuery.noConflict();
jQuery(function($) {
$(window).load(function(){
});
$(document).ready(function($){
var $shortcode_html = $("#hsd_conversations_table");
$('#hsd_message').redactor({
linkSize: 1000,
minHeight: 200 // pixels
});
$('#hsd_message_form').on('submit', function(e) {
var $button = $('#hsd_submit');
$button.hide();
$button.after('<span class="submit_loading loading"></span>');
});
if ( hsd_js_object.conversation_id === undefined ) {
$.ajax({
url: hsd_js_object.admin_ajax,
type: "POST",
data: {
action: 'hsd_shortcodes',
type: 'conversation_table',
mid: $shortcode_html.data( 'mailbox-id' ),
refresh_data: hsd_js_object.refresh_data,
current_page: hsd_js_object.current_page,
shortcodes_nonce: hsd_js_object.sec,
post_id: hsd_js_object.post_id,
conversation_id: hsd_js_object.conversation_id
},
success: function(result){
$shortcode_html.trigger( 'hsd_success_conversation', [ result ] );
$shortcode_html.trigger( 'hsd_success_conversations_table', [ result ] );
$shortcode_html.removeClass('loading');
$shortcode_html.append( result );
}
});
}
else {
$.ajax({
url: hsd_js_object.admin_ajax,
type: "POST",
data: {
action: 'hsd_shortcodes',
type: 'single_conversation',
mid: $shortcode_html.data( 'mailbox-id' ),
refresh_data: hsd_js_object.refresh_data,
current_page: hsd_js_object.current_page,
shortcodes_nonce: hsd_js_object.sec,
post_id: hsd_js_object.post_id,
conversation_id: hsd_js_object.conversation_id
},
success: function(result){
$shortcode_html.trigger( 'hsd_success_conversation', [ result ] );
$shortcode_html.removeClass('loading');
$shortcode_html.append( result );
$('.conversation_body .message').readmore({
speed: 75,
maxHeight: 100,
moreLink: '<a href="#" class="button-readmore">'+hsd_js_object.readmore+'</a>',
lessLink: '<a href="#" class="button-readmore">'+hsd_js_object.close+'</a>'
});
var $item_status = $('#hsd_support_conversation').data( 'item-status' );
if ( $item_status === 'closed' ) {
$('#close_thread_check').hide();
};
// convert gist links asynch with gist embeds
$('.conversation_body a[href*="gist.github.com"]').each(function () {
var link = $(this);
var href = $(this).attr('href');
var id = href.substr(href.lastIndexOf('/') + 1);
link.html("<p>Loading Gist...</p>");
$.ajax({
url: "https://gist.github.com/" + id + ".json",
dataType: "jsonp",
cache: true,
success: function (data) {
if (data && data.div) {
if (!$("link[href='" + data.stylesheet + "']").length) {
$("head").append("<link href=\"" + data.stylesheet + "\" rel=\"stylesheet\" />");
}
link.html(data.div);
}
},
error: function () {
link.html("<p>Gist Load Failed</p>");
}
});
});
$shortcode_html.trigger( 'hsd_post_success_conversation', [ result ] );
}
});
};
});
});
/*!
* Readmore.js jQuery plugin
* Author: @jed_foster
* Project home: jedfoster.github.io/Readmore.js
* Licensed under the MIT license
*/
;(function($) {
var readmore = 'readmore',
defaults = {
speed: 100,
maxHeight: 200,
heightMargin: 16,
moreLink: '<a href="#">Read More</a>',
lessLink: '<a href="#">Close</a>',
embedCSS: true,
sectionCSS: 'display: block; width: 100%;',
startOpen: false,
expandedClass: 'readmore-js-expanded',
collapsedClass: 'readmore-js-collapsed',
// callbacks
beforeToggle: function(){},
afterToggle: function(){}
},
cssEmbedded = false;
function Readmore( element, options ) {
this.element = element;
this.options = $.extend( {}, defaults, options);
$(this.element).data('max-height', this.options.maxHeight);
$(this.element).data('height-margin', this.options.heightMargin);
delete(this.options.maxHeight);
if(this.options.embedCSS && ! cssEmbedded) {
var styles = '.readmore-js-toggle, .readmore-js-section { ' + this.options.sectionCSS + ' } .readmore-js-section { overflow: hidden; }';
(function(d,u) {
var css=d.createElement('style');
css.type = 'text/css';
if(css.styleSheet) {
css.styleSheet.cssText = u;
}
else {
css.appendChild(d.createTextNode(u));
}
d.getElementsByTagName('head')[0].appendChild(css);
}(document, styles));
cssEmbedded = true;
}
this._defaults = defaults;
this._name = readmore;
this.init();
}
Readmore.prototype = {
init: function() {
var $this = this;
$(this.element).each(function() {
var current = $(this),
maxHeight = (current.css('max-height').replace(/[^-\d\.]/g, '') > current.data('max-height')) ? current.css('max-height').replace(/[^-\d\.]/g, '') : current.data('max-height'),
heightMargin = current.data('height-margin');
if(current.css('max-height') != 'none') {
current.css('max-height', 'none');
}
$this.setBoxHeight(current);
if(current.outerHeight(true) <= maxHeight + heightMargin) {
// The block is shorter than the limit, so there's no need to truncate it.
return true;
}
else {
current.addClass('readmore-js-section ' + $this.options.collapsedClass).data('collapsedHeight', maxHeight);
var useLink = $this.options.startOpen ? $this.options.lessLink : $this.options.moreLink;
current.after($(useLink).on('click', function(event) { $this.toggleSlider(this, current, event) }).addClass('readmore-js-toggle'));
if(!$this.options.startOpen) {
current.css({height: maxHeight});
}
}
});
$(window).on('resize', function(event) {
$this.resizeBoxes();
});
},
toggleSlider: function(trigger, element, event)
{
event.preventDefault();
var $this = this,
newHeight = newLink = sectionClass = '',
expanded = false,
collapsedHeight = $(element).data('collapsedHeight');
if ($(element).height() <= collapsedHeight) {
newHeight = $(element).data('expandedHeight') + 'px';
newLink = 'lessLink';
expanded = true;
sectionClass = $this.options.expandedClass;
}
else {
newHeight = collapsedHeight;
newLink = 'moreLink';
sectionClass = $this.options.collapsedClass;
}
// Fire beforeToggle callback
$this.options.beforeToggle(trigger, element, expanded);
$(element).animate({'height': newHeight}, {duration: $this.options.speed, complete: function() {
// Fire afterToggle callback
$this.options.afterToggle(trigger, element, expanded);
$(trigger).replaceWith($($this.options[newLink]).on('click', function(event) { $this.toggleSlider(this, element, event) }).addClass('readmore-js-toggle'));
$(this).removeClass($this.options.collapsedClass + ' ' + $this.options.expandedClass).addClass(sectionClass);
}
});
},
setBoxHeight: function(element) {
var el = element.clone().css({'height': 'auto', 'width': element.width(), 'overflow': 'hidden'}).insertAfter(element),
height = el.outerHeight(true);
el.remove();
element.data('expandedHeight', height);
},
resizeBoxes: function() {
var $this = this;
$('.readmore-js-section').each(function() {
var current = $(this);
$this.setBoxHeight(current);
if(current.height() > current.data('expandedHeight') || (current.hasClass($this.options.expandedClass) && current.height() < current.data('expandedHeight')) ) {
current.css('height', current.data('expandedHeight'));
}
});
},
destroy: function() {
var $this = this;
$(this.element).each(function() {
var current = $(this);
current.removeClass('readmore-js-section ' + $this.options.collapsedClass + ' ' + $this.options.expandedClass).css({'max-height': '', 'height': 'auto'}).next('.readmore-js-toggle').remove();
current.removeData();
});
}
};
$.fn[readmore] = function( options ) {
var args = arguments;
if (options === undefined || typeof options === 'object') {
return this.each(function () {
if ($.data(this, 'plugin_' + readmore)) {
var instance = $.data(this, 'plugin_' + readmore);
instance['destroy'].apply(instance);
}
$.data(this, 'plugin_' + readmore, new Readmore( this, options ));
});
} else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
return this.each(function () {
var instance = $.data(this, 'plugin_' + readmore);
if (instance instanceof Readmore && typeof instance[options] === 'function') {
instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) );
}
});
}
}
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment