- Created by Administrator, last updated on Nov 13, 2024 1 minute read
Application
The listed code snippets are additions and bugfixes (related to third party plugins) for the Linchpin Theme Plugin.
In order to use these functions/bugfixes, copy and paste the according code snippets into the custom CSS and custom JS fields of the Linchpin Theme Plugin.
Disclaimer
Use these code snippets at your own risk!
//SEIBERT/MEDIA does not assume any liability for the correctness / operational capability of the offered code snippets.
Documentation's navigation
On this page
Function | Valid for Confluence |
|---|---|
Content Navigation / ToolbarDisplay content navigation / toolbar icons without description
JS // Display content navigation / toolbar icons without description
(function($) {
var metroTile = {
dom: function() {
this.spans = $(".content-navigation .aui-button > span");
this.underlines = $(".content-navigation .aui-button > span > u");
},
modify: function() {
this.dom();
this.spans.contents().filter(function() {
return this.nodeType == 3;
}).remove();
this.underlines.remove();
}
}
$(document).ready(function() {
metroTile.modify();
});
$("body").on("DOMSubtreeModified", ".content-navigation", function() {
metroTile.modify();
});
})(AJS.$)
Fix for wrong-positioned "share"-popup in content navigation / toolbar when using the Comala Workflows (Comala Document Management) plugin
CSS /* Fix for wrong-positioned "share"-popup in content navigation / toolbar when using Comala Workflows-plugin */
div#inline-dialog-shareContentPopup > .aui-inline-dialog-contents {
margin-left: -50px;
}
| FROM 5.10 |
Navigation Menu EditorSet column count and width for submenus of the "Navigation Menu Editor" pluginJS // Set column count and width for submenus of "Navigation Menu Editor"-plugin
SeibertMedia = (typeof SeibertMedia === "undefined") ? {} : SeibertMedia;
SeibertMedia.MenuEditor = SeibertMedia.MenuEditor || {};
SeibertMedia.MenuEditor.FlyoutColumnWidth = 450;
SeibertMedia.MenuEditor.FlyoutMaxColumns = 2;
| FROM 5.10 |
LoginSet background color / image on login screen via Linchpin Theme customCSSExamples YOUR BASE64 IMAGE PATH: data:image/jpeg;base64,/9j/4AAQSkZJRgAB... YOUR HEX CODE IMAGE COLOR: #000000 for black background CSS /* Set background color / image on login screen via Linchpin Theme customCSS */
html body.login {
background: url("YOUR BASE64 IMAGE PATH") no-repeat center center fixed; /* for example "data:image/jpeg;base64,/9j/4AAQSkZJRgAB..." */
background-color: YOUR HEX CODE IMAGE COLOR; /* for example #000000 for black background */
background-size: cover!important;
}
| FROM 5.10 |
DashboardHide unintentional scrollbars from dashboard items when using sections (e.g for the Cover Stories macro)CSS /* Hide unintentional scrollbars from dashboard items when using sections */
body.dashboard .confluence-dashboard .wiki-content .innerCell {
overflow: visible;
}
Hide third party web panels in welcome message (dashboard)
/* Remove unintentional web panels below welcome message on dashboard */
.confluence-dashboard ul#web-panels {
display: none;
}
Hide the task macro on the dashboard (Comala Document Management plugin)< Version 4.16.0CSS body.dashboard #welcome-message > .section-title.welcome-message + table.awpdashboard {
display: none;
}
body.dashboard #welcome-message > .section-title.welcome-message {
display: none;
}
> Version 4.16.0CSS body.dashboard .awpdashboard{
display: none;
}
Hide "Invite user" & "Create space" buttons on the dashboard
CSS body.dashboard .confluence-dashboard aside.content-sidebar .dashboard-buttons {
display: none;
}
| FROM 5.10 |
Linchpin SidebarFunction: A click outside of the Linchpin Sidebar will close itJS "use strict";
var SeibertMedia;
(function (SeibertMedia) {
var misc;
(function (misc) {
var SidebarAutoClose = (function () {
function SidebarAutoClose() {
this.$sidebar = $("#linchpin-sidebar-container");
}
SidebarAutoClose.prototype.registerHandler = function () {
var _this = this;
$(document).click(function (e) {
_this.closeIfNecessary(e);
});
};
SidebarAutoClose.prototype.closeIfNecessary = function (e) {
AJS.debug("isClickOutsideOfLPSidebar " + this.isClickOutsideOfLPSidebar(e));
AJS.debug("isOverlayVisible " + SidebarAutoClose.isOverlayVisible());
AJS.debug("isSidebarOpened " + SidebarAutoClose.isSidebarOpened());
AJS.debug("isClickInAuiDialog " + SidebarAutoClose.isClickInAuiDialog(e));
if (this.isClickOutsideOfLPSidebar(e) && !SidebarAutoClose.isOverlayVisible() && SidebarAutoClose.isSidebarOpened() && !SidebarAutoClose.isClickInAuiDialog(e)) {
this.$sidebar.find(".menu-item.active-tab").click();
}
};
SidebarAutoClose.prototype.isClickOutsideOfLPSidebar = function (e) {
return !$.contains(this.$sidebar.get(0), e.target);
};
SidebarAutoClose.isOverlayVisible = function () {
var attrAriaHidden = $("body > .aui-blanket").attr("aria-hidden");
var overlayVisibility = $("body > .aui-blanket").is(":visible");
return !(typeof attrAriaHidden === "undefined" || attrAriaHidden == "true" || !overlayVisibility);
};
SidebarAutoClose.isSidebarOpened = function () {
return $("#linchpin-sidebar .slidebar.sidebar-opened").length > 0;
};
SidebarAutoClose.isClickInAuiDialog = function (e) {
return ($(e.target).parents(".aui-layer.aui-dialog2").length > 0);
};
return SidebarAutoClose;
}());
misc.SidebarAutoClose = SidebarAutoClose;
})(misc = SeibertMedia.misc || (SeibertMedia.misc = {}));
})(SeibertMedia || (SeibertMedia = {}));
// initialize
AJS.toInit(function () {
new SeibertMedia.misc.SidebarAutoClose().registerHandler();
});
Hide left sidebar and set content to full widthCSS /* hide sidebar */
.ia-splitter-left {
display: none !important;
}
#splitter-content {
left: 0 !important;
width: 100% !important;
}
body:not(.login) div#main {
margin-left: 0 !important;
max-width: none !important;
width: 100% !important;
}
div#footer {
margin-left: 0 !important;
}
| FROM 5.10 |
ProfileHide the "Activity" macro in a profile
CSS /* hide "activity-stream" on profile page */
body.profile #profile-status-list {
display: none;
}
Hide Confluence standard category "personal" in a profile
CSS /* hide "personal-stream" on profile page */
body.profile #cup-profile #confluence-data {
display: none;
}
Indention of "text combinations" and "text choice" in "profile" when Comala Workflows (Comala Document Management) is installed.CSS .page-item.profile-main > form.aui .group {
padding: 4px 0 4px 145px;
}
Fixes missing profile edit button on profile page for CUP 2.0CSS /* CUP2.0 Profil-Button Fix */
body.profile #main #main-header {
display: block !important;
}
body.profile .pagetitle {
display: none;
}
| FROM 5.10 |
Bugfixes for third party pluginsShow Comala Workflow (Comala Document Management) tabs (bug: will not be shown with sidebar on)< Version 4.17.1 (with Comala Workflows (Comala Document Management) 4.17.1 this bug is fixed!)JS // Bugfix for missing Comala Workflow tabs when Linchpin Sidebar is activated
// Set class "active-pane" to first Comala workflow tab-pane
(function () {
var ComalaWorkflowHelper = function () {
/**
* slug helper
**/
var findGetParameter = function (parameterName) {
var result = null,
tmp = [];
location.search
.substr(1)
.split("&")
.forEach(function (item) {
tmp = item.split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
});
return result;
}
this.currentTab = findGetParameter('tab');
this.tabAssignments = {
states: '#tabSTATES',
triggers: '#tabTRIGGERS',
markup: '#tabMARKUP'
}
this.repair = function () {
var param = findGetParameter('tab');
var paneSel = this.tabAssignments[param];
var $pane = $('.cw-designer__tabs ' + paneSel);
$pane.addClass('active-pane');
console.log($pane);
}
};
AJS.toInit(function () {
if ($('.cw-designer__tabs').length > 0) {
var helper = new ComalaWorkflowHelper();
helper.repair();
}
})
}())
Sharepoint Connector (1.9.8, changes quick search drastically)CSS #linchpin-header-inner #header #header-right-panel {
width: 683px;
}
#linchpin-header-inner #header-right-panel #quick-search-sharepoint-option {
margin-left: 20px;
}
#linchpin-header-inner #header #sharepoint-search-query {
float: left;
height: 35px;
border: 1px solid #cccccc;
border-radius: 3px;
font-size: 18px;
width: 278px;
padding: 0;
padding-left: 5px;
padding-right: 37px;
background-color: white;
background-position: 260px 10px;
}
#linchpin-header-inner #header #quick-search .quick-nav-drop-down.aui-dd-parent {
margin-top: 26px;
}
#linchpin-header-inner #header #quick-search :-ms-input-placeholder {
color: #000;
}
Fixed Linchpin Sidebar when using Content Formatting for Confluence Plugins (v5.1);This snippet protects aui classes of the Linchpin Sidebar from changes by "Content Formatting for Confluence" plugin. JS // protects aui classes in Linchpin Sidebar from beeing changed by "Content Formatting for Confluence" plugin.
(function() {
AJS.toInit(function () {
new preventStylesFromModule('com.adaptavist.confluence.contentFormattingMacros:aui-tabs-resources', ['#sidebar-tabs', '#tabs-app-center', '#tabs-favorites']).run();
})
var preventStylesFromModule = function (moduleKey, preserveSelectors) {
var $badCss = $("link[href*='" + moduleKey + "']");
var concatedPreserveSelector = ":not(" + preserveSelectors.join("):not(") + ")";
var useSaveStyles = function () {
var newStylesheet = "";
var oldLength = document.styleSheets.length;
for (i = 0; i < oldLength; i++) {
var sheet = document.styleSheets[i];
if (!sheet.href) {
continue;
}
if (sheet.href.indexOf(moduleKey) > -1) {
var oldLength2 = sheet.cssRules.length;
for (j = 0; j < oldLength2; j++) {
var rule = sheet.cssRules[j];
var newRule = nopeify(rule.cssText, rule.selectorText, concatedPreserveSelector);
newStylesheet += newRule;
$badCss.remove();
}
$("body").append("<style>/*Protected Styles from " + moduleKey + "*/" + newStylesheet + "</style>");
}
}
};
var nopeify = function (cssText, selectorText, preserveSelector) {
var strippedCss = cssText.replace(selectorText, "");
var selectors = selectorText.split(",");
for (i = 0; i < selectors.length; i++) {
selectors[i] = selectors[i] + preserveSelector;
}
return selectors.join(',') + strippedCss
};
return {
run: function () {
useSaveStyles();
}
}
};
})();
Correction of gaps, concision and color in the Team Calendar pluginCSS /* Optical improvement of team calendar plugin running within Linchpin Theme Plugin*/
div.plugin-calendar .sub-calendar-panel .subcalendar-item .subcalendar-name .ellipsis_text {
width: 100px!important;
}
div.plugin-calendar .sub-calendar-panel .subcalendar-dropdown-menu {
right: 50px!important;
}
div#navigation.content-navigation.calendar-navigation-buttons {
margin-right: 0px;
}
div.plugin-calendar .sub-calendar-panel .subcalendar-item .subcalendar-name.header-color {
color: __globalLinkColor__!important;
}
| FROM 5.10 |
FooterAdded footer links (for example for "Polls" plugin)JS /* insert a custom link in the second footer column */
(function(ajs) {
var footerAppend = {
init: function() {
this.dom();
this.render();
},
dom: function() {
this.$list = $("#footer #footer-navigation-inner table td:nth(2) ul");
this.$item = '<li><a id="polls-link" href="/polls/listpolls.action" class=" aui-nav-imagelink" title="View your polls"> <span>Polls</span> </a></li>';
},
render: function() {
this.$list.append(this.$item);
}
};
ajs.toInit(function() {
footerAppend.init();
})
})(AJS)
| FROM 5.10 |
Include a Confluence page to a footer columnAssigns a Confluence page to a footer column (column 0-3). JS /* Page-Include for Footer
configure with change of this.assignments
you can do multiple assignments.
in this example we assign the first footer column (colId: 0) the page with the Id 1015814.
*/
(function(ajs, $, Confluence) {
"use strict";
var footerPageAssign = {
config: function() {
/**
* CONFIGURE HERE!
* colId (0-3)
* pageId (valid pageId)
*/
this.assignments = [
{colId: 0, pageId: 1015814}
];
},
init: function() {
this.config();
this.vars();
this.getPageContents();
},
vars: function() {
this.baseUrl = Confluence.getBaseUrl();
this.$footer = $("#com-atlassian-confluence #footer");
this.$footerColumns = this.$footer.find("td");
this.pageContents = {};
this.pageParsedContents = {};
},
getPageContents: function() {
var self = this;
var promises = [];
for (var i = 0; i < this.assignments.length; i++) {
(function($, self, i) {
var pageID = self.assignments[i].pageId;
$.get(self.baseUrl + "/rest/prototype/1/content/" + pageID, function(data) {
var pageBody = $(data).find("body")[0].textContent;
var pageId = $(data).find("content")[0].getAttribute("id");
self.parsePageContents(pageBody, pageId, i);
})
})($, this, i);
}
},
parsePageContents: function(pageBody, pageId, callNo) {
var self = this;
$.ajax({
url: self.baseUrl + '/rest/api/contentbody/convert/view',
type: 'POST',
data: JSON.stringify({
"value": pageBody,
"representation": "storage",
"content": {
"id": pageId
}
}),
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function(res) {
self.pageParsedContents[pageId] = res.value;
if (callNo == self.assignments.length-1) {
self.modifyColumns();
}
},
error: function(res) {
ajs.debug("Bad thing happend! " + res.statusText);
}
});
},
modifyColumns: function() {
for (var i = 0; i < this.assignments.length; i++) {
var colId = this.assignments[i].colId;
var pageId = this.assignments[i].pageId;
var $col = this.$footerColumns.eq(colId);
var html = this.pageParsedContents[pageId];
$col.html(html);
}
}
};
AJS.toInit(function(){
footerPageAssign.init();
})
})(AJS, AJS.$, Confluence);
CSS #footer #footer-navigation td {position: relative; }
| FROM 5.10 |

☁️ Looking for a Cloud-based Intranet?
Check out Mantra, your go-to alternative to Linchpin in the Atlassian Cloud!
Mantra is your a comprehensive solution for connecting teams, making collaboration a breeze, and keeping your company's internal communication strong and streamlined - all in the cloud.
Test the intranet for Confluence Cloud now for free:
Link to this page: https://seibert.biz/linchpinessentials-code-snippets-theme











