diff --git a/bookmarklet.js b/bookmarklet.js
index 34dbb87..51413f5 100644
--- a/bookmarklet.js
+++ b/bookmarklet.js
@@ -1,1190 +1,1202 @@
- (function () {
- var version = "3.2.3";
- console.log("Version: " + version);
+ (function () {
+ var version = "3.2.3";
+ console.log("Version: " + version);
- var isDev = /.*jira.atlassian.com\/secure\/RapidBoard.jspa\?.*projectKey=ANERDS.*/g.test(document.URL) // Jira
- || /.*pivotaltracker.com\/n\/projects\/510733.*/g.test(document.URL); // PivotTracker
+ var isDev = /.*jira.atlassian.com\/secure\/RapidBoard.jspa\?.*projectKey=ANERDS.*/g.test(document.URL) // Jira
+ || /.*pivotaltracker.com\/n\/projects\/510733.*/g.test(document.URL); // PivotTracker
- var hostOrigin = "https://qoomon.github.io/Jira-Issue-Card-Printer/";
- if(isDev){
- console.log("DEVELOPMENT");
- hostOrigin = "https://rawgit.com/qoomon/Jira-Issue-Card-Printer/develop/";
- } else {
- //cors = "https://cors-anywhere.herokuapp.com/";
- //$("#card").load("https://cors-anywhere.herokuapp.com/"+"https://qoomon.github.io/Jira-Issue-Card-Printer/card.html");
+ var hostOrigin = "https://qoomon.github.io/Jira-Issue-Card-Printer/";
+ if(isDev){
+ console.log("DEVELOPMENT");
+ hostOrigin = "https://rawgit.com/qoomon/Jira-Issue-Card-Printer/develop/";
+ } else {
+ //cors = "https://cors-anywhere.herokuapp.com/";
+ //$("#card").load("https://cors-anywhere.herokuapp.com/"+"https://qoomon.github.io/Jira-Issue-Card-Printer/card.html");
- //
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ //
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
- ga('create', 'UA-50840116-3', {'alwaysSendReferrer': true});
- ga('set', 'page', '/cardprinter');
+ ga('create', 'UA-50840116-3', {'alwaysSendReferrer': true});
+ ga('set', 'page', '/cardprinter');
+ }
+
+ try {
+ // load jQuery
+ if (window.jQuery === undefined) {
+ appendScript('//ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js');
+ }
+
+ // wait untill all scripts loaded
+ appendScript('https://qoomon.github.io/void', function(){
+ init();
+ main();
+ });
+ } catch (err) {
+ console.log(err.message);
+ if(!isDev){
+ ga('send', 'exception', {
+ 'exDescription': err.message,
+ 'exFatal': true
+ });
+ }
+ }
+
+ function init(){
+ addJQueryFunctions();
+ addConsoleFunctions();
+ addStringFunctions();
+ addDateFunctions();
+
+ printScopeDeviderToken = "Attachment";
+
+ console.logLevel = console.INFO;
+
+ resourceOrigin = hostOrigin+ "resources/";
+
+ }
+
+ function main(){
+ //preconditions
+ if(jQuery("#card-print-overlay").length > 0){
+ alert("Print Card already opened!");
+ return;
+ }
+
+ var issueKeyList = getSelectedIssueKeyList();
+
+ if(issueKeyList.length <= 0){
+ alert("Please select at least one issue.");
+ return;
+ }
+
+ // open print preview
+ jQuery("body").append(printOverlayHTML);
+ jQuery("#card-print-overlay").prepend(printOverlayStyle);
+
+ if(!isDev){
+ ga('send', 'pageview');
+ }
+
+ jQuery("#card-print-dialog-title").text("Card Print - Loading " + issueKeyList.length + " issues...");
+ renderCards(issueKeyList, function(){
+ jQuery("#card-print-dialog-title").text("Card Print");
+ });
+ }
+
+ function print(){
+ var printFrame = jQuery("#card-print-dialog-content-iframe");
+ var printWindow = printFrame[0].contentWindow;
+ var printDocument = printWindow.document;
+ if(!isDev){
+ ga('send', 'event', 'button', 'click', 'print', jQuery(".card", printDocument).length );
+ }
+ printWindow.matchMedia("print").addListener(function() {
+ jQuery(".page",printDocument).each(function(position, page) {
+ var height = jQuery(page).height()
+ - jQuery(page).find(".card-header").outerHeight()
+ - jQuery(page).find(".card-footer").outerHeight()
+ - jQuery(page).find(".content-header").outerHeight()
+ - 40;
+ jQuery(page).find(".description").css("max-height", height+"px");
+ var lineHeight = jQuery(page).find(".description").css("line-height");
+ lineHeight = lineHeight.substring(0, lineHeight.length - 2);
+ var lineClamp = Math.floor(height / lineHeight);
+ jQuery(page).find(".description").css("-webkit-line-clamp", lineClamp+"");
+
+ jQuery(page).width("40%");
+ jQuery(page).scc("float","left");
+ });
+ });
+ printWindow.print();
+ }
+
+ function hideDescription(hide){
+ var printFrame = jQuery("#card-print-dialog-content-iframe");
+ var printWindow = printFrame[0].contentWindow;
+ var printDocument = printWindow.document;
+ if(hide){
+ jQuery(".description", printDocument).hide();
+ } else {
+ jQuery(".description", printDocument).show();
+ }
+
+ resizeIframe(printFrame);
+ }
+
+ function endableMultiCardPage(enable){
+ var printFrame = jQuery("#card-print-dialog-content-iframe");
+ var printWindow = printFrame[0].contentWindow;
+ var printDocument = printWindow.document;
+ if(enable){
+ jQuery(".page", printDocument).addClass("multiCardPage");
+ } else {
+ jQuery(".page", printDocument).removeClass("multiCardPage");
+ }
+ }
+
+ function renderCards(issueKeyList, callback) {
+
+ var printFrame = jQuery("#card-print-dialog-content-iframe");
+ var printWindow = printFrame[0].contentWindow;
+ var printDocument = printWindow.document;
+
+ printDocument.open();
+ printDocument.write("");
+
+ jQuery("head", printDocument).append(printPanelPageCSS());
+ jQuery("head", printDocument).append(printPanelCardCSS());
+
+ console.logInfo("load " + issueKeyList.length + " issues...");
+
+ var deferredList = [];
+
+ issueKeyList.each(function(index, issueKey) {
+ var page = newPage(issueKey);
+ page.attr("index",index);
+ page.hide();
+ page.find('.key').text(issueKey);
+ jQuery("body", printDocument).append(page);
+ var deferred = addDeferred(deferredList);
+ getCardData(issueKey, function(cardData) {
+ console.logDebug("cardData: " + cardData);
+ if(!isDev){
+ ga('send', 'event', 'task', 'generate', 'card', cardData.type );
+ }
+ fillCard(page, cardData);
+ page.show();
+ resizeIframe(printFrame);
+ deferred.resolve();
+ });
+ });
+ console.logInfo("wait for issues loaded...");
+
+ applyDeferred(deferredList,function() {
+ console.logInfo("...all issues loaded.");
+ jQuery(printWindow).load(function(){
+ console.logInfo("...all resources loaded.");
+ callback();
+ })
+ printDocument.close();
+ console.logInfo("wait for resources loaded...");
+ });
+ }
+
+ function closePrintPreview(){
+ jQuery("#card-print-overlay").remove();
+ jQuery("#card-print-overlay-style").remove();
+ }
+
+ function getSelectedIssueKeyList() {
+ // jira
+ if( true){
+ return getSelectedJiraIssueKeyList();
+ }
+ }
+
+ function getSelectedJiraIssueKeyList() {
+
+ //JIRA
+ if (jQuery("meta[name='application-name'][ content='JIRA']").length > 0) {
+ //Browse
+ if (/.*\/browse\/.*/g.test(document.URL)) {
+ return jQuery("a[data-issue-key][id='key-val']").map(function() {
+ return jQuery(this).attr('data-issue-key');
+ });
}
-
- try {
-
- // load jQuery
- if (window.jQuery === undefined) {
- appendScript('//ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js');
- }
-
- // wait untill all scripts loaded
- appendScript('https://qoomon.github.io/void', function(){
- init();
- main();
+ // RapidBoard
+ if (/.*\/secure\/RapidBoard.jspa.*/g.test(document.URL)) {
+ return jQuery('div[data-issue-key].ghx-selected').map(function() {
+ return jQuery(this).attr('data-issue-key');
});
+ }
+ }
- function init(){
- addJQueryFunctions();
- addConsoleFunctions();
- addStringFunctions();
- addDateFunctions();
+ return [];
+ }
- printScopeDeviderToken = "Attachment";
+ function getCardData(issueKey, callback){
+ //Jira
+ if(true){
+ getJiraCardData(issueKey, callback);
+ }
- console.logLevel = console.INFO;
+ }
- resourceOrigin = hostOrigin+ "resources/";
+ function getJiraCardData(issueKey, callback) {
+ getJiraIssueData(issueKey,function(data){
- }
+ var issueData = {};
- function main(){
- //preconditions
- if(jQuery("#card-print-overlay").length > 0){
- alert("Print Card already opened!");
- return;
- }
+ issueData.key = data.key;
- var issueKeyList = getSelectedIssueKeyList();
+ issueData.type = data.fields.issuetype.name.toLowerCase();
- if(issueKeyList.length <= 0){
- alert("Please select at least one issue.");
- return;
- }
+ issueData.summary = data.fields.summary;
- // open print preview
- jQuery("body").append(printOverlayHTML);
- jQuery("#card-print-overlay").prepend(printOverlayStyle);
+ issueData.description = data.renderedFields.description;
- if(!isDev){
- ga('send', 'pageview');
- }
-
- jQuery("#card-print-dialog-title").text("Card Print - Loading " + issueKeyList.length + " issues...");
- renderCards(issueKeyList, function(){
- jQuery("#card-print-dialog-title").text("Card Print");
- });
- }
-
- function print(){
- var printFrame = jQuery("#card-print-dialog-content-iframe");
- var printWindow = printFrame[0].contentWindow;
- var printDocument = printWindow.document;
- if(!isDev){
- if(!isDev){
- ga('send', 'event', 'button', 'click', 'print', jQuery(".card", printDocument).length );
- }
- }
- printWindow.print();
- }
-
- function hideDescription(hide){
- var printFrame = jQuery("#card-print-dialog-content-iframe");
- var printWindow = printFrame[0].contentWindow;
- var printDocument = printWindow.document;
- if(hide){
- jQuery(".description", printDocument).hide();
- } else {
- jQuery(".description", printDocument).show();
- }
-
- resizeIframe(printFrame);
- }
-
- function enableMultiCardPage(enable){
- var printFrame = jQuery("#card-print-dialog-content-iframe");
- var printWindow = printFrame[0].contentWindow;
- var printDocument = printWindow.document;
- if(enable){
- jQuery(".page", printDocument).addClass("avoid-page-break");
- } else {
- jQuery(".page", printDocument).removeClass("avoid-page-break");
+ if ( data.fields.assignee ) {
+ issueData.assignee = data.fields.assignee.displayName;
+ var avatarUrl = data.fields.assignee.avatarUrls['48x48'];
+ if(avatarUrl.indexOf("ownerId=") >= 0){
+ issueData.avatarUrl = avatarUrl;
}
}
- function renderCards(issueKeyList, callback) {
-
- var printFrame = jQuery("#card-print-dialog-content-iframe");
- var printWindow = printFrame[0].contentWindow;
- var printDocument = printWindow.document;
-
- printDocument.open();
- printDocument.write("