From 96abe3c6914ce37d9fb44da8fda375e40ad65c9e Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 18 Nov 2019 22:23:49 +0200 Subject: New feature: Now there is popup selection of Lists/Swimlanes/Calendar/Roles. New feature, not set visible yet, because switching to it does not work properly yet: Collapsible Swimlanes #2804 Fix: Public board now loads correctly. When you select one of Lists/Swimlanes/Calendar view and reload webbrowser page, it can change view. Closes #2311 Fix: List sorting commented out. Closes #2800 Fix: Errors hasHiddenMinicardText, hasShowDragHandles, showSort, hasSortBy, profile, FirefoxAndroid/IE11/Vivaldi/Chromium browsers not working by using cookies instead of database. More details at https://github.com/wekan/wekan/issues/2643#issuecomment-554907955 Note: Cookie changes are not always immediate, if there is no effect, you may need to reload webbrowser page. Closes #2643 . Thanks to xet7 ! --- client/lib/utils.js | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'client/lib/utils.js') diff --git a/client/lib/utils.js b/client/lib/utils.js index cc3526c0..7b4990e7 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -1,4 +1,58 @@ Utils = { + setBoardView(view) { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + currentUser = Meteor.user(); + if (view === 'board-view-lists') { + cookies.set('boardView', 'board-view-lists'); //true + if (currentUser) { + Meteor.user().setBoardView('board-view-lists'); + } + } else if (view === 'board-view-swimlanes') { + cookies.set('boardView', 'board-view-swimlanes'); //true + if (currentUser) { + Meteor.user().setBoardView('board-view-swimlanes'); + } + } else if (view === 'board-view-collapse') { + cookies.set('boardView', 'board-view-swimlane'); //true + cookies.set('collapseSwimlane', 'true'); //true + if (currentUser) { + Meteor.user().setBoardView('board-view-swimlane'); + } + } else if (view === 'board-view-cal') { + cookies.set('boardView', 'board-view-cal'); //true + if (currentUser) { + Meteor.user().setBoardView('board-view-cal'); + } + } + }, + + unsetBoardView() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + cookies.remove('boardView'); + cookies.remove('collapseSwimlane'); + }, + + boardView() { + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.get('boardView') === 'board-view-lists') { + return 'board-view-lists'; + } else if ( + cookies.get('boardView') === 'board-view-swimlanes' && + !cookies.has('collapseSwimlane') + ) { + return 'board-view-swimlanes'; + } else if (cookies.has('collapseSwimlane')) { + return 'board-view-swimlanes'; + } else if (cookies.get('boardView') === 'board-view-cal') { + return 'board-view-cal'; + } else { + return false; + } + }, + // XXX We should remove these two methods goBoardId(_id) { const board = Boards.findOne(_id); -- cgit v1.2.3-1-g7c22 From 4786b0c18ddeb8f48525216eabebdced7159467d Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 19 Nov 2019 21:42:00 +0200 Subject: Use database when logged in. Continued. Thanks to xet7 ! --- client/lib/utils.js | 65 +++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 34 deletions(-) (limited to 'client/lib/utils.js') diff --git a/client/lib/utils.js b/client/lib/utils.js index 7b4990e7..80ec412c 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -3,26 +3,18 @@ Utils = { import { Cookies } from 'meteor/ostrio:cookies'; const cookies = new Cookies(); currentUser = Meteor.user(); - if (view === 'board-view-lists') { - cookies.set('boardView', 'board-view-lists'); //true - if (currentUser) { - Meteor.user().setBoardView('board-view-lists'); - } - } else if (view === 'board-view-swimlanes') { - cookies.set('boardView', 'board-view-swimlanes'); //true - if (currentUser) { - Meteor.user().setBoardView('board-view-swimlanes'); - } - } else if (view === 'board-view-collapse') { - cookies.set('boardView', 'board-view-swimlane'); //true - cookies.set('collapseSwimlane', 'true'); //true - if (currentUser) { - Meteor.user().setBoardView('board-view-swimlane'); - } - } else if (view === 'board-view-cal') { - cookies.set('boardView', 'board-view-cal'); //true - if (currentUser) { - Meteor.user().setBoardView('board-view-cal'); + if (currentUser) { + Meteor.user().setBoardView(view); + } else { + if (view === 'board-view-lists') { + cookies.set('boardView', 'board-view-lists'); //true + } else if (view === 'board-view-swimlanes') { + cookies.set('boardView', 'board-view-swimlanes'); //true + //} else if (view === 'board-view-collapse') { + // cookies.set('boardView', 'board-view-swimlane'); //true + // cookies.set('collapseSwimlane', 'true'); //true + } else if (view === 'board-view-cal') { + cookies.set('boardView', 'board-view-cal'); //true } } }, @@ -35,21 +27,26 @@ Utils = { }, boardView() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); - if (cookies.get('boardView') === 'board-view-lists') { - return 'board-view-lists'; - } else if ( - cookies.get('boardView') === 'board-view-swimlanes' && - !cookies.has('collapseSwimlane') - ) { - return 'board-view-swimlanes'; - } else if (cookies.has('collapseSwimlane')) { - return 'board-view-swimlanes'; - } else if (cookies.get('boardView') === 'board-view-cal') { - return 'board-view-cal'; + currentUser = Meteor.user(); + if (currentUser) { + return (currentUser.profile || {}).boardView } else { - return false; + import { Cookies } from 'meteor/ostrio:cookies'; + const cookies = new Cookies(); + if (cookies.get('boardView') === 'board-view-lists') { + return 'board-view-lists'; + } else if ( + cookies.get('boardView') === 'board-view-swimlanes' + //&& !cookies.has('collapseSwimlane') + ) { + return 'board-view-swimlanes'; + //} else if (cookies.has('collapseSwimlane')) { + // return 'board-view-swimlanes'; + } else if (cookies.get('boardView') === 'board-view-cal') { + return 'board-view-cal'; + } else { + return false; + } } }, -- cgit v1.2.3-1-g7c22 From 115d23f9293cad8a93f18f75a47a8a65756f71ce Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 19 Nov 2019 21:55:43 +0200 Subject: Use database when logged in. Continued. Thanks to xet7 ! --- client/lib/utils.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'client/lib/utils.js') diff --git a/client/lib/utils.js b/client/lib/utils.js index 80ec412c..ab5e3597 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -10,9 +10,9 @@ Utils = { cookies.set('boardView', 'board-view-lists'); //true } else if (view === 'board-view-swimlanes') { cookies.set('boardView', 'board-view-swimlanes'); //true - //} else if (view === 'board-view-collapse') { - // cookies.set('boardView', 'board-view-swimlane'); //true - // cookies.set('collapseSwimlane', 'true'); //true + //} else if (view === 'board-view-collapse') { + // cookies.set('boardView', 'board-view-swimlane'); //true + // cookies.set('collapseSwimlane', 'true'); //true } else if (view === 'board-view-cal') { cookies.set('boardView', 'board-view-cal'); //true } @@ -29,7 +29,7 @@ Utils = { boardView() { currentUser = Meteor.user(); if (currentUser) { - return (currentUser.profile || {}).boardView + return (currentUser.profile || {}).boardView; } else { import { Cookies } from 'meteor/ostrio:cookies'; const cookies = new Cookies(); @@ -40,8 +40,8 @@ Utils = { //&& !cookies.has('collapseSwimlane') ) { return 'board-view-swimlanes'; - //} else if (cookies.has('collapseSwimlane')) { - // return 'board-view-swimlanes'; + //} else if (cookies.has('collapseSwimlane')) { + // return 'board-view-swimlanes'; } else if (cookies.get('boardView') === 'board-view-cal') { return 'board-view-cal'; } else { -- cgit v1.2.3-1-g7c22 From 788dd0a81a06efee165007a92780f9e8c2c754ac Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 20 Nov 2019 21:10:11 +0200 Subject: Fix lint errors. --- client/lib/utils.js | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) (limited to 'client/lib/utils.js') diff --git a/client/lib/utils.js b/client/lib/utils.js index ab5e3597..c90dd749 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -5,17 +5,15 @@ Utils = { currentUser = Meteor.user(); if (currentUser) { Meteor.user().setBoardView(view); - } else { - if (view === 'board-view-lists') { - cookies.set('boardView', 'board-view-lists'); //true - } else if (view === 'board-view-swimlanes') { - cookies.set('boardView', 'board-view-swimlanes'); //true - //} else if (view === 'board-view-collapse') { - // cookies.set('boardView', 'board-view-swimlane'); //true - // cookies.set('collapseSwimlane', 'true'); //true - } else if (view === 'board-view-cal') { - cookies.set('boardView', 'board-view-cal'); //true - } + } else if (view === 'board-view-lists') { + cookies.set('boardView', 'board-view-lists'); //true + } else if (view === 'board-view-swimlanes') { + cookies.set('boardView', 'board-view-swimlanes'); //true + //} else if (view === 'board-view-collapse') { + // cookies.set('boardView', 'board-view-swimlane'); //true + // cookies.set('collapseSwimlane', 'true'); //true + } else if (view === 'board-view-cal') { + cookies.set('boardView', 'board-view-cal'); //true } }, @@ -54,8 +52,8 @@ Utils = { goBoardId(_id) { const board = Boards.findOne(_id); return ( - board && - FlowRouter.go('board', { + board + && FlowRouter.go('board', { id: board._id, slug: board.slug, }) @@ -66,8 +64,8 @@ Utils = { const card = Cards.findOne(_id); const board = Boards.findOne(card.boardId); return ( - board && - FlowRouter.go('card', { + board + && FlowRouter.go('card', { cardId: card._id, boardId: board._id, slug: board.slug, @@ -238,8 +236,8 @@ Utils = { }; if ( - 'ontouchstart' in window || - (window.DocumentTouch && document instanceof window.DocumentTouch) + 'ontouchstart' in window + || (window.DocumentTouch && document instanceof window.DocumentTouch) ) { return true; } @@ -260,8 +258,8 @@ Utils = { calculateTouchDistance(touchA, touchB) { return Math.sqrt( - Math.pow(touchA.screenX - touchB.screenX, 2) + - Math.pow(touchA.screenY - touchB.screenY, 2), + Math.pow(touchA.screenX - touchB.screenX, 2) + + Math.pow(touchA.screenY - touchB.screenY, 2), ); }, @@ -278,9 +276,9 @@ Utils = { }); $(document).on('touchend', selector, function(e) { if ( - touchStart && - lastTouch && - Utils.calculateTouchDistance(touchStart, lastTouch) <= 20 + touchStart + && lastTouch + && Utils.calculateTouchDistance(touchStart, lastTouch) <= 20 ) { e.preventDefault(); const clickEvent = document.createEvent('MouseEvents'); -- cgit v1.2.3-1-g7c22 From 8898862d36b1f0fe8e7d7bdc80064e5106894d29 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 26 Nov 2019 02:29:36 +0200 Subject: Fix lint errors. --- client/lib/utils.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'client/lib/utils.js') diff --git a/client/lib/utils.js b/client/lib/utils.js index c90dd749..aca45528 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -1,7 +1,8 @@ +import { Cookies } from 'meteor/ostrio:cookies'; +const cookies = new Cookies(); + Utils = { setBoardView(view) { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); currentUser = Meteor.user(); if (currentUser) { Meteor.user().setBoardView(view); @@ -18,8 +19,6 @@ Utils = { }, unsetBoardView() { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); cookies.remove('boardView'); cookies.remove('collapseSwimlane'); }, @@ -29,8 +28,6 @@ Utils = { if (currentUser) { return (currentUser.profile || {}).boardView; } else { - import { Cookies } from 'meteor/ostrio:cookies'; - const cookies = new Cookies(); if (cookies.get('boardView') === 'board-view-lists') { return 'board-view-lists'; } else if ( -- cgit v1.2.3-1-g7c22 From d5a8ec1c36fb4810746eaf44aac3ef66d8df77e2 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 29 Nov 2019 03:25:52 +0200 Subject: Remove 1st implementation of collapse swimlanes. I will do it differently in next 2nd implementation. Thanks to xet7 ! --- client/lib/utils.js | 6 ------ 1 file changed, 6 deletions(-) (limited to 'client/lib/utils.js') diff --git a/client/lib/utils.js b/client/lib/utils.js index aca45528..f4fc170a 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -10,9 +10,6 @@ Utils = { cookies.set('boardView', 'board-view-lists'); //true } else if (view === 'board-view-swimlanes') { cookies.set('boardView', 'board-view-swimlanes'); //true - //} else if (view === 'board-view-collapse') { - // cookies.set('boardView', 'board-view-swimlane'); //true - // cookies.set('collapseSwimlane', 'true'); //true } else if (view === 'board-view-cal') { cookies.set('boardView', 'board-view-cal'); //true } @@ -32,11 +29,8 @@ Utils = { return 'board-view-lists'; } else if ( cookies.get('boardView') === 'board-view-swimlanes' - //&& !cookies.has('collapseSwimlane') ) { return 'board-view-swimlanes'; - //} else if (cookies.has('collapseSwimlane')) { - // return 'board-view-swimlanes'; } else if (cookies.get('boardView') === 'board-view-cal') { return 'board-view-cal'; } else { -- cgit v1.2.3-1-g7c22 From 2bf004120d5a43cd3c3c060fc7c0c30d1b01f220 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 3 Jan 2020 06:49:35 +0200 Subject: Add Worker role. Add more Font Awesome icons. Fix browser console errors when editing user profile name etc. Thanks to xet7 ! Closes #2788 --- client/lib/utils.js | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) (limited to 'client/lib/utils.js') diff --git a/client/lib/utils.js b/client/lib/utils.js index f4fc170a..39457208 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -24,18 +24,14 @@ Utils = { currentUser = Meteor.user(); if (currentUser) { return (currentUser.profile || {}).boardView; + } else if (cookies.get('boardView') === 'board-view-lists') { + return 'board-view-lists'; + } else if (cookies.get('boardView') === 'board-view-swimlanes') { + return 'board-view-swimlanes'; + } else if (cookies.get('boardView') === 'board-view-cal') { + return 'board-view-cal'; } else { - if (cookies.get('boardView') === 'board-view-lists') { - return 'board-view-lists'; - } else if ( - cookies.get('boardView') === 'board-view-swimlanes' - ) { - return 'board-view-swimlanes'; - } else if (cookies.get('boardView') === 'board-view-cal') { - return 'board-view-cal'; - } else { - return false; - } + return false; } }, @@ -43,8 +39,8 @@ Utils = { goBoardId(_id) { const board = Boards.findOne(_id); return ( - board - && FlowRouter.go('board', { + board && + FlowRouter.go('board', { id: board._id, slug: board.slug, }) @@ -55,8 +51,8 @@ Utils = { const card = Cards.findOne(_id); const board = Boards.findOne(card.boardId); return ( - board - && FlowRouter.go('card', { + board && + FlowRouter.go('card', { cardId: card._id, boardId: board._id, slug: board.slug, @@ -227,8 +223,8 @@ Utils = { }; if ( - 'ontouchstart' in window - || (window.DocumentTouch && document instanceof window.DocumentTouch) + 'ontouchstart' in window || + (window.DocumentTouch && document instanceof window.DocumentTouch) ) { return true; } @@ -249,8 +245,8 @@ Utils = { calculateTouchDistance(touchA, touchB) { return Math.sqrt( - Math.pow(touchA.screenX - touchB.screenX, 2) - + Math.pow(touchA.screenY - touchB.screenY, 2), + Math.pow(touchA.screenX - touchB.screenX, 2) + + Math.pow(touchA.screenY - touchB.screenY, 2), ); }, @@ -267,9 +263,9 @@ Utils = { }); $(document).on('touchend', selector, function(e) { if ( - touchStart - && lastTouch - && Utils.calculateTouchDistance(touchStart, lastTouch) <= 20 + touchStart && + lastTouch && + Utils.calculateTouchDistance(touchStart, lastTouch) <= 20 ) { e.preventDefault(); const clickEvent = document.createEvent('MouseEvents'); -- cgit v1.2.3-1-g7c22 From bf78b093bad7d463ee325ad96e8b485264d4a3be Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 7 Feb 2020 03:16:16 +0200 Subject: Try to disable dragging Swimlanes/Lists/Cards/Checklists/Subtasks on small mobile smartphones webbrowsers, and hide drag handles on mobile web. Thanks to xet7 ! --- client/lib/utils.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'client/lib/utils.js') diff --git a/client/lib/utils.js b/client/lib/utils.js index 39457208..c921fddc 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -147,8 +147,38 @@ Utils = { // in a small window (even on desktop), Wekan run in compact mode. // we can easily debug with a small window of desktop browser. :-) isMiniScreen() { + // OLD WINDOW WIDTH DETECTION: this.windowResizeDep.depend(); return $(window).width() <= 800; + + // NEW TOUCH DEVICE DETECTION: + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent + + /* + var hasTouchScreen = false; + if ("maxTouchPoints" in navigator) { + hasTouchScreen = navigator.maxTouchPoints > 0; + } else if ("msMaxTouchPoints" in navigator) { + hasTouchScreen = navigator.msMaxTouchPoints > 0; + } else { + var mQ = window.matchMedia && matchMedia("(pointer:coarse)"); + if (mQ && mQ.media === "(pointer:coarse)") { + hasTouchScreen = !!mQ.matches; + } else if ('orientation' in window) { + hasTouchScreen = true; // deprecated, but good fallback + } else { + // Only as a last resort, fall back to user agent sniffing + var UA = navigator.userAgent; + hasTouchScreen = ( + /\b(BlackBerry|webOS|iPhone|IEMobile)\b/i.test(UA) || + /\b(Android|Windows Phone|iPad|iPod)\b/i.test(UA) + ); + } + } + */ + //if (hasTouchScreen) + // document.getElementById("exampleButton").style.padding="1em"; + //return false; }, calculateIndexData(prevData, nextData, nItems = 1) { -- cgit v1.2.3-1-g7c22