mirror of
https://github.com/wekan/wekan.git
synced 2026-11-06 12:45:03 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d1e7abd07 | ||
|
|
8dfdbe7a16 | ||
|
|
15fbe7ca50 | ||
|
|
9aa8bc8921 | ||
|
|
e90791fdbc | ||
|
|
b869e3efb6 | ||
|
|
7e8073d621 | ||
|
|
c10f7b6134 | ||
|
|
1a71abbc1d | ||
|
|
0a46d06c1f | ||
|
|
23595674cf | ||
|
|
6fead14c11 | ||
|
|
52d54f35a3 | ||
|
|
3c1eff6241 | ||
|
|
fb2972396a | ||
|
|
4d9f76cc68 | ||
|
|
924c579680 | ||
|
|
ca2ea2c13e | ||
|
|
b579dc598b | ||
|
|
04c5f60287 | ||
|
|
123789aff0 | ||
|
|
74b66fdcaf | ||
|
|
3f09b54e04 | ||
|
|
c39403c307 | ||
|
|
13ea7bf3d7 | ||
|
|
dc2835d341 | ||
|
|
94ff2d6a9e | ||
|
|
6479c6a5c5 | ||
|
|
a1ddf8e6d2 | ||
|
|
102b39cd29 | ||
|
|
b7373a27b8 | ||
|
|
fb0b762293 | ||
|
|
5b799b4536 | ||
|
|
8050d7353d | ||
|
|
66b1736bb3 |
No files matched your search
@@ -38,7 +38,7 @@ jobs:
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
|
||||
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
@@ -48,14 +48,14 @@ jobs:
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@c4ee3adeed93b1fa6a762f209fb01608c1a22f1e
|
||||
uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671
|
||||
uses: docker/build-push-action@2eb1c1961a95fc15694676618e422e8ba1d63825
|
||||
with:
|
||||
context: .
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
@@ -29,6 +29,42 @@ This release adds the following new features:
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v6.98 2023-06-22 WeKan ® release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- Add checklist at top.
|
||||
[Part 1](https://github.com/wekan/wekan/pull/4973),
|
||||
[Part 2](https://github.com/wekan/wekan/pull/4974).
|
||||
Thanks to mfilser.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Update rebuild-wekan.sh to use local network IP address](https://github.com/wekan/wekan/commit/6479c6a5c516ade68d50849115367be90d3199a2).
|
||||
Thanks to xet7.
|
||||
- Update GitHub Actions.
|
||||
[Part 1](https://github.com/wekan/wekan/pull/4970),
|
||||
[Part 2](https://github.com/wekan/wekan/pull/4971).
|
||||
Thanks to dependabot.
|
||||
|
||||
and adds the following upcoming translations:
|
||||
|
||||
- [Added translations: Cantonese (China) (yue_CN) and Chinese Traditional (zh-Hant)](https://github.com/wekan/wekan/commit/dc2835d3410fcd7fd376a2be765c63236696605e).
|
||||
Thanks to translators.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Wait until user has logged in before fetching language preference](https://github.com/wekan/wekan/pull/4968).
|
||||
Thanks to simon816.
|
||||
- [Always fetch favicons from / path](https://github.com/wekan/wekan/commit/4d9f76cc68f435b1bbeeb51833dbce931f626b6d).
|
||||
Thanks to nebulade.
|
||||
- [Rounding sort number to next integer](https://github.com/wekan/wekan/pull/4975).
|
||||
Thanks to mfilser.
|
||||
- [Reduce list scroll speed while drag/drop the minicard](https://github.com/wekan/wekan/pull/4976).
|
||||
Thanks to mfilser.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v6.97 2023-06-10 WeKan ® release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v6.97.0"
|
||||
appVersion: "v6.98.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -164,6 +164,21 @@ textarea.js-edit-checklist-item {
|
||||
color: #222;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
|
||||
}
|
||||
.add-checklist-top {
|
||||
/* more space to checklists title */
|
||||
padding-left: 20px;
|
||||
/* + is easier clickable */
|
||||
padding-right: 20px;
|
||||
}
|
||||
.add-checklist-top.js-open-inlined-form:hover {
|
||||
background: #dbdbdb;
|
||||
color: #222;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,.2);
|
||||
}
|
||||
.card-details-item-title {
|
||||
/* max width for adding checklist at top */
|
||||
width: 100%;
|
||||
}
|
||||
.checklist-details-menu {
|
||||
float: right;
|
||||
padding: 6px 10px 6px 10px;
|
||||
|
||||
@@ -3,6 +3,12 @@ template(name="checklists")
|
||||
h3.card-details-item-title
|
||||
i.fa.fa-check
|
||||
| {{_ 'checklists'}}
|
||||
if canModifyCard
|
||||
+inlinedForm(autoclose=false classNames="js-add-checklist" cardId = cardId position="top")
|
||||
+addChecklistItemForm
|
||||
else
|
||||
a.add-checklist-top.js-open-inlined-form(title="{{_ 'add-checklist'}}")
|
||||
i.fa.fa-plus
|
||||
if currentUser.isBoardMember
|
||||
.material-toggle-switch(title="{{_ 'hide-checked-items'}}")
|
||||
//span.toggle-switch-title
|
||||
@@ -86,6 +92,13 @@ template(name="editChecklistItemForm")
|
||||
| {{_ 'convertChecklistItemToCardPopup-title'}}
|
||||
|
||||
template(name="checklistItems")
|
||||
if checklist.items.count
|
||||
if canModifyCard
|
||||
+inlinedForm(autoclose=false classNames="js-add-checklist-item" checklist = checklist position="top")
|
||||
+addChecklistItemForm(checklist=checklist showNewlineBecomesNewChecklistItem=true)
|
||||
else
|
||||
a.add-checklist-item.js-open-inlined-form(title="{{_ 'add-checklist-item'}}")
|
||||
i.fa.fa-plus
|
||||
.checklist-items.js-checklist-items
|
||||
each item in checklist.items
|
||||
+inlinedForm(classNames="js-edit-checklist-item" item = item checklist = checklist)
|
||||
|
||||
@@ -97,16 +97,26 @@ BlazeComponent.extendComponent({
|
||||
//if (card.isLinked()) cardId = card.linkedId;
|
||||
if (card.isLinkedCard()) cardId = card.linkedId;
|
||||
|
||||
let sortIndex;
|
||||
let checklistItemIndex;
|
||||
if (this.currentData().position === 'top') {
|
||||
sortIndex = Utils.calculateIndexData(null, card.firstChecklist()).base;
|
||||
checklistItemIndex = 0;
|
||||
} else {
|
||||
sortIndex = Utils.calculateIndexData(card.lastChecklist(), null).base;
|
||||
checklistItemIndex = -1;
|
||||
}
|
||||
|
||||
if (title) {
|
||||
Checklists.insert({
|
||||
cardId,
|
||||
title,
|
||||
sort: card.checklists().count(),
|
||||
sort: sortIndex,
|
||||
});
|
||||
this.closeAllInlinedForms();
|
||||
setTimeout(() => {
|
||||
this.$('.add-checklist-item')
|
||||
.last()
|
||||
.eq(checklistItemIndex)
|
||||
.click();
|
||||
}, 100);
|
||||
}
|
||||
@@ -122,13 +132,22 @@ BlazeComponent.extendComponent({
|
||||
let checklistItems = [title];
|
||||
if (newlineBecomesNewChecklistItem.checked) {
|
||||
checklistItems = title.split('\n').map(_value => _value.trim());
|
||||
if (this.currentData().position === 'top') {
|
||||
checklistItems = checklistItems.reverse();
|
||||
}
|
||||
}
|
||||
for (let checklistItem of checklistItems) {
|
||||
let sortIndex;
|
||||
if (this.currentData().position === 'top') {
|
||||
sortIndex = Utils.calculateIndexData(null, checklist.firstItem()).base;
|
||||
} else {
|
||||
sortIndex = Utils.calculateIndexData(checklist.lastItem(), null).base;
|
||||
}
|
||||
ChecklistItems.insert({
|
||||
title: checklistItem,
|
||||
checklistId: checklist._id,
|
||||
cardId: checklist.cardId,
|
||||
sort: Utils.calculateIndexData(checklist.lastItem()).base,
|
||||
sort: sortIndex,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ BlazeComponent.extendComponent({
|
||||
distance: 7,
|
||||
items: itemsSelector,
|
||||
placeholder: 'minicard-wrapper placeholder',
|
||||
scrollSpeed: 10,
|
||||
start(evt, ui) {
|
||||
ui.helper.css('z-index', 1000);
|
||||
ui.placeholder.height(ui.helper.height());
|
||||
|
||||
@@ -6,12 +6,12 @@ head
|
||||
where the application is deployed with a path prefix, but it seems to be
|
||||
difficult to do that cleanly with Blaze -- at least without adding extra
|
||||
packages.
|
||||
link(rel="shortcut icon" type="image/x-icon" href="favicon.ico")
|
||||
link(rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png")
|
||||
link(rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png")
|
||||
link(rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png")
|
||||
link(rel="shortcut icon" type="image/x-icon" href="/favicon.ico")
|
||||
link(rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png")
|
||||
link(rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png")
|
||||
link(rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png")
|
||||
link(rel="manifest" crossOrigin="use-credentials" href="/site.webmanifest")
|
||||
link(rel="mask-icon" href="safari-pinned-tab.svg" color="#5bbad5")
|
||||
link(rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5")
|
||||
meta(name="apple-mobile-web-app-title" content="Wekan")
|
||||
meta(name="application-name" content="Wekan")
|
||||
meta(name="msapplication-TileColor" content="#00aba9")
|
||||
|
||||
+13
-2
@@ -4,8 +4,19 @@ import { TAPi18n } from '/imports/i18n';
|
||||
// the language reactively. If the user is not connected we use the language
|
||||
// information provided by the browser, and default to english.
|
||||
|
||||
Meteor.startup(() => {
|
||||
const currentUser = Meteor.user();
|
||||
Meteor.startup(async () => {
|
||||
let currentUser = Meteor.user();
|
||||
// If we're still logging in, wait (#4967)
|
||||
if (!currentUser && Meteor.loggingIn()) {
|
||||
await new Promise((resolve) => {
|
||||
Tracker.autorun(() => {
|
||||
if (!Meteor.loggingIn()) {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
currentUser = Meteor.user();
|
||||
}
|
||||
// Select first available language
|
||||
const [language] = [
|
||||
// User profile
|
||||
|
||||
+45
-32
@@ -331,20 +331,51 @@ Utils = {
|
||||
increment = 1;
|
||||
// If we drop the card in the first position
|
||||
} else if (!prevData) {
|
||||
base = nextData.sort - 1;
|
||||
increment = -1;
|
||||
const nextSortIndex = nextData.sort;
|
||||
const ceil = Math.ceil(nextSortIndex - 1);
|
||||
if (ceil < nextSortIndex) {
|
||||
increment = nextSortIndex - ceil;
|
||||
base = nextSortIndex - increment;
|
||||
} else {
|
||||
base = nextData.sort - 1;
|
||||
increment = -1;
|
||||
}
|
||||
// If we drop the card in the last position
|
||||
} else if (!nextData) {
|
||||
base = prevData.sort + 1;
|
||||
increment = 1;
|
||||
const prevSortIndex = prevData.sort;
|
||||
const floor = Math.floor(prevSortIndex + 1);
|
||||
if (floor > prevSortIndex) {
|
||||
increment = prevSortIndex - floor;
|
||||
base = prevSortIndex - increment;
|
||||
} else {
|
||||
base = prevData.sort + 1;
|
||||
increment = 1;
|
||||
}
|
||||
}
|
||||
// In the general case take the average of the previous and next element
|
||||
// sort indexes.
|
||||
else {
|
||||
const prevSortIndex = prevData.sort;
|
||||
const nextSortIndex = nextData.sort;
|
||||
increment = (nextSortIndex - prevSortIndex) / (nItems + 1);
|
||||
base = prevSortIndex + increment;
|
||||
if (nItems == 1 ) {
|
||||
if (prevSortIndex < 0 ) {
|
||||
const ceil = Math.ceil(nextSortIndex - 1);
|
||||
if (ceil < nextSortIndex && ceil > prevSortIndex) {
|
||||
increment = ceil - prevSortIndex;
|
||||
}
|
||||
} else {
|
||||
const floor = Math.floor(nextSortIndex - 1);
|
||||
if (floor < nextSortIndex && floor > prevSortIndex) {
|
||||
increment = floor - prevSortIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!increment) {
|
||||
increment = (nextSortIndex - prevSortIndex) / (nItems + 1);
|
||||
}
|
||||
if (!base) {
|
||||
base = prevSortIndex + increment;
|
||||
}
|
||||
}
|
||||
// XXX Return a generator that yield values instead of a base with a
|
||||
// increment number.
|
||||
@@ -356,34 +387,16 @@ Utils = {
|
||||
|
||||
// Determine the new sort index
|
||||
calculateIndex(prevCardDomElement, nextCardDomElement, nCards = 1) {
|
||||
let base, increment;
|
||||
// If we drop the card to an empty column
|
||||
if (!prevCardDomElement && !nextCardDomElement) {
|
||||
base = 0;
|
||||
increment = 1;
|
||||
// If we drop the card in the first position
|
||||
} else if (!prevCardDomElement) {
|
||||
base = Blaze.getData(nextCardDomElement).sort - 1;
|
||||
increment = -1;
|
||||
// If we drop the card in the last position
|
||||
} else if (!nextCardDomElement) {
|
||||
base = Blaze.getData(prevCardDomElement).sort + 1;
|
||||
increment = 1;
|
||||
let prevData = null;
|
||||
let nextData = null;
|
||||
if (prevCardDomElement) {
|
||||
prevData = Blaze.getData(prevCardDomElement)
|
||||
}
|
||||
// In the general case take the average of the previous and next element
|
||||
// sort indexes.
|
||||
else {
|
||||
const prevSortIndex = Blaze.getData(prevCardDomElement).sort;
|
||||
const nextSortIndex = Blaze.getData(nextCardDomElement).sort;
|
||||
increment = (nextSortIndex - prevSortIndex) / (nCards + 1);
|
||||
base = prevSortIndex + increment;
|
||||
if (nextCardDomElement) {
|
||||
nextData = Blaze.getData(nextCardDomElement);
|
||||
}
|
||||
// XXX Return a generator that yield values instead of a base with a
|
||||
// increment number.
|
||||
return {
|
||||
base,
|
||||
increment,
|
||||
};
|
||||
const ret = Utils.calculateIndexData(prevData, nextData, nCards);
|
||||
return ret;
|
||||
},
|
||||
|
||||
manageCustomUI() {
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
"add-cover": "Gehitu azaleko irudia minitxartelera",
|
||||
"add-label": "Gehitu etiketa",
|
||||
"add-list": "Gehitu zerrenda",
|
||||
"add-after-list": "Add After List",
|
||||
"add-after-list": "Gehitu zerrendaren ondoren",
|
||||
"add-members": "Gehitu kideak",
|
||||
"added": "Gehituta",
|
||||
"addMemberPopup-title": "Kideak",
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
"activity-archived": "%sをアーカイブしました",
|
||||
"activity-attached": "%s を %s に添付しました",
|
||||
"activity-created": "%s を作成しました",
|
||||
"activity-customfield-created": "created custom field %s",
|
||||
"activity-customfield-created": "カスタムフィールド %s を作成しました",
|
||||
"activity-excluded": "%s を %s から除外しました",
|
||||
"activity-imported": "imported %s into %s from %s",
|
||||
"activity-imported-board": "imported %s from %s",
|
||||
@@ -306,7 +306,7 @@
|
||||
"linkCardPopup-title": "カードをリンク",
|
||||
"searchElementPopup-title": "検索",
|
||||
"copyCardPopup-title": "カードをコピー",
|
||||
"copyManyCardsPopup-title": "Copy Template to Many Cards",
|
||||
"copyManyCardsPopup-title": "テンプレートから複数カードにコピー",
|
||||
"copyManyCardsPopup-instructions": "作成されるカードのタイトルと説明をJSON形式で指定",
|
||||
"copyManyCardsPopup-format": "[ {\"title\": \"1つ目のカードタイトル\", \"description\":\"1つ目のカードの説明\"}, {\"title\":\"2つ目のカードタイトル\",\"description\":\"2つ目のカードの説明\"},{\"title\":\"最後のカードタイトル\",\"description\":\"最後のカードの説明\"} ]",
|
||||
"create": "作成",
|
||||
@@ -388,7 +388,7 @@
|
||||
"export-board-csv": "ボードをCSVにエクスポート",
|
||||
"export-board-tsv": "ボードをTSVにエクスポート",
|
||||
"export-board-excel": "ボードをExcelにエクスポート",
|
||||
"user-can-not-export-excel": "ユーザーはExcelにエクスポートできません ",
|
||||
"user-can-not-export-excel": "ユーザーはExcelにエクスポートできません",
|
||||
"export-board-html": "ボードをHTMLにエクスポート",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -432,7 +432,7 @@
|
||||
"filter-to-selection": "フィルターした項目を全選択",
|
||||
"other-filters-label": "その他のフィルタ",
|
||||
"advanced-filter-label": "高度なフィルター",
|
||||
"advanced-filter-description": "高度なフィルタでは次のような演算子を使用できます:== != <= >= && || ( )\n半角スペースは演算子の区切り文字として使用します。\n\nフィールド名や値を使用したフィルタが可能です。\n例:Field1 == Value1\n\n注意:フィールド名や値にスペースが含まれる場合、それらをシングルクォーテーションで囲む必要があります。\n例:'Field 1' == 'Value 1'\n\n単体の制御文字 (' /) は無視されますので、\\\\を使用することができます。\n例:Field1 == I\\\\'m\n\n複数の条件を組み合わせることもできます。\n例:F1 == V1 || F1 == V2\n\n基本的にすべての演算子は左から右に評価されます。\n丸カッコを使用することで順序を変更できます。\n例:F1 == V1 && ( F2 == V2 || F2 == V3 )\n\nテキストフィールドでは正規表現を使用した検索もできます。\n例:F1 == /Tes.*/i",
|
||||
"advanced-filter-description": "高度なフィルタでは次のような演算子を使用できます:== != <= >= && || ( )\n半角スペースは演算子の区切り文字として使用します。\n\nフィールド名や値を使用したフィルタが可能です。\n例:Field1 == Value1\n\n注意:フィールド名や値にスペースが含まれる場合、それらをシングルクォーテーションで囲む必要があります。\n例:'Field 1' == 'Value 1'\n\n単体の制御文字 (' \\\\/) は無視されますので、\\\\を使用することができます。\n例:Field1 == I\\\\'m\n\n複数の条件を組み合わせることもできます。\n例:F1 == V1 || F1 == V2\n\n基本的にすべての演算子は左から右に評価されます。\n丸カッコを使用することで順序を変更できます。\n例:F1 == V1 && ( F2 == V2 || F2 == V3 )\n\nテキストフィールドでは正規表現を使用した検索もできます。\n例:F1 == /Tes.*/i",
|
||||
"fullname": "フルネーム",
|
||||
"header-logo-title": "自分のボードページに戻る。",
|
||||
"hide-system-messages": "システムメッセージを隠す",
|
||||
@@ -524,7 +524,7 @@
|
||||
"normal": "通常",
|
||||
"normal-desc": "カードの閲覧と編集が可能。設定変更不可。",
|
||||
"not-accepted-yet": "招待はアクセプトされていません",
|
||||
"notify-participate": "Receive updates to any cards you participate as creator or member",
|
||||
"notify-participate": "作成した、またはメンバーとなったカードの更新情報を受け取る",
|
||||
"notify-watch": "ウォッチしているすべてのボード、リスト、カードの更新情報を受け取る",
|
||||
"optional": "任意",
|
||||
"or": "or",
|
||||
@@ -656,15 +656,15 @@
|
||||
"email-smtp-test-text": "メールを送信しました",
|
||||
"error-invitation-code-not-exist": "招待コードが存在しません",
|
||||
"error-notAuthorized": "このページを参照する権限がありません。",
|
||||
"webhook-title": "Webhook Name",
|
||||
"webhook-title": "Webフック名",
|
||||
"webhook-token": "トークン(認証用オプション)",
|
||||
"outgoing-webhooks": "Outgoing Webhooks",
|
||||
"outgoing-webhooks": "発信Webフック",
|
||||
"bidirectional-webhooks": "双方向Webフック",
|
||||
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
|
||||
"outgoingWebhooksPopup-title": "発信Webフック",
|
||||
"boardCardTitlePopup-title": "カード名フィルタ",
|
||||
"disable-webhook": "このWebフックを無効化",
|
||||
"global-webhook": "グローバルWebフック",
|
||||
"new-outgoing-webhook": "New Outgoing Webhook",
|
||||
"new-outgoing-webhook": "発信Webフックの作成",
|
||||
"no-name": "(名前なし)",
|
||||
"Node_version": "Nodeバージョン",
|
||||
"Meteor_version": "Meteor バージョン",
|
||||
@@ -896,7 +896,7 @@
|
||||
"almostdue": "期限 %s が近づいています",
|
||||
"pastdue": "期限 %s が過ぎています",
|
||||
"duenow": "期限 %s は本日です",
|
||||
"act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
|
||||
"act-newDue": "__list __ / __ card__に1回目の有効期限アラートがあります [__board__]",
|
||||
"act-withDue": "__list __ / __ card__ の有効期限のアラート [__board__]",
|
||||
"act-almostdue": "__card__ の期限日時 (__timeValue__) が近づいています",
|
||||
"act-pastdue": "__card__ の期限日時 (__timeValue__) が過ぎています",
|
||||
@@ -1047,7 +1047,7 @@
|
||||
"operator-debug-invalid": "%s is not a valid debug predicate",
|
||||
"next-page": "次のページ",
|
||||
"previous-page": "前のページ",
|
||||
"heading-notes": "注意\n ",
|
||||
"heading-notes": "注意",
|
||||
"globalSearch-instructions-heading": "検索手順",
|
||||
"globalSearch-instructions-description": "検索は演算子を含めた絞り込みが可能です。演算子は、演算子の名前と値を半角コロンで区切った記述で指定します。例えば、`リスト:対応不可`と指定すると、*対応不可*という名前のリストに含まれるカードという制約で検索します。値にスペースや特殊文字が含まれる場合は引用符で囲む必要があります(例:`__operator_list__:\"レビュー 本日中\"`)。",
|
||||
"globalSearch-instructions-operators": "有効な演算子:",
|
||||
@@ -1075,13 +1075,13 @@
|
||||
"globalSearch-instructions-status-private": "`__predicate_private__` - 非公開のボードにあるカード",
|
||||
"globalSearch-instructions-operator-has": "`__operator_has__:<field>` - *<field>* は`__predicate_attachment__`、`__predicate_checklist__`、`__predicate_description__`、`__predicate_start__`、`__predicate_due__`、`__predicate_end__`、`__predicate_assignee__`、`__predicate_member__` のいずれかを指定します。*<field>* の前に「`-`」を記述すると、そのフィールドに値がないものを検索します(例:「`所有:-期限日`」は期限日がないカードを検索します)。",
|
||||
"globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - *<sort-name>* は `__predicate_due__`、`__predicate_created__`、`__predicate_modified__` のいずれかを指定します。降順にする場合は、並べ替え名の前に「`-`」を記述します。",
|
||||
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - 「*<n>*」には、ページごとに表示されるカードの数を表す正の整数を指定します。 ",
|
||||
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - 「*<n>*」には、ページごとに表示されるカードの数を表す正の整数を指定します。",
|
||||
"globalSearch-instructions-notes-1": "複数の演算子を指定できます。",
|
||||
"globalSearch-instructions-notes-2": "同じ演算子はOR条件になります。複数の条件のいずれかに一致したカードが検索されます。`__operator_list__:有効 __operator_list__:対応不要` の場合、リスト名が *有効* または *対応不要* のカードが検索されます。",
|
||||
"globalSearch-instructions-notes-3": "異なる演算子はAND条件になります。異なる演算子すべてに一致したカードのみが検索されます。`__operator_list__:有効 __operator_label__:赤` は、*有効* のリストの中の *赤* のラベルのカードのみが検索されます。",
|
||||
"globalSearch-instructions-notes-3-2": "日付には正負の整数や、現在からの期間として `__predicate_week__`、`__predicate_month__`、`__predicate_quarter__`、`__predicate_year__` を指定できます。",
|
||||
"globalSearch-instructions-notes-4": "テキスト検索では大文字と小文字は区別されません。",
|
||||
"globalSearch-instructions-notes-5": "デフォルトではアーカイブされたカードは検索されません。 ",
|
||||
"globalSearch-instructions-notes-5": "デフォルトではアーカイブされたカードは検索されません。",
|
||||
"link-to-search": "この検索へのリンク",
|
||||
"excel-font": "Arial",
|
||||
"number": "数値",
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -739,6 +739,12 @@ export default {
|
||||
name: "ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ",
|
||||
load: () => import('./data/zgh.i18n.json'),
|
||||
},
|
||||
"yue_CN": {
|
||||
code: "yue",
|
||||
tag: "yue_CN",
|
||||
name: "廣東話",
|
||||
load: () => import('./data/yue_CN.i18n.json'),
|
||||
},
|
||||
"zh-CN": {
|
||||
code: "zh",
|
||||
tag: "zh-CN",
|
||||
@@ -757,6 +763,12 @@ export default {
|
||||
name: "简化字",
|
||||
load: () => import('./data/zh-Hans.i18n.json'),
|
||||
},
|
||||
"zh-Hant": {
|
||||
code: "zh",
|
||||
tag: "zh-Hant",
|
||||
name: "正體字",
|
||||
load: () => import('./data/zh-Hant.i18n.json'),
|
||||
},
|
||||
"zh-HK": {
|
||||
code: "zh",
|
||||
tag: "zh-HK",
|
||||
|
||||
@@ -815,6 +815,18 @@ Cards.helpers({
|
||||
}
|
||||
},
|
||||
|
||||
firstChecklist() {
|
||||
const checklists = this.checklists().fetch();
|
||||
const ret = _.first(checklists);
|
||||
return ret;
|
||||
},
|
||||
|
||||
lastChecklist() {
|
||||
const checklists = this.checklists().fetch();
|
||||
const ret = _.last(checklists);
|
||||
return ret;
|
||||
},
|
||||
|
||||
checklistItemCount() {
|
||||
const checklists = this.checklists().fetch();
|
||||
return checklists
|
||||
|
||||
@@ -91,6 +91,11 @@ Checklists.helpers({
|
||||
{ sort: ['sort'] },
|
||||
);
|
||||
},
|
||||
firstItem() {
|
||||
const allItems = this.items().fetch();
|
||||
const ret = _.first(allItems);
|
||||
return ret;
|
||||
},
|
||||
lastItem() {
|
||||
const allItems = this.items().fetch();
|
||||
const ret = allItems[allItems.length - 1];
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v6.97.0",
|
||||
"version": "v6.98.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v6.97.0",
|
||||
"version": "v6.98.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"repository": {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Wekan REST API v6.97</title>
|
||||
<title>Wekan REST API v6.98</title>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
@@ -1558,7 +1558,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<ul class="toc-list-h1">
|
||||
|
||||
<li>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v6.97">Wekan REST API v6.97</a>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v6.98">Wekan REST API v6.98</a>
|
||||
|
||||
</li>
|
||||
|
||||
@@ -2176,7 +2176,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="wekan-rest-api">Wekan REST API v6.97</h1>
|
||||
<h1 id="wekan-rest-api">Wekan REST API v6.98</h1>
|
||||
<blockquote>
|
||||
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
|
||||
</blockquote>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v6.97
|
||||
version: v6.98
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
|
||||
+2
-2
@@ -146,9 +146,9 @@ do
|
||||
|
||||
"Run Meteor for dev on http://CURRENT-IP-ADDRESS:4000")
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
IPADDRESS=$(ifconfig | grep broadcast | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1)
|
||||
IPADDRESS=$(ifconfig | grep broadcast | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1 | grep '192.')
|
||||
else
|
||||
IPADDRESS=$(ip a | grep 'noprefixroute' | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1)
|
||||
IPADDRESS=$(ip a | grep 'noprefixroute' | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1 | grep '192.')
|
||||
fi
|
||||
echo "Your IP address is $IPADDRESS"
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 697,
|
||||
appVersion = 698,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "6.97.0~2023-06-10"),
|
||||
appMarketingVersion = (defaultText = "6.98.0~2023-06-22"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
+4
-4
@@ -1,5 +1,5 @@
|
||||
name: wekan
|
||||
version: '6.97'
|
||||
version: '6.98'
|
||||
base: core20
|
||||
summary: Open Source kanban
|
||||
description: |
|
||||
@@ -168,9 +168,9 @@ parts:
|
||||
# Cleanup
|
||||
mkdir .build
|
||||
cd .build
|
||||
wget https://github.com/wekan/wekan/releases/download/v6.97/wekan-6.97-amd64.zip
|
||||
unzip wekan-6.97-amd64.zip
|
||||
rm wekan-6.97-amd64.zip
|
||||
wget https://github.com/wekan/wekan/releases/download/v6.98/wekan-6.98-amd64.zip
|
||||
unzip wekan-6.98-amd64.zip
|
||||
rm wekan-6.98-amd64.zip
|
||||
cd ..
|
||||
##cd .build/bundle
|
||||
##find . -type d -name '*-garbage*' | xargs rm -rf
|
||||
|
||||
Reference in new issue
Block a user