Lead web developer specialized in HubSpot development, created HubSpot Developer Chrome Extension. Active part of the HubSpot community, married with doggie.
It would be really cool to be able to use GitHub to push changes to modules and other coded files inside of the DM. There are many agencies that use GitHub for web development outside of the HS Platofrm so being able to have a consistent development read more
If you are in the slack channel, there is a Local Dev Beta that opened up. https://hubspotdev.slack.com/messages/CLJJXGTC0 It actually makes a lot...read more
I'm including below CSS for overriding the default embedded forms CSS. A few things to note about this:
This will only work if you're using an "unstyled form". For more info about that, see here: https://knowledge.hubspot.com/articles/kcs_a read more
would be a good idea I think even as a standalone piece to submit to the HubSpot Code Gallery. Though not sure where it would fit as it's currently s...read more
I'm including below CSS for overriding the default embedded forms CSS. A few things to note about this:
This will only work if you're using an "unstyled form". For more info about that, see here: https://knowledge.hubspot.com/articles/kcs_a read more
would be a good idea I think even as a standalone piece to submit to the HubSpot Code Gallery. Though not sure where it would fit as it's currently s...read more
Basically, I would like if everything inside of a drag n drop template were output as json when viewing via FTP.
All linked assets, the placement of modules, etc.
This is the same idea as how Custom Module meta and fields data works. If it's read more
It would be really cool to be able to use GitHub to push changes to modules and other coded files inside of the DM. There are many agencies that use GitHub for web development outside of the HS Platofrm so being able to have a consistent development read more
If you are in the slack channel, there is a Local Dev Beta that opened up. https://hubspotdev.slack.com/messages/CLJJXGTC0 It actually makes a lot...read more
It would be really cool to be able to use GitHub to push changes to modules and other coded files inside of the DM. There are many agencies that use GitHub for web development outside of the HS Platofrm so being able to have a consistent development read more
If you are in the slack channel, there is a Local Dev Beta that opened up. https://hubspotdev.slack.com/messages/CLJJXGTC0 It actually makes a lot...read more
All HubSpot sites are getting dinged on pagespeed for renderblocking javascript and CSS in the header. This can be mitigated if hubspot were to by default load: https://static.hsstatic.net/…sets/static-1.4040/css/public_common.css https://c read more
if javascript in the head is expecting jquery to be loaded in the head things will break. basically the jquery script has to be loaded above all java...read more
In the design manager, Global groups can be used in pages, and blog templates but they cannot be used in drag n drop email templates. I have to update 8 email templates to make their footers all look a certain way. Unfortunately there's no way to c read more
Temporary workaround for anyone running into this obnoxious problem. This google chrome extension can be used to copy and paste groups from template ...read more
http://spin.d.pr/7rpaHn+ Add the ability to bulk delete files/templates/modules in the Design manager. You already have the checkboxes there! you just need to implement handling multiple file at a time deletion.
HubSpot development can take getting used to and it takes a while to learn all the best practices. It's also hard to transition from a popular framework like Bootstrap or Foundation by Zurb to HubSpot where a bootstrap 2 based grid is forced. To so read more
Basically, I would like if everything inside of a drag n drop template were output as json when viewing via FTP.
All linked assets, the placement of modules, etc.
This is the same idea as how Custom Module meta and fields data works. If it's read more
Hey HubSpot Developers! I along with William Spiro(of HubSpot) and Gonzalo Torerras released a Google Chrome extension for developers. The extension has a button for all of the commonly used HubSpot Query Parameters, quick links to documentation, G read more
A place for social media professionals to share ideas, learn, network, and be inspired.
//
//
//
//
//
(function($) {
//START END-USER CONFIGURATION
//------------------------------
//selectors for hover card triggers
var allHoverCardTriggers = '.author-name-link,.friend-list .friend a,.username a,.avatar,.user-avatar,.author-img, .authors a, .messageauthorusername a, a.lia-user-name-link, .js-latest-post-by-from a, .user-online-list li a, a.UserAvatar, .customUsersOnline a, #authors a,.dashboard-followers a.user-name, .dashboard-following a.user-name,.author-login-wrapper a, .hb-leaderboard a, .author-img-floated';
// Forward calling page's URL params to endpoint URL as well, helps with testing!
var params = (new URL(location.href)).searchParams;
var userApiUrl = '/plugins/custom/hubspot/hubspot/hovercardendpoint?' + ((params.set('user_id', '') == []._) && params.toString());
if($('.hover-card-container').length<1){
$('body').append('');
}
var cardWrapper = $('.hover-card-container');
var error = false;
var thisUserID = '';
var thisUserLogin = '';
var userLink ='';
var cardTimer;
var leaveTimer;
function mouseenter(Elem) {
var thisEl = Elem;
cardTimer = setTimeout(function(){
var docWidth = $(document).width();
var rightSide = false;
var userLink = thisEl.attr('href');
if($('.ViewProfilePage').length && $('img.lia-user-avatar-profile',thisEl).length){thisUserID = '6365';}
else if(thisEl.attr('href')=='#' || thisEl.attr('href')=='' || !userLink.match('viewprofilepage')){
return false;}
else{
var thisLen = (userLink).split('/');
thisUserID = (thisLen)[thisLen.length-1];
}
var thisCard = $('.profileCard[data-user='+thisUserID+']',cardWrapper);
var cardId = 'userProfileCard-'+ thisUserID;
var addAttr = thisEl.attr('aria-describedby',cardId);
var thisElTopOffset = Math.round(thisEl.offset().top+(thisEl.height()/2)+30);
var thisElbottomoffset = "auto";
var className = "";
var winHeight = $(window).height();
var elOffset = thisEl.offset();
var scrollTop = $(window).scrollTop();
var elementOffset = thisEl.offset().top;
var distanceTop = (elementOffset - scrollTop);
var distanceBottom = (winHeight + scrollTop) - (elOffset.top + thisEl.outerHeight(true));
var distanceLeft = Math.round(thisEl.offset().left);
var bodyHight = $('body').height();
var topParam = '';
var bottomparam = '';
var position = '';
var className = 'topArrow';
cardId
if(distanceBottom < 300 ){
if(distanceLeft < 59){
thisCard.removeClass('bottomArrow');
var className = 'leftArrow';
var distanceLeft = (distanceLeft)+(39);
var thisElTopOffset = (thisElTopOffset)-(150);
}else{
var thisElTopOffset = (thisElTopOffset)-(301); var className = 'bottomArrow'; thisCard.removeClass('topArrow');
thisCard.removeClass('leftArrow');
var distanceLeft = (distanceLeft)-(45);
}
}
else{
if(distanceLeft < 59){
thisCard.removeClass('topArrow');
var className = 'leftArrow';
var distanceLeft = (distanceLeft)+(39);
var thisElTopOffset = (thisElTopOffset)-(150);
}else{
thisCard.removeClass('leftArrow');
thisCard.removeClass('bottomArrow').addClass('topArrow');
var distanceLeft = (distanceLeft)-(45);
}
}
if(thisCard.length && $('.profileCard[data-user='+thisUserID+'] .preloader',cardWrapper).length<1){
$('.profileCard',cardWrapper).hide();
thisCard.addClass(className);
rightSide?thisCard.addClass('rightArrow'):thisCard.removeClass('rightArrow');
thisCard.delay(0).css({'top':(thisElTopOffset),'left':distanceLeft,'bottom':thisElbottomoffset}).fadeIn();
} else {
var ajaxReturn = '';
//just in case
thisCard.remove();
//hover card wrapper markup
var rightArrowClass = rightSide?'rightArrow':'';
if(thisElTopOffset != "auto"){
topParam = 'px';
}
if(thisElbottomoffset != "auto"){
bottomparam = 'px';
}
var profileCardHtml = '';
$.when(
//get the background
$.ajax({
type: 'GET',
url: userApiUrl+thisUserID,
dataType: 'html',
success: function(data) {
$('.profileCard',cardWrapper).hide();
ajaxReturn = data;
}
})
)
.done(function(){
cardWrapper.append(profileCardHtml);
$('.profileCard[data-user='+thisUserID+']',cardWrapper).eq(0).empty().html(ajaxReturn);
if($('.profileCard[data-user='+thisUserID+'] .preloader',cardWrapper).length){
$('.profileCard[data-user='+thisUserID+'] .preloader',cardWrapper).parents('div.profileCard').remove();
}
})
.fail(function(){
//uh oh - bail out!
$('.profileCard',cardWrapper).hide();
});
}
}, 360);
}
function mouseleave(e) {
clearTimeout(cardTimer);
// glowingblue: When the user leaves the hovercard trigger, wait because the leaving could be
// to interact with the hovercard, if we don't wait it will just disappear...because
// we left the trigger, right...so we'll have another handler that check if the mouse is
// over the hovercard and if so clears this timer, so the card doesn't close here
leaveTimer = setTimeout(function() {
if ($('.profileCard[data-user="'+thisUserID+'"]',cardWrapper).length) {
$('.profileCard[data-user="'+thisUserID+'"]',cardWrapper).fadeOut('fast');
} else {
$(".profileCard").fadeOut('fast');
}
}, 2400);
}
$(document).on("mouseenter focusin", allHoverCardTriggers, function(event) {
if(!($(this).parents().hasClass('custom-header'))&& !($(this).parents().hasClass('green-wrap'))){
(leaveTimer !== []._) && clearTimeout(leaveTimer);
mouseenter($(this));
event.stopPropagation();
}
});
$(document).on("mouseleave focusout", allHoverCardTriggers, function(event) {
(leaveTimer !== []._) && clearTimeout(leaveTimer);
mouseleave(event);
event.stopPropagation();
});
// glowingblue: Add handlers for when the users interacts with the hovercard, no closing!
$('.hover-card-container').on('mouseenter', function(e) {
(leaveTimer !== []._) && clearTimeout(leaveTimer);
});
$('.hover-card-container').on('mouseleave', function(e) {
(leaveTimer !== []._) && clearTimeout(leaveTimer);
if ( $(e.target).is('.profileCard[style*="block"]') ) {
leaveTimer = setTimeout(function() {
$(e.target).fadeOut('fast');
}, 2400);
}
});
// glowingblue: add one global root level click handler to also close any visible hovercards
// if the user taps/clicks outside the hovercard
$(document).on('mousedown', function(e) {
if ( !$(e.target).parents('.hover-card-container').length ) {
(leaveTimer != []._) && clearTimeout(leaveTimer);
$('.hover-card-container .profileCard[style*="block"]').each(function() {
$(this).fadeOut('fast');
});
}
});
})(LITHIUM.jQuery);
(function($) {
$(document).ready(function(){
var originalElementId;
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function errorDisplay(errType) {
var errAuth = '
To access this area of the Community, please log in.
';
var errAuthLogin = '
To access the HubSpot Community Champions program and complete opportunities, confirm you are logged in by clicking here. Find additional troubleshooting steps here
';
var noBadges = '
To start earning advocacy badges, go to the Community Champions advocacy program page and start completing opportunities.
';
var noAsks = '
Hooray! You\'ve completed all available opportunities. Check back in for more opportunities next month.