Directory Structure - jean/wekan GitHub Wiki
We're using FlowRouter client side router inside config/router.js. For accounts there is AccountsTemplates configured in config/accounts.js.
Files in this directory are served by meteor as-is to the client. It hosts some (fav)icons and fonts.
wekan-manifest.json: goes into link rel="manifest"
in the header of the generated page and is a Web App Manifest.
-
activities:
-
activities.jade:
activities
template for the list of activities placed inside asidebar-content
; usesboardActivities
orcardActivities
depending onmode
; XXX: does this mean that sidebar should be visible in board list mode? when does theboard
activity gets shown? -
comments.jade:
commentForm
template used incard-details-canvas
for adding comments;
-
activities.jade:
-
boards:
-
boardArchive.jade:
archivedBoards
template for the modal dialog showing the list of archived boards that might be restored; -
boardBody.jade: top level template for presenting a board is
board
and, based on screen size and current state, it uses eithercardDetails
orboardBody
templates;boardBody
is the one including thesidebar
, eachlist
,cardDetails
for larger screens when a card is selected and theaddListForm
for adding a new list (also defined in this file); -
boardHeader.jade:
boardHeaderBar
,boardMenuPopup
,boardVisibilityList
,boardChangeVisibilityPopup
,boardChangeWatchPopup
,boardChangeColorPopup
,createBoard
,chooseBoardSource
,boardChangeTitlePopup
,archiveBoardPopup
,outgoingWebhooksPopup
; -
boardsList.jade:
boardList
andboardListHeaderBar
for the list of boards in the initial screen;
-
boardArchive.jade:
-
cards:
-
attachments.jade:
cardAttachmentsPopup
,previewClipboardImagePopup
,previewAttachedImagePopup
,attachmentDeletePopup
,attachmentsGalery
; -
cardDate.jade:
editCardDate
anddateBadge
templates; -
cardDetails.jade:
boardsAndLists
is the usual layout for a board display withboardLists
being used in sandstorm where each board is independent;cardDetails
,editCardTitleForm
,cardDetailsActionsPopup
,moveCardPopup
,copyCardPopup
,cardMembersPopup
,cardMorePopup
,cardDeletePopup
; -
cardTime.jade:
editCardSpentTime
andtimeBadge
templates; -
checklists.jade:
checklists
,checklistDetail
,checklistDeleteDialog
,addChecklistItemForm
,editChecklistItemForm
,checklistItems
,itemDetail
; -
labels.jade:
formLabel
,createLabelPopup
,editLabelPopup
,deleteLabelPopup
,cardLabelsPopup
; -
minicard.jade: has the
minicard
template
-
attachments.jade:
-
forms: inlinedform.jade has the
inlinedForm
template; -
import:
-
import.jade:
importHeaderBar
,import
,importTextarea
,importMapMembers
,importMapMembersAddPopup
are all templates used for importing Trello (via trelloMembersMapper.js) and Wekan (via wekanMembersMapper.js) boards;
-
import.jade:
-
lists:
-
list.jade:
list
is the simple, main template for lists; -
listBody.jade:
listBody
,addCardForm
,autocompleteLabelLine
templates; -
listHeader.jade:
listHeader
,editListTitleForm
,listActionPopup
,boardLists
,listMorePopup
,listDeletePopup
,setWipLimitPopup
,wipLimitErrorPopup
templates;
-
list.jade:
-
main:
-
editor.jade:
editor
andviewer
templates; -
header.jade:
header
andofflineWarning
templates; if the user is connected we display a small "quick-access" top bar that 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; -
keyboardShortcuts.jade:
shortcutsHeaderBar
,shortcutsModalTitle
,keyboardShortcuts
- all for the shortcuts that are presented when you press?
re implemented inhere; -
layouts.jade: has the template for head portion of the html page and other general purpose templates:
userFormsLayout
,defaultLayout
,notFound
,message
; -
popup.tpl.jade: tpl files only define a single template so there's no need to wrap content in a template tag; the name of the template is the base name of the file (
popup
in this case); - spinner.tpl.jade: is the template for a "waiting" dialog;
-
editor.jade:
-
settings:
-
informationBody.jade:
information
,statistics
templates; -
invitationCode.jade:
invitationCode
template; -
peopleBody.jade:
people
,peopleGeneral
,peopleRow
,editUserPopup
; -
settingBody.jade:
setting
,general
,email
,accountSettings
,announcementSettings
-
settingHeader.jade:
settingHeaderBar
template;
-
informationBody.jade:
-
sidebar:
-
sidebar.jade:
sidebar
,homeSidebar
,membersWidget
,labelsWidget
,memberPopup
,removeMemberPopup
,leaveBoardPopup
,addMemberPopup
,changePermissionsPopup
-
sidebarArchives.jade:
archivesSidebar
-
sidebarFilters.jade:
filterSidebar
,multiselectionSidebar
,disambiguateMultiLabelPopup
,disambiguateMultiMemberPopup
,moveSelectionPopup
;
-
sidebar.jade:
-
users:
-
userAvatar.jade:
userAvatar
,userAvatarInitials
,userPopup
,memberName
,changeAvatarPopup
,cardMemberPopup
-
userHeader.jade:
headerUserBar
,memberMenuPopup
,editProfilePopup
,editNotificationPopup
,changePasswordPopup
,changeLanguagePopup
,changeSettingsPopup
;
-
userAvatar.jade:
- mixins: extends infiniteScrolling.js for card details, sidebar and also extends perfectScrollbar.js;
-
blazeHelpers.js: following Blaze helpers are registered here:
currentBoard()
,currentCard()
,getUser()
andconcat()
; -
gecko-fix.js: removes deprecated
watch
andunwatch
from Firefox prior to version 58; - presence.js: custom state function for Presence that keeps track of current board;
-
reactiveTabs.js: ReactiveTabs are configured to use
basicTabs
template.
- accessibility.js: define a set of DOM transformations that are specifically intended for blind screen readers;
-
cssEvents.js: the
CSSEvents
object has methods that select the name of the event based on the specific transitions and animations; - pasteImage.js and dropImage.js: utility for pasting and dropping images on a web app; XXX: add comments; not same style as the rest of the code
- emoji-values.js: sets Emoji.values;
- escapeActions.js: defines the behavior (mostly canceling current edit) for escape keyboard key;
- i18n.js: at startup we choose the language for the ui based on user profile or browser language;
- inlinedform.js: forms for editing a single field (like adding a card); XXX: comments in code suggest that a form that is not submitted will retain its value to prevent data loss using unsavedEdits.js;bug?; XXX: edit button to save and open;
-
keyboard.js: the shortcuts that are presented when you press
?
re implemented inhere; -
mixins.js: stub; no
Mixins
at this point; XXX: what doesnew class
do? exlint: missing () invoking a constructor -
popup.js: defines
Popup
class for things likes electing a date; XXX: not a Blaze helper? - textComplete.js: extends jquery-textcomplete to integrate with the rest of the system (like escape actions, tab and enter key handling); XXX: deprecated?
- utils.js: various methods all over the place (resize, screen size, sort, capitalize, navigate to board and card);
-
Blaze helpers:
-
filter.js: registers
Filter
Blaze helper to support filtering cards by labels and by members; -
modal.js: registers
Modal
Blaze helper to support showing modal windows like the one for archived boards; -
multiSelection.js: registers
Modal
Blaze helper to support multiple selection mode; -
unsavedEdits.js: registers
getUnsavedValue
andhasUnsavedValue
Blaze helpers to preserve content entered in fields but not saved;
-
filter.js: registers
.js files in this directory are not available to the client.
- statistics.js implements a Meteor server-only method for general-purpose information such as OS, memory, CPUs, PID of the process and so on.
- migrations.js is where code that update sold databases to new schema is located. Anytime the schema of one of the collection changes in a non-backward compatible way a migration needs to be written in this file.
-
authentication.js add the
Authentication
object to Meteor that provides methods for checking access rights. - lib/utils.js defines some checks used by checklists.js** model. XXX: these methods are defined in server-only code by are used in models, which are visible by the client (in Checklists.allow)?
-
notifications
-
notifications.js: defines the
Notifications
object that supports Activities and holds a list of functions to call when itsnotify()
method is called along with convenience methods to subscribe, unsubscribe and a way to filter recipients according to user settings for notification;- email.js: makes use of the notification system to send an email to a user;
- profile.js: stub; will allow associating notifications with user ids to be consumed by mobile apps;
-
notifications.js: adds the
watch()
Meteor server-only method that may watch boards, lists or cards using models/watchable.js; -
outgoing.js: adds the
outgoingWebhooks()
Meteor server-only method that can call external API XXX: I guess
-
notifications.js: defines the
-
publications defines sets of records that are published by the server and how clients can subscribe to those:
- accountSettings.js: AccountSettings collection;
- activities.js: Activities collection filtered and paginated;
- announcements.js: Announcements collection;
- avatars.js: Avatars collection for current user;
- boards.js: Boards collection for current user, archived boards collection and individual board as a relation;
- cards.js: a Card by its id;
- fast-render.js: configures FastRender to use the board data; XXX: FastRender docs say "Make sure you're using Meteor.subscribe and not this.subscribe"
- people.js: Users collection;
- settings.js: Settings collection and, separately, the mail server;
- unsavedEdits.js: UnsavedEdits collection;
- users.js: provides a "mini-profile" for individual users and a way to check if current user is admin.
The files in models directory mainly define collections; most of them have aldeed SimpleSchema for automatic validation of insert and update of collections. This is also where helpers, mutations, methods, hooks and bootstrap code is to be found. Server side code also implements json REST API.
Collections (mostly Mongo.Collection
except as noted) are defined in:
- accountSettings.js;
- activities.js: does not have a SimpleSchema;
- announcements.js;
- attachments.js: file-system collection;
- avatars.js: file-system collection;
- boards.js;
- cardComments.js;
- cards.js;
- checklists.js;
- integrations.js;
- invitationCodes.js;
- lists.js;
- settings.js;
- unsavedEdits.js;
-
users.js: extends the
Meteor.users
collection.
Other files:
-
watchable.js: extends the schema, helpers and mutations of
Boards
,Lists
andCards
. - export.js: has some code to support the REST API.
-
import.js: implements
importBoard()
method so that Trello (in trelloCreator.js) and Wekan (in wekanCreator.js) boards can be imported. XXX: Solid candidates for a directory of their own.
- Git:
- .git;
- .gitignore;
- Docker:
- docker-compose.yml: the compose file is a YAML file defining services, networks and volumes;
- Dockerfile;
- Snap:
- snapcraft.yaml: Snapcraft packages any app for every Linux desktop, server, cloud or device, and deliver updates directly;
- snap;
- snap-src;
- Sandstorm:
- sandstorm.js: Sandstorm specific code;
- sandstorm-pkgdef.capnp: used the meteor-spk tool to generate a sandstorm package;
- Node:
- package.json;
- node_modules
- app.json: is a manifest format for describing web apps (build requirements, environment variables, addons, and other information);
- app.env: environment variables;
- Meteor: is a full-stack JavaScript platform for developing modern web and mobile applications.
- Translation:
- Text editors:
- .vscode: Visual Studio Code Editor;
- .editorconfig: EditorConfig provides consistent coding styles between different editors and IDEs;
- .github: hosts the issues template;
- .eslintrc.json: ESLint configuration;
- .travis.yml: configuration for Travis CI;
- scalingo.json: Scalingo is a deploy solution;
-
fix-download-unicode:
cfs_access-point.txt
from this folder is copied tobundle/programs/server/packages/cfs_access-point.js
in Docker build and in snapcraft build; this is a monkey patch fix for downloading files that have unicode in filename.
- meta: binary signatures, project description, icons, screenshots and, oui, a French change-log;
- CHANGELOG.md;
- Contributing.md;
- LICENSE;
- README.md.
This documentation was contributed by TNick and xet7 while Wekan was at commit e2f768c. Please add new files, fixes, updates, etc directly to this page.