From 29cc13f786fddda95b05a755d4e8fb9a614ef539 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sat, 7 Feb 2015 17:38:18 -0500 Subject: Add toggle/expend links on the dashboard --- app/Locale/da_DK/translations.php | 5 ++++ app/Locale/de_DE/translations.php | 5 ++++ app/Locale/es_ES/translations.php | 5 ++++ app/Locale/fi_FI/translations.php | 5 ++++ app/Locale/fr_FR/translations.php | 5 ++++ app/Locale/hu_HU/translations.php | 5 ++++ app/Locale/it_IT/translations.php | 5 ++++ app/Locale/ja_JP/translations.php | 5 ++++ app/Locale/pl_PL/translations.php | 5 ++++ app/Locale/pt_BR/translations.php | 5 ++++ app/Locale/ru_RU/translations.php | 5 ++++ app/Locale/sv_SE/translations.php | 5 ++++ app/Locale/th_TH/translations.php | 5 ++++ app/Locale/zh_CN/translations.php | 5 ++++ app/Template/app/dashboard.php | 27 ++++++++++++++++---- assets/css/app.css | 7 ++++++ assets/css/src/dashboard.css | 6 +++++ assets/css/src/sidebar.css | 1 + assets/js/app.js | 25 ++++++++++--------- assets/js/src/dashboard.js | 52 +++++++++++++++++++++++++++++++++++++++ scripts/make-assets.sh | 2 +- 21 files changed, 173 insertions(+), 17 deletions(-) create mode 100644 assets/js/src/dashboard.js diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index de4e073c..7e2d03a0 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index d4dc1030..e4838ba4 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -708,4 +708,9 @@ return array( 'Time Tracking' => 'Zeiterfassung', 'You already have one subtask in progress' => 'Bereits eine Teilaufgabe in bearbeitung', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index aa498acf..67907e73 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index f99d3408..01424a6f 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index f02ced4f..dd02cd7f 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -710,4 +710,9 @@ return array( 'Time Tracking' => 'Feuille de temps', 'You already have one subtask in progress' => 'Vous avez déjà une sous-tâche en progrès', 'Which parts of the project do you want to duplicate?' => 'Quelles parties du projet voulez-vous dupliquer ?', + 'Change dashboard view' => 'Changer la vue du tableau de bord', + 'Show/hide activities' => 'Afficher/cacher les activités', + 'Show/hide projects' => 'Afficher/cacher les projets', + 'Show/hide subtasks' => 'Afficher/cacher les sous-tâches', + 'Show/hide tasks' => 'Afficher/cacher les tâches', ); diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index 2c88185d..d051be30 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index ffdc2ec6..64eb201a 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index 358c30ce..68f2bbc3 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index 47dc126f..5ff27109 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index 7954f9ae..73966572 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index 81c0d72c..e644aa5d 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index 734a7d42..8bab7cdf 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index a05a6034..ef2df8e8 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index 2c69d95c..ffea13d4 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -708,4 +708,9 @@ return array( // 'Time Tracking' => '', // 'You already have one subtask in progress' => '', // 'Which parts of the project do you want to duplicate?' => '', + // 'Change dashboard view' => '', + // 'Show/hide activities' => '', + // 'Show/hide projects' => '', + // 'Show/hide subtasks' => '', + // 'Show/hide tasks' => '', ); diff --git a/app/Template/app/dashboard.php b/app/Template/app/dashboard.php index 592621a6..43b15703 100644 --- a/app/Template/app/dashboard.php +++ b/app/Template/app/dashboard.php @@ -10,17 +10,34 @@
  • a(t('User management'), 'user', 'index') ?>
  • a(t('Settings'), 'config', 'index') ?>
  • +
  • + +
  • - render('app/projects', array('paginator' => $project_paginator)) ?> - render('app/tasks', array('paginator' => $task_paginator)) ?> - render('app/subtasks', array('paginator' => $subtask_paginator)) ?> +
    render('app/projects', array('paginator' => $project_paginator)) ?>
    +
    render('app/tasks', array('paginator' => $task_paginator)) ?>
    +
    render('app/subtasks', array('paginator' => $subtask_paginator)) ?>
    -

    - render('project/events', array('events' => $events)) ?> +
    +

    + render('project/events', array('events' => $events)) ?> +
    \ No newline at end of file diff --git a/assets/css/app.css b/assets/css/app.css index 5e65f997..0089d5f8 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -1840,6 +1840,12 @@ a.task-board-nobody { } } +.dashboard-single-column { + width: 95%; + margin-left: 0; + float: none; +} + .dashboard-project-stats span { font-size: 0.75em; margin-right: 10px; @@ -1904,6 +1910,7 @@ a.task-board-nobody { font-size: 1.1em; }/* sidebar */ .sidebar-container { + margin-top: 10px; clear: both; } diff --git a/assets/css/src/dashboard.css b/assets/css/src/dashboard.css index aed805d8..8d0897b4 100644 --- a/assets/css/src/dashboard.css +++ b/assets/css/src/dashboard.css @@ -18,6 +18,12 @@ } } +.dashboard-single-column { + width: 95%; + margin-left: 0; + float: none; +} + .dashboard-project-stats span { font-size: 0.75em; margin-right: 10px; diff --git a/assets/css/src/sidebar.css b/assets/css/src/sidebar.css index 5413f7f6..5ed41d11 100644 --- a/assets/css/src/sidebar.css +++ b/assets/css/src/sidebar.css @@ -1,5 +1,6 @@ /* sidebar */ .sidebar-container { + margin-top: 10px; clear: both; } diff --git a/assets/js/app.js b/assets/js/app.js index 3417949b..deec24a0 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -133,25 +133,28 @@ unbind:function(a,b){return m.bind(a,function(){},b)},trigger:function(a,b){if(q b[c[e].seq]=1,x(c[e].callback,d,c[e].combo,c[e].seq)):g||x(c[e].callback,d,c[e].combo);c="keypress"==d.type&&I;d.type!=u||w(a)||c||t(b);I=g&&"keydown"==d.type}};J.Mousetrap=m;"function"===typeof define&&define.amd&&define(m)})(window,document); var Kanboard=function(){return{Exists:function(a){return document.getElementById(a)?!0:!1},Popover:function(a,d){a.preventDefault();a.stopPropagation();var c=a.target.getAttribute("href");c||(c=a.target.getAttribute("data-href"));c&&Kanboard.OpenPopover(c,d)},OpenPopover:function(a,d){$.get(a,function(a){$("body").append('
    '+a+"
    ");$("#popover-container").click(function(){$(this).remove()});$("#popover-content").click(function(a){a.stopPropagation()}); $(".close-popover").click(function(a){a.preventDefault();$("#popover-container").remove()});Mousetrap.bind("esc",function(){$("#popover-container").remove()});d&&d()})},IsVisible:function(){var a="";"undefined"!==typeof document.hidden?a="visibilityState":"undefined"!==typeof document.mozHidden?a="mozVisibilityState":"undefined"!==typeof document.msHidden?a="msVisibilityState":"undefined"!==typeof document.webkitHidden&&(a="webkitVisibilityState");return""!=a?"visible"==document[a]:!0},SetStorageItem:function(a, -d){"undefined"!==typeof Storage&&localStorage.setItem(a,d)},GetStorageItem:function(a){return"undefined"!==typeof Storage?localStorage.getItem(a):""},MarkdownPreview:function(a){a.preventDefault();var d=$(this),c=$(this).closest("ul"),f=$(".write-area"),e=$(".preview-area"),g=$("textarea");$.ajax({url:"?controller=app&action=preview",contentType:"application/json",type:"POST",processData:!1,dataType:"html",data:JSON.stringify({text:g.val()})}).done(function(a){c.find("li").removeClass("form-tab-selected"); -d.parent().addClass("form-tab-selected");e.find(".markdown").html(a);e.css("height",g.css("height"));e.css("width",g.css("width"));f.hide();e.show()})},MarkdownWriter:function(a){a.preventDefault();$(this).closest("ul").find("li").removeClass("form-tab-selected");$(this).parent().addClass("form-tab-selected");$(".write-area").show();$(".preview-area").hide()},CheckSession:function(){$(".form-login").length||$.ajax({cache:!1,url:$("body").data("status-url"),statusCode:{401:function(a){window.location= +d){"undefined"!==typeof Storage&&localStorage.setItem(a,d)},GetStorageItem:function(a){return"undefined"!==typeof Storage?localStorage.getItem(a):""},MarkdownPreview:function(a){a.preventDefault();var d=$(this),c=$(this).closest("ul"),e=$(".write-area"),f=$(".preview-area"),g=$("textarea");$.ajax({url:"?controller=app&action=preview",contentType:"application/json",type:"POST",processData:!1,dataType:"html",data:JSON.stringify({text:g.val()})}).done(function(a){c.find("li").removeClass("form-tab-selected"); +d.parent().addClass("form-tab-selected");f.find(".markdown").html(a);f.css("height",g.css("height"));f.css("width",g.css("width"));e.hide();f.show()})},MarkdownWriter:function(a){a.preventDefault();$(this).closest("ul").find("li").removeClass("form-tab-selected");$(this).parent().addClass("form-tab-selected");$(".write-area").show();$(".preview-area").hide()},CheckSession:function(){$(".form-login").length||$.ajax({cache:!1,url:$("body").data("status-url"),statusCode:{401:function(a){window.location= $("body").data("login-url")}}})},Init:function(){$("#board-selector").chosen({width:180});$("#board-selector").change(function(){window.location=$(this).attr("data-board-url").replace(/PROJECT_ID/g,$(this).val())});window.setInterval(Kanboard.CheckSession,6E4);Mousetrap.bind("ctrl+enter",function(){$("form").submit()});$(".popover-subtask-restriction").click(Kanboard.Popover);Kanboard.InitAfterAjax()},InitAfterAjax:function(){$(".form-date").datepicker({showOtherMonths:!0,selectOtherMonths:!0,dateFormat:"yy-mm-dd", constrainInput:!1});$("#markdown-preview").click(Kanboard.MarkdownPreview);$("#markdown-write").click(Kanboard.MarkdownWriter);$(".auto-select").focus(function(){$(this).select()});$(".dropit-submenu").hide();$(".dropdown").not(".dropit").dropit()}}}(); -Kanboard.Board=function(){function a(a){Kanboard.Popover(a,Kanboard.InitAfterAjax)}function d(){Mousetrap.bind("n",function(){Kanboard.OpenPopover($(".task-creation-popover").attr("href"),Kanboard.InitAfterAjax)})}function c(){$(".column").sortable({delay:300,distance:5,connectWith:".column",placeholder:"draggable-placeholder",stop:function(a,b){e(b.item.attr("data-task-id"),b.item.parent().attr("data-column-id"),b.item.index()+1,b.item.parent().attr("data-swimlane-id"))}});$(".assignee-popover").click(a); +Kanboard.Board=function(){function a(a){Kanboard.Popover(a,Kanboard.InitAfterAjax)}function d(){Mousetrap.bind("n",function(){Kanboard.OpenPopover($(".task-creation-popover").attr("href"),Kanboard.InitAfterAjax)})}function c(){$(".column").sortable({delay:300,distance:5,connectWith:".column",placeholder:"draggable-placeholder",stop:function(a,b){f(b.item.attr("data-task-id"),b.item.parent().attr("data-column-id"),b.item.index()+1,b.item.parent().attr("data-swimlane-id"))}});$(".assignee-popover").click(a); $(".category-popover").click(a);$(".task-edit-popover").click(a);$(".task-creation-popover").click(a);$(".task-description-popover").click(a);$(".column-tooltip").tooltip({content:function(a){return $(this).attr("title")}});$(".task-board-tooltip").tooltip({track:!1,position:{my:"left-20 top",at:"center bottom+9",using:function(a,b){$(this).css(a);var c=b.target.left+b.target.width/2-b.element.left-20;$("
    ").addClass("tooltip-arrow").addClass(b.vertical).addClass(0==c?"align-left":"align-right").appendTo(this)}}, content:function(a){if(a=$(this).attr("data-href")){var b=this;$.get(a,function k(a){$(".ui-tooltip-content:visible").html(a);a=$(".ui-tooltip:visible");a.css({top:"",left:""});a.children(".tooltip-arrow").remove();var c=$(b).tooltip("option","position");c.of=$(b);a.position(c);$("#tooltip-subtasks a").click(function(a){a.preventDefault();a.stopPropagation();$(this).hasClass("popover-subtask-restriction")?(Kanboard.OpenPopover($(this).attr("href")),$(b).tooltip("close")):$.get($(this).attr("href"), k)})});return''}}}).on("mouseenter",function(){var a=this;$(this).tooltip("open");$(".ui-tooltip").on("mouseleave",function(){$(a).tooltip("close")})}).on("mouseleave focusout",function(a){a.stopImmediatePropagation();var b=this;setTimeout(function(){$(".ui-tooltip:hover").length||$(b).tooltip("close")},100)});$("[data-task-url]").each(function(){$(this).click(function(){window.location=$(this).attr("data-task-url")})});var b=parseInt($("#board").attr("data-check-interval")); -0 div:visible").size()?$(".dashboard-left-column").removeClass("dashboard-single-column"):$(".dashboard-left-column").addClass("dashboard-single-column");0<$(".dashboard-left-column > div:visible").size()?$(".dashboard-right-column").removeClass("dashboard-single-column"):$(".dashboard-right-column").addClass("dashboard-single-column")}jQuery(document).ready(function(){var d=Kanboard.GetStorageItem("dashboard_view");if(d){var d= +JSON.parse(d),c;for(c in d)$("#dashboard-"+c).toggle(d[c]);a()}});jQuery(document).on("click",".dashboard-toggle",function(d){d.preventDefault();$("#dashboard-"+$(this).data("toggle")).toggle();a();d=["projects","tasks","subtasks","activities"];for(var c={},e=0;e div:visible").size() > 0) { + $(".dashboard-left-column").removeClass("dashboard-single-column"); + } + else { + $(".dashboard-left-column").addClass("dashboard-single-column"); + } + + if ($(".dashboard-left-column > div:visible").size() > 0) { + $(".dashboard-right-column").removeClass("dashboard-single-column"); + } + else { + $(".dashboard-right-column").addClass("dashboard-single-column"); + } + } + +})(); \ No newline at end of file diff --git a/scripts/make-assets.sh b/scripts/make-assets.sh index ea4ef53e..1a2a7763 100755 --- a/scripts/make-assets.sh +++ b/scripts/make-assets.sh @@ -3,7 +3,7 @@ app_css="base links title table form button alert tooltip header board task comment subtask markdown listing activity dashboard pagination popover confirm sidebar responsive dropdown" vendor_css="jquery-ui-1.10.4.custom chosen.min fullcalendar.min font-awesome.min" -app_js="base board calendar task analytic swimlane init" +app_js="base board calendar task analytic swimlane dashboard init" vendor_js="jquery-1.11.1.min jquery-ui-1.10.4.custom.min jquery.ui.touch-punch.min chosen.jquery.min dropit.min moment.min fullcalendar.min mousetrap.min app.min" function merge_css { -- cgit v1.2.3