diff --git a/bookmarklet.js b/bookmarklet.js index 965de8a..9ec6c65 100644 --- a/bookmarklet.js +++ b/bookmarklet.js @@ -1,9 +1,10 @@ (function() { var global = {}; - global.version = "4.2.4"; + global.version = "4.2.6"; global.issueTrackingUrl = "https://github.com/qoomon/Jira-Issue-Card-Printer"; global.isDev = document.currentScript == null; global.isProd = !global.isDev; + global.settings = {}; window.addEventListener("error", function(event) { var error = event.error; @@ -24,14 +25,16 @@ // wait untill all scripts loaded appendScript('https://qoomon.github.io/void', function() { init().then(function(){ - main(); + return main(); }).catch(function(cause){ - console.log("ERROR " + JSON.stringify(cause,2,2)); - alert("Sorry somthing went wrong. Please create an issue at " + global.issueTrackingUrl); + console.log("ERROR " + cause.stack); + alert("Sorry somthing went wrong.\n\nPlease create an issue at " + global.issueTrackingUrl + "\n\n" + cause.stack); }); }); function main() { + var promises = []; + console.log("Run...") // determine application if (jQuery("meta[name='application-name'][ content='JIRA']").length > 0) { @@ -62,8 +65,16 @@ if (issueKeyList.length <= 0) { alert("Please select at least one issue."); return; + } else if (issueKeyList.length > 100) { + confirm("Are you sure you want select " + issueKeyList.length + " issues?"); + return; } + var settings = global.settings; + settings.scale = readCookie("card_printer_font_scale",1); + settings.rowCount = readCookie("card_printer_row_count",2); + settings.colCount = readCookie("card_printer_column_count", 1); + // open print preview jQuery("body").append(printPreviewElement()); jQuery("#card-print-overlay").prepend(printOverlayStyleElement()); @@ -77,24 +88,24 @@ redrawCards(); }); - jQuery("#rowCount").val(readCookie("card_printer_row_count", 2)); - jQuery("#columnCount").val(readCookie("card_printer_column_count", 1)); - //jQuery("#font-scale-range").val(readCookie("card_printer_font_scale",1)); + jQuery("#font-scale-range").val(settings.scale); + jQuery("#rowCount").val(settings.rowCount); + jQuery("#columnCount").val(settings.colCount); + jQuery("#single-card-page-checkbox").attr('checked', readCookie("card_printer_single_card_page", 'true') == 'true'); jQuery("#hide-description-checkbox").attr('checked', readCookie("card_printer_hide_description", 'false') == 'true'); jQuery("#hide-assignee-checkbox").attr('checked', readCookie("card_printer_hide_assignee", 'true') == 'true'); jQuery("#hide-due-date-checkbox").attr('checked', readCookie("card_printer_hide_due_date", 'false') == 'true'); - jQuery("#hide-status-checkbox").attr('checked', readCookie("card_printer_hide_status", 'true') == 'true'); jQuery("#card-print-dialog-title").text("Card Printer " + global.version + " - Loading issues..."); - renderCards(issueKeyList).then(function() { + promises.push(renderCards(issueKeyList).then(function() { jQuery("#card-print-dialog-title").text("Card Printer " + global.version); - //print(); - }); + })); if (global.isProd) { ga('send', 'pageview'); } + return Promise.all(promises); } function init() { @@ -189,9 +200,7 @@ }); console.log("wait for resources loaded..."); printDocument.close(); - }).catch(function(cause){ - console.log("ERROR " + JSON.stringify(cause)) - });; + }); } function redrawCards() { @@ -301,16 +310,6 @@ jQuery("head", printDocument).append(style); } - // hide/show status - jQuery("#styleHideStatus", printDocument).remove(); - if (!jQuery("#hide-status-checkbox")[0].checked) { - var style = document.createElement('style'); - style.id = 'styleHideStatus'; - style.type = 'text/css'; - style.innerHTML = ".issue-status { display: none; }" - jQuery("head", printDocument).append(style); - } - // enable/disable single card page jQuery("#styleSingleCardPage", printDocument).remove(); if (jQuery("#single-card-page-checkbox")[0].checked) { @@ -327,16 +326,14 @@ var printWindow = printFrame[0].contentWindow; var printDocument = printWindow.document; - var columnCount = jQuery("#columnCount").val(); - var rowCount = jQuery("#rowCount").val(); - - var cardCount = jQuery(".card", printDocument).length; - var pageCount = Math.ceil(cardCount / (columnCount * rowCount)) + var scaleRoot = global.settings.scale; + var rowCount = global.settings.rowCount; + var columnCount = global.settings.colCount; // scale // reset scale - jQuery("html", printDocument).css("font-size", "1cm"); + jQuery("html", printDocument).css("font-size", scaleRoot +"cm"); jQuery("#styleColumnCount", printDocument).remove(); jQuery("#styleRowCount", printDocument).remove(); @@ -356,7 +353,7 @@ // scale down var scale = Math.min(scaleWidth, scaleHeight, 1); if (scale < 1) { - jQuery("html", printDocument).css("font-size", scale + "cm"); + jQuery("html", printDocument).css("font-size", ( scaleRoot * scale) + "cm"); } // size @@ -455,24 +452,12 @@ return true; }); - // show status - - result.find("#hide-status-checkbox").click(function() { - writeCookie("card_printer_hide_status", this.checked); - redrawCards(); - return true; - }); - // scale font result.find("#font-scale-range").on("input", function() { writeCookie("card_printer_font_scale", jQuery(this).val()); - var printFrame = result.find("#card-print-dialog-content-iframe"); - var printWindow = printFrame[0].contentWindow; - var printDocument = printWindow.document; - - jQuery("html", printDocument).css("font-size", jQuery(this).val() + "cm"); + global.settings.scale = jQuery(this).val(); redrawCards(); }); @@ -481,6 +466,9 @@ result.find("#rowCount").on("input", function() { writeCookie("card_printer_row_count", jQuery(this).val()); + + global.settings.rowCount = jQuery(this).val(); + redrawCards(); }); result.find("#rowCount").click(function() { @@ -490,6 +478,9 @@ result.find("#columnCount").on("input", function() { writeCookie("card_printer_column_count", jQuery(this).val()); + + global.settings.colCount = jQuery(this).val(); + redrawCards(); }); result.find("#columnCount").click(function() { @@ -857,7 +848,7 @@ if (/.*\/issues\/\?jql=.*/g.test(document.URL)) { var jql = document.URL.replace(/.*\?jql=(.*)/, '$1'); var jqlIssues = []; - var url = '/rest/api/2/search?jql=' + jql + "&maxResults=1000"; + var url = '/rest/api/2/search?jql=' + jql + "&maxResults=500&fields=key"; console.log("IssueUrl: " + url); //console.log("Issue: " + issueKey + " Loading..."); jQuery.ajax({ @@ -1017,11 +1008,7 @@ issueData.url = window.location.origin + "/youtrack/issue/" + issueData.key; })); - return new Promise(function(resolve, reject) { - Promise.all(promises) - .then(function(){resolve(issueData);}) - .catch(function(cause){reject(cause);}); - }); + return Promise.all(promises).then(function(results){return issueData;}); }; module.getIssueData = function(issueKey) { @@ -1086,11 +1073,7 @@ issueData.url = data.url; })); - return new Promise(function(resolve, reject) { - Promise.all(promises) - .then(function(){resolve(issueData);}) - .catch(function(cause){reject(cause);}); - }); + return Promise.all(promises).then(function(results){return issueData;}); }; module.getIssueData = function(issueKey, callback, async) { @@ -1141,11 +1124,7 @@ issueData.url = data.shortUrl; })); - return new Promise(function(resolve, reject) { - Promise.all(promises) - .then(function(){resolve(issueData);}) - .catch(function(cause){reject(cause);}); - }); + return Promise.all(promises).then(function(results){return issueData;}); }; module.getIssueData = function(issueKey, callback, async) { diff --git a/card.css b/card.css index 13d3572..884837e 100644 --- a/card.css +++ b/card.css @@ -1,321 +1,319 @@ * { - box-sizing: border-box; - overflow: hidden; + box-sizing: border-box; + overflow: hidden; } html { - background: WHITE; - padding: 0rem; - margin: 0rem; - font-size: 1.3cm; - overflow-y: scroll; + background: WHITE; + padding: 0rem; + margin: 0rem; + font-size: 1.0cm; + overflow-y: scroll; } body { - padding: 0rem; - margin: 0rem; + padding: 0rem; + margin: 0rem; } .badge, .shadow { - border-style: solid; - border-color: #333; - border-top-width: 0.12rem; - border-left-width: 0.12rem; - border-bottom-width: 0.21rem; - border-right-width: 0.21rem; - border-radius: 0.25rem; + border-style: solid; + border-color: #333; + border-top-width: 0.12rem; + border-left-width: 0.12rem; + border-bottom-width: 0.21rem; + border-right-width: 0.21rem; + border-radius: 0.25rem; } .badge { - // WHITESMOKE, GAINSBOROM; - background-color: #E0E0E0; + background-color: WHITESMOKE; } .hidden { - display: none; + display: none; } .zigzag { - border-bottom-width: 0rem; + border-bottom-width: 0rem; } .zigzag::after { - position: absolute; - bottom: 0.03rem; - left:-0.16rem; - content:""; - width: 100%; - border-style:solid; - border-bottom-width: 1rem; - border-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/Tearing.png); - border-image-width: 0 0 0.7rem 0; - border-image-slice: 56 0 56 1; - border-image-repeat: round round; + position: absolute; + bottom: 0.03rem; + left: -0.16rem; + content: ""; + width: 100%; + border-style: solid; + border-bottom-width: 1rem; + border-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/Tearing.png); + border-image-width: 0 0 0.7rem 0; + border-image-slice: 56 0 56 1; + border-image-repeat: round round; } #preload { - position: fixed; - top: 0rem; - left: 100%; + position: fixed; + top: 0rem; + left: 100%; } .author { - color: DIMGREY; - position: absolute; - top:0.35rem; - left:calc(50% - 2rem); - font-size: 0.6rem; - overflow:visible; - line-height: 0.38rem; + color: DIMGREY; + position: absolute; + top: 0.5rem; + left: calc(50% - 2rem); + font-size: 0.8rem; + overflow: visible; + line-height: 0.38rem; } -.author > span { - position: relative; - left: 0.23rem; - font-size: 0.6em; - text-align: center; +.author > span:nth-of-type(2) { + position: relative; + top: 0.0rem; + left: 0.65rem; + font-size: 0.5em; } .card { - position: relative; - float:left; - height: 100%; - width: 100%; - padding: 0.5cm; - min-width:14.5rem; - min-height:10.0rem; - border-color: LightGray; - border-style: dotted; - border-width: 0.03cm; + position: relative; + float: left; + height: 100%; + width: 100%; + padding: 0.5cm; + min-width: 14.5rem; + min-height: 10.0rem; + border-color: LightGray; + border-style: dotted; + border-width: 0.03cm; } .card-content { - position: relative; - height: 100%; - // find .card-header; - padding-top: 2rem; - // find .card-footer; - padding-bottom: 1.3rem; + position: relative; + height: 100%; + // find .card-header; + padding-top: 2rem; + // find .card-footer; + padding-bottom: 1.3rem; } .card-body { - position: relative; - height: 100%; - margin-left: 0.4rem; - margin-right: 0.4rem; - padding-top: 1.1rem; - padding-bottom: 1.1rem; - padding-left: 0.4rem; - padding-right: 0.4rem; - background: WHITE; + position: relative; + height: 100%; + margin-left: 0.4rem; + margin-right: 0.4rem; + padding-top: 1.1rem; + padding-bottom: 1.1rem; + padding-left: 0.4rem; + padding-right: 0.4rem; + background: WHITE; } .card-header { - position: absolute; - top: 0rem; - height: 4.2rem; - width: 100%; + position: absolute; + top: 0rem; + height: 4.2rem; + width: 100%; } .card-footer { - position: absolute; - bottom: 0rem; - height: 2.2rem; - width: 100%; + position: absolute; + bottom: 0rem; + height: 2.2rem; + width: 100%; } .issue-summary { - font-weight: bold; - font-size: 0.9rem; + font-weight: bold; + font-size: 0.9rem; } .issue-description { - margin-top: 0.1rem; - display: block; - font-size: 0.6rem; - line-height: 0.62rem; - overflow: hidden; + margin-top: 0.1rem; + display: block; + font-size: 0.6rem; + line-height: 0.62rem; + overflow: hidden; } .issue-description p:first-of-type { - margin-top: 0rem; + margin-top: 0rem; } .issue-description p:last-of-type { - margin-bottom: 0rem; + margin-bottom: 0rem; } .issue-id { - position: absolute; - left: 1rem; - top: 1.2rem; - height: 1.5rem; - max-width: calc(100% - 7.5rem); - min-width: 6.0rem; - padding-left: 2.1rem; - padding-right: 0.4rem; - background-color: WHITESMOKE; - line-height: 1.3rem; - font-size: 0.8rem; - font-weight: bold; - text-align: center; - white-space: nowrap; - direction: rtl; + position: absolute; + left: 1rem; + top: 1.2rem; + height: 1.5rem; + max-width: calc(100% - 7.5rem); + min-width: 6.0rem; + padding-left: 2.1rem; + padding-right: 0.4rem; + background-color: WHITESMOKE; + line-height: 1.3rem; + font-size: 0.8rem; + font-weight: bold; + text-align: center; + white-space: nowrap; + direction: rtl; } .issue-id-fadeout { - position: absolute; - left: 2.4rem; - top: 1.3rem; - width: 1.2rem; - height: 1.2rem; - z-index: 0; - background: linear-gradient(to left, rgba(224, 224, 224, 0) 0%, rgba(224, 224, 224, 1) 60%); + position: absolute; + left: 2.4rem; + top: 1.3rem; + width: 1.2rem; + height: 1.2rem; + z-index: 0; + background: linear-gradient(to left, rgba(224, 224, 224, 0) 0%, rgba(224, 224, 224, 1) 60%); } .issue-icon { - position: absolute; - left: 0rem; - top: 0rem; - height: 3.0rem; - width: 3.0rem; - border-radius: 50%; - background-color: LIGHTSEAGREEN; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Objects.png); - background-repeat: no-repeat; - background-position: center; - background-size: 63%; + position: absolute; + left: 0rem; + top: 0rem; + height: 3.0rem; + width: 3.0rem; + border-radius: 50%; + background-color: LIGHTSEAGREEN; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Objects.png); + background-repeat: no-repeat; + background-position: center; + background-size: 63%; } .issue-icon[type="story"], .issue-icon[type="user story"] { - background-color: GOLD; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Bulb.png); + background-color: GOLD; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Bulb.png); } .issue-icon[type="bug"], .issue-icon[type="correction"] { - background-color: CRIMSON; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Bug.png); + background-color: CRIMSON; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Bug.png); } .issue-icon[type="epic"] { - background-color: ROYALBLUE; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Flash.png); + background-color: ROYALBLUE; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Flash.png); } .issue-icon[type="task"] { - background-color: WHEAT; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Task.png); + background-color: WHEAT; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Task.png); } .issue-icon[type="new feature"] { - background-color: LIMEGREEN; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Plus.png); + background-color: LIMEGREEN; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Plus.png); } .issue-icon[type="improvement"] { - background-color: CORNFLOWERBLUE; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Arrow.png); + background-color: CORNFLOWERBLUE; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Arrow.png); } .issue-estimate { - position: absolute; - left: 2.5rem; - top: 0.0rem; - height: 1.6rem; - width: 1.6rem; - border-radius: 50%; - background-color: WHITESMOKE; - line-height: 1.4rem; - font-size: 0.9rem; - font-weight: bold; - text-align: center; + position: absolute; + left: 2.5rem; + top: 0.0rem; + height: 1.6rem; + width: 1.6rem; + border-radius: 50%; + background-color: WHITESMOKE; + line-height: 1.4rem; + font-size: 0.9rem; + font-weight: bold; + text-align: center; } .issue-qr-code { - position: absolute; - left:0rem; - top: 0rem; - width: 2.2rem; - height: 2.2rem; - background-image: url(https://chart.googleapis.com/chart?cht=qr&chs=256x256&chld=L|1&chl=blog.qoomon.com); - background-repeat: no-repeat; - background-size: cover; - background-position: center; + position: absolute; + left: 0rem; + top: 0rem; + width: 2.2rem; + height: 2.2rem; + background-image: url(https://chart.googleapis.com/chart?cht=qr&chs=256x256&chld=L|1&chl=blog.qoomon.com); + background-repeat: no-repeat; + background-size: cover; + background-position: center; } .issue-attachment { - position: absolute; - left:2.5rem; - top: 0rem; - width: 2.0rem; - height: 2.0rem; - border-radius: 50%; - background-color: LIGHTSKYBLUE; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Attachment.png); - background-repeat: no-repeat; - background-position: center; - background-size: 70%; + position: absolute; + left: 2.5rem; + top: 0rem; + width: 2.0rem; + height: 2.0rem; + border-radius: 50%; + background-color: LIGHTSKYBLUE; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Attachment.png); + background-repeat: no-repeat; + background-position: center; + background-size: 70%; } .issue-assignee { - position: absolute; - top:0rem; - right:0rem; - width: 2.2rem; - height: 2.2rem; - border-radius: 50%; - background-color: WHITESMOKE; - //background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Person.png); - background-repeat: no-repeat; - background-position: center; - background-size: cover; - //-webkit-filter: contrast(200%) grayscale(100%); - //filter: contrast(200%) grayscale(100%); - text-align: center; - font-weight: bold; - font-size: 1.4rem; - line-height: 1.9rem; + position: absolute; + top: 0rem; + right: 0rem; + width: 2.2rem; + height: 2.2rem; + border-radius: 50%; + background-color: WHITESMOKE; + //background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/Person.png); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + //-webkit-filter: contrast(200%) grayscale(100%); + //filter: contrast(200%) grayscale(100%); + text-align: center; + font-weight: bold; + font-size: 1.4rem; + line-height: 1.9rem; } .issue-epic-box { - position: absolute; - right:2.5rem; - top: 0rem; - width: auto; - min-width: 2rem; - width: auto; - max-width: calc(100% - 7.5rem); - height: auto; - max-height: 2.2rem; - padding-top: 0.1rem; - padding-bottom: 0.2rem; - padding-left: 0.3rem; - padding-right: 0.3rem; - text-align: left; - font-size: 0.5rem; - line-height: 0.55rem; + position: absolute; + right: 2.5rem; + top: 0rem; + width: auto; + min-width: 2rem; + width: auto; + max-width: calc(100% - 7.5rem); + height: auto; + max-height: 2.2rem; + padding-top: 0.1rem; + padding-bottom: 0.2rem; + padding-left: 0.3rem; + padding-right: 0.3rem; + text-align: left; + font-size: 0.5rem; + line-height: 0.55rem; } .issue-epic-id { - font-size: 0.5rem; - font-weight: bold; - max-width: 1rem; + font-size: 0.5rem; + font-weight: bold; + max-width: 1rem; } .issue-epic-name { - margin-left: 0.1rem; - font-size: 0.6rem; - font-weight: bold; + margin-left: 0.1rem; + font-size: 0.6rem; + font-weight: bold; } .issue-due-date-box { - position: absolute; - right: 0rem; - top: 0rem; - overflow: visible !important; + position: absolute; + right: 0rem; + top: 0rem; + overflow: visible !important; } .issue-due-date { - position: absolute; - top: 1.3rem; - right: 1rem; - width: 5.3rem; - min-width: 2.8rem; - height: 1.3rem; - padding-left: 0.2rem; - padding-right: 1.4rem; - text-align: center; - font-weight: bold; - font-size: 0.7rem; - line-height: 1.0rem; + position: absolute; + top: 1.3rem; + right: 1rem; + width: 5.3rem; + min-width: 2.8rem; + height: 1.3rem; + padding-left: 0.2rem; + padding-right: 1.4rem; + text-align: center; + font-weight: bold; + font-size: 0.7rem; + line-height: 1.0rem; } .issue-due-icon { - position: absolute; - top: 0.5rem; - right: 0rem; - width: 2.5rem; - height: 2.5rem; - border-radius: 50%; - background-color: ORCHID; - background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/AlarmClock.png); - background-repeat: no-repeat; - background-position: center; - background-size: 65%; + position: absolute; + top: 0.5rem; + right: 0rem; + width: 2.5rem; + height: 2.5rem; + border-radius: 50%; + background-color: ORCHID; + background-image: url(https://qoomon.github.io/Jira-Issue-Card-Printer/resources/icons/AlarmClock.png); + background-repeat: no-repeat; + background-position: center; + background-size: 65%; } - @media print { - @page { - margin: 0.0mm; - padding: 0.0mm; - } - html { - -webkit-print-color-adjust:exact; - print-color-adjust: exact; - } - .card { - page-break-inside: avoid; - } + @page { + margin: 0.0mm; + padding: 0.0mm; + } + html { + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + } + .card { + page-break-inside: avoid; + } } diff --git a/card.html b/card.html index 47889ea..a68d0de 100644 --- a/card.html +++ b/card.html @@ -1,31 +1,32 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- +
- ©BengtBrodersen
- qoomon.com + qoomon.com +
+ ©BengtBrodersen
diff --git a/printPreview.html b/printPreview.html index 0172fa3..d91fb19 100644 --- a/printPreview.html +++ b/printPreview.html @@ -13,14 +13,13 @@