Skip to content

Commit a6c7efd

Browse files
committed
Merge branch 'main' into beta
2 parents d1068a7 + 9d63feb commit a6c7efd

File tree

10 files changed

+967
-703
lines changed

10 files changed

+967
-703
lines changed

addon/components/single-document-details.hbs

+16-3
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
id="date"
101101
name="date"
102102
class="uk-input"
103-
@locale={{this.locale}}
103+
@locale={{this.flatpickrLocale}}
104104
@date={{or @document.date null}}
105105
@altFormat={{this.dateFormat}}
106106
@altInput={{true}}
@@ -164,7 +164,20 @@
164164
</ul>
165165
</div>
166166

167-
<div class="uk-grid uk-grid-small {{if this.displayConvertButton 'uk-child-width-1-3' 'uk-child-width-1-2'}}" uk-grid>
167+
<div class="uk-grid uk-grid-small uk-child-width-1-2" uk-grid>
168+
{{#if this.displayWebDAVButton}}
169+
<div>
170+
<UkButton
171+
@size="small"
172+
class="uk-width-1"
173+
@onClick={{this.openWebDAV.perform}}
174+
data-test-web-dav-button
175+
>
176+
{{t "alexandria.document-details.web-dav"}}
177+
</UkButton>
178+
</div>
179+
{{/if}}
180+
168181
{{#if this.displayConvertButton}}
169182
<div>
170183
<UkButton
@@ -269,4 +282,4 @@
269282
</ul>
270283

271284
<TagManager @documents={{array @document}} />
272-
</div>
285+
</div>

addon/components/single-document-details.js

+45-20
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { action } from "@ember/object";
22
import { inject as service } from "@ember/service";
33
import { tracked } from "@glimmer/tracking";
4-
import { restartableTask, dropTask } from "ember-concurrency";
4+
import { task } from "ember-concurrency";
5+
import lang from "flatpickr/dist/l10n";
56
import { DateTime } from "luxon";
67

78
import DocumentCard from "./document-card";
@@ -24,22 +25,34 @@ export default class SingleDocumentDetailsComponent extends DocumentCard {
2425
@tracked editDate = false;
2526
@tracked validTitle = true;
2627

28+
get locale() {
29+
return this.intl.primaryLocale.split("-")[0];
30+
}
31+
32+
get flatpickrLocale() {
33+
return lang[this.locale];
34+
}
35+
2736
get dateFormat() {
28-
const language = this.intl.primaryLocale.split("-")[0];
2937
const defaultFormat = "m/d/Y";
3038
const formats = { de: "d.m.Y", fr: "d.m.Y", en: defaultFormat };
3139

32-
return formats[language] ?? defaultFormat;
40+
return formats[this.locale] ?? defaultFormat;
41+
}
42+
43+
get isWordProcessingFormat() {
44+
return [
45+
"application/vnd.oasis.opendocument.text",
46+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
47+
].includes(this.args.document.latestFile?.value?.mimeType);
48+
}
49+
50+
get displayWebDAVButton() {
51+
return this.config.enableWebDAV && this.isWordProcessingFormat;
3352
}
3453

3554
get displayConvertButton() {
36-
return (
37-
this.config.enablePDFConversion &&
38-
[
39-
"application/vnd.oasis.opendocument.text",
40-
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
41-
].includes(this.args.document.latestFile?.value?.mimeType)
42-
);
55+
return this.config.enablePDFConversion && this.isWordProcessingFormat;
4356
}
4457

4558
@action updateDocumentTitle({ target: { value: title } }) {
@@ -75,38 +88,37 @@ export default class SingleDocumentDetailsComponent extends DocumentCard {
7588
this.documents.enableShortcuts();
7689
}
7790

78-
@restartableTask *saveDocument(event) {
91+
saveDocument = task({ restartable: true }, async (event) => {
7992
event?.preventDefault();
8093

8194
try {
82-
yield this.args.document.save();
95+
await this.args.document.save();
8396
this.resetState();
8497
this.notification.success(this.intl.t("alexandria.success.update"));
8598
} catch (error) {
8699
this.args.document.rollbackAttributes();
87100
new ErrorHandler(this, error).notify("alexandria.errors.update");
88101
}
89-
}
102+
});
90103

91-
@dropTask *uploadReplacement(event) {
104+
uploadReplacement = task({ drop: true }, async (event) => {
92105
try {
93106
const [file] = event.target.files;
94-
yield this.documents.replace(this.args.document, file);
107+
await this.documents.replace(this.args.document, file);
95108
} catch (error) {
96109
new ErrorHandler(this, error).notify(
97110
"alexandria.errors.replace-document",
98111
);
99112
}
100-
}
113+
});
101114

102-
@dropTask
103-
*convertDocument(event) {
115+
convertDocument = task({ drop: true }, async (event) => {
104116
event?.preventDefault();
105117
try {
106118
const modelName = "document";
107119
const adapter = this.store.adapterFor(modelName);
108120
const url = adapter.buildURL(modelName, this.args.document.id);
109-
yield this.fetch.fetch(`${url}/convert`, {
121+
await this.fetch.fetch(`${url}/convert`, {
110122
method: "POST",
111123
});
112124

@@ -116,5 +128,18 @@ export default class SingleDocumentDetailsComponent extends DocumentCard {
116128
} catch (error) {
117129
new ErrorHandler(this, error).notify("alexandria.errors.convert-pdf");
118130
}
119-
}
131+
});
132+
133+
openWebDAV = task({ drop: true }, async (event) => {
134+
event?.preventDefault();
135+
try {
136+
const fileId = this.args.document.latestFile.value.id;
137+
138+
const file = await this.store.findRecord("file", fileId);
139+
140+
window.open(file.webdavUrl, "_blank");
141+
} catch (error) {
142+
new ErrorHandler(this, error).notify("alexandria.errors.open-webdav");
143+
}
144+
});
120145
}

addon/models/file.js

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export default class FileModel extends Model {
44
@attr variant;
55
@attr name;
66
@attr downloadUrl;
7+
@attr webdavUrl;
78
@attr metainfo;
89
@attr content; // needed for upload
910
@attr mimeType;

addon/services/alexandria-config.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export default class AlexandriaConfigService extends Service {
77
zipDownloadNamespace = undefined;
88

99
enablePDFConversion = false;
10+
enableWebDAV = false;
1011

1112
markIcons = {};
1213

app/styles/ember-alexandria.scss

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
@import "custom-uikit-rules";
33
@import "ember-uikit";
44
@import "skeleton-loading";
5+
@import "flatpickr/dist/flatpickr";
6+
@import "flatpickr/dist/themes/airbnb";
57

68
$tag-hover-shadow: 0 2px 8px rgba(0 0 0 / 20%);
79

package.json

+11-10
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333
"test:ember-compatibility": "ember try:each"
3434
},
3535
"dependencies": {
36-
"@babel/core": "^7.23.9",
36+
"@babel/core": "^7.24.0",
3737
"@ember/legacy-built-in-components": "^0.5.0",
3838
"@ember/optional-features": "^2.1.0",
3939
"@ember/render-modifiers": "^2.1.0",
40-
"@embroider/macros": "^1.13.5",
40+
"@embroider/macros": "^1.14.0",
4141
"@fortawesome/ember-fontawesome": "^2.0.0",
4242
"@fortawesome/free-regular-svg-icons": "^6.5.1",
4343
"@fortawesome/free-solid-svg-icons": "^6.5.1",
@@ -53,8 +53,8 @@
5353
"ember-data-resources": "^5.2.1",
5454
"ember-engines-router-service": "^0.5.1",
5555
"ember-fetch": "^8.1.2",
56-
"ember-flatpickr": "^4.0.0",
57-
"ember-intl": "^6.4.1",
56+
"ember-flatpickr": "^7.1.0",
57+
"ember-intl": "^6.5.1",
5858
"ember-localized-model": "^3.2.2",
5959
"ember-modifier": "^4.1.0",
6060
"ember-promise-helpers": "^2.0.0",
@@ -63,13 +63,14 @@
6363
"ember-truth-helpers": "^4.0.3",
6464
"ember-uikit": "^9.0.0",
6565
"file-saver": "^2.0.5",
66+
"flatpickr": "^4.6.13",
6667
"luxon": "^3.4.4"
6768
},
6869
"devDependencies": {
6970
"@adfinis/eslint-config": "2.1.0",
7071
"@adfinis/semantic-release-config": "4.1.0",
7172
"@babel/eslint-parser": "7.23.10",
72-
"@babel/plugin-proposal-decorators": "7.23.9",
73+
"@babel/plugin-proposal-decorators": "7.24.0",
7374
"@ember/test-helpers": "3.3.0",
7475
"@embroider/test-setup": "3.0.3",
7576
"@faker-js/faker": "8.4.1",
@@ -80,7 +81,7 @@
8081
"ember-cli-clean-css": "3.0.0",
8182
"ember-cli-dependency-checker": "3.3.2",
8283
"ember-cli-inject-live-reload": "2.1.0",
83-
"ember-cli-mirage": "3.0.2",
84+
"ember-cli-mirage": "3.0.3",
8485
"ember-cli-sass": "11.0.1",
8586
"ember-cli-sri": "2.1.1",
8687
"ember-cli-terser": "4.0.2",
@@ -96,27 +97,27 @@
9697
"ember-template-lint-plugin-prettier": "5.0.0",
9798
"ember-test-selectors": "6.0.0",
9899
"ember-try": "3.0.0",
99-
"eslint": "8.56.0",
100+
"eslint": "8.57.0",
100101
"eslint-config-prettier": "9.1.0",
101102
"eslint-plugin-ember": "11.12.0",
102103
"eslint-plugin-import": "2.29.1",
103104
"eslint-plugin-n": "16.6.2",
104105
"eslint-plugin-prettier": "5.1.3",
105-
"eslint-plugin-qunit": "8.0.1",
106+
"eslint-plugin-qunit": "8.1.1",
106107
"graphql": "16.8.1",
107108
"loader.js": "4.7.0",
108109
"miragejs": "0.1.48",
109110
"prettier": "3.2.5",
110111
"qunit": "2.20.1",
111112
"qunit-dom": "3.0.0",
112113
"sass": "1.71.1",
113-
"semantic-release": "23.0.0",
114+
"semantic-release": "23.0.2",
114115
"sinon": "17.0.1",
115116
"stylelint": "16.2.1",
116117
"stylelint-config-standard-scss": "13.0.0",
117118
"stylelint-prettier": "5.0.0",
118119
"stylelint-scss": "6.1.0",
119-
"uikit": "3.18.1",
120+
"uikit": "3.19.1",
120121
"webpack": "5.90.3"
121122
},
122123
"//": [

0 commit comments

Comments
 (0)