- 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 descriptionJS // 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) pluginCSS /* 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 dashboardCSS 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 profileCSS /* hide "activity-stream" on profile page */ body.profile #profile-status-list { display: none; } Hide Confluence standard category "personal" in a profileCSS /* 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