Browse Source

Add the following new Sandstorm features and fixes:

- All Boards page [so it's possible to go back from subtask board](https://github.com/wekan/wekan/issues/2082)
- Board favorites
- New Sandstorm board first user is Admin and [has IFTTT Rules](https://github.com/wekan/wekan/issues/2125)
  and Standalone Wekan Admin Panel. Probably some Admin Panel features do not work yet. Please keep backup of your grains before testig Admin Panel.
- Linked Cards and Linked Boards.
- Some not needed options like Logout etc have been hidden from top bar right menu.
- [Import board now works. "Board not found" is not problem anymore](https://github.com/wekan/wekan/issues/1430), because you can go to All Boards page to change to imported board.

and removes the following features:

- Remove Welcome Board from Standalone Wekan, [to fix Welcome board not translated](https://github.com/wekan/wekan/issues/1601).
  Sandstorm Wekan does not have Welcome Board.

Thanks to xet7 !

Closes #2125,
closes #2082,
closes #1430,
closes #1601,
related #2205,
related #2070,
related #1695,
related #1192.
Lauri Ojansivu 3 months ago
parent
commit
34d8235551

+ 55 - 55
client/components/boards/boardHeader.jade

@@ -7,71 +7,69 @@ template(name="boardHeaderBar")
 
   .board-header-btns.left
     unless isMiniScreen
-      unless isSandstorm
-        if currentBoard
-          if currentUser
-            a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
-              title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
-              i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
-              if showStarCounter
-                span
-                  = currentBoard.stars
+      if currentBoard
+        if currentUser
+          a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
+            title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
+            i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
+            if showStarCounter
+              span
+                = currentBoard.stars
 
-            a.board-header-btn(
-              class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
-              title="{{_ currentBoard.permission}}")
-              i.fa(class="{{#if currentBoard.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
-              span {{_ currentBoard.permission}}
+          a.board-header-btn(
+            class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
+            title="{{_ currentBoard.permission}}")
+            i.fa(class="{{#if currentBoard.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
+            span {{_ currentBoard.permission}}
 
-            a.board-header-btn.js-watch-board(
-              title="{{_ watchLevel }}")
-              if $eq watchLevel "watching"
-                i.fa.fa-eye
-              if $eq watchLevel "tracking"
-                i.fa.fa-bell
-              if $eq watchLevel "muted"
-                i.fa.fa-bell-slash
-              span {{_ watchLevel}}
+          a.board-header-btn.js-watch-board(
+            title="{{_ watchLevel }}")
+            if $eq watchLevel "watching"
+              i.fa.fa-eye
+            if $eq watchLevel "tracking"
+              i.fa.fa-bell
+            if $eq watchLevel "muted"
+              i.fa.fa-bell-slash
+            span {{_ watchLevel}}
 
-          else
-            a.board-header-btn.js-log-in(
-              title="{{_ 'log-in'}}")
-              i.fa.fa-sign-in
-              span {{_ 'log-in'}}
+        else
+          a.board-header-btn.js-log-in(
+            title="{{_ 'log-in'}}")
+            i.fa.fa-sign-in
+            span {{_ 'log-in'}}
 
   .board-header-btns.right
     if currentBoard
       if isMiniScreen
-        unless isSandstorm
-          if currentUser
-            a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
-              title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
-              i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
-              if showStarCounter
-                span
-                  = currentBoard.stars
+        if currentUser
+          a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
+            title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
+            i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
+            if showStarCounter
+              span
+                = currentBoard.stars
 
-            a.board-header-btn(
-              class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
-              title="{{_ currentBoard.permission}}")
-              i.fa(class="{{#if currentBoard.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
-              span {{_ currentBoard.permission}}
+          a.board-header-btn(
+            class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
+            title="{{_ currentBoard.permission}}")
+            i.fa(class="{{#if currentBoard.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
+            span {{_ currentBoard.permission}}
 
-            a.board-header-btn.js-watch-board(
-              title="{{_ watchLevel }}")
-              if $eq watchLevel "watching"
-                i.fa.fa-eye
-              if $eq watchLevel "tracking"
-                i.fa.fa-bell
-              if $eq watchLevel "muted"
-                i.fa.fa-bell-slash
-              span {{_ watchLevel}}
+          a.board-header-btn.js-watch-board(
+            title="{{_ watchLevel }}")
+            if $eq watchLevel "watching"
+              i.fa.fa-eye
+            if $eq watchLevel "tracking"
+              i.fa.fa-bell
+            if $eq watchLevel "muted"
+              i.fa.fa-bell-slash
+            span {{_ watchLevel}}
 
-          else
-            a.board-header-btn.js-log-in(
-              title="{{_ 'log-in'}}")
-              i.fa.fa-sign-in
-              span {{_ 'log-in'}}
+        else
+          a.board-header-btn.js-log-in(
+            title="{{_ 'log-in'}}")
+            i.fa.fa-sign-in
+            span {{_ 'log-in'}}
 
       if isSandstorm
         if currentUser
@@ -143,6 +141,8 @@ template(name="boardMenuPopup")
     ul.pop-over-list
       li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
       li: a.js-import-board {{_ 'import-board-c'}}
+      li: a.js-archive-board {{_ 'archive-board'}}
+      li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}}
     hr
     ul.pop-over-list
       li: a.js-subtask-settings {{_ 'subtask-settings'}}

+ 7 - 11
client/components/cards/cardDetails.jade

@@ -19,16 +19,14 @@ template(name="cardDetails")
             a.js-parent-card(href=linkForCard) {{title}}
           // else
             {{_ 'top-level-card'}}
-        unless isSandstorm
-          if isLinkedCard
-            h3.linked-card-location
-              +viewer
-                | {{getBoardTitle}} > {{getTitle}}
+        if isLinkedCard
+          h3.linked-card-location
+            +viewer
+              | {{getBoardTitle}} > {{getTitle}}
 
     if getArchived
       if isLinkedBoard
-        unless isSandstorm
-          p.warning {{_ 'board-archived'}}
+        p.warning {{_ 'board-archived'}}
       else
         p.warning {{_ 'card-archived'}}
 
@@ -192,11 +190,9 @@ template(name="cardDetails")
     unless currentUser.isNoComments
       if isLoaded.get
         if isLinkedCard
-          unless isSandstorm
-            +activities(card=this mode="linkedcard")
+          +activities(card=this mode="linkedcard")
         else if isLinkedBoard
-          unless isSandstorm
-            +activities(card=this mode="linkedboard")
+          +activities(card=this mode="linkedboard")
         else
           +activities(card=this mode="card")
 

+ 8 - 10
client/components/lists/listBody.jade

@@ -44,14 +44,13 @@ template(name="addCardForm")
 
   .add-controls.clearfix
     button.primary.confirm(type="submit") {{_ 'add'}}
-    unless isSandstorm
-      span.quiet
-        | {{_ 'or'}}
-        a.js-link {{_ 'link'}}
-      span.quiet
-        |  
-        | /
-        a.js-search {{_ 'search'}}
+    span.quiet
+      | {{_ 'or'}}
+      a.js-link {{_ 'link'}}
+    span.quiet
+      |  
+      | /
+      a.js-search {{_ 'search'}}
 
 template(name="autocompleteLabelLine")
   .minicard-label(class="card-label-{{colorName}}" title=labelName)
@@ -84,8 +83,7 @@ template(name="linkCardPopup")
       option(value="{{getId}}") {{getTitle}}
 
   .edit-controls.clearfix
-    unless isSandstorm
-      input.primary.confirm.js-done(type="button" value="{{_ 'link'}}")
+    input.primary.confirm.js-done(type="button" value="{{_ 'link'}}")
 
 template(name="searchCardPopup")
   label {{_ 'boards'}}:

+ 30 - 35
client/components/main/header.jade

@@ -4,39 +4,38 @@ template(name="header")
     list all starred boards with a link to go there. This is inspired by the
     Reddit "subreddit" bar.
     The first link goes to the boards page.
-  unless isSandstorm
-    if currentUser
-      #header-quick-access(class=currentBoard.colorClass)
-        if isMiniScreen
-          ul
-            li
-              a(href="{{pathFor 'home'}}")
-                span.fa.fa-home
+  if currentUser
+    #header-quick-access(class=currentBoard.colorClass)
+      if isMiniScreen
+        ul
+          li
+            a(href="{{pathFor 'home'}}")
+              span.fa.fa-home
 
-            if currentList
-              each currentBoard.lists
-                li(class="{{#if $.Session.equals 'currentList' _id}}current{{/if}}")
-                  a.js-select-list
-                    = title
-          #header-new-board-icon
-        else
-          ul
-            li
-              a(href="{{pathFor 'home'}}")
-                span.fa.fa-home
-                | {{_ 'all-boards'}}
-            each currentUser.starredBoards
-              li.separator -
-              li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
-                a(href="{{pathFor 'board' id=_id slug=slug}}")
+          if currentList
+            each currentBoard.lists
+              li(class="{{#if $.Session.equals 'currentList' _id}}current{{/if}}")
+                a.js-select-list
                   = title
-            else
-              li.current {{_ 'quick-access-description'}}
+        #header-new-board-icon
+      else
+        ul
+          li
+            a(href="{{pathFor 'home'}}")
+              span.fa.fa-home
+              | {{_ 'all-boards'}}
+          each currentUser.starredBoards
+            li.separator -
+            li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
+              a(href="{{pathFor 'board' id=_id slug=slug}}")
+                = title
+          else
+            li.current {{_ 'quick-access-description'}}
 
-        a#header-new-board-icon.js-create-board
-          i.fa.fa-plus(title="Create a new board")
+      a#header-new-board-icon.js-create-board
+        i.fa.fa-plus(title="Create a new board")
 
-        +headerUserBar
+      +headerUserBar
 
   #header(class=currentBoard.colorClass)
     //-
@@ -52,13 +51,9 @@ template(name="header")
           On sandstorm, the logo shouldn't be clickable, because we only have one
           page/document on it, and we don't want to see the home page containing
           the list of all boards.
-        if isSandstorm
-          .wekan-logo
+        unless currentSetting.hideLogo
+          a.wekan-logo(href="{{pathFor 'home'}}" title="{{_ 'header-logo-title'}}")
             img(src="{{pathFor '/wekan-logo-header.png'}}" alt="Wekan")
-        else
-          unless currentSetting.hideLogo
-            a.wekan-logo(href="{{pathFor 'home'}}" title="{{_ 'header-logo-title'}}")
-              img(src="{{pathFor '/wekan-logo-header.png'}}" alt="Wekan")
 
   if appIsOffline
     +offlineWarning

+ 3 - 3
client/components/main/layouts.jade

@@ -14,13 +14,13 @@ head
 
 template(name="userFormsLayout")
   section.auth-layout
-    unless currentSetting.hideLogo
-      h1.at-form-landing-logo
-        img(src="{{pathFor '/wekan-logo.png'}}" alt="Wekan")
     if currentSetting.hideLogo
       h1
         br
         br
+    else
+      h1.at-form-landing-logo
+        img(src="{{pathFor '/wekan-logo.png'}}" alt="Wekan")
     section.auth-dialog
       +Template.dynamic(template=content)
       if currentSetting.displayAuthenticationMethod

+ 15 - 16
client/components/settings/settingHeader.jade

@@ -4,22 +4,21 @@ template(name="settingHeaderBar")
 
   .setting-header-btns.left
     unless isMiniScreen
-      unless isSandstorm
-        if currentUser
-          a.setting-header-btn.settings(href="{{pathFor 'setting'}}")
-            i.fa(class="fa-cog")
-            span {{_ 'settings'}}
+      if currentUser
+        a.setting-header-btn.settings(href="{{pathFor 'setting'}}")
+          i.fa(class="fa-cog")
+          span {{_ 'settings'}}
 
-          a.setting-header-btn.people(href="{{pathFor 'people'}}")
-            i.fa(class="fa-users")
-            span {{_ 'people'}}
+        a.setting-header-btn.people(href="{{pathFor 'people'}}")
+          i.fa(class="fa-users")
+          span {{_ 'people'}}
 
-          a.setting-header-btn.informations(href="{{pathFor 'information'}}")
-            i.fa(class="fa-info-circle")
-            span {{_ 'info'}}
+        a.setting-header-btn.informations(href="{{pathFor 'information'}}")
+          i.fa(class="fa-info-circle")
+          span {{_ 'info'}}
 
-        else
-          a.setting-header-btn.js-log-in(
-            title="{{_ 'log-in'}}")
-            i.fa.fa-sign-in
-            span {{_ 'log-in'}}
+      else
+        a.setting-header-btn.js-log-in(
+          title="{{_ 'log-in'}}")
+          i.fa.fa-sign-in
+          span {{_ 'log-in'}}

+ 9 - 10
client/components/sidebar/sidebar.jade

@@ -83,17 +83,16 @@ template(name="memberPopup")
     ul.pop-over-list
       li
         a.js-filter-member {{_ 'filter-cards'}}
-      unless isSandstorm
-        if currentUser.isBoardAdmin
-          li
-            a.js-change-role
-              | {{_ 'change-permissions'}}
-              span.quiet (#{memberType})
+      if currentUser.isBoardAdmin
         li
-          if $eq currentUser._id userId
-            a.js-leave-member {{_ 'leave-board'}}
-          else if currentUser.isBoardAdmin
-            a.js-remove-member {{_ 'remove-from-board'}}
+          a.js-change-role
+            | {{_ 'change-permissions'}}
+            span.quiet (#{memberType})
+      li
+        if $eq currentUser._id userId
+          a.js-leave-member {{_ 'leave-board'}}
+        else if currentUser.isBoardAdmin
+          a.js-remove-member {{_ 'remove-from-board'}}
 
 
 template(name="removeMemberPopup")

+ 12 - 9
client/components/users/userHeader.jade

@@ -4,10 +4,11 @@ template(name="headerUserBar")
       .header-user-bar-avatar
         +userAvatar(userId=currentUser._id)
       unless isMiniScreen
-        if currentUser.profile.fullname
-          = currentUser.profile.fullname
-        else
-          = currentUser.username
+        unless isSandstorm
+          if currentUser.profile.fullname
+            = currentUser.profile.fullname
+          else
+            = currentUser.username
 
 template(name="memberMenuPopup")
   ul.pop-over-list
@@ -15,13 +16,15 @@ template(name="memberMenuPopup")
       li: a.js-edit-profile {{_ 'edit-profile'}}
       li: a.js-change-settings {{_ 'change-settings'}}
       li: a.js-change-avatar {{_ 'edit-avatar'}}
-      li: a.js-change-password {{_ 'changePasswordPopup-title'}}
-      li: a.js-change-language {{_ 'changeLanguagePopup-title'}}
+      unless isSandstorm
+        li: a.js-change-password {{_ 'changePasswordPopup-title'}}
+        li: a.js-change-language {{_ 'changeLanguagePopup-title'}}
     if currentUser.isAdmin
       li: a.js-go-setting(href="{{pathFor 'setting'}}") {{_ 'admin-panel'}}
-  hr
-  ul.pop-over-list
-    li: a.js-logout {{_ 'log-out'}}
+  unless isSandstorm
+    hr
+    ul.pop-over-list
+      li: a.js-logout {{_ 'log-out'}}
 
 template(name="editProfilePopup")
   form

+ 3 - 2
models/users.js

@@ -559,7 +559,7 @@ if (Meteor.isServer) {
   });
   Accounts.onCreateUser((options, user) => {
     const userCount = Users.find().count();
-    if (!isSandstorm && userCount === 0) {
+    if (userCount === 0) {
       user.isAdmin = true;
       return user;
     }
@@ -675,7 +675,7 @@ if (Meteor.isServer) {
   CollectionHooks.getUserId = () => {
     return fakeUserId.get() || getUserId();
   };
-
+  /*
   if (!isSandstorm) {
     Users.after.insert((userId, doc) => {
       const fakeUser = {
@@ -704,6 +704,7 @@ if (Meteor.isServer) {
       });
     });
   }
+  */
 
   Users.after.insert((userId, doc) => {
 

+ 9 - 9
sandstorm.js

@@ -435,12 +435,12 @@ if (isSandstorm && Meteor.isClient) {
   //
   // XXX Hack. The home route is already defined at this point so we need to
   // add the redirection trigger to the internal route object.
-  FlowRouter._routesMap.home._triggersEnter.push((context, redirect) => {
-    redirect(FlowRouter.path('board', {
-      id: sandstormBoard._id,
-      slug: sandstormBoard.slug,
-    }));
-  });
+  //FlowRouter._routesMap.home._triggersEnter.push((context, redirect) => {
+  //  redirect(FlowRouter.path('board', {
+  //    id: sandstormBoard._id,
+  //    slug: sandstormBoard.slug,
+  //  }));
+  //});
 
   // XXX Hack. `Meteor.absoluteUrl` doesn't work in Sandstorm, since every
   // session has a different URL whereas Meteor computes absoluteUrl based on
@@ -457,9 +457,9 @@ if (isSandstorm && Meteor.isClient) {
   // XXX Hack to fix https://github.com/wefork/wekan/issues/27
   // Sandstorm Wekan instances only ever have a single board, so there is no need
   // to cache per-board subscriptions.
-  SubsManager.prototype.subscribe = function(...params) {
-    return Meteor.subscribe(...params);
-  };
+  //SubsManager.prototype.subscribe = function(...params) {
+  //  return Meteor.subscribe(...params);
+  //};
 }
 
 // We use this blaze helper in the UI to hide some templates that does not make